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.
This commit is contained in:
Neil
2026-09-03 20:42:30 -07:00
parent 398f51b55f
commit ba44c8a5f4
2 changed files with 11 additions and 11 deletions
@@ -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()}
/>
<AddRemoteHostDialog mode={addRemoteHostMode} onOpenChange={setAddRemoteHostMode} />
{setLocationDialogRequested.current ? (
{setLocationDialogMounted ? (
<React.Suspense fallback={null}>
<SetProjectLocationDialog
option={setLocationOption}
@@ -108,10 +108,7 @@ export function SidebarSettingsHelpMenu(): React.JSX.Element {
const [menuOpen, setMenuOpen] = useState(false)
const [feedbackOpen, setFeedbackOpen] = useState(false)
// Why sticky: the dialog animates itself closed off `open`, so unmounting on close cuts that short.
const feedbackDialogRequested = React.useRef(false)
if (feedbackOpen) {
feedbackDialogRequested.current = true
}
const [feedbackDialogMounted, setFeedbackDialogMounted] = useState(false)
const [isRestartingOrca, setIsRestartingOrca] = useState(false)
const lastShowOnboardingAtRef = React.useRef(0)
const updateCheckModifiersRef = React.useRef(NO_UPDATE_CHECK_MODIFIERS)
@@ -131,6 +128,11 @@ export function SidebarSettingsHelpMenu(): React.JSX.Element {
}
}
const handleOpenFeedback = (): void => {
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 {
)}
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem onSelect={() => setFeedbackOpen(true)}>
<DropdownMenuItem onSelect={handleOpenFeedback}>
<MessageSquareText className="size-3.5" />
{translate(
'auto.components.sidebar.SidebarSettingsHelpMenu.4cf5b868d7',
@@ -352,7 +354,7 @@ export function SidebarSettingsHelpMenu(): React.JSX.Element {
</DropdownMenuContent>
</DropdownMenu>
</div>
{feedbackDialogRequested.current ? (
{feedbackDialogMounted ? (
<React.Suspense fallback={null}>
<SidebarFeedbackDialog open={feedbackOpen} onOpenChange={setFeedbackOpen} />
</React.Suspense>