Merge pull request #5120 from xyflow/fix/fit-view-uncontrolled
Fix/fit view uncontrolled
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@xyflow/react': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Handle fitView for uncontrolled flows
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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 }) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user