From 4bf4b6386ee0bb733e125e6d0ad6b10d4b8079d8 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Wed, 15 Feb 2023 18:17:20 +0100 Subject: [PATCH] feat(core): add option to avoid replacing edge id when updating Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --- packages/core/src/store/actions.ts | 3 ++- packages/core/src/types/store.ts | 2 +- packages/core/src/utils/store.ts | 8 +++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/core/src/store/actions.ts b/packages/core/src/store/actions.ts index cf8bcf51..7e41c7f1 100644 --- a/packages/core/src/store/actions.ts +++ b/packages/core/src/store/actions.ts @@ -426,7 +426,8 @@ export function useActions(state: State, getters: ComputedGetters): Actions { state.hooks.edgesChange.trigger(changes) } - const updateEdge: Actions['updateEdge'] = (oldEdge, newConnection) => updateEdgeAction(oldEdge, newConnection, state.edges) + const updateEdge: Actions['updateEdge'] = (oldEdge, newConnection, shouldReplaceId = true) => + updateEdgeAction(oldEdge, newConnection, state.edges, shouldReplaceId) const applyNodeChanges: Actions['applyNodeChanges'] = (changes) => applyChanges(changes, state.nodes) diff --git a/packages/core/src/types/store.ts b/packages/core/src/types/store.ts index 1e8c7b75..9bb6be2a 100644 --- a/packages/core/src/types/store.ts +++ b/packages/core/src/types/store.ts @@ -162,7 +162,7 @@ export type RemoveEdges = (edges: (Edge[] | string[]) | ((edges: GraphEdge[]) => export type AddEdges = (edgesOrConnections: (Edge | Connection)[] | ((edges: GraphEdge[]) => (Edge | Connection)[])) => void -export type UpdateEdge = (oldEdge: GraphEdge, newConnection: Connection) => GraphEdge | false +export type UpdateEdge = (oldEdge: GraphEdge, newConnection: Connection, shouldReplaceId: boolean) => GraphEdge | false export type SetState = ( state: diff --git a/packages/core/src/utils/store.ts b/packages/core/src/utils/store.ts index 759c27cb..b468745d 100644 --- a/packages/core/src/utils/store.ts +++ b/packages/core/src/utils/store.ts @@ -22,7 +22,7 @@ export function addEdgeToStore(edgeParams: Edge | Connection, edges: Edge[]) { return edge } -export function updateEdgeAction(edge: GraphEdge, newConnection: Connection, edges: GraphEdge[]) { +export function updateEdgeAction(edge: GraphEdge, newConnection: Connection, edges: GraphEdge[], shouldReplaceId: boolean) { if (!newConnection.source || !newConnection.target) { warn("Can't create new edge. An edge needs a source and a target.") return false @@ -35,9 +35,11 @@ export function updateEdgeAction(edge: GraphEdge, newConnection: Connection, edg return false } + const { id, ...rest } = edge + const newEdge = { - ...edge, - id: getEdgeId(newConnection), + ...rest, + id: shouldReplaceId ? getEdgeId(newConnection) : id, source: newConnection.source, target: newConnection.target, sourceHandle: newConnection.sourceHandle,