From b85b0ec66fce9500f74795f5eef6aa40ce1beac1 Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Fri, 14 Mar 2025 13:15:34 +0100 Subject: [PATCH] fix(core): reset drag items on drag end (#1798) * fix(core): reset drag items on drag end Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> * chore(changeset): add Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --------- Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --- .changeset/old-moose-fly.md | 5 +++++ packages/core/src/composables/useDrag.ts | 27 ++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 .changeset/old-moose-fly.md diff --git a/.changeset/old-moose-fly.md b/.changeset/old-moose-fly.md new file mode 100644 index 00000000..4d4253c5 --- /dev/null +++ b/.changeset/old-moose-fly.md @@ -0,0 +1,5 @@ +--- +"@vue-flow/core": patch +--- + +Reset drag items on drag end diff --git a/packages/core/src/composables/useDrag.ts b/packages/core/src/composables/useDrag.ts index 65f9fbfb..2caf0e54 100644 --- a/packages/core/src/composables/useDrag.ts +++ b/packages/core/src/composables/useDrag.ts @@ -12,7 +12,6 @@ import { getEventPosition, handleNodeClick, hasSelector, - isUseDragEvent, snapPosition, } from '../utils' import { useGetPointerPosition, useVueFlow } from '.' @@ -226,8 +225,10 @@ export function useDrag(params: UseDragParams) { } const eventEnd = (event: UseDragEvent) => { - if (!isUseDragEvent(event) && !dragStarted && !dragging.value && !multiSelectionActive.value) { - const evt = event as MouseTouchEvent + let isClick = false + + if (!dragStarted && !dragging.value && !multiSelectionActive.value) { + const evt = event.sourceEvent as MouseTouchEvent const pointerPos = getPointerPosition(evt) @@ -238,19 +239,11 @@ export function useDrag(params: UseDragParams) { // dispatch a click event if the node was attempted to be dragged but the threshold was not exceeded if (distance !== 0 && distance <= nodeDragThreshold.value) { onClick?.(evt) + isClick = true } - - return } - dragging.value = false - autoPanStarted = false - dragStarted = false - lastPos = { x: undefined, y: undefined } - - cancelAnimationFrame(autoPanId) - - if (dragItems.length) { + if (dragItems.length && !isClick) { updateNodePositions(dragItems, false, false) const [currentNode, nodes] = getEventHandlerParams({ @@ -261,6 +254,14 @@ export function useDrag(params: UseDragParams) { onStop({ event: event.sourceEvent, node: currentNode, nodes }) } + + dragItems = [] + dragging.value = false + autoPanStarted = false + dragStarted = false + lastPos = { x: undefined, y: undefined } + + cancelAnimationFrame(autoPanId) } watch([() => toValue(disabled), el], ([isDisabled, nodeEl], _, onCleanup) => {