@visactor/vtable
Version:
canvas table width high performance
642 lines (641 loc) • 28.7 kB
TypeScript
import type { IBoundsLike, ITextSize } from '@visactor/vutils';
import type { MaybePromiseOrUndefined, ICellHeaderPaths, CellInfo, CustomCellStyle, CustomCellStyleArrangement, IDimensionInfo } from './common';
import type { TableEventListener, TableEventHandlersEventArgumentMap, TableEventHandlersReturnMap, EventListenerId, MousePointerCellEvent } from './events';
import type { MenuListItem, DropDownMenuEventInfo, DropDownMenuHighlightInfo } from './menu';
import type { CellStyle } from './style-define';
import type { ColumnIconOption } from './icon';
import type { ColumnData, ColumnDefine, ColumnsDefine, HeaderData, IndicatorData, SeriesNumberColumnData } from './list-table/layout-map/api';
export type { HeaderData } from './list-table/layout-map/api';
import type { TableTheme } from '../themes/theme';
import type { ICustomRender } from './customElement';
import type { LayoutObjectId } from './table-engine';
import type { Rect } from '../tools/Rect';
import type { Scenegraph } from '../scenegraph/scenegraph';
import type { StateManager } from '../state/state';
import type { EventManager } from '../event/event';
import type { CellAddress, CellRange, CellLocation, ColumnTypeOption, DataSourceAPI, FieldData, FieldDef, FullExtendStyle, HeaderValues, HeightModeDef, HierarchyState, IPivotTableDataConfig, IPagination, ITableThemeDefine, SortState, TableKeyboardOptions, WidthModeDef, IHeaderTreeDefine, IIndicator, StickCell, CustomMergeCell, CustomMerge, IColumnDimension, IRowDimension, TableEventOptions, IPivotChartDataConfig, IListTableDataConfig, IRowSeriesNumber, ColumnSeriesNumber, ColumnStyleOption, WidthAdaptiveModeDef, HeightAdaptiveModeDef, ColumnInfo, RowInfo, CellAddressWithBound, Placement, CustomMergeCellFunc } from '.';
import type { TooltipOptions } from './tooltip';
import type { ICustomLayout } from './customLayout';
import type { CachedDataSource, DataSource } from '../data';
import type { MenuHandler } from '../components/menu/dom/MenuHandler';
import type { PivotHeaderLayoutMap } from '../layout/pivot-header-layout';
import type { SimpleHeaderLayoutMap } from '../layout';
import type { TooltipHandler } from '../components/tooltip/TooltipHandler';
import type { BodyHelper } from '../body-helper/body-helper';
import type { HeaderHelper } from '../header-helper/header-helper';
import type { EventHandler } from '../event/EventHandler';
import type { NumberMap } from '../tools/NumberMap';
import type { FocusInput } from '../core/FouseInput';
import type { ITableLegendOption } from './component/legend';
import type { DataSet } from '@visactor/vdataset';
import type { Title } from '../components/title/title';
import type { ITitle } from './component/title';
import type { DiscreteTableLegend } from '../components/legend/discrete-legend/discrete-legend';
import type { ContinueTableLegend } from '../components/legend/continue-legend/continue-legend';
import type { NumberRangeMap } from '../layout/row-height-map';
import type { RowSeriesNumberHelper } from '../core/row-series-number-helper';
import type { ReactCustomLayout } from '../components/react/react-custom-layout';
import type { ISortedMapItem } from '../data/DataSource';
import type { IAnimationAppear, ITableAnimationOption } from './animation/appear';
import type { IEmptyTip } from './component/empty-tip';
import type { EmptyTip } from '../components/empty-tip/empty-tip';
import type { EditManager } from '../edit/edit-manager';
import type { TableAnimationManager } from '../core/animation';
import type { CustomCellStylePlugin } from '../plugins/custom-cell-style';
export interface IBaseTableProtected {
element: HTMLElement;
handler: EventHandler;
focusControl: FocusInput;
canvas: HTMLCanvasElement;
context: CanvasRenderingContext2D;
rowCount: number;
colCount: number;
frozenColCount: number;
unfreezeAllOnExceedsMaxWidth: boolean;
allowFrozenColCount: number;
frozenRowCount: number;
rightFrozenColCount: number;
bottomFrozenRowCount: number;
defaultRowHeight: number | 'auto';
defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[];
defaultColWidth: number;
defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[];
keyboardOptions?: TableKeyboardOptions;
eventOptions?: TableEventOptions;
rowSeriesNumber?: IRowSeriesNumber;
columnSeriesNumber?: ColumnSeriesNumber[];
columnResizeMode?: 'all' | 'none' | 'header' | 'body';
rowResizeMode?: 'all' | 'none' | 'header' | 'body';
columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';
rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';
dragHeaderMode?: 'all' | 'none' | 'column' | 'row';
frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';
cachedRecordsRowHeightMap: NumberMap<string | number>;
_rowHeightsMap: NumberRangeMap;
_colWidthsMap: NumberMap<string | number>;
_colContentWidthsMap: NumberMap<string | number>;
_colWidthsLimit: {
[col: number]: {
max?: string | number;
min?: string | number;
};
};
calcWidthContext: {
_: IBaseTableProtected;
full: number;
};
_rowRangeHeightsMap: Map<string, number>;
_colRangeWidthsMap: Map<string, number>;
_widthResizedColMap: Set<number | string>;
_heightResizedRowMap: Set<number>;
bodyHelper: BodyHelper;
headerHelper: HeaderHelper;
rowSeriesNumberHelper: RowSeriesNumberHelper;
cellTextOverflows: {
[at: string]: string;
};
focusedTable: boolean;
releaseList?: {
release: () => void;
}[] | null;
theme: TableTheme;
transpose?: boolean;
pixelRatio?: number;
menu: {
renderMode?: 'canvas' | 'html';
defaultHeaderMenuItems?: MenuListItem[] | ((args: {
row: number;
col: number;
table: BaseTableAPI;
}) => MenuListItem[]);
contextMenuItems?: MenuListItem[] | ((field: FieldDef, row: number, col: number, table?: BaseTableAPI) => MenuListItem[]);
dropDownMenuHighlight?: DropDownMenuHighlightInfo[];
parentElement?: HTMLElement;
};
tooltip: {
parentElement: HTMLElement;
renderMode: 'html' | 'canvas';
isShowOverflowTextTooltip: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);
overflowTextTooltipDisappearDelay?: number;
confine: boolean;
position: Placement;
};
dataSourceEventIds?: EventListenerId[];
layoutMap: SimpleHeaderLayoutMap | PivotHeaderLayoutMap;
headerValues?: HeaderValues;
tooltipHandler: TooltipHandler;
sortState: SortState | SortState[];
multipleSort?: boolean;
dataSource: DataSource | CachedDataSource;
records?: any;
allowRangePaste: boolean;
autoWrapText?: boolean;
enableLineBreak?: boolean;
menuHandler: MenuHandler;
limitMaxAutoWidth?: boolean | number;
limitMinWidth?: number;
limitMinHeight?: number;
title?: Title;
legends?: (DiscreteTableLegend | ContinueTableLegend)[];
emptyTip?: EmptyTip;
renderChartAsync?: boolean;
stick: {
changedCells: Map<string, StickCell>;
};
customMergeCell?: CustomMergeCellFunc;
overscrollBehavior?: 'auto' | 'none';
modifiedViewBoxTransform?: boolean;
bodyDomContainer?: HTMLElement;
headerDomContainer?: HTMLElement;
frozenBodyDomContainer?: HTMLElement;
frozenHeaderDomContainer?: HTMLElement;
rightFrozenBodyDomContainer?: HTMLElement;
rightFrozenHeaderDomContainer?: HTMLElement;
frozenBottomDomContainer?: HTMLElement;
bottomDomContainer?: HTMLElement;
rightFrozenBottomDomContainer?: HTMLElement;
useOneRowHeightFillAll?: boolean;
enableTreeNodeMerge?: boolean;
_oldRowCount?: number;
_oldColCount?: number;
}
export interface BaseTableConstructorOptions {
frozenColCount?: number;
frozenRowCount?: number;
rightFrozenColCount?: number;
bottomFrozenRowCount?: number;
maxFrozenWidth?: number | string;
unfreezeAllOnExceedsMaxWidth?: boolean;
allowFrozenColCount?: number;
defaultRowHeight?: number | 'auto';
defaultHeaderRowHeight?: (number | 'auto') | (number | 'auto')[];
defaultColWidth?: number;
defaultHeaderColWidth?: (number | 'auto') | (number | 'auto')[];
keyboardOptions?: TableKeyboardOptions;
excelOptions?: {
fillHandle?: boolean | ((args: {
selectRanges: CellRange[];
table: BaseTableAPI;
}) => boolean);
};
eventOptions?: TableEventOptions;
container?: HTMLElement | null;
columnResizeMode?: 'all' | 'none' | 'header' | 'body';
rowResizeMode?: 'all' | 'none' | 'header' | 'body';
dragHeaderMode?: 'all' | 'none' | 'column' | 'row';
showFrozenIcon?: boolean;
padding?: {
top?: number;
bottom?: number;
left?: number;
right?: number;
} | number;
hover?: {
highlightMode?: 'cross' | 'column' | 'row' | 'cell';
disableHover?: boolean;
disableHeaderHover?: boolean;
disableAxisHover?: boolean;
};
select?: {
highlightMode?: 'cross' | 'column' | 'row' | 'cell';
headerSelectMode?: 'inline' | 'cell' | 'body';
disableSelect?: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);
disableHeaderSelect?: boolean;
blankAreaClickDeselect?: boolean;
outsideClickDeselect?: boolean;
disableDragSelect?: boolean;
highlightInRange?: boolean;
makeSelectCellVisible?: boolean;
};
menu?: {
renderMode?: 'canvas' | 'html';
defaultHeaderMenuItems?: MenuListItem[] | ((args: {
row: number;
col: number;
table: BaseTableAPI;
}) => MenuListItem[]);
contextMenuItems?: MenuListItem[] | ((field: string, row: number, col: number, table?: BaseTableAPI) => MenuListItem[]);
dropDownMenuHighlight?: DropDownMenuHighlightInfo[];
parentElement?: HTMLElement;
};
tooltip?: {
parentElement?: HTMLElement;
renderMode?: 'html';
isShowOverflowTextTooltip?: boolean | ((col: number, row: number, table: BaseTableAPI) => boolean);
overflowTextTooltipDisappearDelay?: number;
confine?: boolean;
position?: Placement;
};
theme?: ITableThemeDefine;
widthMode?: 'standard' | 'adaptive' | 'autoWidth';
heightMode?: 'standard' | 'adaptive' | 'autoHeight';
autoFillWidth?: boolean;
autoFillHeight?: boolean;
widthAdaptiveMode?: WidthAdaptiveModeDef;
heightAdaptiveMode?: HeightAdaptiveModeDef;
autoHeightInAdaptiveMode?: boolean;
pixelRatio?: number;
customRender?: ICustomRender;
autoWrapText?: boolean;
enableLineBreak?: boolean;
maxCharactersNumber?: number;
maxOperatableRecordCount?: number;
limitMaxAutoWidth?: boolean | number;
limitMinWidth?: boolean | number;
limitMinHeight?: boolean | number;
maintainedDataCount?: number;
maintainedColumnCount?: number;
legends?: ITableLegendOption | ITableLegendOption[];
title?: ITitle;
emptyTip?: true | IEmptyTip;
renderChartAsync?: boolean;
renderChartAsyncBatchCount?: number;
customMergeCell?: CustomMergeCell;
mode?: 'node' | 'browser';
modeParams?: any;
canvasWidth?: number | 'auto';
canvasHeight?: number | 'auto';
maxCanvasWidth?: number;
maxCanvasHeight?: number;
overscrollBehavior?: 'auto' | 'none';
resizeTime?: number;
canvas?: HTMLCanvasElement;
viewBox?: IBoundsLike;
chartOption?: any;
disableInteraction?: boolean;
specFormat?: (spec: any, chartInstance: any, chart: any) => {
needFormatSpec: boolean;
spec?: any;
updateSpec?: boolean;
};
specTransformInCell?: (spec: any, col: number, row: number) => any;
beforeRender?: (stage: any) => void;
afterRender?: (stage: any) => void;
rowSeriesNumber?: IRowSeriesNumber;
customCellStyle?: CustomCellStyle[];
customCellStyleArrangement?: CustomCellStyleArrangement[];
columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';
clearDOM?: boolean;
customConfig?: {
multilinesForXTable?: boolean;
enableDataAnalysis?: boolean;
_disableColumnAndRowSizeRound?: boolean;
imageMargin?: number;
createReactContainer?: boolean;
shrinkSparklineFirst?: boolean;
notUpdateInColumnRowMove?: boolean;
limitContentHeight?: boolean;
imageAnonymous?: boolean;
scrollEventAlwaysTrigger?: boolean;
enablePivotPathCache?: boolean;
};
animationAppear?: boolean | IAnimationAppear;
renderOption?: any;
formatCopyValue?: (value: string) => string;
customComputeRowHeight?: (computeArgs: {
row: number;
table: BaseTableAPI;
}) => number | 'auto' | undefined;
tableSizeAntiJitter?: boolean;
disableDblclickAutoResizeColWidth?: boolean;
resize?: {
columnResizeMode?: 'all' | 'none' | 'header' | 'body';
rowResizeMode?: 'all' | 'none' | 'header' | 'body';
disableDblclickAutoResizeColWidth?: boolean;
};
dragOrder?: {
dragHeaderMode?: 'all' | 'none' | 'column' | 'row';
validateDragOrderOnEnd?: (source: CellAddress, target: CellAddress) => boolean;
};
}
export interface BaseTableAPI {
id: string;
recordsCount: number;
rowCount: number;
colCount: number;
tableNoFrameWidth: number;
tableNoFrameHeight: number;
frozenRowCount: number;
frozenColCount: number;
bottomFrozenRowCount: number;
rightFrozenColCount: number;
defaultHeaderRowHeight: (number | 'auto') | (number | 'auto')[];
defaultRowHeight: number;
defaultColWidth: number;
defaultHeaderColWidth: (number | 'auto') | (number | 'auto')[];
keyboardOptions: TableKeyboardOptions | null;
eventOptions: TableEventOptions | null;
showFrozenIcon: boolean;
readonly canvas: HTMLCanvasElement;
readonly visibleRowCount: number;
readonly visibleColCount: number;
scrollLeft: number;
scrollTop: number;
options: BaseTableConstructorOptions;
globalDropDownMenu?: MenuListItem[] | ((args: {
row: number;
col: number;
table: BaseTableAPI;
}) => MenuListItem[]);
customRender?: ICustomRender;
dataSource: DataSourceAPI;
theme: TableTheme;
allowFrozenColCount: number;
internalProps: IBaseTableProtected;
pagination?: IPagination;
tableX: number;
tableY: number;
widthMode: WidthModeDef;
heightMode: HeightModeDef;
autoFillWidth: boolean;
autoFillHeight?: boolean;
widthAdaptiveMode: WidthAdaptiveModeDef;
heightAdaptiveMode: HeightAdaptiveModeDef;
isReleased: boolean;
rowHeightsMap: NumberRangeMap;
colWidthsMap: NumberMap<string | number>;
on: <TYPE extends keyof TableEventHandlersEventArgumentMap>(type: TYPE, listener: TableEventListener<TYPE>) => EventListenerId;
_vDataSet?: DataSet;
scenegraph: Scenegraph;
stateManager: StateManager;
eventManager: EventManager;
animationManager: TableAnimationManager;
editorManager: EditManager;
rowHeaderLevelCount: number;
columnHeaderLevelCount: number;
canvasWidth?: number;
canvasHeight?: number;
columnWidthComputeMode?: 'normal' | 'only-header' | 'only-body';
_rowRangeHeightsMap: Map<string, number>;
_colRangeWidthsMap: Map<string, number>;
canvasSizeSeted?: boolean;
pixelRatio: number;
getDrawRange: () => Rect;
_getMouseAbstractPoint: (evt: TouchEvent | MouseEvent | undefined, isAddScroll?: boolean) => {
x: number;
y: number;
inTable: boolean;
};
getElement: () => HTMLElement;
getContainer: () => HTMLElement;
setFrozenColCount: (count: number) => void;
_setFrozenColCount: (count: number) => void;
_updateSize: () => void;
render: () => void;
throttleInvalidate: () => void;
getRowHeight: (row: number) => number;
getDefaultRowHeight: (row: number) => number | 'auto';
getDefaultColumnWidth: (col: number) => number | 'auto';
_setRowHeight: (row: number, height: number, clearCache?: boolean) => void;
setRowHeight: (row: number, height: number) => void;
getColWidth: (col: number) => number;
getColWidthDefined: (col: number) => string | number;
getColWidthDefinedNumber: (col: number) => number;
_setColWidth: (col: number, width: number | string, clearCache?: boolean, skipCheckFrozen?: boolean) => void;
setColWidth: (col: number, width: number) => void;
_getColContentWidth: (col: number) => number;
_setColContentWidth: (col: number, width: number | string, clearCache?: boolean) => void;
getMaxColWidth: (col: number) => number;
setMaxColWidth: (col: number, maxwidth: string | number) => void;
getMinColWidth: (col: number) => number;
setMinColWidth: (col: number, minwidth: string | number) => void;
getCellRect: (col: number, row: number) => Rect;
getCellRelativeRect: (col: number, row: number) => Rect;
getCellsRect: (startCol: number, startRow: number, endCol: number, endRow: number) => Rect;
getCellRangeRect: (cellRange: CellRange | CellAddress) => Rect;
getCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => Rect;
getVisibleCellRangeRelativeRect: (cellRange: CellRange | CellAddress) => Rect;
isFrozenCell: (col: number, row: number) => {
row: boolean;
col: boolean;
} | null;
getRowAt: (absoluteY: number) => {
top: number;
row: number;
bottom: number;
};
getColAt: (absoluteX: number) => {
left: number;
col: number;
right: number;
};
getCellAt: (absoluteX: number, absoluteY: number) => CellAddressWithBound;
getCellAtRelativePosition: (absoluteX: number, absoluteY: number) => CellAddressWithBound;
_makeVisibleCell: (col: number, row: number) => void;
getCellOverflowText: (col: number, row: number) => string | null;
getColsWidth: (startCol: number, endCol: number) => number;
getRowsHeight: (startRow: number, endRow: number) => number;
release: () => void;
addReleaseObj: (releaseObj: {
release: () => void;
}) => void;
_getCellStyle: (col: number, row: number) => FullExtendStyle;
clearCellStyleCache: () => void;
getFrozenRowsHeight: () => number;
getFrozenColsWidth: () => number;
getBottomFrozenRowsHeight: () => number;
getRightFrozenColsWidth: () => number;
selectCell: (col: number, row: number, isShift?: boolean, isCtrl?: boolean, makeSelectCellVisible?: boolean, skipBodyMerge?: boolean) => void;
selectCells: (cellRanges: CellRange[]) => void;
getAllRowsHeight: () => number;
getAllColsWidth: () => number;
off: (id: EventListenerId) => void;
getBodyField: (col: number, row: number) => FieldDef | undefined;
getRecordByCell: (col: number, row: number) => MaybePromiseOrUndefined;
getTableIndexByRecordIndex: (recordIndex: number) => number;
getTableIndexByField: (field: FieldDef) => number;
getCellAddrByFieldRecord: (field: FieldDef, recordIndex: number) => CellAddress;
getRecordShowIndexByCell: (col: number, row: number) => number;
getRecordStartRowByRecordIndex: (index: number) => number;
getHeaderField: (col: number, row: number) => any | undefined;
_getHeaderCellBySortState: (sortState: SortState) => CellAddress | undefined;
getHeaderDefine: (col: number, row: number) => ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber;
_getHeaderLayoutMap: (col: number, row: number) => HeaderData | SeriesNumberColumnData;
getContext: () => CanvasRenderingContext2D;
getCellRange: (col: number, row: number) => CellRange;
_resetFrozenColCount: () => void;
isCellRangeEqual: (col: number, row: number, targetCol: number, targetRow: number) => boolean;
_getLayoutCellId: (col: number, row: number) => LayoutObjectId;
_getBodyLayoutMap: (col: number, row: number) => ColumnData | IndicatorData | SeriesNumberColumnData;
getBodyColumnDefine: (col: number, row: number) => ColumnDefine | IRowSeriesNumber | ColumnSeriesNumber;
getBodyColumnType: (col: number, row: number) => ColumnTypeOption;
getCellType: (col: number, row: number) => ColumnTypeOption;
fireListeners: <TYPE extends keyof TableEventHandlersEventArgumentMap>(type: TYPE, event: TableEventHandlersEventArgumentMap[TYPE]) => TableEventHandlersReturnMap[TYPE][];
updatePagination: (cof: IPagination) => void;
getHeaderDescription: (col: number, row: number) => string | undefined;
getCellValue: (col: number, row: number, skipCustomMerge?: boolean) => string | null;
getCellOriginValue: (col: number, row: number) => any;
getCellRawValue: (col: number, row: number) => FieldData;
getCellOriginRecord: (col: number, row: number) => MaybePromiseOrUndefined;
getCellRawRecord: (col: number, row: number) => MaybePromiseOrUndefined;
_dropDownMenuIsHighlight: (col: number, row: number, index: number) => boolean;
refreshRowColCount: () => void;
_hasField: (field: FieldDef, col: number, row: number) => boolean;
getCellHeaderPaths: (col: number, row: number) => ICellHeaderPaths;
getCellLocation: (col: number, row: number) => CellLocation;
getCellIcons: (col: number, row: number) => ColumnIconOption[];
getMenuInfo: (col: number, row: number, type: string) => DropDownMenuEventInfo;
getCellStyle: (col: number, row: number) => CellStyle;
getHierarchyState: (col: number, row: number) => HierarchyState | null;
_canDragHeaderPosition: (col: number, row: number) => boolean;
isHeader: (col: number, row: number) => boolean;
isColumnHeader: (col: number, row: number) => boolean;
isCornerHeader: (col: number, row: number) => boolean;
isRowHeader: (col: number, row: number) => boolean;
getCopyValue: () => string;
getSelectedCellInfos: () => CellInfo[][];
getSelectedCellRanges: () => CellRange[];
getCellInfo: (col: number, row: number) => Omit<MousePointerCellEvent, 'target'>;
showTooltip: (col: number, row: number, tooltipOptions?: TooltipOptions) => void;
measureText: (text: string, font: {
fontSize: number;
fontWeight?: string | number;
fontFamily: string;
}) => ITextSize;
_canResizeColumn: (col: number, row: number) => boolean;
_canResizeRow: (col: number, row: number) => boolean;
getCustomRender: (col: number, row: number) => ICustomRender;
getCustomLayout: (col: number, row: number) => ICustomLayout;
isListTable: () => boolean;
isPivotTable: (() => boolean) & (() => boolean);
isPivotChart: (() => boolean) & (() => boolean);
_clearColRangeWidthsMap: (col?: number) => void;
_clearRowRangeHeightsMap: (row?: number) => void;
clearRowHeightCache: () => void;
clearColWidthCache: () => void;
toggleHierarchyState: (col: number, row: number) => void;
resize: () => void;
setCanvasSize: (width: number, height: number) => void;
getMergeCellRect: (col: number, row: number) => Rect;
getTargetColAt: (absoluteX: number) => ColumnInfo | null;
getTargetRowAt: (absoluteY: number) => RowInfo | null;
getTargetColAtConsiderRightFrozen: (absoluteX: number, isConsider: boolean) => ColumnInfo | null;
getTargetRowAtConsiderBottomFrozen: (absoluteY: number, isConsider: boolean) => RowInfo | null;
renderWithRecreateCells: () => void;
_adjustColWidth: (col: number, orgWidth: number) => number;
_colWidthDefineToPxWidth: (width: string | number) => number;
isFrozenColumn: (col: number, row?: number) => boolean;
isLeftFrozenColumn: (col: number, row?: number) => boolean;
isRightFrozenColumn: (col: number, row?: number) => boolean;
isFrozenRow: (col: number, row?: number) => boolean;
isTopFrozenRow: (col: number, row?: number) => boolean;
isBottomFrozenRow: (col: number, row?: number) => boolean;
hasCustomMerge: () => boolean;
getCustomMerge: (col: number, row: number) => undefined | (Omit<CustomMerge, 'style'> & {
style?: FullExtendStyle;
});
getBodyVisibleCellRange: () => {
rowStart: number;
colStart: number;
rowEnd: number;
colEnd: number;
};
getBodyVisibleColRange: () => {
colStart: number;
colEnd: number;
};
getBodyVisibleRowRange: () => {
rowStart: number;
rowEnd: number;
};
_hasCustomRenderOrLayout: () => boolean;
getBodyIndexByTableIndex: (col: number, row: number) => CellAddress;
getTableIndexByBodyIndex: (col: number, row: number) => CellAddress;
scrollToCell: (cellAddr: {
col?: number;
row?: number;
}, animationOption?: ITableAnimationOption | boolean) => void;
scrollToRow: (row: number, animationOption?: ITableAnimationOption | boolean) => void;
scrollToCol: (col: number, animationOption?: ITableAnimationOption | boolean) => void;
registerCustomCellStyle: (customStyleId: string, customStyle: ColumnStyleOption | undefined | null) => void;
arrangeCustomCellStyle: (cellPos: {
col?: number;
row?: number;
range?: CellRange;
}, customStyleId: string) => void;
checkHasColumnAutoWidth: () => boolean;
_moveHeaderPosition: (source: CellAddress, target: CellAddress) => {
sourceIndex: number;
targetIndex: any;
sourceSize: any;
targetSize: any;
moveType: 'column' | 'row';
};
changeRecordOrder: (source: number, target: number) => void;
isSeriesNumber: (col: number, row?: number) => boolean;
isHasSeriesNumber: () => boolean;
leftRowSeriesNumberCount: number;
isAutoRowHeight: (row?: number) => boolean;
reactCustomLayout?: ReactCustomLayout;
checkReactCustomLayout: (removeAllContainer: () => void) => void;
setSortedIndexMap: (field: FieldDef, filedMap: ISortedMapItem) => void;
exportImg: () => string;
exportCellImg: (col: number, row: number, options?: {
disableBackground?: boolean;
disableBorder?: boolean;
}) => string;
exportCellRangeImg: (cellRange: CellRange) => string;
exportCanvas: () => HTMLCanvasElement;
setPixelRatio: (pixelRatio: number) => void;
bodyDomContainer?: HTMLElement;
headerDomContainer?: HTMLElement;
frozenBodyDomContainer?: HTMLElement;
frozenHeaderDomContainer?: HTMLElement;
rightFrozenBodyDomContainer?: HTMLElement;
rightFrozenHeaderDomContainer?: HTMLElement;
frozenBottomDomContainer?: HTMLElement;
bottomDomContainer?: HTMLElement;
rightFrozenBottomDomContainer?: HTMLElement;
showMoverLine: (col: number, row: number) => void;
hideMoverLine: (col: number, row: number) => void;
disableScroll: () => void;
enableScroll: () => void;
customCellStylePlugin?: CustomCellStylePlugin;
headerStyleCache: Map<string, any>;
bodyBottomStyleCache: Map<string, any>;
bodyStyleCache: Map<string, any>;
bodyMergeTitleCache: Map<string, any>;
isSeriesNumberInBody: (col: number, row: number) => boolean;
getGroupTitleLevel: (col: number, row: number) => number | undefined;
_getMaxFrozenWidth: () => number;
_getComputedFrozenColCount: (frozenColCount: number) => number;
}
export interface ListTableProtected extends IBaseTableProtected {
records: any[] | null;
dataConfig?: IListTableDataConfig;
columns: ColumnsDefine;
layoutMap: SimpleHeaderLayoutMap;
columnWidthConfig?: {
key: string;
width: number;
}[];
}
export interface PivotTableProtected extends IBaseTableProtected {
records: any[] | undefined;
recordsIsTwoDimensionalArray?: boolean;
layoutMap: PivotHeaderLayoutMap;
dataConfig?: IPivotTableDataConfig;
columnTree?: IHeaderTreeDefine[];
rowTree?: IHeaderTreeDefine[];
rows?: (IRowDimension | string)[];
columns?: (IColumnDimension | string)[];
indicators?: (IIndicator | string)[];
columnWidthConfig?: {
dimensions: IDimensionInfo[];
width: number;
}[];
columnWidthConfigForRowHeader?: {
dimensions: IDimensionInfo[];
width: number;
}[];
}
export interface PivotChartProtected extends IBaseTableProtected {
records: any[] | Record<string, any[]>;
layoutMap: PivotHeaderLayoutMap;
dataConfig?: IPivotChartDataConfig;
columnTree?: IHeaderTreeDefine[];
rowTree?: IHeaderTreeDefine[];
rows?: (IRowDimension | string)[];
columns?: (IColumnDimension | string)[];
indicators?: (IIndicator | string)[];
}