diff options
| author | Jacob Richman <[email protected]> | 2025-05-13 16:23:14 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-05-13 16:23:14 -0700 |
| commit | e665d4f1987aecc1be4db315c7544a6da5ed3d5b (patch) | |
| tree | c96efb54f8b13a7786b11ee2586e9c8320884877 /packages/cli/src | |
| parent | c4fb1ad04b2b6fe6d6ed582d2754de09a1460cfe (diff) | |
First step refactoring InputPrompt (#335)
Diffstat (limited to 'packages/cli/src')
| -rw-r--r-- | packages/cli/src/ui/App.tsx | 18 | ||||
| -rw-r--r-- | packages/cli/src/ui/components/InputPrompt.tsx | 33 |
2 files changed, 26 insertions, 25 deletions
diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx index 7b81ada1..a2ed7cdc 100644 --- a/packages/cli/src/ui/App.tsx +++ b/packages/cli/src/ui/App.tsx @@ -9,7 +9,6 @@ import { Box, Static, Text, useStdout } from 'ink'; import { StreamingState, type HistoryItem } from './types.js'; import { useGeminiStream } from './hooks/useGeminiStream.js'; import { useLoadingIndicator } from './hooks/useLoadingIndicator.js'; -import { useInputHistory } from './hooks/useInputHistory.js'; import { useThemeCommand } from './hooks/useThemeCommand.js'; import { Header } from './components/Header.js'; import { LoadingIndicator } from './components/LoadingIndicator.js'; @@ -121,18 +120,6 @@ export const App = ({ config, settings, cliVersion }: AppProps) => { slashCommands, ); - const inputHistory = useInputHistory({ - userMessages, - onSubmit: (value) => { - // Adapt onSubmit to use the lifted setQuery - handleFinalSubmit(value); - onChangeAndMoveCursor(''); - }, - isActive: isInputActive && !completion.showSuggestions, - currentQuery: query, - onChangeAndMoveCursor, - }); - // --- Render Logic --- // Get terminal width @@ -236,12 +223,11 @@ export const App = ({ config, settings, cliVersion }: AppProps) => { onChange={setQuery} onChangeAndMoveCursor={onChangeAndMoveCursor} editorState={editorState} - onSubmit={inputHistory.handleSubmit} + onSubmit={handleFinalSubmit} // Pass handleFinalSubmit directly showSuggestions={completion.showSuggestions} suggestions={completion.suggestions} activeSuggestionIndex={completion.activeSuggestionIndex} - navigateHistoryUp={inputHistory.navigateUp} - navigateHistoryDown={inputHistory.navigateDown} + userMessages={userMessages} // Pass userMessages navigateSuggestionUp={completion.navigateUp} navigateSuggestionDown={completion.navigateDown} resetCompletion={completion.resetCompletionState} diff --git a/packages/cli/src/ui/components/InputPrompt.tsx b/packages/cli/src/ui/components/InputPrompt.tsx index 79062853..8ec67ec7 100644 --- a/packages/cli/src/ui/components/InputPrompt.tsx +++ b/packages/cli/src/ui/components/InputPrompt.tsx @@ -9,6 +9,7 @@ import { Text, Box, Key } from 'ink'; import { Colors } from '../colors.js'; import { Suggestion } from './SuggestionsDisplay.js'; import { MultilineTextEditor } from './shared/multiline-editor.js'; +import { useInputHistory } from '../hooks/useInputHistory.js'; interface InputPromptProps { query: string; @@ -20,8 +21,7 @@ interface InputPromptProps { suggestions: Suggestion[]; activeSuggestionIndex: number; resetCompletion: () => void; - navigateHistoryUp: () => void; - navigateHistoryDown: () => void; + userMessages: readonly string[]; navigateSuggestionUp: () => void; navigateSuggestionDown: () => void; } @@ -40,12 +40,27 @@ export const InputPrompt: React.FC<InputPromptProps> = ({ showSuggestions, suggestions, activeSuggestionIndex, - navigateHistoryUp, - navigateHistoryDown, + userMessages, navigateSuggestionUp, navigateSuggestionDown, resetCompletion, }) => { + const handleSubmit = useCallback( + (submittedValue: string) => { + onSubmit(submittedValue); + onChangeAndMoveCursor(''); // Clear query after submit + }, + [onSubmit, onChangeAndMoveCursor], + ); + + const inputHistory = useInputHistory({ + userMessages, + onSubmit: handleSubmit, + isActive: !showSuggestions, // Input history is active when suggestions are not shown + currentQuery: query, + onChangeAndMoveCursor, + }); + const handleAutocomplete = useCallback( (indexToUse: number) => { if (indexToUse < 0 || indexToUse >= suggestions.length) { @@ -112,7 +127,7 @@ export const InputPrompt: React.FC<InputPromptProps> = ({ handleAutocomplete(activeSuggestionIndex); } else { if (query.trim()) { - onSubmit(query); + handleSubmit(query); } } return true; @@ -132,7 +147,7 @@ export const InputPrompt: React.FC<InputPromptProps> = ({ showSuggestions, resetCompletion, activeSuggestionIndex, - onSubmit, + handleSubmit, ], ); @@ -147,8 +162,8 @@ export const InputPrompt: React.FC<InputPromptProps> = ({ onChange={onChange} placeholder="Enter your message or use tools (e.g., @src/file.txt)..." /* Account for width used by the box and > */ - navigateUp={navigateHistoryUp} - navigateDown={navigateHistoryDown} + navigateUp={inputHistory.navigateUp} + navigateDown={inputHistory.navigateDown} inputPreprocessor={inputPreprocessor} widthUsedByParent={3} widthFraction={0.9} @@ -158,7 +173,7 @@ export const InputPrompt: React.FC<InputPromptProps> = ({ // as inputPreprocessor handles Enter when suggestions are visible. const trimmedQuery = query.trim(); if (!showSuggestions && trimmedQuery) { - onSubmit(trimmedQuery); + handleSubmit(trimmedQuery); } }} /> |
