From d464ccda77ad887917a0a0011b9d19587c8d1959 Mon Sep 17 00:00:00 2001 From: moklick Date: Sat, 2 Apr 2022 12:32:07 +0200 Subject: [PATCH] refactor(change-events): cleanup delete events #2036 --- example/src/Stress/index.tsx | 17 +++++++++++++++-- src/hooks/useGlobalKeyHandler.ts | 12 +++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/example/src/Stress/index.tsx b/example/src/Stress/index.tsx index d1804051..b076db27 100644 --- a/example/src/Stress/index.tsx +++ b/example/src/Stress/index.tsx @@ -10,6 +10,8 @@ import ReactFlow, { applyNodeChanges, Connection, addEdge, + applyEdgeChanges, + EdgeChange, } from 'react-flow-renderer'; import { getNodesAndEdges } from './utils'; @@ -21,7 +23,7 @@ const onInit = (reactFlowInstance: ReactFlowInstance) => { console.log(reactFlowInstance.getNodes()); }; -const { nodes: initialNodes, edges: initialEdges } = getNodesAndEdges(30, 30); +const { nodes: initialNodes, edges: initialEdges } = getNodesAndEdges(5, 5); const StressFlow = () => { const [nodes, setNodes] = useState(initialNodes); @@ -54,8 +56,19 @@ const StressFlow = () => { setNodes((ns) => applyNodeChanges(changes, ns)); }, []); + const onEdgeChange = useCallback((changes: EdgeChange[]) => { + setEdges((es) => applyEdgeChanges(changes, es)); + }, []); + return ( - + diff --git a/src/hooks/useGlobalKeyHandler.ts b/src/hooks/useGlobalKeyHandler.ts index e6e88057..8c9cb89d 100644 --- a/src/hooks/useGlobalKeyHandler.ts +++ b/src/hooks/useGlobalKeyHandler.ts @@ -12,14 +12,13 @@ interface HookParams { } const selector = (s: ReactFlowState) => ({ - resetSelectedElements: s.resetSelectedElements, onNodesChange: s.onNodesChange, onEdgesChange: s.onEdgesChange, }); export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => { const store = useStoreApi(); - const { resetSelectedElements, onNodesChange, onEdgesChange } = useStore(selector, shallow); + const { onNodesChange, onEdgesChange } = useStore(selector, shallow); const deleteKeyPressed = useKeyPress(deleteKeyCode); const multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode); @@ -41,7 +40,12 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => { if (deleteKeyPressed && (nodesToRemove || selectedEdges)) { const connectedEdges = getConnectedEdges(nodesToRemove, edges); const edgesToRemove = [...selectedEdges, ...connectedEdges]; - const edgeIdsToRemove = edgesToRemove.map((e) => e.id); + const edgeIdsToRemove = edgesToRemove.reduce((res, edge) => { + if (!res.includes(edge.id)) { + res.push(edge.id); + } + return res; + }, []); if (hasDefaultEdges || hasDefaultNodes) { if (hasDefaultEdges) { @@ -83,8 +87,6 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => { } store.setState({ nodesSelectionActive: false }); - - resetSelectedElements(); } }, [deleteKeyPressed, onNodesChange, onEdgesChange]);