|
1 | 1 | import type { MaybeRefOrGetter } from '@vueuse/core'
|
2 | 2 | import { toValue } from '@vueuse/core'
|
3 | 3 | import { useVueFlow } from './useVueFlow'
|
4 |
| -import type { Connection, ConnectionHandle, HandleType, MouseTouchEvent, ValidConnectionFunc } from '~/types' |
| 4 | +import type { Connection, ConnectionHandle, HandleType, MouseTouchEvent, ValidConnectionFunc, ValidHandleResult } from '~/types' |
5 | 5 | import {
|
6 | 6 | calcAutoPan,
|
7 | 7 | getClosestHandle,
|
@@ -135,29 +135,47 @@ export function useHandle({
|
135 | 135 | function onPointerMove(event: MouseTouchEvent) {
|
136 | 136 | connectionPosition = getEventPosition(event, containerBounds)
|
137 | 137 |
|
138 |
| - closestHandle = getClosestHandle( |
139 |
| - pointToRendererPoint(connectionPosition, viewport.value, false, [1, 1]), |
140 |
| - connectionRadius.value, |
141 |
| - handleLookup, |
142 |
| - ) |
| 138 | + let result: ValidHandleResult | null = { |
| 139 | + handleDomNode: null, |
| 140 | + isValid: false, |
| 141 | + connection: { source: '', target: '', sourceHandle: null, targetHandle: null }, |
| 142 | + endHandle: null, |
| 143 | + } |
| 144 | + |
| 145 | + closestHandle = |
| 146 | + getClosestHandle( |
| 147 | + pointToRendererPoint(connectionPosition, viewport.value, false, [1, 1]), |
| 148 | + connectionRadius.value, |
| 149 | + handleLookup, |
| 150 | + )?.find((handle) => { |
| 151 | + const validHandleResult = isValidHandle( |
| 152 | + event, |
| 153 | + handle, |
| 154 | + connectionMode.value, |
| 155 | + toValue(nodeId), |
| 156 | + toValue(handleId), |
| 157 | + isTarget ? 'target' : 'source', |
| 158 | + isValidConnectionHandler, |
| 159 | + doc, |
| 160 | + edges.value, |
| 161 | + findNode, |
| 162 | + ) |
| 163 | + |
| 164 | + if (validHandleResult.isValid) { |
| 165 | + result = validHandleResult |
| 166 | + } |
| 167 | + |
| 168 | + return validHandleResult.isValid |
| 169 | + }) || null |
143 | 170 |
|
144 | 171 | if (!autoPanStarted) {
|
145 | 172 | autoPan()
|
146 | 173 | autoPanStarted = true
|
147 | 174 | }
|
148 | 175 |
|
149 |
| - const result = isValidHandle( |
150 |
| - event, |
151 |
| - closestHandle, |
152 |
| - connectionMode.value, |
153 |
| - toValue(nodeId), |
154 |
| - toValue(handleId), |
155 |
| - isTarget ? 'target' : 'source', |
156 |
| - isValidConnectionHandler, |
157 |
| - doc, |
158 |
| - edges.value, |
159 |
| - findNode, |
160 |
| - ) |
| 176 | + if (!result) { |
| 177 | + return |
| 178 | + } |
161 | 179 |
|
162 | 180 | connection = result.connection
|
163 | 181 | isValid = result.isValid
|
|
0 commit comments