From dde459dc5d0a3a1b39f43a76f27c4eabad02a7de Mon Sep 17 00:00:00 2001 From: Wes Date: Mon, 6 Apr 2026 19:43:29 -0700 Subject: [PATCH] [codex] Fix settings dialog open jank (#254) --- desktop/src/app/AppShell.tsx | 55 ++++++++----------- .../features/profile/ui/ProfilePopover.tsx | 4 +- .../features/settings/ui/SettingsScreen.tsx | 47 ++++++---------- .../src/features/settings/ui/SettingsView.tsx | 28 +++------- 4 files changed, 53 insertions(+), 81 deletions(-) diff --git a/desktop/src/app/AppShell.tsx b/desktop/src/app/AppShell.tsx index 14186a0a2..deb391b6c 100644 --- a/desktop/src/app/AppShell.tsx +++ b/desktop/src/app/AppShell.tsx @@ -20,6 +20,7 @@ import { useHomeFeedNotifications } from "@/features/notifications/hooks"; import { usePresenceSession } from "@/features/presence/hooks"; import { useProfileQuery } from "@/features/profile/hooks"; import type { SettingsSection } from "@/features/settings/ui/SettingsPanels"; +import { SettingsScreen } from "@/features/settings/ui/SettingsScreen"; import { AppSidebar } from "@/features/sidebar/ui/AppSidebar"; import { relayClient } from "@/shared/api/relayClient"; import { useIdentityQuery } from "@/shared/api/hooks"; @@ -44,10 +45,6 @@ const ChannelScreen = React.lazy(async () => { const module = await import("@/features/channels/ui/ChannelScreen"); return { default: module.ChannelScreen }; }); -const SettingsScreen = React.lazy(async () => { - const module = await import("@/features/settings/ui/SettingsScreen"); - return { default: module.SettingsScreen }; -}); const WorkflowsScreen = React.lazy(async () => { const module = await import("@/features/workflows/ui/WorkflowsScreen"); return { default: module.WorkflowsScreen }; @@ -472,33 +469,29 @@ export function AppShell() { /> {settingsOpen ? ( - } - > - - + ) : null} diff --git a/desktop/src/features/profile/ui/ProfilePopover.tsx b/desktop/src/features/profile/ui/ProfilePopover.tsx index b46a39384..b223f3a23 100644 --- a/desktop/src/features/profile/ui/ProfilePopover.tsx +++ b/desktop/src/features/profile/ui/ProfilePopover.tsx @@ -133,8 +133,10 @@ export function ProfilePopover({ className={MENU_ITEM_CLASS} data-testid="profile-popover-settings" onClick={() => { - onOpenSettings(); onOpenChange(false); + window.requestAnimationFrame(() => { + onOpenSettings(); + }); }} role="menuitem" type="button" diff --git a/desktop/src/features/settings/ui/SettingsScreen.tsx b/desktop/src/features/settings/ui/SettingsScreen.tsx index af9ccddd4..03bbffcc4 100644 --- a/desktop/src/features/settings/ui/SettingsScreen.tsx +++ b/desktop/src/features/settings/ui/SettingsScreen.tsx @@ -1,14 +1,7 @@ -import * as React from "react"; - import type { DesktopNotificationPermissionState } from "@/features/notifications/hooks"; import type { NotificationSettings } from "@/features/notifications/hooks"; import type { SettingsSection } from "@/features/settings/ui/SettingsPanels"; -import { ViewLoadingFallback } from "@/shared/ui/ViewLoadingFallback"; - -const SettingsView = React.lazy(async () => { - const module = await import("@/features/settings/ui/SettingsView"); - return { default: module.SettingsView }; -}); +import { SettingsView } from "@/features/settings/ui/SettingsView"; type SettingsScreenProps = { currentPubkey?: string; @@ -42,26 +35,22 @@ export function SettingsScreen({ section, }: SettingsScreenProps) { return ( - } - > - - + ); } diff --git a/desktop/src/features/settings/ui/SettingsView.tsx b/desktop/src/features/settings/ui/SettingsView.tsx index 1d1f29e42..f1e4244cd 100644 --- a/desktop/src/features/settings/ui/SettingsView.tsx +++ b/desktop/src/features/settings/ui/SettingsView.tsx @@ -22,13 +22,11 @@ type SettingsViewProps = SettingsPanelProps & { function SettingsSectionButton({ active, - index, isLoaded, onSelect, section, }: { active: boolean; - index: number; isLoaded: boolean; onSelect: (section: SettingsSection) => void; section: (typeof settingsSections)[number]; @@ -39,7 +37,7 @@ function SettingsSectionButton({