UNPKG

@orca-fe/hooks

Version:

React Hooks Collections

69 lines (68 loc) 2.59 kB
import type { Dispatch, SetStateAction } from 'react'; export type FetchResult<T = any> = { data: T; }; export declare const isFetchResult: (value: any) => value is FetchResult<any>; export type PageResult<T> = { list: T[]; total: number; }; export declare const isPageResult: (value: any) => value is PageResult<any>; export interface ServiceHandler<Args extends any[], Result> { /** 发起新的请求 */ run: (...args: Args) => Promise<PageResult<Result> | undefined>; loadMore: () => Promise<PageResult<Result> | undefined>; /** 列表数据 */ data: Result[]; page: number; hasMore: boolean; total: number; /** 异常(如果报错) */ error: any; /** 正在请求状态 */ loading: boolean; /** 本次请求所使用的参数 */ params: Args | undefined; cancel: () => void; } export interface ServiceOptions<Args extends any[], ServiceResult, Result> { manual?: boolean; pageSize?: number; /** 初始化时的参数 */ defaultParams?: Args; /** 请求成功时的回调事件 */ onSuccess?: (data: PageResult<Result>, params: Args) => void; /** 請求結束后的回調事件(不論數據處理是否正常) */ onFinish?: (data: ServiceResult, params: Args) => void; /** 请求失败时的回调事件 */ onError?: (error: Error, params: Args) => void; /** 请求缓存的标识 */ cacheKey?: string; /** 对结果进行格式化处理(默认会取出 result.data) */ formatter?: (res: ServiceResult) => PageResult<Result>; stateMgr?: { state: ServiceState<Args, PageResult<Result>>; setState: Dispatch<SetStateAction<ServiceState<Args, PageResult<Result>>>>; }; } type PageParams = { pageIndex: number; pageSize: number; }; export type Service<Args extends any[], Result> = (pageParams: PageParams, ...args: Args) => Promise<Result>; export type ServiceState<Args extends any[], Result> = { loading?: boolean; data?: Result; error?: any; params?: Args; page?: number; }; export type ServiceAttr = { unloaded: boolean; ticket: number; loading: boolean; }; export type FetchResultData<T> = T extends FetchResult<infer P> ? P : T; export declare function defaultFormatter<T>(res: T): PageResult<FetchResultData<T>>; export declare function useLoadMore<Args extends any[], ServiceResult = any, Result = FetchResultData<ServiceResult>>(_service: Service<Args, ServiceResult>, options?: ServiceOptions<Args, ServiceResult, Result>): ServiceHandler<Args, Result>; export default useLoadMore;