From 6b00466a851ec234d1580998d32395263b8eea0d Mon Sep 17 00:00:00 2001 From: R Midhun Suresh Date: Tue, 7 Apr 2026 17:35:36 +0530 Subject: [PATCH] Collapsible Left Panel - Clicking on separator should expand to 100% when no width is available in settings (#33053) * Expand panel to full width * Write tests --- .../viewmodels/structures/ResizerViewModel.ts | 2 +- .../structures/ResizerViewModel-test.ts | 35 +++++++++++++------ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/apps/web/src/viewmodels/structures/ResizerViewModel.ts b/apps/web/src/viewmodels/structures/ResizerViewModel.ts index 3eeefed245..724bb6fd6e 100644 --- a/apps/web/src/viewmodels/structures/ResizerViewModel.ts +++ b/apps/web/src/viewmodels/structures/ResizerViewModel.ts @@ -76,7 +76,7 @@ export class ResizerViewModel public onSeparatorClick = (): void => { if (this.panelHandle?.isCollapsed()) { const lastSize = SettingsStore.getValue("RoomList.panelSize"); - this.panelHandle.resize(`${lastSize}%`); + this.panelHandle.resize(`${lastSize ?? 100}%`); } }; diff --git a/apps/web/test/viewmodels/structures/ResizerViewModel-test.ts b/apps/web/test/viewmodels/structures/ResizerViewModel-test.ts index 706efa7524..ea514fdafb 100644 --- a/apps/web/test/viewmodels/structures/ResizerViewModel-test.ts +++ b/apps/web/test/viewmodels/structures/ResizerViewModel-test.ts @@ -68,18 +68,33 @@ describe("LeftPanelResizerViewModel", () => { expect(() => vm.onSeparatorClick()).not.toThrow(); }); - it("should expand panel on onSeparatorClick()", () => { - const vm = new ResizerViewModel(); - SettingsStore.setValue("RoomList.panelSize", null, SettingLevel.DEVICE, 34); - const mockHandle = { - resize: jest.fn(), - isCollapsed: jest.fn().mockReturnValue(true), - } as unknown as PanelImperativeHandle; - vm.setPanelHandle(mockHandle); + describe("should expand panel on onSeparatorClick()", () => { + it("to last non-zero width that the user set", () => { + const vm = new ResizerViewModel(); + SettingsStore.setValue("RoomList.panelSize", null, SettingLevel.DEVICE, 34); + const mockHandle = { + resize: jest.fn(), + isCollapsed: jest.fn().mockReturnValue(true), + } as unknown as PanelImperativeHandle; + vm.setPanelHandle(mockHandle); - vm.onSeparatorClick(); + vm.onSeparatorClick(); - expect(mockHandle.resize).toHaveBeenCalledWith("34%"); + expect(mockHandle.resize).toHaveBeenCalledWith("34%"); + }); + + it("to maximum size of the panel", () => { + const vm = new ResizerViewModel(); + const mockHandle = { + resize: jest.fn(), + isCollapsed: jest.fn().mockReturnValue(true), + } as unknown as PanelImperativeHandle; + vm.setPanelHandle(mockHandle); + + vm.onSeparatorClick(); + + expect(mockHandle.resize).toHaveBeenCalledWith("100%"); + }); }); it("should set isFocusedViaKeyboard state correctly", () => {