import React, { CSSProperties, ReactNode } from 'react'; import { noop } from 'rxjs'; import { ArtColumn } from '../interfaces'; import { TableDOMHelper } from './helpers/TableDOMUtils'; import { ResolvedUseVirtual, VerticalRenderRange, VirtualEnum } from './interfaces'; import { LoadingContentWrapperProps } from './loading'; import { BaseTableCSSVariables } from './styles'; export declare type PrimaryKey = string | ((record: any) => string); export interface BaseTableProps { /** 主键 */ primaryKey?: PrimaryKey; /** 表格展示的数据源 */ dataSource: any[]; /** 表格页脚数据源 */ footerDataSource?: any[]; /** 表格的列配置 */ columns: ArtColumn[]; /** 是否开启虚拟滚动 */ useVirtual?: VirtualEnum | { horizontal?: VirtualEnum; vertical?: VirtualEnum; header?: VirtualEnum; }; /** 虚拟滚动开启情况下,表格中每一行的预估高度 */ estimatedRowHeight?: number; /** 性能差浏览器和处理器,性能差则启动快速滚动优化,默认为 false */ isLowPerformance?: boolean; /** @deprecated 表格头部是否置顶,默认为 true。请使用 isStickyHeader 代替 */ isStickyHead?: boolean; /** 表格头部是否置顶,默认为 true */ isStickyHeader?: boolean; /** 表格置顶后,距离顶部的距离 */ stickyTop?: number; /** 表格页脚是否置底,默认为 true */ isStickyFooter?: boolean; /** 表格页脚置底后,距离底部的距离 */ stickyBottom?: number; /** 自定义类名 */ className?: string; /** 自定义内联样式 */ style?: CSSProperties & BaseTableCSSVariables; /** 表格是否具有头部 */ hasHeader?: boolean; /** 表格是否具有横向的粘性滚动条 */ hasStickyScroll?: boolean; /** 横向粘性滚动条高度 */ stickyScrollHeight?: 'auto' | number; /** 表格滚动条的宽度 */ scrollbarWidth?: number; /** 使用来自外层 div 的边框代替单元格的外边框 */ useOuterBorder?: boolean; /** 显示表格单元格边框线 */ bordered?: boolean; /** 表格是否在加载中 */ isLoading?: boolean; /** 数据为空时,单元格的高度 */ emptyCellHeight?: number; /** @deprecated 数据为空时,表格的展示内容。请使用 components.EmptyContent 代替 */ emptyContent?: ReactNode; /** 覆盖表格内部用到的组件 */ components?: { /** 表格加载时,表格内容的父组件 */ LoadingContentWrapper?: React.ComponentType; /** 表格加载时的加载图标 */ LoadingIcon?: React.ComponentType; /** 数据为空时,表格的展示内容。 */ EmptyContent?: React.ComponentType; }; /** 列的默认宽度 */ defaultColumnWidth?: number; /** * @deprecated * flowRoot 在表格 v2.4 后不再需要提供,请移除该属性 * */ flowRoot?: never; /** 虚拟滚动调试标签,用于表格内部调试使用 */ virtualDebugLabel?: string; getRowProps?(record: any, rowIndex: number): React.HTMLAttributes; getTableProps?(): React.HTMLAttributes; setTableWidth?(tableWidth: number): void; setTableDomHelper?(domHelper: TableDOMHelper): void; setRowHeightManager?(rowHeightManager: any): void; cssVariables?: { [key: string]: any; }; enableCSSVariables?: boolean; scrollLoad?: { /** 表格滚动加载回调 */ callback(startIndex: number): void; /** 每个数据块的数据条数 */ blockSize?: number; }; direction?: string; } export interface BaseTableState { /** 是否要展示自定义滚动条(stickyScroll) */ hasScroll: boolean; /** 是否存在纵向滚动条 */ hasScrollY: boolean; /** 是否需要渲染 lock sections * 当表格较宽时,所有的列都能被完整的渲染,此时不需要渲染 lock sections * 只有当「整个表格的宽度」小于「每一列渲染宽度之和」时,lock sections 才需要被渲染 */ needRenderLock: boolean; /** 纵向虚拟滚动偏移量 */ offsetY: number; /** 纵向虚拟滚动 最大渲染尺寸 */ maxRenderHeight: number; /** 横向虚拟滚动偏移量 */ offsetX: number; /** 横向虚拟滚动 最大渲染尺寸 */ maxRenderWidth: number; /** 快速滚动时保留的上一次渲染数据 */ previousRenderData?: { offsetY: number; maxRenderHeight: number; maxRenderWidth: number; verticalRenderRange: VerticalRenderRange; }; } export declare class BaseTable extends React.Component { static defaultProps: { hasHeader: boolean; isStickyHeader: boolean; stickyTop: number; footerDataSource: any[]; isStickyFooter: boolean; stickyBottom: number; hasStickyScroll: boolean; stickyScrollHeight: string; useVirtual: string; estimatedRowHeight: number; isLowPerformance: boolean; isLoading: boolean; components: {}; getTableProps: typeof noop; getRowProps: typeof noop; dataSource: any[]; useOuterBorder: boolean; }; private rowHeightManager; private artTableWrapperRef; private domHelper; private rootSubscription; private resizeSubject; private lastInfo; private props$; private hasScrollY; private resizeObserver?; private offsetY; private fastScrollManager; private topBlankRef; private bottomBlankRef; /** @deprecated BaseTable.getDoms() 已经过时,请勿调用 */ getDoms(): TableDOMHelper; constructor(props: Readonly); /** 自定义滚动条宽度为table宽度,使滚动条滑块宽度相同 */ private updateStickyScroll; private renderTableHeader; private updateOffsetX; private syncHorizontalScrollFromTableBody; /** 同步横向滚动偏移量 */ private syncHorizontalScroll; getVerticalRenderRange(useVirtual: ResolvedUseVirtual): VerticalRenderRange; private handleRowMouseEnter; private handleRowMouseLeave; private renderTableBody; private renderTableFooter; private renderLockShadows; private renderStickyScroll; private getScrollBarWidth; private getStickyScrollContainerStyle; render(): JSX.Element; componentDidMount(): void; componentDidUpdate(prevProps: Readonly, prevState: Readonly): void; private didMountOrUpdate; private updateScrollLeftWhenLayoutChanged; private initSubscriptions; componentWillUnmount(): void; /** 更新 DOM 节点的引用,方便其他方法直接操作 DOM */ private updateDOMHelper; private updateRowHeightManager; /** 计算表格所有列的渲染宽度之和,判断表格是否需要渲染锁列 */ private adjustNeedRenderLock; }