From 7e7e0fb8cba5c197123e97d963e67b729b16bf46 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Fri, 27 Oct 2023 19:04:29 +0200 Subject: [PATCH] refactor(core): allow adding edges with missing source or target nodes --- .../core/src/components/Edges/EdgeWrapper.ts | 31 +++++++++++++++++-- packages/core/src/store/actions.ts | 21 ------------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/packages/core/src/components/Edges/EdgeWrapper.ts b/packages/core/src/components/Edges/EdgeWrapper.ts index bbec60f7..fdfacb76 100644 --- a/packages/core/src/components/Edges/EdgeWrapper.ts +++ b/packages/core/src/components/Edges/EdgeWrapper.ts @@ -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 } diff --git a/packages/core/src/store/actions.ts b/packages/core/src/store/actions.ts index effe7a1a..88ffb281 100644 --- a/packages/core/src/store/actions.ts +++ b/packages/core/src/store/actions.ts @@ -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({ ...edge,