M: Add modifications check for operation editor

This commit is contained in:
Ivan 2024-09-16 13:46:13 +03:00
parent 87ed5b39ae
commit 9dec66dbda

View File

@ -48,7 +48,8 @@ function DlgEditOperation({ hideWindow, oss, target, onSubmit }: DlgEditOperatio
const [isCorrect, setIsCorrect] = useState(true); const [isCorrect, setIsCorrect] = useState(true);
const [validationText, setValidationText] = useState(''); const [validationText, setValidationText] = useState('');
const [inputs, setInputs] = useState<OperationID[]>(oss.graph.expandInputs([target.id])); const initialInputs = useMemo(() => oss.graph.expandInputs([target.id]), [oss.graph, target.id]);
const [inputs, setInputs] = useState<OperationID[]>(initialInputs);
const inputOperations = useMemo(() => inputs.map(id => oss.operationByID.get(id)!), [inputs, oss.operationByID]); const inputOperations = useMemo(() => inputs.map(id => oss.operationByID.get(id)!), [inputs, oss.operationByID]);
const schemasIDs = useMemo( const schemasIDs = useMemo(
() => inputOperations.map(operation => operation.result).filter(id => id !== null), () => inputOperations.map(operation => operation.result).filter(id => id !== null),
@ -64,7 +65,28 @@ function DlgEditOperation({ hideWindow, oss, target, onSubmit }: DlgEditOperatio
[schemasIDs, cache.getSchema] [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(() => { useLayoutEffect(() => {
cache.preload(schemasIDs); cache.preload(schemasIDs);