From 3e707eb9339364058b60cc43c62882ddbd2ae9f7 Mon Sep 17 00:00:00 2001 From: Ivan <8611739+IRBorisov@users.noreply.github.com> Date: Mon, 16 Sep 2024 13:45:58 +0300 Subject: [PATCH] M: Add modifications check for operation editor --- .../DlgEditOperation/DlgEditOperation.tsx | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/rsconcept/frontend/src/dialogs/DlgEditOperation/DlgEditOperation.tsx b/rsconcept/frontend/src/dialogs/DlgEditOperation/DlgEditOperation.tsx index 72e49f67..0b0f0510 100644 --- a/rsconcept/frontend/src/dialogs/DlgEditOperation/DlgEditOperation.tsx +++ b/rsconcept/frontend/src/dialogs/DlgEditOperation/DlgEditOperation.tsx @@ -48,7 +48,8 @@ function DlgEditOperation({ hideWindow, oss, target, onSubmit }: DlgEditOperatio const [isCorrect, setIsCorrect] = useState(true); const [validationText, setValidationText] = useState(''); - const [inputs, setInputs] = useState(oss.graph.expandInputs([target.id])); + const initialInputs = useMemo(() => oss.graph.expandInputs([target.id]), [oss.graph, target.id]); + const [inputs, setInputs] = useState(initialInputs); const inputOperations = useMemo(() => inputs.map(id => oss.operationByID.get(id)!), [inputs, oss.operationByID]); const schemasIDs = useMemo( () => inputOperations.map(operation => operation.result).filter(id => id !== null), @@ -64,7 +65,28 @@ function DlgEditOperation({ hideWindow, oss, target, onSubmit }: DlgEditOperatio [schemasIDs, cache.getSchema] ); - const canSubmit = useMemo(() => alias !== '', [alias]); + const isModified = useMemo( + () => + alias !== target.alias || + title !== target.title || + comment !== target.comment || + JSON.stringify(initialInputs) !== JSON.stringify(inputs) || + JSON.stringify(substitutions) !== JSON.stringify(target.substitutions), + [ + alias, + title, + comment, + target.alias, + target.title, + target.comment, + initialInputs, + inputs, + substitutions, + target.substitutions + ] + ); + + const canSubmit = useMemo(() => isModified && alias !== '', [isModified, alias]); useLayoutEffect(() => { cache.preload(schemasIDs);