Merge pull request #5120 from xyflow/fix/fit-view-uncontrolled

Fix/fit view uncontrolled
This commit is contained in:
Moritz Klack
2025-03-27 13:29:52 +01:00
committed by GitHub
3 changed files with 14 additions and 6 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@xyflow/react': patch
---
Handle fitView for uncontrolled flows
+2 -2
View File
@@ -45,7 +45,7 @@ const createStore = ({
async function resolveFitView() { async function resolveFitView() {
const { nodeLookup, panZoom, fitViewOptions, fitViewResolver, width, height, minZoom, maxZoom } = get(); const { nodeLookup, panZoom, fitViewOptions, fitViewResolver, width, height, minZoom, maxZoom } = get();
if (!panZoom || !fitViewResolver) { if (!panZoom) {
return; return;
} }
@@ -61,7 +61,7 @@ const createStore = ({
fitViewOptions fitViewOptions
); );
fitViewResolver.resolve(true); fitViewResolver?.resolve(true);
/** /**
* wait for the fitViewport to resolve before deleting the resolver, * 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 * we want to reuse the old resolver if the user calls fitView again in the mean time
+7 -4
View File
@@ -20,18 +20,21 @@ test.describe('Pane default', () => {
await expect(pane).toBeAttached(); await expect(pane).toBeAttached();
const paneBox = await pane.boundingBox(); const paneBox = await pane.boundingBox();
const transformsBefore = await getTransform(viewport); const transformsBefore = await getTransform(viewport);
const movementPx = 100;
await pane.hover(); await pane.hover();
await page.mouse.down(); await page.mouse.down();
// Move pane by 100, 100 // 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); const transformsAfter = await getTransform(viewport);
expect(Math.floor(transformsAfter.translateX - transformsBefore.translateX)).toBe(100); expect(movementPx - Math.floor(transformsAfter.translateX - transformsBefore.translateX)).toBeLessThan(1);
expect(Math.floor(transformsAfter.translateY - transformsBefore.translateY)).toBe(100); expect(movementPx - Math.floor(transformsAfter.translateY - transformsBefore.translateY)).toBeLessThan(1);
}); });
test('scrolling the default pane zooms it', async ({ page }) => { test('scrolling the default pane zooms it', async ({ page }) => {