refactor(change-events): cleanup delete events #2036

This commit is contained in:
moklick
2022-04-02 12:32:07 +02:00
parent 1c699f889a
commit d464ccda77
2 changed files with 22 additions and 7 deletions
+15 -2
View File
@@ -10,6 +10,8 @@ import ReactFlow, {
applyNodeChanges, applyNodeChanges,
Connection, Connection,
addEdge, addEdge,
applyEdgeChanges,
EdgeChange,
} from 'react-flow-renderer'; } from 'react-flow-renderer';
import { getNodesAndEdges } from './utils'; import { getNodesAndEdges } from './utils';
@@ -21,7 +23,7 @@ const onInit = (reactFlowInstance: ReactFlowInstance) => {
console.log(reactFlowInstance.getNodes()); console.log(reactFlowInstance.getNodes());
}; };
const { nodes: initialNodes, edges: initialEdges } = getNodesAndEdges(30, 30); const { nodes: initialNodes, edges: initialEdges } = getNodesAndEdges(5, 5);
const StressFlow = () => { const StressFlow = () => {
const [nodes, setNodes] = useState<Node[]>(initialNodes); const [nodes, setNodes] = useState<Node[]>(initialNodes);
@@ -54,8 +56,19 @@ const StressFlow = () => {
setNodes((ns) => applyNodeChanges(changes, ns)); setNodes((ns) => applyNodeChanges(changes, ns));
}, []); }, []);
const onEdgeChange = useCallback((changes: EdgeChange[]) => {
setEdges((es) => applyEdgeChanges(changes, es));
}, []);
return ( return (
<ReactFlow nodes={nodes} edges={edges} onInit={onInit} onConnect={onConnect} onNodesChange={onNodesChange}> <ReactFlow
nodes={nodes}
edges={edges}
onInit={onInit}
onConnect={onConnect}
onNodesChange={onNodesChange}
onEdgesChange={onEdgeChange}
>
<MiniMap /> <MiniMap />
<Controls /> <Controls />
<Background /> <Background />
+7 -5
View File
@@ -12,14 +12,13 @@ interface HookParams {
} }
const selector = (s: ReactFlowState) => ({ const selector = (s: ReactFlowState) => ({
resetSelectedElements: s.resetSelectedElements,
onNodesChange: s.onNodesChange, onNodesChange: s.onNodesChange,
onEdgesChange: s.onEdgesChange, onEdgesChange: s.onEdgesChange,
}); });
export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => { export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => {
const store = useStoreApi(); const store = useStoreApi();
const { resetSelectedElements, onNodesChange, onEdgesChange } = useStore(selector, shallow); const { onNodesChange, onEdgesChange } = useStore(selector, shallow);
const deleteKeyPressed = useKeyPress(deleteKeyCode); const deleteKeyPressed = useKeyPress(deleteKeyCode);
const multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode); const multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode);
@@ -41,7 +40,12 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => {
if (deleteKeyPressed && (nodesToRemove || selectedEdges)) { if (deleteKeyPressed && (nodesToRemove || selectedEdges)) {
const connectedEdges = getConnectedEdges(nodesToRemove, edges); const connectedEdges = getConnectedEdges(nodesToRemove, edges);
const edgesToRemove = [...selectedEdges, ...connectedEdges]; const edgesToRemove = [...selectedEdges, ...connectedEdges];
const edgeIdsToRemove = edgesToRemove.map((e) => e.id); const edgeIdsToRemove = edgesToRemove.reduce<string[]>((res, edge) => {
if (!res.includes(edge.id)) {
res.push(edge.id);
}
return res;
}, []);
if (hasDefaultEdges || hasDefaultNodes) { if (hasDefaultEdges || hasDefaultNodes) {
if (hasDefaultEdges) { if (hasDefaultEdges) {
@@ -83,8 +87,6 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => {
} }
store.setState({ nodesSelectionActive: false }); store.setState({ nodesSelectionActive: false });
resetSelectedElements();
} }
}, [deleteKeyPressed, onNodesChange, onEdgesChange]); }, [deleteKeyPressed, onNodesChange, onEdgesChange]);