Skip to content

Commit 01475e7

Browse files
committed
Better Update Node Function
1 parent 45bc3ab commit 01475e7

3 files changed

Lines changed: 37 additions & 13 deletions

File tree

src/components/engine/Node/index.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55

66
import type { NodeModel } from "@defs/Node";
77

8-
import { useUnsavedChangesContext } from "@contexts/unsavedChanges";
8+
import { useNodeSystemContext } from "@contexts/nodeSystem";
99

1010
import { DynamicIcon } from "@components/commons/DynamicIcon";
1111
import { Glass } from "@components/commons/Glass";
@@ -24,9 +24,7 @@ export function Node({
2424
showCanvas?: boolean;
2525
forcedActive?: boolean;
2626
}) {
27-
const {
28-
setUnsavedChanges,
29-
} = useUnsavedChangesContext()!;
27+
const { updateNode } = useNodeSystemContext()!;
3028

3129
const [active, setActive] = useState(false);
3230
const [baseType, setBaseType] = useState<string>(node.baseType || "text");
@@ -39,8 +37,13 @@ export function Node({
3937
const switchBaseType = useCallback((type: string) => {
4038
node.baseType = type;
4139
setBaseType(type);
42-
setUnsavedChanges(true);
43-
}, [setUnsavedChanges, node]);
40+
updateNode(node.id!, node);
41+
}, [updateNode, node]);
42+
43+
const changeValue = useCallback((value: string) => {
44+
node.value = value;
45+
updateNode(node.id!, node);
46+
}, [updateNode, node]);
4447

4548
return (<>
4649
<div className="node-wrapper">
@@ -73,7 +76,7 @@ export function Node({
7376
<Glass
7477
className={[
7578
"node-context",
76-
node.context.length > 20 ? "left" : "",
79+
node.context.length > 20 ? "side" : "",
7780
].join(" ")}
7881
>
7982
{
@@ -129,10 +132,7 @@ export function Node({
129132
<Input
130133
placeholder="Base Node Value"
131134
defaultValue={node.value || ""}
132-
onChange={(event) => {
133-
node.value = event.target.value;
134-
setUnsavedChanges(true);
135-
}}
135+
onChange={(e) => changeValue(e.target.value)}
136136
/>
137137
</div>
138138
</>)}

src/components/engine/Node/style.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@
117117
pointer-events: auto;
118118
}
119119

120-
.node-context.left {
120+
.node-context.side {
121121
left: calc(100% + 2rem);
122122
top: 50%;
123123
}
124124

125-
.node.active + .node-context.left {
125+
.node.active + .node-context.side {
126126
transform: translateX(0%) translateY(-50%) scale(1);
127127
}
128128

src/contexts/nodeSystem.tsx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const createNodeSystemContext = () => {
1818
nodeSystem: NodeSystem;
1919
entries: string[];
2020
addNode: (baseId: string, node: NodeModel) => void;
21+
updateNode: (nodeId: string, updatedNode: NodeModel) => void;
2122
removeNode: (nodeId: string) => void;
2223
isEntry: (nodeId: string) => boolean;
2324
createEntry: (entryName: string) => void;
@@ -93,6 +94,28 @@ const createNodeSystemContext = () => {
9394
});
9495
}, [setUnsavedChanges]);
9596

97+
const updateNode = useCallback((
98+
nodeId: string,
99+
updatedNode: NodeModel,
100+
) => {
101+
setNodeSystem(prev => {
102+
if (!prev[nodeId]) return prev;
103+
104+
const baseId = prev[nodeId].baseId!;
105+
const index = prev[baseId].nodes.findIndex(n => n.id === nodeId);
106+
107+
if (index !== -1) {
108+
prev[baseId].nodes[index] = {
109+
...prev[baseId].nodes[index],
110+
...updatedNode,
111+
};
112+
}
113+
114+
setUnsavedChanges(true);
115+
return { ...prev };
116+
});
117+
}, [setUnsavedChanges]);
118+
96119
const removeNode = useCallback((nodeId: string) => {
97120
setNodeSystem(prev => {
98121
const baseId: string = prev[nodeId].baseId!;
@@ -120,6 +143,7 @@ const createNodeSystemContext = () => {
120143
nodeSystem,
121144
entries,
122145
addNode,
146+
updateNode,
123147
removeNode,
124148
isEntry,
125149
createEntry,

0 commit comments

Comments
 (0)