@visactor/vtable 1.22.2 → 1.22.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/ListTable.d.ts +3 -1
- package/cjs/ListTable.js +15 -8
- package/cjs/ListTable.js.map +1 -1
- package/cjs/PivotChart.js +10 -8
- package/cjs/PivotChart.js.map +1 -1
- package/cjs/PivotTable.d.ts +1 -0
- package/cjs/PivotTable.js +3 -0
- package/cjs/PivotTable.js.map +1 -1
- package/cjs/body-helper/style/ButtonStyle.d.ts +10 -1
- package/cjs/body-helper/style/ButtonStyle.js.map +1 -1
- package/cjs/body-helper/style/CheckboxStyle.d.ts +14 -1
- package/cjs/body-helper/style/CheckboxStyle.js.map +1 -1
- package/cjs/body-helper/style/RadioStyle.d.ts +8 -1
- package/cjs/body-helper/style/RadioStyle.js.map +1 -1
- package/cjs/body-helper/style/SwitchStyle.d.ts +13 -1
- package/cjs/body-helper/style/SwitchStyle.js.map +1 -1
- package/cjs/core/BaseTable.js +2 -2
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/record-helper.js.map +1 -1
- package/cjs/data/DataSource.js +1 -1
- package/cjs/data/DataSource.js.map +1 -1
- package/cjs/dataset/dataset.js +5 -1
- package/cjs/dataset/dataset.js.map +1 -1
- package/cjs/event/listener/touch.js +2 -1
- package/cjs/event/listener/touch.js.map +1 -1
- package/cjs/event/scroll.d.ts +2 -0
- package/cjs/event/scroll.js +12 -3
- package/cjs/event/scroll.js.map +1 -1
- package/cjs/index.d.ts +2 -1
- package/cjs/index.js +18 -4
- package/cjs/index.js.map +1 -1
- package/cjs/layout/chart-helper/get-axis-config.d.ts +1 -0
- package/cjs/layout/chart-helper/get-axis-config.js +11 -8
- package/cjs/layout/chart-helper/get-axis-config.js.map +1 -1
- package/cjs/layout/chart-helper/get-chart-spec.js +7 -7
- package/cjs/layout/chart-helper/get-chart-spec.js.map +1 -1
- package/cjs/layout/index.js +2 -1
- package/cjs/layout/pivot-header-layout.d.ts +2 -1
- package/cjs/layout/pivot-header-layout.js +38 -4
- package/cjs/layout/pivot-header-layout.js.map +1 -1
- package/cjs/layout/pivot-layout.js +2 -0
- package/cjs/layout/row-height-map.js +1 -1
- package/cjs/layout/simple-header-layout.js +4 -4
- package/cjs/layout/simple-header-layout.js.map +1 -1
- package/cjs/layout/tree-helper.js +1 -1
- package/cjs/plugins/custom-cell-style.js +1 -2
- package/cjs/plugins/index.js +1 -1
- package/cjs/plugins/interface.js +1 -1
- package/cjs/plugins/invert-highlight.js +1 -1
- package/cjs/plugins/list-tree-stick-cell.js +1 -1
- package/cjs/plugins/plugin-manager.js +1 -1
- package/cjs/scenegraph/graphic/contributions/rect-contribution-render.js +1 -1
- package/cjs/scenegraph/graphic/contributions/rect-contribution-render.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-helper.js +1 -1
- package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/cjs/scenegraph/layout/compute-row-height.js +7 -3
- package/cjs/scenegraph/layout/compute-row-height.js.map +1 -1
- package/cjs/scenegraph/scenegraph.js +1 -1
- package/cjs/state/cell-move/adjust-header.d.ts +13 -0
- package/cjs/state/cell-move/adjust-header.js +50 -3
- package/cjs/state/cell-move/adjust-header.js.map +1 -1
- package/cjs/state/cell-move/index.js +2 -1
- package/cjs/state/cell-move/index.js.map +1 -1
- package/cjs/ts-types/base-table.d.ts +7 -2
- package/cjs/ts-types/base-table.js.map +1 -1
- package/cjs/ts-types/list-table/define/basic-define.d.ts +1 -1
- package/cjs/ts-types/list-table/define/basic-define.js.map +1 -1
- package/cjs/ts-types/new-data-set.d.ts +1 -0
- package/cjs/ts-types/new-data-set.js.map +1 -1
- package/cjs/ts-types/table-engine.d.ts +9 -2
- package/cjs/ts-types/table-engine.js.map +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +297 -48
- package/dist/vtable.min.js +2 -2
- package/es/ListTable.d.ts +3 -1
- package/es/ListTable.js +17 -10
- package/es/ListTable.js.map +1 -1
- package/es/PivotChart.js +10 -8
- package/es/PivotChart.js.map +1 -1
- package/es/PivotTable.d.ts +1 -0
- package/es/PivotTable.js +3 -0
- package/es/PivotTable.js.map +1 -1
- package/es/body-helper/style/ButtonStyle.d.ts +10 -1
- package/es/body-helper/style/ButtonStyle.js.map +1 -1
- package/es/body-helper/style/CheckboxStyle.d.ts +14 -1
- package/es/body-helper/style/CheckboxStyle.js.map +1 -1
- package/es/body-helper/style/RadioStyle.d.ts +8 -1
- package/es/body-helper/style/RadioStyle.js.map +1 -1
- package/es/body-helper/style/SwitchStyle.d.ts +13 -1
- package/es/body-helper/style/SwitchStyle.js.map +1 -1
- package/es/core/BaseTable.js +2 -2
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/record-helper.js.map +1 -1
- package/es/data/DataSource.js +1 -1
- package/es/data/DataSource.js.map +1 -1
- package/es/dataset/dataset.js +5 -1
- package/es/dataset/dataset.js.map +1 -1
- package/es/event/listener/touch.js +2 -2
- package/es/event/listener/touch.js.map +1 -1
- package/es/event/scroll.d.ts +2 -0
- package/es/event/scroll.js +9 -1
- package/es/event/scroll.js.map +1 -1
- package/es/index.d.ts +2 -1
- package/es/index.js +3 -1
- package/es/index.js.map +1 -1
- package/es/layout/chart-helper/get-axis-config.d.ts +1 -0
- package/es/layout/chart-helper/get-axis-config.js +11 -8
- package/es/layout/chart-helper/get-axis-config.js.map +1 -1
- package/es/layout/chart-helper/get-chart-spec.js +6 -7
- package/es/layout/chart-helper/get-chart-spec.js.map +1 -1
- package/es/layout/index.js +2 -1
- package/es/layout/pivot-header-layout.d.ts +2 -1
- package/es/layout/pivot-header-layout.js +38 -4
- package/es/layout/pivot-header-layout.js.map +1 -1
- package/es/layout/pivot-layout.js +2 -0
- package/es/layout/row-height-map.js +1 -1
- package/es/layout/simple-header-layout.js +4 -4
- package/es/layout/simple-header-layout.js.map +1 -1
- package/es/layout/tree-helper.js +1 -1
- package/es/plugins/custom-cell-style.js +1 -2
- package/es/plugins/index.js +1 -1
- package/es/plugins/interface.js +1 -1
- package/es/plugins/invert-highlight.js +1 -1
- package/es/plugins/list-tree-stick-cell.js +1 -1
- package/es/plugins/plugin-manager.js +1 -1
- package/es/scenegraph/graphic/contributions/rect-contribution-render.js +1 -1
- package/es/scenegraph/graphic/contributions/rect-contribution-render.js.map +1 -1
- package/es/scenegraph/group-creater/cell-helper.js +2 -2
- package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/es/scenegraph/layout/compute-row-height.js +7 -3
- package/es/scenegraph/layout/compute-row-height.js.map +1 -1
- package/es/scenegraph/scenegraph.js +1 -1
- package/es/state/cell-move/adjust-header.d.ts +13 -0
- package/es/state/cell-move/adjust-header.js +46 -2
- package/es/state/cell-move/adjust-header.js.map +1 -1
- package/es/state/cell-move/index.js +2 -1
- package/es/state/cell-move/index.js.map +1 -1
- package/es/ts-types/base-table.d.ts +7 -2
- package/es/ts-types/base-table.js.map +1 -1
- package/es/ts-types/list-table/define/basic-define.d.ts +1 -1
- package/es/ts-types/list-table/define/basic-define.js.map +1 -1
- package/es/ts-types/new-data-set.d.ts +1 -0
- package/es/ts-types/new-data-set.js.map +1 -1
- package/es/ts-types/table-engine.d.ts +9 -2
- package/es/ts-types/table-engine.js.map +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +4 -4
package/cjs/PivotTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/PivotTable.ts"],"names":[],"mappings":"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","file":"PivotTable.js","sourcesContent":["import type {\n FieldData,\n FieldDef,\n FieldFormat,\n PivotTableAPI,\n SortRules,\n PivotSortState,\n CellAddress,\n ICellHeaderPaths,\n DropDownMenuEventInfo,\n FieldKeyDef,\n PivotTableConstructorOptions,\n IHeaderTreeDefine,\n IDimensionInfo,\n SortOrder,\n IPagination,\n CellLocation,\n IIndicator,\n ColumnDefine,\n SortByIndicatorRule,\n SortTypeRule,\n SortRule,\n FilterRules,\n CellPivotRole\n} from './ts-types';\nimport { HierarchyState, SortType } from './ts-types';\nimport { PivotHeaderLayoutMap } from './layout/pivot-header-layout';\nimport { FlatDataToObjects } from './dataset/flatDataToObject';\nimport { PIVOT_TABLE_EVENT_TYPE } from './ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport { cellInRange, emptyFn } from './tools/helper';\nimport { Dataset } from './dataset/dataset';\nimport { BaseTable } from './core/BaseTable';\nimport type { BaseTableAPI, HeaderData, PivotTableProtected } from './ts-types/base-table';\nimport type { ITitleComponent } from './components/title/title';\nimport { cloneDeep, isNumber, isValid } from '@visactor/vutils';\nimport { Env } from './tools/env';\nimport type { ITreeLayoutHeadNode } from './layout/tree-helper';\nimport { DimensionTree, type LayouTreeNode } from './layout/tree-helper';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport { EditManager } from './edit/edit-manager';\nimport * as editors from './edit/editors';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport { computeColWidth } from './scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from './scenegraph/layout/compute-row-height';\nimport { isAllDigits } from './tools/util';\nimport type { IndicatorData } from './ts-types/list-table/layout-map/api';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport {\n deleteHideIndicatorNode,\n parseColKeyRowKeyForPivotTable,\n supplementIndicatorNodesForCustomTree\n} from './layout/layout-helper';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\nimport { callUpdateColOnScenegraph, callUpdateRowOnScenegraph } from './tools/diff-cell';\nimport { clearChartRenderQueue } from './scenegraph/graphic/contributions/chart-render-helper';\n\nexport class PivotTable extends BaseTable implements PivotTableAPI {\n layoutNodeId: { seqId: number } = { seqId: 0 };\n declare internalProps: PivotTableProtected;\n declare options: PivotTableConstructorOptions;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n dataset?: Dataset; //数据处理对象 开启数据透视分析的表\n flatDataToObjects?: FlatDataToObjects; //数据处理对象 聚合后的flat数据 转成便于查询的行列二维数组\n // drillMenu: Menu; //上卷下钻的按钮\n // eslint-disable-next-line default-param-last\n constructor(options: PivotTableConstructorOptions);\n constructor(container: HTMLElement, options: PivotTableConstructorOptions);\n constructor(container?: HTMLElement | PivotTableConstructorOptions, options?: PivotTableConstructorOptions) {\n super(container as HTMLElement, options);\n options = this.options;\n if (options) {\n if (!options.rowHierarchyType) {\n options.rowHierarchyType = 'grid';\n }\n if (!options.columnHierarchyType) {\n options.columnHierarchyType = 'grid';\n }\n if ((options as any).layout) {\n //TODO hack处理之前的demo都是定义到layout上的 所以这里直接并到options中\n Object.assign(options, (options as any).layout);\n }\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = cloneDeepSpec(options.indicators);\n options.indicators?.forEach((indicatorDefine, index) => {\n //如果editor 是一个IEditor的实例 需要这样重新赋值 否则clone后变质了\n if (typeof indicatorDefine === 'object' && indicatorDefine?.editor) {\n (this.internalProps.indicators![index] as IIndicator).editor = indicatorDefine.editor;\n }\n });\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n this.internalProps.records = options.records;\n\n //分页配置\n this.pagination = options.pagination;\n this.internalProps.columnResizeType = options.resize?.columnResizeType ?? options.columnResizeType ?? 'column';\n this.internalProps.rowResizeType = options.resize?.rowResizeType ?? options.rowResizeType ?? 'row';\n this.internalProps.dataConfig = cloneDeep(options.dataConfig);\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n this.internalProps.columnWidthConfigForRowHeader = options.columnWidthConfigForRowHeader;\n\n const records = this.internalProps.records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n if (options.customConfig?.enableDataAnalysis === false) {\n // let columnDimensionTree;\n // let rowDimensionTree;\n // if (options.columnTree) {\n const columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n // }\n // if (options.rowTree) {\n const rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n // }\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(this, null, columnDimensionTree, rowDimensionTree);\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys,\n indicators: this.internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: this.internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: this.internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n const keysResults = parseColKeyRowKeyForPivotTable(this, options);\n const { rowKeys, columnKeys, indicatorKeys } = keysResults;\n let { columnDimensionTree, rowDimensionTree } = keysResults;\n this.dataset = new Dataset(\n this.internalProps.dataConfig,\n // this.pagination,\n rowKeys,\n columnKeys,\n // options.indicatorsAsCol === false ? rowKeys.concat(IndicatorDimensionKeyPlaceholder) : rowKeys,\n // options.indicatorsAsCol !== false ? columnKeys.concat(IndicatorDimensionKeyPlaceholder) : columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n options.records,\n options.rowHierarchyType,\n options.columnHierarchyType,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n false,\n !!options.extensionRows,\n !!options.parseCustomTreeToMatchRecords\n );\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n } else {\n if (columnDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(columnDimensionTree.tree.children, options.indicators, true, this);\n columnDimensionTree.reset(columnDimensionTree.tree.children);\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n } else {\n if (rowDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(rowDimensionTree.tree.children, options.indicators, true, this);\n rowDimensionTree.reset(rowDimensionTree.tree.children);\n }\n }\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(\n this,\n this.dataset,\n columnDimensionTree,\n rowDimensionTree\n );\n }\n this._changePivotSortStateBySortRules();\n if ((options.pivotSortState?.length ?? 0) > 0) {\n this.pivotSortState = [];\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n if (Env.mode !== 'node') {\n this.editorManager = new EditManager(this);\n }\n\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n this.stateManager.initCheckedState(records);\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n // this.render();\n\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n // this.scenegraph.resize();//下面有个resize了 所以这个可以去掉\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n if (this.isReleased) {\n return;\n }\n this.resize();\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n }\n static get EVENT_TYPE(): typeof PIVOT_TABLE_EVENT_TYPE {\n return PIVOT_TABLE_EVENT_TYPE;\n }\n isListTable(): false {\n return false;\n }\n isPivotTable(): true {\n return true;\n }\n isPivotChart(): false {\n return false;\n }\n get recordsCount() {\n return this.records?.length;\n }\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n const isSeriesNumber = this.internalProps.layoutMap.isSeriesNumber(col, row);\n if (isSeriesNumber && this.internalProps.rowSeriesNumber.disableColumnResize === true) {\n return false;\n } else if (!this.internalProps.layoutMap.indicatorsAsCol) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(\n options: PivotTableConstructorOptions,\n updateConfig: { clearColWidthCache?: boolean; clearRowHeightCache?: boolean } = {\n clearColWidthCache: true,\n clearRowHeightCache: true\n }\n ) {\n const internalProps = this.internalProps;\n //维护选中状态\n // const range = internalProps.selection.range; //保留原有单元格选中状态\n super.updateOption(options, updateConfig);\n if (!options.rowHierarchyType) {\n options.rowHierarchyType = 'grid';\n }\n if (!options.columnHierarchyType) {\n options.columnHierarchyType = 'grid';\n }\n this.layoutNodeId = { seqId: 0 };\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = !options.indicators?.length ? [] : cloneDeepSpec(options.indicators);\n options.indicators?.forEach((indicatorDefine, index) => {\n if (typeof indicatorDefine === 'object' && indicatorDefine?.editor) {\n (this.internalProps.indicators[index] as IIndicator).editor = indicatorDefine.editor;\n }\n });\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n options.records && (this.internalProps.records = options.records);\n this.stateManager.initCheckedState(this.internalProps.records);\n this.stateManager.updateDrillState(undefined, undefined, false, false, -1, -1);\n //分页配置\n this.pagination = options.pagination;\n // 更新protectedSpace\n internalProps.columnResizeType = options.resize?.columnResizeType ?? options.columnResizeType ?? 'column';\n internalProps.rowResizeType = options.resize?.rowResizeType ?? options.rowResizeType ?? 'row';\n internalProps.dataConfig = cloneDeep(options.dataConfig);\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n this.internalProps.columnWidthConfigForRowHeader = options.columnWidthConfigForRowHeader;\n\n //维护tree树形结构的展开状态\n if (\n options?.rowHierarchyType !== 'grid' &&\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType !== 'grid' &&\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowExpandLevel === options?.rowExpandLevel\n ) {\n const beforeRowDimensions = (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowDimensionTree.tree.children;\n this.internalProps.rowTree?.forEach((node: IHeaderTreeDefine, index: number) => {\n const beforeRowDimension = beforeRowDimensions.find(\n item => item.dimensionKey === node.dimensionKey && item.value === node.value\n );\n if (beforeRowDimension) {\n this._syncHierarchyState(beforeRowDimension, node);\n }\n });\n }\n const records = this.internalProps.records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n\n //TODO 这里需要加上判断 dataConfig是否有配置变化\n if (options.customConfig?.enableDataAnalysis === false) {\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n }\n if (options.rowTree) {\n rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n }\n internalProps.layoutMap.clearHeaderPathCache();\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, null, columnDimensionTree, rowDimensionTree);\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: internalProps.layoutMap.fullRowDimensionKeys,\n columns: internalProps.layoutMap.colDimensionKeys,\n indicators: internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n const keysResults = parseColKeyRowKeyForPivotTable(this, options);\n const { rowKeys, columnKeys, indicatorKeys } = keysResults;\n let { columnDimensionTree, rowDimensionTree } = keysResults;\n this.dataset = new Dataset(\n internalProps.dataConfig,\n // this.pagination,\n rowKeys,\n columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n records,\n options.rowHierarchyType,\n options.columnHierarchyType,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n false,\n !!options.extensionRows,\n !!options.parseCustomTreeToMatchRecords\n );\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n } else {\n if (columnDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(columnDimensionTree.tree.children, options.indicators, true, this);\n columnDimensionTree.reset(columnDimensionTree.tree.children);\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n } else {\n if (rowDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(rowDimensionTree.tree.children, options.indicators, true, this);\n rowDimensionTree.reset(rowDimensionTree.tree.children);\n }\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n }\n this._changePivotSortStateBySortRules();\n\n if ((options.pivotSortState?.length ?? 0) > 0) {\n this.pivotSortState = [];\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n\n // if (this.internalProps.title && !this.internalProps.title.isReleased) {\n // this._updateSize();\n // this.internalProps.title.resize();\n // this.scenegraph.resize();\n // }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.UPDATED, null);\n }, 0);\n // this.render();\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n\n /**\n * 更新页码\n * @param pagination 修改页码\n */\n updatePagination(pagination?: IPagination): void {\n this.internalProps.layoutMap.clearHeaderPathCache();\n\n if (pagination) {\n if (!this.pagination) {\n this.pagination = { currentPage: 0, perPageCount: 0 };\n }\n typeof pagination.currentPage === 'number' &&\n pagination.currentPage >= 0 &&\n (this.pagination.currentPage = pagination.currentPage);\n pagination.perPageCount &&\n (this.pagination.perPageCount = pagination.perPageCount || this.pagination.perPageCount);\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(this.pagination);\n // this.refreshHeader();\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n } else if (this.pagination) {\n // 原来有分页 现在更新成不分页\n this.pagination = undefined;\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(undefined);\n // this.refreshHeader();\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n }\n\n refreshHeader(): void {\n //设置列宽\n this.setMinMaxLimitWidth(true);\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.rowCount ?? 0;\n\n this.internalProps.frozenColCount = this.options.frozenColCount\n ? this.options.frozenColCount\n : (layoutMap.rowHeaderLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount;\n // this.internalProps.frozenColCount= Math.max(\n // (layoutMap.rowHeaderLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount,\n // this.options.frozenColCount ?? 0\n // );\n // 不能使用frozenRowCount setter 因为会把options.frozenRowCount赋值\n table._setFrozenRowCount(Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0));\n\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n this.stateManager.setFrozenRow(this.frozenRowCount);\n }\n protected _getSortFuncFromHeaderOption(\n columns: undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: SortOrder) => 0 | 1 | -1) | undefined {\n return undefined;\n }\n /**\n * Get rowHierarchyType of pivotTable\n */\n get rowHierarchyType(): 'grid' | 'tree' | 'grid-tree' {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType;\n }\n /**\n * Get columnHierarchyType of pivotTable\n */\n get columnHierarchyType(): 'grid' | 'grid-tree' {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).columnHierarchyType;\n }\n /**\n * 将现有tree中的的hierarchyState同步到rows透视树中\n * @param sourceNode\n * @param targetNode\n */\n _syncHierarchyState(sourceNode: any, targetNode: IHeaderTreeDefine) {\n if (sourceNode.value === targetNode.value && sourceNode.dimensionKey === targetNode.dimensionKey) {\n targetNode.hierarchyState =\n targetNode.hierarchyState ?? (targetNode?.children ? sourceNode.hierarchyState : undefined);\n (targetNode?.children as IHeaderTreeDefine[])?.forEach?.((targetChildNode: IHeaderTreeDefine, index: number) => {\n if (sourceNode?.children?.[index] && targetChildNode) {\n const beforeRowDimension = sourceNode.children.find(\n (item: any) => item.dimensionKey === targetChildNode.dimensionKey && item.value === targetChildNode.value\n );\n if (beforeRowDimension) {\n this._syncHierarchyState(beforeRowDimension, targetChildNode);\n }\n }\n });\n }\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n getTableIndexByRecordIndex(recordIndex: number): number {\n return undefined;\n }\n getTableIndexByField(field: FieldDef): number {\n return undefined;\n }\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress {\n return undefined;\n }\n getBodyIndexByRow(row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByRow(row);\n }\n getBodyIndexByCol(col: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByCol(col);\n }\n getFieldData(field: string, col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n return this.records[rowIndex]?.[colIndex];\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (cellDimensionPath) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n if (aggregator.records && aggregator.records.length >= 1) {\n return aggregator.records[0][field];\n }\n // return ''\n }\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n if (treeNode?.record) {\n return treeNode?.record[field];\n }\n }\n }\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n if (this.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (this.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = this.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n const { format } = this.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this) : row - this.columnHeaderLevelCount + 1;\n } else if (this.internalProps.layoutMap.isHeader(col, row)) {\n const { title, fieldFormat } = this.internalProps.layoutMap.getHeader(col, row) as HeaderData;\n return typeof fieldFormat === 'function' ? fieldFormat(title, col, row, this as BaseTableAPI) : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n // const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (typeof fieldFormat === 'function') {\n const fieldResult = fieldFormat(dataValue, col, row, this as BaseTableAPI);\n return fieldResult;\n }\n return dataValue;\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n ?.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n ?.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n // return typeof fieldFormat === 'function'\n // ? fieldFormat(valueNode?.value, col, row, this as BaseTableAPI)\n // : valueNode?.value ?? '';\n return aggregator.formatValue\n ? aggregator.formatValue(col, row, this as BaseTableAPI)\n : typeof fieldFormat === 'function'\n ? fieldFormat(aggregator?.value(), col, row, this as BaseTableAPI)\n : aggregator?.value() ?? '';\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const valueNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n return typeof fieldFormat === 'function'\n ? fieldFormat(valueNode?.value, col, row, this as BaseTableAPI)\n : valueNode?.value ?? '';\n }\n // return this.getFieldData(fieldFormat || field, col, row);\n }\n\n getCellOriginValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n return treeNode?.value;\n }\n\n // const { field } = table.internalProps.layoutMap.getBody(col, row);\n // return table.getFieldData(field, col, row);\n }\n\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n false,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n return treeNode?.value;\n }\n }\n\n // 获取原始数据\n getCellOriginRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n return treeNode?.record;\n }\n }\n\n getCellRawRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n false,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n return treeNode?.record;\n }\n }\n /**\n * 全量更新排序规则\n * @param sortRules\n */\n updateSortRules(sortRules: SortRules, col?: number, row?: number) {\n if (this.internalProps.dataConfig) {\n this.internalProps.dataConfig.sortRules = sortRules;\n } else {\n this.internalProps.dataConfig = { sortRules };\n }\n this.dataset.updateSortRules(sortRules);\n this._changePivotSortStateBySortRules();\n const { layoutMap } = this.internalProps;\n layoutMap.resetHeaderTree();\n // 清空单元格内容\n this.scenegraph.clearCells();\n if (isNumber(col) && isNumber(row)) {\n if (this.isRowHeader(col, row)) {\n this.setMinMaxLimitWidth(true);\n this.internalProps._widthResizedColMap.clear();\n } else if (this.isCornerHeader(col, row)) {\n if (layoutMap.cornerSetting.titleOnDimension === 'column') {\n this.setMinMaxLimitWidth(true);\n this.internalProps._widthResizedColMap.clear();\n } else if (layoutMap.cornerSetting.titleOnDimension === 'row') {\n this.internalProps._heightResizedRowMap.clear();\n }\n } else if (this.isColumnHeader(col, row)) {\n this.internalProps._heightResizedRowMap.clear();\n }\n this.refreshRowColCount();\n } else {\n this.refreshHeader();\n }\n this.internalProps.useOneRowHeightFillAll = false;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph(true);\n this.render();\n }\n _changePivotSortStateBySortRules() {\n this.pivotSortState = [];\n const sortRules = this.internalProps.dataConfig?.sortRules ?? [];\n for (let i = 0; i < sortRules.length; i++) {\n const sortRule = sortRules[i];\n // if ((sortRule as SortByIndicatorRule).sortType) {\n const dimensions: IDimensionInfo[] = [];\n if (\n (sortRule as SortByIndicatorRule).sortByIndicator &&\n (sortRule as SortByIndicatorRule).sortField ===\n (this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1])\n ) {\n for (let j = 0; j < (sortRule as SortByIndicatorRule).query.length; j++) {\n dimensions.push({\n dimensionKey: this.dataset.indicatorsAsCol ? this.dataset.columns[j] : this.dataset.rows[j],\n value: (sortRule as SortByIndicatorRule).query[j]\n });\n }\n dimensions.push({\n indicatorKey: (sortRule as SortByIndicatorRule).sortByIndicator,\n value:\n this.internalProps.layoutMap.getIndicatorInfo((sortRule as SortByIndicatorRule).sortByIndicator)?.title ??\n (sortRule as SortByIndicatorRule).sortByIndicator\n });\n } else {\n dimensions.push({\n dimensionKey: (sortRule as SortTypeRule).sortField,\n isPivotCorner: true,\n value: (sortRule as SortTypeRule).sortField\n });\n }\n const sortType = sortRule.sortType ? (sortRule.sortType.toUpperCase() as 'ASC' | 'DESC' | 'NORMAL') : 'ASC';\n this.pivotSortState.push({\n dimensions,\n order: SortType[sortType]\n });\n // }\n }\n }\n\n /**\n * 更新排序状态\n * @param pivotSortStateConfig.dimensions 排序状态维度对应关系;pivotSortStateConfig.order 排序状态\n */\n updatePivotSortState(\n pivotSortStateConfig: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[]\n ) {\n this.pivotSortState = pivotSortStateConfig;\n }\n // changePivotSortState(pivotSortState: { dimensions: IDimensionInfo[]; order: SortOrder }) {\n // let isExist = false;\n // for (let i = 0; i < this.pivotSortState.length; i++) {\n // const pivotSortStateItem = this.pivotSortState[i];\n // const dimensions = pivotSortStateItem.dimensions;\n // const isEqual = dimensions.every(\n // (item, index) =>\n // (item.dimensionKey === pivotSortState.dimensions[index].dimensionKey ||\n // item.indicatorKey === pivotSortState.dimensions[index].indicatorKey) &&\n // item.value === pivotSortState.dimensions[index].value &&\n // ((isValid(item.isPivotCorner ?? pivotSortState.dimensions[index].isPivotCorner) &&\n // item.isPivotCorner === pivotSortState.dimensions[index].isPivotCorner) ||\n // (!isValid(item.isPivotCorner) && !isValid(pivotSortState.dimensions[index].isPivotCorner)))\n // );\n // if (isEqual) {\n // isExist = true;\n // pivotSortStateItem.order = pivotSortState.order;\n // break;\n // }\n // }\n // if (!isExist) {\n // this.pivotSortState.push(pivotSortState);\n // }\n // }\n /** 如果单元格所在维度或者指标配置了sort自动 可以通过该接口进行排序 */\n sort(col: number, row: number, order: SortOrder) {\n let dimensions: IDimensionInfo[];\n if ((this as PivotTable).isCornerHeader(col, row)) {\n const dimensionInfo = (this as PivotTable).getHeaderDefine(col, row) as any;\n dimensions = [];\n const dimension: IDimensionInfo = {\n isPivotCorner: true,\n dimensionKey: dimensionInfo.value,\n value: dimensionInfo.value\n };\n dimensions.push(dimension);\n } else if ((this as PivotTable).isColumnHeader(col, row)) {\n dimensions = (this as PivotTable).getCellHeaderPaths(col, row).colHeaderPaths as IDimensionInfo[];\n } else {\n dimensions = (this as PivotTable).getCellHeaderPaths(col, row).rowHeaderPaths as IDimensionInfo[];\n }\n\n const sortIndicator = dimensions[dimensions.length - 1].indicatorKey;\n\n const headerDefine = this.getHeaderDefine(col, row) as any;\n if (headerDefine.sort) {\n if ((this as PivotTable).dataset.sortRules) {\n const cacheOldDimensionSortRule: Record<string, SortRule> = {};\n for (let i = (this as PivotTable).dataset.sortRules.length - 1; i >= 0; i--) {\n const sortRule = (this as PivotTable).dataset.sortRules[i];\n if (headerDefine.dimensionKey && sortRule.sortField === headerDefine.dimensionKey) {\n cacheOldDimensionSortRule[sortRule.sortField] = sortRule;\n (this as PivotTable).dataset.sortRules.splice(i, 1);\n } else if (\n sortIndicator &&\n // headerDefine.indicatorKey === sortIndicator &&\n // sortIndicator === (sortRule as SortByIndicatorRule).sortByIndicator &&\n sortRule.sortField ===\n (this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1])\n ) {\n cacheOldDimensionSortRule[sortRule.sortField] = sortRule;\n (this as PivotTable).dataset.sortRules.splice(i, 1);\n }\n }\n if (sortIndicator) {\n const sortField = this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1];\n (this as PivotTable).dataset.sortRules.push({\n sortField,\n sortType: SortType[order],\n sortByIndicator: sortIndicator,\n query: dimensions.reduce((arr, dimension) => {\n if (dimension.dimensionKey) {\n arr.push(dimension.value);\n }\n return arr;\n }, []),\n sortFunc: (cacheOldDimensionSortRule[sortField] as SortByIndicatorRule)?.sortFunc\n });\n } else {\n (this as PivotTable).dataset.sortRules.push(\n Object.assign(cacheOldDimensionSortRule[headerDefine.dimensionKey] ?? {}, {\n sortField: headerDefine.dimensionKey,\n sortType: SortType[order as 'ASC' | 'DESC']\n })\n );\n }\n } else {\n if (sortIndicator) {\n (this as PivotTable).dataset.sortRules = [\n {\n sortField: this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1],\n sortType: SortType[order as 'ASC' | 'DESC'],\n sortByIndicator: sortIndicator,\n query: dimensions.reduce((arr, dimension) => {\n if (dimension.dimensionKey) {\n arr.push(dimension.value);\n }\n return arr;\n }, [])\n }\n ];\n } else {\n (this as PivotTable).dataset.sortRules = [\n {\n sortField: headerDefine.dimensionKey,\n sortType: SortType[order as 'ASC' | 'DESC']\n }\n ];\n }\n }\n\n (this as PivotTable).updateSortRules((this as PivotTable).dataset.sortRules, col, row);\n }\n }\n\n getPivotSortState(col: number, row: number): SortOrder {\n if (!this.pivotSortState) {\n return undefined;\n }\n const cellRange = this.getCellRange(col, row);\n for (let i = 0; i < this.pivotSortState.length; i++) {\n const pivotState = this.pivotSortState[i];\n const dimensions = pivotState.dimensions;\n const cell = this.getCellAddressByHeaderPaths(dimensions);\n // const { col: sortCol, row: sortRow, order } = this.pivotSortState[i];\n const order = pivotState.order;\n\n if (cell && cellInRange(cellRange, cell.col, cell.row)) {\n return order;\n }\n }\n return undefined;\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n const targetCellRange = this.getCellRange(target.col, target.row);\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = (this.internalProps.layoutMap as PivotHeaderLayoutMap).moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n for (let row = 0; row < this.internalProps.records.length; row++) {\n const sourceColumns = (this.internalProps.records[row] as unknown as number[]).splice(\n moveContext.sourceIndex - this.rowHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceColumns.unshift((moveContext.targetIndex as any) - this.rowHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records[row] as unknown as number[], sourceColumns);\n }\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n this.colWidthsMap.exchangeOrder(\n sourceCellRange.start.col,\n sourceCellRange.end.col - sourceCellRange.start.col + 1,\n targetCellRange.start.col,\n targetCellRange.end.col - targetCellRange.start.col + 1,\n moveContext.targetIndex\n );\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.setMinMaxLimitWidth();\n } else if (moveContext.moveType === 'row') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const sourceRows = (this.internalProps.records as unknown as number[]).splice(\n moveContext.sourceIndex - this.columnHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceRows.unshift((moveContext.targetIndex as any) - this.columnHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records, sourceRows);\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex + moveContext.sourceSize - moveContext.targetSize,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n } else {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n }\n }\n return moveContext;\n }\n return null;\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n\n const hierarchyState = this.getHierarchyState(col, row);\n if (hierarchyState === HierarchyState.expand) {\n this._refreshHierarchyState(col, row, recalculateColWidths);\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.collapse\n });\n } else if (hierarchyState === HierarchyState.collapse) {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n if (Array.isArray(headerTreeNode.children)) {\n //children 是数组 表示已经有子树节点信息\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.expand,\n originData: headerTreeNode\n });\n }\n }\n\n // beforeUpdateCell主要用于setTreeNodeChildren方法\n _refreshHierarchyState(col: number, row: number, recalculateColWidths: boolean = true, beforeUpdateCell?: Function) {\n const oldFrozenColCount = this.frozenColCount;\n const oldFrozenRowCount = this.frozenRowCount;\n const visibleStartRow = this.getBodyVisibleRowRange().rowStart;\n this.internalProps._oldRowCount = this.rowCount;\n this.internalProps._oldColCount = this.colCount;\n let notFillWidth = false;\n let notFillHeight = false;\n this.stateManager.updateHoverIcon(col, row, undefined, undefined);\n const checkHasChart = this.internalProps.layoutMap.checkHasChart();\n // 检查当前状态总宽高未撑满autoFill是否在起作用\n if (checkHasChart) {\n if (this.autoFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n }\n const isChangeRowTree = this.internalProps.layoutMap.isRowHeader(col, row);\n const result: {\n addCellPositionsRowDirection?: CellAddress[];\n removeCellPositionsRowDirection?: CellAddress[];\n updateCellPositionsRowDirection?: CellAddress[];\n addCellPositionsColumnDirection?: CellAddress[];\n removeCellPositionsColumnDirection?: CellAddress[];\n updateCellPositionsColumnDirection?: CellAddress[];\n } = isChangeRowTree\n ? (this.internalProps.layoutMap as PivotHeaderLayoutMap).toggleHierarchyState(col, row)\n : (this.internalProps.layoutMap as PivotHeaderLayoutMap).toggleHierarchyStateForColumnTree(col, row);\n beforeUpdateCell && beforeUpdateCell();\n //影响行数\n this.refreshRowColCount(); //逻辑中有setFrozenCol处理 影响了原本bodyGroup的列数\n const newFrozenColCount = this.frozenColCount;\n const newFrozenRowCount = this.frozenRowCount;\n this.clearCellStyleCache();\n if (this.rowHierarchyType === 'tree') {\n //'grid-tree'模式下不用特意更新,updateRow会更新掉和`tree`模式不一样\n this.scenegraph.updateHierarchyIcon(col, row);\n }\n this.reactCustomLayout?.clearCache();\n if (this.rowHierarchyType !== 'grid-tree' && this.columnHierarchyType !== 'grid-tree') {\n //增加'grid-tree'之前的逻辑是这样子的\n this.scenegraph.updateRow(\n result.removeCellPositionsRowDirection,\n result.addCellPositionsRowDirection,\n result.updateCellPositionsRowDirection,\n recalculateColWidths\n );\n } else {\n // bug 太多了 直接先全部生成吧!! TODO 性能优化\n // if (\n // this.columnHierarchyType === 'grid-tree' &&\n // this.isColumnHeader(col, row) &&\n // oldFrozenRowCount > this.frozenRowCount //p判断这个\n // ) {\n // callUpdateRowOnScenegraph(result, recalculateColWidths, newFrozenRowCount, oldFrozenRowCount, this.scenegraph);\n // callUpdateColOnScenegraph(result, newFrozenColCount, oldFrozenColCount, this.scenegraph);\n // } else {\n // callUpdateColOnScenegraph(result, newFrozenColCount, oldFrozenColCount, this.scenegraph);\n // callUpdateRowOnScenegraph(result, recalculateColWidths, newFrozenRowCount, oldFrozenRowCount, this.scenegraph);\n // }\n\n // if (this.rowHierarchyType === 'grid-tree' || this.columnHierarchyType === 'grid-tree') {\n // this.scenegraph.updateCornerHeaderCells();\n // // if (newFrozenColCount !== oldFrozenColCount) {\n // this.scenegraph.updateRowHeaderCells();\n // // }\n // // if (newFrozenRowCount !== oldFrozenRowCount) {\n // this.scenegraph.updateColumnHeaderCells();\n // // }\n // }\n this.internalProps.stick.changedCells.clear();\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.scrollToRow(visibleStartRow);\n // this.renderWithRecreateCells();\n }\n this.reactCustomLayout?.updateAllCustomCell();\n\n if (checkHasChart) {\n // 检查更新节点状态后总宽高未撑满autoFill是否在起作用\n if (this.autoFillWidth && !notFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight && !notFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n if (this.widthMode === 'adaptive' || notFillWidth || this.heightMode === 'adaptive' || notFillHeight) {\n this.scenegraph.updateChartSizeForResizeColWidth(-1); // 如果收起展开有性能问题 可以排查下这个防范\n }\n }\n this.internalProps._oldRowCount = undefined;\n this.internalProps._oldColCount = undefined;\n }\n /**\n * 通过表头的维度值路径来计算单元格位置 getCellAddressByHeaderPaths接口更强大一些 不限表头 不限参数格式\n * @param dimensionPaths\n * @returns\n */\n getHeaderCellAddressByPath(dimensionPaths: IDimensionInfo[]): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(dimensionPaths);\n return cellAddress;\n }\n /**\n * 通过表头的维度值路径来计算单元格位置\n * @param dimensionPaths\n * @returns\n */\n getCellAddressByHeaderPaths(\n dimensionPaths:\n | {\n colHeaderPaths: IDimensionInfo[];\n rowHeaderPaths: IDimensionInfo[];\n cellLocation: CellLocation;\n }\n | IDimensionInfo[]\n ): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getCellAdressByHeaderPath(\n dimensionPaths\n );\n return cellAddress;\n }\n\n /**\n * 通过传入的坐标 获取该位置当前单元格的维度路径;\n * @param coordinate 从body左上角为原点 coordinate为偏移距离 去计算单元格的headerPath;\n * 如不传coordinate坐标则按取body中左上角第一个单元格的维度路径\n * @returns\n */\n getHeaderPathByXY(coordinate?: { x: number; y: number }): ICellHeaderPaths {\n let cellAddr;\n if (coordinate) {\n cellAddr = this.getCellAt(\n coordinate.x + this.getFrozenColsWidth() + this.scrollLeft + 1,\n coordinate.y + this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n } else {\n cellAddr = this.getCellAt(\n this.getFrozenColsWidth() + this.scrollLeft + 1,\n this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n }\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(cellAddr.col, cellAddr.row);\n return cellHeaderPaths;\n }\n getHierarchyState(col: number, row: number): HierarchyState {\n return (this._getHeaderLayoutMap(col, row) as HeaderData)?.hierarchyState;\n }\n /** 获取列头树结构 */\n getLayoutColumnTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTree();\n }\n /** 获取表格列头树形结构的占位的总节点数 */\n getLayoutColumnTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTreeCount();\n }\n /** 获取行头树结构 */\n getLayoutRowTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTree();\n }\n /** 获取表格行头树形结构的占位的总节点数 */\n getLayoutRowTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTreeCount();\n }\n /**\n * 根据行列号获取表头tree节点,包含了用户在自定义树rowTree及columnTree树上的自定义属性(也是内部布局树的节点,获取后请不要随意修改)\n * @param col\n * @param row\n * @returns\n */\n getCellHeaderTreeNodes(col: number, row: number): ICellHeaderPaths {\n const layoutMap = this.internalProps.layoutMap;\n const headerNodes = layoutMap.getCellHeaderPathsWithTreeNode(col, row);\n return headerNodes;\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const dimensionInfos = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row);\n const result: DropDownMenuEventInfo = {\n dimensionKey: dimensionInfos[dimensionInfos.length - 1].dimensionKey,\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n isPivotCorner: this.isCornerHeader(col, row),\n event: undefined\n };\n return result;\n }\n\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param sort\n */\n setRecords(records: Array<any>): void {\n clearChartRenderQueue();\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.options.records = this.internalProps.records = records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n const options = this.options;\n const internalProps = this.internalProps;\n if (this.options.customConfig?.enableDataAnalysis === false) {\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: internalProps.layoutMap.fullRowDimensionKeys,\n columns: internalProps.layoutMap.colDimensionKeys,\n indicators: internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n this.dataset.setRecords(records);\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = internalProps.layoutMap.columnDimensionTree;\n } else {\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n }\n if (options.rowTree) {\n rowDimensionTree = internalProps.layoutMap.rowDimensionTree;\n } else {\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n this.pivotSortState = [];\n if (options.pivotSortState) {\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this._updateSize();\n this.internalProps.title.resize();\n this.scenegraph.resize();\n }\n this.eventManager.updateEventBinder();\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n }\n\n startEditCell(col?: number, row?: number, value?: string | number) {\n if (isValid(col) && isValid(row)) {\n this.eventManager.isDraging = false;\n this.selectCell(col, row);\n this.editorManager.startEditCell(col, row, value);\n } else if (this.stateManager.select?.cellPos) {\n const { col, row } = this.stateManager.select.cellPos;\n if (isValid(col) && isValid(row)) {\n this.editorManager.startEditCell(col, row, value);\n }\n }\n }\n /** 结束编辑 */\n completeEditCell() {\n this.editorManager.completeEdit();\n }\n /** 获取单元格对应的编辑器 */\n getEditor(col: number, row: number) {\n let editorDefine;\n if (this.isCornerHeader(col, row)) {\n const define = this.getHeaderDefine(col, row);\n editorDefine = (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor;\n } else if (this.isHeader(col, row)) {\n const define = this.getHeaderDefine(col, row);\n editorDefine = (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n editorDefine = (define as ColumnDefine)?.editor ?? this.options.editor;\n }\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n if (typeof editorDefine === 'string') {\n return editors.get(editorDefine);\n }\n return editorDefine as IEditor;\n }\n /** 检查单元格是否定义过编辑器 不管编辑器是否有效 只要有定义就返回true */\n isHasEditorDefine(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n return isValid(editorDefine);\n }\n /** 更改单元格数据 会触发change_cell_value事件*/\n changeCellValue(col: number, row: number, value: string | undefined, workOnEditableCell = false) {\n if ((workOnEditableCell && this.isHasEditorDefine(col, row)) || workOnEditableCell === false) {\n let newValue: any = value;\n const oldValue = this.getCellOriginValue(col, row);\n const rawValue = this.getCellRawValue(col, row);\n if (typeof rawValue === 'number' && isAllDigits(value)) {\n newValue = parseFloat(value);\n }\n this._changeCellValueToDataSet(col, row, oldValue, newValue);\n // this.scenegraph.updateCellContent(col, row);\n const range = this.getCellRange(col, row);\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n this.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n // 更新所有的统计单元格\n if (this.options.dataConfig?.updateAggregationOnEditCell ?? false) {\n for (let col = 0; col < this.colCount; col++) {\n for (let row = 0; row < this.rowCount; row++) {\n if (this.internalProps.layoutMap.isAggregation(col, row)) {\n this.scenegraph.updateCellContent(col, row);\n }\n }\n }\n }\n if (this.widthMode === 'adaptive' || (this.autoFillWidth && this.getAllColsWidth() <= this.tableNoFrameWidth)) {\n if (this.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.scenegraph.recalculateColWidths();\n }\n } else if (!this.internalProps._widthResizedColMap.has(col)) {\n const oldWidth = this.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.rowCount - 1, this, false);\n if (newWidth !== oldWidth) {\n this.scenegraph.updateColWidth(col, newWidth - oldWidth);\n }\n }\n if (\n this.heightMode === 'adaptive' ||\n (this.autoFillHeight && this.getAllRowsHeight() <= this.tableNoFrameHeight)\n ) {\n if (this.internalProps._heightResizedRowMap.size === 0) {\n this.scenegraph.recalculateRowHeights();\n }\n } else if (this.isAutoRowHeight(row) && !this.internalProps._heightResizedRowMap.has(row)) {\n const oldHeight = this.getRowHeight(row);\n const newHeight = computeRowHeight(row, 0, this.colCount - 1, this);\n this.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n if (oldValue !== newValue) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col,\n row,\n rawValue,\n currentValue: oldValue,\n changedValue: newValue\n });\n }\n this.scenegraph.updateNextFrame();\n }\n }\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues(startCol: number, startRow: number, values: string[][], workOnEditableCell = false) {\n let pasteColEnd = startCol;\n let pasteRowEnd = startRow;\n // const rowCount = values.length;\n //#region 提前组织好未更改前的数据\n const beforeChangeValues: (string | number)[][] = [];\n const oldValues: (string | number)[][] = [];\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > this.rowCount - 1) {\n break;\n }\n const rowValues = values[i];\n const rawRowValues: (string | number)[] = [];\n const oldRowValues: (string | number)[] = [];\n beforeChangeValues.push(rawRowValues);\n oldValues.push(oldRowValues);\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > this.colCount - 1) {\n break;\n }\n const beforeChangeValue = this.getCellRawValue(startCol + j, startRow + i);\n rawRowValues.push(beforeChangeValue);\n const oldValue = this.getCellOriginValue(startCol + j, startRow + i);\n oldRowValues.push(oldValue);\n }\n }\n //#endregion\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > this.rowCount - 1) {\n break;\n }\n pasteRowEnd = startRow + i;\n const rowValues = values[i];\n let thisRowPasteColEnd = startCol;\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > this.colCount - 1) {\n break;\n }\n\n thisRowPasteColEnd = startCol + j;\n if (\n (workOnEditableCell && this.isHasEditorDefine(startCol + j, startRow + i)) ||\n workOnEditableCell === false\n ) {\n const value = rowValues[j];\n let newValue: string | number = value;\n const oldValue = oldValues[i][j];\n const rawValue = beforeChangeValues[i][j];\n if (typeof rawValue === 'number' && isAllDigits(value)) {\n newValue = parseFloat(value);\n }\n this._changeCellValueToDataSet(startCol + j, startRow + i, oldValue, newValue);\n const changedValue = this.getCellOriginValue(startCol + j, startRow + i);\n if (changedValue !== oldValue) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col: startCol + j,\n row: startRow + i,\n rawValue,\n currentValue: oldValue,\n changedValue\n });\n }\n }\n }\n pasteColEnd = Math.max(pasteColEnd, thisRowPasteColEnd);\n }\n\n // const cell_value = this.getCellValue(col, row);\n const startRange = this.getCellRange(startCol, startRow);\n const range = this.getCellRange(pasteColEnd, pasteRowEnd);\n for (let sCol = startRange.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = startRange.start.row; sRow <= range.end.row; sRow++) {\n this.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n // 更新所有的统计单元格\n if (this.options.dataConfig?.updateAggregationOnEditCell ?? false) {\n for (let col = 0; col < this.colCount; col++) {\n for (let row = 0; row < this.rowCount; row++) {\n if (this.internalProps.layoutMap.isAggregation(col, row)) {\n this.scenegraph.updateCellContent(col, row);\n }\n }\n }\n }\n if (this.widthMode === 'adaptive' || (this.autoFillWidth && this.getAllColsWidth() <= this.tableNoFrameWidth)) {\n if (this.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.scenegraph.recalculateColWidths();\n }\n } else {\n for (let sCol = startCol; sCol <= range.end.col; sCol++) {\n if (!this.internalProps._widthResizedColMap.has(sCol)) {\n const oldWidth = this.getColWidth(sCol);\n const newWidth = computeColWidth(sCol, 0, this.rowCount - 1, this, false);\n if (newWidth !== oldWidth) {\n this.scenegraph.updateColWidth(sCol, newWidth - oldWidth);\n }\n }\n }\n }\n\n if (this.heightMode === 'adaptive' || (this.autoFillHeight && this.getAllRowsHeight() <= this.tableNoFrameHeight)) {\n this.scenegraph.recalculateRowHeights();\n } else if (this.isAutoRowHeight(startRow)) {\n const rows: number[] = [];\n const deltaYs: number[] = [];\n for (let sRow = startRow; sRow <= range.end.row; sRow++) {\n if (this.rowHeightsMap.get(sRow)) {\n // 已经计算过行高的才走更新逻辑\n const oldHeight = this.getRowHeight(sRow);\n const newHeight = computeRowHeight(sRow, 0, this.colCount - 1, this);\n rows.push(sRow);\n deltaYs.push(newHeight - oldHeight);\n }\n }\n this.scenegraph.updateRowsHeight(rows, deltaYs);\n }\n\n this.scenegraph.updateNextFrame();\n }\n\n private _changeCellValueToDataSet(col: number, row: number, oldValue: string | number, newValue: string | number) {\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n this.records[rowIndex][colIndex] = newValue;\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (this.isCornerHeader(col, row)) {\n this.internalProps.layoutMap.changeCornerTitle(col, row, newValue as string);\n } else if (this.isHeader(col, row)) {\n this.internalProps.layoutMap.changeTreeNodeTitle(col, row, newValue as string);\n\n !this.isCornerHeader(col, row) &&\n this.dataset.changeRecordFieldValue(\n cellDimensionPath.colHeaderPaths?.length\n ? cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].dimensionKey\n : cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].dimensionKey,\n oldValue,\n newValue\n );\n } else {\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n this.dataset.changeTreeNodeValue(\n !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n newValue\n );\n }\n } else if (this.flatDataToObjects) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n\n if (this.isHeader(col, row)) {\n this.internalProps.layoutMap.changeTreeNodeTitle(col, row, newValue as string);\n\n !this.isCornerHeader(col, row) &&\n this.flatDataToObjects.changeRecordFieldValue(\n cellDimensionPath.colHeaderPaths?.length\n ? cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].dimensionKey\n : cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].dimensionKey,\n oldValue,\n newValue\n );\n } else {\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n this.flatDataToObjects.changeTreeNodeValue(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n newValue\n );\n }\n }\n }\n _hasCustomRenderOrLayout() {\n if (this.options.customRender) {\n return true;\n }\n const { columnsDefine, rowsDefine, indicatorsDefine } = this.internalProps.layoutMap;\n for (let i = 0; i < columnsDefine.length; i++) {\n const columnDefine = columnsDefine[i];\n if (typeof columnDefine !== 'string' && (columnDefine.headerCustomLayout || columnDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < rowsDefine.length; i++) {\n const rowDefine = rowsDefine[i];\n if (typeof rowDefine !== 'string' && (rowDefine.headerCustomLayout || rowDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < indicatorsDefine.length; i++) {\n const indicatorDefine = indicatorsDefine[i];\n if (\n typeof indicatorDefine !== 'string' &&\n (indicatorDefine.customLayout ||\n indicatorDefine.headerCustomLayout ||\n indicatorDefine.customRender ||\n indicatorDefine.headerCustomRender)\n ) {\n return true;\n }\n }\n return false;\n }\n\n changeRecordOrder(source: number, target: number) {\n //\n }\n\n /**\n * 树形展示场景下,如果需要动态插入子节点的数据可以配合使用该接口,其他情况不适用\n * @param children 设置到该单元格的子节点\n * @param records 该节点展开后新增数据\n * @param col 需要设置子节点的单元格地址\n * @param row 需要设置子节点的单元格地址\n */\n setTreeNodeChildren(children: IHeaderTreeDefine[], records: any[], col: number, row: number) {\n if (this.flatDataToObjects) {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n headerTreeNode.children = children;\n this._refreshHierarchyState(col, row, true, () => {\n this.flatDataToObjects.changeDataConfig({\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys,\n indicators: this.internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: this.internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: this.internalProps.layoutMap.indicatorDimensionKey\n });\n this.flatDataToObjects.addRecords(records);\n });\n } else {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n headerTreeNode.children = children;\n this._refreshHierarchyState(col, row, true, () => {\n this.dataset._rowTreeHasChanged();\n this.dataset.changeDataConfig({\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys\n });\n this.dataset.addRecords(records);\n });\n }\n }\n\n /**\n * 更新数据过滤规则 对应dataConfig中filterRules配置格式\n * @param filterRules 过滤规则\n * @param isResetTree 是否重置表头树结构。 当为true时,会重置表头树结构,当为false时,表头树结构维持不变\n */\n updateFilterRules(filterRules: FilterRules, isResetTree: boolean = false) {\n this.internalProps.dataConfig.filterRules = filterRules;\n if (isResetTree) {\n // 由于筛选数据可能导致行列变化,所以需要重置树结构\n this.dataset.updateFilterRules(filterRules, true);\n this.internalProps.layoutMap.resetHeaderTree();\n } else {\n this.dataset.updateFilterRules(filterRules);\n }\n this.renderWithRecreateCells();\n }\n /** 获取过滤后的数据 */\n getFilteredRecords() {\n return this.dataset?.filteredRecords;\n }\n\n getCellPivotRole(col: number, row: number) {\n const path = this.getCellHeaderPaths(col, row);\n const { cellLocation, colHeaderPaths, rowHeaderPaths } = path;\n\n let colRole: CellPivotRole = colHeaderPaths.length ? 'normal' : undefined;\n let rowRole: CellPivotRole = rowHeaderPaths.length ? 'normal' : undefined;\n\n (colHeaderPaths as IDimensionInfo[]).forEach((path: IDimensionInfo) => {\n if (path.role === 'sub-total') {\n colRole = 'sub-total';\n } else if (path.role === 'grand-total') {\n colRole = 'grand-total';\n }\n });\n\n (rowHeaderPaths as IDimensionInfo[]).forEach((path: IDimensionInfo) => {\n if (path.role === 'sub-total') {\n rowRole = 'sub-total';\n } else if (path.role === 'grand-total') {\n rowRole = 'grand-total';\n }\n });\n\n return {\n colRole,\n rowRole,\n cellLocation\n };\n }\n\n /**\n * 开启层级节点展开的loading动画状态,在设置数据调用setRecordChildren后会自动关闭loading\n * @param col\n * @param row\n */\n setLoadingHierarchyState(col: number, row: number) {\n this.scenegraph.setLoadingHierarchyState(col, row);\n }\n\n /**\n * 展开行表头树的所有节点\n */\n expandAllForRowTree() {\n if (this.rowHierarchyType !== 'tree' && this.rowHierarchyType !== 'grid-tree') {\n return;\n }\n\n if (this.internalProps.layoutMap.rowDimensionTree) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.internalProps.layoutMap.expandAllForRowDimensionTree();\n this.renderWithRecreateCells();\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.expand,\n changeAll: true\n });\n }\n }\n\n /**\n * 折叠行表头树的所有节点\n */\n collapseAllForRowTree() {\n if (this.rowHierarchyType !== 'tree' && this.rowHierarchyType !== 'grid-tree') {\n return;\n }\n\n if (this.internalProps.layoutMap.rowDimensionTree) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.internalProps.layoutMap.collapseAllForRowDimensionTree();\n this.renderWithRecreateCells();\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.collapse,\n changeAll: true\n });\n }\n }\n\n /**\n * 展开列表头树的所有节点\n */\n expandAllForColumnTree() {\n if (this.columnHierarchyType !== 'grid-tree') {\n return;\n }\n\n if (this.internalProps.layoutMap.columnDimensionTree) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.internalProps.layoutMap.expandAllForColumnDimensionTree();\n this.renderWithRecreateCells();\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.expand,\n changeAll: true\n });\n }\n }\n\n /**\n * 折叠列表头树的所有节点\n */\n collapseAllForColumnTree() {\n if (this.columnHierarchyType !== 'grid-tree') {\n return;\n }\n\n if (this.internalProps.layoutMap.columnDimensionTree) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.internalProps.layoutMap.collapseAllForColumnDimensionTree();\n this.renderWithRecreateCells();\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.collapse,\n changeAll: true\n });\n }\n }\n\n release() {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.editorManager?.release();\n super.release();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/PivotTable.ts"],"names":[],"mappings":"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","file":"PivotTable.js","sourcesContent":["import type {\n FieldData,\n FieldDef,\n FieldFormat,\n PivotTableAPI,\n SortRules,\n PivotSortState,\n CellAddress,\n ICellHeaderPaths,\n DropDownMenuEventInfo,\n FieldKeyDef,\n PivotTableConstructorOptions,\n IHeaderTreeDefine,\n IDimensionInfo,\n SortOrder,\n IPagination,\n CellLocation,\n IIndicator,\n ColumnDefine,\n SortByIndicatorRule,\n SortTypeRule,\n SortRule,\n FilterRules,\n CellPivotRole\n} from './ts-types';\nimport { HierarchyState, SortType } from './ts-types';\nimport { PivotHeaderLayoutMap } from './layout/pivot-header-layout';\nimport { FlatDataToObjects } from './dataset/flatDataToObject';\nimport { PIVOT_TABLE_EVENT_TYPE } from './ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport { cellInRange, emptyFn } from './tools/helper';\nimport { Dataset } from './dataset/dataset';\nimport { BaseTable } from './core/BaseTable';\nimport type { BaseTableAPI, HeaderData, PivotTableProtected } from './ts-types/base-table';\nimport type { ITitleComponent } from './components/title/title';\nimport { cloneDeep, isNumber, isValid } from '@visactor/vutils';\nimport { Env } from './tools/env';\nimport type { ITreeLayoutHeadNode } from './layout/tree-helper';\nimport { DimensionTree, type LayouTreeNode } from './layout/tree-helper';\nimport { TABLE_EVENT_TYPE } from './core/TABLE_EVENT_TYPE';\nimport { EditManager } from './edit/edit-manager';\nimport * as editors from './edit/editors';\nimport type { IEditor } from '@visactor/vtable-editors';\nimport { computeColWidth } from './scenegraph/layout/compute-col-width';\nimport { computeRowHeight } from './scenegraph/layout/compute-row-height';\nimport { isAllDigits } from './tools/util';\nimport type { IndicatorData } from './ts-types/list-table/layout-map/api';\nimport { cloneDeepSpec } from '@visactor/vutils-extension';\nimport {\n deleteHideIndicatorNode,\n parseColKeyRowKeyForPivotTable,\n supplementIndicatorNodesForCustomTree\n} from './layout/layout-helper';\nimport type { IEmptyTipComponent } from './components/empty-tip/empty-tip';\nimport { Factory } from './core/factory';\nimport { callUpdateColOnScenegraph, callUpdateRowOnScenegraph } from './tools/diff-cell';\nimport { clearChartRenderQueue } from './scenegraph/graphic/contributions/chart-render-helper';\n\nexport class PivotTable extends BaseTable implements PivotTableAPI {\n layoutNodeId: { seqId: number } = { seqId: 0 };\n declare internalProps: PivotTableProtected;\n declare options: PivotTableConstructorOptions;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n dataset?: Dataset; //数据处理对象 开启数据透视分析的表\n flatDataToObjects?: FlatDataToObjects; //数据处理对象 聚合后的flat数据 转成便于查询的行列二维数组\n // drillMenu: Menu; //上卷下钻的按钮\n // eslint-disable-next-line default-param-last\n constructor(options: PivotTableConstructorOptions);\n constructor(container: HTMLElement, options: PivotTableConstructorOptions);\n constructor(container?: HTMLElement | PivotTableConstructorOptions, options?: PivotTableConstructorOptions) {\n super(container as HTMLElement, options);\n options = this.options;\n if (options) {\n if (!options.rowHierarchyType) {\n options.rowHierarchyType = 'grid';\n }\n if (!options.columnHierarchyType) {\n options.columnHierarchyType = 'grid';\n }\n if ((options as any).layout) {\n //TODO hack处理之前的demo都是定义到layout上的 所以这里直接并到options中\n Object.assign(options, (options as any).layout);\n }\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = cloneDeepSpec(options.indicators);\n options.indicators?.forEach((indicatorDefine, index) => {\n //如果editor 是一个IEditor的实例 需要这样重新赋值 否则clone后变质了\n if (typeof indicatorDefine === 'object' && indicatorDefine?.editor) {\n (this.internalProps.indicators![index] as IIndicator).editor = indicatorDefine.editor;\n }\n });\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n this.internalProps.records = options.records;\n\n //分页配置\n this.pagination = options.pagination;\n this.internalProps.columnResizeType = options.resize?.columnResizeType ?? options.columnResizeType ?? 'column';\n this.internalProps.rowResizeType = options.resize?.rowResizeType ?? options.rowResizeType ?? 'row';\n this.internalProps.dataConfig = cloneDeep(options.dataConfig);\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n this.internalProps.columnWidthConfigForRowHeader = options.columnWidthConfigForRowHeader;\n\n const records = this.internalProps.records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n if (options.customConfig?.enableDataAnalysis === false) {\n // let columnDimensionTree;\n // let rowDimensionTree;\n // if (options.columnTree) {\n const columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n // }\n // if (options.rowTree) {\n const rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n // }\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(this, null, columnDimensionTree, rowDimensionTree);\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys,\n indicators: this.internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: this.internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: this.internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n const keysResults = parseColKeyRowKeyForPivotTable(this, options);\n const { rowKeys, columnKeys, indicatorKeys } = keysResults;\n let { columnDimensionTree, rowDimensionTree } = keysResults;\n this.dataset = new Dataset(\n this.internalProps.dataConfig,\n // this.pagination,\n rowKeys,\n columnKeys,\n // options.indicatorsAsCol === false ? rowKeys.concat(IndicatorDimensionKeyPlaceholder) : rowKeys,\n // options.indicatorsAsCol !== false ? columnKeys.concat(IndicatorDimensionKeyPlaceholder) : columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n options.records,\n options.rowHierarchyType,\n options.columnHierarchyType,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n false,\n !!options.extensionRows,\n !!options.parseCustomTreeToMatchRecords\n );\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n } else {\n if (columnDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(columnDimensionTree.tree.children, options.indicators, true, this);\n columnDimensionTree.reset(columnDimensionTree.tree.children);\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n } else {\n if (rowDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(rowDimensionTree.tree.children, options.indicators, true, this);\n rowDimensionTree.reset(rowDimensionTree.tree.children);\n }\n }\n this.internalProps.layoutMap = new PivotHeaderLayoutMap(\n this,\n this.dataset,\n columnDimensionTree,\n rowDimensionTree\n );\n }\n this._changePivotSortStateBySortRules();\n if ((options.pivotSortState?.length ?? 0) > 0) {\n this.pivotSortState = [];\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n if (Env.mode !== 'node') {\n this.editorManager = new EditManager(this);\n }\n\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n this.stateManager.initCheckedState(records);\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n // this.render();\n\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n // this.scenegraph.resize();//下面有个resize了 所以这个可以去掉\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n //为了确保用户监听得到这个事件 这里做了异步 确保vtable实例已经初始化完成\n setTimeout(() => {\n if (this.isReleased) {\n return;\n }\n this.resize();\n this.fireListeners(TABLE_EVENT_TYPE.INITIALIZED, null);\n }, 0);\n }\n }\n static get EVENT_TYPE(): typeof PIVOT_TABLE_EVENT_TYPE {\n return PIVOT_TABLE_EVENT_TYPE;\n }\n isListTable(): false {\n return false;\n }\n isPivotTable(): true {\n return true;\n }\n isPivotChart(): false {\n return false;\n }\n get recordsCount() {\n return this.records?.length;\n }\n _canResizeColumn(col: number, row: number): boolean {\n const ifCan = super._canResizeColumn(col, row);\n if (ifCan) {\n const isSeriesNumber = this.internalProps.layoutMap.isSeriesNumber(col, row);\n if (isSeriesNumber && this.internalProps.rowSeriesNumber.disableColumnResize === true) {\n return false;\n } else if (!this.internalProps.layoutMap.indicatorsAsCol) {\n // 列上是否配置了禁止拖拽列宽的配置项disableColumnResize\n const cellDefine = this.internalProps.layoutMap.getBody(col, this.columnHeaderLevelCount);\n if ((cellDefine as IndicatorData)?.disableColumnResize) {\n return false;\n }\n }\n }\n return ifCan;\n }\n updateOption(\n options: PivotTableConstructorOptions,\n updateConfig: { clearColWidthCache?: boolean; clearRowHeightCache?: boolean } = {\n clearColWidthCache: true,\n clearRowHeightCache: true\n }\n ) {\n const internalProps = this.internalProps;\n //维护选中状态\n // const range = internalProps.selection.range; //保留原有单元格选中状态\n super.updateOption(options, updateConfig);\n if (!options.rowHierarchyType) {\n options.rowHierarchyType = 'grid';\n }\n if (!options.columnHierarchyType) {\n options.columnHierarchyType = 'grid';\n }\n this.layoutNodeId = { seqId: 0 };\n this.internalProps.columns = cloneDeep(options.columns);\n this.internalProps.rows = cloneDeep(options.rows);\n this.internalProps.indicators = !options.indicators?.length ? [] : cloneDeepSpec(options.indicators);\n options.indicators?.forEach((indicatorDefine, index) => {\n if (typeof indicatorDefine === 'object' && indicatorDefine?.editor) {\n (this.internalProps.indicators[index] as IIndicator).editor = indicatorDefine.editor;\n }\n });\n this.internalProps.columnTree =\n options.indicatorsAsCol && !options.columns?.length && !options.columnTree ? [] : cloneDeep(options.columnTree);\n this.internalProps.rowTree =\n !options.indicatorsAsCol && !options.rows?.length && !options.rowTree ? [] : cloneDeep(options.rowTree);\n options.records && (this.internalProps.records = options.records);\n this.stateManager.initCheckedState(this.internalProps.records);\n this.stateManager.updateDrillState(undefined, undefined, false, false, -1, -1);\n //分页配置\n this.pagination = options.pagination;\n // 更新protectedSpace\n internalProps.columnResizeType = options.resize?.columnResizeType ?? options.columnResizeType ?? 'column';\n internalProps.rowResizeType = options.resize?.rowResizeType ?? options.rowResizeType ?? 'row';\n internalProps.dataConfig = cloneDeep(options.dataConfig);\n this.internalProps.columnWidthConfig = options.columnWidthConfig;\n this.internalProps.columnWidthConfigForRowHeader = options.columnWidthConfigForRowHeader;\n\n //维护tree树形结构的展开状态\n if (\n options?.rowHierarchyType !== 'grid' &&\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType !== 'grid' &&\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowExpandLevel === options?.rowExpandLevel\n ) {\n const beforeRowDimensions = (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowDimensionTree.tree.children;\n this.internalProps.rowTree?.forEach((node: IHeaderTreeDefine, index: number) => {\n const beforeRowDimension = beforeRowDimensions.find(\n item => item.dimensionKey === node.dimensionKey && item.value === node.value\n );\n if (beforeRowDimension) {\n this._syncHierarchyState(beforeRowDimension, node);\n }\n });\n }\n const records = this.internalProps.records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n\n //TODO 这里需要加上判断 dataConfig是否有配置变化\n if (options.customConfig?.enableDataAnalysis === false) {\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = new DimensionTree(\n (this.internalProps.columnTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n }\n if (options.rowTree) {\n rowDimensionTree = new DimensionTree(\n (this.internalProps.rowTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n }\n internalProps.layoutMap.clearHeaderPathCache();\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, null, columnDimensionTree, rowDimensionTree);\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: internalProps.layoutMap.fullRowDimensionKeys,\n columns: internalProps.layoutMap.colDimensionKeys,\n indicators: internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n const keysResults = parseColKeyRowKeyForPivotTable(this, options);\n const { rowKeys, columnKeys, indicatorKeys } = keysResults;\n let { columnDimensionTree, rowDimensionTree } = keysResults;\n this.dataset = new Dataset(\n internalProps.dataConfig,\n // this.pagination,\n rowKeys,\n columnKeys,\n indicatorKeys,\n this.internalProps.indicators,\n options.indicatorsAsCol ?? true,\n records,\n options.rowHierarchyType,\n options.columnHierarchyType,\n this.internalProps.columnTree, //传递自定义树形结构会在dataset中补充指标节点children\n this.internalProps.rowTree,\n false,\n !!options.extensionRows,\n !!options.parseCustomTreeToMatchRecords\n );\n if (!options.columnTree) {\n if (options.indicatorsAsCol !== false) {\n this.dataset.colHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.colHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n } else {\n if (columnDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(columnDimensionTree.tree.children, options.indicators, true, this);\n columnDimensionTree.reset(columnDimensionTree.tree.children);\n }\n }\n if (!options.rowTree) {\n if (options.indicatorsAsCol === false) {\n this.dataset.rowHeaderTree = supplementIndicatorNodesForCustomTree(\n this.dataset.rowHeaderTree,\n options.indicators\n );\n }\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n } else {\n if (rowDimensionTree.hasHideNode) {\n deleteHideIndicatorNode(rowDimensionTree.tree.children, options.indicators, true, this);\n rowDimensionTree.reset(rowDimensionTree.tree.children);\n }\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n }\n this._changePivotSortStateBySortRules();\n\n if ((options.pivotSortState?.length ?? 0) > 0) {\n this.pivotSortState = [];\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // this.hasMedia = null; // 避免重复绑定\n // 清空目前数据\n if (internalProps.releaseList) {\n internalProps.releaseList.forEach(releaseObj => releaseObj?.release?.());\n internalProps.releaseList = null;\n }\n // // 恢复selection状态\n // internalProps.selection.range = range;\n // this._updateSize();\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n\n // if (this.internalProps.title && !this.internalProps.title.isReleased) {\n // this._updateSize();\n // this.internalProps.title.resize();\n // this.scenegraph.resize();\n // }\n if (options.title) {\n const Title = Factory.getComponent('title') as ITitleComponent;\n this.internalProps.title = new Title(options.title, this);\n this.scenegraph.resize();\n }\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n setTimeout(() => {\n this.fireListeners(TABLE_EVENT_TYPE.UPDATED, null);\n }, 0);\n // this.render();\n return new Promise(resolve => {\n setTimeout(resolve, 0);\n });\n }\n\n /**\n * 更新页码\n * @param pagination 修改页码\n */\n updatePagination(pagination?: IPagination): void {\n this.internalProps.layoutMap.clearHeaderPathCache();\n\n if (pagination) {\n if (!this.pagination) {\n this.pagination = { currentPage: 0, perPageCount: 0 };\n }\n typeof pagination.currentPage === 'number' &&\n pagination.currentPage >= 0 &&\n (this.pagination.currentPage = pagination.currentPage);\n pagination.perPageCount &&\n (this.pagination.perPageCount = pagination.perPageCount || this.pagination.perPageCount);\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(this.pagination);\n // this.refreshHeader();\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n } else if (this.pagination) {\n // 原来有分页 现在更新成不分页\n this.pagination = undefined;\n // 清空单元格内容\n this.scenegraph.clearCells();\n //数据源缓存数据更新\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).setPagination(undefined);\n // this.refreshHeader();\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n // 生成单元格场景树\n this.scenegraph.createSceneGraph();\n this.render();\n }\n }\n\n refreshHeader(): void {\n //设置列宽\n this.setMinMaxLimitWidth(true);\n //刷新表头,原来这里是_refreshRowCount 后改名为_refreshRowColCount 因为表头定义会影响行数,而转置模式下会影响列数\n this.refreshRowColCount();\n }\n\n refreshRowColCount(): void {\n const table = this;\n const { layoutMap } = table.internalProps;\n if (!layoutMap) {\n return;\n }\n table.colCount = layoutMap.colCount ?? 0;\n table.rowCount = layoutMap.rowCount ?? 0;\n\n this.internalProps.frozenColCount = this.options.frozenColCount\n ? this.options.frozenColCount\n : (layoutMap.rowHeaderLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount;\n // this.internalProps.frozenColCount= Math.max(\n // (layoutMap.rowHeaderLevelCount ?? 0) + layoutMap.leftRowSeriesNumberColumnCount,\n // this.options.frozenColCount ?? 0\n // );\n // 不能使用frozenRowCount setter 因为会把options.frozenRowCount赋值\n table._setFrozenRowCount(Math.max(layoutMap.headerLevelCount, this.options.frozenRowCount ?? 0));\n\n if (table.bottomFrozenRowCount !== (this.options.bottomFrozenRowCount ?? 0)) {\n table.bottomFrozenRowCount = this.options.bottomFrozenRowCount ?? 0;\n }\n if (table.rightFrozenColCount !== (this.options.rightFrozenColCount ?? 0)) {\n table.rightFrozenColCount = this.options.rightFrozenColCount ?? 0;\n }\n this.stateManager.setFrozenCol(this.internalProps.frozenColCount);\n this.stateManager.setFrozenRow(this.frozenRowCount);\n }\n protected _getSortFuncFromHeaderOption(\n columns: undefined,\n field: FieldDef,\n fieldKey?: FieldKeyDef\n ): ((v1: any, v2: any, order: SortOrder) => 0 | 1 | -1) | undefined {\n return undefined;\n }\n /**\n * Get rowHierarchyType of pivotTable\n */\n get rowHierarchyType(): 'grid' | 'tree' | 'grid-tree' {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType;\n }\n /**\n * Get columnHierarchyType of pivotTable\n */\n get columnHierarchyType(): 'grid' | 'grid-tree' {\n return (this.internalProps.layoutMap as PivotHeaderLayoutMap).columnHierarchyType;\n }\n /**\n * 将现有tree中的的hierarchyState同步到rows透视树中\n * @param sourceNode\n * @param targetNode\n */\n _syncHierarchyState(sourceNode: any, targetNode: IHeaderTreeDefine) {\n if (sourceNode.value === targetNode.value && sourceNode.dimensionKey === targetNode.dimensionKey) {\n targetNode.hierarchyState =\n targetNode.hierarchyState ?? (targetNode?.children ? sourceNode.hierarchyState : undefined);\n (targetNode?.children as IHeaderTreeDefine[])?.forEach?.((targetChildNode: IHeaderTreeDefine, index: number) => {\n if (sourceNode?.children?.[index] && targetChildNode) {\n const beforeRowDimension = sourceNode.children.find(\n (item: any) => item.dimensionKey === targetChildNode.dimensionKey && item.value === targetChildNode.value\n );\n if (beforeRowDimension) {\n this._syncHierarchyState(beforeRowDimension, targetChildNode);\n }\n }\n });\n }\n }\n getRecordShowIndexByCell(col: number, row: number): number {\n return undefined;\n }\n getTableIndexByRecordIndex(recordIndex: number): number {\n return undefined;\n }\n getTableIndexByField(field: FieldDef): number {\n return undefined;\n }\n getCellAddrByFieldRecord(field: FieldDef, recordIndex: number): CellAddress {\n return undefined;\n }\n getBodyIndexByRow(row: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByRow(row);\n }\n getBodyIndexByCol(col: number): number {\n const { layoutMap } = this.internalProps;\n return layoutMap.getBodyIndexByCol(col);\n }\n getFieldData(field: string, col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n return this.records[rowIndex]?.[colIndex];\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (cellDimensionPath) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n if (aggregator.records && aggregator.records.length >= 1) {\n return aggregator.records[0][field];\n }\n // return ''\n }\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n if (treeNode?.record) {\n return treeNode?.record[field];\n }\n }\n }\n getCellValue(col: number, row: number, skipCustomMerge?: boolean): FieldData {\n if (!skipCustomMerge) {\n const customMergeText = this.getCustomMergeValue(col, row);\n if (customMergeText) {\n return customMergeText;\n }\n }\n if (this.internalProps.layoutMap.isSeriesNumber(col, row)) {\n if (this.internalProps.layoutMap.isSeriesNumberInHeader(col, row)) {\n const { title } = this.internalProps.layoutMap.getSeriesNumberHeader(col, row);\n return title;\n }\n const { format } = this.internalProps.layoutMap.getSeriesNumberBody(col, row);\n return typeof format === 'function' ? format(col, row, this) : row - this.columnHeaderLevelCount + 1;\n } else if (this.internalProps.layoutMap.isHeader(col, row)) {\n const { title, fieldFormat } = this.internalProps.layoutMap.getHeader(col, row) as HeaderData;\n return typeof fieldFormat === 'function' ? fieldFormat(title, col, row, this as BaseTableAPI) : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n // const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (typeof fieldFormat === 'function') {\n const fieldResult = fieldFormat(dataValue, col, row, this as BaseTableAPI);\n return fieldResult;\n }\n return dataValue;\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n ?.map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n ?.map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n // return typeof fieldFormat === 'function'\n // ? fieldFormat(valueNode?.value, col, row, this as BaseTableAPI)\n // : valueNode?.value ?? '';\n return aggregator.formatValue\n ? aggregator.formatValue(col, row, this as BaseTableAPI)\n : typeof fieldFormat === 'function'\n ? fieldFormat(aggregator?.value(), col, row, this as BaseTableAPI)\n : aggregator?.value() ?? '';\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const valueNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n const { fieldFormat } = this.internalProps.layoutMap.getBody(col, row) as IndicatorData;\n return typeof fieldFormat === 'function'\n ? fieldFormat(valueNode?.value, col, row, this as BaseTableAPI)\n : valueNode?.value ?? '';\n }\n // return this.getFieldData(fieldFormat || field, col, row);\n }\n\n getCellOriginValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n return treeNode?.value;\n }\n\n // const { field } = table.internalProps.layoutMap.getBody(col, row);\n // return table.getFieldData(field, col, row);\n }\n\n /** 获取单元格展示数据源最原始值 */\n getCellRawValue(col: number, row: number): FieldData {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n const { title } = table.internalProps.layoutMap.getHeader(col, row);\n return typeof title === 'function' ? title() : title;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n false,\n indicatorPosition\n );\n return aggregator.value ? aggregator.value() : undefined;\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n return treeNode?.value;\n }\n }\n\n // 获取原始数据\n getCellOriginRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n true,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey\n );\n return treeNode?.record;\n }\n }\n\n getCellRawRecord(col: number, row: number) {\n const table = this;\n if (table.internalProps.layoutMap.isHeader(col, row)) {\n return undefined;\n }\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n const dataValue = this.records[rowIndex]?.[colIndex];\n return dataValue;\n } else if (this.dataset) {\n let indicatorPosition: { position: 'col' | 'row'; index?: number };\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any, index: number) => {\n if (colPath.indicatorKey) {\n indicatorPosition = {\n position: 'col',\n index\n };\n }\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any, index: number) => {\n if (rowPath.indicatorKey) {\n indicatorPosition = {\n position: 'row',\n index\n };\n }\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const aggregator = this.dataset.getAggregator(\n // !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n // this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n false,\n indicatorPosition\n );\n return aggregator.records;\n // return ''\n } else if (this.flatDataToObjects) {\n //数据为行列树结构 根据row col获取对应的维度名称 查找到对应值\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n const treeNode = this.flatDataToObjects.getTreeNode(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n false\n );\n return treeNode?.record;\n }\n }\n /**\n * 全量更新排序规则\n * @param sortRules\n */\n updateSortRules(sortRules: SortRules, col?: number, row?: number) {\n if (this.internalProps.dataConfig) {\n this.internalProps.dataConfig.sortRules = sortRules;\n } else {\n this.internalProps.dataConfig = { sortRules };\n }\n this.dataset.updateSortRules(sortRules);\n this._changePivotSortStateBySortRules();\n const { layoutMap } = this.internalProps;\n layoutMap.resetHeaderTree();\n // 清空单元格内容\n this.scenegraph.clearCells();\n if (isNumber(col) && isNumber(row)) {\n if (this.isRowHeader(col, row)) {\n this.setMinMaxLimitWidth(true);\n this.internalProps._widthResizedColMap.clear();\n } else if (this.isCornerHeader(col, row)) {\n if (layoutMap.cornerSetting.titleOnDimension === 'column') {\n this.setMinMaxLimitWidth(true);\n this.internalProps._widthResizedColMap.clear();\n } else if (layoutMap.cornerSetting.titleOnDimension === 'row') {\n this.internalProps._heightResizedRowMap.clear();\n }\n } else if (this.isColumnHeader(col, row)) {\n this.internalProps._heightResizedRowMap.clear();\n }\n this.refreshRowColCount();\n } else {\n this.refreshHeader();\n }\n this.internalProps.useOneRowHeightFillAll = false;\n // 生成单元格场景树\n this.scenegraph.createSceneGraph(true);\n this.render();\n }\n _changePivotSortStateBySortRules() {\n this.pivotSortState = [];\n const sortRules = this.internalProps.dataConfig?.sortRules ?? [];\n for (let i = 0; i < sortRules.length; i++) {\n const sortRule = sortRules[i];\n // if ((sortRule as SortByIndicatorRule).sortType) {\n const dimensions: IDimensionInfo[] = [];\n if (\n (sortRule as SortByIndicatorRule).sortByIndicator &&\n (sortRule as SortByIndicatorRule).sortField ===\n (this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1])\n ) {\n for (let j = 0; j < (sortRule as SortByIndicatorRule).query.length; j++) {\n dimensions.push({\n dimensionKey: this.dataset.indicatorsAsCol ? this.dataset.columns[j] : this.dataset.rows[j],\n value: (sortRule as SortByIndicatorRule).query[j]\n });\n }\n dimensions.push({\n indicatorKey: (sortRule as SortByIndicatorRule).sortByIndicator,\n value:\n this.internalProps.layoutMap.getIndicatorInfo((sortRule as SortByIndicatorRule).sortByIndicator)?.title ??\n (sortRule as SortByIndicatorRule).sortByIndicator\n });\n } else {\n dimensions.push({\n dimensionKey: (sortRule as SortTypeRule).sortField,\n isPivotCorner: true,\n value: (sortRule as SortTypeRule).sortField\n });\n }\n const sortType = sortRule.sortType ? (sortRule.sortType.toUpperCase() as 'ASC' | 'DESC' | 'NORMAL') : 'ASC';\n this.pivotSortState.push({\n dimensions,\n order: SortType[sortType]\n });\n // }\n }\n }\n\n /**\n * 更新排序状态\n * @param pivotSortStateConfig.dimensions 排序状态维度对应关系;pivotSortStateConfig.order 排序状态\n */\n updatePivotSortState(\n pivotSortStateConfig: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[]\n ) {\n this.pivotSortState = pivotSortStateConfig;\n }\n // changePivotSortState(pivotSortState: { dimensions: IDimensionInfo[]; order: SortOrder }) {\n // let isExist = false;\n // for (let i = 0; i < this.pivotSortState.length; i++) {\n // const pivotSortStateItem = this.pivotSortState[i];\n // const dimensions = pivotSortStateItem.dimensions;\n // const isEqual = dimensions.every(\n // (item, index) =>\n // (item.dimensionKey === pivotSortState.dimensions[index].dimensionKey ||\n // item.indicatorKey === pivotSortState.dimensions[index].indicatorKey) &&\n // item.value === pivotSortState.dimensions[index].value &&\n // ((isValid(item.isPivotCorner ?? pivotSortState.dimensions[index].isPivotCorner) &&\n // item.isPivotCorner === pivotSortState.dimensions[index].isPivotCorner) ||\n // (!isValid(item.isPivotCorner) && !isValid(pivotSortState.dimensions[index].isPivotCorner)))\n // );\n // if (isEqual) {\n // isExist = true;\n // pivotSortStateItem.order = pivotSortState.order;\n // break;\n // }\n // }\n // if (!isExist) {\n // this.pivotSortState.push(pivotSortState);\n // }\n // }\n /** 如果单元格所在维度或者指标配置了sort自动 可以通过该接口进行排序 */\n sort(col: number, row: number, order: SortOrder) {\n let dimensions: IDimensionInfo[];\n if ((this as PivotTable).isCornerHeader(col, row)) {\n const dimensionInfo = (this as PivotTable).getHeaderDefine(col, row) as any;\n dimensions = [];\n const dimension: IDimensionInfo = {\n isPivotCorner: true,\n dimensionKey: dimensionInfo.value,\n value: dimensionInfo.value\n };\n dimensions.push(dimension);\n } else if ((this as PivotTable).isColumnHeader(col, row)) {\n dimensions = (this as PivotTable).getCellHeaderPaths(col, row).colHeaderPaths as IDimensionInfo[];\n } else {\n dimensions = (this as PivotTable).getCellHeaderPaths(col, row).rowHeaderPaths as IDimensionInfo[];\n }\n\n const sortIndicator = dimensions[dimensions.length - 1].indicatorKey;\n\n const headerDefine = this.getHeaderDefine(col, row) as any;\n if (headerDefine.sort) {\n if ((this as PivotTable).dataset.sortRules) {\n const cacheOldDimensionSortRule: Record<string, SortRule> = {};\n for (let i = (this as PivotTable).dataset.sortRules.length - 1; i >= 0; i--) {\n const sortRule = (this as PivotTable).dataset.sortRules[i];\n if (headerDefine.dimensionKey && sortRule.sortField === headerDefine.dimensionKey) {\n cacheOldDimensionSortRule[sortRule.sortField] = sortRule;\n (this as PivotTable).dataset.sortRules.splice(i, 1);\n } else if (\n sortIndicator &&\n // headerDefine.indicatorKey === sortIndicator &&\n // sortIndicator === (sortRule as SortByIndicatorRule).sortByIndicator &&\n sortRule.sortField ===\n (this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1])\n ) {\n cacheOldDimensionSortRule[sortRule.sortField] = sortRule;\n (this as PivotTable).dataset.sortRules.splice(i, 1);\n }\n }\n if (sortIndicator) {\n const sortField = this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1];\n (this as PivotTable).dataset.sortRules.push({\n sortField,\n sortType: SortType[order],\n sortByIndicator: sortIndicator,\n query: dimensions.reduce((arr, dimension) => {\n if (dimension.dimensionKey) {\n arr.push(dimension.value);\n }\n return arr;\n }, []),\n sortFunc: (cacheOldDimensionSortRule[sortField] as SortByIndicatorRule)?.sortFunc\n });\n } else {\n (this as PivotTable).dataset.sortRules.push(\n Object.assign(cacheOldDimensionSortRule[headerDefine.dimensionKey] ?? {}, {\n sortField: headerDefine.dimensionKey,\n sortType: SortType[order as 'ASC' | 'DESC']\n })\n );\n }\n } else {\n if (sortIndicator) {\n (this as PivotTable).dataset.sortRules = [\n {\n sortField: this.dataset.indicatorsAsCol\n ? this.dataset.rows[this.dataset.rows.length - 1]\n : this.dataset.columns[this.dataset.columns.length - 1],\n sortType: SortType[order as 'ASC' | 'DESC'],\n sortByIndicator: sortIndicator,\n query: dimensions.reduce((arr, dimension) => {\n if (dimension.dimensionKey) {\n arr.push(dimension.value);\n }\n return arr;\n }, [])\n }\n ];\n } else {\n (this as PivotTable).dataset.sortRules = [\n {\n sortField: headerDefine.dimensionKey,\n sortType: SortType[order as 'ASC' | 'DESC']\n }\n ];\n }\n }\n\n (this as PivotTable).updateSortRules((this as PivotTable).dataset.sortRules, col, row);\n }\n }\n\n getPivotSortState(col: number, row: number): SortOrder {\n if (!this.pivotSortState) {\n return undefined;\n }\n const cellRange = this.getCellRange(col, row);\n for (let i = 0; i < this.pivotSortState.length; i++) {\n const pivotState = this.pivotSortState[i];\n const dimensions = pivotState.dimensions;\n const cell = this.getCellAddressByHeaderPaths(dimensions);\n // const { col: sortCol, row: sortRow, order } = this.pivotSortState[i];\n const order = pivotState.order;\n\n if (cell && cellInRange(cellRange, cell.col, cell.row)) {\n return order;\n }\n }\n return undefined;\n }\n /**\n * 拖拽移动表头位置\n * @param source 移动源位置\n * @param target 移动目标位置\n */\n _moveHeaderPosition(source: CellAddress, target: CellAddress) {\n const sourceCellRange = this.getCellRange(source.col, source.row);\n const targetCellRange = this.getCellRange(target.col, target.row);\n // 调用布局类 布局数据结构调整为移动位置后的\n const moveContext = (this.internalProps.layoutMap as PivotHeaderLayoutMap).moveHeaderPosition(source, target);\n if (moveContext) {\n if (moveContext.moveType === 'column') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n for (let row = 0; row < this.internalProps.records.length; row++) {\n const sourceColumns = (this.internalProps.records[row] as unknown as number[]).splice(\n moveContext.sourceIndex - this.rowHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceColumns.unshift((moveContext.targetIndex as any) - this.rowHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records[row] as unknown as number[], sourceColumns);\n }\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.colWidthsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n this.colWidthsMap.exchangeOrder(\n sourceCellRange.start.col,\n sourceCellRange.end.col - sourceCellRange.start.col + 1,\n targetCellRange.start.col,\n targetCellRange.end.col - targetCellRange.start.col + 1,\n moveContext.targetIndex\n );\n //下面代码取自refreshHeader列宽设置逻辑\n //设置列宽极限值 TODO 目前是有问题的 最大最小宽度限制 移动列位置后不正确\n this.setMinMaxLimitWidth();\n } else if (moveContext.moveType === 'row') {\n // 是扁平数据结构 需要将二维数组this.records进行调整\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const sourceRows = (this.internalProps.records as unknown as number[]).splice(\n moveContext.sourceIndex - this.columnHeaderLevelCount,\n moveContext.sourceSize\n );\n sourceRows.unshift((moveContext.targetIndex as any) - this.columnHeaderLevelCount, 0 as any);\n Array.prototype.splice.apply(this.internalProps.records, sourceRows);\n }\n //colWidthsMap 中存储着每列的宽度 根据移动 sourceCol targetCol 调整其中的位置\n // this.rowHeightsMap.adjustOrder(moveContext.sourceIndex, moveContext.targetIndex, moveContext.moveSize);\n if (moveContext.targetIndex > moveContext.sourceIndex) {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex + moveContext.sourceSize - moveContext.targetSize,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n } else {\n this.rowHeightsMap.exchangeOrder(\n moveContext.sourceIndex,\n moveContext.sourceSize,\n moveContext.targetIndex,\n moveContext.targetSize,\n moveContext.targetIndex\n );\n }\n }\n return moveContext;\n }\n return null;\n }\n /**\n * 表头切换层级状态\n * @param col\n * @param row\n * @param recalculateColWidths 是否重新计算列宽 默认为true.(设置width:auto或者 autoWidth 情况下才有必要考虑该参数)\n */\n toggleHierarchyState(col: number, row: number, recalculateColWidths: boolean = true) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n\n const hierarchyState = this.getHierarchyState(col, row);\n if (hierarchyState === HierarchyState.expand) {\n this._refreshHierarchyState(col, row, recalculateColWidths);\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.collapse\n });\n } else if (hierarchyState === HierarchyState.collapse) {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n if (Array.isArray(headerTreeNode.children)) {\n //children 是数组 表示已经有子树节点信息\n this._refreshHierarchyState(col, row, recalculateColWidths);\n }\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: col,\n row: row,\n hierarchyState: HierarchyState.expand,\n originData: headerTreeNode\n });\n }\n }\n\n // beforeUpdateCell主要用于setTreeNodeChildren方法\n _refreshHierarchyState(col: number, row: number, recalculateColWidths: boolean = true, beforeUpdateCell?: Function) {\n const oldFrozenColCount = this.frozenColCount;\n const oldFrozenRowCount = this.frozenRowCount;\n const visibleStartRow = this.getBodyVisibleRowRange().rowStart;\n this.internalProps._oldRowCount = this.rowCount;\n this.internalProps._oldColCount = this.colCount;\n let notFillWidth = false;\n let notFillHeight = false;\n this.stateManager.updateHoverIcon(col, row, undefined, undefined);\n const checkHasChart = this.internalProps.layoutMap.checkHasChart();\n // 检查当前状态总宽高未撑满autoFill是否在起作用\n if (checkHasChart) {\n if (this.autoFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n }\n const isChangeRowTree = this.internalProps.layoutMap.isRowHeader(col, row);\n const result: {\n addCellPositionsRowDirection?: CellAddress[];\n removeCellPositionsRowDirection?: CellAddress[];\n updateCellPositionsRowDirection?: CellAddress[];\n addCellPositionsColumnDirection?: CellAddress[];\n removeCellPositionsColumnDirection?: CellAddress[];\n updateCellPositionsColumnDirection?: CellAddress[];\n } = isChangeRowTree\n ? (this.internalProps.layoutMap as PivotHeaderLayoutMap).toggleHierarchyState(col, row)\n : (this.internalProps.layoutMap as PivotHeaderLayoutMap).toggleHierarchyStateForColumnTree(col, row);\n beforeUpdateCell && beforeUpdateCell();\n //影响行数\n this.refreshRowColCount(); //逻辑中有setFrozenCol处理 影响了原本bodyGroup的列数\n const newFrozenColCount = this.frozenColCount;\n const newFrozenRowCount = this.frozenRowCount;\n this.clearCellStyleCache();\n if (this.rowHierarchyType === 'tree') {\n //'grid-tree'模式下不用特意更新,updateRow会更新掉和`tree`模式不一样\n this.scenegraph.updateHierarchyIcon(col, row);\n }\n this.reactCustomLayout?.clearCache();\n if (this.rowHierarchyType !== 'grid-tree' && this.columnHierarchyType !== 'grid-tree') {\n //增加'grid-tree'之前的逻辑是这样子的\n this.scenegraph.updateRow(\n result.removeCellPositionsRowDirection,\n result.addCellPositionsRowDirection,\n result.updateCellPositionsRowDirection,\n recalculateColWidths\n );\n } else {\n // bug 太多了 直接先全部生成吧!! TODO 性能优化\n // if (\n // this.columnHierarchyType === 'grid-tree' &&\n // this.isColumnHeader(col, row) &&\n // oldFrozenRowCount > this.frozenRowCount //p判断这个\n // ) {\n // callUpdateRowOnScenegraph(result, recalculateColWidths, newFrozenRowCount, oldFrozenRowCount, this.scenegraph);\n // callUpdateColOnScenegraph(result, newFrozenColCount, oldFrozenColCount, this.scenegraph);\n // } else {\n // callUpdateColOnScenegraph(result, newFrozenColCount, oldFrozenColCount, this.scenegraph);\n // callUpdateRowOnScenegraph(result, recalculateColWidths, newFrozenRowCount, oldFrozenRowCount, this.scenegraph);\n // }\n\n // if (this.rowHierarchyType === 'grid-tree' || this.columnHierarchyType === 'grid-tree') {\n // this.scenegraph.updateCornerHeaderCells();\n // // if (newFrozenColCount !== oldFrozenColCount) {\n // this.scenegraph.updateRowHeaderCells();\n // // }\n // // if (newFrozenRowCount !== oldFrozenRowCount) {\n // this.scenegraph.updateColumnHeaderCells();\n // // }\n // }\n this.internalProps.stick.changedCells.clear();\n this.scenegraph.clearCells();\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.scrollToRow(visibleStartRow);\n // this.renderWithRecreateCells();\n }\n this.reactCustomLayout?.updateAllCustomCell();\n\n if (checkHasChart) {\n // 检查更新节点状态后总宽高未撑满autoFill是否在起作用\n if (this.autoFillWidth && !notFillWidth) {\n notFillWidth = this.getAllColsWidth() <= this.tableNoFrameWidth;\n }\n if (this.autoFillHeight && !notFillHeight) {\n notFillHeight = this.getAllRowsHeight() <= this.tableNoFrameHeight;\n }\n if (this.widthMode === 'adaptive' || notFillWidth || this.heightMode === 'adaptive' || notFillHeight) {\n this.scenegraph.updateChartSizeForResizeColWidth(-1); // 如果收起展开有性能问题 可以排查下这个防范\n }\n }\n this.internalProps._oldRowCount = undefined;\n this.internalProps._oldColCount = undefined;\n }\n /**\n * 通过表头的维度值路径来计算单元格位置 getCellAddressByHeaderPaths接口更强大一些 不限表头 不限参数格式\n * @param dimensionPaths\n * @returns\n */\n getHeaderCellAddressByPath(dimensionPaths: IDimensionInfo[]): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotCellAdress(dimensionPaths);\n return cellAddress;\n }\n /**\n * 通过表头的维度值路径来计算单元格位置\n * @param dimensionPaths\n * @returns\n */\n getCellAddressByHeaderPaths(\n dimensionPaths:\n | {\n colHeaderPaths: IDimensionInfo[];\n rowHeaderPaths: IDimensionInfo[];\n cellLocation: CellLocation;\n }\n | IDimensionInfo[]\n ): CellAddress {\n const cellAddress = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getCellAdressByHeaderPath(\n dimensionPaths\n );\n return cellAddress;\n }\n\n /**\n * 通过传入的坐标 获取该位置当前单元格的维度路径;\n * @param coordinate 从body左上角为原点 coordinate为偏移距离 去计算单元格的headerPath;\n * 如不传coordinate坐标则按取body中左上角第一个单元格的维度路径\n * @returns\n */\n getHeaderPathByXY(coordinate?: { x: number; y: number }): ICellHeaderPaths {\n let cellAddr;\n if (coordinate) {\n cellAddr = this.getCellAt(\n coordinate.x + this.getFrozenColsWidth() + this.scrollLeft + 1,\n coordinate.y + this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n } else {\n cellAddr = this.getCellAt(\n this.getFrozenColsWidth() + this.scrollLeft + 1,\n this.getFrozenRowsHeight() + this.scrollTop + 1\n );\n }\n const cellHeaderPaths = this.internalProps.layoutMap.getCellHeaderPaths(cellAddr.col, cellAddr.row);\n return cellHeaderPaths;\n }\n getHierarchyState(col: number, row: number): HierarchyState {\n return (this._getHeaderLayoutMap(col, row) as HeaderData)?.hierarchyState;\n }\n /** 获取列头树结构 */\n getLayoutColumnTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTree();\n }\n /** 获取表格列头树形结构的占位的总节点数 */\n getLayoutColumnTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutColumnTreeCount();\n }\n /** 获取行头树结构 */\n getLayoutRowTree(): LayouTreeNode[] {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTree();\n }\n /** 获取表格行头树形结构的占位的总节点数 */\n getLayoutRowTreeCount(): number {\n const layoutMap = this.internalProps.layoutMap;\n return layoutMap.getLayoutRowTreeCount();\n }\n /**\n * 根据行列号获取表头tree节点,包含了用户在自定义树rowTree及columnTree树上的自定义属性(也是内部布局树的节点,获取后请不要随意修改)\n * @param col\n * @param row\n * @returns\n */\n getCellHeaderTreeNodes(col: number, row: number): ICellHeaderPaths {\n const layoutMap = this.internalProps.layoutMap;\n const headerNodes = layoutMap.getCellHeaderPathsWithTreeNode(col, row);\n return headerNodes;\n }\n\n getMenuInfo(col: number, row: number, type: string): DropDownMenuEventInfo {\n const dimensionInfos = (this.internalProps.layoutMap as PivotHeaderLayoutMap).getPivotDimensionInfo(col, row);\n const result: DropDownMenuEventInfo = {\n dimensionKey: dimensionInfos[dimensionInfos.length - 1].dimensionKey,\n value: this.getCellValue(col, row),\n cellLocation: this.getCellLocation(col, row),\n isPivotCorner: this.isCornerHeader(col, row),\n event: undefined\n };\n return result;\n }\n\n /**\n * 设置表格数据 及排序状态\n * @param records\n * @param sort\n */\n setRecords(records: Array<any>): void {\n clearChartRenderQueue();\n const oldHoverState = { col: this.stateManager.hover.cellPos.col, row: this.stateManager.hover.cellPos.row };\n this.options.records = this.internalProps.records = records;\n this.internalProps.recordsIsTwoDimensionalArray = false;\n if (records?.[0]?.constructor === Array) {\n this.internalProps.recordsIsTwoDimensionalArray = true;\n }\n const options = this.options;\n const internalProps = this.internalProps;\n if (this.options.customConfig?.enableDataAnalysis === false) {\n //判断如果数据是二维数组 则标识已经分析过 直接从二维数组挨个读取渲染即可\n //不是二维数组 对应是个object json对象 则表示flat数据,需要对应行列维度进行转成方便数据查询的行列树结构\n if (this.internalProps.recordsIsTwoDimensionalArray === false) {\n this.flatDataToObjects = new FlatDataToObjects(\n {\n rows: internalProps.layoutMap.fullRowDimensionKeys,\n columns: internalProps.layoutMap.colDimensionKeys,\n indicators: internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: internalProps.layoutMap.indicatorDimensionKey\n },\n records\n );\n }\n } else {\n this.dataset.setRecords(records);\n let columnDimensionTree;\n let rowDimensionTree;\n if (options.columnTree) {\n columnDimensionTree = internalProps.layoutMap.columnDimensionTree;\n } else {\n options.indicatorsAsCol !== false &&\n options.indicators &&\n this.dataset.colHeaderTree &&\n deleteHideIndicatorNode(this.dataset.colHeaderTree, options.indicators, false, this);\n columnDimensionTree = new DimensionTree(\n (this.dataset.colHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.columnHierarchyType,\n this.options.columnHierarchyType !== 'grid' ? this.options.columnExpandLevel ?? 1 : undefined\n );\n }\n if (options.rowTree) {\n rowDimensionTree = internalProps.layoutMap.rowDimensionTree;\n } else {\n options.indicatorsAsCol === false &&\n this.dataset.rowHeaderTree &&\n options.indicators &&\n deleteHideIndicatorNode(this.dataset.rowHeaderTree, options.indicators, false, this);\n rowDimensionTree = new DimensionTree(\n (this.dataset.rowHeaderTree as ITreeLayoutHeadNode[]) ?? [],\n this.layoutNodeId,\n this.options.rowHierarchyType,\n this.options.rowHierarchyType !== 'grid' ? this.options.rowExpandLevel ?? 1 : undefined\n );\n }\n internalProps.layoutMap = new PivotHeaderLayoutMap(this, this.dataset, columnDimensionTree, rowDimensionTree);\n this.pivotSortState = [];\n if (options.pivotSortState) {\n this.pivotSortState = options.pivotSortState;\n // this.updatePivotSortState(options.pivotSortState);\n }\n }\n\n // 更新表头\n this.refreshHeader();\n this.internalProps.useOneRowHeightFillAll = false;\n\n // 清空单元格内容\n this.scenegraph.clearCells();\n // this.internalProps.frozenColCount = this.options.frozenColCount || this.rowHeaderLevelCount;\n // 生成单元格场景树\n this.clearCellStyleCache();\n this.scenegraph.createSceneGraph();\n this.stateManager.updateHoverPos(oldHoverState.col, oldHoverState.row);\n if (this.internalProps.title && !this.internalProps.title.isReleased) {\n this._updateSize();\n this.internalProps.title.resize();\n this.scenegraph.resize();\n }\n this.eventManager.updateEventBinder();\n if (this.options.emptyTip) {\n if (this.internalProps.emptyTip) {\n this.internalProps.emptyTip?.resetVisible();\n } else {\n const EmptyTip = Factory.getComponent('emptyTip') as IEmptyTipComponent;\n this.internalProps.emptyTip = new EmptyTip(this.options.emptyTip, this);\n this.internalProps.emptyTip?.resetVisible();\n }\n }\n }\n\n startEditCell(col?: number, row?: number, value?: string | number) {\n if (isValid(col) && isValid(row)) {\n this.eventManager.isDraging = false;\n this.selectCell(col, row);\n this.editorManager.startEditCell(col, row, value);\n } else if (this.stateManager.select?.cellPos) {\n const { col, row } = this.stateManager.select.cellPos;\n if (isValid(col) && isValid(row)) {\n this.editorManager.startEditCell(col, row, value);\n }\n }\n }\n /** 结束编辑 */\n completeEditCell() {\n this.editorManager.completeEdit();\n }\n /** 获取单元格对应的编辑器 */\n getEditor(col: number, row: number) {\n let editorDefine;\n if (this.isCornerHeader(col, row)) {\n const define = this.getHeaderDefine(col, row);\n editorDefine = (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor;\n } else if (this.isHeader(col, row)) {\n const define = this.getHeaderDefine(col, row);\n editorDefine = (define as ColumnDefine)?.headerEditor ?? this.options.headerEditor;\n } else {\n const define = this.getBodyColumnDefine(col, row);\n editorDefine = (define as ColumnDefine)?.editor ?? this.options.editor;\n }\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n if (typeof editorDefine === 'string') {\n return editors.get(editorDefine);\n }\n return editorDefine as IEditor;\n }\n /** 检查单元格是否定义过编辑器 不管编辑器是否有效 只要有定义就返回true */\n isHasEditorDefine(col: number, row: number) {\n const define = this.getBodyColumnDefine(col, row);\n let editorDefine = (define as ColumnDefine)?.editor ?? this.options.editor;\n\n if (typeof editorDefine === 'function') {\n const arg = {\n col,\n row,\n dataValue: this.getCellOriginValue(col, row),\n value: this.getCellValue(col, row) || '',\n table: this\n };\n editorDefine = (editorDefine as Function)(arg);\n }\n return isValid(editorDefine);\n }\n /** 更改单元格数据 会触发change_cell_value事件*/\n changeCellValue(col: number, row: number, value: string | undefined, workOnEditableCell = false) {\n if ((workOnEditableCell && this.isHasEditorDefine(col, row)) || workOnEditableCell === false) {\n let newValue: any = value;\n const oldValue = this.getCellOriginValue(col, row);\n const rawValue = this.getCellRawValue(col, row);\n if (typeof rawValue === 'number' && isAllDigits(value)) {\n newValue = parseFloat(value);\n }\n this._changeCellValueToDataSet(col, row, oldValue, newValue);\n // this.scenegraph.updateCellContent(col, row);\n const range = this.getCellRange(col, row);\n for (let sCol = range.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = range.start.row; sRow <= range.end.row; sRow++) {\n this.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n // 更新所有的统计单元格\n if (this.options.dataConfig?.updateAggregationOnEditCell ?? false) {\n for (let col = 0; col < this.colCount; col++) {\n for (let row = 0; row < this.rowCount; row++) {\n if (this.internalProps.layoutMap.isAggregation(col, row)) {\n this.scenegraph.updateCellContent(col, row);\n }\n }\n }\n }\n if (this.widthMode === 'adaptive' || (this.autoFillWidth && this.getAllColsWidth() <= this.tableNoFrameWidth)) {\n if (this.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.scenegraph.recalculateColWidths();\n }\n } else if (!this.internalProps._widthResizedColMap.has(col)) {\n const oldWidth = this.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.rowCount - 1, this, false);\n if (newWidth !== oldWidth) {\n this.scenegraph.updateColWidth(col, newWidth - oldWidth);\n }\n }\n if (\n this.heightMode === 'adaptive' ||\n (this.autoFillHeight && this.getAllRowsHeight() <= this.tableNoFrameHeight)\n ) {\n if (this.internalProps._heightResizedRowMap.size === 0) {\n this.scenegraph.recalculateRowHeights();\n }\n } else if (this.isAutoRowHeight(row) && !this.internalProps._heightResizedRowMap.has(row)) {\n const oldHeight = this.getRowHeight(row);\n const newHeight = computeRowHeight(row, 0, this.colCount - 1, this);\n this.scenegraph.updateRowHeight(row, newHeight - oldHeight);\n }\n if (oldValue !== newValue) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col,\n row,\n rawValue,\n currentValue: oldValue,\n changedValue: newValue\n });\n }\n this.scenegraph.updateNextFrame();\n }\n }\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues(startCol: number, startRow: number, values: string[][], workOnEditableCell = false) {\n let pasteColEnd = startCol;\n let pasteRowEnd = startRow;\n // const rowCount = values.length;\n //#region 提前组织好未更改前的数据\n const beforeChangeValues: (string | number)[][] = [];\n const oldValues: (string | number)[][] = [];\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > this.rowCount - 1) {\n break;\n }\n const rowValues = values[i];\n const rawRowValues: (string | number)[] = [];\n const oldRowValues: (string | number)[] = [];\n beforeChangeValues.push(rawRowValues);\n oldValues.push(oldRowValues);\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > this.colCount - 1) {\n break;\n }\n const beforeChangeValue = this.getCellRawValue(startCol + j, startRow + i);\n rawRowValues.push(beforeChangeValue);\n const oldValue = this.getCellOriginValue(startCol + j, startRow + i);\n oldRowValues.push(oldValue);\n }\n }\n //#endregion\n for (let i = 0; i < values.length; i++) {\n if (startRow + i > this.rowCount - 1) {\n break;\n }\n pasteRowEnd = startRow + i;\n const rowValues = values[i];\n let thisRowPasteColEnd = startCol;\n for (let j = 0; j < rowValues.length; j++) {\n if (startCol + j > this.colCount - 1) {\n break;\n }\n\n thisRowPasteColEnd = startCol + j;\n if (\n (workOnEditableCell && this.isHasEditorDefine(startCol + j, startRow + i)) ||\n workOnEditableCell === false\n ) {\n const value = rowValues[j];\n let newValue: string | number = value;\n const oldValue = oldValues[i][j];\n const rawValue = beforeChangeValues[i][j];\n if (typeof rawValue === 'number' && isAllDigits(value)) {\n newValue = parseFloat(value);\n }\n this._changeCellValueToDataSet(startCol + j, startRow + i, oldValue, newValue);\n const changedValue = this.getCellOriginValue(startCol + j, startRow + i);\n if (changedValue !== oldValue) {\n this.fireListeners(TABLE_EVENT_TYPE.CHANGE_CELL_VALUE, {\n col: startCol + j,\n row: startRow + i,\n rawValue,\n currentValue: oldValue,\n changedValue\n });\n }\n }\n }\n pasteColEnd = Math.max(pasteColEnd, thisRowPasteColEnd);\n }\n\n // const cell_value = this.getCellValue(col, row);\n const startRange = this.getCellRange(startCol, startRow);\n const range = this.getCellRange(pasteColEnd, pasteRowEnd);\n for (let sCol = startRange.start.col; sCol <= range.end.col; sCol++) {\n for (let sRow = startRange.start.row; sRow <= range.end.row; sRow++) {\n this.scenegraph.updateCellContent(sCol, sRow);\n }\n }\n // 更新所有的统计单元格\n if (this.options.dataConfig?.updateAggregationOnEditCell ?? false) {\n for (let col = 0; col < this.colCount; col++) {\n for (let row = 0; row < this.rowCount; row++) {\n if (this.internalProps.layoutMap.isAggregation(col, row)) {\n this.scenegraph.updateCellContent(col, row);\n }\n }\n }\n }\n if (this.widthMode === 'adaptive' || (this.autoFillWidth && this.getAllColsWidth() <= this.tableNoFrameWidth)) {\n if (this.internalProps._widthResizedColMap.size === 0) {\n //如果没有手动调整过行高列宽 则重新计算一遍并重新分配\n this.scenegraph.recalculateColWidths();\n }\n } else {\n for (let sCol = startCol; sCol <= range.end.col; sCol++) {\n if (!this.internalProps._widthResizedColMap.has(sCol)) {\n const oldWidth = this.getColWidth(sCol);\n const newWidth = computeColWidth(sCol, 0, this.rowCount - 1, this, false);\n if (newWidth !== oldWidth) {\n this.scenegraph.updateColWidth(sCol, newWidth - oldWidth);\n }\n }\n }\n }\n\n if (this.heightMode === 'adaptive' || (this.autoFillHeight && this.getAllRowsHeight() <= this.tableNoFrameHeight)) {\n this.scenegraph.recalculateRowHeights();\n } else if (this.isAutoRowHeight(startRow)) {\n const rows: number[] = [];\n const deltaYs: number[] = [];\n for (let sRow = startRow; sRow <= range.end.row; sRow++) {\n if (this.rowHeightsMap.get(sRow)) {\n // 已经计算过行高的才走更新逻辑\n const oldHeight = this.getRowHeight(sRow);\n const newHeight = computeRowHeight(sRow, 0, this.colCount - 1, this);\n rows.push(sRow);\n deltaYs.push(newHeight - oldHeight);\n }\n }\n this.scenegraph.updateRowsHeight(rows, deltaYs);\n }\n\n this.scenegraph.updateNextFrame();\n }\n\n private _changeCellValueToDataSet(col: number, row: number, oldValue: string | number, newValue: string | number) {\n if (this.internalProps.recordsIsTwoDimensionalArray) {\n const rowIndex = this.getBodyIndexByRow(row);\n const colIndex = this.getBodyIndexByCol(col);\n this.records[rowIndex][colIndex] = newValue;\n } else if (this.dataset) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n if (this.isCornerHeader(col, row)) {\n this.internalProps.layoutMap.changeCornerTitle(col, row, newValue as string);\n } else if (this.isHeader(col, row)) {\n this.internalProps.layoutMap.changeTreeNodeTitle(col, row, newValue as string);\n\n !this.isCornerHeader(col, row) &&\n this.dataset.changeRecordFieldValue(\n cellDimensionPath.colHeaderPaths?.length\n ? cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].dimensionKey\n : cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].dimensionKey,\n oldValue,\n newValue\n );\n } else {\n const colKeys = cellDimensionPath.colHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths\n ?.filter((path: any) => {\n return !path.virtual;\n })\n .map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n this.dataset.changeTreeNodeValue(\n !this.internalProps.layoutMap.indicatorsAsCol ? rowKeys.slice(0, -1) : rowKeys,\n this.internalProps.layoutMap.indicatorsAsCol ? colKeys.slice(0, -1) : colKeys,\n (this.internalProps.layoutMap as PivotHeaderLayoutMap).getIndicatorKey(col, row),\n newValue\n );\n }\n } else if (this.flatDataToObjects) {\n const cellDimensionPath = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n\n if (this.isHeader(col, row)) {\n this.internalProps.layoutMap.changeTreeNodeTitle(col, row, newValue as string);\n\n !this.isCornerHeader(col, row) &&\n this.flatDataToObjects.changeRecordFieldValue(\n cellDimensionPath.colHeaderPaths?.length\n ? cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.colHeaderPaths[cellDimensionPath.colHeaderPaths.length - 1].dimensionKey\n : cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].indicatorKey ??\n cellDimensionPath.rowHeaderPaths[cellDimensionPath.rowHeaderPaths.length - 1].dimensionKey,\n oldValue,\n newValue\n );\n } else {\n const colKeys = cellDimensionPath.colHeaderPaths.map((colPath: any) => {\n return colPath.indicatorKey ?? colPath.value;\n });\n const rowKeys = cellDimensionPath.rowHeaderPaths.map((rowPath: any) => {\n return rowPath.indicatorKey ?? rowPath.value;\n });\n this.flatDataToObjects.changeTreeNodeValue(\n rowKeys,\n colKeys,\n (this.internalProps.layoutMap.getBody(col, row) as IndicatorData).indicatorKey,\n newValue\n );\n }\n }\n }\n _hasCustomRenderOrLayout() {\n if (this.options.customRender) {\n return true;\n }\n const { columnsDefine, rowsDefine, indicatorsDefine } = this.internalProps.layoutMap;\n for (let i = 0; i < columnsDefine.length; i++) {\n const columnDefine = columnsDefine[i];\n if (typeof columnDefine !== 'string' && (columnDefine.headerCustomLayout || columnDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < rowsDefine.length; i++) {\n const rowDefine = rowsDefine[i];\n if (typeof rowDefine !== 'string' && (rowDefine.headerCustomLayout || rowDefine.headerCustomRender)) {\n return true;\n }\n }\n for (let i = 0; i < indicatorsDefine.length; i++) {\n const indicatorDefine = indicatorsDefine[i];\n if (\n typeof indicatorDefine !== 'string' &&\n (indicatorDefine.customLayout ||\n indicatorDefine.headerCustomLayout ||\n indicatorDefine.customRender ||\n indicatorDefine.headerCustomRender)\n ) {\n return true;\n }\n }\n return false;\n }\n\n changeRecordOrder(source: number, target: number) {\n //\n }\n\n /**\n * 树形展示场景下,如果需要动态插入子节点的数据可以配合使用该接口,其他情况不适用\n * @param children 设置到该单元格的子节点\n * @param records 该节点展开后新增数据\n * @param col 需要设置子节点的单元格地址\n * @param row 需要设置子节点的单元格地址\n */\n setTreeNodeChildren(children: IHeaderTreeDefine[], records: any[], col: number, row: number) {\n if (this.flatDataToObjects) {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n headerTreeNode.children = children;\n this._refreshHierarchyState(col, row, true, () => {\n this.flatDataToObjects.changeDataConfig({\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys,\n indicators: this.internalProps.layoutMap.indicatorKeys,\n indicatorsAsCol: this.internalProps.layoutMap.indicatorsAsCol,\n indicatorDimensionKey: this.internalProps.layoutMap.indicatorDimensionKey\n });\n this.flatDataToObjects.addRecords(records);\n });\n } else {\n // const headerPaths = this.internalProps.layoutMap.getCellHeaderPaths(col, row);\n const headerTreeNode = this.internalProps.layoutMap.getHeadNode(\n // headerPaths.rowHeaderPaths.slice(0, headerPaths.rowHeaderPaths.length),\n col,\n row\n );\n headerTreeNode.children = children;\n this._refreshHierarchyState(col, row, true, () => {\n this.dataset._rowTreeHasChanged();\n this.dataset.changeDataConfig({\n rows: this.internalProps.layoutMap.fullRowDimensionKeys,\n columns: this.internalProps.layoutMap.colDimensionKeys\n });\n this.dataset.addRecords(records);\n });\n }\n }\n\n /**\n * 更新数据过滤规则 对应dataConfig中filterRules配置格式\n * @param filterRules 过滤规则\n * @param isResetTree 是否重置表头树结构。 当为true时,会重置表头树结构,当为false时,表头树结构维持不变\n */\n updateFilterRules(filterRules: FilterRules, isResetTree: boolean = false) {\n this.internalProps.dataConfig.filterRules = filterRules;\n if (isResetTree) {\n // 由于筛选数据可能导致行列变化,所以需要重置树结构\n this.dataset.updateFilterRules(filterRules, true);\n this.internalProps.layoutMap.resetHeaderTree();\n } else {\n this.dataset.updateFilterRules(filterRules);\n }\n this.renderWithRecreateCells();\n }\n /** 获取过滤后的数据 */\n getFilteredRecords() {\n return this.dataset?.filteredRecords;\n }\n\n getCellPivotRole(col: number, row: number) {\n const path = this.getCellHeaderPaths(col, row);\n const { cellLocation, colHeaderPaths, rowHeaderPaths } = path;\n\n let colRole: CellPivotRole = colHeaderPaths.length ? 'normal' : undefined;\n let rowRole: CellPivotRole = rowHeaderPaths.length ? 'normal' : undefined;\n\n (colHeaderPaths as IDimensionInfo[]).forEach((path: IDimensionInfo) => {\n if (path.role === 'sub-total') {\n colRole = 'sub-total';\n } else if (path.role === 'grand-total') {\n colRole = 'grand-total';\n }\n });\n\n (rowHeaderPaths as IDimensionInfo[]).forEach((path: IDimensionInfo) => {\n if (path.role === 'sub-total') {\n rowRole = 'sub-total';\n } else if (path.role === 'grand-total') {\n rowRole = 'grand-total';\n }\n });\n\n return {\n colRole,\n rowRole,\n cellLocation\n };\n }\n getCellRowHeaderFullPaths(col: number): IDimensionInfo[] {\n return this.internalProps.layoutMap.getCellRowHeaderFullPaths(col);\n }\n /**\n * 开启层级节点展开的loading动画状态,在设置数据调用setRecordChildren后会自动关闭loading\n * @param col\n * @param row\n */\n setLoadingHierarchyState(col: number, row: number) {\n this.scenegraph.setLoadingHierarchyState(col, row);\n }\n\n /**\n * 展开行表头树的所有节点\n */\n expandAllForRowTree() {\n if (this.rowHierarchyType !== 'tree' && this.rowHierarchyType !== 'grid-tree') {\n return;\n }\n\n if (this.internalProps.layoutMap.rowDimensionTree) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.internalProps.layoutMap.expandAllForRowDimensionTree();\n this.renderWithRecreateCells();\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.expand,\n changeAll: true\n });\n }\n }\n\n /**\n * 折叠行表头树的所有节点\n */\n collapseAllForRowTree() {\n if (this.rowHierarchyType !== 'tree' && this.rowHierarchyType !== 'grid-tree') {\n return;\n }\n\n if (this.internalProps.layoutMap.rowDimensionTree) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.internalProps.layoutMap.collapseAllForRowDimensionTree();\n this.renderWithRecreateCells();\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.collapse,\n changeAll: true\n });\n }\n }\n\n /**\n * 展开列表头树的所有节点\n */\n expandAllForColumnTree() {\n if (this.columnHierarchyType !== 'grid-tree') {\n return;\n }\n\n if (this.internalProps.layoutMap.columnDimensionTree) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.internalProps.layoutMap.expandAllForColumnDimensionTree();\n this.renderWithRecreateCells();\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.expand,\n changeAll: true\n });\n }\n }\n\n /**\n * 折叠列表头树的所有节点\n */\n collapseAllForColumnTree() {\n if (this.columnHierarchyType !== 'grid-tree') {\n return;\n }\n\n if (this.internalProps.layoutMap.columnDimensionTree) {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.internalProps.layoutMap.collapseAllForColumnDimensionTree();\n this.renderWithRecreateCells();\n this.fireListeners(PIVOT_TABLE_EVENT_TYPE.TREE_HIERARCHY_STATE_CHANGE, {\n col: -1,\n row: -1,\n hierarchyState: HierarchyState.collapse,\n changeAll: true\n });\n }\n }\n\n release() {\n this.internalProps.layoutMap.clearHeaderPathCache();\n this.editorManager?.release();\n super.release();\n }\n}\n"]}
|