From e3b2356302b1c4a0008b639e777d88c27fce97f2 Mon Sep 17 00:00:00 2001 From: guarzo Date: Sat, 4 Jan 2025 15:22:41 -0500 Subject: [PATCH] fix(map): prevent deselect on click to map (#96) Fixes #80 - Prevents single node deselection on background / same node click - Allows deseletion of all nodes if multiple are currently selected --- assets/js/hooks/Mapper/components/map/Map.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/assets/js/hooks/Mapper/components/map/Map.tsx b/assets/js/hooks/Mapper/components/map/Map.tsx index fa1dc1b8..9e007176 100644 --- a/assets/js/hooks/Mapper/components/map/Map.tsx +++ b/assets/js/hooks/Mapper/components/map/Map.tsx @@ -119,7 +119,7 @@ const MapComp = ({ isSoftBackground, onAddSystem, }: MapCompProps) => { - const { getNode } = useReactFlow(); + const { getNode, getNodes } = useReactFlow(); const [nodes, , onNodesChange] = useNodesState>(initialNodes); const [edges, , onEdgesChange] = useEdgesState>(initialEdges); @@ -186,6 +186,12 @@ const MapComp = ({ (changes: NodeChange[]) => { const systemsIdsToRemove: string[] = []; + // prevents single node deselection on background / same node click + // allows deseletion of all nodes if multiple are currently selected + if (changes.length === 1 && changes[0].type == 'select' && changes[0].selected === false) { + changes[0].selected = getNodes().filter(node => node.selected).length === 1; + } + const nextChanges = changes.reduce((acc, change) => { if (change.type !== 'remove') { return [...acc, change];