import { StyleValue } from 'vue';
import { ApTablePaginationConfig, RequestData } from '../ap-table';
import { InternalPagingType } from '../ap-table/hooks/use-table-paging-ng';
import { Recordable } from '../type';
export type ApListProps<RecordType = any, ParamsType = Recordable> = {
    /**
     * 列表数据源，传入后`request`和`defaultData`都将失效
     */
    dataSource?: RecordType[];
    /**
     * 是否是加载中
     */
    loading?: boolean;
    /**
     * 当点击列表项时触发
     * @deprecated 暂未实现
     */
    onItem?: (record: RecordType, index: number) => void;
    /**
     * 依赖的额外的参数
     * 变更后会重新发起网络请求
     */
    params?: ParamsType;
    /**
     * 请求数据
     * @param params
     * @returns
     */
    request?: (params: Partial<ParamsType> & {
        pageSize: number;
        current: number;
    }) => Promise<Partial<RequestData<RecordType>>>;
    /**
     * 表格的默认数据源，这些数据源将会在第一次请求后被替换
     */
    defaultData?: RecordType[];
    /**
     * 表格loading状态变更后触发
     * @param loading
     * @returns
     */
    onLoadingChange?: (loading: boolean) => void;
    /**
     * 查询表单提交之前，一般用于自定义对查询数据进行变更
     * @param params
     * @returns
     */
    beforeSearchSubmit?: (params: Partial<ParamsType>) => any;
    /**
     * 是否显示分页器（特定的分页器）或者指定默认的当前页和pageSize
     */
    pagination?: false | (Omit<ApTablePaginationConfig, 'showTotal'> & {
        /**
         * 只有一页时隐藏分页
         */
        hideOnSinglePage?: boolean;
    });
    /**
     * 是否手动发起第一次网络请求
     */
    manual?: boolean;
    /**
     * List容器的自定义样式
     */
    containerStyle?: StyleValue;
    /**
     * List内容区域自定义样式
     */
    contentStyle?: StyleValue;
    /**
     *  底部分页器容器的样式
     */
    footerWarpperStyle?: StyleValue;
    /**
     * 列表是否开启虚拟滚动
     * @description 设置此属性后，将不会展示分页器，同样`renderContent`插槽将不再可用；
     * 如果值为`number`类型，则表示每个元素的尺寸，在尺寸不固定的情况下，则可以设置`minItemSize`和`sizeDependencies`两个属性
     * @default false
     */
    virtual?: number | {
        minItemSize: number;
        sizeDependencies?: (item: RecordType) => any[];
    };
    /**
     * 列表数据的key
     * @default "id"
     */
    rowKey?: string;
    /**
     * 是否自适应外部容器高度（无数据时充满容器、数据超出时内部滚动）
     */
    adaptive?: boolean;
    /**
     * 请求网络请求模式: `paging`分页、`infinite-scroll`无限滚动
     * @default "paging"
     */
    fetchMode?: 'paging' | 'infinite-scroll';
};
export type ApListExpose = {
    /**
     * 重置页码并发起网络请求
     * @returns
     */
    submit: () => void;
    /**
     * 重设查询表单（如果有的话）并发起网络请求
     * @returns
     */
    reset: () => void;
    /**
     * 刷新当前页
     * @returns
     */
    refresh: () => void;
    /**
     * 删除N条数据后刷新某一页（具体页面会计算）
     * @param n 删除的n条数据
     * @returns
     */
    refreshByDelete: (n: number) => void;
    /**
     * 滚动到第一行（如果无效需要你传入相对于div.ap-list__content的查询参数）
     * @param selector
     * @returns
     */
    scrollToFirstRow: (selector?: string) => void;
    /**
     * 获取查询表单的值
     * @description 只有在自定义查询表单并且绑定了formRef才能获取到查询表单的值
     * @param transform 是否获取转换后的值，默认为`false`
     * @returns
     */
    getSearchFormValuesIfSetted: (transform?: boolean) => Recordable;
    /**
     * 设置查询表单的值
     * @description 只有在自定义查询表单并且绑定了formRef才能设置查询表单的值
     * @param fields 将要设置的值
     * @returns
     */
    setSearchFormValuesIfSetted: (fields: any) => void;
    /**
     * 获取分页参数
     * @returns
     */
    getPaging: () => InternalPagingType;
    /**
     * 设置表格分页参数
     * @param nextPaging 新的分页参数
     * @param refreshImmediately 是否立刻刷新数据，默认为`true`
     * @returns
     */
    setPaging: (nextPaging: InternalPagingType, refreshImmediately?: boolean) => void;
};
