feat(core): add source and target node ids to edge remove changes

This commit is contained in:
braks
2023-10-06 18:00:01 +02:00
committed by Braks
parent db16495e0f
commit 7a013771f3
3 changed files with 22 additions and 7 deletions
+8 -5
View File
@@ -30,8 +30,9 @@ import {
applyChanges, applyChanges,
clamp, clamp,
createAdditionChange, createAdditionChange,
createEdgeRemoveChange,
createGraphNodes, createGraphNodes,
createRemoveChange, createNodeRemoveChange,
createSelectionChange, createSelectionChange,
getConnectedEdges, getConnectedEdges,
getDimensions, getDimensions,
@@ -520,7 +521,9 @@ export function useActions(
function createEdgeRemovalChanges(nodes: Node[]) { function createEdgeRemovalChanges(nodes: Node[]) {
const connections = getConnectedEdges(nodes, state.edges).filter((edge) => (isDef(edge.deletable) ? edge.deletable : true)) const connections = getConnectedEdges(nodes, state.edges).filter((edge) => (isDef(edge.deletable) ? edge.deletable : true))
edgeChanges.push(...connections.map((connection) => createRemoveChange(connection.id))) edgeChanges.push(
...connections.map((connection) => createEdgeRemoveChange(connection.id, connection.source, connection.target)),
)
} }
// recursively get all children and if the child is a parent, get those children as well until all nodes have been removed that are children of the current node // recursively get all children and if the child is a parent, get those children as well until all nodes have been removed that are children of the current node
@@ -529,7 +532,7 @@ export function useActions(
if (children.length) { if (children.length) {
const childIds = children.map((n) => n.id) const childIds = children.map((n) => n.id)
nodeChanges.push(...childIds.map((id) => createRemoveChange(id))) nodeChanges.push(...childIds.map((id) => createNodeRemoveChange(id)))
if (removeConnectedEdges) { if (removeConnectedEdges) {
createEdgeRemovalChanges(children) createEdgeRemovalChanges(children)
@@ -552,7 +555,7 @@ export function useActions(
return return
} }
nodeChanges.push(createRemoveChange(currNode.id)) nodeChanges.push(createNodeRemoveChange(currNode.id))
if (removeConnectedEdges) { if (removeConnectedEdges) {
createEdgeRemovalChanges([currNode]) createEdgeRemovalChanges([currNode])
@@ -589,7 +592,7 @@ export function useActions(
return return
} }
changes.push(createRemoveChange(typeof item === 'string' ? item : item.id)) changes.push(createEdgeRemoveChange(typeof item === 'string' ? item : item.id, currEdge.source, currEdge.target))
}) })
state.hooks.edgesChange.trigger(changes) state.hooks.edgesChange.trigger(changes)
+4 -1
View File
@@ -51,7 +51,10 @@ export type NodeChange = NodeDimensionChange | NodePositionChange | NodeSelectio
export type EdgeSelectionChange = NodeSelectionChange export type EdgeSelectionChange = NodeSelectionChange
export type EdgeRemoveChange = NodeRemoveChange export interface EdgeRemoveChange extends NodeRemoveChange {
source: string
target: string
}
export interface EdgeAddChange<Data = ElementData> { export interface EdgeAddChange<Data = ElementData> {
item: GraphEdge<Data> item: GraphEdge<Data>
+10 -1
View File
@@ -228,13 +228,22 @@ export function createAdditionChange<
} }
} }
export function createRemoveChange(id: string): NodeRemoveChange | EdgeRemoveChange { export function createNodeRemoveChange(id: string): NodeRemoveChange {
return { return {
id, id,
type: 'remove', type: 'remove',
} }
} }
export function createEdgeRemoveChange(id: string, source: string, target: string): EdgeRemoveChange {
return {
id,
source,
target,
type: 'remove',
}
}
export function getSelectionChanges(elements: FlowElements, selectedIds: string[]) { export function getSelectionChanges(elements: FlowElements, selectedIds: string[]) {
return elements.reduce( return elements.reduce(
(res, item) => { (res, item) => {