Merge pull request #5547 from xyflow/fix/moveend
fix(panzoom): always call onMoveEnd when onMoveStart was called #5429
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@xyflow/system': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Always call onMoveEnd when onMoveStart was called
|
||||||
@@ -12,7 +12,7 @@ import {
|
|||||||
type OnDraggingChange,
|
type OnDraggingChange,
|
||||||
type OnTransformChange,
|
type OnTransformChange,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
import { isRightClickPan, isWrappedWithClass, transformToViewport, viewChanged, wheelDelta } from './utils';
|
import { isRightClickPan, isWrappedWithClass, transformToViewport, wheelDelta } from './utils';
|
||||||
import { isMacOs } from '../utils';
|
import { isMacOs } from '../utils';
|
||||||
import { ZoomPanValues } from './XYPanZoom';
|
import { ZoomPanValues } from './XYPanZoom';
|
||||||
|
|
||||||
@@ -128,9 +128,7 @@ export function createPanOnScrollHandler({
|
|||||||
zoomPanValues.isPanScrolling = true;
|
zoomPanValues.isPanScrolling = true;
|
||||||
|
|
||||||
onPanZoomStart?.(event, nextViewport);
|
onPanZoomStart?.(event, nextViewport);
|
||||||
}
|
} else {
|
||||||
|
|
||||||
if (zoomPanValues.isPanScrolling) {
|
|
||||||
onPanZoom?.(event, nextViewport);
|
onPanZoom?.(event, nextViewport);
|
||||||
|
|
||||||
zoomPanValues.panScrollTimeout = setTimeout(() => {
|
zoomPanValues.panScrollTimeout = setTimeout(() => {
|
||||||
@@ -236,7 +234,7 @@ export function createPanZoomEndHandler({
|
|||||||
|
|
||||||
onDraggingChange(false);
|
onDraggingChange(false);
|
||||||
|
|
||||||
if (onPanZoomEnd && viewChanged(zoomPanValues.prevViewport, event.transform)) {
|
if (onPanZoomEnd) {
|
||||||
const viewport = transformToViewport(event.transform);
|
const viewport = transformToViewport(event.transform);
|
||||||
zoomPanValues.prevViewport = viewport;
|
zoomPanValues.prevViewport = viewport;
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,6 @@ import { transition } from 'd3-transition';
|
|||||||
import { type D3SelectionInstance, type Viewport } from '../types';
|
import { type D3SelectionInstance, type Viewport } from '../types';
|
||||||
import { isMacOs } from '../utils';
|
import { isMacOs } from '../utils';
|
||||||
|
|
||||||
export const viewChanged = (prevViewport: Viewport, eventViewport: any): boolean =>
|
|
||||||
prevViewport.x !== eventViewport.x || prevViewport.y !== eventViewport.y || prevViewport.zoom !== eventViewport.k;
|
|
||||||
|
|
||||||
export const transformToViewport = (transform: ZoomTransform): Viewport => ({
|
export const transformToViewport = (transform: ZoomTransform): Viewport => ({
|
||||||
x: transform.x,
|
x: transform.x,
|
||||||
y: transform.y,
|
y: transform.y,
|
||||||
|
|||||||
Reference in New Issue
Block a user