Skip to content

Commit 9bca73d

Browse files
committed
fix(nodes): remove child nodes when parent gets removed
1 parent 7d66094 commit 9bca73d

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

packages/vue-flow/src/container/SelectionPane/SelectionPane.vue

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script lang="ts" setup>
2-
import type { EdgeChange, NodeChange } from '../../types'
2+
import type { EdgeChange, GraphNode, NodeChange } from '../../types'
33
import { useKeyPress, useVueFlow } from '../../composables'
44
import { getConnectedEdges } from '../../utils'
55
import { NodesSelection, UserSelection } from '../../components'
@@ -18,6 +18,9 @@ const {
1818
setState,
1919
getSelectedEdges,
2020
getSelectedNodes,
21+
getNodes,
22+
removeNodes,
23+
removeEdges,
2124
} = $(useVueFlow())
2225
2326
const onClick = (event: MouseEvent) => {
@@ -33,19 +36,26 @@ const onContextMenu = (event: MouseEvent) => emits.paneContextMenu(event)
3336
const onWheel = (event: WheelEvent) => emits.paneScroll(event)
3437
3538
useKeyPress($$(deleteKeyCode), (keyPressed) => {
36-
const selectedNodes = getSelectedNodes
37-
const selectedEdges = getSelectedEdges
38-
if (keyPressed && (selectedNodes || selectedEdges)) {
39-
const connectedEdges = (selectedNodes && getConnectedEdges(selectedNodes, edges)) ?? []
39+
const nodesToRemove = getNodes.reduce<GraphNode[]>((res, node) => {
40+
if (!node.selected && node.parentNode && res.find((n) => n.id === node.parentNode)) {
41+
res.push(node)
42+
} else if (node.selected) {
43+
res.push(node)
44+
}
4045
41-
const nodeChanges: NodeChange[] = selectedNodes.map((n) => ({ id: n.id, type: 'remove' }))
42-
const edgeChanges: EdgeChange[] = [...selectedEdges, ...connectedEdges].map((e) => ({
43-
id: e.id,
44-
type: 'remove',
45-
}))
46+
return res
47+
}, [])
4648
47-
emits.nodesChange(nodeChanges)
48-
emits.edgesChange(edgeChanges)
49+
const selectedEdges = edges.filter((e) => e.selected)
50+
51+
if (keyPressed && (nodesToRemove || selectedEdges)) {
52+
if (selectedEdges.length > 0) {
53+
removeEdges(selectedEdges)
54+
}
55+
56+
if (nodesToRemove.length > 0) {
57+
removeNodes(nodesToRemove)
58+
}
4959
5060
setState({
5161
nodesSelectionActive: false,

0 commit comments

Comments
 (0)