feat(props): add onNodesDelete and onEdgesDelete handler

This commit is contained in:
moklick
2022-02-20 21:17:59 +01:00
parent f7dd26bb21
commit e011375c3d
6 changed files with 25 additions and 2 deletions
+6 -2
View File
@@ -25,7 +25,7 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => {
const multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode);
useEffect(() => {
const { nodeInternals, edges, hasDefaultNodes, hasDefaultEdges } = store.getState();
const { nodeInternals, edges, hasDefaultNodes, hasDefaultEdges, onNodesDelete, onEdgesDelete } = store.getState();
// @TODO: work with nodeInternals instead of converting it to an array
const nodes = Array.from(nodeInternals).map(([_, node]) => node);
const selectedNodes = nodes.filter((n) => n.selected);
@@ -33,7 +33,8 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => {
if (deleteKeyPressed && (selectedNodes || selectedEdges)) {
const connectedEdges = getConnectedEdges(selectedNodes, edges);
const edgeIdsToRemove = [...selectedEdges, ...connectedEdges].map((e) => e.id);
const edgesToRemove = [...selectedEdges, ...connectedEdges];
const edgeIdsToRemove = edgesToRemove.map((e) => e.id);
if (hasDefaultNodes) {
selectedNodes.forEach((node) => {
@@ -48,6 +49,9 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => {
});
}
onNodesDelete?.(selectedNodes);
onEdgesDelete?.(edgesToRemove);
if (onNodesChange) {
const nodeChanges: NodeChange[] = selectedNodes.map((n) => ({ id: n.id, type: 'remove' }));
onNodesChange(nodeChanges);