import { useDocsSearch, type DocsSearchResult } from 'common' import { Book, Github, Loader2 } from 'lucide-react' import { cn } from 'ui' import { useChangedSync } from '@/hooks/misc/useChanged' import { DOCS_URL } from '@/lib/constants' function useDocsSuggestions(subject: string) { const { handleDocsSearchDebounced, resetSearch, searchState } = useDocsSearch() const trimmedSubject = subject.trim() const subjectChanged = useChangedSync(trimmedSubject) if (subjectChanged && trimmedSubject) { handleDocsSearchDebounced(trimmedSubject) } else if (subjectChanged && !trimmedSubject) { resetSearch() } return searchState } interface DocsSuggestionsProps { searchString: string } export function DocsSuggestions({ searchString }: DocsSuggestionsProps) { const searchState = useDocsSuggestions(searchString) const results = 'results' in searchState ? searchState.results : 'staleResults' in searchState ? searchState.staleResults : [] const resultsStale = searchState.status === 'loading' return ( <> {searchState.status === 'loading' && } {results.length > 0 && } ) } function DocsSuggestions_Loading() { return (
Searching for relevant resources...
) } interface DocsSuggestions_ResultsProps { results: DocsSearchResult[] isStale: boolean } function DocsSuggestions_Results({ results, isStale }: DocsSuggestions_ResultsProps) { return ( ) }