refactor(noderenderer): add viewportBox to store
This commit is contained in:
@@ -72,8 +72,7 @@ const NodeRenderer = ({ onlyRenderVisibleNodes = true, ...props }: NodeRendererP
|
|||||||
const nodes = useStoreState((s) => s.nodes);
|
const nodes = useStoreState((s) => s.nodes);
|
||||||
const transform = useStoreState((s) => s.transform);
|
const transform = useStoreState((s) => s.transform);
|
||||||
const selectedElements = useStoreState((s) => s.selectedElements);
|
const selectedElements = useStoreState((s) => s.selectedElements);
|
||||||
const width = useStoreState((s) => s.width);
|
const viewportBox = useStoreState((s) => s.viewportBox);
|
||||||
const height = useStoreState((s) => s.height);
|
|
||||||
const nodesDraggable = useStoreState((s) => s.nodesDraggable);
|
const nodesDraggable = useStoreState((s) => s.nodesDraggable);
|
||||||
const nodesConnectable = useStoreState((s) => s.nodesConnectable);
|
const nodesConnectable = useStoreState((s) => s.nodesConnectable);
|
||||||
const elementsSelectable = useStoreState((s) => s.elementsSelectable);
|
const elementsSelectable = useStoreState((s) => s.elementsSelectable);
|
||||||
@@ -81,9 +80,7 @@ const NodeRenderer = ({ onlyRenderVisibleNodes = true, ...props }: NodeRendererP
|
|||||||
transform: `translate(${transform[0]}px,${transform[1]}px) scale(${transform[2]})`,
|
transform: `translate(${transform[0]}px,${transform[1]}px) scale(${transform[2]})`,
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderNodes = onlyRenderVisibleNodes
|
const renderNodes = onlyRenderVisibleNodes ? getNodesInside(nodes, viewportBox, transform, true) : nodes;
|
||||||
? getNodesInside(nodes, { x: 0, y: 0, width, height }, transform, true)
|
|
||||||
: nodes;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="react-flow__nodes" style={transformStyle}>
|
<div className="react-flow__nodes" style={transformStyle}>
|
||||||
|
|||||||
+4
-2
@@ -54,6 +54,7 @@ type SetSnapGrid = {
|
|||||||
export interface StoreModel {
|
export interface StoreModel {
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
|
viewportBox: Computed<StoreModel, Rect>;
|
||||||
transform: Transform;
|
transform: Transform;
|
||||||
elements: Elements;
|
elements: Elements;
|
||||||
nodes: Computed<StoreModel, Node[]>;
|
nodes: Computed<StoreModel, Node[]>;
|
||||||
@@ -136,10 +137,11 @@ export interface StoreModel {
|
|||||||
export const storeModel: StoreModel = {
|
export const storeModel: StoreModel = {
|
||||||
width: 0,
|
width: 0,
|
||||||
height: 0,
|
height: 0,
|
||||||
|
viewportBox: computed((state) => ({ x: 0, y: 0, width: state.width, height: state.height })),
|
||||||
transform: [0, 0, 1],
|
transform: [0, 0, 1],
|
||||||
elements: [],
|
elements: [],
|
||||||
nodes: computed([(state) => state.elements], (elements) => elements.filter((el) => isNode(el)) as Node[]),
|
nodes: computed((state) => state.elements.filter((el) => isNode(el)) as Node[]),
|
||||||
edges: computed([(state) => state.elements], (elements) => elements.filter((el) => isEdge(el)) as Edge[]),
|
edges: computed((state) => state.elements.filter((el) => isEdge(el)) as Edge[]),
|
||||||
selectedElements: null,
|
selectedElements: null,
|
||||||
selectedNodesBbox: { x: 0, y: 0, width: 0, height: 0 },
|
selectedNodesBbox: { x: 0, y: 0, width: 0, height: 0 },
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user