From 2a7effd2918453b21d5aa40e6e28e266123eb7b1 Mon Sep 17 00:00:00 2001 From: moklick Date: Thu, 15 Dec 2022 10:54:40 +0100 Subject: [PATCH] fix(selection): do not select hidden nodes closes #2679 --- .../core/src/components/UserSelection/index.tsx | 15 +++++++++++---- packages/core/src/utils/graph.ts | 4 ++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/core/src/components/UserSelection/index.tsx b/packages/core/src/components/UserSelection/index.tsx index f5dc551d..87f801d0 100644 --- a/packages/core/src/components/UserSelection/index.tsx +++ b/packages/core/src/components/UserSelection/index.tsx @@ -102,12 +102,19 @@ const UserSelection = memo( const onMouseDown = (event: ReactMouseEvent): void => { const { resetSelectedElements, domNode } = store.getState(); - if (!elementsSelectable || !isSelecting || event.button !== 0 || event.target !== container.current || !domNode) { + containerBounds.current = domNode?.getBoundingClientRect(); + + if ( + !elementsSelectable || + !isSelecting || + event.button !== 0 || + event.target !== container.current || + !containerBounds.current + ) { return; } - containerBounds.current = domNode.getBoundingClientRect(); - const { x, y } = getMousePosition(event, containerBounds.current!); + const { x, y } = getMousePosition(event, containerBounds.current); resetSelectedElements(); @@ -134,7 +141,7 @@ const UserSelection = memo( store.setState({ userSelectionActive: true, nodesSelectionActive: false }); - const mousePos = getMousePosition(event, containerBounds.current!); + const mousePos = getMousePosition(event, containerBounds.current); const startX = userSelectionRect.startX ?? 0; const startY = userSelectionRect.startY ?? 0; diff --git a/packages/core/src/utils/graph.ts b/packages/core/src/utils/graph.ts index 9a3d4c42..846050f5 100644 --- a/packages/core/src/utils/graph.ts +++ b/packages/core/src/utils/graph.ts @@ -218,9 +218,9 @@ export const getNodesInside = ( const visibleNodes: Node[] = []; nodeInternals.forEach((node) => { - const { width, height, selectable = true } = node; + const { width, height, selectable = true, hidden = false } = node; - if (excludeNonSelectableNodes && !selectable) { + if ((excludeNonSelectableNodes && !selectable) || hidden) { return false; }