import { AsyncOptions } from '../useAsync';
/**
 * 分页异步返回类型。
 */
export interface PaginationAsyncReturn<DataItem = any> {
    list: DataItem[];
    total: number;
    [key: string]: any;
}
/**
 * 异步函数参数类型。
 */
export type PaginationParams = [
    param1: {
        current: number;
        pageSize: number;
        [key: string]: any;
    },
    ...args: any[]
];
export interface PaginationOptions<DataItem = any, R extends PaginationAsyncReturn<DataItem> = any> extends AsyncOptions<R, PaginationParams> {
    defaultPageSize?: number;
}
/**
 * 基于 `useAsync` 扩展，用于管理分页的 Hook。
 *
 * @param {Function} asyncFn 异步函数。
 * @param {Object} [options] 配置项。
 * @param {number} [options.defaultPageSize=10] 默认每页的数量。
 * @param {boolean} [options.autoRun=true] 在初始化时自动执行异步函数。如果设置为 `false`，则需要手动调用 `run` 触发执行。默认 `true`。
 * @param {*} [options.initialData] 初始化的 `data`。
 * @param {boolean} [options.defaultLoading=false] 初始化默认 `loading` 值。默认值等于 `autoRun && !loadingDelay`。
 * @param {Array} [options.defaultParams] 如果 `autoRun=true` 自动执行 `run` 的默认参数。
 * @param {Array} [options.refreshDeps] 在 `autoRun = true` 时，refreshDeps 变化，会重置 `current` 到第一页，并执行 `run` 方法。
 * @param {Function} [options.onBefore] 异步函数执行前触发，参数为 `params`。
 * @param {Function} [options.onSuccess] 异步函数 `resolve` 时触发，参数为 `data` 和 `params`。
 * @param {Function} [options.onError] 异步函数报错时触发，参数为 `error` 和 `params`。
 * @param {string} [options.cacheKey] 缓存的键值。启用缓存机制，异步成功结果将被缓存。如果多个相同 cacheKey 的异步同时触发中，将共享第一个异步结果。
 * @param {number} [options.cacheTime=5*60*1000] 缓存时间。单位毫秒。
 * @param {boolean} [options.persisted=false] 持久化数据。当有缓存数据时，不再执行异步函数。需要配合 `cacheKey` `cacheTime` 使用。默认 `false`。
 * @param {number} [options.loadingDelay] 设置 `loading` 延迟时间，避免闪烁，单位为毫秒。
 * @param {number} [options.pollingInterval] 轮询间隔，单位为毫秒。设置后，将进入轮询模式，定时触发 `run`。
 * @param {boolean} [options.pollingWhenHidden=true] 在页面隐藏时，是否继续轮询。如果为 `true`，不会停止轮询。如果为 `false`，在页面隐藏时会暂时停止轮询，页面重新显示时继续上次轮询。默认 `true`。
 * @param {boolean} [options.refreshOnWindowFocus=false] 在屏幕重新获取焦点或重新显示时，是否重新发起请求。如果为 `false`，不会重新发起请求。如果为 `true`，在屏幕重新聚焦或重新显示时，会重新发起请求。默认 `false`。
 * @param {number} [options.focusTimespan=5000] 屏幕重新聚焦，重新发起请求时间间隔。需要配置 `refreshOnWindowFocus` 使用。默认 `5000`。
 * @param {number} [options.debounceInterval] 防抖间隔，单位为毫秒，设置后，请求进入防抖模式。
 * @param {number} [options.throttleInterval] 节流间隔，单位为毫秒，设置后，请求进入节流模式。
 * @returns {Object}
 * @example
 * const { data, error, loading, run, params, refresh, pagination, tableProps } = usePagination(asyncFn, options);
 */
declare function usePagination<D = any, R extends PaginationAsyncReturn<D> = any>(asyncFn: (...args: PaginationParams) => Promise<R>, options?: PaginationOptions<R>): {
    data: R | undefined;
    run: (param1: {
        [key: string]: any;
        current: number;
        pageSize: number;
    }, ...args: any[]) => Promise<R>;
    refresh: () => Promise<R>;
    loading: boolean;
    params: PaginationParams;
    /**
     * 分页数据及操作分页的方法。
     */
    pagination: {
        current: number;
        pageSize: number;
        total: number;
        onChange: (c: number, p: number) => void;
        changeCurrent: (c: number) => void;
        changePageSize: (p: number) => void;
    };
    /**
     * 适配 antd Table 组件的数据结构，可以直接用在 antd Table 组件上。
     */
    tableProps: {
        dataSource: R["list"];
        loading: boolean;
        onChange: (pagination: {
            current?: number;
            pageSize?: number;
        } & Record<string, any>, filters: any, sorter: any, extra: any) => void;
        pagination: {
            total: number;
            current: number;
            pageSize: number;
        };
    };
    error: null | Error;
    cancel: () => void;
    mutate: (newData: R | ((oldData: R) => R) | undefined) => void;
};
export default usePagination;
