diff --git a/packages/core/src/store/actions.ts b/packages/core/src/store/actions.ts index 14aad08f..046f2d78 100644 --- a/packages/core/src/store/actions.ts +++ b/packages/core/src/store/actions.ts @@ -373,10 +373,20 @@ export function useActions(state: State, getters: ComputedGetters): Actions { const curr = nodes instanceof Function ? nodes(state.nodes) : nodes const nodeChanges: NodeRemoveChange[] = [] const edgeChanges: EdgeRemoveChange[] = [] + curr.forEach((item) => { - nodeChanges.push(createRemoveChange(typeof item === 'string' ? item : item.id)) + const currNode = typeof item === 'string' ? findNode(item)! : item + + if (isDef(currNode.deletable) && !currNode.deletable) return + + nodeChanges.push(createRemoveChange(currNode.id)) + if (removeConnectedEdges) { - const connections = getConnectedEdges([typeof item === 'string' ? ({ id: item } as any) : item], state.edges) + const connections = getConnectedEdges([currNode], state.edges).filter((edge) => { + if (isDef(edge.deletable)) return edge.deletable + return true + }) + edgeChanges.push(...connections.map((connection) => createRemoveChange(connection.id))) } }) @@ -393,7 +403,12 @@ export function useActions(state: State, getters: ComputedGetters): Actions { const removeEdges: Actions['removeEdges'] = (edges) => { const curr = edges instanceof Function ? edges(state.edges) : edges const changes: EdgeRemoveChange[] = [] + curr.forEach((item) => { + const currEdge = typeof item === 'string' ? findEdge(item)! : item + + if (isDef(currEdge.deletable) && !currEdge.deletable) return + changes.push(createRemoveChange(typeof item === 'string' ? item : item.id)) }) diff --git a/packages/core/src/types/edge.ts b/packages/core/src/types/edge.ts index 3566266c..5d0feeee 100644 --- a/packages/core/src/types/edge.ts +++ b/packages/core/src/types/edge.ts @@ -84,8 +84,10 @@ export interface DefaultEdge> /** Additional styles, can be an object or a callback returning an object (receives current flow element) */ diff --git a/packages/core/src/types/node.ts b/packages/core/src/types/node.ts index c5d5e914..75717ae0 100644 --- a/packages/core/src/types/node.ts +++ b/packages/core/src/types/node.ts @@ -35,10 +35,15 @@ export interface Node { +export const getConnectedEdges = (nodes: (Node | GraphNode)[], edges: GraphEdge[]) => { const nodeIds = nodes.map((node) => node.id) + return edges.filter((edge) => nodeIds.includes(edge.source) || nodeIds.includes(edge.target)) }