UNPKG

@ewb/reach-react

Version:
51 lines (50 loc) 1.84 kB
import { IReachOptions, IReachQuery } from '@ewb/reach'; export interface IUseSearchProps<T, E, RES> { limit?: number; defaultSkip?: number; skip?: number; count?: number; skipPages?: boolean; paginationMode?: 'client' | 'server'; query?: IReachOptions['query']; responseToData?: (body: RES, state: IUseSearchState<T, E, RES>, response: Response, paginate: boolean) => Partial<IUseSearchState<T, E, RES>> & Pick<IUseSearchState<T, E, RES>, 'items'>; reachOptions?: Omit<IReachOptions, 'query'>; disableInit?: boolean; defaultItems?: T[]; skipKey?: string; limitKey?: string; countHeader?: string; } export interface IUseSearchState<T, E, RES> extends IUseSearchInfo<RES> { busy: boolean; items: T[]; searchQuery: IReachQuery; error?: E | null; } export interface IUseSearchInfo<RES> { count: number; limit: number; skip: number; page: number; hasFetched: boolean; json?: RES; response?: Response; } export interface IUseSearchActions<T> { unshift: (...items: T[]) => void; splice: (start: number, deleteCount?: number, ...items: T[]) => void; push: (...items: T[]) => void; map: (fn: (item: T) => T) => void; filter: (fn: (item: T) => boolean) => void; search: (fetchQuery: IReachQuery) => Promise<T[]>; } export declare type IUseSearchNextFn<T> = (fetchQuery?: IReachQuery, page?: number) => Promise<T[] | null>; export declare type IUseSearchRet<T, E, RES> = [ busy: boolean, data: T[], error: E | undefined | null, next: IUseSearchNextFn<T>, info: IUseSearchInfo<RES>, actions: IUseSearchActions<T> ]; export declare function useSearch<T, E = any, RES = T[]>(path: string, props: IUseSearchProps<T, E, RES>): IUseSearchRet<T, E, RES>;