Skip to content

Commit 49dc8ae

Browse files
committed
feat(core): add updateEdgeData action (#1452)
* feat(core): add `updateEdgeData` action * chore(changeset): add
1 parent d71de0a commit 49dc8ae

File tree

3 files changed

+38
-10
lines changed

3 files changed

+38
-10
lines changed

.changeset/good-steaks-collect.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@vue-flow/core": minor
3+
---
4+
5+
Add `updateEdgeData` action

packages/core/src/store/actions.ts

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -558,8 +558,21 @@ export function useActions(
558558
state.hooks.edgesChange.trigger(changes)
559559
}
560560

561-
const updateEdge: Actions['updateEdge'] = (oldEdge, newConnection, shouldReplaceId = true) =>
562-
updateEdgeAction(oldEdge, newConnection, state.edges, findEdge, shouldReplaceId, state.hooks.error.trigger)
561+
const updateEdge: Actions['updateEdge'] = (oldEdge, newConnection, shouldReplaceId = true) => {
562+
return updateEdgeAction(oldEdge, newConnection, state.edges, findEdge, shouldReplaceId, state.hooks.error.trigger)
563+
}
564+
565+
const updateEdgeData: Actions['updateEdgeData'] = (id, dataUpdate, options = { replace: false }) => {
566+
const edge = findEdge(id)
567+
568+
if (!edge) {
569+
return
570+
}
571+
572+
const nextData = typeof dataUpdate === 'function' ? dataUpdate(edge) : dataUpdate
573+
574+
edge.data = options.replace ? nextData : { ...edge.data, ...nextData }
575+
}
563576

564577
const applyNodeChanges: Actions['applyNodeChanges'] = (changes) => {
565578
return applyChanges(changes, state.nodes)
@@ -591,14 +604,15 @@ export function useActions(
591604
}
592605

593606
const updateNodeData: Actions['updateNodeData'] = (id, dataUpdate, options = { replace: false }) => {
594-
updateNode(
595-
id,
596-
(node) => {
597-
const nextData = typeof dataUpdate === 'function' ? dataUpdate(node) : dataUpdate
598-
return options.replace ? { ...node, data: nextData } : { ...node, data: { ...node.data, ...nextData } }
599-
},
600-
options,
601-
)
607+
const node = findNode(id)
608+
609+
if (!node) {
610+
return
611+
}
612+
613+
const nextData = typeof dataUpdate === 'function' ? dataUpdate(node) : dataUpdate
614+
615+
node.data = options.replace ? nextData : { ...node.data, ...nextData }
602616
}
603617

604618
const startConnection: Actions['startConnection'] = (startHandle, position, event, isClick = false) => {
@@ -897,6 +911,7 @@ export function useActions(
897911
findNode,
898912
findEdge,
899913
updateEdge,
914+
updateEdgeData,
900915
updateNode,
901916
updateNodeData,
902917
applyEdgeChanges,

packages/core/src/types/store.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,12 @@ export type AddEdges = (
181181

182182
export type UpdateEdge = (oldEdge: GraphEdge, newConnection: Connection, shouldReplaceId?: boolean) => GraphEdge | false
183183

184+
export type UpdateEdgeData = <Data = ElementData, CustomEvents extends Record<string, CustomEvent> = any>(
185+
id: string,
186+
dataUpdate: Partial<Data> | ((edge: GraphEdge<Data, CustomEvents>) => Partial<Data>),
187+
options?: { replace: boolean },
188+
) => void
189+
184190
export type SetState = (
185191
state:
186192
| Partial<FlowOptions & Omit<State, 'nodes' | 'edges' | 'modelValue'>>
@@ -242,6 +248,8 @@ export interface Actions extends Omit<ViewportHelper, 'viewportInitialized'> {
242248
findEdge: FindEdge
243249
/** updates an edge */
244250
updateEdge: UpdateEdge
251+
/** updates the data of an edge */
252+
updateEdgeData: UpdateEdgeData
245253
/** updates a node */
246254
updateNode: UpdateNode
247255
/** updates the data of a node */

0 commit comments

Comments
 (0)