Skip to content

Commit 7a022c8

Browse files
committed
fix(core): update source/target node of updated edge (#1705)
* fix(core): update source/target node of updated edge Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> * chore(changeset): add Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com> --------- Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
1 parent 600d1a6 commit 7a022c8

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

.changeset/chatty-ducks-invite.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@vue-flow/core": patch
3+
---
4+
5+
Update sourceNode and targetNode properties of edge when using `updateEdge`.

packages/core/src/store/actions.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,30 @@ export function useActions(state: State, nodeLookup: ComputedRef<NodeLookup>, ed
509509
}
510510

511511
const updateEdge: Actions['updateEdge'] = (oldEdge, newConnection, shouldReplaceId = true) => {
512-
return updateEdgeAction(oldEdge, newConnection, state.edges, findEdge, shouldReplaceId, state.hooks.error.trigger)
512+
const prevEdge = findEdge(oldEdge.id)!
513+
514+
const newEdge = updateEdgeAction(oldEdge, newConnection, prevEdge, shouldReplaceId, state.hooks.error.trigger)
515+
516+
if (newEdge) {
517+
const [validEdge] = createGraphEdges(
518+
[newEdge],
519+
state.isValidConnection,
520+
findNode,
521+
findEdge,
522+
state.hooks.error.trigger,
523+
state.defaultEdgeOptions,
524+
state.nodes,
525+
state.edges,
526+
)
527+
528+
state.edges.splice(state.edges.indexOf(prevEdge), 1, validEdge)
529+
530+
updateConnectionLookup(state.connectionLookup, [validEdge])
531+
532+
return validEdge
533+
}
534+
535+
return false
513536
}
514537

515538
const updateEdgeData: Actions['updateEdgeData'] = (id, dataUpdate, options = { replace: false }) => {

packages/core/src/utils/store.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ export function addEdgeToStore(
5656
export function updateEdgeAction(
5757
edge: GraphEdge,
5858
newConnection: Connection,
59-
edges: GraphEdge[],
60-
findEdge: Actions['findEdge'],
59+
prevEdge: GraphEdge | undefined,
6160
shouldReplaceId: boolean,
6261
triggerError: State['hooks']['error']['trigger'],
6362
) {
@@ -66,27 +65,21 @@ export function updateEdgeAction(
6665
return false
6766
}
6867

69-
const foundEdge = findEdge(edge.id)
70-
71-
if (!foundEdge) {
68+
if (!prevEdge) {
7269
triggerError(new VueFlowError(ErrorCode.EDGE_NOT_FOUND, edge.id))
7370
return false
7471
}
7572

7673
const { id, ...rest } = edge
7774

78-
const newEdge = {
75+
return {
7976
...rest,
8077
id: shouldReplaceId ? getEdgeId(newConnection) : id,
8178
source: newConnection.source,
8279
target: newConnection.target,
8380
sourceHandle: newConnection.sourceHandle,
8481
targetHandle: newConnection.targetHandle,
8582
}
86-
87-
edges.splice(edges.indexOf(foundEdge), 1, newEdge)
88-
89-
return newEdge
9083
}
9184

9285
export function createGraphNodes(nodes: Node[], findNode: Actions['findNode'], triggerError: State['hooks']['error']['trigger']) {

0 commit comments

Comments
 (0)