diff --git a/src/domain/session/RoomGridViewModel.js b/src/domain/session/RoomGridViewModel.js index dcea1a26..d8dc38ab 100644 --- a/src/domain/session/RoomGridViewModel.js +++ b/src/domain/session/RoomGridViewModel.js @@ -34,6 +34,9 @@ export class RoomGridViewModel extends ViewModel { } setFocusedIndex(idx) { + if (idx === this._selectedIndex) { + return; + } const oldItem = this._viewModels[this._selectedIndex]; oldItem?.tileVM?.close(); this._selectedIndex = idx; @@ -69,8 +72,8 @@ export class RoomGridViewModel extends ViewModel { /** * @package */ - hasRoomId(roomId) { - return this._viewModels.some(vms => vms?.vm._room.id === roomId); + roomIndex(roomId) { + return this._viewModels.findIndex(vms => vms?.vm._room.id === roomId); } /** diff --git a/src/domain/session/SessionViewModel.js b/src/domain/session/SessionViewModel.js index 467bc169..082d738f 100644 --- a/src/domain/session/SessionViewModel.js +++ b/src/domain/session/SessionViewModel.js @@ -111,8 +111,12 @@ export class SessionViewModel extends ViewModel { _openRoom(room, roomTileVM) { // for now, we don't support having the same room opened more than once, // so bail out if we already have the room open - if (this._gridViewModel?.hasRoomId(room.id)) { - return; + if (this._gridViewModel) { + const roomIndex = this._gridViewModel.roomIndex(room.id); + if (roomIndex >= 0) { + this._gridViewModel.setFocusedIndex(roomIndex); + return; + } } else if (this._currentRoomViewModel?._room.id === room.id) { return; }