choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
322 lines (321 loc) • 13.4 kB
TypeScript
import * as React from 'react';
import PropTypes from 'prop-types';
import { DraggableProvided, DropResult, ResponderProvided } from 'react-beautiful-dnd';
import { PerformanceTable as PerformanceTableLocal } from '../../../lib/locale-provider';
import { RadioChangeEvent } from '../../../lib/radio';
import { CheckboxChangeEvent } from '../../../lib/checkbox';
import { TableProps, SelectionInfo, SelectionItemSelectFn } from './Table.d';
import { RowProps } from './Row.d';
import { SortType } from './common.d';
import Column from './Column';
import Cell from './Cell';
import HeaderCell from './HeaderCell';
import ProfessionalBar from './query-bar/TableProfessionalBar';
import DynamicFilterBar from './query-bar/TableDynamicFilterBar';
import TableStore from './TableStore';
interface TableRowProps extends RowProps {
key?: string | number;
depth?: number;
}
export declare enum TableQueryBarType {
professionalBar = "professionalBar",
filterBar = "filterBar"
}
declare type Offset = {
top?: number;
left?: number;
width?: number;
height?: number;
};
interface TableState {
headerOffset?: Offset;
tableOffset?: Offset;
width: number;
columnWidth: number;
dataKey: number;
shouldFixedColumn: boolean;
contentHeight: number;
contentWidth: number;
tableRowsMaxHeight: number[];
isColumnResizing?: boolean;
expandedRowKeys: string[] | number[];
searchText: string;
sortType?: SortType;
scrollY: number;
isScrolling?: boolean;
data: object[];
cacheData: object[];
fixedHeader: boolean;
fixedHorizontalScrollbar?: boolean;
isTree?: boolean;
selectedRowKeys: string[] | number[];
selectionDirty?: boolean;
[key: string]: any;
}
export declare const CUSTOMIZED_KEY = "__customized-column__";
export default class PerformanceTable extends React.Component<TableProps, TableState> {
static displayName: string;
static Column: typeof Column;
static Cell: typeof Cell;
static ColumnGroup: import("./ColumnGroup").IColumnGroup;
static HeaderCell: typeof HeaderCell;
static propTypes: {
columns: PropTypes.Requireable<any[]>;
autoHeight: PropTypes.Requireable<boolean>;
affixHeader: PropTypes.Requireable<number | boolean>;
affixHorizontalScrollbar: PropTypes.Requireable<number | boolean>;
bordered: PropTypes.Requireable<boolean>;
bodyRef: PropTypes.Requireable<(...args: any[]) => any>;
className: PropTypes.Requireable<string>;
classPrefix: PropTypes.Requireable<string>;
children: PropTypes.Requireable<any>;
cellBordered: PropTypes.Requireable<boolean>;
clickScrollLength: PropTypes.Requireable<object>;
data: PropTypes.Requireable<(object | null | undefined)[]>;
defaultExpandAllRows: PropTypes.Requireable<boolean>;
defaultExpandedRowKeys: PropTypes.Requireable<(string | number | null | undefined)[]>;
defaultSortType: PropTypes.Requireable<string | boolean>;
disabledScroll: PropTypes.Requireable<boolean>;
expandedRowKeys: PropTypes.Requireable<(string | number | null | undefined)[]>;
hover: PropTypes.Requireable<boolean>;
height: PropTypes.Requireable<number>;
headerHeight: PropTypes.Requireable<number>;
locale: PropTypes.Requireable<object>;
loading: PropTypes.Requireable<boolean>;
loadAnimation: PropTypes.Requireable<boolean>;
minHeight: PropTypes.Requireable<number>;
rowKey: PropTypes.Requireable<string | number>;
rowHeight: PropTypes.Requireable<number | ((...args: any[]) => any)>;
renderTreeToggle: PropTypes.Requireable<(...args: any[]) => any>;
renderRowExpanded: PropTypes.Requireable<(...args: any[]) => any>;
rowExpandedHeight: PropTypes.Requireable<number>;
renderEmpty: PropTypes.Requireable<(...args: any[]) => any>;
renderLoading: PropTypes.Requireable<(...args: any[]) => any>;
rowClassName: PropTypes.Requireable<string | ((...args: any[]) => any)>;
rtl: PropTypes.Requireable<boolean>;
style: PropTypes.Requireable<object>;
sortColumn: PropTypes.Requireable<string>;
sortType: PropTypes.Requireable<string | boolean>;
showHeader: PropTypes.Requireable<boolean>;
showScrollArrow: PropTypes.Requireable<boolean>;
shouldUpdateScroll: PropTypes.Requireable<boolean>;
translate3d: PropTypes.Requireable<boolean>;
wordWrap: PropTypes.Requireable<boolean>;
width: PropTypes.Requireable<number>;
virtualized: PropTypes.Requireable<boolean>;
isTree: PropTypes.Requireable<boolean>;
onRowClick: PropTypes.Requireable<(...args: any[]) => any>;
onRowContextMenu: PropTypes.Requireable<(...args: any[]) => any>;
onScroll: PropTypes.Requireable<(...args: any[]) => any>;
onSortColumn: PropTypes.Requireable<(...args: any[]) => any>;
onExpandChange: PropTypes.Requireable<(...args: any[]) => any>;
onTouchStart: PropTypes.Requireable<(...args: any[]) => any>;
onTouchMove: PropTypes.Requireable<(...args: any[]) => any>;
onDataUpdated: PropTypes.Requireable<(...args: any[]) => any>;
highLightRow: PropTypes.Requireable<boolean>;
/**
* 显示查询条
*/
queryBar: PropTypes.Requireable<boolean | object>;
customizedCode: PropTypes.Requireable<string>;
customizable: PropTypes.Requireable<boolean>;
columnDraggable: PropTypes.Requireable<boolean>;
columnTitleEditable: PropTypes.Requireable<boolean>;
columnsDragRender: PropTypes.Requireable<object>;
rowSelection: PropTypes.Requireable<object>;
rowDraggable: PropTypes.Requireable<boolean>;
};
static ProfessionalBar: typeof ProfessionalBar;
static DynamicFilterBar: typeof DynamicFilterBar;
static defaultProps: {
classPrefix: string;
data: never[];
defaultSortType: string;
height: number;
rowHeight: number;
headerHeight: number;
minHeight: number;
rowExpandedHeight: number;
hover: boolean;
highLightRow: boolean;
showHeader: boolean;
showScrollArrow: boolean;
bordered: boolean;
rowKey: string;
translate3d: boolean;
shouldUpdateScroll: boolean;
locale: {
emptyMessage: string;
loading: string;
};
clickScrollLength: {
horizontal: number;
vertical: number;
};
};
static getDerivedStateFromProps(props: TableProps, state: TableState): {
cacheData: object[];
isTree: boolean | undefined;
data: object[];
} | null;
translateDOMPositionXY: null;
scrollListener: any;
bscroll: any;
tableRef: React.RefObject<any>;
scrollbarYRef: React.RefObject<any>;
scrollbarXRef: React.RefObject<any>;
tableBodyRef: React.RefObject<any>;
affixHeaderWrapperRef: React.RefObject<any>;
mouseAreaRef: React.RefObject<any>;
headerWrapperRef: React.RefObject<any>;
tableHeaderRef: React.RefObject<any>;
wheelWrapperRef: React.RefObject<any>;
tableRows: {
[key: string]: [HTMLElement, any];
};
mounted: boolean;
disableEventsTimeoutId: null;
scrollY: number;
scrollX: number;
wheelHandler: any;
minScrollY: any;
minScrollX: any;
mouseArea: any;
touchX: any;
touchY: any;
wheelListener: any;
touchStartListener: any;
touchMoveListener: any;
setRowBottomBorderList: Array<number>;
nextRowZIndex: Array<number>;
_cacheCells: any;
_cacheScrollX: number;
_cacheRenderCols: any;
_cacheChildrenSize: number;
_visibleRows: never[];
_lastRowIndex: string | number;
tableStore: TableStore;
constructor(props: TableProps);
listenWheel: (deltaX: number, deltaY: number) => void;
componentDidMount(): void;
shouldComponentUpdate(nextProps: TableProps, nextState: TableState): boolean;
componentDidUpdate(prevProps: TableProps, prevState: TableState): void;
componentWillUnmount(): void;
getExpandedRowKeys(): string[] | number[];
getSortType(): "desc" | "asc" | undefined;
getScrollCellGroups(): any;
getFixedLeftCellGroups(): any;
getFixedRightCellGroups(): any;
isRTL(): boolean;
getRowHeight(rowData?: {}): number;
/**
* 获取表头高度
*/
getTableHeaderHeight(): number;
/**
* Table 个性化高度变更
*/
handleHeightTypeChange(): void;
/**
* 获取 Table 需要渲染的高度
*/
getTableHeight(): number;
/**
* 处理 column props
* @param column
*/
getColumnProps(column: any): Pick<any, string | number | symbol>;
/**
* 处理columns json -> reactNode
* @param columns
*/
processTableColumns(columns: any[]): (JSX.Element | undefined)[];
/**
* 获取 columns ReactElement 数组
* - 处理 children 中存在 <Column> 数组的情况
* - 过滤 children 中的空项
*/
getTableColumns(): React.ReactNodeArray;
getRecordKey: (record: object, index: number) => any;
getCheckboxPropsByItem: (item: object, index: number) => any;
getDefaultSelection(): any[];
handleSelect: (record: object, rowIndex: number, e: CheckboxChangeEvent) => void;
handleSelectRow: (selectionKey: string, index: number, onSelectFunc: SelectionItemSelectFn) => void;
handleRadioSelect: (record: object, rowIndex: number, e: RadioChangeEvent) => void;
renderSelectionBox: (type: "checkbox" | "radio" | undefined, rowData: object, rowIndex: number) => JSX.Element;
renderRowSelection(fixed: any): JSX.Element | undefined;
getCellDescriptor(): any;
setOffsetByAffix: () => void;
handleWindowScroll: () => void;
affixHorizontalScrollbar: () => void;
affixTableHeader: () => void;
handleSortColumn: (dataKey: string) => void;
handleColumnResizeEnd: (columnWidth: number, _cursorDelta: number, dataKey: any, index: number) => void;
handleColumnResizeStart: (width: number, left: number, fixed: boolean) => void;
handleColumnResizeMove: (width: number, left: number, fixed: boolean) => void;
handleTreeToggle: (rowKey: any, _rowIndex: number, rowData: any) => void;
setSelectedRowKeys(selectedRowKeys: string[], selectionInfo: SelectionInfo): void;
handleScrollX: (delta: number) => void;
handleScrollY: (delta: number) => void;
handleWheel: (deltaX: number, deltaY: number) => void;
debounceScrollEndedCallback: () => void;
handleTouchStart: (event: React.TouchEvent<Element>) => void;
handleTouchMove: ({ e }: {
e: any;
}) => void;
/**
* 当用户在 Table 内使用 tab 键,触发了 onScroll 事件,这个时候应该更新滚动条位置
* https://github.com/rsuite/rsuite/issues/234
*/
handleBodyScroll: (event: React.UIEvent<HTMLDivElement>) => void;
handleDragEnd: (resultDrag: DropResult, provided: ResponderProvided) => void;
initPosition(): void;
initBScroll(tableBody: any): void;
updatePosition(): void;
updatePositionByFixedCell(): void;
shouldHandleWheelX: (delta: number) => boolean;
shouldHandleWheelY: (delta: number) => boolean;
shouldRenderExpandedRow(rowData: object): boolean;
addPrefix: (name: string) => string;
calculateRowMaxHeight(): void;
calculateTableWidth: () => void;
calculateTableContentWidth(prevProps: TableProps): void;
calculateTableContextHeight(prevProps?: TableProps): void;
getControlledScrollTopValue(value: any): number[];
getControlledScrollLeftValue(value: any): number[];
/**
* public method
*/
scrollTop: (top?: number) => void;
scrollLeft: (left?: number) => void;
scrollTo: (coord: {
x: number;
y: number;
}) => void;
bindTableRowsRef: (index: string | number, rowData: any, provided?: DraggableProvided | undefined) => (ref: HTMLElement) => void;
bindRowClick: (rowIndex: string | number, index: string | number, rowData: object) => (event: React.MouseEvent<Element, MouseEvent>) => void;
onRowClick(rowData: any, event: any, rowIndex: any, index: any): void;
bindRowContextMenu: (rowData: object) => (event: React.MouseEvent<Element, MouseEvent>) => void;
renderRowData(bodyCells: any[], rowData: any, props: TableRowProps, shouldRenderExpandedRow?: boolean): JSX.Element;
calculateFixedAndScrollColumn(cells: any[]): {
fixedLeftCells: any[];
fixedRightCells: any[];
scrollCells: any[];
fixedLeftCellGroupWidth: number;
fixedRightCellGroupWidth: number;
};
renderRow(props: TableRowProps, cells: any[], shouldRenderExpandedRow?: boolean, rowData?: any): JSX.Element;
renderRowExpanded(rowData?: object): JSX.Element | null;
renderMouseArea(): JSX.Element;
renderTableHeader(headerCells: any[], rowWidth: number): JSX.Element;
renderTableBody(bodyCells: any[], rowWidth: number): JSX.Element;
renderInfo(locale: PerformanceTableLocal): {} | null | undefined;
renderScrollbar(): JSX.Element | null;
/**
* show loading
*/
renderLoading(): {} | null | undefined;
renderTableToolbar(): JSX.Element | null;
render(): JSX.Element;
}
export {};