From 16707eaa99cf44bd1d6f9d055bda5a5e7f0a5522 Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 29 Jul 2020 10:40:15 +0200 Subject: [PATCH] fix(onlyRenderVisibleNodes): only render nodes that are inside the viewport --- src/container/NodeRenderer/index.tsx | 4 +--- src/utils/graph.ts | 11 +++++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/container/NodeRenderer/index.tsx b/src/container/NodeRenderer/index.tsx index e369dfe3..05f96543 100644 --- a/src/container/NodeRenderer/index.tsx +++ b/src/container/NodeRenderer/index.tsx @@ -77,10 +77,8 @@ const NodeRenderer = ({ onlyRenderVisibleNodes = true, ...props }: NodeRendererP const nodesDraggable = useStoreState((s) => s.nodesDraggable); const nodesConnectable = useStoreState((s) => s.nodesConnectable); const elementsSelectable = useStoreState((s) => s.elementsSelectable); - - const [tX, tY, tScale] = transform; const transformStyle = { - transform: `translate(${tX}px,${tY}px) scale(${tScale})`, + transform: `translate(${transform[0]}px,${transform[1]}px) scale(${transform[2]})`, }; const renderNodes = onlyRenderVisibleNodes diff --git a/src/utils/graph.ts b/src/utils/graph.ts index d11527eb..ad593f0b 100644 --- a/src/utils/graph.ts +++ b/src/utils/graph.ts @@ -169,10 +169,17 @@ export const getNodesInside = ( const yOverlap = Math.max(0, Math.min(rBox.y2, nBox.y2) - Math.max(rBox.y, nBox.y)); const overlappingArea = xOverlap * yOverlap; - if (partially) { - return overlappingArea >= 0; + if (width === null || height === null) { + // at the beginnning all nodes have width & height === 0 + return true; } + + if (partially) { + return overlappingArea > 0; + } + const area = width * height; + return overlappingArea >= area; }); };