From 129b47ca10e307dd372eb51d5846b2b3a08e9de7 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Sun, 31 May 2026 04:21:06 -0700 Subject: [PATCH] perf: move settings subsection scroll cleanup to ref (#4102) --- .../src/components/settings/Settings.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/renderer/src/components/settings/Settings.tsx b/src/renderer/src/components/settings/Settings.tsx index b365b38e09e..c7205e11337 100644 --- a/src/renderer/src/components/settings/Settings.tsx +++ b/src/renderer/src/components/settings/Settings.tsx @@ -258,6 +258,16 @@ function Settings(): React.JSX.Element { [setSettingsSearchQuery] ) + const setContentScrollNode = useCallback((node: HTMLDivElement | null): void => { + contentScrollRef.current = node + if (node !== null) { + return + } + // Why: pending subsection jumps are scoped to the scroll container; cancel + // them with the container so a stale deep-link frame cannot run after close. + cancelPendingSettingsSubsectionScrollFrame(pendingSubsectionScrollFrameRef) + }, []) + const confirmDiscardSourceControlAiPromptChanges = useCallback(async (): Promise => { if (!hasUnsavedSourceControlAiPromptChanges) { return true @@ -605,10 +615,6 @@ function Settings(): React.JSX.Element { } }, [neededRepoIds, repos, runtimeTargetIdentity]) - useEffect(() => { - return () => cancelPendingSettingsSubsectionScrollFrame(pendingSubsectionScrollFrameRef) - }, []) - useEffect(() => { const scrollTargetId = pendingScrollTargetRef.current const pendingNavSectionId = pendingNavSectionRef.current @@ -777,7 +783,7 @@ function Settings(): React.JSX.Element {