11<script lang="ts" setup>
2- import type { EdgeChange , NodeChange } from ' ../../types'
2+ import type { EdgeChange , GraphNode , NodeChange } from ' ../../types'
33import { useKeyPress , useVueFlow } from ' ../../composables'
44import { getConnectedEdges } from ' ../../utils'
55import { NodesSelection , UserSelection } from ' ../../components'
@@ -18,6 +18,9 @@ const {
1818 setState,
1919 getSelectedEdges,
2020 getSelectedNodes,
21+ getNodes,
22+ removeNodes,
23+ removeEdges,
2124} = $ (useVueFlow ())
2225
2326const onClick = (event : MouseEvent ) => {
@@ -33,19 +36,26 @@ const onContextMenu = (event: MouseEvent) => emits.paneContextMenu(event)
3336const onWheel = (event : WheelEvent ) => emits .paneScroll (event )
3437
3538useKeyPress ($$ (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