From d594d91f729ec18d318bcef821492b9262b3d389 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 8 Dec 2020 10:51:27 +0100 Subject: [PATCH] fix(onElementsRemove): always return all connected edges closes #750 --- src/hooks/useGlobalKeyHandler.ts | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/hooks/useGlobalKeyHandler.ts b/src/hooks/useGlobalKeyHandler.ts index d7e392a6..c43997a9 100644 --- a/src/hooks/useGlobalKeyHandler.ts +++ b/src/hooks/useGlobalKeyHandler.ts @@ -3,7 +3,7 @@ import { useEffect } from 'react'; import { useStore, useStoreActions } from '../store/hooks'; import useKeyPress from './useKeyPress'; import { isNode, getConnectedEdges } from '../utils/graph'; -import { Elements, KeyCode } from '../types'; +import { Elements, KeyCode, ElementId, FlowElement } from '../types'; interface HookParams { deleteKeyCode: KeyCode; @@ -23,17 +23,16 @@ export default ({ deleteKeyCode, multiSelectionKeyCode, onElementsRemove }: Hook useEffect(() => { const { edges, selectedElements } = store.getState(); + if (onElementsRemove && deleteKeyPressed && selectedElements) { - let elementsToRemove = selectedElements; + const selectedNodes = selectedElements.filter(isNode); + const connectedEdges = getConnectedEdges(selectedNodes, edges); + const elementsToRemove = [...selectedElements, ...connectedEdges].reduce( + (res, item) => res.set(item.id, item), + new Map() + ); - // we also want to remove the edges if only one node is selected - if (selectedElements.length === 1 && isNode(selectedElements[0])) { - const node = selectedElements[0]; - const connectedEdges = getConnectedEdges([node], edges); - elementsToRemove = [...selectedElements, ...connectedEdges]; - } - - onElementsRemove(elementsToRemove); + onElementsRemove(Array.from(elementsToRemove.values())); unsetNodesSelection(); resetSelectedElements(); }