From 1b85842d4847626729bbff6d7b106f42e7698147 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 9 Apr 2023 00:53:53 +0200 Subject: [PATCH] fix(core): prevent auto-pan from dragging into infinity Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --- packages/core/src/composables/useDrag.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/core/src/composables/useDrag.ts b/packages/core/src/composables/useDrag.ts index f1d7b24a..ea6648ee 100644 --- a/packages/core/src/composables/useDrag.ts +++ b/packages/core/src/composables/useDrag.ts @@ -38,7 +38,6 @@ function useDrag(params: UseDragParams) { addSelectedNodes, updateNodePositions, emits, - translateExtent, } = $(useVueFlow()) const { onStart, onDrag, onStop, el, disabled, id, selectable } = params @@ -57,6 +56,7 @@ function useDrag(params: UseDragParams) { let autoPanId = $ref(0) let autoPanStarted = $ref(false) + let previousTransform = $ref({ x: 0, y: 0 }) const getPointerPosition = useGetPointerPosition() @@ -123,11 +123,18 @@ function useDrag(params: UseDragParams) { y: (lastPos.y ?? 0) - yMovement / viewport.zoom, } - updateNodes(nextPos) + panBy({ x: xMovement, y: yMovement }, (transform) => { + if ( + Math.round(transform.x) !== Math.round(previousTransform.x) || + Math.round(transform.y) !== Math.round(previousTransform.y) + ) { + previousTransform = transform - panBy({ x: xMovement, y: yMovement }) + updateNodes(nextPos) - lastPos = nextPos + lastPos = nextPos + } + }) } autoPanId = requestAnimationFrame(autoPan)