chore(node-toolbar): cleanup

This commit is contained in:
moklick
2022-11-25 21:35:39 +01:00
parent ec94d9ecdc
commit 1363d1e398
2 changed files with 15 additions and 9 deletions
@@ -1,13 +1,17 @@
import { NodeToolbar, useNodes } from 'reactflow'; import { NodeToolbar, ReactFlowState, useStore } from 'reactflow';
const selectedNodesSelector = (state: ReactFlowState) =>
Array.from(state.nodeInternals.values())
.filter((node) => node.selected)
.map((node) => node.id);
export default function SelectedNodesToolbar() { export default function SelectedNodesToolbar() {
const nodes = useNodes(); const selectedNodeIds = useStore(selectedNodesSelector);
const selectedNodeIds = nodes.filter((node) => node.selected).map((node) => node.id);
const isVisible = selectedNodeIds.length > 1; const isVisible = selectedNodeIds.length > 1;
return ( return (
<NodeToolbar nodeId={selectedNodeIds} isVisible={isVisible}> <NodeToolbar nodeId={selectedNodeIds} isVisible={isVisible}>
<button>Group selected nodes</button> <button>Selection action</button>
</NodeToolbar> </NodeToolbar>
); );
} }
+7 -5
View File
@@ -72,17 +72,19 @@ function NodeToolbar({
offset = 10, offset = 10,
...rest ...rest
}: NodeToolbarProps) { }: NodeToolbarProps) {
const nodeIds: string[] = typeof nodeId === 'string' ? [nodeId] : nodeId;
const nodesSelector = useCallback( const nodesSelector = useCallback(
(state: ReactFlowState): Node[] => (state: ReactFlowState): Node[] => {
nodeIds.reduce<Node[]>((acc, id) => { const nodeIds: string[] = typeof nodeId === 'string' ? [nodeId] : nodeId;
return nodeIds.reduce<Node[]>((acc, id) => {
const node = state.nodeInternals.get(id); const node = state.nodeInternals.get(id);
if (node) { if (node) {
acc.push(node); acc.push(node);
} }
return acc; return acc;
}, [] as Node[]), }, [] as Node[]);
[nodeIds] },
[nodeId]
); );
const nodes = useStore(nodesSelector, nodesEqualityFn); const nodes = useStore(nodesSelector, nodesEqualityFn);
const { transform, nodeOrigin, selectedNodesCount } = useStore(storeSelector, shallow); const { transform, nodeOrigin, selectedNodesCount } = useStore(storeSelector, shallow);