Make room switches instant and cut redundant client work.
Keep-alive room cache with CSS-only warm switches, nav loading feedback, and per-context members drawer prefs. Share hierarchy/call/sub-room subscriptions, demux state events, and lazy lobby power-level loading to avoid duplicate scans and listener storms.
This commit is contained in:
@@ -36,7 +36,10 @@ export interface Settings {
|
||||
pageZoom: number;
|
||||
hideActivity: boolean;
|
||||
|
||||
isPeopleDrawer: boolean;
|
||||
/** Last open/closed state of the members panel in non-DM rooms. */
|
||||
peopleDrawerInRooms: boolean;
|
||||
/** Last open/closed state of the members panel in DMs. */
|
||||
peopleDrawerInDirects: boolean;
|
||||
isCallPanelDocked: boolean;
|
||||
callPanelDockPosition: CallPanelDockPosition;
|
||||
memberSortFilterIndex: number;
|
||||
@@ -79,7 +82,8 @@ const defaultSettings: Settings = {
|
||||
pageZoom: 100,
|
||||
hideActivity: false,
|
||||
|
||||
isPeopleDrawer: true,
|
||||
peopleDrawerInRooms: true,
|
||||
peopleDrawerInDirects: false,
|
||||
isCallPanelDocked: false,
|
||||
callPanelDockPosition: 'right',
|
||||
memberSortFilterIndex: 0,
|
||||
@@ -112,15 +116,29 @@ const defaultSettings: Settings = {
|
||||
export const getSettings = () => {
|
||||
const settings = localStorage.getItem(STORAGE_KEY);
|
||||
if (settings === null) return defaultSettings;
|
||||
|
||||
const parsed = JSON.parse(settings) as Settings & { twitterEmoji?: boolean };
|
||||
|
||||
|
||||
const parsed = JSON.parse(settings) as Settings & {
|
||||
twitterEmoji?: boolean;
|
||||
isPeopleDrawer?: boolean;
|
||||
};
|
||||
|
||||
// Migrate old twitterEmoji boolean to new emojiStyle enum
|
||||
if ('twitterEmoji' in parsed && parsed.emojiStyle === undefined) {
|
||||
parsed.emojiStyle = parsed.twitterEmoji ? EmojiStyle.Twemoji : EmojiStyle.Apple;
|
||||
delete parsed.twitterEmoji;
|
||||
}
|
||||
|
||||
|
||||
// Migrate single people-drawer flag into room/DM prefs.
|
||||
if (
|
||||
typeof parsed.isPeopleDrawer === 'boolean' &&
|
||||
parsed.peopleDrawerInRooms === undefined &&
|
||||
parsed.peopleDrawerInDirects === undefined
|
||||
) {
|
||||
parsed.peopleDrawerInRooms = parsed.isPeopleDrawer;
|
||||
parsed.peopleDrawerInDirects = parsed.isPeopleDrawer;
|
||||
}
|
||||
delete parsed.isPeopleDrawer;
|
||||
|
||||
return {
|
||||
...defaultSettings,
|
||||
...parsed,
|
||||
|
||||
Reference in New Issue
Block a user