import { DependencyList, RefObject } from 'react'; import { PaginationConfig, Filter, Sorter } from './antdTypes'; export declare type noop = (...args: any[]) => void; export declare type Service = (...args: P) => Promise; export declare type Subscribe = (data: FetchResult) => void; export declare type Mutate = (x: (R | undefined | ((data: R) => R))) => void; export declare type RequestService = string | { [key: string]: any; }; export declare type CombineService = RequestService | ((...args: P) => RequestService) | Service; export interface Fetches { [key: string]: FetchResult; } export interface FetchResult { loading: boolean; data: R | undefined; error: Error | undefined; params: P; cancel: noop; refresh: () => Promise; mutate: Mutate; run: (...args: P) => Promise; unmount: () => void; } export interface FetchConfig { formatResult?: (res: any) => R; onSuccess?: (data: R, params: P) => void; onError?: (e: Error, params: P) => void; loadingDelay?: number; pollingInterval?: number; pollingWhenHidden?: boolean; refreshOnWindowFocus?: boolean; focusTimespan: number; debounceInterval?: number; throttleInterval?: number; } export interface BaseResult extends FetchResult { reset: () => void; fetches: { [key in string]: FetchResult; }; } export declare type BaseOptions = { refreshDeps?: DependencyList; manual?: boolean; onSuccess?: (data: R, params: P) => void; onError?: (e: Error, params: P) => void; defaultLoading?: boolean; loadingDelay?: number; defaultParams?: P; pollingInterval?: number; pollingWhenHidden?: boolean; fetchKey?: (...args: P) => string; paginated?: false; loadMore?: false; refreshOnWindowFocus?: boolean; focusTimespan?: number; cacheKey?: string; debounceInterval?: number; throttleInterval?: number; initialData?: R; requestMethod?: (service: any) => Promise; }; export declare type OptionsWithFormat = { formatResult: (res: R) => U; } & BaseOptions; export declare type Options = BaseOptions | OptionsWithFormat; export declare type PaginatedParams = [{ current: number; pageSize: number; sorter?: Sorter; filters?: Filter; }, ...any[]]; export interface PaginatedFormatReturn { total: number; list: Item[]; [key: string]: any; } export interface PaginatedResult extends BaseResult, PaginatedParams> { pagination: { current: number; pageSize: number; total: number; totalPage: number; onChange: (current: number, pageSize: number) => void; changeCurrent: (current: number) => void; changePageSize: (pageSize: number) => void; [key: string]: any; }; tableProps: { dataSource: Item[]; loading: boolean; onChange: (pagination: PaginationConfig, filters?: Filter, sorter?: Sorter) => void; pagination: PaginationConfig; [key: string]: any; }; sorter?: Sorter; filters?: Filter; } export interface BasePaginatedOptions extends Omit, PaginatedParams>, 'paginated'> { paginated: true; defaultPageSize?: number; } export interface PaginatedOptionsWithFormat extends Omit, PaginatedParams>, 'paginated'> { paginated: true; defaultPageSize?: number; formatResult: (data: R) => PaginatedFormatReturn; } export declare type LoadMoreParams = [R | undefined, ...any[]]; export interface LoadMoreFormatReturn { list: any[]; [key: string]: any; } export interface LoadMoreResult extends BaseResult> { noMore?: boolean; loadMore: () => void; reload: () => void; loadingMore: boolean; } export interface LoadMoreOptions extends Omit>, 'loadMore'> { loadMore: true; ref?: RefObject; isNoMore?: (r: R | undefined) => boolean; threshold?: number; } export interface LoadMoreOptionsWithFormat extends Omit>, 'loadMore'> { loadMore: true; formatResult: (data: RR) => R; ref?: RefObject; isNoMore?: (r: R | undefined) => boolean; threshold?: number; }