diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ControlsOverlay.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ControlsOverlay.tsx index 4afda5c1..a9993367 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ControlsOverlay.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/ControlsOverlay.tsx @@ -21,9 +21,7 @@ function ControlsOverlay({ constituenta, disabled, modified, processing, onRenam {!disabled || processing ? ( } diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx index 782f6052..7813e821 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta/FormConstituenta.tsx @@ -118,10 +118,10 @@ function FormConstituenta({ const data: ICstUpdateData = { id: state.id, alias: alias, - convention: convention, + term_raw: term, definition_formal: expression, definition_raw: textDefinition, - term_raw: term + convention: convention }; cstUpdate(data, () => toast.success('Изменения сохранены')); } diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx index 021f39ef..21d848f3 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx @@ -46,6 +46,7 @@ import { } from '@/models/rsform'; import { generateAlias } from '@/models/rsformAPI'; import { EXTEOR_TRS_FILE } from '@/utils/constants'; +import { promptUnsaved } from '@/utils/utils'; interface IRSEditContext { schema?: IRSForm; @@ -379,17 +380,25 @@ export const RSEditState = ({ }, [activeCst]); const substitute = useCallback(() => { + if (isModified && !promptUnsaved()) { + return; + } setShowSubstitute(true); - }, []); + }, [isModified]); + + const inlineSynthesis = useCallback(() => { + if (isModified && !promptUnsaved()) { + return; + } + setShowInlineSynthesis(true); + }, [isModified]); const editTermForms = useCallback(() => { if (!activeCst) { return; } - if (isModified) { - if (!window.confirm('Присутствуют несохраненные изменения. Продолжить без их учета?')) { - return; - } + if (isModified && !promptUnsaved()) { + return; } setShowEditTerm(true); }, [isModified, activeCst]); @@ -410,6 +419,9 @@ export const RSEditState = ({ if (!activeCst) { return; } + if (isModified && !promptUnsaved()) { + return; + } const data: ICstTarget = { target: activeCst.id }; @@ -419,27 +431,26 @@ export const RSEditState = ({ setSelected(cstList); } }); - }, [activeCst, setSelected, model]); + }, [activeCst, setSelected, model, isModified]); const promptTemplate = useCallback(() => { + if (isModified && !promptUnsaved()) { + return; + } setInsertCstID(activeCst?.id); setShowTemplates(true); - }, [activeCst]); + }, [activeCst, isModified]); const promptClone = useCallback(() => { - if (isModified) { - if (!window.confirm('Присутствуют несохраненные изменения. Продолжить без их учета?')) { - return; - } + if (isModified && !promptUnsaved()) { + return; } setShowClone(true); }, [isModified]); const download = useCallback(() => { - if (isModified) { - if (!window.confirm('Присутствуют несохраненные изменения. Продолжить без их учета?')) { - return; - } + if (isModified && !promptUnsaved()) { + return; } const fileName = (model.schema?.alias ?? 'Schema') + EXTEOR_TRS_FILE; model.download((data: Blob) => { @@ -515,7 +526,7 @@ export const RSEditState = ({ reindex, reorder, - inlineSynthesis: () => setShowInlineSynthesis(true), + inlineSynthesis, produceStructure, substitute }} diff --git a/rsconcept/frontend/src/utils/utils.tsx b/rsconcept/frontend/src/utils/utils.ts similarity index 90% rename from rsconcept/frontend/src/utils/utils.tsx rename to rsconcept/frontend/src/utils/utils.ts index 87206dff..58d4ed49 100644 --- a/rsconcept/frontend/src/utils/utils.tsx +++ b/rsconcept/frontend/src/utils/utils.ts @@ -95,3 +95,10 @@ export function convertBase64ToBlob(base64String: string): Uint8Array { } return uint8Array; } + +/** + * Prompt user of confirming discarding changes before continue. + */ +export function promptUnsaved(): boolean { + return window.confirm('Присутствуют несохраненные изменения. Продолжить без их учета?'); +}