diff --git a/cardinal/src/App.tsx b/cardinal/src/App.tsx index 48b91d7..fd92953 100644 --- a/cardinal/src/App.tsx +++ b/cardinal/src/App.tsx @@ -498,6 +498,13 @@ function App() { if (activeTab !== 'files') { return; } + if (event.key === 'Enter') { + queueSearch(event.currentTarget.value, { + immediate: true, + onSearchCommitted: updateHistoryFromInput, + }); + return; + } if (event.key !== 'ArrowUp' && event.key !== 'ArrowDown') { return; } @@ -508,7 +515,7 @@ function App() { event.preventDefault(); handleHistoryNavigation(event.key === 'ArrowUp' ? 'older' : 'newer'); }, - [activeTab, handleHistoryNavigation], + [activeTab, handleHistoryNavigation, queueSearch, updateHistoryFromInput], ); const handleHorizontalSync = useCallback((scrollLeft: number) => { @@ -600,7 +607,6 @@ function App() { // Switch to files: sync with reducer-managed search state and cancel pending timers ensureHistoryBuffer(''); resetSearchQuery(); - cancelPendingSearches(); } }, [ diff --git a/cardinal/src/hooks/useFileSearch.ts b/cardinal/src/hooks/useFileSearch.ts index 73cd4bd..cc8707f 100644 --- a/cardinal/src/hooks/useFileSearch.ts +++ b/cardinal/src/hooks/useFileSearch.ts @@ -29,6 +29,7 @@ type SearchParams = { }; type QueueSearchOptions = { + immediate?: boolean; onSearchCommitted?: (query: string) => void; }; @@ -285,13 +286,19 @@ export function useFileSearch(): UseFileSearchResult { const queueSearch = useCallback( (query: string, options?: QueueSearchOptions) => { updateSearchParams({ query }); - cancelTimer(debounceTimerRef); + cancelPendingSearches(); + if (options?.immediate) { + options.onSearchCommitted?.(query); + void handleSearch({ query }); + return; + } + debounceTimerRef.current = setTimeout(() => { options?.onSearchCommitted?.(query); handleSearch({ query }); }, SEARCH_DEBOUNCE_MS); }, - [handleSearch, updateSearchParams], + [cancelPendingSearches, handleSearch, updateSearchParams], ); const resetSearchQuery = useCallback(() => {