Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Fix clicking on home all rooms space notification not working (#11337)
Browse files Browse the repository at this point in the history
* Fix clicking on home all rooms space notification not working

* Add test
  • Loading branch information
t3chguy committed Aug 2, 2023
1 parent e6bf67a commit 8166306
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 24 deletions.
43 changes: 20 additions & 23 deletions src/stores/spaces/SpaceStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -193,35 +193,32 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
if (!isMetaSpace(space) && !this.matrixClient?.getRoom(space)?.isSpaceRoom()) return;
if (space !== this.activeSpace) this.setActiveSpace(space, false);

if (space) {
const roomId = this.getNotificationState(space).getFirstRoomWithNotifications();
let roomId: string | undefined;
if (space === MetaSpace.Home && this.allRoomsInHome) {
const hasMentions = RoomNotificationStateStore.instance.globalState.hasMentions;
const lists = RoomListStore.instance.orderedLists;
tagLoop: for (let i = 0; i < TAG_ORDER.length; i++) {
const t = TAG_ORDER[i];
if (!lists[t]) continue;
for (const room of lists[t]) {
const state = RoomNotificationStateStore.instance.getRoomState(room);
if (hasMentions ? state.hasMentions : state.isUnread) {
roomId = room.roomId;
break tagLoop;
}
}
}
} else {
roomId = this.getNotificationState(space).getFirstRoomWithNotifications();
}

if (!!roomId) {
defaultDispatcher.dispatch<ViewRoomPayload>({
action: Action.ViewRoom,
room_id: roomId,
context_switch: true,
metricsTrigger: "WebSpacePanelNotificationBadge",
});
} else {
const lists = RoomListStore.instance.orderedLists;
for (let i = 0; i < TAG_ORDER.length; i++) {
const t = TAG_ORDER[i];
const listRooms = lists[t];
const unreadRoom = listRooms.find((r: Room) => {
if (this.showInHomeSpace(r)) {
const state = RoomNotificationStateStore.instance.getRoomState(r);
return state.isUnread;
}
});
if (unreadRoom) {
defaultDispatcher.dispatch<ViewRoomPayload>({
action: Action.ViewRoom,
room_id: unreadRoom.roomId,
context_switch: true,
metricsTrigger: "WebSpacePanelNotificationBadge",
});
break;
}
}
}
}

Expand Down
31 changes: 30 additions & 1 deletion test/stores/SpaceStore-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { EventType } from "matrix-js-sdk/src/@types/event";
import { RoomMember } from "matrix-js-sdk/src/models/room-member";
import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state";
import { defer } from "matrix-js-sdk/src/utils";
import { ClientEvent, RoomEvent, MatrixEvent, Room } from "matrix-js-sdk/src/matrix";
import { ClientEvent, MatrixEvent, Room, RoomEvent } from "matrix-js-sdk/src/matrix";

import SpaceStore from "../../src/stores/spaces/SpaceStore";
import {
Expand All @@ -38,6 +38,10 @@ import SettingsStore from "../../src/settings/SettingsStore";
import { SettingLevel } from "../../src/settings/SettingLevel";
import { Action } from "../../src/dispatcher/actions";
import { MatrixClientPeg } from "../../src/MatrixClientPeg";
import RoomListStore from "../../src/stores/room-list/RoomListStore";
import { DefaultTagID } from "../../src/stores/room-list/models";
import { RoomNotificationStateStore } from "../../src/stores/notifications/RoomNotificationStateStore";
import { NotificationColor } from "../../src/stores/notifications/NotificationColor";

jest.useFakeTimers();

Expand Down Expand Up @@ -1452,4 +1456,29 @@ describe("SpaceStore", () => {
expect(client.getVisibleRooms).not.toHaveBeenCalledWith();
});
});

describe("setActiveRoomInSpace", () => {
it("should work with Home as all rooms space", async () => {
const room = mkRoom(room1);
const state = RoomNotificationStateStore.instance.getRoomState(room);
// @ts-ignore
state._color = NotificationColor.Grey;
jest.spyOn(RoomListStore.instance, "orderedLists", "get").mockReturnValue({
[DefaultTagID.Untagged]: [room],
});

// init the store
await run();
await setShowAllRooms(true);

store.setActiveRoomInSpace(MetaSpace.Home);

expect(spyDispatcher).toHaveBeenCalledWith(
expect.objectContaining({
action: "view_room",
room_id: room.roomId,
}),
);
});
});
});

0 comments on commit 8166306

Please sign in to comment.