UNPKG

@antv/s2

Version:

effective spreadsheet render core lib

212 lines (211 loc) 8.18 kB
import EE from '@antv/event-emitter'; import { Canvas, FederatedPointerEvent as CanvasEvent, type CanvasConfig } from '@antv/g'; import type { BaseTooltipOperatorMenuOptions, CellEventTarget, EmitterType, Fields, InternalFullyTheme, Pagination, S2CellType, S2DataConfig, S2MountContainer, S2Options, S2RenderOptions, S2Theme, SimpleData, SimplePalette, SortMethod, ThemeCfg, ThemeName, TooltipContentType, TooltipData, TooltipOptions, TooltipShowOptions, Total } from '../common/interface'; import { Store } from '../common/store'; import type { BaseDataSet } from '../data-set'; import type { BaseFacet } from '../facet'; import type { Node } from '../facet/layout/node'; import { RootInteraction } from '../interaction/root'; import { HdAdapter } from '../ui/hd-adapter'; import { BaseTooltip } from '../ui/tooltip'; import type { PivotSheet } from './pivot-sheet'; import type { TableSheet } from './table-sheet'; export declare abstract class SpreadSheet extends EE { themeName: ThemeName; theme: InternalFullyTheme; store: Store; dataCfg: S2DataConfig; options: S2Options; dataSet: BaseDataSet; facet: BaseFacet; tooltip: BaseTooltip; container: Canvas; interaction: RootInteraction; hdAdapter: HdAdapter; /** * 表格是否已销毁 */ destroyed: boolean; protected abstract bindEvents(): void; abstract getDataSet(): BaseDataSet; abstract isPivotMode(): this is PivotSheet; abstract isTableMode(): this is TableSheet; abstract isCustomRowFields(): boolean; abstract isHierarchyTreeType(): boolean; abstract isFrozenRowHeader(): boolean; abstract isValueInCols(): boolean; protected abstract buildFacet(): void; abstract clearDrillDownData(rowNodeId?: string, preventRender?: boolean): Promise<void>; abstract groupSortByMethod(sortMethod: SortMethod, meta: Node): Promise<void> | void; constructor(dom: S2MountContainer, dataCfg: S2DataConfig, options: S2Options | null); protected setupDataConfig(dataCfg: S2DataConfig): void; protected setupOptions(options: S2Options | null | undefined): void; isCustomHeaderFields(fieldType?: keyof Pick<Fields, 'columns' | 'rows'>): boolean; isCustomColumnFields(): boolean; private setOverscrollBehavior; private restoreOverscrollBehavior; private setDebug; protected initTheme(): void; private getMountContainer; private initHdAdapter; protected initInteraction(): void; private initTooltip; private renderTooltip; private getTargetCell; /** * 展示 Tooltip 提示 * @alias s2.tooltip.show() * @example s2.showTooltip({ position: { x: event.clientX, y: event.clientY, }, content: '<div>xxx</div>', options: {} }) */ showTooltip<T = TooltipContentType, Menu = BaseTooltipOperatorMenuOptions>(showOptions: TooltipShowOptions<T, Menu>): Promise<void>; showTooltipWithInfo(event: CanvasEvent | MouseEvent, cellInfos: TooltipData[], options?: TooltipOptions): Promise<void> | void; hideTooltip(): void; destroyTooltip(): void; registerIcons(): void; /** * 更新表格数据 * @param dataCfg 数据源配置 * @param reset 是否重置数据源配置, 直接使用传入的 dataCfg,不再与之前的配置进行合并 * @example s2.setDataCfg(dataCfg) * @example s2.setDataCfg(dataCfg, true) */ setDataCfg<T extends boolean = false>(dataCfg: T extends true ? S2DataConfig | undefined | null : Partial<S2DataConfig>, reset?: T): void; /** * 更新表格配置 * @param options 配置 * @param reset 是否重置配置, 直接使用传入的 options,不再与之前的配置进行合并 * @example s2.setOptions(dataCfg) * @example s2.setOptions(dataCfg, true) */ setOptions<T extends boolean = false>(options: T extends true ? S2Options | undefined | null : Partial<S2Options>, reset?: T): void; /** * 重置表格数据 * @example s2.resetDataCfg() */ resetDataCfg(): void; /** * 重置表格配置 * @example s2.resetOptions() */ resetOptions(): void; private resetHiddenColumnsDetailInfoIfNeeded; private doRender; /** * 渲染表格 * @param reloadData * @param options * @example s2.render(true) s2.render(false) s2.render({ reloadData: true; rebuildDataSet: true; rebuildHiddenColumnsDetail: true; }) */ render(options?: S2RenderOptions | boolean): Promise<void>; private mountSheetInstance; private unmountSheetInstance; /** * 卸载表格 * @example s2.destroy() */ destroy(): void; protected setThemeName(name: ThemeName): void; setThemeCfg(themeCfg?: ThemeCfg, getCustomTheme?: (palette: SimplePalette, spreadsheet?: SpreadSheet) => S2Theme): void; setTheme(theme: S2Theme): void; getTheme(): InternalFullyTheme; getThemeName(): "default" | "colorful" | "gray" | "dark"; /** * 更新分页配置 */ updatePagination(pagination: Pagination): void; /** * 修改表格画布大小,不用重新加载数据 * @param width * @param height */ changeSheetSize(width?: number, height?: number): void; on<K extends keyof EmitterType>(event: `${K}`, listener: EmitterType[K]): this; emit<K extends keyof EmitterType>(event: `${K}`, ...args: Parameters<EmitterType[K]>): void; /** * 获取 G Canvas 实例 * @see https://g.antv.antgroup.com/api/renderer/canvas */ getCanvas(): Canvas; /** * 获取 G Canvas 配置 * @see https://g.antv.antgroup.com/api/canvas/options */ getCanvasConfig(): Partial<CanvasConfig & { supportsCSSTransform?: boolean; }>; /** * 获取 <canvas/> HTML 元素 */ getCanvasElement(): HTMLCanvasElement & { __s2_instance__: SpreadSheet; }; getLayoutWidthType(): "adaptive" | "colAdaptive" | "compact"; protected isCellType(cell?: CellEventTarget): boolean; getCell<T extends S2CellType = S2CellType>(target: CellEventTarget): T | null; getCellType(target: CellEventTarget): import("../common/constant").CellType | undefined; /** * 获取当前维度对应的汇总配置 */ getTotalsConfig(dimension: string): Total; /** * Create all related groups, contains: * 1. container -- base canvas group * 2. backgroundGroup * 3. panelGroup -- main facet group belongs to * 4. foregroundGroup * @param dom * @private */ protected initContainer(dom: S2MountContainer): void; protected setupContainerStyle(): void; private initHiddenColumnsDetail; private clearCanvasEvent; /** * 获取文本在画布中的测量信息 * @param text 待计算的文本 * @param font 文本 css 样式 * @returns 文本测量信息 TextMetrics */ measureText: ((text: SimpleData, font: unknown) => TextMetrics | null) & import("lodash").MemoizedFunction; /** * 计算文本在画布中的宽度 * @param text 待计算的文本 * @param font 文本 css 样式 * @returns 文本宽度 */ measureTextWidth: (text: SimpleData, font: unknown) => number; /** * 计算文本在画布中的宽度 https://developer.mozilla.org/zh-CN/docs/Web/API/TextMetrics * @param text 待计算的文本 * @param font 文本 css 样式 * @returns 文本高度 */ measureTextHeight: (text: SimpleData, font: unknown) => number; /** * 粗略计算文本在画布中的宽度 * @param text 待计算的文本 * @param font 文本 css 样式 * @returns 文本宽度 */ measureTextWidthRoughly: (text: SimpleData, font: unknown) => number; updateSortMethodMap(nodeId: string, sortMethod: SortMethod, replace?: boolean): void; getMenuDefaultSelectedKeys(nodeId: string): string[]; handleGroupSort(event: CanvasEvent, meta: Node): void; getSeriesNumberText(): string; enableAsyncExport(): Error | true; }