From 77b24e7f3a6c149875bc071da94b976ea11fbf88 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 27 Mar 2025 13:17:46 +0100 Subject: [PATCH 1/4] fix(fitView): handle uncontrolled flows --- packages/react/src/store/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/react/src/store/index.ts b/packages/react/src/store/index.ts index 8e64b51c..cffc9644 100644 --- a/packages/react/src/store/index.ts +++ b/packages/react/src/store/index.ts @@ -45,7 +45,7 @@ const createStore = ({ async function resolveFitView() { const { nodeLookup, panZoom, fitViewOptions, fitViewResolver, width, height, minZoom, maxZoom } = get(); - if (!panZoom || !fitViewResolver) { + if (!panZoom) { return; } @@ -61,7 +61,7 @@ const createStore = ({ fitViewOptions ); - fitViewResolver.resolve(true); + fitViewResolver?.resolve(true); /** * wait for the fitViewport to resolve before deleting the resolver, * we want to reuse the old resolver if the user calls fitView again in the mean time @@ -89,6 +89,7 @@ const createStore = ({ checkEquality: true, }); + console.log(fitViewQueued, nodesInitialized); if (fitViewQueued && nodesInitialized) { resolveFitView(); set({ nodes, fitViewQueued: false, fitViewOptions: undefined }); From 6dfea6863a3cbd91f932bf54a6dba549bd248bd5 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 27 Mar 2025 13:18:17 +0100 Subject: [PATCH 2/4] chore(changeset): add --- .changeset/lovely-rabbits-yawn.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/lovely-rabbits-yawn.md diff --git a/.changeset/lovely-rabbits-yawn.md b/.changeset/lovely-rabbits-yawn.md new file mode 100644 index 00000000..06432dfb --- /dev/null +++ b/.changeset/lovely-rabbits-yawn.md @@ -0,0 +1,5 @@ +--- +'@xyflow/react': patch +--- + +Handle fitView for uncontrolled flows From 150549cd4fa767b006201b430ea870692aad537e Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 27 Mar 2025 13:20:57 +0100 Subject: [PATCH 3/4] chore(store): cleanup --- packages/react/src/store/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react/src/store/index.ts b/packages/react/src/store/index.ts index cffc9644..924e83cf 100644 --- a/packages/react/src/store/index.ts +++ b/packages/react/src/store/index.ts @@ -89,7 +89,6 @@ const createStore = ({ checkEquality: true, }); - console.log(fitViewQueued, nodesInitialized); if (fitViewQueued && nodesInitialized) { resolveFitView(); set({ nodes, fitViewQueued: false, fitViewOptions: undefined }); From 95854aa7319a32836cac2d9f03cde84bcd7bbd53 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 27 Mar 2025 13:29:08 +0100 Subject: [PATCH 4/4] chore(tests): adjust pan test --- tests/playwright/e2e/pane.spec.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tests/playwright/e2e/pane.spec.ts b/tests/playwright/e2e/pane.spec.ts index 802e0139..4c27e33c 100644 --- a/tests/playwright/e2e/pane.spec.ts +++ b/tests/playwright/e2e/pane.spec.ts @@ -20,18 +20,21 @@ test.describe('Pane default', () => { await expect(pane).toBeAttached(); const paneBox = await pane.boundingBox(); - const transformsBefore = await getTransform(viewport); + const movementPx = 100; await pane.hover(); await page.mouse.down(); // Move pane by 100, 100 - await page.mouse.move(paneBox!.x + paneBox!.width * 0.5 + 100, paneBox!.y + paneBox!.height * 0.5 + 100); + await page.mouse.move( + paneBox!.x + paneBox!.width * 0.5 + movementPx, + paneBox!.y + paneBox!.height * 0.5 + movementPx + ); const transformsAfter = await getTransform(viewport); - expect(Math.floor(transformsAfter.translateX - transformsBefore.translateX)).toBe(100); - expect(Math.floor(transformsAfter.translateY - transformsBefore.translateY)).toBe(100); + expect(movementPx - Math.floor(transformsAfter.translateX - transformsBefore.translateX)).toBeLessThan(1); + expect(movementPx - Math.floor(transformsAfter.translateY - transformsBefore.translateY)).toBeLessThan(1); }); test('scrolling the default pane zooms it', async ({ page }) => {