import { PrimaryTableCol, TableRowState, TableRowValue, TableRowData } from '../type';
export type TableTreeDataMap = Map<string | number, TableRowState>;
export interface TableRowModel<T> extends TableRowState<T> {
    setData?: (key: string | number, data: T) => void;
}
export interface KeysType {
    rowKey: string;
    childrenKey: string;
}
export interface SwapParams<T> {
    current: T;
    target: T;
    currentIndex: number;
    targetIndex: number;
}
export declare const TABLE_TREE_ERROR_CODE_NOT_SAME_LEVEL: {
    code: number;
    reason: string;
};
/**
 * 表格树形结构处理器
 * Vue 和 React 可以通用
 * 关键函数有以下几个
 * @toggleExpandData 处理树形结构展开收起
 * @setData 更新当行数据
 * @getData 获取单行数据
 * @remove 移除行数据，及其子节点
 * @appendTo 追加子节点到末尾
 */
declare class TableTreeStore<T extends TableRowData = TableRowData> {
    /** 树形结构 Map 存储 */
    treeDataMap: TableTreeDataMap;
    expandAllRowIndex: 0;
    constructor();
    /**
     * 初始化 treeDataMap，不会改变 dataSource
     * @param dataSource 树形数据源
     * @param columns 列配置
     * @param keys 字段别名
     */
    initialTreeStore(dataSource: T[], columns: PrimaryTableCol[], keys: KeysType): void;
    /**
     * 获取所有节点的唯一标识
     */
    getAllUniqueKeys(data: T[], keys: KeysType, arr?: T[]): T[];
    toggleExpandData(p: {
        rowIndex: number;
        row: T;
    }, dataSource: T[], keys: KeysType): T[];
    updateExpandRow(changeRow: TableRowState, dataSource: T[], keys: KeysType): T[];
    /**
     * 获取当前行全部数据
     * @param key 行唯一标识
     * @returns {TableRowState} 当前行数据
     */
    getData(key: TableRowValue): TableRowState;
    /**
     * 更新当前行数据，并返回当前行下标
     * @param rowValue 当前行唯一标识值
     * @param newRowData 新行数据
     * @returns {number} rowIndex 设置的行下标
     */
    updateData(rowValue: TableRowValue, newRowData: T, dataSource: T[], keys: KeysType): number;
    /**
     * 移除指定节点
     * @param key 行唯一标识
     */
    remove(key: TableRowValue, dataSource: T[], keys: KeysType): T[];
    /**
     * 为当前节点添加子节点，默认添加到最后一个节点。允许添加单个或多个
     * @param rowValue 当前节点唯一标识
     * @param newData 待添加的新节点
     */
    appendTo(rowValue: string | number, newData: T | T[], dataSource: T[], keys: KeysType): T[];
    appendToRoot(newData: T | T[], dataSource: T[], keys: KeysType): T[];
    /**
     * 在当前节点后，插入一个兄弟节点
     * @param rowValue 当前节点唯一标识
     * @param newData 待添加的新节点
     */
    insertAfter(rowValue: string | number, newData: T, dataSource: T[], keys: KeysType): T[];
    /**
     * 在当前节点前，插入一个兄弟节点
     * @param rowValue 当前节点唯一标识
     * @param newData 待添加的新节点
     */
    insertBefore(rowValue: string | number, newData: T, dataSource: T[], keys: KeysType): T[];
    insert(rowValue: string | number, newData: T, dataSource: T[], keys: KeysType, type: 'before' | 'after'): T[];
    /**
     * 交换数据行
     * @returns 交换失败返回 false
     */
    swapData(dataSource: T[], params: SwapParams<T>, keys: KeysType): {
        dataSource: T[];
        result: boolean;
        code?: number;
        reason?: string;
    };
    /**
     * 展开所有节点
     */
    expandAll(dataSource: T[], keys: KeysType): T[];
    /**
     * 收起所有节点
     */
    foldAll(dataSource: T[], keys: KeysType): T[];
    /** 获取整个树形结构 */
    getTreeNode(dataSource: T[], keys: KeysType): T[];
    /**
     * 初始化树形结构 Map
     * @param treeDataMap 树形结构 Map
     * @param dataSource 数据源
     * @param column 树形结构列
     * @param keys 字段映射关系
     * @param level 层级
     * @param parent 父元素
     * @returns void
     */
    initialTreeDataMap(treeDataMap: TableTreeDataMap, dataSource: T[], column: PrimaryTableCol, keys: KeysType, level?: number, parent?: TableRowState): void;
    updateDisabledState(dataSource: T[], column: PrimaryTableCol, keys: KeysType): void;
    /**
     * 校验数据合法性
     */
    validateDataExist(state: TableRowState, rowValue: string | number): boolean;
    /**
     * 校验数据是否已存在
     */
    validateDataDoubleExist(state: TableRowState, rowValue: string | number): boolean;
}
export default TableTreeStore;
/**
 * 更新展开的子节点数量
 * @param rowSate 行数据和状态
 * @param distance 需要调整的展开子节点长度数量，展开时增加，收起时减少。值为负数，表示减
 * @param expanded 展开/收起
 */
export declare function updateRowExpandLength(treeDataMap: TableTreeDataMap, row: TableRowData, distance: number, type: 'expand' | 'fold' | 'delete' | 'insert', keys: KeysType): void;
export declare function clearRowExpandLength<T>(treeDataMap: TableTreeDataMap, row: T, keys: KeysType): void;
/**
 * 更新子节点行状态，行数据、父节点、层级、路径等数据
 * @param rowState 行状态数据
 * @param expanded 展开或收起
 * @param keys
 */
export declare function updateChildrenRowState<T>(treeDataMap: TableTreeDataMap, rowState: TableRowState, expanded: boolean, keys: KeysType): void;
export declare function updateRowData<T extends TableRowData = TableRowData>(data: T[], key: string | number, newData: T, keys: KeysType): void;
export declare function updateRowIndex<T>(treeDataMap: TableTreeDataMap, dataSource: T[], extra: {
    rowKey: string;
    minRowIndex?: number;
    maxRowIndex?: number;
    type?: 'add' | 'remove';
    count?: number;
}): void;
