import { State, SearchResult } from "./state"; import { EngineGroup } from "../config"; import { FindkitFetchOptions, SearchGroupParams, SearchParams, SearchResponse } from "@findkit/fetch"; export interface ValuSearchStore { getState(): State; dispatch(action: { type: string; }): void; subscribe(cb: Function): () => void; } export interface StaticSearchParams { searchEndpoint: string; apiKey: string; } export interface DynamicSearchParams { /**@deprecated use searchLang instead */ lang: string | undefined; searchLang: string[] | undefined; terms: string; enabled: boolean; } export interface EngineSearchGroupParams extends SearchGroupParams { id: string; } export interface EngineFullSearchParams extends Omit { groups: EngineSearchGroupParams[]; } /** * Fethcer is almost like ResultsWithTotal but it does not have the * "tagGroupId" property which is added on the client-side */ export interface FetcherResponse { hits: SearchResult; total: number; } export interface ValuSearchResponseFetcher { (params: FindkitFetchOptions): Promise; } export declare const searchRequest: ValuSearchResponseFetcher; export interface AddressBarListener { listen(cb: (event: { triggerSearch: boolean; }) => any): () => void; setTerms(terms: string): void; setGroupId(id: string): void; getTerms(): string; getGroupId(): string | undefined; } export interface SearchEngineOptions { store: ValuSearchStore; addressBarListener: AddressBarListener; fetcher: ValuSearchResponseFetcher; staticSearchParams: StaticSearchParams; throttleTime?: number; searchMoreSize?: number; minSearchTermsLength?: number; onSearch: (dynamicSearchParams: DynamicSearchParams) => void; onSearchResponse: (options: { engineFullSearchParams: EngineFullSearchParams; responses: SearchResponse[]; }) => void; } export declare class SearchEngine { store: ValuSearchStore; impl: ValuSearchResponseFetcher; throttleTime: number; throttleTimerID?: ReturnType; addressBarListener: AddressBarListener; searchMoreSize: number; minSearchTermsLength: number; onSearch: (dynamicSearchParams: DynamicSearchParams) => void; onSearchResponse: (options: { engineFullSearchParams: EngineFullSearchParams; responses: SearchResponse[]; }) => void; nextAppendGroupId: string | undefined; previousAppendGroupId: string | undefined; requestId: number; pendingRequestIds: Set; currentResultsId?: number; unbindAddressBarListeners: () => void; staticSearchParams: StaticSearchParams; nextGroups?: EngineGroup[]; previousGroups?: EngineGroup[]; nextSearchParams?: DynamicSearchParams; previousSearchParams?: DynamicSearchParams; enabled: boolean; inputs: { input: HTMLInputElement; onChange: (e: { target: unknown; }) => void; onEnter: (e: KeyboardEvent) => void; }[]; constructor(options: SearchEngineOptions); subscribe: (cb: Function) => (() => void); getStatus: () => "initial" | "fetching" | "ready"; getState: () => State; getTerms: () => string; getGroupResults: (group: string) => SearchResult[]; /** * Only a setStatus() cache */ private _status; setStatus: (status: State["status"]) => void; setErrored: (errored: State["error"]) => void; syncInputs: (terms: string, options?: { force: boolean; } | undefined) => void; createOnIdleChange(input: HTMLInputElement): () => void; /** * Bind input to search. Returns true when is new input is added. False if * the given input was already added */ addInput: (input: HTMLInputElement) => boolean; getInputs(): HTMLInputElement[]; removeInput: (rmInput: HTMLInputElement) => void; /** * Aka the "from" value for append requests */ getGroupTotal(groupId: string): number; getFullParams: (options: { groups: EngineGroup[]; params: DynamicSearchParams; reset: boolean | undefined; appendGroupId: string | undefined; }) => EngineFullSearchParams; private updateURLBar; fetch: (options: { reset?: boolean; }) => void; private _areParamsEqual?; areParamsEqual: () => boolean; setParams>(params: T): asserts this is T; triggerFetch: () => void; enable: () => void; disable: () => void; fakeEmptyRequestResponse: (options: { id: number; fullParams: EngineFullSearchParams; }) => void; setReady: () => void; setGroups: (groups: EngineGroup[]) => void; canFetchMore: () => boolean; /** * Get group id from the address bar if it is an existing group */ private getCurrentGroupId; api: { skipThrottle: () => void; searchMore: () => void; setSearchParams: (params: Partial) => void; }; }