@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
118 lines (117 loc) • 4.37 kB
TypeScript
/// <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;
}