diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index bc8f8a60d4..5ea96acaad 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -889,6 +889,7 @@ "Meta Spaces": "Meta Spaces", "Use new room breadcrumbs": "Use new room breadcrumbs", "New spotlight search experience": "New spotlight search experience", + "Right panel stays open (defaults to room member list)": "Right panel stays open (defaults to room member list)", "Jump to date (adds /jumptodate)": "Jump to date (adds /jumptodate)", "Don't send read receipts": "Don't send read receipts", "Font size": "Font size", diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 6e92200f0b..b84679f3c8 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -366,6 +366,13 @@ export const SETTINGS: {[setting: string]: ISetting} = { displayName: _td("New spotlight search experience"), default: false, }, + "feature_right_panel_default_open": { + isFeature: true, + labsGroup: LabGroup.Rooms, + supportedLevels: LEVELS_FEATURE, + displayName: _td("Right panel stays open (defaults to room member list)"), + default: false, + }, "feature_jump_to_date": { // We purposely leave out `isFeature: true` so it doesn't show in Labs // by default. We will conditionally show it depending on whether we can diff --git a/src/stores/right-panel/RightPanelStore.ts b/src/stores/right-panel/RightPanelStore.ts index 49a5dfbd51..682cd43dcc 100644 --- a/src/stores/right-panel/RightPanelStore.ts +++ b/src/stores/right-panel/RightPanelStore.ts @@ -368,6 +368,21 @@ export default class RightPanelStore extends ReadyWatchingStore { this.isViewingRoom = true; // Is viewing room will of course be removed when removing groups // load values from byRoomCache with the viewedRoomId. this.loadCacheFromSettings(); + // If the right panel stays open mode is used, and the panel was either + // closed or never shown for that room, then force it open and display + // the room member list. + if ( + SettingsStore.getValue("feature_right_panel_default_open") && + !this.byRoom[this.viewedRoomId]?.isOpen + ) { + this.byRoom[this.viewedRoomId] = { + isOpen: true, + history: [ + { phase: RightPanelPhases.RoomSummary }, + { phase: RightPanelPhases.RoomMemberList }, + ], + }; + } this.emitAndUpdateSettings(); };