fix(handle): prevent onClick from creating edges inside same node
This commit is contained in:
@@ -68,6 +68,8 @@ const resetRecentHandle = (hoveredHandle: Element): void => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default (store: FlowStore = useVueFlow().store) => {
|
export default (store: FlowStore = useVueFlow().store) => {
|
||||||
|
let recentHoveredHandle: Element
|
||||||
|
|
||||||
const onMouseDown = (
|
const onMouseDown = (
|
||||||
event: MouseEvent,
|
event: MouseEvent,
|
||||||
handleId: string | null,
|
handleId: string | null,
|
||||||
@@ -97,7 +99,6 @@ export default (store: FlowStore = useVueFlow().store) => {
|
|||||||
|
|
||||||
const handleType = elementEdgeUpdaterType ?? (elementBelowIsTarget ? 'target' : 'source')
|
const handleType = elementEdgeUpdaterType ?? (elementBelowIsTarget ? 'target' : 'source')
|
||||||
const containerBounds = flowNode.getBoundingClientRect()
|
const containerBounds = flowNode.getBoundingClientRect()
|
||||||
let recentHoveredHandle: Element
|
|
||||||
|
|
||||||
store.setState({
|
store.setState({
|
||||||
connectionPosition: {
|
connectionPosition: {
|
||||||
@@ -194,7 +195,7 @@ export default (store: FlowStore = useVueFlow().store) => {
|
|||||||
if (node) validConnectFunc = (handleType !== 'target' ? node.isValidTargetPos : node.isValidSourcePos) ?? (() => true)
|
if (node) validConnectFunc = (handleType !== 'target' ? node.isValidTargetPos : node.isValidSourcePos) ?? (() => true)
|
||||||
}
|
}
|
||||||
const doc = getHostForElement(event.target as HTMLElement)
|
const doc = getHostForElement(event.target as HTMLElement)
|
||||||
const { connection, isValid } = checkElementBelowIsValid(
|
const { connection, isValid, elementBelow } = checkElementBelowIsValid(
|
||||||
event as MouseEvent,
|
event as MouseEvent,
|
||||||
store.connectionMode,
|
store.connectionMode,
|
||||||
store.connectionStartHandle.type === 'target',
|
store.connectionStartHandle.type === 'target',
|
||||||
@@ -204,9 +205,17 @@ export default (store: FlowStore = useVueFlow().store) => {
|
|||||||
doc,
|
doc,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const isOwnHandle = connection.source === connection.target
|
||||||
|
|
||||||
|
if (!isOwnHandle && elementBelow) {
|
||||||
|
recentHoveredHandle = elementBelow
|
||||||
|
elementBelow.classList.add('vue-flow__handle-connecting')
|
||||||
|
elementBelow.classList.toggle('vue-flow__handle-valid', isValid)
|
||||||
|
}
|
||||||
|
|
||||||
store.hooks.connectStop.trigger(event)
|
store.hooks.connectStop.trigger(event)
|
||||||
|
|
||||||
if (isValid) store.hooks.connect.trigger(connection)
|
if (isValid && !isOwnHandle) store.hooks.connect.trigger(connection)
|
||||||
|
|
||||||
store.hooks.connectEnd.trigger(event)
|
store.hooks.connectEnd.trigger(event)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user