@@ -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