From 1be6dfa8e3bfa19b05cfec318371c1ff417d5c11 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 16 Feb 2023 17:22:05 +0100 Subject: [PATCH 1/4] feat(core): add option to enable/disable replacing id when updating an edge --- packages/core/src/utils/graph.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/core/src/utils/graph.ts b/packages/core/src/utils/graph.ts index c7772a1c..4b2983b1 100644 --- a/packages/core/src/utils/graph.ts +++ b/packages/core/src/utils/graph.ts @@ -93,32 +93,34 @@ export const addEdge = (edgeParams: Edge | Connection, edges: Edge[]): Edge[] => return edges.concat(edge); }; -export const updateEdge = (oldEdge: Edge, newConnection: Connection, edges: Edge[]): Edge[] => { +export const updateEdge = (oldEdge: Edge, newConnection: Connection, edges: Edge[], shouldReplaceId = true): Edge[] => { + const { id: oldEdgeId, ...rest } = oldEdge; + if (!newConnection.source || !newConnection.target) { devWarn('006', errorMessages['006']()); return edges; } - const foundEdge = edges.find((e) => e.id === oldEdge.id) as Edge; + const foundEdge = edges.find((e) => e.id === oldEdgeId) as Edge; if (!foundEdge) { - devWarn('007', errorMessages['007'](oldEdge.id)); + devWarn('007', errorMessages['007'](oldEdgeId)); return edges; } // Remove old edge and create the new edge with parameters of old edge. const edge = { - ...oldEdge, - id: getEdgeId(newConnection), + ...rest, + id: shouldReplaceId ? getEdgeId(newConnection) : oldEdgeId, source: newConnection.source, target: newConnection.target, sourceHandle: newConnection.sourceHandle, targetHandle: newConnection.targetHandle, } as Edge; - return edges.filter((e) => e.id !== oldEdge.id).concat(edge); + return edges.filter((e) => e.id !== oldEdgeId).concat(edge); }; export const pointToRendererPoint = ( From 16bf89f2b7bbf8449c00d0e2c07c19c3ff6d2533 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 16 Feb 2023 19:46:29 +0100 Subject: [PATCH 2/4] chore(changeset): add --- .changeset/yellow-chicken-sparkle.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/yellow-chicken-sparkle.md diff --git a/.changeset/yellow-chicken-sparkle.md b/.changeset/yellow-chicken-sparkle.md new file mode 100644 index 00000000..f729cf0e --- /dev/null +++ b/.changeset/yellow-chicken-sparkle.md @@ -0,0 +1,5 @@ +--- +'@reactflow/core': minor +--- + +Add option to enable/disable replacing edge id when using `updateEdge` From 24d4c56343ff660c2ec276a638a317aeb50b0ed7 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 2 Mar 2023 16:59:43 +0100 Subject: [PATCH 3/4] chore(core,types): add `UpdateEdgeOptions` type --- packages/core/src/types/general.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/core/src/types/general.ts b/packages/core/src/types/general.ts index f628727e..6a25c612 100644 --- a/packages/core/src/types/general.ts +++ b/packages/core/src/types/general.ts @@ -277,3 +277,7 @@ export type SelectionRect = Rect & { }; export type OnError = (id: string, message: string) => void; + +export interface UpdateEdgeOptions { + shouldReplaceId?: boolean; +} \ No newline at end of file From eeed4478503e0ededc7bdd69a74349c2f3be9ad9 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 2 Mar 2023 17:00:19 +0100 Subject: [PATCH 4/4] chore(core,utils): add options obj to updateEdge util --- packages/core/src/utils/graph.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core/src/utils/graph.ts b/packages/core/src/utils/graph.ts index 4b2983b1..0d28d659 100644 --- a/packages/core/src/utils/graph.ts +++ b/packages/core/src/utils/graph.ts @@ -12,6 +12,7 @@ import { Rect, NodeInternals, NodeOrigin, + UpdateEdgeOptions, } from '../types'; import { errorMessages } from '../contants'; @@ -93,7 +94,7 @@ export const addEdge = (edgeParams: Edge | Connection, edges: Edge[]): Edge[] => return edges.concat(edge); }; -export const updateEdge = (oldEdge: Edge, newConnection: Connection, edges: Edge[], shouldReplaceId = true): Edge[] => { +export const updateEdge = (oldEdge: Edge, newConnection: Connection, edges: Edge[], options: UpdateEdgeOptions = { shouldReplaceId: true }): Edge[] => { const { id: oldEdgeId, ...rest } = oldEdge; if (!newConnection.source || !newConnection.target) { @@ -113,7 +114,7 @@ export const updateEdge = (oldEdge: Edge, newConnection: Connection, edges: Edge // Remove old edge and create the new edge with parameters of old edge. const edge = { ...rest, - id: shouldReplaceId ? getEdgeId(newConnection) : oldEdgeId, + id: options.shouldReplaceId ? getEdgeId(newConnection) : oldEdgeId, source: newConnection.source, target: newConnection.target, sourceHandle: newConnection.sourceHandle,