Room list: fix expanded/collapse state of sections (#33074)

* fix: section being empty in flat list mode

When switching space (or removing a section later), if the Chat section
is collpased and the room list is in flat list mode in the other space,
the room list is empty.

The fix forces the section to be in expanded state if in flat list mode

* fix: store section expanded state by space
This commit is contained in:
Florian Duros
2026-04-08 13:44:52 +00:00
committed by GitHub
parent ce498ef983
commit 121c2d18e9
4 changed files with 106 additions and 8 deletions
@@ -30,6 +30,7 @@ describe("RoomListSectionHeaderViewModel", () => {
const vm = new RoomListSectionHeaderViewModel({
tag: "m.favourite",
title: "Favourites",
spaceId: "!space:server",
onToggleExpanded,
});
@@ -43,6 +44,7 @@ describe("RoomListSectionHeaderViewModel", () => {
const vm = new RoomListSectionHeaderViewModel({
tag: "m.favourite",
title: "Favourites",
spaceId: "!space:server",
onToggleExpanded,
});
expect(vm.isExpanded).toBe(true);
@@ -58,6 +60,33 @@ describe("RoomListSectionHeaderViewModel", () => {
expect(onToggleExpanded).toHaveBeenCalledWith(true);
});
it("should track expanded state per space", () => {
const vm = new RoomListSectionHeaderViewModel({
tag: "m.favourite",
title: "Favourites",
spaceId: "!space:server",
onToggleExpanded,
});
// Default space: collapse
vm.onClick();
expect(vm.isExpanded).toBe(false);
// Switch to a different space: should default to expanded
vm.setSpace("!space2:server");
expect(vm.isExpanded).toBe(true);
// Collapse in the new space
vm.onClick();
expect(vm.isExpanded).toBe(false);
vm.onClick();
expect(vm.isExpanded).toBe(true);
// Switch to the other space: should still be collapsed
vm.setSpace("!space:server");
expect(vm.isExpanded).toBe(false);
});
describe("unread status", () => {
let room: Room;
let notificationState: RoomNotificationState;
@@ -72,6 +101,7 @@ describe("RoomListSectionHeaderViewModel", () => {
const vm = new RoomListSectionHeaderViewModel({
tag: "m.favourite",
title: "Favourites",
spaceId: "!space:server",
onToggleExpanded,
});
vm.setRooms([room]);
@@ -85,6 +115,7 @@ describe("RoomListSectionHeaderViewModel", () => {
const vm = new RoomListSectionHeaderViewModel({
tag: "m.favourite",
title: "Favourites",
spaceId: "!space:server",
onToggleExpanded,
});
vm.setRooms([room]);
@@ -107,6 +138,7 @@ describe("RoomListSectionHeaderViewModel", () => {
const vm = new RoomListSectionHeaderViewModel({
tag: "m.favourite",
title: "Favourites",
spaceId: "!space:server",
onToggleExpanded,
});
vm.setRooms([room]);
@@ -127,6 +159,7 @@ describe("RoomListSectionHeaderViewModel", () => {
const vm = new RoomListSectionHeaderViewModel({
tag: "m.favourite",
title: "Favourites",
spaceId: "!space:server",
onToggleExpanded,
});
vm.setRooms([room]);
@@ -145,6 +178,7 @@ describe("RoomListSectionHeaderViewModel", () => {
const vm = new RoomListSectionHeaderViewModel({
tag: "m.favourite",
title: "Favourites",
spaceId: "!space:server",
onToggleExpanded,
});
vm.setRooms([room]);