import { DataIndex } from '@aplus-frontend/antdv/es/vc-table/interface';
import { Ref, ComputedRef } from 'vue';
import { ApFormSearchFormExpose } from '../../ap-form';
import { Recordable } from '../../type';
import { ApTablePaginationConfig, RequestData } from '../interface';
import { DefaultSortOrderType } from './use-sorted-filtered';
import { TablePaginationConfig } from '@aplus-frontend/antdv';
import { FilterValue, SorterResult, TableCurrentDataSource } from '@aplus-frontend/antdv/es/table/interface';
import { ApColumnType } from '..';
export type UseTablePagingParams<DataType, ParamsType> = {
    request: (params: any) => Promise<RequestData<DataType>>;
    /**
     * 是否手动执行，页面初始化后不执行网络请求，需要手动触发
     * @param params
     * @returns
     */
    manual?: boolean;
    /**
     * 额外的请求参数
     * @description 如果传入响应式数据，将会在数据改变后重新请求
     */
    params?: ParamsType | Ref<ParamsType>;
    /**
     * 默认的数据源（只生效一次）
     */
    defaultData?: DataType[];
    /**
     * 数据请求前格式化请求参数
     * @param values
     * @returns
     */
    formatParams?: (values: any) => any;
    /**
     * 特殊类型参数类型对照表（会根据该对照表运行默认的参数格式化）
     */
    paramsValueTypeMap?: Record<string, any>;
    /**
     * 重设表单需要忽略的字段
     */
    resetFieldsIgnores?: string[];
    /**
     * 需要后端筛选的字段列表
     */
    filterFields?: Ref<DataIndex[]>;
    /**
     * 需要后端筛选的排序字段列表
     */
    sortFields?: Ref<DataIndex[]>;
    /**
     * 分页相关
     */
    pagination?: boolean | ApTablePaginationConfig;
    /**
     * 样式命名空间
     */
    namespace?: 'ap-table' | 'ap-grid';
    /**
     * 当点击重置时的回调
     * @returns
     */
    onClickReset?: () => void;
    /**
     * 当请求结束后触发的事件
     * @returns
     */
    onAfterRequest?: (records: DataType[]) => void;
    /**
     * 默认排序规则（只允许单字段）
     */
    defaultSortOrder?: DefaultSortOrderType;
};
export type TablePagingRequestOptions = {
    /**
     * 是否缓存数据（无限滚动下适用）
     */
    cache?: boolean;
    /**
     * 单次网络请求成功后触发
     */
    onSuccess?: (rawParams: Recordable, hasMore: boolean) => void;
};
export type InternalPagingType = Partial<{
    current: number;
    pageSize: number;
}>;
type InternalDataType<DataType = Recordable> = {
    total: number;
    records: DataType[];
    loading: boolean;
};
export declare const DEFAULT_CURRENT = 1;
export declare const DEFAULT_PAGE_SIZE = 20;
export type OptionalOnTableChange<T extends (...args: any[]) => any> = (...args: Partial<Parameters<T>>) => ReturnType<T>;
export declare const useTablePaging: <DataType = any, ParamsType = Record<string, any>>({ manual, request, params, defaultData, formatParams, paramsValueTypeMap, resetFieldsIgnores, filterFields, sortFields, namespace, pagination, onClickReset, onAfterRequest, defaultSortOrder }: UseTablePagingParams<DataType, ParamsType>) => {
    formRef: Ref<ApFormSearchFormExpose | undefined, ApFormSearchFormExpose | undefined>;
    submit: () => void;
    reset: () => void;
    refresh: () => void;
    refreshByDelete: (n: number) => void;
    data: InternalDataType<DataType>;
    handleTableChange: (pagination: TablePaginationConfig, filters: Record<string, FilterValue | null>, sorter: SorterResult<any> | SorterResult<any>[], extra: TableCurrentDataSource<any>) => void;
    handleTableChangeOptional: OptionalOnTableChange<(pagination: TablePaginationConfig, filters: Record<string, FilterValue | null>, sorter: SorterResult<any> | SorterResult<any>[], extra: TableCurrentDataSource<any>) => void>;
    tableProps: ComputedRef<{
        loading: boolean;
        pagination: {
            current: number;
            pageSize: number;
            total: number;
            showSizeChanger: NonNullable<boolean | undefined>;
            showQuickJumper: NonNullable<boolean | undefined>;
            showLessItems: boolean | undefined;
            size: "default" | "small";
            pageSizeOptions: (string | number)[];
            showTotal: ((total: number) => import("vue/jsx-runtime").JSX.Element) | undefined;
        };
        onChange: (pagination: TablePaginationConfig, filters: Record<string, FilterValue | null>, sorter: SorterResult<any> | SorterResult<any>[], extra: TableCurrentDataSource<any>) => void;
        dataSource: DataType[];
    }>;
    dataSource: ComputedRef<DataType[]>;
    setDataSource: (dataSource?: DataType[], isAgGrid?: boolean) => void;
    getColumnSFConfig: (column: ApColumnType, append?: boolean) => Recordable;
    sortedInfo: Ref<{
        [x: string]: any;
        colKey: string | number;
        field: string;
        order: "descend" | "ascend";
    } | null | undefined, DefaultSortOrderType | {
        [x: string]: any;
        colKey: string | number;
        field: string;
        order: "descend" | "ascend";
    } | null | undefined>;
    filteredInfo: Ref<any, any>;
    getPaging: () => {
        current?: number | undefined;
        pageSize?: number | undefined;
    };
    setPaging: (nextPaging: InternalPagingType, refreshImmediately?: boolean) => void;
    submitWith: (resetCurrent?: boolean) => void;
    fetchNextPageAndCache: () => void;
    getLastParams: () => Recordable;
};
export {};
