refactor(store): cleanup

This commit is contained in:
moklick
2021-10-13 16:30:34 +02:00
parent 1f41cc0d9a
commit 3dc79276ad
+27 -33
View File
@@ -39,6 +39,14 @@ import { getHandleBounds } from '../components/Nodes/utils';
const { Provider, useStore, useStoreApi } = createContext<ReactFlowState>(); const { Provider, useStore, useStoreApi } = createContext<ReactFlowState>();
const unselectElements = (elements: Elements) =>
elements
.filter((e) => e.selected)
.map((e) => ({
id: e.id,
change: { selected: false },
}));
const createStore = () => const createStore = () =>
create<ReactFlowState>((set, get) => ({ create<ReactFlowState>((set, get) => ({
width: 0, width: 0,
@@ -262,34 +270,33 @@ const createStore = () =>
const { multiSelectionActive, onNodesChange, onEdgesChange, nodes, edges } = get(); const { multiSelectionActive, onNodesChange, onEdgesChange, nodes, edges } = get();
const selectedElementsArr = Array.isArray(elements) ? elements : [elements]; const selectedElementsArr = Array.isArray(elements) ? elements : [elements];
let selectedNodes; let changedNodes;
let selectedEdges; let changedEdges;
if (multiSelectionActive) { if (multiSelectionActive) {
selectedNodes = selectedElementsArr.filter(isNode).map((node) => ({ id: node.id, change: { selected: true } })); changedNodes = selectedElementsArr.filter(isNode).map((node) => ({ id: node.id, change: { selected: true } }));
selectedEdges = selectedElementsArr.filter(isEdge).map((edge) => ({ id: edge.id, change: { selected: true } })); changedEdges = selectedElementsArr.filter(isEdge).map((edge) => ({ id: edge.id, change: { selected: true } }));
} else { } else {
selectedNodes = nodes.map((node) => ({ changedNodes = nodes.map((node) => ({
id: node.id, id: node.id,
change: { selected: selectedElementsArr.some((e) => e.id === node.id) }, change: { selected: selectedElementsArr.some((e) => e.id === node.id) },
})); }));
selectedEdges = edges.map((edge) => ({ changedEdges = edges.map((edge) => ({
id: edge.id, id: edge.id,
change: { selected: selectedElementsArr.some((e) => e.id === edge.id) }, change: { selected: selectedElementsArr.some((e) => e.id === edge.id) },
})); }));
} }
onNodesChange?.(selectedNodes); onNodesChange?.(changedNodes);
onEdgesChange?.(selectedEdges); onEdgesChange?.(changedEdges);
}, },
initD3Zoom: ({ d3Zoom, d3Selection, d3ZoomHandler, transform }: InitD3ZoomPayload) => { initD3Zoom: ({ d3Zoom, d3Selection, d3ZoomHandler, transform }: InitD3ZoomPayload) =>
set({ set({
d3Zoom, d3Zoom,
d3Selection, d3Selection,
d3ZoomHandler, d3ZoomHandler,
transform, transform,
}); }),
},
setMinZoom: (minZoom: number) => { setMinZoom: (minZoom: number) => {
const { d3Zoom, maxZoom } = get(); const { d3Zoom, maxZoom } = get();
d3Zoom?.scaleExtent([minZoom, maxZoom]); d3Zoom?.scaleExtent([minZoom, maxZoom]);
@@ -308,7 +315,14 @@ const createStore = () =>
set({ translateExtent }); set({ translateExtent });
}, },
setNodeExtent: (nodeExtent: NodeExtent) => {
resetSelectedElements: () => {
const { nodes, edges, onNodesChange, onEdgesChange } = get();
onNodesChange?.(unselectElements(nodes));
onEdgesChange?.(unselectElements(edges));
},
setNodeExtent: (nodeExtent: NodeExtent) =>
set({ set({
nodeExtent, nodeExtent,
nodes: get().nodes.map((node) => { nodes: get().nodes.map((node) => {
@@ -317,27 +331,7 @@ const createStore = () =>
position: clampPosition(node.position, nodeExtent), position: clampPosition(node.position, nodeExtent),
}; };
}), }),
}); }),
},
resetSelectedElements: () => {
const { nodes, edges, onNodesChange, onEdgesChange } = get();
const selectedNodes = nodes
.filter((n) => n.selected)
.map((n) => ({
id: n.id,
change: { selected: false },
}));
const selectedEdges = edges
.filter((e) => e.selected)
.map((e) => ({
id: e.id,
change: { selected: false },
}));
onNodesChange?.(selectedNodes);
onEdgesChange?.(selectedEdges);
},
unsetNodesSelection: () => set({ nodesSelectionActive: false }), unsetNodesSelection: () => set({ nodesSelectionActive: false }),
updateTransform: (transform: Transform) => set({ transform }), updateTransform: (transform: Transform) => set({ transform }),
updateSize: (size: Dimensions) => set({ width: size.width || 500, height: size.height || 500 }), updateSize: (size: Dimensions) => set({ width: size.width || 500, height: size.height || 500 }),