diff --git a/packages/core/src/store/actions.ts b/packages/core/src/store/actions.ts index 7e41c7f1..5a80c15b 100644 --- a/packages/core/src/store/actions.ts +++ b/packages/core/src/store/actions.ts @@ -427,7 +427,7 @@ export function useActions(state: State, getters: ComputedGetters): Actions { } const updateEdge: Actions['updateEdge'] = (oldEdge, newConnection, shouldReplaceId = true) => - updateEdgeAction(oldEdge, newConnection, state.edges, shouldReplaceId) + updateEdgeAction(oldEdge, newConnection, state.edges, findEdge, shouldReplaceId) const applyNodeChanges: Actions['applyNodeChanges'] = (changes) => applyChanges(changes, state.nodes) diff --git a/packages/core/src/utils/store.ts b/packages/core/src/utils/store.ts index b468745d..5e418e48 100644 --- a/packages/core/src/utils/store.ts +++ b/packages/core/src/utils/store.ts @@ -10,25 +10,34 @@ export function addEdgeToStore(edgeParams: Edge | Connection, edges: Edge[]) { let edge if (isEdge(edgeParams)) { - edge = { ...edgeParams } + edge = edgeParams } else { edge = { ...edgeParams, id: getEdgeId(edgeParams), } as Edge } + edge = parseEdge(edge) + if (connectionExists(edge, edges)) return false + return edge } -export function updateEdgeAction(edge: GraphEdge, newConnection: Connection, edges: GraphEdge[], shouldReplaceId: boolean) { +export function updateEdgeAction( + edge: GraphEdge, + newConnection: Connection, + edges: GraphEdge[], + findEdge: Actions['findEdge'], + shouldReplaceId: boolean, +) { if (!newConnection.source || !newConnection.target) { warn("Can't create new edge. An edge needs a source and a target.") return false } - const foundEdge = edges.find((e) => isGraphEdge(e) && e.id === edge.id) + const foundEdge = findEdge(edge.id) if (!foundEdge) { warn(`The old edge with id=${edge.id} does not exist.`)