@ewb/reach-react
Version:
React Resource and Fetch stuff
51 lines (50 loc) • 1.84 kB
TypeScript
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>;