From b1502dc2dc691b85d04a90a82ad55d32f701dd85 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Mon, 31 Mar 2025 11:52:43 +0200 Subject: [PATCH] Dont call onNodesChange when there are no changes & call setNodes instead --- .../src/components/BatchProvider/index.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/react/src/components/BatchProvider/index.tsx b/packages/react/src/components/BatchProvider/index.tsx index 0ef7e399..8a7d289a 100644 --- a/packages/react/src/components/BatchProvider/index.tsx +++ b/packages/react/src/components/BatchProvider/index.tsx @@ -28,7 +28,7 @@ export function BatchProvider(); const nodeQueueHandler = useCallback((queueItems: QueueItem[]) => { - const { nodes = [], setNodes, hasDefaultNodes, onNodesChange, nodeLookup } = store.getState(); + const { nodes = [], setNodes, hasDefaultNodes, onNodesChange, nodeLookup, fitViewQueued } = store.getState(); /* * This is essentially an `Array.reduce` in imperative clothing. Processing @@ -43,12 +43,17 @@ export function BatchProvider[] - ); + const changes = getElementsDiffChanges({ + items: next, + lookup: nodeLookup, + }) as NodeChange[]; + if (changes.length > 0) { + onNodesChange(changes); + } else if (fitViewQueued) { + // If there are no changes to the nodes, we still need to call setNodes + // to trigger a re-render and fitView. + setNodes(next); + } } }, []); const nodeQueue = useQueue(nodeQueueHandler);