@visactor/vtable 0.19.2-alpha.2 → 0.20.0

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.
Files changed (231) hide show
  1. package/cjs/ListTable.d.ts +12 -2
  2. package/cjs/ListTable.js +81 -24
  3. package/cjs/ListTable.js.map +1 -1
  4. package/cjs/PivotChart.d.ts +2 -1
  5. package/cjs/PivotChart.js +5 -1
  6. package/cjs/PivotChart.js.map +1 -1
  7. package/cjs/PivotTable.d.ts +5 -2
  8. package/cjs/PivotTable.js +13 -5
  9. package/cjs/PivotTable.js.map +1 -1
  10. package/cjs/body-helper/body-helper.js +1 -0
  11. package/cjs/body-helper/body-helper.js.map +1 -1
  12. package/cjs/core/BaseTable.d.ts +2 -2
  13. package/cjs/core/BaseTable.js +22 -18
  14. package/cjs/core/BaseTable.js.map +1 -1
  15. package/cjs/core/tableHelper.d.ts +2 -2
  16. package/cjs/core/tableHelper.js +4 -6
  17. package/cjs/core/tableHelper.js.map +1 -1
  18. package/cjs/data/CachedDataSource.d.ts +4 -3
  19. package/cjs/data/CachedDataSource.js +5 -4
  20. package/cjs/data/CachedDataSource.js.map +1 -1
  21. package/cjs/data/DataSource.d.ts +22 -3
  22. package/cjs/data/DataSource.js +93 -7
  23. package/cjs/data/DataSource.js.map +1 -1
  24. package/cjs/dataset/dataset-pivot-table.d.ts +3 -3
  25. package/cjs/dataset/dataset-pivot-table.js +1 -0
  26. package/cjs/dataset/dataset-pivot-table.js.map +1 -1
  27. package/cjs/dataset/dataset.d.ts +3 -3
  28. package/cjs/dataset/dataset.js +3 -0
  29. package/cjs/dataset/dataset.js.map +1 -1
  30. package/cjs/dataset/statistics-helper.d.ts +24 -3
  31. package/cjs/dataset/statistics-helper.js +75 -9
  32. package/cjs/dataset/statistics-helper.js.map +1 -1
  33. package/cjs/edit/edit-manager.js +5 -4
  34. package/cjs/edit/edit-manager.js.map +1 -1
  35. package/cjs/event/listener/table-group.js +14 -4
  36. package/cjs/event/listener/table-group.js.map +1 -1
  37. package/cjs/event/media-click.js +2 -1
  38. package/cjs/event/scroll.js +0 -1
  39. package/cjs/event/sparkline-event.js +1 -1
  40. package/cjs/event/sparkline-event.js.map +1 -1
  41. package/cjs/index.d.ts +1 -1
  42. package/cjs/index.js +1 -1
  43. package/cjs/index.js.map +1 -1
  44. package/cjs/layout/chart-helper/get-chart-spec.d.ts +1 -0
  45. package/cjs/layout/chart-helper/get-chart-spec.js +34 -9
  46. package/cjs/layout/chart-helper/get-chart-spec.js.map +1 -1
  47. package/cjs/layout/layout-helper.d.ts +4 -63
  48. package/cjs/layout/layout-helper.js +25 -247
  49. package/cjs/layout/layout-helper.js.map +1 -1
  50. package/cjs/layout/pivot-header-layout.d.ts +6 -3
  51. package/cjs/layout/pivot-header-layout.js +26 -15
  52. package/cjs/layout/pivot-header-layout.js.map +1 -1
  53. package/cjs/layout/row-height-map.js +2 -1
  54. package/cjs/layout/row-height-map.js.map +1 -1
  55. package/cjs/layout/simple-header-layout.d.ts +25 -2
  56. package/cjs/layout/simple-header-layout.js +130 -18
  57. package/cjs/layout/simple-header-layout.js.map +1 -1
  58. package/cjs/layout/tree-helper.d.ts +63 -0
  59. package/cjs/layout/tree-helper.js +259 -0
  60. package/cjs/layout/tree-helper.js.map +1 -0
  61. package/cjs/scenegraph/graphic/chart.d.ts +2 -1
  62. package/cjs/scenegraph/graphic/chart.js +21 -18
  63. package/cjs/scenegraph/graphic/chart.js.map +1 -1
  64. package/cjs/scenegraph/graphic/contributions/chart-render-helper.js +4 -1
  65. package/cjs/scenegraph/graphic/contributions/chart-render-helper.js.map +1 -1
  66. package/cjs/scenegraph/graphic/contributions/chart-render.js +2 -2
  67. package/cjs/scenegraph/graphic/contributions/chart-render.js.map +1 -1
  68. package/cjs/scenegraph/group-creater/cell-helper.js +19 -8
  69. package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
  70. package/cjs/scenegraph/group-creater/cell-type/chart-cell.d.ts +1 -1
  71. package/cjs/scenegraph/group-creater/cell-type/chart-cell.js +2 -2
  72. package/cjs/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
  73. package/cjs/scenegraph/group-creater/cell-type/image-cell.d.ts +1 -1
  74. package/cjs/scenegraph/group-creater/cell-type/image-cell.js +9 -5
  75. package/cjs/scenegraph/group-creater/cell-type/image-cell.js.map +1 -1
  76. package/cjs/scenegraph/group-creater/cell-type/video-cell.js +1 -1
  77. package/cjs/scenegraph/group-creater/cell-type/video-cell.js.map +1 -1
  78. package/cjs/scenegraph/group-creater/column-helper.js +5 -5
  79. package/cjs/scenegraph/group-creater/column-helper.js.map +1 -1
  80. package/cjs/scenegraph/group-creater/progress/update-position/sort-vertical.js +5 -2
  81. package/cjs/scenegraph/group-creater/progress/update-position/sort-vertical.js.map +1 -1
  82. package/cjs/scenegraph/scenegraph.js +24 -11
  83. package/cjs/scenegraph/scenegraph.js.map +1 -1
  84. package/cjs/scenegraph/style/frame-border.js +7 -4
  85. package/cjs/scenegraph/style/frame-border.js.map +1 -1
  86. package/cjs/state/hover/is-cell-hover.js +1 -1
  87. package/cjs/state/hover/is-cell-hover.js.map +1 -1
  88. package/cjs/state/sort/index.js +2 -5
  89. package/cjs/state/sort/index.js.map +1 -1
  90. package/cjs/state/state.d.ts +0 -1
  91. package/cjs/state/state.js +3 -4
  92. package/cjs/state/state.js.map +1 -1
  93. package/cjs/themes/theme.js +3 -0
  94. package/cjs/themes/theme.js.map +1 -1
  95. package/cjs/tools/get-data-path/create-dataset.js.map +1 -1
  96. package/cjs/tools/isx.d.ts +1 -1
  97. package/cjs/tools/util.d.ts +1 -1
  98. package/cjs/ts-types/base-table.d.ts +6 -5
  99. package/cjs/ts-types/base-table.js.map +1 -1
  100. package/cjs/ts-types/list-table/define/basic-define.d.ts +2 -0
  101. package/cjs/ts-types/list-table/define/basic-define.js.map +1 -1
  102. package/cjs/ts-types/list-table/layout-map/api.d.ts +5 -4
  103. package/cjs/ts-types/list-table/layout-map/api.js.map +1 -1
  104. package/cjs/ts-types/new-data-set.d.ts +27 -6
  105. package/cjs/ts-types/new-data-set.js +1 -1
  106. package/cjs/ts-types/new-data-set.js.map +1 -1
  107. package/cjs/ts-types/table-engine.d.ts +17 -5
  108. package/cjs/ts-types/table-engine.js.map +1 -1
  109. package/cjs/ts-types/theme.d.ts +1 -0
  110. package/cjs/ts-types/theme.js.map +1 -1
  111. package/cjs/vrender.js.map +1 -1
  112. package/dist/vtable.js +1306 -544
  113. package/dist/vtable.min.js +2 -2
  114. package/es/ListTable.d.ts +12 -2
  115. package/es/ListTable.js +81 -24
  116. package/es/ListTable.js.map +1 -1
  117. package/es/PivotChart.d.ts +2 -1
  118. package/es/PivotChart.js +5 -1
  119. package/es/PivotChart.js.map +1 -1
  120. package/es/PivotTable.d.ts +5 -2
  121. package/es/PivotTable.js +13 -5
  122. package/es/PivotTable.js.map +1 -1
  123. package/es/body-helper/body-helper.js +1 -0
  124. package/es/body-helper/body-helper.js.map +1 -1
  125. package/es/core/BaseTable.d.ts +2 -2
  126. package/es/core/BaseTable.js +22 -18
  127. package/es/core/BaseTable.js.map +1 -1
  128. package/es/core/tableHelper.d.ts +2 -2
  129. package/es/core/tableHelper.js +4 -6
  130. package/es/core/tableHelper.js.map +1 -1
  131. package/es/data/CachedDataSource.d.ts +4 -3
  132. package/es/data/CachedDataSource.js +5 -4
  133. package/es/data/CachedDataSource.js.map +1 -1
  134. package/es/data/DataSource.d.ts +22 -3
  135. package/es/data/DataSource.js +91 -7
  136. package/es/data/DataSource.js.map +1 -1
  137. package/es/dataset/dataset-pivot-table.d.ts +3 -3
  138. package/es/dataset/dataset-pivot-table.js +1 -0
  139. package/es/dataset/dataset-pivot-table.js.map +1 -1
  140. package/es/dataset/dataset.d.ts +3 -3
  141. package/es/dataset/dataset.js +3 -0
  142. package/es/dataset/dataset.js.map +1 -1
  143. package/es/dataset/statistics-helper.d.ts +24 -3
  144. package/es/dataset/statistics-helper.js +72 -8
  145. package/es/dataset/statistics-helper.js.map +1 -1
  146. package/es/edit/edit-manager.js +5 -4
  147. package/es/edit/edit-manager.js.map +1 -1
  148. package/es/event/listener/table-group.js +14 -4
  149. package/es/event/listener/table-group.js.map +1 -1
  150. package/es/event/media-click.js +2 -1
  151. package/es/event/scroll.js +1 -2
  152. package/es/event/sparkline-event.js +1 -1
  153. package/es/event/sparkline-event.js.map +1 -1
  154. package/es/index.d.ts +1 -1
  155. package/es/index.js +1 -1
  156. package/es/index.js.map +1 -1
  157. package/es/layout/chart-helper/get-chart-spec.d.ts +1 -0
  158. package/es/layout/chart-helper/get-chart-spec.js +29 -4
  159. package/es/layout/chart-helper/get-chart-spec.js.map +1 -1
  160. package/es/layout/layout-helper.d.ts +4 -63
  161. package/es/layout/layout-helper.js +19 -246
  162. package/es/layout/layout-helper.js.map +1 -1
  163. package/es/layout/pivot-header-layout.d.ts +6 -3
  164. package/es/layout/pivot-header-layout.js +17 -6
  165. package/es/layout/pivot-header-layout.js.map +1 -1
  166. package/es/layout/row-height-map.js +2 -1
  167. package/es/layout/row-height-map.js.map +1 -1
  168. package/es/layout/simple-header-layout.d.ts +25 -2
  169. package/es/layout/simple-header-layout.js +130 -17
  170. package/es/layout/simple-header-layout.js.map +1 -1
  171. package/es/layout/tree-helper.d.ts +63 -0
  172. package/es/layout/tree-helper.js +256 -0
  173. package/es/layout/tree-helper.js.map +1 -0
  174. package/es/scenegraph/graphic/chart.d.ts +2 -1
  175. package/es/scenegraph/graphic/chart.js +21 -17
  176. package/es/scenegraph/graphic/chart.js.map +1 -1
  177. package/es/scenegraph/graphic/contributions/chart-render-helper.js +4 -1
  178. package/es/scenegraph/graphic/contributions/chart-render-helper.js.map +1 -1
  179. package/es/scenegraph/graphic/contributions/chart-render.js +2 -2
  180. package/es/scenegraph/graphic/contributions/chart-render.js.map +1 -1
  181. package/es/scenegraph/group-creater/cell-helper.js +20 -7
  182. package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
  183. package/es/scenegraph/group-creater/cell-type/chart-cell.d.ts +1 -1
  184. package/es/scenegraph/group-creater/cell-type/chart-cell.js +2 -2
  185. package/es/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
  186. package/es/scenegraph/group-creater/cell-type/image-cell.d.ts +1 -1
  187. package/es/scenegraph/group-creater/cell-type/image-cell.js +9 -5
  188. package/es/scenegraph/group-creater/cell-type/image-cell.js.map +1 -1
  189. package/es/scenegraph/group-creater/cell-type/video-cell.js +1 -1
  190. package/es/scenegraph/group-creater/cell-type/video-cell.js.map +1 -1
  191. package/es/scenegraph/group-creater/column-helper.js +5 -5
  192. package/es/scenegraph/group-creater/column-helper.js.map +1 -1
  193. package/es/scenegraph/group-creater/progress/update-position/sort-vertical.js +6 -3
  194. package/es/scenegraph/group-creater/progress/update-position/sort-vertical.js.map +1 -1
  195. package/es/scenegraph/scenegraph.js +24 -11
  196. package/es/scenegraph/scenegraph.js.map +1 -1
  197. package/es/scenegraph/style/frame-border.js +7 -4
  198. package/es/scenegraph/style/frame-border.js.map +1 -1
  199. package/es/state/hover/is-cell-hover.js +1 -1
  200. package/es/state/hover/is-cell-hover.js.map +1 -1
  201. package/es/state/sort/index.js +2 -5
  202. package/es/state/sort/index.js.map +1 -1
  203. package/es/state/state.d.ts +0 -1
  204. package/es/state/state.js +3 -4
  205. package/es/state/state.js.map +1 -1
  206. package/es/themes/theme.js +3 -0
  207. package/es/themes/theme.js.map +1 -1
  208. package/es/tools/get-data-path/create-dataset.js.map +1 -1
  209. package/es/tools/isx.d.ts +1 -1
  210. package/es/tools/util.d.ts +1 -1
  211. package/es/ts-types/base-table.d.ts +6 -5
  212. package/es/ts-types/base-table.js.map +1 -1
  213. package/es/ts-types/list-table/define/basic-define.d.ts +2 -0
  214. package/es/ts-types/list-table/define/basic-define.js.map +1 -1
  215. package/es/ts-types/list-table/layout-map/api.d.ts +5 -4
  216. package/es/ts-types/list-table/layout-map/api.js.map +1 -1
  217. package/es/ts-types/new-data-set.d.ts +27 -6
  218. package/es/ts-types/new-data-set.js +1 -1
  219. package/es/ts-types/new-data-set.js.map +1 -1
  220. package/es/ts-types/table-engine.d.ts +17 -5
  221. package/es/ts-types/table-engine.js.map +1 -1
  222. package/es/ts-types/theme.d.ts +1 -0
  223. package/es/ts-types/theme.js.map +1 -1
  224. package/es/vrender.js.map +1 -1
  225. package/package.json +3 -3
  226. package/cjs/data/FilterDataSource.d.ts +0 -1
  227. package/cjs/data/FilterDataSource.js +0 -1
  228. package/cjs/data/FilterDataSource.js.map +0 -1
  229. package/es/data/FilterDataSource.d.ts +0 -1
  230. package/es/data/FilterDataSource.js +0 -1
  231. package/es/data/FilterDataSource.js.map +0 -1
@@ -1,63 +1,4 @@
1
- import { NumberMap } from '../tools/NumberMap';
2
- import type { Either } from '../tools/helper';
3
- import type { CellInfo, ColumnIconOption, HeaderData, ICustomRender, IDimension, LayoutObjectId } from '../ts-types';
4
- import { HierarchyState } from '../ts-types';
5
- import type { PivotHeaderLayoutMap } from './pivot-header-layout';
6
- interface ITreeLayoutBaseHeadNode {
7
- id: number;
8
- value: string;
9
- children: ITreeLayoutHeadNode[] | undefined;
10
- columns?: any;
11
- level: number;
12
- levelSpan: number;
13
- startIndex: number;
14
- size: number;
15
- startInTotal: number;
16
- customRender?: ICustomRender;
17
- hierarchyState: HierarchyState;
18
- headerIcon?: (string | ColumnIconOption)[] | ((args: CellInfo) => (string | ColumnIconOption)[]);
19
- }
20
- interface ITreeLayoutDimensionHeadNode extends ITreeLayoutBaseHeadNode {
21
- dimensionKey: string;
22
- }
23
- interface ITreeLayoutIndicatorHeadNode extends ITreeLayoutBaseHeadNode {
24
- indicatorKey: string;
25
- }
26
- export type ITreeLayoutHeadNode = Either<ITreeLayoutDimensionHeadNode, ITreeLayoutIndicatorHeadNode>;
27
- export declare class DimensionTree {
28
- sharedVar: {
29
- seqId: number;
30
- };
31
- sizeIncludeParent: boolean;
32
- rowExpandLevel: number;
33
- hierarchyType: 'grid' | 'tree';
34
- tree: ITreeLayoutHeadNode;
35
- totalLevel: number;
36
- dimensionKeys: NumberMap<string>;
37
- cache: Map<number, any>;
38
- constructor(tree: ITreeLayoutHeadNode[], sharedVar: {
39
- seqId: number;
40
- }, hierarchyType?: 'grid' | 'tree', rowExpandLevel?: number);
41
- reset(tree: ITreeLayoutHeadNode[], updateTreeNode?: boolean): void;
42
- setTreeNode(node: ITreeLayoutHeadNode, startIndex: number, parent: ITreeLayoutHeadNode): number;
43
- getTreePath(index: number, maxDeep?: number): Array<ITreeLayoutHeadNode>;
44
- getTreePathByCellIds(ids: LayoutObjectId[]): Array<ITreeLayoutHeadNode>;
45
- findNodeById(nodes: ITreeLayoutHeadNode[], id: LayoutObjectId): ITreeLayoutHeadNode;
46
- searchPath(index: number, node: ITreeLayoutHeadNode, path: Array<ITreeLayoutHeadNode>, maxDeep: number): void;
47
- movePosition(level: number, sourceIndex: number, targetIndex: number): void;
48
- getCopiedTree(): any;
49
- }
50
- export type LayouTreeNode = {
51
- dimensionKey?: string;
52
- indicatorKey?: string;
53
- value: string;
54
- hierarchyState: HierarchyState;
55
- children?: LayouTreeNode[];
56
- };
57
- export declare function generateLayoutTree(tree: LayouTreeNode[], children: ITreeLayoutHeadNode[]): void;
58
- export declare function countLayoutTree(children: {
59
- children?: any;
60
- }[], countParentNode: boolean): number;
61
- export declare function dealHeader(hd: ITreeLayoutHeadNode, _headerCellIds: number[][], results: HeaderData[], roots: number[], row: number, layoutMap: PivotHeaderLayoutMap): void;
62
- export declare function dealHeaderForTreeMode(hd: ITreeLayoutHeadNode, _headerCellIds: number[][], results: HeaderData[], roots: number[], row: number, totalLevel: number, show: boolean, dimensions: (IDimension | string)[], layoutMap: PivotHeaderLayoutMap): void;
63
- export {};
1
+ import type { SimpleHeaderLayoutMap } from './simple-header-layout';
2
+ export declare function checkHasAggregation(layoutMap: SimpleHeaderLayoutMap): boolean;
3
+ export declare function checkHasAggregationOnTop(layoutMap: SimpleHeaderLayoutMap): number;
4
+ export declare function checkHasAggregationOnBottom(layoutMap: SimpleHeaderLayoutMap): number;
@@ -1,256 +1,29 @@
1
- import { cloneDeep, isValid } from "@visactor/vutils";
2
-
3
- import { NumberMap } from "../tools/NumberMap";
4
-
5
- import { IndicatorDimensionKeyPlaceholder } from "../tools/global";
6
-
7
- import { HierarchyState } from "../ts-types";
8
-
9
- export class DimensionTree {
10
- constructor(tree, sharedVar, hierarchyType = "grid", rowExpandLevel = void 0) {
11
- this.sizeIncludeParent = !1, this.tree = {
12
- id: 0,
13
- dimensionKey: "",
14
- value: "",
15
- children: [],
16
- level: -1,
17
- levelSpan: 1,
18
- startIndex: 0,
19
- size: 0,
20
- startInTotal: 0,
21
- hierarchyState: void 0
22
- }, this.totalLevel = 0, this.dimensionKeys = new NumberMap, this.cache = new Map,
23
- this.sizeIncludeParent = null != rowExpandLevel, this.rowExpandLevel = rowExpandLevel,
24
- this.hierarchyType = hierarchyType, this.sharedVar = sharedVar, this.reset(tree);
25
- }
26
- reset(tree, updateTreeNode = !1) {
27
- this.cache.clear(), this.dimensionKeys = new NumberMap, this.tree.children = tree,
28
- this.setTreeNode(this.tree, 0, this.tree), this.totalLevel = this.dimensionKeys.count();
29
- }
30
- setTreeNode(node, startIndex, parent) {
31
- var _a, _b;
32
- node.startIndex = startIndex, node.startInTotal = (null !== (_a = parent.startInTotal) && void 0 !== _a ? _a : 0) + node.startIndex,
33
- (null !== (_b = node.dimensionKey) && void 0 !== _b ? _b : node.indicatorKey) && (!this.dimensionKeys.contain(node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey) && this.dimensionKeys.put(node.level, node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey),
34
- node.id || (node.id = ++this.sharedVar.seqId));
35
- let size = node.dimensionKey && this.sizeIncludeParent ? 1 : 0;
36
- const children = node.children || node.columns;
37
- return "grid" === this.hierarchyType ? (null == children ? void 0 : children.length) >= 1 ? children.forEach((n => {
38
- var _a;
39
- n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, size += this.setTreeNode(n, size, node);
40
- })) : size = 1 : node.hierarchyState === HierarchyState.expand && (null == children ? void 0 : children.length) >= 1 ? children.forEach((n => {
41
- var _a;
42
- n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, size += this.setTreeNode(n, size, node);
43
- })) : node.hierarchyState === HierarchyState.collapse && (null == children ? void 0 : children.length) >= 1 ? children.forEach((n => {
44
- var _a;
45
- n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, this.setTreeNode(n, size, node);
46
- })) : !node.hierarchyState && node.level + 1 < this.rowExpandLevel && (null == children ? void 0 : children.length) >= 1 ? (node.hierarchyState = HierarchyState.expand,
47
- children.forEach((n => {
48
- var _a;
49
- n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, size += this.setTreeNode(n, size, node);
50
- }))) : (null == children ? void 0 : children.length) >= 1 ? (node.hierarchyState = HierarchyState.collapse,
51
- children.forEach((n => {
52
- var _a;
53
- n.level = (null !== (_a = node.level) && void 0 !== _a ? _a : 0) + 1, this.setTreeNode(n, size, node);
54
- }))) : (node.hierarchyState = HierarchyState.none, size = 1), node.size = size,
55
- size;
56
- }
57
- getTreePath(index, maxDeep = 30) {
58
- const path = [];
59
- return this.searchPath(index, this.tree, path, maxDeep), path.shift(), path;
60
- }
61
- getTreePathByCellIds(ids) {
62
- const path = [];
63
- let nodes = this.tree.children;
64
- for (let i = 0; i < ids.length; i++) {
65
- const id = ids[i], pathNode = this.findNodeById(nodes, id);
66
- if (!pathNode) break;
67
- path.push(pathNode), nodes = pathNode.children;
68
- }
69
- return path;
70
- }
71
- findNodeById(nodes, id) {
72
- return nodes.find((node => node.id === id));
73
- }
74
- searchPath(index, node, path, maxDeep) {
75
- if (!node) return;
76
- if (index < node.startIndex || index >= node.startIndex + node.size) return;
77
- if (path.push(node), !node.children || 0 === node.children.length || node.level >= maxDeep) return;
78
- const cIndex = index - node.startIndex;
79
- if (this.cache.has(node.level + 1)) {
80
- const cacheNode = this.cache.get(node.level + 1);
81
- if (cIndex >= cacheNode.startIndex && cIndex < cacheNode.startIndex + cacheNode.size) return void this.searchPath(cIndex, cacheNode, path, maxDeep);
82
- }
83
- let left = 0, right = node.children.length - 1;
84
- for (;left <= right; ) {
85
- const middle = Math.floor((left + right) / 2), element = node.children[middle];
86
- if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {
87
- this.cache.set(element.level, element);
88
- const deleteLevels = [];
89
- this.cache.forEach(((node, key) => {
90
- key > element.level && deleteLevels.push(key);
91
- })), deleteLevels.forEach((key => {
92
- this.cache.delete(key);
93
- })), this.searchPath(cIndex, element, path, maxDeep);
94
- break;
95
- }
96
- cIndex < element.startIndex ? right = middle - 1 : left = middle + 1;
97
- }
98
- }
99
- movePosition(level, sourceIndex, targetIndex) {
100
- let parNode, sourceSubIndex, targetSubIndex;
101
- const findTargetNode = (node, subIndex) => {
102
- if (void 0 !== sourceSubIndex && void 0 !== targetSubIndex) return;
103
- node.level === level && (node.startInTotal === sourceIndex && (sourceSubIndex = subIndex),
104
- node.startInTotal <= targetIndex && targetIndex <= node.startInTotal + node.size - 1 && (targetSubIndex = subIndex));
105
- const children = node.children || node.columns;
106
- if (children && node.level < level) {
107
- parNode = node;
108
- for (let i = 0; i < children.length; i++) (sourceIndex >= children[i].startInTotal && sourceIndex <= children[i].startInTotal + children[i].size || targetIndex >= children[i].startInTotal && targetIndex <= children[i].startInTotal + children[i].size) && findTargetNode(children[i], i);
109
- }
110
- };
111
- findTargetNode(this.tree, 0);
112
- const children = parNode.children || parNode.columns, sourceColumns = children.splice(sourceSubIndex, 1);
113
- sourceColumns.unshift(targetSubIndex, 0), Array.prototype.splice.apply(children, sourceColumns);
114
- }
115
- getCopiedTree() {
116
- const children = cloneDeep(this.tree.children);
117
- return clearNode(children), children;
1
+ export function checkHasAggregation(layoutMap) {
2
+ const columnObjects = layoutMap.columnObjects;
3
+ for (let i = 0; i < columnObjects.length; i++) {
4
+ const column = columnObjects[i];
5
+ if (null == column ? void 0 : column.aggregation) return !0;
118
6
  }
7
+ return !1;
119
8
  }
120
9
 
121
- export function generateLayoutTree(tree, children) {
122
- null == children || children.forEach((node => {
123
- const diemnsonNode = {
124
- dimensionKey: node.dimensionKey,
125
- indicatorKey: node.indicatorKey,
126
- value: node.value,
127
- hierarchyState: node.hierarchyState,
128
- children: void 0
129
- };
130
- tree.push(diemnsonNode), node.children && (diemnsonNode.children = [], generateLayoutTree(diemnsonNode.children, node.children));
131
- }));
132
- }
133
-
134
- export function countLayoutTree(children, countParentNode) {
10
+ export function checkHasAggregationOnTop(layoutMap) {
11
+ const columnObjects = layoutMap.columnObjects;
135
12
  let count = 0;
136
- return null == children || children.forEach((node => {
137
- countParentNode ? count++ : node.children && 0 !== node.children.length || count++,
138
- node.children && (count += countLayoutTree(node.children, countParentNode));
139
- })), count;
140
- }
141
-
142
- export function dealHeader(hd, _headerCellIds, results, roots, row, layoutMap) {
143
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
144
- const id = hd.id, dimensionInfo = null !== (_b = null === (_a = layoutMap.rowsDefine) || void 0 === _a ? void 0 : _a.find((dimension => "string" != typeof dimension && dimension.dimensionKey === hd.dimensionKey))) && void 0 !== _b ? _b : null === (_c = layoutMap.columnsDefine) || void 0 === _c ? void 0 : _c.find((dimension => "string" != typeof dimension && dimension.dimensionKey === hd.dimensionKey)), indicatorInfo = null === (_d = layoutMap.indicatorsDefine) || void 0 === _d ? void 0 : _d.find((indicator => "string" != typeof indicator && (hd.indicatorKey ? indicator.indicatorKey === hd.indicatorKey : indicator.title === hd.value))), cell = {
145
- id: id,
146
- title: null !== (_e = hd.value) && void 0 !== _e ? _e : null == indicatorInfo ? void 0 : indicatorInfo.title,
147
- field: hd.dimensionKey,
148
- style: "function" == typeof (null === (_f = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _f ? void 0 : _f.headerStyle) ? null === (_g = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _g ? void 0 : _g.headerStyle : Object.assign({}, null === (_h = null != indicatorInfo ? indicatorInfo : dimensionInfo) || void 0 === _h ? void 0 : _h.headerStyle),
149
- headerType: null !== (_k = null !== (_j = null == indicatorInfo ? void 0 : indicatorInfo.headerType) && void 0 !== _j ? _j : null == dimensionInfo ? void 0 : dimensionInfo.headerType) && void 0 !== _k ? _k : "text",
150
- headerIcon: null !== (_l = null == indicatorInfo ? void 0 : indicatorInfo.headerIcon) && void 0 !== _l ? _l : null == dimensionInfo ? void 0 : dimensionInfo.headerIcon,
151
- define: Object.assign({}, hd, null != indicatorInfo ? indicatorInfo : dimensionInfo),
152
- fieldFormat: null !== (_m = null == indicatorInfo ? void 0 : indicatorInfo.headerFormat) && void 0 !== _m ? _m : null == dimensionInfo ? void 0 : dimensionInfo.headerFormat,
153
- dropDownMenu: null !== (_o = null == indicatorInfo ? void 0 : indicatorInfo.dropDownMenu) && void 0 !== _o ? _o : null == dimensionInfo ? void 0 : dimensionInfo.dropDownMenu,
154
- pivotInfo: {
155
- value: hd.value,
156
- dimensionKey: hd.dimensionKey,
157
- isPivotCorner: !1
158
- },
159
- width: null == dimensionInfo ? void 0 : dimensionInfo.width,
160
- minWidth: null == dimensionInfo ? void 0 : dimensionInfo.minWidth,
161
- maxWidth: null == dimensionInfo ? void 0 : dimensionInfo.maxWidth,
162
- showSort: null !== (_p = null == indicatorInfo ? void 0 : indicatorInfo.showSort) && void 0 !== _p ? _p : null == dimensionInfo ? void 0 : dimensionInfo.showSort,
163
- description: null == dimensionInfo ? void 0 : dimensionInfo.description
164
- };
165
- indicatorInfo ? (indicatorInfo.customRender && (hd.customRender = indicatorInfo.customRender),
166
- isValid(null === (_q = layoutMap._indicators) || void 0 === _q ? void 0 : _q.find((indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) || null === (_r = layoutMap._indicators) || void 0 === _r || _r.push({
167
- id: ++layoutMap.sharedVar.seqId,
168
- indicatorKey: indicatorInfo.indicatorKey,
169
- field: indicatorInfo.indicatorKey,
170
- fieldFormat: null == indicatorInfo ? void 0 : indicatorInfo.format,
171
- cellType: null !== (_t = null !== (_s = null == indicatorInfo ? void 0 : indicatorInfo.cellType) && void 0 !== _s ? _s : null == indicatorInfo ? void 0 : indicatorInfo.columnType) && void 0 !== _t ? _t : "text",
172
- chartModule: "chartModule" in indicatorInfo ? indicatorInfo.chartModule : null,
173
- chartSpec: "chartSpec" in indicatorInfo ? indicatorInfo.chartSpec : null,
174
- sparklineSpec: "sparklineSpec" in indicatorInfo ? indicatorInfo.sparklineSpec : null,
175
- style: null == indicatorInfo ? void 0 : indicatorInfo.style,
176
- icon: null == indicatorInfo ? void 0 : indicatorInfo.icon,
177
- define: Object.assign({}, hd, indicatorInfo, {
178
- dragHeader: null == dimensionInfo ? void 0 : dimensionInfo.dragHeader
179
- }),
180
- width: null == indicatorInfo ? void 0 : indicatorInfo.width,
181
- minWidth: null == indicatorInfo ? void 0 : indicatorInfo.minWidth,
182
- maxWidth: null == indicatorInfo ? void 0 : indicatorInfo.maxWidth,
183
- disableColumnResize: null == indicatorInfo ? void 0 : indicatorInfo.disableColumnResize
184
- })) : hd.indicatorKey && (isValid(null === (_u = layoutMap._indicators) || void 0 === _u ? void 0 : _u.find((indicator => indicator.indicatorKey === hd.indicatorKey))) || null === (_v = layoutMap._indicators) || void 0 === _v || _v.push({
185
- id: ++layoutMap.sharedVar.seqId,
186
- indicatorKey: hd.indicatorKey,
187
- field: hd.indicatorKey,
188
- cellType: "text",
189
- define: Object.assign({}, hd)
190
- })), results[id] = cell, layoutMap._headerObjects[id] = cell, _headerCellIds[row][layoutMap.colIndex] = id;
191
- for (let r = row - 1; r >= 0; r--) _headerCellIds[r][layoutMap.colIndex] = roots[r];
192
- if (hd.levelSpan > 1) for (let i = 1; i < hd.levelSpan; i++) _headerCellIds[row + i] || (_headerCellIds[row + i] = []),
193
- _headerCellIds[row + i][layoutMap.colIndex] = id;
194
- if ((null === (_w = hd.children) || void 0 === _w ? void 0 : _w.length) >= 1) layoutMap._addHeaders(_headerCellIds, row + (null !== (_x = hd.levelSpan) && void 0 !== _x ? _x : 1), null !== (_y = hd.children) && void 0 !== _y ? _y : [], [ ...roots, ...Array(null !== (_z = hd.levelSpan) && void 0 !== _z ? _z : 1).fill(id) ]).forEach((c => results.push(c))); else {
195
- for (let r = row + 1; r < _headerCellIds.length; r++) _headerCellIds[r][layoutMap.colIndex] = id;
196
- layoutMap.colIndex++;
13
+ for (let i = 0; i < columnObjects.length; i++) {
14
+ const column = columnObjects[i];
15
+ (null == column ? void 0 : column.aggregation) && (Array.isArray(null == column ? void 0 : column.aggregation) ? count = Math.max(count, column.aggregation.filter((item => !0 === item.showOnTop)).length) : !0 === column.aggregation.showOnTop && (count = Math.max(count, 1)));
197
16
  }
17
+ return count;
198
18
  }
199
19
 
200
- export function dealHeaderForTreeMode(hd, _headerCellIds, results, roots, row, totalLevel, show, dimensions, layoutMap) {
201
- var _a, _b, _c, _d;
202
- const id = hd.id, dimensionInfo = dimensions.find((dimension => "string" != typeof dimension && dimension.dimensionKey === hd.dimensionKey)), cell = {
203
- id: id,
204
- title: hd.value,
205
- field: hd.dimensionKey,
206
- style: hd.level + 1 === totalLevel || "function" == typeof (null == dimensionInfo ? void 0 : dimensionInfo.headerStyle) ? null == dimensionInfo ? void 0 : dimensionInfo.headerStyle : Object.assign({}, null == dimensionInfo ? void 0 : dimensionInfo.headerStyle, {
207
- textAlign: "left"
208
- }),
209
- headerType: null !== (_a = null == dimensionInfo ? void 0 : dimensionInfo.headerType) && void 0 !== _a ? _a : "text",
210
- headerIcon: null == dimensionInfo ? void 0 : dimensionInfo.headerIcon,
211
- define: Object.assign(hd, {
212
- linkJump: null == dimensionInfo ? void 0 : dimensionInfo.linkJump,
213
- linkDetect: null == dimensionInfo ? void 0 : dimensionInfo.linkDetect,
214
- templateLink: null == dimensionInfo ? void 0 : dimensionInfo.templateLink,
215
- keepAspectRatio: null !== (_b = null == dimensionInfo ? void 0 : dimensionInfo.keepAspectRatio) && void 0 !== _b && _b,
216
- imageAutoSizing: null == dimensionInfo ? void 0 : dimensionInfo.imageAutoSizing,
217
- headerCustomRender: null == dimensionInfo ? void 0 : dimensionInfo.headerCustomRender,
218
- headerCustomLayout: null == dimensionInfo ? void 0 : dimensionInfo.headerCustomLayout,
219
- dragHeader: null == dimensionInfo ? void 0 : dimensionInfo.dragHeader,
220
- disableHeaderHover: !!(null == dimensionInfo ? void 0 : dimensionInfo.disableHeaderHover),
221
- disableHeaderSelect: !!(null == dimensionInfo ? void 0 : dimensionInfo.disableHeaderSelect)
222
- }),
223
- fieldFormat: null == dimensionInfo ? void 0 : dimensionInfo.headerFormat,
224
- dropDownMenu: null == dimensionInfo ? void 0 : dimensionInfo.dropDownMenu,
225
- pivotInfo: {
226
- value: hd.value,
227
- dimensionKey: hd.dimensionKey,
228
- isPivotCorner: !1
229
- },
230
- hierarchyLevel: hd.level,
231
- dimensionTotalLevel: totalLevel,
232
- hierarchyState: hd.level + 1 === totalLevel ? void 0 : hd.hierarchyState,
233
- width: null == dimensionInfo ? void 0 : dimensionInfo.width,
234
- minWidth: null == dimensionInfo ? void 0 : dimensionInfo.minWidth,
235
- maxWidth: null == dimensionInfo ? void 0 : dimensionInfo.maxWidth,
236
- parentCellId: roots[roots.length - 1]
237
- };
238
- results[id] = cell, layoutMap._headerObjects[id] = cell, _headerCellIds[row][layoutMap.colIndex] = id;
239
- for (let r = row - 1; r >= 0; r--) _headerCellIds[r][layoutMap.colIndex] = roots[r];
240
- if (hd.hierarchyState === HierarchyState.expand && (null === (_c = hd.children) || void 0 === _c ? void 0 : _c.length) >= 1) show && layoutMap.colIndex++,
241
- layoutMap._addHeadersForTreeMode(_headerCellIds, row, null !== (_d = hd.children) && void 0 !== _d ? _d : [], [ ...roots, id ], totalLevel, show && hd.hierarchyState === HierarchyState.expand, dimensions).forEach((c => results.push(c))); else {
242
- show && layoutMap.colIndex++;
243
- for (let r = row + 1; r < _headerCellIds.length; r++) _headerCellIds[r][layoutMap.colIndex] = id;
244
- }
245
- }
246
-
247
- function clearNode(children) {
248
- for (let i = 0; i < children.length; i++) {
249
- const node = children[i];
250
- delete node.level, delete node.startIndex, delete node.id, delete node.levelSpan,
251
- delete node.size, delete node.startInTotal;
252
- const childrenNew = node.children || node.columns;
253
- childrenNew && clearNode(childrenNew);
20
+ export function checkHasAggregationOnBottom(layoutMap) {
21
+ const columnObjects = layoutMap.columnObjects;
22
+ let count = 0;
23
+ for (let i = 0; i < columnObjects.length; i++) {
24
+ const column = columnObjects[i];
25
+ (null == column ? void 0 : column.aggregation) && (Array.isArray(null == column ? void 0 : column.aggregation) ? count = Math.max(count, column.aggregation.filter((item => !1 === item.showOnTop)).length) : !1 === column.aggregation.showOnTop && (count = Math.max(count, 1)));
254
26
  }
27
+ return count;
255
28
  }
256
29
  //# sourceMappingURL=layout-helper.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/layout/layout-helper.ts"],"names":[],"mappings":"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","file":"layout-helper.js","sourcesContent":["import { cloneDeep, isValid } from '@visactor/vutils';\nimport { NumberMap } from '../tools/NumberMap';\nimport { IndicatorDimensionKeyPlaceholder } from '../tools/global';\nimport type { Either } from '../tools/helper';\nimport type {\n CellInfo,\n ColumnIconOption,\n FieldData,\n HeaderData,\n ICustomRender,\n IDimension,\n IIndicator,\n IRowDimension,\n LayoutObjectId\n} from '../ts-types';\nimport { HierarchyState } from '../ts-types';\nimport type { PivotHeaderLayoutMap } from './pivot-header-layout';\nimport type { ILinkDimension } from '../ts-types/pivot-table/dimension/link-dimension';\nimport type { IImageDimension } from '../ts-types/pivot-table/dimension/image-dimension';\n// import { sharedVar } from './pivot-header-layout';\n\ninterface ITreeLayoutBaseHeadNode {\n id: number;\n // dimensionKey: string;\n // // title: string;\n // indicatorKey?: string;\n value: string;\n children: ITreeLayoutHeadNode[] | undefined;\n columns?: any; //兼容ListTable情况 simple-header-layout中增加了columnTree\n level: number;\n /** 节点跨占层数 如汇总节点跨几层维度 */\n levelSpan: number;\n startIndex: number;\n size: number; //对应到colSpan或者rowSpan\n // parsing?: 'img' | 'link' | 'video' | 'templateLink';\n startInTotal: number;\n // headerStyle:HeaderStyleOption| null;\n customRender?: ICustomRender;\n\n hierarchyState: HierarchyState;\n headerIcon?: (string | ColumnIconOption)[] | ((args: CellInfo) => (string | ColumnIconOption)[]);\n}\n\ninterface ITreeLayoutDimensionHeadNode extends ITreeLayoutBaseHeadNode {\n dimensionKey: string;\n}\ninterface ITreeLayoutIndicatorHeadNode extends ITreeLayoutBaseHeadNode {\n indicatorKey: string;\n}\nexport type ITreeLayoutHeadNode = Either<ITreeLayoutDimensionHeadNode, ITreeLayoutIndicatorHeadNode>;\nexport class DimensionTree {\n sharedVar: { seqId: number };\n // 每一个值对应的序号 结果缓存\n // cache: {\n // [propName: string]: any;\n // };\n //树形展示 会将非叶子节点单独展示一行 所以size会增加非叶子节点的个数\n sizeIncludeParent = false;\n rowExpandLevel: number;\n hierarchyType: 'grid' | 'tree';\n tree: ITreeLayoutHeadNode = {\n id: 0,\n dimensionKey: '',\n // title: '',\n value: '',\n children: [],\n level: -1,\n levelSpan: 1,\n startIndex: 0,\n size: 0,\n startInTotal: 0,\n hierarchyState: undefined\n };\n\n totalLevel = 0;\n\n // blockLevel: number = 0;\n\n // blockStartIndexMap: Map<number, boolean> = new Map();\n // blockEndIndexMap: Map<number, boolean> = new Map();\n dimensionKeys: NumberMap<string> = new NumberMap<string>();\n // dimensions: IDimension[] | undefined;//目前用不到这个\n\n cache: Map<number, any> = new Map();\n constructor(\n tree: ITreeLayoutHeadNode[],\n sharedVar: { seqId: number },\n hierarchyType: 'grid' | 'tree' = 'grid',\n rowExpandLevel: number = undefined\n ) {\n this.sizeIncludeParent = rowExpandLevel !== null && rowExpandLevel !== undefined;\n this.rowExpandLevel = rowExpandLevel;\n this.hierarchyType = hierarchyType;\n this.sharedVar = sharedVar;\n this.reset(tree);\n }\n\n reset(tree: ITreeLayoutHeadNode[], updateTreeNode = false) {\n // 清空缓存的计算\n // this.cache = {};\n // this.dimensions = dimensions;\n this.cache.clear();\n this.dimensionKeys = new NumberMap<string>();\n this.tree.children = tree as ITreeLayoutHeadNode[];\n // const re = { totalLevel: 0 };\n // if (updateTreeNode) this.updateTreeNode(this.tree, 0, re, this.tree);\n // else\n this.setTreeNode(this.tree, 0, this.tree);\n this.totalLevel = this.dimensionKeys.count();\n }\n setTreeNode(node: ITreeLayoutHeadNode, startIndex: number, parent: ITreeLayoutHeadNode): number {\n node.startIndex = startIndex;\n node.startInTotal = (parent.startInTotal ?? 0) + node.startIndex;\n // if (node.dimensionKey) {\n // !this.dimensionKeys.contain(node.dimensionKey) &&\n // this.dimensionKeys.put(node.level, node.dimensionKey);\n // if (!node.id) node.id = ++seqId;\n // }\n if (node.dimensionKey ?? node.indicatorKey) {\n !this.dimensionKeys.contain(node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey) &&\n this.dimensionKeys.put(node.level, node.indicatorKey ? IndicatorDimensionKeyPlaceholder : node.dimensionKey);\n if (!node.id) {\n node.id = ++this.sharedVar.seqId;\n }\n }\n let size = node.dimensionKey ? (this.sizeIncludeParent ? 1 : 0) : 0;\n const children = node.children || node.columns;\n //平铺展示 分析所有层级\n if (this.hierarchyType === 'grid') {\n if (children?.length >= 1) {\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else {\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n } else if (node.hierarchyState === HierarchyState.expand && children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (node.hierarchyState === HierarchyState.collapse && children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else if (!node.hierarchyState && node.level + 1 < this.rowExpandLevel && children?.length >= 1) {\n //树形展示 有子节点 且下一层需要展开\n node.hierarchyState = HierarchyState.expand;\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n size += this.setTreeNode(n, size, node);\n });\n } else if (children?.length >= 1) {\n //树形展示 有子节点 且下一层不需要展开\n node.hierarchyState = HierarchyState.collapse;\n children.forEach((n: any) => {\n n.level = (node.level ?? 0) + 1;\n this.setTreeNode(n, size, node);\n });\n } else {\n //树形展示 无children子节点。但不能确定是最后一层的叶子节点 totalLevel还不能确定是计算完整棵树的整体深度\n node.hierarchyState = HierarchyState.none;\n size = 1;\n // re.totalLevel = Math.max(re.totalLevel, (node.level ?? -1) + 1);\n }\n\n node.size = size;\n // startInTotal = parent.startIndex + prevStartIndex\n return size;\n }\n getTreePath(index: number, maxDeep = 30): Array<ITreeLayoutHeadNode> {\n const path: any[] = [];\n this.searchPath(index, this.tree, path, maxDeep);\n path.shift();\n return path;\n }\n\n getTreePathByCellIds(ids: LayoutObjectId[]): Array<ITreeLayoutHeadNode> {\n const path: any[] = [];\n let nodes = this.tree.children;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const pathNode = this.findNodeById(nodes, id);\n if (pathNode) {\n path.push(pathNode);\n nodes = pathNode.children;\n } else {\n break;\n }\n }\n // path.shift();\n return path;\n }\n findNodeById(nodes: ITreeLayoutHeadNode[], id: LayoutObjectId) {\n return nodes.find(node => {\n return node.id === id;\n });\n }\n searchPath(index: number, node: ITreeLayoutHeadNode, path: Array<ITreeLayoutHeadNode>, maxDeep: number) {\n if (!node) {\n return;\n }\n if (index < node.startIndex || index >= node.startIndex + node.size) {\n return;\n }\n path.push(node);\n if (!node.children || node.children.length === 0 || node.level >= maxDeep) {\n return;\n }\n\n // const cIndex = index - node.startIndex;\n // for (let i = 0; i < node.children.length; i++) {\n // const element = node.children[i];\n // if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n // this.searchPath(cIndex, element, path, maxDeep);\n // break;\n // }\n // }\n\n // use dichotomy to optimize search performance\n const cIndex = index - node.startIndex;\n\n if (this.cache.has(node.level + 1)) {\n const cacheNode = this.cache.get(node.level + 1);\n if (cIndex >= cacheNode.startIndex && cIndex < cacheNode.startIndex + cacheNode.size) {\n this.searchPath(cIndex, cacheNode, path, maxDeep);\n return;\n }\n }\n\n let left = 0;\n let right = node.children.length - 1;\n\n while (left <= right) {\n const middle = Math.floor((left + right) / 2);\n const element = node.children[middle];\n\n if (cIndex >= element.startIndex && cIndex < element.startIndex + element.size) {\n this.cache.set(element.level, element);\n const deleteLevels: number[] = [];\n this.cache.forEach((node, key) => {\n if (key > element.level) {\n deleteLevels.push(key);\n }\n });\n deleteLevels.forEach(key => {\n this.cache.delete(key);\n });\n this.searchPath(cIndex, element, path, maxDeep);\n break;\n } else if (cIndex < element.startIndex) {\n right = middle - 1;\n } else {\n left = middle + 1;\n }\n }\n return;\n }\n /**\n * 将该树中 层级为level 的sourceIndex处的节点移动到targetIndex位置\n * @param level\n * @param sourceIndex\n * @param targetIndex\n */\n movePosition(level: number, sourceIndex: number, targetIndex: number) {\n // let sourceNode: IPivotLayoutHeadNode;\n let parNode: ITreeLayoutHeadNode;\n let sourceSubIndex: number;\n let targetSubIndex: number;\n /**\n * 对parNode的子节点第subIndex处的node节点 进行判断是否为sourceIndex或者targetIndex\n * 如果是 则记录下subIndex 以对parNode中个节点位置进行移位\n * @param node\n * @param subIndex\n * @returns\n */\n const findTargetNode = (node: ITreeLayoutHeadNode, subIndex: number) => {\n if (sourceSubIndex !== undefined && targetSubIndex !== undefined) {\n return;\n }\n if (node.level === level) {\n if (node.startInTotal === sourceIndex) {\n // sourceNode = node;\n sourceSubIndex = subIndex;\n }\n // if (node.startInTotal === targetIndex) targetSubIndex = subIndex;\n // 判断targetIndex是否在node的范围内 将当前node的subIndex记为targetSubIndex\n if (node.startInTotal <= targetIndex && targetIndex <= node.startInTotal + node.size - 1) {\n targetSubIndex = subIndex;\n }\n }\n const children = node.children || node.columns;\n if (children && node.level < level) {\n parNode = node;\n for (let i = 0; i < children.length; i++) {\n if (\n (sourceIndex >= children[i].startInTotal && sourceIndex <= children[i].startInTotal + children[i].size) ||\n (targetIndex >= children[i].startInTotal && targetIndex <= children[i].startInTotal + children[i].size)\n ) {\n findTargetNode(children[i], i);\n }\n }\n }\n };\n findTargetNode(this.tree, 0);\n\n //对parNode子节点位置进行移位【根据sourceSubIndex和targetSubIndex】\n const children = parNode.children || parNode.columns;\n const sourceColumns = children.splice(sourceSubIndex, 1);\n sourceColumns.unshift(targetSubIndex as any, 0 as any);\n Array.prototype.splice.apply(children, sourceColumns);\n }\n /** 获取纯净树结构 没有level size index这些属性 */\n getCopiedTree() {\n const children = cloneDeep(this.tree.children);\n clearNode(children);\n return children;\n }\n}\n\n//#region 为方法getLayoutRowTree提供的类型和工具方法\nexport type LayouTreeNode = {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n hierarchyState: HierarchyState;\n children?: LayouTreeNode[];\n};\n\nexport function generateLayoutTree(tree: LayouTreeNode[], children: ITreeLayoutHeadNode[]) {\n children?.forEach((node: ITreeLayoutHeadNode) => {\n const diemnsonNode: {\n dimensionKey?: string;\n indicatorKey?: string;\n value: string;\n hierarchyState: HierarchyState;\n children: any;\n } = {\n dimensionKey: node.dimensionKey,\n indicatorKey: node.indicatorKey,\n value: node.value,\n hierarchyState: node.hierarchyState,\n children: undefined\n };\n tree.push(diemnsonNode);\n if (node.children) {\n diemnsonNode.children = [];\n generateLayoutTree(diemnsonNode.children, node.children);\n }\n });\n}\n//#endregion\n\n//#region 为方法getLayoutRowTreeCount提的工具方法\nexport function countLayoutTree(children: { children?: any }[], countParentNode: boolean) {\n let count = 0;\n children?.forEach((node: ITreeLayoutHeadNode) => {\n if (countParentNode) {\n count++;\n } else {\n if (!node.children || node.children.length === 0) {\n count++;\n }\n }\n if (node.children) {\n count += countLayoutTree(node.children, countParentNode);\n }\n });\n return count;\n}\n//#endregion\n\nexport function dealHeader(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n layoutMap: PivotHeaderLayoutMap\n) {\n // const col = this._columns.length;\n const id = hd.id;\n const dimensionInfo: IDimension =\n (layoutMap.rowsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension) ??\n (layoutMap.columnsDefine?.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension);\n const indicatorInfo = layoutMap.indicatorsDefine?.find(indicator => {\n if (typeof indicator === 'string') {\n return false;\n }\n if (hd.indicatorKey) {\n return indicator.indicatorKey === hd.indicatorKey;\n }\n return indicator.title === hd.value;\n }) as IIndicator;\n const cell: HeaderData = {\n id,\n title: hd.value ?? indicatorInfo?.title,\n field: hd.dimensionKey,\n style:\n typeof (indicatorInfo ?? dimensionInfo)?.headerStyle === 'function'\n ? (indicatorInfo ?? dimensionInfo)?.headerStyle\n : Object.assign({}, (indicatorInfo ?? dimensionInfo)?.headerStyle),\n headerType: indicatorInfo?.headerType ?? dimensionInfo?.headerType ?? 'text',\n headerIcon: indicatorInfo?.headerIcon ?? dimensionInfo?.headerIcon,\n // define: <any>hd,\n define: Object.assign({}, <any>hd, indicatorInfo ?? dimensionInfo),\n fieldFormat: indicatorInfo?.headerFormat ?? dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: indicatorInfo?.dropDownMenu ?? dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n showSort: indicatorInfo?.showSort ?? dimensionInfo?.showSort,\n description: dimensionInfo?.description\n };\n\n if (indicatorInfo) {\n //收集indicatorDimensionKey 提到了构造函数中\n // this.indicatorDimensionKey = dimensionInfo.dimensionKey;\n if (indicatorInfo.customRender) {\n hd.customRender = indicatorInfo.customRender;\n }\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === indicatorInfo.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: indicatorInfo.indicatorKey,\n field: indicatorInfo.indicatorKey,\n fieldFormat: indicatorInfo?.format,\n cellType: indicatorInfo?.cellType ?? (indicatorInfo as any)?.columnType ?? 'text',\n chartModule: 'chartModule' in indicatorInfo ? indicatorInfo.chartModule : null,\n chartSpec: 'chartSpec' in indicatorInfo ? indicatorInfo.chartSpec : null,\n sparklineSpec: 'sparklineSpec' in indicatorInfo ? indicatorInfo.sparklineSpec : null,\n style: indicatorInfo?.style,\n icon: indicatorInfo?.icon,\n define: Object.assign({}, <any>hd, indicatorInfo, {\n dragHeader: dimensionInfo?.dragHeader\n }),\n width: indicatorInfo?.width,\n minWidth: indicatorInfo?.minWidth,\n maxWidth: indicatorInfo?.maxWidth,\n disableColumnResize: indicatorInfo?.disableColumnResize\n });\n }\n } else if (hd.indicatorKey) {\n //兼容当某个指标没有设置在dimension.indicators中\n if (!isValid(layoutMap._indicators?.find(indicator => indicator.indicatorKey === hd.indicatorKey))) {\n layoutMap._indicators?.push({\n id: ++layoutMap.sharedVar.seqId,\n indicatorKey: hd.indicatorKey,\n field: hd.indicatorKey,\n cellType: 'text',\n define: Object.assign({}, <any>hd)\n });\n }\n }\n // if (dimensionInfo.indicators) {\n // layoutMap.hideIndicatorName = dimensionInfo.hideIndicatorName ?? false;\n // layoutMap.indicatorsAsCol = dimensionInfo.indicatorsAsCol ?? true;\n // }\n results[id] = cell;\n layoutMap._headerObjects[id] = cell;\n _headerCellIds[row][layoutMap.colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n\n // 处理汇总小计跨维度层级的情况\n if ((hd as any).levelSpan > 1) {\n for (let i = 1; i < (hd as any).levelSpan; i++) {\n if (!_headerCellIds[row + i]) {\n _headerCellIds[row + i] = [];\n }\n _headerCellIds[row + i][layoutMap.colIndex] = id;\n }\n }\n\n if ((hd as ITreeLayoutHeadNode).children?.length >= 1) {\n layoutMap\n ._addHeaders(_headerCellIds, row + ((hd as any).levelSpan ?? 1), (hd as ITreeLayoutHeadNode).children ?? [], [\n ...roots,\n ...Array((hd as any).levelSpan ?? 1).fill(id)\n ])\n .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n\n // if ((hd as any).levelSpan > 1) {\n // for (let i = 1; i < (hd as any).levelSpan; i++) {\n // _headerCellIds[r + i][layoutMap.colIndex] = id;\n // }\n // }\n }\n layoutMap.colIndex++;\n }\n}\n\nexport function dealHeaderForTreeMode(\n hd: ITreeLayoutHeadNode,\n _headerCellIds: number[][],\n results: HeaderData[],\n roots: number[],\n row: number,\n totalLevel: number,\n show: boolean,\n dimensions: (IDimension | string)[],\n layoutMap: PivotHeaderLayoutMap\n) {\n const id = hd.id;\n // const dimensionInfo: IDimension =\n // (this.rowsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension) ??\n // (this.columnsDefine?.find(dimension =>\n // typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n // ) as IDimension);\n const dimensionInfo: IDimension = dimensions.find(dimension =>\n typeof dimension === 'string' ? false : dimension.dimensionKey === hd.dimensionKey\n ) as IDimension;\n\n const cell: HeaderData = {\n id,\n title: hd.value,\n field: hd.dimensionKey as FieldData,\n //如果不是整棵树的叶子节点,都靠左显示\n style:\n hd.level + 1 === totalLevel || typeof dimensionInfo?.headerStyle === 'function'\n ? dimensionInfo?.headerStyle\n : Object.assign({}, dimensionInfo?.headerStyle, { textAlign: 'left' }),\n headerType: dimensionInfo?.headerType ?? 'text',\n headerIcon: dimensionInfo?.headerIcon,\n define: Object.assign(<any>hd, {\n linkJump: (dimensionInfo as ILinkDimension)?.linkJump,\n linkDetect: (dimensionInfo as ILinkDimension)?.linkDetect,\n templateLink: (dimensionInfo as ILinkDimension)?.templateLink,\n\n // image相关 to be fixed\n keepAspectRatio: (dimensionInfo as IImageDimension)?.keepAspectRatio ?? false,\n imageAutoSizing: (dimensionInfo as IImageDimension)?.imageAutoSizing,\n\n headerCustomRender: dimensionInfo?.headerCustomRender,\n headerCustomLayout: dimensionInfo?.headerCustomLayout,\n dragHeader: dimensionInfo?.dragHeader,\n disableHeaderHover: !!dimensionInfo?.disableHeaderHover,\n disableHeaderSelect: !!dimensionInfo?.disableHeaderSelect\n }), //这里不能新建对象,要用hd保持引用关系\n fieldFormat: dimensionInfo?.headerFormat,\n // iconPositionList:[]\n dropDownMenu: dimensionInfo?.dropDownMenu,\n pivotInfo: {\n value: hd.value,\n dimensionKey: hd.dimensionKey as string,\n isPivotCorner: false\n // customInfo: dimensionInfo?.customInfo\n },\n hierarchyLevel: hd.level,\n dimensionTotalLevel: totalLevel,\n hierarchyState: hd.level + 1 === totalLevel ? undefined : hd.hierarchyState,\n width: (dimensionInfo as IRowDimension)?.width,\n minWidth: (dimensionInfo as IRowDimension)?.minWidth,\n maxWidth: (dimensionInfo as IRowDimension)?.maxWidth,\n parentCellId: roots[roots.length - 1]\n };\n\n results[id] = cell;\n // this._cellIdDiemnsionMap.set(id, {\n // dimensionKey: hd.dimensionKey,\n // value: hd.value\n // });\n layoutMap._headerObjects[id] = cell;\n _headerCellIds[row][layoutMap.colIndex] = id;\n for (let r = row - 1; r >= 0; r--) {\n _headerCellIds[r][layoutMap.colIndex] = roots[r];\n }\n if (hd.hierarchyState === HierarchyState.expand && (hd as ITreeLayoutHeadNode).children?.length >= 1) {\n //row传值 colIndex++和_addHeaders有区别\n show && layoutMap.colIndex++;\n layoutMap\n ._addHeadersForTreeMode(\n _headerCellIds,\n row,\n (hd as ITreeLayoutHeadNode).children ?? [],\n [...roots, id],\n totalLevel,\n show && hd.hierarchyState === HierarchyState.expand, //当前节点show 且当前节点状态为展开 则传给子节点为show:true\n dimensions\n )\n .forEach(c => results.push(c));\n } else {\n // columns.push([\"\"])//代码一个路径\n show && layoutMap.colIndex++;\n for (let r = row + 1; r < _headerCellIds.length; r++) {\n _headerCellIds[r][layoutMap.colIndex] = id;\n }\n }\n}\n\nfunction clearNode(children: any) {\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n delete node.level;\n delete node.startIndex;\n delete node.id;\n delete node.levelSpan;\n delete node.size;\n delete node.startInTotal;\n const childrenNew = node.children || node.columns;\n if (childrenNew) {\n clearNode(childrenNew);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/layout/layout-helper.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,mBAAmB,CAAC,SAAgC;IAClE,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAChC,IAAK,MAAqB,aAArB,MAAM,uBAAN,MAAM,CAAiB,WAAW,EAAE;YACvC,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAgC;IACvE,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAChC,IAAK,MAAqB,aAArB,MAAM,uBAAN,MAAM,CAAiB,WAAW,EAAE;YACvC,IAAI,KAAK,CAAC,OAAO,CAAE,MAAqB,aAArB,MAAM,uBAAN,MAAM,CAAiB,WAAW,CAAC,EAAE;gBACtD,KAAK,GAAG,IAAI,CAAC,GAAG,CACd,KAAK,EACH,MAAqB,CAAC,WAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,MAAM,CAC1G,CAAC;aACH;iBAAM,IAAM,MAAqB,CAAC,WAA2B,CAAC,SAAS,KAAK,IAAI,EAAE;gBACjF,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC5B;SACF;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,SAAgC;IAC1E,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAChC,IAAK,MAAqB,aAArB,MAAM,uBAAN,MAAM,CAAiB,WAAW,EAAE;YACvC,IAAI,KAAK,CAAC,OAAO,CAAE,MAAqB,aAArB,MAAM,uBAAN,MAAM,CAAiB,WAAW,CAAC,EAAE;gBACtD,KAAK,GAAG,IAAI,CAAC,GAAG,CACd,KAAK,EACH,MAAqB,CAAC,WAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,MAAM,CAC3G,CAAC;aACH;iBAAM,IAAM,MAAqB,CAAC,WAA2B,CAAC,SAAS,KAAK,KAAK,EAAE;gBAClF,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC5B;SACF;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC","file":"layout-helper.js","sourcesContent":["import type { Aggregation } from '../ts-types';\nimport type { ColumnData } from '../ts-types/list-table/layout-map/api';\nimport type { SimpleHeaderLayoutMap } from './simple-header-layout';\n\nexport function checkHasAggregation(layoutMap: SimpleHeaderLayoutMap) {\n const columnObjects = layoutMap.columnObjects;\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if ((column as ColumnData)?.aggregation) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkHasAggregationOnTop(layoutMap: SimpleHeaderLayoutMap) {\n const columnObjects = layoutMap.columnObjects;\n let count = 0;\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if ((column as ColumnData)?.aggregation) {\n if (Array.isArray((column as ColumnData)?.aggregation)) {\n count = Math.max(\n count,\n ((column as ColumnData).aggregation as Array<Aggregation>).filter(item => item.showOnTop === true).length\n );\n } else if (((column as ColumnData).aggregation as Aggregation).showOnTop === true) {\n count = Math.max(count, 1);\n }\n }\n }\n return count;\n}\n\nexport function checkHasAggregationOnBottom(layoutMap: SimpleHeaderLayoutMap) {\n const columnObjects = layoutMap.columnObjects;\n let count = 0;\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if ((column as ColumnData)?.aggregation) {\n if (Array.isArray((column as ColumnData)?.aggregation)) {\n count = Math.max(\n count,\n ((column as ColumnData).aggregation as Array<Aggregation>).filter(item => item.showOnTop === false).length\n );\n } else if (((column as ColumnData).aggregation as Aggregation).showOnTop === false) {\n count = Math.max(count, 1);\n }\n }\n }\n return count;\n}\n"]}
@@ -2,8 +2,8 @@ import type { CellAddress, CellRange, IPivotTableCellHeaderPaths, LayoutObjectId
2
2
  import type { HeaderData, IndicatorData, LayoutMapAPI, WidthData } from '../ts-types/list-table/layout-map/api';
3
3
  import type { PivotTable } from '../PivotTable';
4
4
  import type { PivotChart } from '../PivotChart';
5
- import type { LayouTreeNode, ITreeLayoutHeadNode } from './layout-helper';
6
- import { DimensionTree } from './layout-helper';
5
+ import type { ITreeLayoutHeadNode, LayouTreeNode } from './tree-helper';
6
+ import { DimensionTree } from './tree-helper';
7
7
  import type { Dataset } from '../dataset/dataset';
8
8
  export declare class PivotHeaderLayoutMap implements LayoutMapAPI {
9
9
  sharedVar: {
@@ -179,13 +179,14 @@ export declare class PivotHeaderLayoutMap implements LayoutMapAPI {
179
179
  isAxisCell(col: number, row: number): boolean;
180
180
  getChartAxes(col: number, row: number): any[];
181
181
  getRawChartSpec(col: number, row: number): any;
182
+ getChartSpec(col: number, row: number): any;
183
+ isShareChartSpec(col: number, row: number): any;
182
184
  getChartDataId(col: number, row: number): any;
183
185
  setPagination(pagination: IPagination): void;
184
186
  release(): void;
185
187
  getHeadNode(dimensions: IDimensionInfo[]): IHeaderTreeDefine;
186
188
  clearCellRangeMap(): void;
187
189
  getDimensionKeyInChartSpec(_col: number, _row: number): string;
188
- getChartSpec(col: number, row: number): any;
189
190
  _generateChartState(): {
190
191
  vtable_selected: {
191
192
  filter: (datum: any) => boolean;
@@ -206,7 +207,9 @@ export declare class PivotHeaderLayoutMap implements LayoutMapAPI {
206
207
  getColKeysPath(col: number, row: number): string;
207
208
  getRowKeysPath(col: number, row: number): string;
208
209
  getIndicatorInfo(indicatorKey: string, indicatorValue?: string): IIndicator;
210
+ getLayoutColumnTree(): LayouTreeNode[];
209
211
  getLayoutRowTree(): LayouTreeNode[];
212
+ getLayoutColumnTreeCount(): number;
210
213
  getLayoutRowTreeCount(): number;
211
214
  resetHeaderTree(): void;
212
215
  }
@@ -6,9 +6,9 @@ import { IndicatorDimensionKeyPlaceholder } from "../tools/global";
6
6
 
7
7
  import { diffCellAddress } from "../tools/diff-cell";
8
8
 
9
- import { checkHasCartesianChart, checkHasChart, getChartAxes, getChartDataId, getChartSpec, getRawChartSpec, isCartesianChart, isHasCartesianChartInline } from "./chart-helper/get-chart-spec";
9
+ import { checkHasCartesianChart, checkHasChart, getChartAxes, getChartDataId, getChartSpec, getRawChartSpec, isCartesianChart, isHasCartesianChartInline, isShareChartSpec } from "./chart-helper/get-chart-spec";
10
10
 
11
- import { DimensionTree, countLayoutTree, dealHeader, dealHeaderForTreeMode, generateLayoutTree } from "./layout-helper";
11
+ import { DimensionTree, countLayoutTree, dealHeader, dealHeaderForTreeMode, generateLayoutTree } from "./tree-helper";
12
12
 
13
13
  import { cloneDeep, isArray, isValid } from "@visactor/vutils";
14
14
 
@@ -1048,7 +1048,7 @@ export class PivotHeaderLayoutMap {
1048
1048
  const indicatorKey = null === (_c = paths.rowHeaderPaths.find((rowPath => rowPath.indicatorKey))) || void 0 === _c ? void 0 : _c.indicatorKey;
1049
1049
  indicatorObj = null === (_d = this._indicators) || void 0 === _d ? void 0 : _d.find((indicator => indicator.indicatorKey === indicatorKey));
1050
1050
  }
1051
- indicatorObj && (indicatorObj.chartInstance = chartInstance);
1051
+ "function" != typeof (null == indicatorObj ? void 0 : indicatorObj.chartSpec) && indicatorObj && (indicatorObj.chartInstance = chartInstance);
1052
1052
  }
1053
1053
  getChartInstance(_col, _row) {
1054
1054
  var _a, _b, _c, _d;
@@ -1091,6 +1091,12 @@ export class PivotHeaderLayoutMap {
1091
1091
  getRawChartSpec(col, row) {
1092
1092
  return getRawChartSpec(col, row, this);
1093
1093
  }
1094
+ getChartSpec(col, row) {
1095
+ return getChartSpec(col, row, this);
1096
+ }
1097
+ isShareChartSpec(col, row) {
1098
+ return isShareChartSpec(col, row, this);
1099
+ }
1094
1100
  getChartDataId(col, row) {
1095
1101
  return getChartDataId(col, row, this);
1096
1102
  }
@@ -1154,9 +1160,6 @@ export class PivotHeaderLayoutMap {
1154
1160
  }
1155
1161
  return null;
1156
1162
  }
1157
- getChartSpec(col, row) {
1158
- return getChartSpec(col, row, this);
1159
- }
1160
1163
  _generateChartState() {
1161
1164
  return {
1162
1165
  vtable_selected: {
@@ -1280,10 +1283,18 @@ export class PivotHeaderLayoutMap {
1280
1283
  var _a;
1281
1284
  return null === (_a = this.indicatorsDefine) || void 0 === _a ? void 0 : _a.find((indicator => "string" != typeof indicator && (indicatorKey ? indicator.indicatorKey === indicatorKey : !!indicatorValue && indicator.title === indicatorValue)));
1282
1285
  }
1286
+ getLayoutColumnTree() {
1287
+ const tree = [], children = this.columnDimensionTree.tree.children;
1288
+ return generateLayoutTree(tree, children), tree;
1289
+ }
1283
1290
  getLayoutRowTree() {
1284
1291
  const tree = [], children = this.rowDimensionTree.tree.children;
1285
1292
  return generateLayoutTree(tree, children), tree;
1286
1293
  }
1294
+ getLayoutColumnTreeCount() {
1295
+ const children = this.columnDimensionTree.tree.children;
1296
+ return countLayoutTree(children, "tree" === this.rowHierarchyType);
1297
+ }
1287
1298
  getLayoutRowTreeCount() {
1288
1299
  var _a;
1289
1300
  const children = this.rowDimensionTree.tree.children;