import { Moment } from 'moment';
import React, { ReactNode } from 'react';
export interface IBasicTableColumnsProps {
    title: string | ReactNode;
    subTitle: string;
    dataIndex: string;
    width: number;
    align: string;
    fixed?: string;
    valueType?: string;
    editable?: boolean;
    renderText?: (text: string | number) => React.ReactNode | React.ReactNode[];
    filterDropdown?: any;
    noFilterPanel?: any;
    render: (text?: React.ReactNode, record?: any, index?: number) => React.ReactNode | React.ReactNode[];
}
/**
 * 表格的配置列 (Parameters 具体看下面的代码吧，代码里有提示类型）<br/>
 * 搭配 SingleTable, SingleMultiHeaderTable 体系， BasicTable 使用<br/>
 * 使用时 创建一个 BasicTableColumns 对象即可
 */
export default class BasicTableColumns {
    private needColumns;
    protected tableColumns: object[];
    private multiHeaderColumns;
    constructor(initColumns: object[]);
    /**
     * 配置业务模块 需要的所有列
     * @param needColumns
     */
    setNeedColumns: (needColumns: object[]) => void;
    /**
     * 获得业务模块需要的列, 此方法作为配置的最后使用
     *  cols.配置一系列方法后 必须调用 getNeedColumns() 才能获得最终的数据
     * @public
     */
    getNeedColumns: () => object[];
    /**
     * 用户获取的多级表头的列, 和 setTableColumnsToMultiHeader() 结合使用， 此方法作为配置的最后使用
     *  cols.配置一系列方法后 必须调用 getNeedMultiColumns() 才能获得最终的数据
     * @public
     */
    getNeedMultiColumns: () => object[];
    /**
     * 初始化 表格数据
     * @param columns 初始化表格的列时，在这里配置哪些列需要显示
     * @public
     */
    initTableColumns: (columns: Array<string | IBasicTableColumnsProps>) => this;
    /**
     * 初始化表体数据 在 HeaderAndBodyTable 组件里使用（表头表体组件里使用）
     * @param columns
     * @public
     */
    initBodyTableColumns: (columns: Array<string | IBasicTableColumnsProps>) => this;
    /**
     * 配置多级表头 和 getNeedMultiColumns() 结合使用
     * @param columns
     * @public
     */
    setTableColumnsToMultiHeader: (columns: Array<{
        title: string;
        children: Array<string | object>;
    }>) => this;
    /**
     * 配置 table columns中 哪些列是日期选择模式
     * 使用到dateTs时 format统一为时间戳格式
     * @param columns
     * @public
     */
    setTableColumnToDatePicker: (columns: Array<{
        value: string;
        valueType: 'date' | 'dateRange' | 'dateTime' | 'time' | 'dateTs';
        needValueType?: 'timestamp' | 'date';
        picker?: 'time' | 'date' | 'week' | 'month' | 'quarter' | 'year';
        splitKey?: '';
        defaultValue?: number;
        format?: 'Timestamp' | 'YYYY-MM-DD' | 'YYYY-MM-DD HH:mm' | 'HH:mm' | 'YYYY' | 'YYYY-MM' | 'MM-DD' | 'MM' | 'DD';
    }>) => this;
    /**
     * 配置 Table columns中 哪些列是选择框Select
     * @param columns
     * @public
     */
    setTableColumnToSelect: (columns: {
        value: string;
        valueAlias?: string;
        valueType: 'radio' | 'select' | 'filterSelect' | 'radioButton' | 'multiple';
        name: string;
        data: object[] | [];
        defaultValue?: string | number;
        onChange?: (value: string | [], selectedOption?: object | []) => void;
        labelInValue?: boolean;
    }[]) => this;
    /**
     * 配置 Table columns中 哪些列是InputNumber的列
     * @param columns
     * @public
     */
    setTableColumnToInputNumber: (columns: Array<{
        min?: number;
        max?: number;
        value: string;
        valueType: 'money' | 'digit' | 'second' | 'percent' | 'longNumber';
        defaultValue?: number;
    }>) => this;
    /**
     * 行元素是自动填充加选择的模式
     * @param columns
     * @public
     */
    setTableColumnToAutoComplete: (columns: Array<{
        value: string;
        data: Array<{
            value: string;
        }>;
        defaultValue?: Moment;
    }>) => this;
    /**
     * 配置 Table columns中 哪些列是自定义的可以输入特殊字符的input的列
     * @param columns
     * @public
     */
    setTableColumnToSpecialInput: (columns: {
        value: string;
        valueType: string;
        valueEnum?: {
            prefix?: (updateValue: (inputVal: number | string) => void) => JSX.Element;
            suffix?: (updateValue: (inputVal: number | string) => void) => JSX.Element;
        };
    }[]) => this;
    /**
     * 对表单的数据进行 分组展示 带标题
     * 一般是按照业务的需求将需要填报的列放到一起展示 并给出标题 默认是 基础数据
     * @param columns
     * @public
     */
    setSplitGroupTableColumns: (columns: {
        title: string;
        columns: string[] | any[][];
        order?: number;
    }[]) => this;
    /**
     * 配置 table 表格 表头标题的 详细描述，会在左侧展示 详情的 icon
     * @param columns
     * @public
     */
    setTableColumnShowHeaderInfo: (columns: Array<{
        value: string;
        icon: ReactNode;
    }>) => this;
    /**
     * columns里的列是要去校验的列
     * @param columns
     */
    needToRules: (columns: Array<string | {
        value: string;
        rules: Array<{
            required: boolean;
            validator: any;
        }>;
    }>) => this;
    /**
     * columns里的列是需要设置成disable的列
     * @param columns
     */
    needToDisabled: (columns: (string | {
        value: string;
        disabled: boolean;
    })[]) => this;
    /**
     * columns里的列是需要导出的列
     * @param columns
     * @public
     */
    needToExport: (columns: string[]) => this;
    /**
     * columns里的列 哪些不需要在Table显示 但是还需要导出的
     * @param columns
     * @public
     */
    needToHideInTableButExport: (columns: string[]) => this;
    /**
     * columns里的列 哪些不需要在Table显示 但是还需要导出的
     * @param columns
     * @public
     */
    needToHide: (columns: string[]) => this;
    /**
     * columns里的列是需要设置成fixed
     * @param columns
     * @public
     */
    needToFixed: (columns: Array<{
        value: string;
        fixed: string;
    }>) => this;
    /**
     * 不需要 排序图标
     * @param columns
     * @public
     */
    noNeedToSorterIcon: (columns: string[]) => this;
    /**
     * 不需要 过滤 图标
     * @param columns
     * @public
     */
    noNeedToFilterIcon: (columns: string[]) => this;
}
