diff --git a/frontend/src/board/board-focus.ts b/frontend/src/board/board-focus.ts index b80beb16..ce424720 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 50b24637..0c15abf6 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)