feat(general): add defaultNodes, defaultEdges and defaultEdgeOptions

This commit is contained in:
moklick
2022-01-18 13:05:41 +01:00
parent 660ec00be5
commit 634b592b3a
14 changed files with 364 additions and 60 deletions
+20 -8
View File
@@ -25,7 +25,7 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => {
const multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode);
useEffect(() => {
const { nodeInternals, edges } = store.getState();
const { nodeInternals, edges, isControlled } = 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,15 +33,27 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => {
if (deleteKeyPressed && (selectedNodes || selectedEdges)) {
const connectedEdges = getConnectedEdges(selectedNodes, edges);
const edgeIdsToRemove = [...selectedEdges, ...connectedEdges].map((e) => e.id);
const nodeChanges: NodeChange[] = selectedNodes.map((n) => ({ id: n.id, type: 'remove' }));
const edgeChanges: EdgeChange[] = [...selectedEdges, ...connectedEdges].map((e) => ({
id: e.id,
type: 'remove',
}));
if (isControlled) {
selectedNodes.forEach((node) => {
nodeInternals.delete(node.id);
});
onNodesChange?.(nodeChanges);
onEdgesChange?.(edgeChanges);
store.setState({
nodeInternals: new Map(nodeInternals),
edges: edges.filter((e) => !edgeIdsToRemove.includes(e.id)),
});
} else {
const nodeChanges: NodeChange[] = selectedNodes.map((n) => ({ id: n.id, type: 'remove' }));
const edgeChanges: EdgeChange[] = edgeIdsToRemove.map((id) => ({
id,
type: 'remove',
}));
onNodesChange?.(nodeChanges);
onEdgesChange?.(edgeChanges);
}
store.setState({ nodesSelectionActive: false });