import { ValidateError } from 'async-validator';
import type CellHeader from './CellHeader';
import type Context from './Context';
import type { ChangeItem, Column, FilterMethod, Position, EVirtTableOptions, SpanInfo } from './types';
import Cell from './Cell';
export default class Database {
    private loading;
    private ctx;
    private data;
    private columns;
    private footerData;
    private rowKeyMap;
    private colIndexKeyMap;
    private headerMap;
    private rowIndexRowKeyMap;
    private checkboxKeyMap;
    private originalDataMap;
    private changedDataMap;
    private validationErrorMap;
    private itemRowKeyMap;
    private bufferData;
    private sumHeight;
    private filterMethod;
    private positions;
    constructor(ctx: Context, options: EVirtTableOptions);
    init(): void;
    /**
     * 清除缓存数据
     */
    clearBufferData(): void;
    /**
     * 初始化数据
     * @param dataList
     * @param level
     */
    private initData;
    /**
     *
     * @param rowKey 设置Row高度
     * @param height
     */
    setRowHeight(rowIndex: number, height: number): void;
    /**
     *
     * @returns 获取转化平铺数据
     */
    getAllRowsData(): any[];
    private filterColumns;
    getColumns(): Column[];
    setColumns(columns: Column[]): void;
    setData(data: any[]): void;
    /**
     * 统一转化数据，给画body使用，包括过滤树状等，统一入口
     * @returns
     */
    getData(): {
        data: any[];
        sumHeight: number;
        positions: Position[];
    };
    setFooterData(data: any[]): void;
    getFooterData(): any[];
    /**
     * 设置过滤方法
     */
    setFilterMethod(filterMethod: FilterMethod): void;
    /**
     * 清空过滤方法
     */
    clearFilterMethod(): void;
    /**
     * 根据rowKey,控制指定展开行
     * @param rowKey
     * @param expand
     */
    expandItem(rowKey: string, expand?: boolean): void;
    setExpandRowKeys(rowKeys: any[], expand?: boolean): void;
    getExpandRowKeys(): string[];
    expandAll(expand: boolean): void;
    expandLoading(rowKey: string, loading?: boolean): void;
    setExpandChildren(rowKey: string, children: any[]): void;
    getIsExpandLoading(rowKey: string): any;
    getIsExpandLazy(rowKey: string): any;
    /**
     * 根据rowKey获取是否展开
     * @param rowKey
     * @returns
     */
    getIsExpand(rowKey: string): any;
    /**
     * 根据rowKey获取行数据
     * @param rowKey
     * @returns
     */
    getRowForRowKey(rowKey: string): any;
    getRowForRowIndex(rowIndex: number): any;
    /**
     * 根据rowIndex获取rowKey
     * @param rowKey
     * @returns
     */
    getRowKeyForRowIndex(rowIndex: number): string;
    getRowKeyByItem(item: any): any;
    getRowIndexForRowKey(rowKey: string): any;
    /**
     * 根据rowIndex和colIndex获取单元格数据
     * @param rowIndex
     * @param colIndex
     * @returns
     */
    getItemValueForRowIndexAndColIndex(rowIndex: number, colIndex: number): {
        rowKey: string;
        key: string;
        value: any;
    } | null;
    /**
     * 根据rowKey和key获取单元格数据
     * @param rowKey
     * @param key
     * @returns
     */
    getItemValue(rowKey: string, key: string): any;
    /**
     * 批量设置数据
     * @param list
     * @param history
     * @returns
     */
    batchSetItemValue(_list: ChangeItem[], history?: boolean): Promise<void>;
    /**
     *设置单一数据
     * @param rowKey
     * @param key
     * @param value
     * @param history 是否添加历史记录
     * @param reDraw 是否刷新重绘
     * @param isEditor 是否是编辑器
     * @returns
     */
    setItemValue(rowKey: string, key: string, _value: any, history?: boolean, reDraw?: boolean, isEditor?: boolean): Promise<{
        oldValue?: undefined;
        newValue?: undefined;
    } | {
        oldValue: any;
        newValue: any;
    }>;
    /**
     * 根据rowKey 获取行数据
     * @param rowKey
     * @returns
     */
    getRowDataItemForRowKey(rowKey: string): any;
    /**
     *
     * @param rowKey 设置选中状态ByCheckboxKey，用于合并Checkbox单元格时声明唯一key
     * @param check
     */
    private setRowSelectionByCheckboxKey;
    /**
     * 根据rowKey 取反选中
     * @param rowKey
     */
    toggleRowSelection(rowKey: string): void;
    /**
     * 根据rowKey 设置选中状态
     * @param rowKey
     */
    setRowSelection(rowKey: string, check: boolean): void;
    getSelectionRows(): any[];
    /**
     * 根据rowKey 获取选中状态
     * @param rowKey
     */
    getRowSelection(rowKey: string): any;
    /**
     * 根据rowKey 获取选中状态
     * @param rowKey
     */
    getRowSelectable(rowKey: string): any;
    /**
     * 全选
     * @param rowKey
     */
    toggleAllSelection(): void;
    /**
     * 清除选中
     * @param rowKey
     */
    clearSelection(): void;
    /**
     * 获取选中状态，表头用
     * @param rowKey
     */
    getCheckedState(): {
        check: boolean | 0;
        indeterminate: boolean | 0;
        selectable: boolean;
    };
    /**
     * 更新列索引
     * @param list 表头末级列表
     */
    updateColIndexKeyMap(list?: CellHeader[]): void;
    getColumnByColIndex(colIndex: number): Column | undefined;
    getColIndexForKey(key: string): number | undefined;
    getColHeaderByIndex(colIndex: number): CellHeader | undefined;
    /**
     * 获取以改变数据
     */
    getChangedData(): {
        rowKey: string;
        colKey: string;
        row: any;
        originalValue: any;
        value: any;
    }[];
    getChangedRows(): any[];
    /**
     * 获取改变值是否已经改变
     * @param rowKey
     * @param key
     * @returns
     */
    isHasChangedData(rowKey: string, key: string): boolean;
    getPositionForRowIndex(rowIndex: number): Position;
    setHeader(key: string, cellHeader: CellHeader): boolean;
    getReadonly(rowKey: string, key: string): any;
    clearValidate(): void;
    hasValidationError(): boolean;
    getValidator(rowKey: string, key: string): Promise<unknown>;
    getHeightByRowIndexRowSpan(rowIndex: number, rowSpan: number): number;
    getSpanInfo(cell: Cell): SpanInfo;
    setLoading(loading: boolean): void;
    getLoading(): boolean;
    setValidationErrorByRowIndex(rowIndex: number, key: string, message: string): void;
    setValidationError(rowKey: string, key: string, errors: any[]): void;
    clearValidationError(rowKey: string, key: string): void;
    getValidationError(rowKey: string, key: string): ValidateError[];
    getVirtualBodyCell(rowIndex: number, colIndex: number): Cell | undefined;
    hasMergeCell(xArr: number[], yArr: number[]): boolean;
}
