Room list: fix *Chat moved* toast appearing when room list is loaded (#34305)
* Fix Chat moved toast appearing when room list is loaded * Update e2e tests
This commit is contained in:
@@ -181,15 +181,6 @@ test.describe("Room list unread activity toast", () => {
|
||||
// Wait until the collapsed Chats header has been pushed offscreen (all favourites synced).
|
||||
await expect(chatsHeader).not.toBeInViewport();
|
||||
|
||||
// Tagging rooms into the Favourites section raises a transient "Chat moved" toast, which
|
||||
// shares the single toast slot with — and takes precedence over — the unread-activity toast
|
||||
// (see RoomListView). Dismiss it via its close button so the unread toast can surface; by now
|
||||
// all favourites have synced, so it will not re-appear.
|
||||
const chatMovedToast = page.getByText("Chat moved");
|
||||
await expect(chatMovedToast).toBeVisible();
|
||||
await page.getByRole("button", { name: "Close" }).click();
|
||||
await expect(chatMovedToast).not.toBeVisible();
|
||||
|
||||
// The collapsed Chats header is offscreen, but its hidden notification raises the toast.
|
||||
await expect(getToast(page)).toBeVisible();
|
||||
|
||||
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 6.7 KiB |
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 14 KiB |
@@ -272,8 +272,16 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient<EmptyObject> {
|
||||
}
|
||||
|
||||
case "MatrixActions.Room.tags": {
|
||||
// Re-sort on any tag change, but don't emit ROOM_TAGGED_EVENT here: the js-sdk
|
||||
// re-emits RoomEvent.Tags for every m.tag on every sync, which would show a spurious
|
||||
// "chat moved" toast on load. It is emitted from tagRoom.success below instead.
|
||||
const room = payload.room;
|
||||
this.addRoomAndEmit(room);
|
||||
break;
|
||||
}
|
||||
|
||||
case "RoomListActions.tagRoom.success": {
|
||||
// Tag change initiated by the local user, so surface the "chat moved" toast.
|
||||
this.emit(ROOM_TAGGED_EVENT);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import type { MatrixClient } from "matrix-js-sdk/src/matrix";
|
||||
import type { RoomNotificationState } from "../../../../src/stores/notifications/RoomNotificationState";
|
||||
import {
|
||||
LISTS_UPDATE_EVENT,
|
||||
ROOM_TAGGED_EVENT,
|
||||
SECTION_CREATED_EVENT,
|
||||
RoomListStoreV3Class,
|
||||
type Section,
|
||||
@@ -346,6 +347,19 @@ describe("RoomListStoreV3", () => {
|
||||
expect(fn).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("emits ROOM_TAGGED_EVENT on a local user tag action", async () => {
|
||||
const { store, dispatcher } = await getRoomListStore();
|
||||
const fn = jest.fn();
|
||||
store.on(ROOM_TAGGED_EVENT, fn);
|
||||
dispatcher.dispatch(
|
||||
{
|
||||
action: "RoomListActions.tagRoom.success",
|
||||
},
|
||||
true,
|
||||
);
|
||||
expect(fn).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("Room is re-inserted on decryption", async () => {
|
||||
const { store, rooms, client, dispatcher } = await getRoomListStore();
|
||||
jest.spyOn(client, "getRoom").mockImplementation(() => rooms[10]);
|
||||
|
||||
Reference in New Issue
Block a user