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 {