export interface Obj {
    [key: string]: unknown;
}
export type TLanguage = 'zh-CN' | 'en-US' | 'ja-JP' | 'ru-RU' | 'pt-PT' | 'pt-BR' | 'fr-FR' | 'es-ES' | 'ar-SA' | 'zh-HK' | 'zh-TW' | 'cs-CZ' | 'da-DK' | 'nl-NL' | 'de-DE' | 'hi-IN' | 'hu-HU' | 'it-IT' | 'ko-KR' | 'ms-MY' | 'pl-PL' | 'ro-RO' | 'sr-SA' | 'sk-SK' | 'sv-SE' | 'th-TH' | 'tr-TR' | 'uk-UA' | 'vi-VN' | 'he-IL' | 'iw-IL' | 'in-ID' | 'id-ID' | 'en-ID' | 'en-MY' | 'en-PH' | 'en-SG' | 'en-TH' | 'en-VN' | 'es-MX' | 'en-GB' | 'es-419' | 'el-GR' | 'fr-CA' | 'bn-BD' | 'ur-PK' | 'my-MM' | 'lo-LA' | 'fa-IR' | 'uz-UZ' | 'tl-PH' | 'ne-NE' | 'si-LK';
type FormatTypeEnum = 'ellipsis' | 'number' | 'currency' | 'currency-with-unit' | 'percent' | 'date-time' | 'bank';
export interface IRemoteIns {
    /**
     * 刷新当前页
     * @onecode
     */
    load: () => void;
    /**
     * 刷新表格，清除多选、分页等内置数据
     * @onecode
     */
    refresh: () => void;
    /**
     * 刷新表格，清除多选等内置数据, 不重置分页信息
     */
    refreshExceptPaging: () => void;
    /**
     * 获取表格内部数据，仅使用 CnTable.useRemote 时生效
     */
    getInnerData: () => any;
    /**
     * 一些表格的内置方法
     */
    remoteOperation: React.MutableRefObject<{}>;
}
/**
 * ICnTableColumn接口，继承自ICnColumn接口
 * @extends ICnColumn
 */
export interface ICnTableColumn {
    /**
     * format属性，用于指定格式化类型
     * @type {FormatTypeEnum}
     */
    format?: FormatTypeEnum | string;
    /**
     * 开启国际化适配：不设置 跟随系统配置；true 开启；false 关闭；配置语种 固定语种格式
     */
    adapterLocale?: boolean | TLanguage;
}
/**
 * 远程接口配置
 */
export interface IRemote {
    /**
     * @onecode
     * 接口链接
     */
    url: string;
    /**
     * 接口参数
     * @onecode
     */
    params?: Obj;
    /**
     * axios 属性配置 ，具体参考 axios
     * @onecode
     */
    requestOptions?: Obj;
    /**
     * @deprecated (since version 0.7.27)
     * 接口是否立即生效
     */
    immediate?: boolean;
    /**
     * immediate的相反的能力，用于代替immediate
     * 默认 false。 即在初始化时自动执行
     * 如果设置为 true，则需要手动调用表格刷新
     * @onecode
     */
    manual?: boolean;
    /**
     * @deprecated (since version 0.7.27)
     * 参数转换
     * @onecode
     */
    paramsTransform?: (params: Obj) => Obj;
    /**
     * 参数转换
     * 代替paramsTransform
     * @onecode
     */
    onBefore?: (params: Obj) => Obj;
    /**
     * 失败后的回调
     * @deprecated (since version 0.7.27)
     */
    failCallback?: (err: Error) => void;
    /**
     * 失败回调
     * 代替failCallback
     * @onecode
     */
    onError?: (err: Error) => void;
    /**
     * 请求方法
     * @default POST
     * @onecode
     */
    method?: 'GET' | 'POST';
    /**
     * @deprecated (since version 0.11.16)
     */
    fetch?: (params: Obj) => Promise<any>;
    /**
     * 当 url 获取的数据的 headers，属性无法满足，需要自定义，请使用 columns 覆盖
     * @onecode
     */
    columns?: ICnTableColumn[];
    /**
     * 接口结果转换，指纹的格式如上所示
     * @deprecated (since version 0.11.16)
     */
    responseTransform?: (res: Obj) => Obj;
    /**
     * 接口成功结果转换
     * 代替responseTransform
     * @onecode
     */
    onSuccess?: (res: Obj) => Obj;
    /**
     * 数据请求的时候，数据同步给外面
     * @onecode
     */
    dataChange?: (res: Obj) => void;
    /**
     * 前端排序和后端排序切换
     * @onecode
     */
    asciiSort?: boolean;
    /**
     * Table.useRemote 联动配置，用于自定义刷新接口
     * @onecode
     */
    instance?: IRemoteIns;
    /**
     * 树形结构，异步获取数据 (key,row, setLoading)=> promise, promise.then 务必返回 array
     * @onecode
     */
    getChildrenInTree?: (key: string, row: Obj, setLoading: (val: boolean) => void) => Promise<Obj[]>;
    /**
     * 树形结构，异步获取数据，是否开启缓存
     * @onecode
     */
    treeCache?: boolean;
    /**
     * 数据请求的服务函数
     * @onecode
     */
    service?: (params: Obj) => Promise<any>;
    /**
     * 请求结束时的回调函数
     * @onecode
     */
    onFinally?: () => Obj;
}
export interface IPage {
    currentPage: number;
    pageSize: number;
    total: number;
    pageSizeList: number[];
    setCurrentPage: (val: number, type?: string) => void;
    setPageSize: (val: number) => void;
    setTotal: (val: number) => void;
    setPageSizeList: (val: number[]) => void;
    setCurrent: (val: number, type?: string) => void;
    pageHasChange: React.MutableRefObject<boolean>;
    fetchLock?: React.MutableRefObject<boolean>;
    isLock?: () => boolean;
    doLock?: () => void;
    unLock?: () => void;
}
/**
 * 清除数据类型
 */
export type IClearDataType = 'refresh' | 'load' | 'refreshExceptPaging';
export {};
