import { Moment } from 'moment';
import { ReactNode } from 'react';
import React from 'react';
export interface IBasicEditableColumnsProps {
    title: string | ReactNode;
    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[];
    renderSelfEditable?: (record: any, handleSave: any, headerForm: any, onBlurSave: () => void, // 鼠标离开焦点时调用的
    dataSource: any[], handleSaveDataSource: (changeDataSource: any[]) => void) => React.ReactNode | React.ReactNode[];
}
/**
 * 编辑表格的配置列 (Parameters 具体看下面的代码吧，代码里有提示类型）<br/>
 * BasicFormOperatorTable, HeaderAndBodyTable的CrudAddModal,CrudEditModal 使用<br/>
 * 使用时 创建一个 BasicEditableColumns 对象即可
 */
export default class BasicEditableColumns {
    private needColumns;
    private tableColumns;
    constructor(initColumns: object[]);
    /**
     * 配置业务模块 需要的所有列
     * @param needColumns
     */
    setNeedColumns: (needColumns: object[]) => void;
    /**
     * 获得业务模块需要的列, 此方法作为配置的最后使用
     *  cols.配置一系列方法后 必须调用 getNeedColumns() 才能获得最终的数据
     * @public
     */
    getNeedColumns: () => object[];
    /**
     * 初始化 表格数据
     * @param columns 初始化表格的列时，在这里配置哪些列需要显示
     * @public
     */
    initTableColumns: (columns: Array<string | IBasicEditableColumnsProps>) => this;
    /**
     * 配置 table columns中 哪些列是日期选择模式 valueType: date 日期类型 | dateRange 日期区间 | dateTime 时间 | time 时间
     * 使用到dateTs时 format统一为时间戳格式
     * @param columns
     * @public
     */
    setTableColumnToDatePicker: (columns: Array<{
        value: string;
        valueType: 'date' | 'dateRange' | 'dateTime' | 'time' | 'dateTs';
        defaultValue?: Moment;
        disabled?: boolean;
        format?: 'timestamp' | 'YYYY-MM-DD' | 'YYYY-MM-DD HH:mm' | 'HH:mm' | 'YYYY' | 'YYYY-MM' | 'MM-DD' | 'MM' | 'DD';
    }>) => this;
    /**
     * 配置 table columns中 哪些列是选择框Select  valueType: radio 单选框 | select 下拉单选 | filterSelect 带筛选的下拉单选 | radioButton 单选按钮 | multiple 下拉多选
     * @param columns
     * @public
     */
    setTableColumnToSelect: (columns: {
        value: string;
        valueAlias?: string;
        valueType: 'radio' | 'select' | 'filterSelect' | 'radioButton' | 'multiple';
        name: string;
        data: object[] | [];
        defaultValue?: string | number;
        disabled?: boolean;
        filterDropName?: string;
        onChange?: (value: string | [], selectedOption?: object | []) => void;
        labelInValue?: boolean;
    }[]) => this;
    /**
     * 行元素是自动填充加选择的模式
     * @param columns
     * @public
     */
    setTableColumnToAutoComplete: (columns: Array<{
        value: string;
        data: Array<{
            value: string;
        }>;
        defaultValue?: Moment;
        disabled?: boolean;
    }>) => this;
    /**
     * 行内元素是下拉表格的模式
     * @param columns
     * @public
     */
    setTableColumnToSearchTable: (columns: Array<{
        value: string;
        data: {
            dispatchUrl: string;
            tableColumns: any[];
            sortOrder: {
                sort: string;
                order: string;
            };
            rowKey: string;
            showRowKey?: string;
            operator?: any;
            tableDefaultField?: any;
            rowSelection?: {
                type: string;
            };
        };
    }>) => this;
    /**
     * 配置 table columns中 哪些列是InputNumber的列 valueType: money 金额 | digit 数字 | second 时间数字 | percent 百分比
     * @param columns
     * @public
     */
    setTableColumnToInputNumber: (columns: Array<{
        min?: number;
        max?: number;
        value: string;
        valueType: 'money' | 'digit' | 'second' | 'percent' | 'longNumber'; /** money 金额 | digit 数字 | second 时间数字 | percent 百分比 | longNumber 长数字*/
        defaultValue?: number;
        disabled?: boolean;
    }>) => this;
    /**
     * 配置 table columns中 哪些列是自定义的可以输入特殊字符的input的列 prefix 前缀配置| suffix 后缀配置
     * @param columns
     * @public
     */
    setTableColumnToSpecialInput: (columns: {
        value: string;
        valueType: 'specialInput';
        valueEnum?: {
            prefix?: (updateValue: (inputVal: number | string) => void) => JSX.Element;
            suffix?: (updateValue: (inputVal: number | string) => void) => JSX.Element;
        };
    }[]) => this;
    /**
     * 设置编辑表格的哪些列需要批量修改功能：批量修改组件为Select选择框的
     * @param columns
     * @public
     */
    setEditTableHeaderTitleBatchIconToSelect: (columns: {
        value: string;
        name: string;
        valueAlias?: string;
        data: object[] | [];
        defaultValue?: string | number;
        showTableColumns: string[];
        onChange?: any;
    }[]) => this;
    /**
     * 设置编辑表格的哪些列需要批量修改功能：批量修改组件为Select选择框的
     * @param columns
     * @public
     */
    setEditTableHeaderTitleBatchIconToMultiSelect: (columns: {
        value: string;
        name: string;
        valueAlias?: string;
        data: object[] | [];
        defaultValue?: string | number;
        showTableColumns: string[];
    }[]) => this;
    /**
     * 设置编辑表格的哪些列需要批量修改功能：批量修改组件为AutoComplete选择框的
     * @param columns
     * @public
     */
    setEditTableHeaderTitleBatchIconToAutoComplete: (columns: {
        value: string;
        name: string;
        valueAlias?: string;
        data: object[] | [];
        defaultValue?: string | number;
        showTableColumns: string[];
    }[]) => this;
    /**
     * 设置编辑表格的哪些列需要批量修改功能：批量修改组件为Input选择框的
     * @param columns
     * @public
     */
    setEditTableHeaderTitleBatchIconToInput: (columns: {
        value: string;
        defaultValue?: string | number;
        showTableColumns: string[];
    }[]) => this;
    /**
     * 设置编辑表格的哪些列需要批量修改功能：批量修改组件为DatePicker选择框的
     * @param columns
     * @public
     */
    setEditTableHeaderTitleBatchIconToDatePicker: (columns: {
        value: string;
        defaultValue?: Moment;
        showTableColumns: string[];
    }[]) => this;
    /**
     * 设置编辑表格的哪些列需要批量修改功能：批量修改组件为Input选择框的
     * @param columns
     * @public
     */
    setEditTableHeaderTitleBatchIconToInputNumber: (columns: {
        value: string;
        defaultValue?: number;
        min?: number;
        max?: number;
        showTableColumns: string[];
    }[]) => this;
    /**
     * columns里的列是要去校验的列
     * @param columns
     * @public
     */
    needToRules: (columns: Array<string | {
        value: string;
        rules: Array<{
            required: boolean;
            validator: any;
        }>;
    }>) => this;
    /**
     * columns里的列 哪些不需要在Table显示 但是还需要导出的
     * @param columns
     */
    needToHideInTableButExport: (columns: string[]) => this;
    /**
     * columns里的列是需要设置成fixed
     * @param columns
     * @public
     */
    needToFixed: (columns: Array<{
        value: string;
        fixed: string;
    }>) => this;
    /**
     * columns里的列是 不需要导出的列
     * @param columns
     */
    noNeedToExport: (columns: string[]) => this;
    /**
     * 表格模式下的编辑列 哪些列不允许编辑
     * string 类型是：BasicTableTask用
     * object 类型是：BasicEditableProTable用
     * @param columns
     * @public
     */
    noNeedToEditable: (columns: (string | {
        value: string;
        editableFunc: (text: any, record: any, index?: number) => boolean;
    })[]) => this;
    /**
     * 表格模式下的编辑列 哪些列允许编辑
     * string 类型是：BasicTableTask用
     * object 类型是：BasicEditableProTable用
     * @param columns
     * @public
     */
    needToEditable: (columns: (string | {
        value: string;
        editableFunc: (text: any, record: any, index?: number) => boolean;
    })[]) => this;
}
