Skip to content

Commit 9154687

Browse files
committed
fix(core): avoid re-snapping to same handle (#1514)
* fix(core): avoid re-snapping to same handle * chore(changeset): add
1 parent 8f53488 commit 9154687

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

.changeset/modern-needles-give.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@vue-flow/core": patch
3+
---
4+
5+
Avoid re-snapping to the same handle

packages/core/src/composables/useHandle.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { MaybeRefOrGetter } from 'vue'
22
import { toValue } from 'vue'
3-
import type { Connection, ConnectionHandle, HandleType, MouseTouchEvent, ValidConnectionFunc } from '../types'
3+
import type { Connection, ConnectionHandle, HandleType, MouseTouchEvent, ValidConnectionFunc, ValidHandleResult } from '../types'
44
import {
55
calcAutoPan,
66
getClosestHandle,
@@ -71,6 +71,7 @@ export function useHandle({
7171
let connection: Connection | null = null
7272
let isValid = false
7373
let handleDomNode: Element | null = null
74+
let previousConnection: ValidHandleResult | null = null
7475

7576
function handlePointerDown(event: MouseTouchEvent) {
7677
const isTarget = toValue(type) === 'target'
@@ -176,6 +177,20 @@ export function useHandle({
176177
isValid = validHandleResult.isValid
177178
handleDomNode = validHandleResult.handleDomNode
178179

180+
// we don't want to trigger an update when the connection
181+
// is snapped to the same handle as before
182+
if (
183+
isValid &&
184+
closestHandle &&
185+
previousConnection?.endHandle &&
186+
validHandleResult.endHandle &&
187+
previousConnection.endHandle.type === validHandleResult.endHandle.type &&
188+
previousConnection.endHandle.nodeId === validHandleResult.endHandle.nodeId &&
189+
previousConnection.endHandle.handleId === validHandleResult.endHandle.handleId
190+
) {
191+
return
192+
}
193+
179194
updateConnection(
180195
closestHandle && isValid
181196
? rendererPointToPoint(
@@ -190,6 +205,8 @@ export function useHandle({
190205
getConnectionStatus(!!closestHandle, isValid),
191206
)
192207

208+
previousConnection = validHandleResult
209+
193210
if (!closestHandle && !isValid && !handleDomNode) {
194211
return resetRecentHandle(prevActiveHandle)
195212
}

0 commit comments

Comments
 (0)