Skip to content

Commit 36e23fd

Browse files
authored
Merge pull request #108 from pyiron/nojson
Write node json to model only when necessary
2 parents a724d3c + fc68c05 commit 36e23fd

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

js/widget.jsx

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,6 @@ const render = createRender(() => {
144144

145145
model.on("change:nodes", () => {
146146
const new_nodes = model.get("nodes")
147-
// console.log("load nodes: ", new_nodes);
148-
149147
setNodes(JSON.parse(new_nodes));
150148
});
151149

@@ -158,37 +156,49 @@ const render = createRender(() => {
158156
(changes) => {
159157
setNodes((nds) => {
160158
const new_nodes = applyNodeChanges(changes, nds);
159+
var selectionChanged = false;
161160
for (const i in changes) {
162161
if (Object.hasOwn(changes[i], 'selected')) {
163162
if (changes[i].selected){
164163
for (const k in new_nodes){
165164
if (new_nodes[k].id == changes[i].id) {
166165
selectedNodes.push(new_nodes[k]);
167-
}
168-
166+
selectionChanged = true;
167+
}
169168
}
170169
}
171170
else{
172171
for (const j in selectedNodes){
173172
if (selectedNodes[j].id == changes[i].id) {
174-
//const index = selectedNodes[j].indexOf(changes[i].id);
175173
selectedNodes.splice(j, 1);
176-
}
174+
selectionChanged = true;
175+
}
177176
}
178177
}
179178
}
180179
}
181180
console.log('selectedNodes:', selectedNodes);
182181
console.log('nodes:', nodes);
183-
model.set("nodes", JSON.stringify(new_nodes));
184-
model.set("selected_nodes", JSON.stringify(selectedNodes));
185-
model.save_changes();
182+
if (selectionChanged) {
183+
model.set("selected_nodes", JSON.stringify(selectedNodes));
184+
model.save_changes()
185+
}
186186
return new_nodes;
187187
});
188188
},
189189
[setNodes],
190190
);
191-
191+
192+
const onNodesDragStop = useCallback(
193+
(event, node, nodes) => {
194+
// communicates updated positions to python backend, can probably be cut
195+
// in the future
196+
model.set("nodes", JSON.stringify(nodes));
197+
model.save_changes();
198+
},
199+
[nodes]
200+
);
201+
192202
const onEdgesChange = useCallback(
193203
(changes) => {
194204
setEdges((eds) => {
@@ -358,6 +368,7 @@ const render = createRender(() => {
358368
nodes={nodes}
359369
edges={edges}
360370
onNodesChange={onNodesChange}
371+
onNodesDragStop={onNodesDragStop}
361372
onEdgesChange={onEdgesChange}
362373
onConnect={onConnect}
363374
onNodesDelete={onNodesDelete}

0 commit comments

Comments
 (0)