Function: usePreprintSearchState()
usePreprintSearchState(
options):object
Defined in: web/lib/hooks/use-preprint-search.ts:509
Combined hook for managing preprint search state.
Parameters
options
UsePreprintSearchStateOptions = {}
Search state options
Returns
object
Search state and handlers
authorFilter
authorFilter:
string
availableSources
availableSources:
object[]
facets
facets:
undefined| {sources:Record<string,number>; } =search.facets
handleClear()
handleClear: () =>
void
Returns
void
handleSelectSuggestion()
handleSelectSuggestion: (
suggestion) =>void
Parameters
suggestion
Returns
void
handleSubmit()
handleSubmit: (
e?) =>void
Parameters
e?
FormEvent<Element>
Returns
void
isAutocompleteFetching
isAutocompleteFetching:
boolean=autocomplete.isFetching
isAutocompleteLoading
isAutocompleteLoading:
boolean=autocomplete.isLoading
isSearchFetching
isSearchFetching:
boolean=search.isFetching
isSearchLoading
isSearchLoading:
boolean=search.isLoading
query
query:
string
refetchSearch()
refetchSearch: (
options?) =>Promise<QueryObserverResult<SearchPreprintsResponse,Error>> =search.refetch
Parameters
options?
RefetchOptions
Returns
Promise<QueryObserverResult<SearchPreprintsResponse, Error>>
searchError
searchError:
null|Error=search.error
searchResults
searchResults: readonly
ExternalPreprint[] =search.preprints
selectedSources
selectedSources:
string[]
setAuthorFilter
setAuthorFilter:
Dispatch<SetStateAction<string>>
setQuery
setQuery:
Dispatch<SetStateAction<string>>
submittedQuery
submittedQuery:
string
suggestions
suggestions: readonly
AutocompleteSuggestion[] =autocomplete.suggestions
toggleSource()
toggleSource: (
source) =>void
Parameters
source
string
Returns
void
Remarks
Provides a complete search experience with:
- Controlled input state
- Debounced autocomplete suggestions
- Full search on submit
- Loading states for both autocomplete and search
Implements progressive disclosure pattern:
- Start with autocomplete while typing
- Execute full search on submit
Example
const {
query,
setQuery,
suggestions,
searchResults,
handleSubmit,
isAutocompleteLoading,
isSearchLoading,
} = usePreprintSearchState();
return (
<form onSubmit={handleSubmit}>
<SearchInput
value={query}
onChange={e => setQuery(e.target.value)}
suggestions={suggestions}
isLoading={isAutocompleteLoading}
/>
<SearchResults results={searchResults} isLoading={isSearchLoading} />
</form>
);