From fb44304275f38ed8763c4ec80609775b114c3864 Mon Sep 17 00:00:00 2001 From: Harvmaster Date: Fri, 30 Jan 2026 02:59:52 +0000 Subject: [PATCH] Fix sats output --- Electrum.sqlite-journal | Bin 12824 -> 12824 bytes src/tui/screens/ActionWizard.tsx | 52 +++++++++++++++++++++---------- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/Electrum.sqlite-journal b/Electrum.sqlite-journal index 2ed09652a74a9cfc1f82e06886082a456805c99a..8e935641b8ce20270238f1a66e6bb5fd7836faa2 100644 GIT binary patch literal 12824 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 { - // When TextInput has focus, only handle Tab to navigate away - if (textInputHasFocus) { - if (key.tab) { - // Move to next variable or to buttons - if (focusedInput < variables.length - 1) { - setFocusedInput(prev => prev + 1); - } else { - setFocusArea('buttons'); - setFocusedButton('next'); - } - } - // Let TextInput handle all other input - return; + /** + * Handle TextInput submit (Enter key) - moves to next variable or buttons. + */ + const handleTextInputSubmit = useCallback(() => { + if (focusedInput < variables.length - 1) { + setFocusedInput(prev => prev + 1); + } else { + setFocusArea('buttons'); + setFocusedButton('next'); } + }, [focusedInput, variables.length]); + // Handle Tab key when in TextInput mode (separate from main useInput to allow Tab navigation) + useInput((input, key) => { + if (key.tab) { + if (focusedInput < variables.length - 1) { + setFocusedInput(prev => prev + 1); + } else { + setFocusArea('buttons'); + setFocusedButton('next'); + } + } + // Escape to go back to content from anywhere + if (key.escape && focusArea === 'buttons') { + setFocusArea('content'); + } + }, { isActive: textInputHasFocus }); + + // Handle keyboard navigation for non-TextInput modes + // IMPORTANT: Disable when TextInput should have focus to allow character input + useInput((input, key) => { // Tab to switch between content and buttons if (key.tab) { if (focusArea === 'content') { @@ -575,7 +589,7 @@ export function ActionWizardScreen(): React.ReactElement { if (input === 'n' && currentStepData?.type === 'inputs') { setAvailableUtxos(prev => prev.map(u => ({ ...u, selected: false }))); } - }); + }, { isActive: !textInputHasFocus }); // Get action details const action = template?.actions?.[actionIdentifier ?? '']; @@ -630,6 +644,7 @@ export function ActionWizardScreen(): React.ReactElement { updateVariable(index, value)} + onSubmit={handleTextInputSubmit} focus={focusArea === 'content' && focusedInput === index} placeholder={`Enter ${variable.name}...`} /> @@ -637,6 +652,11 @@ export function ActionWizardScreen(): React.ReactElement { ))} + + + Enter: Next field • Tab: Go to buttons + + );