diff --git a/web/src/api/statestore/main.ts b/web/src/api/statestore/main.ts index 50b07d1..84ad5ff 100644 --- a/web/src/api/statestore/main.ts +++ b/web/src/api/statestore/main.ts @@ -77,7 +77,7 @@ export class StateStore { readonly spaceEdges: Map = new Map() readonly spaceOrphans = new SpaceOrphansSpace(this) readonly directChatsSpace = new DirectChatSpace() - readonly unreadsSpace = new UnreadsSpace() + readonly unreadsSpace = new UnreadsSpace(this) readonly pseudoSpaces = [ this.spaceOrphans, this.directChatsSpace, diff --git a/web/src/api/statestore/space.ts b/web/src/api/statestore/space.ts index 8e7eb02..f54cc4c 100644 --- a/web/src/api/statestore/space.ts +++ b/web/src/api/statestore/space.ts @@ -79,8 +79,13 @@ export class DirectChatSpace extends Space { export class UnreadsSpace extends Space { id = "fi.mau.gomuks.unreads" + constructor(private parent: StateStore) { + super() + } + include(room: RoomListEntry): boolean { - return Boolean(room.unread_messages + return Boolean(room.room_id === this.parent.activeRoomID + || room.unread_messages || room.unread_notifications || room.unread_highlights || room.marked_unread) diff --git a/web/src/ui/roomlist/RoomList.tsx b/web/src/ui/roomlist/RoomList.tsx index 04aff8d..4353524 100644 --- a/web/src/ui/roomlist/RoomList.tsx +++ b/web/src/ui/roomlist/RoomList.tsx @@ -49,7 +49,13 @@ const RoomList = ({ activeRoomID }: RoomListProps) => { const setSpace = useCallback((space: RoomListFilter | null) => { directSetSpace(space) client.store.currentRoomListFilter = space - }, [client]) + if (client.store.activeRoomID && space) { + const entry = client.store.rooms.get(client.store.activeRoomID)?.roomListEntry + if (entry && !space.include(entry)) { + mainScreen.setActiveRoom(null) + } + } + }, [client, mainScreen]) const onClickSpace = useCallback((evt: React.MouseEvent) => { const store = client.store.getSpaceStore(evt.currentTarget.getAttribute("data-target-space")!) setSpace(store)