diff --git a/packages/cli/src/ui/components/InputPrompt.test.tsx b/packages/cli/src/ui/components/InputPrompt.test.tsx index 8356966c5b4..0903c0b0661 100644 --- a/packages/cli/src/ui/components/InputPrompt.test.tsx +++ b/packages/cli/src/ui/components/InputPrompt.test.tsx @@ -281,7 +281,10 @@ describe('InputPrompt', () => { navigateDown: vi.fn(), handleSubmit: vi.fn(), }; - mockedUseInputHistory.mockReturnValue(mockInputHistory); + mockedUseInputHistory.mockImplementation(({ onSubmit }) => { + mockInputHistory.handleSubmit = vi.fn((val) => onSubmit(val)); + return mockInputHistory; + }); mockReverseSearchCompletion = { suggestions: [], @@ -4093,7 +4096,7 @@ describe('InputPrompt', () => { beforeEach(() => { props.userMessages = ['first message', 'second message']; // Mock useInputHistory to actually call onChange - mockedUseInputHistory.mockImplementation(({ onChange }) => ({ + mockedUseInputHistory.mockImplementation(({ onChange, onSubmit }) => ({ navigateUp: () => { onChange('second message', 'start'); return true; @@ -4102,7 +4105,7 @@ describe('InputPrompt', () => { onChange('first message', 'end'); return true; }, - handleSubmit: vi.fn(), + handleSubmit: vi.fn((val) => onSubmit(val)), })); }); diff --git a/packages/cli/src/ui/components/InputPrompt.tsx b/packages/cli/src/ui/components/InputPrompt.tsx index 122988a07fd..8f8fed10f16 100644 --- a/packages/cli/src/ui/components/InputPrompt.tsx +++ b/packages/cli/src/ui/components/InputPrompt.tsx @@ -334,31 +334,6 @@ export const InputPrompt: React.FC = ({ ], ); - const handleSubmit = useCallback( - (submittedValue: string) => { - const trimmedMessage = submittedValue.trim(); - const isSlash = isSlashCommand(trimmedMessage); - - const isShell = shellModeActive; - if ( - (isSlash || isShell) && - streamingState === StreamingState.Responding - ) { - setQueueErrorMessage( - `${isShell ? 'Shell' : 'Slash'} commands cannot be queued`, - ); - return; - } - handleSubmitAndClear(trimmedMessage); - }, - [ - handleSubmitAndClear, - shellModeActive, - streamingState, - setQueueErrorMessage, - ], - ); - const customSetTextAndResetCompletionSignal = useCallback( (newText: string, cursorPosition?: 'start' | 'end' | number) => { buffer.setText(newText, cursorPosition); @@ -378,6 +353,26 @@ export const InputPrompt: React.FC = ({ onChange: customSetTextAndResetCompletionSignal, }); + const handleSubmit = useCallback( + (submittedValue: string) => { + const trimmedMessage = submittedValue.trim(); + const isSlash = isSlashCommand(trimmedMessage); + + const isShell = shellModeActive; + if ( + (isSlash || isShell) && + streamingState === StreamingState.Responding + ) { + setQueueErrorMessage( + `${isShell ? 'Shell' : 'Slash'} commands cannot be queued`, + ); + return; + } + inputHistory.handleSubmit(trimmedMessage); + }, + [inputHistory, shellModeActive, streamingState, setQueueErrorMessage], + ); + // Effect to reset completion if history navigation just occurred and set the text useEffect(() => { if (suppressCompletion) { @@ -855,7 +850,7 @@ export const InputPrompt: React.FC = ({ showSuggestions && activeSuggestionIndex > -1 ? suggestions[activeSuggestionIndex].value : buffer.text; - handleSubmitAndClear(textToSubmit); + handleSubmit(textToSubmit); resetState(); setActive(false); return true; @@ -1152,7 +1147,6 @@ export const InputPrompt: React.FC = ({ setShellModeActive, onClearScreen, inputHistory, - handleSubmitAndClear, handleSubmit, shellHistory, reverseSearchCompletion,