refactor(core): allow adding edges with missing source or target nodes
This commit is contained in:
@@ -5,7 +5,15 @@ import type { Connection, EdgeComponent, EdgeUpdatable, GraphEdge, HandleType, M
|
||||
import { ConnectionMode, Position } from '~/types'
|
||||
import { useEdgeHooks, useHandle, useVueFlow } from '~/composables'
|
||||
import { EdgeId, EdgeRef } from '~/context'
|
||||
import { ARIA_EDGE_DESC_KEY, elementSelectionKeys, getEdgePositions, getHandle, getMarkerId } from '~/utils'
|
||||
import {
|
||||
ARIA_EDGE_DESC_KEY,
|
||||
ErrorCode,
|
||||
VueFlowError,
|
||||
elementSelectionKeys,
|
||||
getEdgePositions,
|
||||
getHandle,
|
||||
getMarkerId,
|
||||
} from '~/utils'
|
||||
|
||||
interface Props {
|
||||
id: string
|
||||
@@ -36,6 +44,7 @@ const EdgeWrapper = defineComponent({
|
||||
findNode,
|
||||
isValidConnection,
|
||||
multiSelectionActive,
|
||||
hooks: flowHooks,
|
||||
} = useVueFlow()
|
||||
|
||||
const hooks = useEdgeHooks(props.edge, emits)
|
||||
@@ -74,7 +83,25 @@ const EdgeWrapper = defineComponent({
|
||||
const sourceNode = findNode(edge.source)
|
||||
const targetNode = findNode(edge.target)
|
||||
|
||||
if (!sourceNode || !targetNode || !edge || sourceNode.hidden || targetNode.hidden) {
|
||||
if (!sourceNode && !targetNode) {
|
||||
flowHooks.value.error.trigger(new VueFlowError(ErrorCode.EDGE_SOURCE_TARGET_MISSING, edge.id, edge.source, edge.target))
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
if (!sourceNode) {
|
||||
flowHooks.value.error.trigger(new VueFlowError(ErrorCode.EDGE_SOURCE_MISSING, edge.id, edge.source))
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
if (!targetNode) {
|
||||
flowHooks.value.error.trigger(new VueFlowError(ErrorCode.EDGE_TARGET_MISSING, edge.id, edge.target))
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
if (!edge || sourceNode.hidden || targetNode.hidden) {
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
@@ -489,27 +489,6 @@ export function useActions(
|
||||
const sourceNode = findNode(edge.source)!
|
||||
const targetNode = findNode(edge.target)!
|
||||
|
||||
const missingSource = !sourceNode || typeof sourceNode === 'undefined'
|
||||
const missingTarget = !targetNode || typeof targetNode === 'undefined'
|
||||
|
||||
if (missingSource && missingTarget) {
|
||||
state.hooks.error.trigger(new VueFlowError(ErrorCode.EDGE_SOURCE_TARGET_MISSING, edge.id, edge.source, edge.target))
|
||||
|
||||
return edgeChanges
|
||||
}
|
||||
|
||||
if (missingSource) {
|
||||
state.hooks.error.trigger(new VueFlowError(ErrorCode.EDGE_SOURCE_MISSING, edge.id, edge.source))
|
||||
|
||||
return edgeChanges
|
||||
}
|
||||
|
||||
if (missingTarget) {
|
||||
state.hooks.error.trigger(new VueFlowError(ErrorCode.EDGE_TARGET_MISSING, edge.id, edge.target))
|
||||
|
||||
return edgeChanges
|
||||
}
|
||||
|
||||
edgeChanges.push(
|
||||
createAdditionChange<GraphEdge>({
|
||||
...edge,
|
||||
|
||||
Reference in New Issue
Block a user