From 0f515f581e4b23713c710304c5c2cd6a49ccc52e Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Tue, 31 Mar 2026 20:43:32 +0200 Subject: [PATCH] Room list: add default sections (#32785) * feat: add sections to RLSV3 * feat: add sections in vms * feat: add room list section labs flag * fix: wrong margin for room list item when in sections * feat: hide favourites and low priority filters * fix: crash when changing filter * feat: support sticky room in sections * test: update SC snapshot * test: update SC screenshot * test: update RLS tests * test: add tests to RoomListSectionHeaderViewModel * test: fix existing test in RoomListViewModel * test: add sections tests for RoomListViewModel * test: add e2e tests for sections * fix: incorrect selected room when expanding/collasping a section * fix: typo in `roomSkipList` * feat: use one skip list with all filters instead of one list by tag * chore: put back comment about `roomIndexInSection` * chore: add missing `readonly` * chore: add doc about possible undefined value for room item vm --- .../room-list-sections.spec.ts | 260 +++++++++++++ .../room-list-sections-collapsed-linux.png | Bin 0 -> 7286 bytes .../room-list-sections-linux.png | Bin 0 -> 15370 bytes apps/web/src/i18n/strings/en_EN.json | 6 + apps/web/src/settings/Settings.tsx | 10 + .../stores/room-list-v3/RoomListStoreV3.ts | 96 ++++- .../skip-list/filters/ExcludeTagsFilter.ts | 22 ++ .../skip-list/filters/FavouriteFilter.ts | 7 +- .../skip-list/filters/InvitesFilter.ts | 7 +- .../skip-list/filters/LowPriorityFilter.ts | 7 +- .../skip-list/filters/MentionsFilter.ts | 7 +- .../skip-list/filters/PeopleFilter.ts | 7 +- .../skip-list/filters/RoomsFilter.ts | 7 +- .../skip-list/filters/TagFilter.ts | 22 ++ .../skip-list/filters/UnreadFilter.ts | 7 +- .../room-list-v3/skip-list/filters/index.ts | 19 +- .../RoomListSectionHeaderViewModel.ts | 40 ++ .../viewmodels/room-list/RoomListViewModel.ts | 270 +++++++++---- .../room-list-v3/RoomListStoreV3-test.ts | 255 ++++++++++++- .../RoomListSectionHeaderViewModel-test.ts | 48 +++ .../room-list/RoomListViewModel-test.tsx | 361 ++++++++++++++++-- .../large-section-list-auto.png | Bin 38516 -> 58253 bytes .../RoomListView.stories.tsx/section-auto.png | Bin 37490 -> 57089 bytes .../small-section-list-auto.png | Bin 16538 -> 32479 bytes .../sections-auto.png | Bin 23021 -> 40143 bytes .../room-list/RoomListView/RoomListView.tsx | 7 +- .../__snapshots__/RoomListView.test.tsx.snap | 6 +- .../VirtualizedRoomListView.tsx | 30 +- 28 files changed, 1299 insertions(+), 202 deletions(-) create mode 100644 apps/web/playwright/e2e/left-panel/room-list-panel/room-list-sections.spec.ts create mode 100644 apps/web/playwright/snapshots/left-panel/room-list-panel/room-list-sections.spec.ts/room-list-sections-collapsed-linux.png create mode 100644 apps/web/playwright/snapshots/left-panel/room-list-panel/room-list-sections.spec.ts/room-list-sections-linux.png create mode 100644 apps/web/src/stores/room-list-v3/skip-list/filters/ExcludeTagsFilter.ts create mode 100644 apps/web/src/stores/room-list-v3/skip-list/filters/TagFilter.ts create mode 100644 apps/web/src/viewmodels/room-list/RoomListSectionHeaderViewModel.ts create mode 100644 apps/web/test/viewmodels/room-list/RoomListSectionHeaderViewModel-test.ts diff --git a/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-sections.spec.ts b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-sections.spec.ts new file mode 100644 index 0000000000..fdc3513792 --- /dev/null +++ b/apps/web/playwright/e2e/left-panel/room-list-panel/room-list-sections.spec.ts @@ -0,0 +1,260 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { type Locator, type Page } from "@playwright/test"; + +import { expect, test } from "../../../element-web-test"; + +test.describe("Room list sections", () => { + test.use({ + displayName: "Alice", + labsFlags: ["feature_new_room_list", "feature_room_list_sections"], + botCreateOpts: { + displayName: "BotBob", + autoAcceptInvites: true, + }, + }); + + /** + * Get the room list + * @param page + */ + function getRoomList(page: Page): Locator { + return page.getByTestId("room-list"); + } + + /** + * Get the primary filters + * @param page + */ + function getPrimaryFilters(page: Page): Locator { + return page.getByTestId("primary-filters"); + } + + /** + * Get a section header toggle button by section name + * @param page + * @param sectionName The display name of the section (e.g. "Favourites", "Chats", "Low Priority") + */ + function getSectionHeader(page: Page, sectionName: string): Locator { + return getRoomList(page).getByRole("gridcell", { name: `Toggle ${sectionName} section` }); + } + + test.beforeEach(async ({ page, app, user }) => { + // The notification toast is displayed above the search section + await app.closeNotificationToast(); + + // focus the user menu to avoid to have hover decoration + await page.getByRole("button", { name: "User menu" }).focus(); + }); + + test.describe("Section rendering", () => { + test.beforeEach(async ({ app, user }) => { + // Create regular rooms + for (let i = 0; i < 3; i++) { + await app.client.createRoom({ name: `room${i}` }); + } + }); + + test("should render sections with correct rooms in each", { tag: "@screenshot" }, async ({ page, app }) => { + // Create a favourite room + const favouriteId = await app.client.createRoom({ name: "favourite room" }); + await app.client.evaluate(async (client, roomId) => { + await client.setRoomTag(roomId, "m.favourite"); + }, favouriteId); + + // Create a low priority room + const lowPrioId = await app.client.createRoom({ name: "low prio room" }); + await app.client.evaluate(async (client, roomId) => { + await client.setRoomTag(roomId, "m.lowpriority"); + }, lowPrioId); + + const roomList = getRoomList(page); + + // All three section headers should be visible + await expect(getSectionHeader(page, "Favourites")).toBeVisible(); + await expect(getSectionHeader(page, "Chats")).toBeVisible(); + await expect(getSectionHeader(page, "Low Priority")).toBeVisible(); + + // Ensure all rooms are visible + await expect(roomList.getByRole("row", { name: "Open room favourite room" })).toBeVisible(); + await expect(roomList.getByRole("row", { name: "Open room low prio room" })).toBeVisible(); + await expect(roomList.getByRole("row", { name: "Open room room0" })).toBeVisible(); + + await expect(roomList).toMatchScreenshot("room-list-sections.png"); + }); + + test("should only show non-empty sections", async ({ page, app }) => { + // No low priority rooms created, only regular and favourite rooms + const favouriteId = await app.client.createRoom({ name: "favourite room" }); + await app.client.evaluate(async (client, roomId) => { + await client.setRoomTag(roomId, "m.favourite"); + }, favouriteId); + + // Chats and Favourites sections should still be visible + await expect(getSectionHeader(page, "Chats")).toBeVisible(); + await expect(getSectionHeader(page, "Favourites")).toBeVisible(); + // Low Priority sections should not be visible + await expect(getSectionHeader(page, "Low Priority")).not.toBeVisible(); + }); + + test("should render a flat list when there is only rooms in Chats section", async ({ page, app }) => { + // All sections should not be visible + await expect(getSectionHeader(page, "Chats")).not.toBeVisible(); + await expect(getSectionHeader(page, "Favourites")).not.toBeVisible(); + await expect(getSectionHeader(page, "Low Priority")).not.toBeVisible(); + // It should be a flat list (using listbox a11y role) + await expect(page.getByRole("listbox", { name: "Room list", exact: true })).toBeVisible(); + await expect(getRoomList(page).getByRole("option", { name: "Open room room0" })).toBeVisible(); + }); + }); + + test.describe("Section collapse and expand", () => { + [ + { section: "Favourites", roomName: "favourite room", tag: "m.favourite" }, + { section: "Low Priority", roomName: "low prio room", tag: "m.lowpriority" }, + ].forEach(({ section, roomName, tag }) => { + test(`should collapse and expand the ${section} section`, async ({ page, app }) => { + const roomId = await app.client.createRoom({ name: roomName }); + if (tag) { + await app.client.evaluate( + async (client, { roomId, tag }) => { + await client.setRoomTag(roomId, tag); + }, + { roomId, tag }, + ); + } + + const roomList = getRoomList(page); + const sectionHeader = getSectionHeader(page, section); + + // The room should be visible + await expect(roomList.getByRole("row", { name: `Open room ${roomName}` })).toBeVisible(); + + // Collapse the section + await sectionHeader.click(); + + // The room should no longer be visible + await expect(roomList.getByRole("row", { name: `Open room ${roomName}` })).not.toBeVisible(); + + // The section header should still be visible + await expect(sectionHeader).toBeVisible(); + + // Expand the section again + await sectionHeader.click(); + + // The room should be visible again + await expect(roomList.getByRole("row", { name: `Open room ${roomName}` })).toBeVisible(); + }); + }); + + test("should render collapsed section", { tag: "@screenshot" }, async ({ page, app }) => { + const favouriteId = await app.client.createRoom({ name: "favourite room" }); + await app.client.evaluate(async (client, roomId) => { + await client.setRoomTag(roomId, "m.favourite"); + }, favouriteId); + + await app.client.createRoom({ name: "regular room" }); + + const roomList = getRoomList(page); + + // Collapse the Favourites section + await getSectionHeader(page, "Favourites").click(); + + // Verify favourite room is hidden but regular room is still visible + await expect(roomList.getByRole("row", { name: "Open room favourite room" })).not.toBeVisible(); + await expect(roomList.getByRole("row", { name: "Open room regular room" })).toBeVisible(); + + await expect(roomList).toMatchScreenshot("room-list-sections-collapsed.png"); + }); + }); + + test.describe("Rooms placement in sections", () => { + test("should move a room between sections when tags change", async ({ page, app }) => { + await app.client.createRoom({ name: "my room" }); + + const roomList = getRoomList(page); + + // Flat list because there is only rooms in the Chats section + let roomItem = roomList.getByRole("option", { name: "Open room my room" }); + await expect(roomItem).toBeVisible(); + + // Favourite the room via context menu + await roomItem.click({ button: "right" }); + await page.getByRole("menuitemcheckbox", { name: "Favourited" }).click(); + + // The Favourites section header should now be visible and the room should be under it + await expect(getSectionHeader(page, "Favourites")).toBeVisible(); + roomItem = roomList.getByRole("row", { name: "Open room my room" }); + await expect(roomItem).toBeVisible(); + + // Unfavourite the room + await roomItem.hover(); + await roomItem.getByRole("button", { name: "More Options" }).click(); + await page.getByRole("menuitemcheckbox", { name: "Favourited" }).click(); + + // Mark the room as low priority via context menu + roomItem = roomList.getByRole("option", { name: "Open room my room" }); + await roomItem.click({ button: "right" }); + await page.getByRole("menuitemcheckbox", { name: "Low priority" }).click(); + + // The Low Priority section header should now be visible and the room should be under it + await expect(getSectionHeader(page, "Low Priority")).toBeVisible(); + roomItem = roomList.getByRole("row", { name: "Open room my room" }); + await expect(roomItem).toBeVisible(); + }); + }); + + test.describe("Sections and filters interaction", () => { + test("should not show Favourite and Low Priority filters when sections are enabled", async ({ page, app }) => { + const primaryFilters = getPrimaryFilters(page); + + // Expand the filter list to see all filters + const expandButton = primaryFilters.getByRole("button", { name: "Expand filter list" }); + await expandButton.click(); + + // Favourite and Low Priority filters should NOT be visible since sections handle them + await expect(primaryFilters.getByRole("option", { name: "Favourite" })).not.toBeVisible(); + + // Other filters should still be present + await expect(primaryFilters.getByRole("option", { name: "People" })).toBeVisible(); + await expect(primaryFilters.getByRole("option", { name: "Rooms" })).toBeVisible(); + await expect(primaryFilters.getByRole("option", { name: "Unread" })).toBeVisible(); + }); + + test("should maintain sections when a filter is applied", async ({ page, app, bot }) => { + // Create a favourite room with unread messages + const favouriteId = await app.client.createRoom({ name: "fav with unread" }); + await app.client.evaluate(async (client, roomId) => { + await client.setRoomTag(roomId, "m.favourite"); + }, favouriteId); + await app.client.inviteUser(favouriteId, bot.credentials.userId); + await bot.joinRoom(favouriteId); + await bot.sendMessage(favouriteId, "Hello from favourite!"); + + // Create a regular room with unread messages + const regularId = await app.client.createRoom({ name: "regular with unread" }); + await app.client.inviteUser(regularId, bot.credentials.userId); + await bot.joinRoom(regularId); + await bot.sendMessage(regularId, "Hello from regular!"); + + // Create a room without unread + await app.client.createRoom({ name: "no unread room" }); + + const roomList = getRoomList(page); + const primaryFilters = getPrimaryFilters(page); + + // Apply the Unread filter + await primaryFilters.getByRole("option", { name: "Unread" }).click(); + + // Only rooms with unreads should be visible + await expect(roomList.getByRole("row", { name: "fav with unread" })).toBeVisible(); + await expect(roomList.getByRole("row", { name: "regular with unread" })).toBeVisible(); + await expect(roomList.getByRole("row", { name: "no unread room" })).not.toBeVisible(); + }); + }); +}); diff --git a/apps/web/playwright/snapshots/left-panel/room-list-panel/room-list-sections.spec.ts/room-list-sections-collapsed-linux.png b/apps/web/playwright/snapshots/left-panel/room-list-panel/room-list-sections.spec.ts/room-list-sections-collapsed-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..6ebcef8532734064ea85453d0fa0bbbe8d5dd6dd GIT binary patch literal 7286 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 UZB4=k^$I{ { + /** + * Contains all the rooms in the active space + */ private roomSkipList?: RoomSkipList; + + /** + * Maps section tags to their corresponding tag filters, used to determine which rooms belong in which sections. + */ + private readonly filterByTag: Map = new Map(); + + /** + * Defines the display order of sections. + */ + private readonly sortedTags: string[] = [DefaultTagID.Favourite, CHATS_TAG, DefaultTagID.LowPriority]; + private readonly msc3946ProcessDynamicPredecessor: boolean; /** @@ -126,13 +160,17 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient { */ public getSortedRoomsInActiveSpace(filterKeys?: FilterKey[]): RoomsResult { const spaceId = SpaceStore.instance.activeSpace; - if (this.roomSkipList?.initialized) - return { - spaceId: spaceId, - filterKeys, - rooms: Array.from(this.roomSkipList.getRoomsInActiveSpace(filterKeys)), - }; - else return { spaceId: spaceId, filterKeys, rooms: [] }; + + const areSectionsEnabled = SettingsStore.getValue("feature_room_list_sections"); + const sections = areSectionsEnabled + ? this.getSections(filterKeys) + : [{ tag: CHATS_TAG, rooms: Array.from(this.roomSkipList?.getRoomsInActiveSpace(filterKeys) ?? []) }]; + + return { + spaceId: spaceId, + filterKeys, + sections, + }; } /** @@ -159,7 +197,9 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient { protected async onReady(): Promise { if (this.roomSkipList?.initialized || !this.matrixClient) return; const sorter = this.getPreferredSorter(this.matrixClient.getSafeUserId()); - this.roomSkipList = new RoomSkipList(sorter, FILTERS); + + this.roomSkipList = new RoomSkipList(sorter, this.getSkipListFilters()); + await SpaceStore.instance.storeReadyPromise; const rooms = this.getRooms(); this.roomSkipList.seed(rooms); @@ -276,7 +316,6 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient { const room = payload.room; this.roomSkipList.removeRoom(room); this.scheduleEmit(); - break; } } @@ -300,7 +339,7 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient { logger.warn(`${roomId} was found in DMs but the room is not in the store`); continue; } - this.roomSkipList!.reInsertRoom(room); + this.roomSkipList?.reInsertRoom(room); needsEmit = true; } } @@ -314,7 +353,7 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient { .map((id) => this.matrixClient?.getRoom(id)) .filter((room) => !!room); for (const room of rooms) { - this.roomSkipList!.reInsertRoom(room); + this.roomSkipList?.reInsertRoom(room); needsEmit = true; } break; @@ -395,6 +434,35 @@ export class RoomListStoreV3Class extends AsyncStoreWithClient { this.roomSkipList.calculateActiveSpaceForNodes(); this.scheduleEmit(); } + + /** + * Get the list of filters to be used in the skip list, including the tag filters for sectioning. + */ + private getSkipListFilters(): Filter[] { + const tagsToExclude = this.sortedTags.filter((tag) => tag !== CHATS_TAG); + const tagFilters = this.sortedTags.map((tag) => + tag === CHATS_TAG ? new ExcludeTagsFilter(tagsToExclude) : new TagFilter(tag), + ); + this.sortedTags.forEach((tag, index) => this.filterByTag.set(tag, tagFilters[index])); + + return [...FILTERS, ...tagFilters]; + } + + /** + * Get the sections to display in the room list, based on the current active space and the provided filters. + * @param filterKeys - Optional array of filters that the rooms must match against to be included in the sections. + * @returns An array of sections + */ + private getSections(filterKeys?: FilterKey[]): Section[] { + return this.sortedTags.map((tag) => { + const filters = filterBoolean([this.filterByTag.get(tag)?.key, ...(filterKeys || [])]); + + return { + tag, + rooms: Array.from(this.roomSkipList?.getRoomsInActiveSpace(filters) || []), + }; + }); + } } export default class RoomListStoreV3 { diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/ExcludeTagsFilter.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/ExcludeTagsFilter.ts new file mode 100644 index 0000000000..b62cabd93b --- /dev/null +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/ExcludeTagsFilter.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { type Room } from "matrix-js-sdk/src/matrix"; + +import { type Filter, FilterEnum } from "."; + +export class ExcludeTagsFilter implements Filter { + public constructor(private readonly tags: string[]) {} + + public matches(room: Room): boolean { + return !this.tags.some((tag) => room.tags[tag]); + } + + public get key(): FilterEnum.ExcludeTagsFilter { + return FilterEnum.ExcludeTagsFilter; + } +} diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/FavouriteFilter.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/FavouriteFilter.ts index 4dafcb21d8..e349054319 100644 --- a/apps/web/src/stores/room-list-v3/skip-list/filters/FavouriteFilter.ts +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/FavouriteFilter.ts @@ -5,8 +5,7 @@ Please see LICENSE files in the repository root for full details. */ import type { Room } from "matrix-js-sdk/src/matrix"; -import type { Filter } from "."; -import { FilterKey } from "."; +import { FilterEnum, type Filter } from "."; import { DefaultTagID } from "../tag"; export class FavouriteFilter implements Filter { @@ -14,7 +13,7 @@ export class FavouriteFilter implements Filter { return !!room.tags[DefaultTagID.Favourite]; } - public get key(): FilterKey.FavouriteFilter { - return FilterKey.FavouriteFilter; + public get key(): FilterEnum.FavouriteFilter { + return FilterEnum.FavouriteFilter; } } diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/InvitesFilter.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/InvitesFilter.ts index fb9fff9b44..fd767b40c8 100644 --- a/apps/web/src/stores/room-list-v3/skip-list/filters/InvitesFilter.ts +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/InvitesFilter.ts @@ -6,15 +6,14 @@ Please see LICENSE files in the repository root for full details. import { type Room, KnownMembership } from "matrix-js-sdk/src/matrix"; -import type { Filter } from "."; -import { FilterKey } from "."; +import { type Filter, FilterEnum } from "."; export class InvitesFilter implements Filter { public matches(room: Room): boolean { return room.getMyMembership() === KnownMembership.Invite; } - public get key(): FilterKey.InvitesFilter { - return FilterKey.InvitesFilter; + public get key(): FilterEnum.InvitesFilter { + return FilterEnum.InvitesFilter; } } diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/LowPriorityFilter.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/LowPriorityFilter.ts index 861d18fa50..cee870087d 100644 --- a/apps/web/src/stores/room-list-v3/skip-list/filters/LowPriorityFilter.ts +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/LowPriorityFilter.ts @@ -5,8 +5,7 @@ Please see LICENSE files in the repository root for full details. */ import type { Room } from "matrix-js-sdk/src/matrix"; -import type { Filter } from "."; -import { FilterKey } from "."; +import { type Filter, FilterEnum } from "."; import { DefaultTagID } from "../tag"; export class LowPriorityFilter implements Filter { @@ -14,7 +13,7 @@ export class LowPriorityFilter implements Filter { return !!room.tags[DefaultTagID.LowPriority]; } - public get key(): FilterKey.LowPriorityFilter { - return FilterKey.LowPriorityFilter; + public get key(): FilterEnum.LowPriorityFilter { + return FilterEnum.LowPriorityFilter; } } diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/MentionsFilter.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/MentionsFilter.ts index fb6e45b922..3f14978d5e 100644 --- a/apps/web/src/stores/room-list-v3/skip-list/filters/MentionsFilter.ts +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/MentionsFilter.ts @@ -5,8 +5,7 @@ Please see LICENSE files in the repository root for full details. */ import type { Room } from "matrix-js-sdk/src/matrix"; -import type { Filter } from "."; -import { FilterKey } from "."; +import { type Filter, FilterEnum } from "."; import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore"; export class MentionsFilter implements Filter { @@ -14,7 +13,7 @@ export class MentionsFilter implements Filter { return RoomNotificationStateStore.instance.getRoomState(room).isMention; } - public get key(): FilterKey.MentionsFilter { - return FilterKey.MentionsFilter; + public get key(): FilterEnum.MentionsFilter { + return FilterEnum.MentionsFilter; } } diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/PeopleFilter.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/PeopleFilter.ts index 742eb40abe..a0dd922bdb 100644 --- a/apps/web/src/stores/room-list-v3/skip-list/filters/PeopleFilter.ts +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/PeopleFilter.ts @@ -5,8 +5,7 @@ Please see LICENSE files in the repository root for full details. */ import type { Room } from "matrix-js-sdk/src/matrix"; -import type { Filter } from "."; -import { FilterKey } from "."; +import { type Filter, FilterEnum } from "."; import DMRoomMap from "../../../../utils/DMRoomMap"; export class PeopleFilter implements Filter { @@ -15,7 +14,7 @@ export class PeopleFilter implements Filter { return !!DMRoomMap.shared().getUserIdForRoomId(room.roomId); } - public get key(): FilterKey.PeopleFilter { - return FilterKey.PeopleFilter; + public get key(): FilterEnum.PeopleFilter { + return FilterEnum.PeopleFilter; } } diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/RoomsFilter.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/RoomsFilter.ts index 58349dcea2..dc49cde05b 100644 --- a/apps/web/src/stores/room-list-v3/skip-list/filters/RoomsFilter.ts +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/RoomsFilter.ts @@ -5,8 +5,7 @@ Please see LICENSE files in the repository root for full details. */ import type { Room } from "matrix-js-sdk/src/matrix"; -import type { Filter } from "."; -import { FilterKey } from "."; +import { type Filter, FilterEnum } from "."; import DMRoomMap from "../../../../utils/DMRoomMap"; export class RoomsFilter implements Filter { @@ -15,7 +14,7 @@ export class RoomsFilter implements Filter { return !DMRoomMap.shared().getUserIdForRoomId(room.roomId); } - public get key(): FilterKey.RoomsFilter { - return FilterKey.RoomsFilter; + public get key(): FilterEnum.RoomsFilter { + return FilterEnum.RoomsFilter; } } diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/TagFilter.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/TagFilter.ts new file mode 100644 index 0000000000..9947f8be51 --- /dev/null +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/TagFilter.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { type Room } from "matrix-js-sdk/src/matrix"; + +import { type Filter } from "."; + +export class TagFilter implements Filter { + public constructor(private readonly tag: string) {} + + public matches(room: Room): boolean { + return !!room.tags[this.tag]; + } + + public get key(): string { + return this.tag; + } +} diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/UnreadFilter.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/UnreadFilter.ts index db29861cd1..0c6100eb13 100644 --- a/apps/web/src/stores/room-list-v3/skip-list/filters/UnreadFilter.ts +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/UnreadFilter.ts @@ -5,8 +5,7 @@ Please see LICENSE files in the repository root for full details. */ import type { Room } from "matrix-js-sdk/src/matrix"; -import type { Filter } from "."; -import { FilterKey } from "."; +import { type Filter, FilterEnum } from "."; import { RoomNotificationStateStore } from "../../../notifications/RoomNotificationStateStore"; import { getMarkedUnreadState } from "../../../../utils/notifications"; @@ -15,7 +14,7 @@ export class UnreadFilter implements Filter { return RoomNotificationStateStore.instance.getRoomState(room).hasUnreadCount || !!getMarkedUnreadState(room); } - public get key(): FilterKey.UnreadFilter { - return FilterKey.UnreadFilter; + public get key(): FilterEnum.UnreadFilter { + return FilterEnum.UnreadFilter; } } diff --git a/apps/web/src/stores/room-list-v3/skip-list/filters/index.ts b/apps/web/src/stores/room-list-v3/skip-list/filters/index.ts index e4c65167b3..b66c2dd0ad 100644 --- a/apps/web/src/stores/room-list-v3/skip-list/filters/index.ts +++ b/apps/web/src/stores/room-list-v3/skip-list/filters/index.ts @@ -6,16 +6,19 @@ Please see LICENSE files in the repository root for full details. import type { Room } from "matrix-js-sdk/src/matrix"; -export const enum FilterKey { - FavouriteFilter, - UnreadFilter, - PeopleFilter, - RoomsFilter, - LowPriorityFilter, - MentionsFilter, - InvitesFilter, +export const enum FilterEnum { + FavouriteFilter = "favourite", + UnreadFilter = "unread", + PeopleFilter = "people", + RoomsFilter = "rooms", + LowPriorityFilter = "low_priority", + MentionsFilter = "mentions", + InvitesFilter = "invites", + ExcludeTagsFilter = "exclude_tags", } +export type FilterKey = FilterEnum | string; + export interface Filter { /** * Boolean return value indicates whether this room satisfies diff --git a/apps/web/src/viewmodels/room-list/RoomListSectionHeaderViewModel.ts b/apps/web/src/viewmodels/room-list/RoomListSectionHeaderViewModel.ts new file mode 100644 index 0000000000..5b8006e252 --- /dev/null +++ b/apps/web/src/viewmodels/room-list/RoomListSectionHeaderViewModel.ts @@ -0,0 +1,40 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { + BaseViewModel, + type RoomListSectionHeaderActions, + type RoomListSectionHeaderViewSnapshot, +} from "@element-hq/web-shared-components"; + +interface RoomListSectionHeaderViewModelProps { + tag: string; + title: string; + onToggleExpanded: (isExpanded: boolean) => void; +} + +export class RoomListSectionHeaderViewModel + extends BaseViewModel + implements RoomListSectionHeaderActions +{ + public constructor(props: RoomListSectionHeaderViewModelProps) { + super(props, { id: props.tag, title: props.title, isExpanded: true }); + } + + public onClick = (): void => { + const isExpanded = !this.snapshot.current.isExpanded; + this.snapshot.merge({ isExpanded }); + this.props.onToggleExpanded(isExpanded); + }; + + /** + * Whether the section is currently expanded or not. + */ + public get isExpanded(): boolean { + return this.snapshot.current.isExpanded; + } +} diff --git a/apps/web/src/viewmodels/room-list/RoomListViewModel.ts b/apps/web/src/viewmodels/room-list/RoomListViewModel.ts index 3ed45fc663..ffe30748d8 100644 --- a/apps/web/src/viewmodels/room-list/RoomListViewModel.ts +++ b/apps/web/src/viewmodels/room-list/RoomListViewModel.ts @@ -11,6 +11,8 @@ import { type FilterId, type RoomListViewActions, type RoomListViewState, + type RoomListSection, + _t, } from "@element-hq/web-shared-components"; import { type MatrixClient, type Room } from "matrix-js-sdk/src/matrix"; @@ -19,43 +21,75 @@ import dispatcher from "../../dispatcher/dispatcher"; import { type ViewRoomDeltaPayload } from "../../dispatcher/payloads/ViewRoomDeltaPayload"; import { type ViewRoomPayload } from "../../dispatcher/payloads/ViewRoomPayload"; import SpaceStore from "../../stores/spaces/SpaceStore"; -import RoomListStoreV3, { RoomListStoreV3Event, type RoomsResult } from "../../stores/room-list-v3/RoomListStoreV3"; -import { FilterKey } from "../../stores/room-list-v3/skip-list/filters"; +import RoomListStoreV3, { + CHATS_TAG, + RoomListStoreV3Event, + type RoomsResult, + type Section, +} from "../../stores/room-list-v3/RoomListStoreV3"; +import { FilterEnum } from "../../stores/room-list-v3/skip-list/filters"; import { RoomNotificationStateStore } from "../../stores/notifications/RoomNotificationStateStore"; import { RoomListItemViewModel } from "./RoomListItemViewModel"; import { SdkContextClass } from "../../contexts/SDKContext"; import { hasCreateRoomRights } from "./utils"; import { keepIfSame } from "../../utils/keepIfSame"; +import { DefaultTagID } from "../../stores/room-list-v3/skip-list/tag"; +import { RoomListSectionHeaderViewModel } from "./RoomListSectionHeaderViewModel"; +import SettingsStore from "../../settings/SettingsStore"; + +/** + * Tracks the position of the active room within a specific section. + * Used to implement sticky room behaviour so the selected room doesn't + * jump around when the room list is re-sorted. + */ +interface StickyRoomPosition { + /** The tag of the section the room belongs to. */ + sectionTag: string; + /** The index of the room within that section. */ + indexInSection: number; +} interface RoomListViewModelProps { client: MatrixClient; } -const filterKeyToIdMap: Map = new Map([ - [FilterKey.UnreadFilter, "unread"], - [FilterKey.PeopleFilter, "people"], - [FilterKey.RoomsFilter, "rooms"], - [FilterKey.FavouriteFilter, "favourite"], - [FilterKey.MentionsFilter, "mentions"], - [FilterKey.InvitesFilter, "invites"], - [FilterKey.LowPriorityFilter, "low_priority"], +const filterKeyToIdMap: Map = new Map([ + [FilterEnum.UnreadFilter, "unread"], + [FilterEnum.PeopleFilter, "people"], + [FilterEnum.RoomsFilter, "rooms"], + [FilterEnum.FavouriteFilter, "favourite"], + [FilterEnum.MentionsFilter, "mentions"], + [FilterEnum.InvitesFilter, "invites"], + [FilterEnum.LowPriorityFilter, "low_priority"], ]); +const TAG_TO_TITLE_MAP: Record = { + [DefaultTagID.Favourite]: _t("room_list|section|favourites"), + [CHATS_TAG]: _t("room_list|section|chats"), + [DefaultTagID.LowPriority]: _t("room_list|section|low_priority"), +}; + export class RoomListViewModel extends BaseViewModel implements RoomListViewActions { // State tracking - private activeFilter: FilterKey | undefined = undefined; + private activeFilter: FilterEnum | undefined = undefined; private roomsResult: RoomsResult; - private lastActiveRoomIndex: number | undefined = undefined; + /** + * List of sections to display in the room list, derived from roomsResult and section header view model expansion state. + */ + private sections: Section[] = []; + private lastActiveRoomPosition: StickyRoomPosition | undefined = undefined; // Child view model management - private roomItemViewModels = new Map(); + private readonly roomItemViewModels = new Map(); // This map is intentionally additive (never cleared except on space changes) to avoid a race condition: // a list update can refresh roomsResult and roomsMap before the view re-renders, so the view may still // request a view model for a room that was removed from the latest list. Keeping old entries prevents a crash. private roomsMap = new Map(); + // Don't clear section vm because we want to keep the expand/collapse state even during space changes. + private readonly roomSectionHeaderViewModels = new Map(); public constructor(props: RoomListViewModelProps) { const activeSpace = SpaceStore.instance.activeSpaceRoom; @@ -63,14 +97,21 @@ export class RoomListViewModel // Get initial rooms const roomsResult = RoomListStoreV3.instance.getSortedRoomsInActiveSpace(undefined); const canCreateRoom = hasCreateRoomRights(props.client, activeSpace); - const filterIds = [...filterKeyToIdMap.values()]; - const roomIds = roomsResult.rooms.map((room) => room.roomId); - const sections = [{ id: "all", roomIds }]; + + // Remove favourite and low priority filters if sections are enabled, as they are redundant with the sections + const areSectionsEnabled = SettingsStore.getValue("feature_room_list_sections"); + const filterIds = [...filterKeyToIdMap.values()].filter( + (id) => !areSectionsEnabled || (id !== "favourite" && id !== "low_priority"), + ); + + // By default, all sections are expanded + const { sections, isFlatList } = computeSections(roomsResult, (tag) => true); + const isRoomListEmpty = roomsResult.sections.every((section) => section.rooms.length === 0); super(props, { // Initial view state - start with empty, will populate in async init isLoadingRooms: RoomListStoreV3.instance.isLoadingRooms, - isRoomListEmpty: roomsResult.rooms.length === 0, + isRoomListEmpty, filterIds, activeFilterId: undefined, roomListState: { @@ -78,13 +119,13 @@ export class RoomListViewModel spaceId: roomsResult.spaceId, filterKeys: undefined, }, - // Until we implement sections, this view model only supports the flat list mode - isFlatList: true, - sections, + isFlatList, + sections: toRoomListSection(sections), canCreateRoom, }); this.roomsResult = roomsResult; + this.sections = sections; // Build initial roomsMap from roomsResult this.updateRoomsMap(roomsResult); @@ -120,7 +161,7 @@ export class RoomListViewModel public onToggleFilter = (filterId: FilterId): void => { // Find the FilterKey by matching the filter ID - let filterKey: FilterKey | undefined = undefined; + let filterKey: FilterEnum | undefined = undefined; for (const [key, id] of filterKeyToIdMap.entries()) { if (id === filterId) { filterKey = key; @@ -150,7 +191,7 @@ export class RoomListViewModel * This maintains a quick lookup for room objects. */ private updateRoomsMap(roomsResult: RoomsResult): void { - for (const room of roomsResult.rooms) { + for (const room of roomsResult.sections.flatMap((section) => section.rooms)) { this.roomsMap.set(room.roomId, room); } } @@ -170,7 +211,7 @@ export class RoomListViewModel * Get the ordered list of room IDs. */ public get roomIds(): string[] { - return this.roomsResult.rooms.map((room) => room.roomId); + return this.roomsResult.sections.flatMap((section) => section.rooms).map((room) => room.roomId); } /** @@ -179,7 +220,7 @@ export class RoomListViewModel * The view should call this only for visible rooms from the roomIds list. * @throws Error if room is not found in roomsMap (indicates a programming error) */ - public getRoomItemViewModel(roomId: string): RoomListItemViewModel { + public getRoomItemViewModel(roomId: string): RoomListItemViewModel | undefined { // Check if we have a view model for this room let viewModel = this.roomItemViewModels.get(roomId); @@ -191,7 +232,11 @@ export class RoomListViewModel room = this.roomsMap.get(roomId); } - if (!room) throw new Error(`Room ${roomId} not found in roomsMap`); + if (!room) { + // Race condition: the room list has changed but the view hasn't re-rendered yet. + // Return undefined so the view can skip rendering this item. + return undefined; + } // Create new view model viewModel = new RoomListItemViewModel({ @@ -206,13 +251,17 @@ export class RoomListViewModel return viewModel; } - /** - * Not implemented - this view model does not support sections. - * Flat list mode is forced so this method is never be called. - * @throw Error if called - */ - public getSectionHeaderViewModel(): never { - throw new Error("Sections are not supported in this room list"); + public getSectionHeaderViewModel(tag: string): RoomListSectionHeaderViewModel { + if (this.roomSectionHeaderViewModels.has(tag)) return this.roomSectionHeaderViewModels.get(tag)!; + + const title = TAG_TO_TITLE_MAP[tag] || tag; + const viewModel = new RoomListSectionHeaderViewModel({ + tag, + title, + onToggleExpanded: () => this.updateRoomListData(), + }); + this.roomSectionHeaderViewModels.set(tag, viewModel); + return viewModel; } /** @@ -257,7 +306,7 @@ export class RoomListViewModel if (!currentRoomId) return; const { delta, unread } = payload; - const rooms = this.roomsResult.rooms; + const rooms = this.sections.flatMap((section) => section.rooms); const filteredRooms = unread ? // Filter the rooms to only include unread ones and the active room @@ -349,58 +398,74 @@ export class RoomListViewModel return undefined; } - const index = this.roomsResult.rooms.findIndex((room) => room.roomId === roomId); + const index = this.sections.flatMap((section) => section.rooms).findIndex((room) => room.roomId === roomId); return index >= 0 ? index : undefined; } /** - * Apply sticky room logic to keep the active room at the same index position. + * Find the position of a room within the sections list. + * Returns undefined if the room is not found. + */ + private findRoomPosition(sections: Section[], roomId: string): StickyRoomPosition | undefined { + for (const section of sections) { + const idx = section.rooms.findIndex((room) => room.roomId === roomId); + if (idx !== -1) return { sectionTag: section.tag, indexInSection: idx }; + } + return undefined; + } + + /** + * Apply sticky room logic to keep the active room at the same position within its section. * When the room list updates, this prevents the selected room from jumping around in the UI. * * @param isRoomChange - Whether this update is due to a room change (not a list update) * @param roomId - The room ID to apply sticky logic for (can be null/undefined) - * @returns The modified rooms array with sticky positioning applied + * @returns The modified sections array with sticky positioning applied */ - private applyStickyRoom(isRoomChange: boolean, roomId: string | null | undefined): Room[] { - const rooms = this.roomsResult.rooms; - - if (!roomId) { - return rooms; - } - - const newIndex = rooms.findIndex((room) => room.roomId === roomId); - const oldIndex = this.lastActiveRoomIndex; + private applyStickyRoom(isRoomChange: boolean, roomId: string | null | undefined): Section[] { + const sections = this.roomsResult.sections; // When opening another room, the index should obviously change - if (isRoomChange) { - return rooms; - } + if (!roomId || isRoomChange) return sections; - // If oldIndex is undefined, then there was no active room before - // Similarly, if newIndex is -1, the active room is not in the current list - if (newIndex === -1 || oldIndex === undefined) { - return rooms; - } + // If there was no previously tracked position, nothing to stick to + const oldPosition = this.lastActiveRoomPosition; + if (!oldPosition) return sections; - // If the index hasn't changed, we have nothing to do - if (newIndex === oldIndex) { - return rooms; - } + const newPosition = this.findRoomPosition(sections, roomId); - // If the old index falls out of the bounds of the rooms array - // (usually because rooms were removed), we can no longer place - // the active room in the same old index - if (oldIndex > rooms.length - 1) { - return rooms; - } + // If the room is no longer in the list, nothing to do + if (!newPosition) return sections; - // Making the active room sticky is as simple as removing it from - // its new index and placing it in the old index - const newRooms = [...rooms]; - const [stickyRoom] = newRooms.splice(newIndex, 1); - newRooms.splice(oldIndex, 0, stickyRoom); + // If the room moved to a different section, this is an intentional structural + // change (e.g. favourited/unfavourited), so don't apply sticky logic + if (newPosition.sectionTag !== oldPosition.sectionTag) return sections; - return newRooms; + // If the index within the section hasn't changed, nothing to do + if (newPosition.indexInSection === oldPosition.indexInSection) return sections; + + // Find the target section and apply the sticky swap within it + return sections.map((section) => { + // Different section - no change + if (section.tag !== oldPosition.sectionTag) return section; + + const sectionRooms = section.rooms; + + // If the old index falls out of the bounds of the section + // (usually because rooms were removed), we can no longer place + // the active room in the same old position + if (oldPosition.indexInSection > sectionRooms.length - 1) { + return section; + } + + // Making the active room sticky is as simple as removing it from + // its new index and placing it in the old index within the section + const newRooms = [...sectionRooms]; + const [stickyRoom] = newRooms.splice(newPosition.indexInSection, 1); + newRooms.splice(oldPosition.indexInSection, 0, stickyRoom); + + return { ...section, rooms: newRooms }; + }); } private async updateRoomListData( @@ -411,28 +476,30 @@ export class RoomListViewModel // Use override if provided (e.g., during space changes), otherwise fall back to RoomViewStore const roomId = roomIdOverride ?? SdkContextClass.instance.roomViewStore.getRoomId(); - // Apply sticky room logic to keep selected room at same position - const stickyRooms = this.applyStickyRoom(isRoomChange, roomId); + // Apply sticky room logic to keep selected room at same position within its section + const stickySections = this.applyStickyRoom(isRoomChange, roomId); - // Update roomsResult with sticky rooms + // Update roomsResult with the sticky-adjusted sections this.roomsResult = { ...this.roomsResult, - rooms: stickyRooms, + sections: stickySections, }; // Rebuild roomsMap with the reordered rooms this.updateRoomsMap(this.roomsResult); - // Calculate the active room index after applying sticky logic - const activeRoomIndex = this.getActiveRoomIndex(roomId); - - // Track the current active room index for future sticky calculations - this.lastActiveRoomIndex = activeRoomIndex; + // Track the current active room position for future sticky calculations + this.lastActiveRoomPosition = roomId ? this.findRoomPosition(this.roomsResult.sections, roomId) : undefined; // Build the complete state atomically to ensure consistency - // roomIds and roomListState must always be in sync - const roomIds = this.roomIds; - const sections = [{ id: "all", roomIds }]; + const { sections, isFlatList } = computeSections( + this.roomsResult, + (tag) => this.roomSectionHeaderViewModels.get(tag)?.isExpanded ?? true, + ); + this.sections = sections; + + // Calculate the active room index from the computed sections (which exclude collapsed sections' rooms) + const activeRoomIndex = this.getActiveRoomIndex(roomId); // Update filter keys - only update if they have actually changed to prevent unnecessary re-renders of the room list const previousFilterKeys = this.snapshot.current.roomListState.filterKeys; @@ -444,16 +511,20 @@ export class RoomListViewModel }; const activeFilterId = this.activeFilter !== undefined ? filterKeyToIdMap.get(this.activeFilter) : undefined; - const isRoomListEmpty = roomIds.length === 0; + const isRoomListEmpty = this.roomsResult.sections.every((section) => section.rooms.length === 0); const isLoadingRooms = RoomListStoreV3.instance.isLoadingRooms; + const viewSections = toRoomListSection(this.sections); + const previousSections = this.snapshot.current.sections; + // Single atomic snapshot update this.snapshot.merge({ isLoadingRooms, isRoomListEmpty, activeFilterId, roomListState: keepIfSame(this.snapshot.current.roomListState, roomListState), - sections: keepIfSame(this.snapshot.current.sections, sections), + sections: keepIfSame(previousSections, viewSections), + isFlatList, }); } @@ -475,3 +546,36 @@ export class RoomListViewModel } }; } + +/** + * Compute the sections to display in the room list based on the rooms result and section expansion state. + * @param roomsResult - The current rooms result containing sections and rooms + * @param isSectionExpanded - A function that takes a section tag and returns whether that section is currently expanded + * @returns An object containing the computed sections (with rooms removed for collapsed sections) and a boolean indicating if this is a flat list (only one section with all rooms) + */ +function computeSections( + roomsResult: RoomsResult, + isSectionExpanded: (tag: string) => boolean, +): { sections: Section[]; isFlatList: boolean } { + const sections = roomsResult.sections + // Only include sections that have rooms + .filter((section) => section.rooms.length > 0) + // Remove roomIds for sections that are currently collapsed according to their section header view model + .map((section) => ({ + ...section, + rooms: isSectionExpanded(section.tag) ? section.rooms : [], + })); + const isFlatList = sections.length === 1 && sections[0].tag === CHATS_TAG; + + return { sections, isFlatList }; +} + +/** + * Convert from the internal Section type used in the view model to the RoomListSection type used in the snapshot. + */ +function toRoomListSection(sections: Section[]): RoomListSection[] { + return sections.map(({ tag, rooms }) => ({ + id: tag, + roomIds: rooms.map((room) => room.roomId), + })); +} diff --git a/apps/web/test/unit-tests/stores/room-list-v3/RoomListStoreV3-test.ts b/apps/web/test/unit-tests/stores/room-list-v3/RoomListStoreV3-test.ts index 09d8f5ded0..1944efe7e6 100644 --- a/apps/web/test/unit-tests/stores/room-list-v3/RoomListStoreV3-test.ts +++ b/apps/web/test/unit-tests/stores/room-list-v3/RoomListStoreV3-test.ts @@ -11,7 +11,12 @@ import { mocked } from "jest-mock"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; import type { RoomNotificationState } from "../../../../src/stores/notifications/RoomNotificationState"; -import { LISTS_UPDATE_EVENT, RoomListStoreV3Class } from "../../../../src/stores/room-list-v3/RoomListStoreV3"; +import { + CHATS_TAG, + LISTS_UPDATE_EVENT, + RoomListStoreV3Class, + type Section, +} from "../../../../src/stores/room-list-v3/RoomListStoreV3"; import { AsyncStoreWithClient } from "../../../../src/stores/AsyncStoreWithClient"; import { RecencySorter } from "../../../../src/stores/room-list-v3/skip-list/sorters/RecencySorter"; import { mkEvent, mkMessage, mkSpace, mkStubRoom, stubClient, upsertRoomStateEvents } from "../../../test-utils"; @@ -21,7 +26,7 @@ import dispatcher from "../../../../src/dispatcher/dispatcher"; import SpaceStore from "../../../../src/stores/spaces/SpaceStore"; import { MetaSpace, UPDATE_SELECTED_SPACE } from "../../../../src/stores/spaces"; import { DefaultTagID } from "../../../../src/stores/room-list-v3/skip-list/tag"; -import { FilterKey } from "../../../../src/stores/room-list-v3/skip-list/filters"; +import { FilterEnum } from "../../../../src/stores/room-list-v3/skip-list/filters"; import { RoomNotificationStateStore } from "../../../../src/stores/notifications/RoomNotificationStateStore"; import DMRoomMap from "../../../../src/utils/DMRoomMap"; import { SortingAlgorithm } from "../../../../src/stores/room-list-v3/skip-list/sorters"; @@ -502,7 +507,10 @@ describe("RoomListStoreV3", () => { store.on(LISTS_UPDATE_EVENT, fn); // The rooms which belong to the space should not be shown - const result = store.getSortedRoomsInActiveSpace().rooms.map((r) => r.roomId); + const result = store + .getSortedRoomsInActiveSpace() + .sections.flatMap((s) => s.rooms) + .map((r) => r.roomId); for (const id of roomIds) { expect(result).not.toContain(id); } @@ -511,7 +519,10 @@ describe("RoomListStoreV3", () => { jest.spyOn(SpaceStore.instance, "activeSpace", "get").mockImplementation(() => spaceRoom.roomId); SpaceStore.instance.emit(UPDATE_SELECTED_SPACE); expect(fn).toHaveBeenCalled(); - const result2 = store.getSortedRoomsInActiveSpace().rooms.map((r) => r.roomId); + const result2 = store + .getSortedRoomsInActiveSpace() + .sections.flatMap((s) => s.rooms) + .map((r) => r.roomId); for (const id of roomIds) { expect(result2).toContain(id); } @@ -534,7 +545,9 @@ describe("RoomListStoreV3", () => { await store.start(); // Sorted, filtered rooms should be 8, 27 and 75 - const result = store.getSortedRoomsInActiveSpace([FilterKey.FavouriteFilter]).rooms; + const result = store + .getSortedRoomsInActiveSpace([FilterEnum.FavouriteFilter]) + .sections.flatMap((s) => s.rooms); expect(result).toHaveLength(3); for (const i of [8, 27, 75]) { expect(result).toContain(rooms[i]); @@ -569,7 +582,9 @@ describe("RoomListStoreV3", () => { expect(fn).toHaveBeenCalled(); // Sorted, filtered rooms should be 27 and 75 - const result = store.getSortedRoomsInActiveSpace([FilterKey.FavouriteFilter]).rooms; + const result = store + .getSortedRoomsInActiveSpace([FilterEnum.FavouriteFilter]) + .sections.flatMap((s) => s.rooms); expect(result).toHaveLength(2); for (const i of [8, 75]) { expect(result).toContain(rooms[i]); @@ -594,7 +609,9 @@ describe("RoomListStoreV3", () => { await store.start(); // Should only give us rooms at index 8 and 27 - const result = store.getSortedRoomsInActiveSpace([FilterKey.UnreadFilter]).rooms; + const result = store + .getSortedRoomsInActiveSpace([FilterEnum.UnreadFilter]) + .sections.flatMap((s) => s.rooms); expect(result).toHaveLength(2); for (const i of [8, 27]) { expect(result).toContain(rooms[i]); @@ -611,7 +628,9 @@ describe("RoomListStoreV3", () => { await store.start(); // Since there's no unread yet, we expect zero results - let result = store.getSortedRoomsInActiveSpace([FilterKey.UnreadFilter]).rooms; + let result = store + .getSortedRoomsInActiveSpace([FilterEnum.UnreadFilter]) + .sections.flatMap((s) => s.rooms); expect(result).toHaveLength(0); // Mock so that room at index 8 is marked as unread @@ -626,7 +645,7 @@ describe("RoomListStoreV3", () => { ); // Now we expect room at index 8 to show as unread - result = store.getSortedRoomsInActiveSpace([FilterKey.UnreadFilter]).rooms; + result = store.getSortedRoomsInActiveSpace([FilterEnum.UnreadFilter]).sections.flatMap((s) => s.rooms); expect(result).toHaveLength(1); expect(result).toContain(rooms[8]); }); @@ -649,14 +668,18 @@ describe("RoomListStoreV3", () => { await store.start(); // Should only give us rooms at index 8 and 27 - const peopleRooms = store.getSortedRoomsInActiveSpace([FilterKey.PeopleFilter]).rooms; + const peopleRooms = store + .getSortedRoomsInActiveSpace([FilterEnum.PeopleFilter]) + .sections.flatMap((s) => s.rooms); expect(peopleRooms).toHaveLength(2); for (const i of [8, 27]) { expect(peopleRooms).toContain(rooms[i]); } // Rest are normal rooms - const nonDms = store.getSortedRoomsInActiveSpace([FilterKey.RoomsFilter]).rooms; + const nonDms = store + .getSortedRoomsInActiveSpace([FilterEnum.RoomsFilter]) + .sections.flatMap((s) => s.rooms); expect(nonDms).toHaveLength(3); for (const i of [6, 13, 75]) { expect(nonDms).toContain(rooms[i]); @@ -680,7 +703,9 @@ describe("RoomListStoreV3", () => { const store = new RoomListStoreV3Class(dispatcher); await store.start(); - const result = store.getSortedRoomsInActiveSpace([FilterKey.InvitesFilter]).rooms; + const result = store + .getSortedRoomsInActiveSpace([FilterEnum.InvitesFilter]) + .sections.flatMap((s) => s.rooms); expect(result).toHaveLength(5); for (const room of invitedRooms) { expect(result).toContain(room); @@ -705,7 +730,9 @@ describe("RoomListStoreV3", () => { await store.start(); // Should only give us rooms at index 8 and 27 - const result = store.getSortedRoomsInActiveSpace([FilterKey.MentionsFilter]).rooms; + const result = store + .getSortedRoomsInActiveSpace([FilterEnum.MentionsFilter]) + .sections.flatMap((s) => s.rooms); expect(result).toHaveLength(2); for (const i of [8, 27]) { expect(result).toContain(rooms[i]); @@ -727,7 +754,9 @@ describe("RoomListStoreV3", () => { await store.start(); // Sorted, filtered rooms should be 8, 27 and 75 - const result = store.getSortedRoomsInActiveSpace([FilterKey.LowPriorityFilter]).rooms; + const result = store + .getSortedRoomsInActiveSpace([FilterEnum.LowPriorityFilter]) + .sections.flatMap((s) => s.rooms); expect(result).toHaveLength(3); for (const i of [8, 27, 75]) { expect(result).toContain(rooms[i]); @@ -755,10 +784,9 @@ describe("RoomListStoreV3", () => { await store.start(); // Should give us only room at 8 since that's the only room which matches both filters - const result = store.getSortedRoomsInActiveSpace([ - FilterKey.UnreadFilter, - FilterKey.FavouriteFilter, - ]).rooms; + const result = store + .getSortedRoomsInActiveSpace([FilterEnum.UnreadFilter, FilterEnum.FavouriteFilter]) + .sections.flatMap((s) => s.rooms); expect(result).toHaveLength(1); expect(result).toContain(rooms[8]); }); @@ -777,7 +805,9 @@ describe("RoomListStoreV3", () => { }, true, ); - expect(store.getSortedRoomsInActiveSpace([FilterKey.InvitesFilter]).rooms).not.toContain(room); + expect( + store.getSortedRoomsInActiveSpace([FilterEnum.InvitesFilter]).sections.flatMap((s) => s.rooms), + ).not.toContain(room); room.getMyMembership = jest.fn().mockReturnValue(KnownMembership.Invite); dispatcher.dispatch( @@ -789,11 +819,196 @@ describe("RoomListStoreV3", () => { }, true, ); - expect(store.getSortedRoomsInActiveSpace([FilterKey.InvitesFilter]).rooms).toContain(room); + expect( + store.getSortedRoomsInActiveSpace([FilterEnum.InvitesFilter]).sections.flatMap((s) => s.rooms), + ).toContain(room); }); }); }); + describe("Sections", () => { + function enableSections(): void { + jest.spyOn(SettingsStore, "getValue").mockImplementation((setting: string) => { + if (setting === "feature_room_list_sections") return true; + return false; + }); + } + + function findSection(sections: Section[], tag: string): Section | undefined { + return sections.find((s) => s.tag === tag); + } + + function getClientAndRooms() { + const client = stubClient(); + const rooms = getMockedRooms(client); + client.getVisibleRooms = jest.fn().mockReturnValue(rooms); + jest.spyOn(AsyncStoreWithClient.prototype, "matrixClient", "get").mockReturnValue(client); + return { client, rooms }; + } + + it("returns a single chats section when sections feature is disabled", async () => { + const { rooms } = getClientAndRooms(); + // Mark some rooms as favourite so we can verify they are NOT split out + [0, 1, 2].forEach((i) => { + rooms[i].tags[DefaultTagID.Favourite] = {}; + }); + + const store = new RoomListStoreV3Class(dispatcher); + await store.start(); + + const result = store.getSortedRoomsInActiveSpace(); + expect(result.sections).toHaveLength(1); + expect(result.sections[0].tag).toBe(CHATS_TAG); + // All rooms, including favourites, are in the single section + for (const i of [0, 1, 2]) { + expect(result.sections[0].rooms).toContain(rooms[i]); + } + }); + + it("returns three sections in the correct order when enabled", async () => { + enableSections(); + getClientAndRooms(); + + const store = new RoomListStoreV3Class(dispatcher); + await store.start(); + + const result = store.getSortedRoomsInActiveSpace(); + expect(result.sections).toHaveLength(3); + expect(result.sections[0].tag).toBe(DefaultTagID.Favourite); + expect(result.sections[1].tag).toBe(CHATS_TAG); + expect(result.sections[2].tag).toBe(DefaultTagID.LowPriority); + }); + + it.each([ + { tag: DefaultTagID.Favourite, label: "Favourite" }, + { tag: DefaultTagID.LowPriority, label: "LowPriority" }, + ])("places tagged rooms only in the $label section", async ({ tag }) => { + enableSections(); + const { rooms } = getClientAndRooms(); + + // Mark rooms 3, 7 with the given tag + [3, 7].forEach((i) => { + rooms[i].tags[tag] = {}; + }); + + const store = new RoomListStoreV3Class(dispatcher); + await store.start(); + + const { sections } = store.getSortedRoomsInActiveSpace(); + const targetSection = findSection(sections, tag)!; + const chatsSection = findSection(sections, CHATS_TAG)!; + + for (const i of [3, 7]) { + expect(targetSection.rooms).toContain(rooms[i]); + expect(chatsSection.rooms).not.toContain(rooms[i]); + } + }); + + it("places regular rooms only in the Chats section", async () => { + enableSections(); + const { rooms } = getClientAndRooms(); + + // Mark some rooms as favourite / low priority so the rest are regular + rooms[0].tags[DefaultTagID.Favourite] = {}; + rooms[1].tags[DefaultTagID.LowPriority] = {}; + + const store = new RoomListStoreV3Class(dispatcher); + await store.start(); + + const { sections } = store.getSortedRoomsInActiveSpace(); + const favSection = findSection(sections, DefaultTagID.Favourite)!; + const chatsSection = findSection(sections, CHATS_TAG)!; + const lowPrioritySection = findSection(sections, DefaultTagID.LowPriority)!; + + // A regular room (index 5) should be in chats only + expect(chatsSection.rooms).toContain(rooms[5]); + expect(favSection.rooms).not.toContain(rooms[5]); + expect(lowPrioritySection.rooms).not.toContain(rooms[5]); + }); + + it("all rooms are accounted for across all sections", async () => { + enableSections(); + const { rooms } = getClientAndRooms(); + + [2, 5].forEach((i) => { + rooms[i].tags[DefaultTagID.Favourite] = {}; + }); + [11].forEach((i) => { + rooms[i].tags[DefaultTagID.LowPriority] = {}; + }); + + const store = new RoomListStoreV3Class(dispatcher); + await store.start(); + + const { sections } = store.getSortedRoomsInActiveSpace(); + const totalRooms = sections.flatMap((s) => s.rooms).length; + // All 100 rooms should be distributed across the three sections + expect(totalRooms).toBe(rooms.length); + }); + + it("applies additional filter keys within each section", async () => { + enableSections(); + const { rooms } = getClientAndRooms(); + + // Rooms 3 and 7 are favourites; room 7 is also unread + [3, 7].forEach((i) => { + rooms[i].tags[DefaultTagID.Favourite] = {}; + }); + jest.spyOn(RoomNotificationStateStore.instance, "getRoomState").mockImplementation((room) => { + const state = { + hasUnreadCount: room === rooms[7], + } as unknown as RoomNotificationState; + return state; + }); + + const store = new RoomListStoreV3Class(dispatcher); + await store.start(); + + const { sections } = store.getSortedRoomsInActiveSpace([FilterEnum.UnreadFilter]); + const favSection = findSection(sections, DefaultTagID.Favourite)!; + + // Only room 7 is both favourite AND unread + expect(favSection.rooms).toHaveLength(1); + expect(favSection.rooms).toContain(rooms[7]); + }); + + it("sections respect space filtering", async () => { + enableSections(); + const { rooms } = getClientAndRooms(); + + // Room 3 is a favourite room in the space + rooms[3].tags[DefaultTagID.Favourite] = {}; + + const spaceRoomId = "!space1:matrix.org"; + const inSpaceIds = [3, 10, 20].map((i) => rooms[i].roomId); + jest.spyOn(SpaceStore.instance, "isRoomInSpace").mockImplementation((space, id) => { + if (space === spaceRoomId && inSpaceIds.includes(id)) return true; + return false; + }); + jest.spyOn(SpaceStore.instance, "activeSpace", "get").mockImplementation(() => spaceRoomId); + + const store = new RoomListStoreV3Class(dispatcher); + await store.start(); + + const { sections, spaceId } = store.getSortedRoomsInActiveSpace(); + expect(spaceId).toBe(spaceRoomId); + + const allRooms = sections.flatMap((s) => s.rooms); + const allRoomIds = allRooms.map((r) => r.roomId); + + // Only rooms in the space should appear + for (const id of inSpaceIds) { + expect(allRoomIds).toContain(id); + } + // Rooms not in the space should not appear + expect(allRoomIds).not.toContain(rooms[50].roomId); + + // Room 3 should be in the Favourite section specifically + const favSection = findSection(sections, DefaultTagID.Favourite)!; + expect(favSection.rooms).toContain(rooms[3]); + }); + }); + describe("Muted rooms", () => { async function getRoomListStoreWithMutedRooms() { const client = stubClient(); diff --git a/apps/web/test/viewmodels/room-list/RoomListSectionHeaderViewModel-test.ts b/apps/web/test/viewmodels/room-list/RoomListSectionHeaderViewModel-test.ts new file mode 100644 index 0000000000..1f2cd4ebb0 --- /dev/null +++ b/apps/web/test/viewmodels/room-list/RoomListSectionHeaderViewModel-test.ts @@ -0,0 +1,48 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { RoomListSectionHeaderViewModel } from "../../../src/viewmodels/room-list/RoomListSectionHeaderViewModel"; + +describe("RoomListSectionHeaderViewModel", () => { + let onToggleExpanded: jest.Mock; + + beforeEach(() => { + onToggleExpanded = jest.fn(); + }); + + it("should initialize snapshot from props", () => { + const vm = new RoomListSectionHeaderViewModel({ + tag: "m.favourite", + title: "Favourites", + onToggleExpanded, + }); + + const snapshot = vm.getSnapshot(); + expect(snapshot.id).toBe("m.favourite"); + expect(snapshot.title).toBe("Favourites"); + expect(snapshot.isExpanded).toBe(true); + }); + + it("should toggle expanded state on click", () => { + const vm = new RoomListSectionHeaderViewModel({ + tag: "m.favourite", + title: "Favourites", + onToggleExpanded, + }); + expect(vm.isExpanded).toBe(true); + + vm.onClick(); + expect(vm.isExpanded).toBe(false); + expect(vm.getSnapshot().isExpanded).toBe(false); + expect(onToggleExpanded).toHaveBeenCalledWith(false); + + vm.onClick(); + expect(vm.isExpanded).toBe(true); + expect(vm.getSnapshot().isExpanded).toBe(true); + expect(onToggleExpanded).toHaveBeenCalledWith(true); + }); +}); diff --git a/apps/web/test/viewmodels/room-list/RoomListViewModel-test.tsx b/apps/web/test/viewmodels/room-list/RoomListViewModel-test.tsx index ce5c9ce6b4..c2ced861f0 100644 --- a/apps/web/test/viewmodels/room-list/RoomListViewModel-test.tsx +++ b/apps/web/test/viewmodels/room-list/RoomListViewModel-test.tsx @@ -7,17 +7,20 @@ import { type MatrixClient, type Room } from "matrix-js-sdk/src/matrix"; import { mocked } from "jest-mock"; +import { waitFor } from "jest-matrix-react"; import { createTestClient, flushPromises, mkStubRoom, stubClient } from "../../test-utils"; -import RoomListStoreV3, { RoomListStoreV3Event } from "../../../src/stores/room-list-v3/RoomListStoreV3"; +import RoomListStoreV3, { CHATS_TAG, RoomListStoreV3Event } from "../../../src/stores/room-list-v3/RoomListStoreV3"; import SpaceStore from "../../../src/stores/spaces/SpaceStore"; -import { FilterKey } from "../../../src/stores/room-list-v3/skip-list/filters"; +import { FilterEnum } from "../../../src/stores/room-list-v3/skip-list/filters"; import dispatcher from "../../../src/dispatcher/dispatcher"; import { Action } from "../../../src/dispatcher/actions"; import { SdkContextClass } from "../../../src/contexts/SDKContext"; import DMRoomMap from "../../../src/utils/DMRoomMap"; import { RoomListViewModel } from "../../../src/viewmodels/room-list/RoomListViewModel"; import { hasCreateRoomRights } from "../../../src/viewmodels/room-list/utils"; +import { DefaultTagID } from "../../../src/stores/room-list-v3/skip-list/tag"; +import SettingsStore from "../../../src/settings/SettingsStore"; jest.mock("../../../src/viewmodels/room-list/utils", () => ({ hasCreateRoomRights: jest.fn().mockReturnValue(false), @@ -46,7 +49,7 @@ describe("RoomListViewModel", () => { jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "home", - rooms: [room1, room2, room3], + sections: [{ tag: CHATS_TAG, rooms: [room1, room2, room3] }], }); jest.spyOn(RoomListStoreV3.instance, "isLoadingRooms", "get").mockReturnValue(false); @@ -77,12 +80,12 @@ describe("RoomListViewModel", () => { it("should initialize with empty room list", () => { jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "home", - rooms: [], + sections: [{ tag: CHATS_TAG, rooms: [] }], }); viewModel = new RoomListViewModel({ client: matrixClient }); - expect(viewModel.getSnapshot().sections[0].roomIds).toEqual([]); + expect(viewModel.getSnapshot().sections).toEqual([]); expect(viewModel.getSnapshot().isRoomListEmpty).toBe(true); }); @@ -101,7 +104,7 @@ describe("RoomListViewModel", () => { const newRoom = mkStubRoom("!room4:server", "Room 4", matrixClient); jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "home", - rooms: [room1, room2, room3, newRoom], + sections: [{ tag: CHATS_TAG, rooms: [room1, room2, room3, newRoom] }], }); RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); @@ -136,7 +139,7 @@ describe("RoomListViewModel", () => { RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); // View model should be still valid - expect(room1VM.isDisposed).toBe(false); + expect(room1VM!.isDisposed).toBe(false); }); }); @@ -148,7 +151,7 @@ describe("RoomListViewModel", () => { jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "!space:server", - rooms: spaceRoomList, + sections: [{ tag: CHATS_TAG, rooms: spaceRoomList }], }); jest.spyOn(SpaceStore.instance, "getLastSelectedRoomIdForSpace").mockReturnValue("!room1:server"); @@ -163,8 +166,8 @@ describe("RoomListViewModel", () => { viewModel = new RoomListViewModel({ client: matrixClient }); // Get view models for visible rooms - const vm1 = viewModel.getRoomItemViewModel("!room1:server"); - const vm2 = viewModel.getRoomItemViewModel("!room2:server"); + const vm1 = viewModel.getRoomItemViewModel("!room1:server")!; + const vm2 = viewModel.getRoomItemViewModel("!room2:server")!; const disposeSpy1 = jest.spyOn(vm1, "dispose"); const disposeSpy2 = jest.spyOn(vm2, "dispose"); @@ -172,7 +175,7 @@ describe("RoomListViewModel", () => { // Change space jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "!space:server", - rooms: [room3], + sections: [{ tag: CHATS_TAG, rooms: [room3] }], }); RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); @@ -188,7 +191,7 @@ describe("RoomListViewModel", () => { jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "!space:server", - rooms: [newSpaceRoom], + sections: [{ tag: CHATS_TAG, rooms: [newSpaceRoom] }], }); jest.spyOn(SpaceStore.instance, "getLastSelectedRoomIdForSpace").mockReturnValue(null); @@ -197,7 +200,7 @@ describe("RoomListViewModel", () => { // New space room should be accessible expect(() => viewModel.getRoomItemViewModel("!spaceroom:server")).not.toThrow(); // Old rooms from the home space should not be accessible - expect(() => viewModel.getRoomItemViewModel("!room1:server")).toThrow(); + expect(viewModel.getRoomItemViewModel("!room1:server")).toBeUndefined(); }); }); @@ -252,7 +255,7 @@ describe("RoomListViewModel", () => { // Simulate room list update that would move room2 to front jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "home", - rooms: [room2, room1, room3], // room2 moved to front + sections: [{ tag: CHATS_TAG, rooms: [room2, room1, room3] }], // room2 moved to front }); RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); @@ -295,8 +298,8 @@ describe("RoomListViewModel", () => { jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "home", - rooms: [room1], - filterKeys: [FilterKey.UnreadFilter], + sections: [{ tag: CHATS_TAG, rooms: [room1] }], + filterKeys: [FilterEnum.UnreadFilter], }); viewModel.onToggleFilter("unread"); @@ -311,8 +314,8 @@ describe("RoomListViewModel", () => { // Turn filter on jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "home", - rooms: [room1], - filterKeys: [FilterKey.UnreadFilter], + sections: [{ tag: CHATS_TAG, rooms: [room1] }], + filterKeys: [FilterEnum.UnreadFilter], }); viewModel.onToggleFilter("unread"); @@ -321,7 +324,7 @@ describe("RoomListViewModel", () => { // Turn filter off jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "home", - rooms: [room1, room2, room3], + sections: [{ tag: CHATS_TAG, rooms: [room1, room2, room3] }], }); viewModel.onToggleFilter("unread"); @@ -341,7 +344,7 @@ describe("RoomListViewModel", () => { const itemViewModel = viewModel.getRoomItemViewModel("!room1:server"); expect(itemViewModel).toBeDefined(); - expect(itemViewModel.getSnapshot().room).toBe(room1); + expect(itemViewModel!.getSnapshot().room).toBe(room1); }); it("should reuse existing room item view model", () => { @@ -353,12 +356,10 @@ describe("RoomListViewModel", () => { expect(itemViewModel1).toBe(itemViewModel2); }); - it("should throw error when requesting view model for non-existent room", () => { + it("should return undefined for non-existent room", () => { viewModel = new RoomListViewModel({ client: matrixClient }); - expect(() => { - viewModel.getRoomItemViewModel("!nonexistent:server"); - }).toThrow(); + expect(viewModel.getRoomItemViewModel("!nonexistent:server")).toBeUndefined(); }); it("should not throw when requesting view model for a room removed from the list but still in roomsMap", () => { @@ -367,7 +368,7 @@ describe("RoomListViewModel", () => { // Normal list update removes room2 from the list jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "home", - rooms: [room1, room3], + sections: [{ tag: CHATS_TAG, rooms: [room1, room3] }], }); RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); @@ -375,7 +376,7 @@ describe("RoomListViewModel", () => { expect(() => viewModel.getRoomItemViewModel("!room2:server")).not.toThrow(); }); - it("should throw when requesting view model for a room from old space after space change", () => { + it("should return undefined for a room from old space after space change", () => { viewModel = new RoomListViewModel({ client: matrixClient }); const spaceRoom = mkStubRoom("!newroom:server", "New Room", matrixClient); @@ -383,15 +384,13 @@ describe("RoomListViewModel", () => { // Space change: new space only has spaceRoom jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ spaceId: "!space:server", - rooms: [spaceRoom], + sections: [{ tag: CHATS_TAG, rooms: [spaceRoom] }], }); jest.spyOn(SpaceStore.instance, "getLastSelectedRoomIdForSpace").mockReturnValue(null); RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); - expect(() => viewModel.getRoomItemViewModel("!room1:server")).toThrow( - "Room !room1:server not found in roomsMap", - ); + expect(viewModel.getRoomItemViewModel("!room1:server")).toBeUndefined(); }); it("should recover when roomsMap is stale but roomsResult has the room", () => { @@ -407,9 +406,9 @@ describe("RoomListViewModel", () => { it("should dispose view models for rooms no longer visible", () => { viewModel = new RoomListViewModel({ client: matrixClient }); - const vm1 = viewModel.getRoomItemViewModel("!room1:server"); - const vm2 = viewModel.getRoomItemViewModel("!room2:server"); - const vm3 = viewModel.getRoomItemViewModel("!room3:server"); + const vm1 = viewModel.getRoomItemViewModel("!room1:server")!; + const vm2 = viewModel.getRoomItemViewModel("!room2:server")!; + const vm3 = viewModel.getRoomItemViewModel("!room3:server")!; const disposeSpy1 = jest.spyOn(vm1, "dispose"); const disposeSpy3 = jest.spyOn(vm3, "dispose"); @@ -593,8 +592,8 @@ describe("RoomListViewModel", () => { it("should dispose all room item view models on dispose", () => { viewModel = new RoomListViewModel({ client: matrixClient }); - const vm1 = viewModel.getRoomItemViewModel("!room1:server"); - const vm2 = viewModel.getRoomItemViewModel("!room2:server"); + const vm1 = viewModel.getRoomItemViewModel("!room1:server")!; + const vm2 = viewModel.getRoomItemViewModel("!room2:server")!; const disposeSpy1 = jest.spyOn(vm1, "dispose"); const disposeSpy2 = jest.spyOn(vm2, "dispose"); @@ -604,5 +603,297 @@ describe("RoomListViewModel", () => { expect(disposeSpy1).toHaveBeenCalled(); expect(disposeSpy2).toHaveBeenCalled(); }); + + describe("Sections (feature_room_list_sections)", () => { + let favRoom1: Room; + let favRoom2: Room; + let lowPriorityRoom: Room; + let regularRoom1: Room; + let regularRoom2: Room; + + beforeEach(() => { + jest.spyOn(SettingsStore, "getValue").mockImplementation((setting: string) => { + if (setting === "feature_room_list_sections") return true; + return false; + }); + + favRoom1 = mkStubRoom("!fav1:server", "Fav 1", matrixClient); + favRoom2 = mkStubRoom("!fav2:server", "Fav 2", matrixClient); + lowPriorityRoom = mkStubRoom("!low1:server", "Low 1", matrixClient); + regularRoom1 = mkStubRoom("!reg1:server", "Reg 1", matrixClient); + regularRoom2 = mkStubRoom("!reg2:server", "Reg 2", matrixClient); + + jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ + spaceId: "home", + sections: [ + { tag: DefaultTagID.Favourite, rooms: [favRoom1, favRoom2] }, + { tag: CHATS_TAG, rooms: [regularRoom1, regularRoom2] }, + { tag: DefaultTagID.LowPriority, rooms: [lowPriorityRoom] }, + ], + }); + }); + + it("should initialize with multiple sections", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + const snapshot = viewModel.getSnapshot(); + expect(snapshot.sections).toHaveLength(3); + expect(snapshot.sections[0].id).toBe(DefaultTagID.Favourite); + expect(snapshot.sections[0].roomIds).toEqual(["!fav1:server", "!fav2:server"]); + expect(snapshot.sections[1].id).toBe(CHATS_TAG); + expect(snapshot.sections[1].roomIds).toEqual(["!reg1:server", "!reg2:server"]); + expect(snapshot.sections[2].id).toBe(DefaultTagID.LowPriority); + expect(snapshot.sections[2].roomIds).toEqual(["!low1:server"]); + }); + + it("should not be a flat list when multiple sections exist", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + expect(viewModel.getSnapshot().isFlatList).toBe(false); + }); + + it("should be a flat list when only chats section has rooms", () => { + jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ + spaceId: "home", + sections: [ + { tag: DefaultTagID.Favourite, rooms: [] }, + { tag: CHATS_TAG, rooms: [regularRoom1] }, + { tag: DefaultTagID.LowPriority, rooms: [] }, + ], + }); + + viewModel = new RoomListViewModel({ client: matrixClient }); + + expect(viewModel.getSnapshot().isFlatList).toBe(true); + expect(viewModel.getSnapshot().sections).toHaveLength(1); + expect(viewModel.getSnapshot().sections[0].id).toBe(CHATS_TAG); + }); + + it("should exclude favourite and low_priority from filter list", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + const snapshot = viewModel.getSnapshot(); + expect(snapshot.filterIds).not.toContain("favourite"); + expect(snapshot.filterIds).not.toContain("low_priority"); + // Other filters should still be present + expect(snapshot.filterIds).toContain("unread"); + expect(snapshot.filterIds).toContain("people"); + }); + + it("should omit empty sections from snapshot", () => { + jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ + spaceId: "home", + sections: [ + { tag: DefaultTagID.Favourite, rooms: [] }, + { tag: CHATS_TAG, rooms: [regularRoom1] }, + { tag: DefaultTagID.LowPriority, rooms: [] }, + ], + }); + + viewModel = new RoomListViewModel({ client: matrixClient }); + + const snapshot = viewModel.getSnapshot(); + expect(snapshot.sections).toHaveLength(1); + expect(snapshot.sections[0].id).toBe(CHATS_TAG); + }); + + it("should create section header view models on demand", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + const headerVM = viewModel.getSectionHeaderViewModel(DefaultTagID.Favourite); + expect(headerVM).toBeDefined(); + expect(headerVM.getSnapshot().id).toBe(DefaultTagID.Favourite); + expect(headerVM.getSnapshot().isExpanded).toBe(true); + }); + + it("should reuse section header view models", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + const headerVM1 = viewModel.getSectionHeaderViewModel(DefaultTagID.Favourite); + const headerVM2 = viewModel.getSectionHeaderViewModel(DefaultTagID.Favourite); + expect(headerVM1).toBe(headerVM2); + }); + + it("should hide room IDs when a section is collapsed", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + // Collapse the favourite section + const favHeader = viewModel.getSectionHeaderViewModel(DefaultTagID.Favourite); + favHeader.onClick(); + expect(favHeader.isExpanded).toBe(false); + + const snapshot = viewModel.getSnapshot(); + const favSection = snapshot.sections.find((s) => s.id === DefaultTagID.Favourite); + expect(favSection).toBeDefined(); + // Collapsed sections have an empty roomIds list + expect(favSection!.roomIds).toEqual([]); + + // Other sections remain unaffected + const chatsSection = snapshot.sections.find((s) => s.id === CHATS_TAG); + expect(chatsSection!.roomIds).toEqual(["!reg1:server", "!reg2:server"]); + }); + + it("should compute activeRoomIndex relative to visible rooms when a section is collapsed", async () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + // Collapse the favourite section (which has 2 rooms: fav1, fav2) + const favHeader = viewModel.getSectionHeaderViewModel(DefaultTagID.Favourite); + favHeader.onClick(); + expect(favHeader.isExpanded).toBe(false); + + // Select regularRoom1, which is the first room in the chats section + jest.spyOn(SdkContextClass.instance.roomViewStore, "getRoomId").mockReturnValue("!reg1:server"); + dispatcher.dispatch({ + action: Action.ActiveRoomChanged, + newRoomId: "!reg1:server", + }); + + await waitFor(() => { + const snapshot = viewModel.getSnapshot(); + // The favourite section is collapsed so its 2 rooms are not visible. + // regularRoom1 should be at index 0 in the visible list, not index 2. + expect(snapshot.roomListState.activeRoomIndex).toBe(0); + }); + }); + + it("should restore room IDs when a section is re-expanded", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + const favHeader = viewModel.getSectionHeaderViewModel(DefaultTagID.Favourite); + + // Collapse then re-expand + favHeader.onClick(); + favHeader.onClick(); + expect(favHeader.isExpanded).toBe(true); + + const snapshot = viewModel.getSnapshot(); + const favSection = snapshot.sections.find((s) => s.id === DefaultTagID.Favourite); + expect(favSection!.roomIds).toEqual(["!fav1:server", "!fav2:server"]); + }); + + it("should update sections when room list changes", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + const newFav = mkStubRoom("!fav3:server", "Fav 3", matrixClient); + + jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ + spaceId: "home", + sections: [ + { tag: DefaultTagID.Favourite, rooms: [favRoom1, favRoom2, newFav] }, + { tag: CHATS_TAG, rooms: [regularRoom1, regularRoom2] }, + { tag: DefaultTagID.LowPriority, rooms: [lowPriorityRoom] }, + ], + }); + + RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); + + const snapshot = viewModel.getSnapshot(); + expect(snapshot.sections[0].roomIds).toEqual(["!fav1:server", "!fav2:server", "!fav3:server"]); + }); + + it("should preserve section collapse state across list updates", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + // Collapse favourites + const favHeader = viewModel.getSectionHeaderViewModel(DefaultTagID.Favourite); + favHeader.onClick(); + + // Trigger a list update + RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); + + const snapshot = viewModel.getSnapshot(); + const favSection = snapshot.sections.find((s) => s.id === DefaultTagID.Favourite); + expect(favSection!.roomIds).toEqual([]); + }); + + it("should preserve section collapse state across space changes", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + // Collapse favourites + const favHeader = viewModel.getSectionHeaderViewModel(DefaultTagID.Favourite); + favHeader.onClick(); + + // Switch to a different space with its own rooms + const spaceFav = mkStubRoom("!spacefav:server", "Space Fav", matrixClient); + const spaceReg = mkStubRoom("!spacereg:server", "Space Reg", matrixClient); + jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ + spaceId: "!space:server", + sections: [ + { tag: DefaultTagID.Favourite, rooms: [spaceFav] }, + { tag: CHATS_TAG, rooms: [spaceReg] }, + { tag: DefaultTagID.LowPriority, rooms: [] }, + ], + }); + jest.spyOn(SpaceStore.instance, "getLastSelectedRoomIdForSpace").mockReturnValue(null); + + RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); + + const snapshot = viewModel.getSnapshot(); + // Favourites should still be collapsed even after the space change + const favSection = snapshot.sections.find((s) => s.id === DefaultTagID.Favourite); + expect(favSection).toBeDefined(); + expect(favSection!.roomIds).toEqual([]); + + // Other sections should remain expanded + const chatsSection = snapshot.sections.find((s) => s.id === CHATS_TAG); + expect(chatsSection!.roomIds).toEqual(["!spacereg:server"]); + }); + + it("should apply filters across all sections", () => { + viewModel = new RoomListViewModel({ client: matrixClient }); + + // Only favRoom1 is unread + jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ + spaceId: "home", + sections: [ + { tag: DefaultTagID.Favourite, rooms: [favRoom1] }, + { tag: CHATS_TAG, rooms: [] }, + { tag: DefaultTagID.LowPriority, rooms: [] }, + ], + filterKeys: [FilterEnum.UnreadFilter], + }); + + viewModel.onToggleFilter("unread"); + + const snapshot = viewModel.getSnapshot(); + expect(snapshot.activeFilterId).toBe("unread"); + // Only the favourite section should remain (chats and low priority are empty) + expect(snapshot.sections).toHaveLength(1); + expect(snapshot.sections[0].id).toBe(DefaultTagID.Favourite); + expect(snapshot.sections[0].roomIds).toEqual(["!fav1:server"]); + }); + + it("should apply sticky room within the correct section", async () => { + stubClient(); + viewModel = new RoomListViewModel({ client: matrixClient }); + + // Select favRoom1 (index 0 globally, index 0 in favourites section) + jest.spyOn(SdkContextClass.instance.roomViewStore, "getRoomId").mockReturnValue("!fav1:server"); + dispatcher.dispatch({ + action: Action.ActiveRoomChanged, + newRoomId: "!fav1:server", + }); + await flushPromises(); + + expect(viewModel.getSnapshot().roomListState.activeRoomIndex).toBe(0); + + // Room list update moves favRoom1 to second position within favourites + jest.spyOn(RoomListStoreV3.instance, "getSortedRoomsInActiveSpace").mockReturnValue({ + spaceId: "home", + sections: [ + { tag: DefaultTagID.Favourite, rooms: [favRoom2, favRoom1] }, + { tag: CHATS_TAG, rooms: [regularRoom1, regularRoom2] }, + { tag: DefaultTagID.LowPriority, rooms: [lowPriorityRoom] }, + ], + }); + + RoomListStoreV3.instance.emit(RoomListStoreV3Event.ListsUpdate); + + // Sticky room should keep favRoom1 at index 0 within the favourites section + const snapshot = viewModel.getSnapshot(); + expect(snapshot.sections[0].roomIds[0]).toBe("!fav1:server"); + expect(snapshot.roomListState.activeRoomIndex).toBe(0); + }); + }); }); }); diff --git a/packages/shared-components/__vis__/linux/__baselines__/room-list/RoomListView/RoomListView.stories.tsx/large-section-list-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room-list/RoomListView/RoomListView.stories.tsx/large-section-list-auto.png index 9d43af461937de79f063d256f768b3334c9c18ec..402b680fcf2b5764ecbe2eddd894e01639403351 100644 GIT binary patch literal 58253 zcmZTwWk6M1(>@&ORHT&dZs``JySqcWyHNp^MmnXtyOD0`?rx-;Z{t<3_x=2%=d82# zo|!fI%q&03N{b-Dzk~;YKuBVuLh>NclNJyN{2dk=_(sS1MFj}-6eK1jpy&dzHxK24 zrZNk?WU>kehxe+cz8=k)UbaHf=Iv*U%T#`i3^ZrjgU3HbaPL9BPphpLp1=|A39}I% zpC0xP;_zLZHy0faa4?%Q*?rq<;rOhKeWBVQY;G;J)X-txJj19G+}eEtKP0wme-IIy za)C487%~wv++1z5fr)J&c_5C9ujFQ-Fp`|MsCz(>sZPQou#P>D; zjFt+5qTq*sm-PXE6liJZRf2c8ZhBJ@;zW!6)#7KJuiW(!Q`pTUXeQ<(~y7a|l~6tW2azvnbwWarb_q3PF8?@YSrNjFERUUa8`~ z!ZnIQ8#1alM)`cd+1%pviX~U&$#`XL6tx1l;}e?D6%(m}ht-JA^hk%CWO;#X(URMcwbO#Z61bdT;R2J4WaZz%n*r02T`bz;2&@HzFb{2 zsp@|r%OK2dvZWs0oJs#E{20>(UEJx#h>AThVEqnwZ0f8(nRP5OJc;U((tXvZ- zV}C=ZD$x`&ba7LGM97v4JRU)Zd)J+{AQ5%`XnGTj42dLE%82P)f>)fD!kI<6AK}_H z!MA>{Ww}0E*GVwyVQZLC8;ZCwlSMTit3}5Vd~Y+v!x1Nxqp9dwWjG7VNm!LjWTJ4U znT@`K^{6##oUpA9@YF+W?}MoeUEHqT`WB;rpAhpB!FkQ|G>$zyylKFYkpGK(0$YSw zA*1W2Ca)UT3&Jw?jCX?9ujEWu^2d8}3%`?1Dzg+XHWfqRga@+ohNyydYWs@|X*AyE zFWBL#AYajyz0J>JJK*;75DCYf>{BUnNiVFzppS(S+m8^catn&CmWjjpaJK((k;E-~s1TFm4n zIyNLW6qsen#6UaaaR-lG8m&)`jgd&h+=*Efgwv~FXpSmx5;Jqac`P=#hiXnUy~$E9 zh-P7CQ4%;xx(Qug-NnxL>=H6*^144d|9H=BNXkyu8B;R5w)e~W9uE{Xoj>ErQh-d- zQrIA#v2oUq8R`#J@D^59&}wHv-9l?|i_TUDVM-H$UmoI(3}>DFD{{wK_X9:AT3 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 literal 16538 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 W^W5~)PT&aW&MmXwt8V`B?7so5nQs&T diff --git a/packages/shared-components/__vis__/linux/__baselines__/room-list/VirtualizedRoomListView/VirtualizedRoomListView.stories.tsx/sections-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room-list/VirtualizedRoomListView/VirtualizedRoomListView.stories.tsx/sections-auto.png index 36b07b87ba5a803bc70916d9005d07ded2d5c2a9..dfda0e57b71f08fc6929eae2544c5fc299cfec23 100644 GIT binary patch literal 40143 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 void; /** Called to create a new room */ createRoom: () => void; - /** Get view model for a specific room (virtualization API) */ - getRoomItemViewModel: (roomId: string) => RoomListItemViewModel; + /** + * Get view model for a specific room (virtualization API) + * Allow undefined to be returned if we don't have a view model for the room. In this case the room will not be rendered. + */ + getRoomItemViewModel: (roomId: string) => RoomListItemViewModel | undefined; /** Called when the visible range changes (virtualization API) */ updateVisibleRooms: (startIndex: number, endIndex: number) => void; /** Get view model for a specific section header (virtualization API) */ diff --git a/packages/shared-components/src/room-list/RoomListView/__snapshots__/RoomListView.test.tsx.snap b/packages/shared-components/src/room-list/RoomListView/__snapshots__/RoomListView.test.tsx.snap index 8b50070177..222cdbf7e4 100644 --- a/packages/shared-components/src/room-list/RoomListView/__snapshots__/RoomListView.test.tsx.snap +++ b/packages/shared-components/src/room-list/RoomListView/__snapshots__/RoomListView.test.tsx.snap @@ -8352,7 +8352,7 @@ exports[` > renders LargeSectionList story 1`] = ` aria-haspopup="menu" aria-label="Open room General" aria-selected="false" - class="flex roomListItem mx_RoomListItemView bold firstItem" + class="flex roomListItem mx_RoomListItemView bold" data-state="closed" role="gridcell" style="--mx-flex-display: flex; --mx-flex-direction: row; --mx-flex-align: stretch; --mx-flex-justify: start; --mx-flex-gap: var(--cpd-space-3x); --mx-flex-wrap: nowrap;" @@ -13652,7 +13652,7 @@ exports[` > renders SmallSectionList story 1`] = ` aria-haspopup="menu" aria-label="Open room General" aria-selected="false" - class="flex roomListItem mx_RoomListItemView bold firstItem" + class="flex roomListItem mx_RoomListItemView bold" data-state="closed" role="gridcell" style="--mx-flex-display: flex; --mx-flex-direction: row; --mx-flex-align: stretch; --mx-flex-justify: start; --mx-flex-gap: var(--cpd-space-3x); --mx-flex-wrap: nowrap;" @@ -13806,7 +13806,7 @@ exports[` > renders SmallSectionList story 1`] = ` aria-haspopup="menu" aria-label="Open room Random" aria-selected="false" - class="flex roomListItem mx_RoomListItemView lastItem" + class="flex roomListItem mx_RoomListItemView" data-state="closed" role="gridcell" style="--mx-flex-display: flex; --mx-flex-direction: row; --mx-flex-align: stretch; --mx-flex-justify: start; --mx-flex-gap: var(--cpd-space-3x); --mx-flex-wrap: nowrap;" diff --git a/packages/shared-components/src/room-list/VirtualizedRoomListView/VirtualizedRoomListView.tsx b/packages/shared-components/src/room-list/VirtualizedRoomListView/VirtualizedRoomListView.tsx index 3bc484ae03..fbfb3d617a 100644 --- a/packages/shared-components/src/room-list/VirtualizedRoomListView/VirtualizedRoomListView.tsx +++ b/packages/shared-components/src/room-list/VirtualizedRoomListView/VirtualizedRoomListView.tsx @@ -139,6 +139,13 @@ export function VirtualizedRoomListView({ vm, renderAvatar, onKeyDown }: Virtual /** * Get the item component for a specific index * Gets the room's view model and passes it to RoomListItemView + * + * @param index - The index of the item in the list + * @param roomId - The ID of the room for this item + * @param context - The virtualization context containing list state + * @param onFocus - Callback to call when the item is focused + * @param isInLastSection - Whether this item is in the last section + * @param roomIndexInSection - The index of this room within its section */ const getItemComponent = useCallback( ( @@ -146,18 +153,24 @@ export function VirtualizedRoomListView({ vm, renderAvatar, onKeyDown }: Virtual roomId: string, context: VirtualizedListContext, onFocus: (item: string, e: React.FocusEvent) => void, - roomIndexInSection: number, + isInLastSection?: boolean, + roomIndexInSection?: number, ): JSX.Element => { const { activeRoomIndex, roomCount, vm, isFlatList } = context.context; const isSelected = activeRoomIndex === index; const roomItemVM = vm.getRoomItemViewModel(roomId); + // If we don't have a view model for this room, it means the room has been removed since the list was rendered - return an empty placeholder + if (!roomItemVM) { + return ; + } + // Item is focused when the list has focus AND this item's key matches tabIndexKey // This matches the old RoomList implementation's roving tabindex pattern const isFocused = context.focused && context.tabIndexKey === roomId; - const isFirstItem = index === 0; - const isLastItem = index === roomCount - 1; + const isFirstItem = isFlatList && index === 0; + const isLastItem = Boolean((isFlatList || isInLastSection) && index === roomCount - 1); return ( { const { sections } = context.context; const roomIndexInSection = sections[groupIndex].roomIds.findIndex((id) => id === roomId); - return getItemComponent(index, roomId, context, onFocus, roomIndexInSection); + const isInLastSection = groupIndex === sections.length - 1; + return getItemComponent(index, roomId, context, onFocus, isInLastSection, roomIndexInSection); }, [getItemComponent], ); /** * Get the item component for a specific index in a flat list - * Since we don't have sections, we can pass 0 for the room's index within its section to getItemComponent * Gets the room's view model and passes it to RoomListItemView */ const getItemComponentForFlatList = useCallback( @@ -211,8 +224,7 @@ export function VirtualizedRoomListView({ vm, renderAvatar, onKeyDown }: Virtual context: VirtualizedListContext, onFocus: (item: string, e: React.FocusEvent) => void, ): JSX.Element => { - // For a flat list, we don't have sections, so roomIndexInSection is unused and can be set to 0 - return getItemComponent(index, roomId, context, onFocus, 0); + return getItemComponent(index, roomId, context, onFocus); }, [getItemComponent], );