/// <reference types="lodash" />
import * as React from 'react';
import { CellMeasurerCache } from 'react-virtualized';
import { PaginationConfig } from 'antd/es/pagination';
import BasicComponent from '../BasicComponent';
import { EThemeTypes, ITableTheme, ChartType, IFontStyle } from '../../../constants';
import { TableTextDisplay } from '../../../constants/table-style';
import { IColumnProps, IFilterValue } from './constant';
import { getLeafColumns, hasChildren } from './columnManager';
import 'react-resizable/css/styles.css';
export interface IFlexTableProps<T> {
    columns: Array<IColumnProps<T>>;
    dataSource: T[];
    rowClassName?: (index: number, level?: number) => string;
    rowStyle?: (index: number) => React.CSSProperties;
    tableClassName?: string;
    className?: string;
    style?: React.CSSProperties;
    pagination?: PaginationConfig;
    bordered?: boolean;
    resizable?: boolean;
    size?: 'small' | 'middle' | 'large';
    /**
     * 将表里面内容撑开的实际宽度
     */
    scrollWidth?: number;
    /** 表的视口宽度 */
    width?: number;
    /** 表的视口高度 */
    height?: number;
    tableTitleFont?: IFontStyle;
    tableTitleBgColor?: string;
    onResizeChange?: (scrollWidth: number) => void;
    onColumnsResizeChange?: (dataIndex: string, columnWidth: number) => void;
    onColumnsFiltersChange?: (filters: IFilterValue[]) => void;
    tableOption?: ITableTheme;
    theme?: EThemeTypes;
    chartType?: ChartType;
    pageScroll: boolean;
    autoplaySpeed: number;
    showPagination?: boolean;
    textDisplayMode?: TableTextDisplay;
    sort?: {
        field: string;
        order: 'ascend' | 'descend';
    };
    onSortChange?: (sort?: {
        field: string;
        order: 'ascend' | 'descend';
    }) => void;
}
export default class FlexTable<T> extends BasicComponent<IFlexTableProps<T>, any> {
    static defaultProps: {
        columns: never[];
        dataSource: never[];
        bordered: boolean;
        size: string;
        tableOption: {};
        theme: EThemeTypes;
    };
    data: T[];
    pagination: PaginationConfig;
    columns: Array<IColumnProps<T>>;
    scrollWidth: number;
    rowLevels: number;
    filters: IFilterValue[];
    scrollToRowIndex: number;
    static getLeafColumns: typeof getLeafColumns;
    static hasChildren: typeof hasChildren;
    timer: any;
    vListRef: any;
    componentDidMount(): void;
    scroll: () => void;
    handleEnter: () => void;
    handleLeave: () => void;
    clearTimer: () => void;
    createTimer: (pageScroll: boolean, autoplaySpeed: number) => void;
    componentWillReceiveProps(nextProps: IFlexTableProps<T>): void;
    componentWillUnmount: () => void;
    get currentPageData(): T[];
    get showPagination(): boolean;
    getColumnfilters(columns: Array<IColumnProps<T>>): IFilterValue[];
    handleCellResize({ size }: any, dataIndex?: string): void;
    debounceTableSizeChange: import("lodash").DebouncedFunc<(scrollWidth: number) => void>;
    onTableWidthChange(nextWidth: number): void;
    handleTableResize(_: any, { size }: any): void;
    handleEnlargeTableWidth(): void;
    handleShrinkTableWidth(): void;
    getTableData(dataSource: T[]): void;
    itemRender(current: number, type: any, originalElement: any): any;
    cache: CellMeasurerCache;
    _rowRenderer({ index, key, style, parent }: any, { tableOption }: {
        tableOption?: ITableTheme;
    }): React.JSX.Element;
    renderRowData(rowData: any, rowIndex: number, level: number | undefined, params: {
        tableOption?: ITableTheme;
    }): React.JSX.Element;
    get fixedIndexes(): {
        left: number[];
        right: number[];
    };
    renderDataBody(data: any[], level: number | undefined, params: {
        tableOption?: ITableTheme;
    }): JSX.Element[];
    renderTable(): React.JSX.Element;
    getMaxCurrent(total: number): number | undefined;
    getDefaultPagination(): {};
    initPagination(pagination: PaginationConfig): void;
    setRowLevels(levels: number): void;
    setTableScrollWidth(width: number): void;
    setData(data?: T[]): void;
    setColumns(columns?: Array<IColumnProps<T>>): void;
    setPagination(pagination: PaginationConfig): void;
    setFilters(filters: IFilterValue[]): void;
    setScrollToRowIndex(scrollToRowIndex: number): void;
    render(): React.JSX.Element;
}
