diff --git a/src/frontend/src/CustomNodes/GenericNode/components/NodeDescription/index.tsx b/src/frontend/src/CustomNodes/GenericNode/components/NodeDescription/index.tsx index 271bfac55..f43d4b9bc 100644 --- a/src/frontend/src/CustomNodes/GenericNode/components/NodeDescription/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/components/NodeDescription/index.tsx @@ -16,6 +16,10 @@ export default function NodeDescription({ inputClassName, mdClassName, style, + editNameDescription, + setEditNameDescription, + stickyNote, + setHasChangedNodeDescription, }: { description?: string; selected?: boolean; @@ -26,8 +30,11 @@ export default function NodeDescription({ inputClassName?: string; mdClassName?: string; style?: React.CSSProperties; + editNameDescription: boolean; + setEditNameDescription?: (value: boolean) => void; + stickyNote?: boolean; + setHasChangedNodeDescription?: (value: boolean) => void; }) { - const [inputDescription, setInputDescription] = useState(false); const [nodeDescription, setNodeDescription] = useState( description ?? "", ); @@ -36,6 +43,12 @@ export default function NodeDescription({ const overflowRef = useRef(null); const [hasScroll, sethasScroll] = useState(false); + useEffect(() => { + if (selected && editNameDescription) { + takeSnapshot(); + } + }, [editNameDescription]); + useEffect(() => { //timeout to wait for the dom to update setTimeout(() => { @@ -49,13 +62,7 @@ export default function NodeDescription({ } } }, 200); - }, [inputDescription]); - - useEffect(() => { - if (!selected) { - setInputDescription(false); - } - }, [selected]); + }, [editNameDescription]); useEffect(() => { setNodeDescription(description ?? ""); @@ -80,55 +87,81 @@ export default function NodeDescription({ [description, emptyPlaceholder, mdClassName], ); + const handleBlurFn = () => { + setNodeDescription(nodeDescription); + setNode(nodeId, (old) => ({ + ...old, + data: { + ...old.data, + node: { + ...old.data.node, + description: nodeDescription, + }, + }, + })); + if (stickyNote) { + setEditNameDescription?.(false); + } + }; + + const handleKeyDownFn = (e: React.KeyboardEvent) => { + handleKeyDown(e, nodeDescription, ""); + + if (e.key === "Escape") { + setEditNameDescription?.(false); + setNodeDescription(description ?? ""); + + if (stickyNote) { + setNodeDescription(nodeDescription); + setNode(nodeId, (old) => ({ + ...old, + data: { + ...old.data, + node: { + ...old.data.node, + description: nodeDescription, + }, + }, + })); + } + } + }; + + const handleDoubleClickFn = () => { + if (stickyNote) { + setEditNameDescription?.(true); + takeSnapshot(); + } + }; + + const onChange = (e: React.ChangeEvent) => { + setHasChangedNodeDescription?.(true); + setNodeDescription(e.target.value); + }; + return (
- {inputDescription ? ( + {editNameDescription ? ( <>