From b1502dc2dc691b85d04a90a82ad55d32f701dd85 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Mon, 31 Mar 2025 11:52:43 +0200 Subject: [PATCH 1/3] 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); From 3079c2c911426f54e8d295083ddbe97ed3aad201 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Mon, 31 Mar 2025 11:55:11 +0200 Subject: [PATCH 2/3] add changeset --- .changeset/thirty-terms-grow.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/thirty-terms-grow.md diff --git a/.changeset/thirty-terms-grow.md b/.changeset/thirty-terms-grow.md new file mode 100644 index 00000000..a2f00e1f --- /dev/null +++ b/.changeset/thirty-terms-grow.md @@ -0,0 +1,5 @@ +--- +'@xyflow/react': patch +--- + +Fix `fitView` not working when returning early in `onNodesChange`. From aa873d6ddc69011c49a355f9b0c640d03dde3cfc Mon Sep 17 00:00:00 2001 From: peterkogo Date: Mon, 31 Mar 2025 13:47:15 +0200 Subject: [PATCH 3/3] enhance fitView scheduling --- packages/react/src/components/BatchProvider/index.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/react/src/components/BatchProvider/index.tsx b/packages/react/src/components/BatchProvider/index.tsx index 8a7d289a..382324da 100644 --- a/packages/react/src/components/BatchProvider/index.tsx +++ b/packages/react/src/components/BatchProvider/index.tsx @@ -52,7 +52,12 @@ export function BatchProvider { + const { fitViewQueued, nodes, setNodes } = store.getState(); + if (fitViewQueued) { + setNodes(nodes); + } + }); } } }, []);