From d6f5130c204d8ffe582212466768706cd7fd6774 Mon Sep 17 00:00:00 2001 From: emsanakhchivan Date: Thu, 16 Apr 2026 17:39:13 +0400 Subject: [PATCH] fix: focus "Done" option after completing provider manager actions (#718) When returning to the provider manager menu after completing an action (add, edit, delete, set active, etc.), the cursor now lands on "Done" instead of the first option ("Add provider"). This prevents accidental re-entry into the same action if the user presses Enter quickly. On initial /provider invocation, the cursor still starts on the first option ("Add provider") as expected. Co-authored-by: Ali Alakbarli --- src/components/ProviderManager.tsx | 39 ++++++++++++++++++------------ 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/components/ProviderManager.tsx b/src/components/ProviderManager.tsx index b6381e2e..681cd1a2 100644 --- a/src/components/ProviderManager.tsx +++ b/src/components/ProviderManager.tsx @@ -361,6 +361,7 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode { const [cursorOffset, setCursorOffset] = React.useState(0) const [statusMessage, setStatusMessage] = React.useState() const [errorMessage, setErrorMessage] = React.useState() + const [menuFocusValue, setMenuFocusValue] = React.useState() const [hasStoredCodexOAuthCredentials, setHasStoredCodexOAuthCredentials] = React.useState(false) const [storedCodexOAuthProfileId, setStoredCodexOAuthProfileId] = @@ -576,7 +577,7 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode { const githubError = activateGithubProvider() if (githubError) { setErrorMessage(`Could not activate GitHub provider: ${githubError}`) - setScreen('menu') + returnToMenu() return } @@ -586,14 +587,14 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode { mainLoopModel: GITHUB_PROVIDER_DEFAULT_MODEL, })) setStatusMessage(`Active provider: ${GITHUB_PROVIDER_LABEL}`) - setScreen('menu') + returnToMenu() return } const active = setActiveProviderProfile(profileId) if (!active) { setErrorMessage('Could not change active provider.') - setScreen('menu') + returnToMenu() return } @@ -635,16 +636,21 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode { ? `Active provider: ${active.name}. Warning: could not clear startup provider override (${settingsOverrideError}).` : `Active provider: ${active.name}`, ) - setScreen('menu') + returnToMenu() } catch (error) { refreshProfiles() setStatusMessage(undefined) const detail = error instanceof Error ? error.message : String(error) setErrorMessage(`Could not finish activating ${providerLabel}: ${detail}`) - setScreen('menu') + returnToMenu() } } + function returnToMenu(): void { + setMenuFocusValue('done') + setScreen('menu') + } + function closeWithCancelled(message: string): void { onDone({ action: 'cancelled', message }) } @@ -822,7 +828,7 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode { setEditingProfileId(null) setFormStepIndex(0) setErrorMessage(undefined) - setScreen('menu') + returnToMenu() } function renderOllamaSelection(): React.ReactNode { @@ -945,7 +951,7 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode { return } - setScreen('menu') + returnToMenu() } useKeybinding('confirm:no', handleBackFromForm, { @@ -1078,7 +1084,7 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode { closeWithCancelled('Provider setup skipped') return } - setScreen('menu') + returnToMenu() }} visibleOptionCount={Math.min(13, options.length)} /> @@ -1278,6 +1284,7 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode { } }} onCancel={() => closeWithCancelled('Provider manager closed')} + defaultFocusValue={menuFocusValue} visibleOptionCount={options.length} /> @@ -1325,8 +1332,8 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode { description: 'Return to provider manager', }, ]} - onChange={() => setScreen('menu')} - onCancel={() => setScreen('menu')} + onChange={() => returnToMenu()} + onCancel={() => returnToMenu()} visibleOptionCount={1} /> @@ -1341,7 +1348,7 @@ export function ProviderManager({ mode, onDone }: Props): React.ReactNode {