From ba44c8a5f46804eae0a38e534e20461ad67fef03 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Thu, 3 Sep 2026 20:42:26 -0700 Subject: [PATCH] fix(renderer): latch the lazy dialog mounts in state instead of during render React Doctor's ref-mutated-during-render rule failed static analysis on both sticky-mount latches. Use the useState mount-flag idiom already in NewWorkspaceComposerModal (addProjectMounted), set from the open handler. --- .../src/components/NewWorkspaceComposerCard.tsx | 8 +++----- .../components/sidebar/SidebarSettingsHelpMenu.tsx | 14 ++++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/renderer/src/components/NewWorkspaceComposerCard.tsx b/src/renderer/src/components/NewWorkspaceComposerCard.tsx index 29183da58f0..d17bb8ba56d 100644 --- a/src/renderer/src/components/NewWorkspaceComposerCard.tsx +++ b/src/renderer/src/components/NewWorkspaceComposerCard.tsx @@ -100,10 +100,7 @@ export default function NewWorkspaceComposerCard( ) // Why sticky: the dialog animates itself closed off its own `option` prop, so unmounting it // when the option clears would cut that animation short. - const setLocationDialogRequested = React.useRef(false) - if (setLocationOption !== null) { - setLocationDialogRequested.current = true - } + const [setLocationDialogMounted, setSetLocationDialogMounted] = React.useState(false) const selectedRepo = eligibleRepos.find((candidate) => candidate.id === repoId) const selectedRepoName = selectedRepo?.displayName ?? selectedRepo?.path ?? 'This project' @@ -208,6 +205,7 @@ export default function NewWorkspaceComposerCard( }, [onAddProjectOverride, openModal]) const handleSetLocation = React.useCallback( (option: NeedsProjectHostOption): void => { + setSetLocationDialogMounted(true) setSetLocationOption(option) onNestedDialogOpenChange?.(true) }, @@ -350,7 +348,7 @@ export default function NewWorkspaceComposerCard( submitShortcutModifierLabel={getScreenSubmitModifierLabel()} /> - {setLocationDialogRequested.current ? ( + {setLocationDialogMounted ? ( { + setFeedbackDialogMounted(true) + setFeedbackOpen(true) + } + const handleShowOnboarding = (): void => { const now = Date.now() if (now - lastShowOnboardingAtRef.current < 500) { @@ -251,7 +253,7 @@ export function SidebarSettingsHelpMenu(): React.JSX.Element { )} - setFeedbackOpen(true)}> + {translate( 'auto.components.sidebar.SidebarSettingsHelpMenu.4cf5b868d7', @@ -352,7 +354,7 @@ export function SidebarSettingsHelpMenu(): React.JSX.Element { - {feedbackDialogRequested.current ? ( + {feedbackDialogMounted ? (