From 816b83cd8f52d8f4a0f0d69c57490b48a3f83dc3 Mon Sep 17 00:00:00 2001 From: Juha Paananen Date: Sat, 16 Mar 2024 13:46:56 +0200 Subject: [PATCH] Unselect hidden items and connections --- frontend/src/board/board-focus.ts | 19 ++++++++++++------- .../board/synchronize-focus-with-server.ts | 4 +--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/frontend/src/board/board-focus.ts b/frontend/src/board/board-focus.ts index b80beb164..ce4247204 100644 --- a/frontend/src/board/board-focus.ts +++ b/frontend/src/board/board-focus.ts @@ -75,13 +75,18 @@ export function removeFromSelection( } } -export function removeNonExistingFromSelection( - selection: BoardFocus, - existingItemIds: Set, - existingConnectionIds: Set, -): BoardFocus { - const toRemoveItems = difference(getSelectedItemIds(selection), existingItemIds) - const toRemoveConnections = difference(getSelectedConnectionIds(selection), existingConnectionIds) +export function removeNonExistingFromSelection(selection: BoardFocus, board: Board): BoardFocus { + const toRemoveItems = new Set( + [...getSelectedItemIds(selection)].filter((id) => { + if (!board.items[id]) return true + if (board.items[id].hidden) return true + }), + ) + const selectedConnectionIds = getSelectedConnectionIds(selection) + const toRemoveConnections = + selectedConnectionIds.size > 0 + ? difference(selectedConnectionIds, new Set(board.connections.filter((c) => !c.hidden).map((c) => c.id))) + : emptySet() return removeFromSelection(selection, toRemoveItems, toRemoveConnections) } diff --git a/frontend/src/board/synchronize-focus-with-server.ts b/frontend/src/board/synchronize-focus-with-server.ts index 50b24637d..0c15abf68 100644 --- a/frontend/src/board/synchronize-focus-with-server.ts +++ b/frontend/src/board/synchronize-focus-with-server.ts @@ -62,9 +62,7 @@ export function synchronizeFocusWithServer( // TODO consider selected connection in locking as well maybe const itemsWhereSomeoneElseHasLock = new Set(Object.keys(locks).filter((itemId) => locks[itemId] !== sessionId)) const nonLocked = removeFromSelection(focus, itemsWhereSomeoneElseHasLock, emptySet()) - const existingItemIds = new Set(Object.keys(board.items)) - const existingConnectionIds = new Set(board.connections.map((c) => c.id)) - return removeNonExistingFromSelection(nonLocked, existingItemIds, existingConnectionIds) + return removeNonExistingFromSelection(nonLocked, board) } resolvedFocus.forEach(unlockUnselectedItems)