@visactor/vtable 0.9.2-alpha.3 → 0.9.3-alpha.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 (245) hide show
  1. package/cjs/PivotChart.d.ts +1 -0
  2. package/cjs/PivotChart.js +8 -0
  3. package/cjs/PivotChart.js.map +1 -1
  4. package/cjs/chartModule.js +14 -0
  5. package/cjs/chartModule.js.map +1 -0
  6. package/cjs/core/BaseTable.js +26 -9
  7. package/cjs/core/BaseTable.js.map +1 -1
  8. package/cjs/core/TABLE_EVENT_TYPE.d.ts +2 -0
  9. package/cjs/core/TABLE_EVENT_TYPE.js +3 -1
  10. package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
  11. package/cjs/dataset/dataset-pivot-table.d.ts +60 -0
  12. package/cjs/dataset/dataset-pivot-table.js +387 -0
  13. package/cjs/dataset/dataset-pivot-table.js.map +1 -0
  14. package/cjs/dataset/dataset.d.ts +2 -0
  15. package/cjs/dataset/dataset.js +32 -21
  16. package/cjs/dataset/dataset.js.map +1 -1
  17. package/cjs/event/event.js +2 -2
  18. package/cjs/event/event.js.map +1 -1
  19. package/cjs/event/pivot-chart/axis-hover.d.ts +2 -0
  20. package/cjs/event/pivot-chart/axis-hover.js +41 -0
  21. package/cjs/event/pivot-chart/axis-hover.js.map +1 -0
  22. package/cjs/event/scroll.js +4 -3
  23. package/cjs/event/scroll.js.map +1 -1
  24. package/cjs/event/sparkline-event.js +1 -2
  25. package/cjs/event/util.js +1 -0
  26. package/cjs/index.d.ts +1 -1
  27. package/cjs/index.js +1 -1
  28. package/cjs/index.js.map +1 -1
  29. package/cjs/layout/{pivot-chart → chart-helper}/get-axis-config.js +4 -4
  30. package/cjs/layout/chart-helper/get-axis-config.js.map +1 -0
  31. package/cjs/layout/chart-helper/get-chart-spec.d.ts +7 -0
  32. package/cjs/layout/{pivot-chart → chart-helper}/get-chart-spec.js +23 -6
  33. package/cjs/layout/chart-helper/get-chart-spec.js.map +1 -0
  34. package/cjs/layout/pivot-header-layout.d.ts +2 -0
  35. package/cjs/layout/pivot-header-layout.js +8 -2
  36. package/cjs/layout/pivot-header-layout.js.map +1 -1
  37. package/cjs/layout/pivot-layout.d.ts +1 -0
  38. package/cjs/layout/pivot-layout.js +12 -8
  39. package/cjs/layout/pivot-layout.js.map +1 -1
  40. package/cjs/layout/simple-header-layout.d.ts +2 -0
  41. package/cjs/layout/simple-header-layout.js +9 -2
  42. package/cjs/layout/simple-header-layout.js.map +1 -1
  43. package/cjs/plugins/{chartTypes.js → chartModules.js} +1 -1
  44. package/cjs/plugins/chartModules.js.map +1 -0
  45. package/cjs/register.d.ts +1 -1
  46. package/cjs/register.js +6 -6
  47. package/cjs/register.js.map +1 -1
  48. package/cjs/render/layout/text.d.ts +33 -4
  49. package/cjs/render/layout/text.js +9 -3
  50. package/cjs/render/layout/text.js.map +1 -1
  51. package/cjs/scenegraph/component/custom.js +17 -16
  52. package/cjs/scenegraph/component/custom.js.map +1 -1
  53. package/cjs/scenegraph/component/menu.d.ts +41 -0
  54. package/cjs/scenegraph/graphic/chart.d.ts +1 -1
  55. package/cjs/scenegraph/graphic/chart.js +9 -12
  56. package/cjs/scenegraph/graphic/chart.js.map +1 -1
  57. package/cjs/scenegraph/graphic/contributions/chart-render.js +10 -3
  58. package/cjs/scenegraph/graphic/contributions/chart-render.js.map +1 -1
  59. package/cjs/scenegraph/graphic/contributions/group-contribution-render.d.ts +9 -9
  60. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js +48 -29
  61. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  62. package/cjs/scenegraph/graphic/contributions/image-contribution-render.d.ts +3 -3
  63. package/cjs/scenegraph/graphic/contributions/image-contribution-render.js +2 -2
  64. package/cjs/scenegraph/graphic/contributions/image-contribution-render.js.map +1 -1
  65. package/cjs/scenegraph/graphic/contributions/rect-contribution-render.d.ts +3 -3
  66. package/cjs/scenegraph/graphic/contributions/rect-contribution-render.js +2 -2
  67. package/cjs/scenegraph/graphic/contributions/rect-contribution-render.js.map +1 -1
  68. package/cjs/scenegraph/graphic/text.d.ts +15 -0
  69. package/cjs/scenegraph/group-creater/cell-helper.js +2 -1
  70. package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
  71. package/cjs/scenegraph/group-creater/cell-type/chart-cell.d.ts +1 -1
  72. package/cjs/scenegraph/group-creater/cell-type/chart-cell.js +4 -4
  73. package/cjs/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
  74. package/cjs/scenegraph/layout/update-width.js +32 -2
  75. package/cjs/scenegraph/layout/update-width.js.map +1 -1
  76. package/cjs/scenegraph/refresh-node/update-chart.js +31 -5
  77. package/cjs/scenegraph/refresh-node/update-chart.js.map +1 -1
  78. package/cjs/scenegraph/scenegraph.d.ts +1 -2
  79. package/cjs/scenegraph/scenegraph.js +11 -41
  80. package/cjs/scenegraph/scenegraph.js.map +1 -1
  81. package/cjs/scenegraph/stick-text/index.js +4 -4
  82. package/cjs/scenegraph/stick-text/index.js.map +1 -1
  83. package/cjs/scenegraph/style/corner-cell.d.ts +3 -0
  84. package/cjs/scenegraph/style/corner-cell.js +29 -0
  85. package/cjs/scenegraph/style/corner-cell.js.map +1 -0
  86. package/cjs/scenegraph/style/frame-border.d.ts +1 -0
  87. package/cjs/scenegraph/style/frame-border.js +2 -2
  88. package/cjs/scenegraph/style/frame-border.js.map +1 -1
  89. package/cjs/scenegraph/utils/get-cell-merge.js +2 -1
  90. package/cjs/scenegraph/utils/get-cell-merge.js.map +1 -1
  91. package/cjs/themes/DARK.js +1 -2
  92. package/cjs/themes/DEFAULT.js +2 -1
  93. package/cjs/themes/theme.d.ts +10 -0
  94. package/cjs/themes/theme.js +50 -4
  95. package/cjs/themes/theme.js.map +1 -1
  96. package/cjs/tools/debounce.js +1 -1
  97. package/cjs/ts-types/customElement.d.ts +2 -0
  98. package/cjs/ts-types/customElement.js.map +1 -1
  99. package/cjs/ts-types/events.d.ts +8 -0
  100. package/cjs/ts-types/events.js.map +1 -1
  101. package/cjs/ts-types/list-table/define/basic-define.js.map +1 -1
  102. package/cjs/ts-types/list-table/define/chart-define.d.ts +1 -1
  103. package/cjs/ts-types/list-table/define/chart-define.js.map +1 -1
  104. package/cjs/ts-types/list-table/layout-map/api.d.ts +2 -2
  105. package/cjs/ts-types/list-table/layout-map/api.js.map +1 -1
  106. package/cjs/ts-types/new-data-set.d.ts +1 -0
  107. package/cjs/ts-types/new-data-set.js.map +1 -1
  108. package/cjs/ts-types/pivot-table/indicator/basic-indicator.js.map +1 -1
  109. package/cjs/ts-types/pivot-table/indicator/chart-indicator.d.ts +1 -1
  110. package/cjs/ts-types/pivot-table/indicator/chart-indicator.js.map +1 -1
  111. package/cjs/ts-types/theme.d.ts +5 -0
  112. package/cjs/ts-types/theme.js.map +1 -1
  113. package/dist/vtable.js +35578 -33046
  114. package/dist/vtable.min.js +4 -4
  115. package/es/PivotChart.d.ts +1 -0
  116. package/es/PivotChart.js +8 -0
  117. package/es/PivotChart.js.map +1 -1
  118. package/es/{chartType.js → chartModule.js} +2 -2
  119. package/es/chartModule.js.map +1 -0
  120. package/es/core/BaseTable.js +26 -9
  121. package/es/core/BaseTable.js.map +1 -1
  122. package/es/core/TABLE_EVENT_TYPE.d.ts +2 -0
  123. package/es/core/TABLE_EVENT_TYPE.js +3 -1
  124. package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
  125. package/es/dataset/dataset-pivot-table.d.ts +60 -0
  126. package/es/dataset/dataset-pivot-table.js +378 -0
  127. package/es/dataset/dataset-pivot-table.js.map +1 -0
  128. package/es/dataset/dataset.d.ts +2 -0
  129. package/es/dataset/dataset.js +29 -18
  130. package/es/dataset/dataset.js.map +1 -1
  131. package/es/event/event.js +3 -1
  132. package/es/event/event.js.map +1 -1
  133. package/es/event/pivot-chart/axis-hover.d.ts +2 -0
  134. package/es/event/pivot-chart/axis-hover.js +33 -0
  135. package/es/event/pivot-chart/axis-hover.js.map +1 -0
  136. package/es/event/scroll.js +4 -3
  137. package/es/event/scroll.js.map +1 -1
  138. package/es/event/sparkline-event.js +1 -2
  139. package/es/event/util.js +2 -1
  140. package/es/index.d.ts +1 -1
  141. package/es/index.js +1 -1
  142. package/es/index.js.map +1 -1
  143. package/es/layout/{pivot-chart → chart-helper}/get-axis-config.js +4 -4
  144. package/es/layout/chart-helper/get-axis-config.js.map +1 -0
  145. package/es/layout/chart-helper/get-chart-spec.d.ts +7 -0
  146. package/es/layout/{pivot-chart → chart-helper}/get-chart-spec.js +21 -4
  147. package/es/layout/chart-helper/get-chart-spec.js.map +1 -0
  148. package/es/layout/pivot-header-layout.d.ts +2 -0
  149. package/es/layout/pivot-header-layout.js +9 -1
  150. package/es/layout/pivot-header-layout.js.map +1 -1
  151. package/es/layout/pivot-layout.d.ts +1 -0
  152. package/es/layout/pivot-layout.js +13 -9
  153. package/es/layout/pivot-layout.js.map +1 -1
  154. package/es/layout/simple-header-layout.d.ts +2 -0
  155. package/es/layout/simple-header-layout.js +10 -1
  156. package/es/layout/simple-header-layout.js.map +1 -1
  157. package/es/plugins/chartModules.js +2 -0
  158. package/es/plugins/chartModules.js.map +1 -0
  159. package/es/register.d.ts +1 -1
  160. package/es/register.js +3 -3
  161. package/es/register.js.map +1 -1
  162. package/es/render/layout/text.d.ts +33 -4
  163. package/es/render/layout/text.js +9 -3
  164. package/es/render/layout/text.js.map +1 -1
  165. package/es/scenegraph/component/custom.js +17 -16
  166. package/es/scenegraph/component/custom.js.map +1 -1
  167. package/es/scenegraph/component/menu.d.ts +41 -0
  168. package/es/scenegraph/graphic/chart.d.ts +1 -1
  169. package/es/scenegraph/graphic/chart.js +8 -11
  170. package/es/scenegraph/graphic/chart.js.map +1 -1
  171. package/es/scenegraph/graphic/contributions/chart-render.js +10 -3
  172. package/es/scenegraph/graphic/contributions/chart-render.js.map +1 -1
  173. package/es/scenegraph/graphic/contributions/group-contribution-render.d.ts +9 -9
  174. package/es/scenegraph/graphic/contributions/group-contribution-render.js +48 -29
  175. package/es/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  176. package/es/scenegraph/graphic/contributions/image-contribution-render.d.ts +3 -3
  177. package/es/scenegraph/graphic/contributions/image-contribution-render.js +2 -2
  178. package/es/scenegraph/graphic/contributions/image-contribution-render.js.map +1 -1
  179. package/es/scenegraph/graphic/contributions/rect-contribution-render.d.ts +3 -3
  180. package/es/scenegraph/graphic/contributions/rect-contribution-render.js +2 -2
  181. package/es/scenegraph/graphic/contributions/rect-contribution-render.js.map +1 -1
  182. package/es/scenegraph/graphic/text.d.ts +15 -0
  183. package/es/scenegraph/group-creater/cell-helper.js +2 -1
  184. package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
  185. package/es/scenegraph/group-creater/cell-type/chart-cell.d.ts +1 -1
  186. package/es/scenegraph/group-creater/cell-type/chart-cell.js +4 -4
  187. package/es/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
  188. package/es/scenegraph/layout/update-width.js +33 -1
  189. package/es/scenegraph/layout/update-width.js.map +1 -1
  190. package/es/scenegraph/refresh-node/update-chart.js +27 -2
  191. package/es/scenegraph/refresh-node/update-chart.js.map +1 -1
  192. package/es/scenegraph/scenegraph.d.ts +1 -2
  193. package/es/scenegraph/scenegraph.js +11 -40
  194. package/es/scenegraph/scenegraph.js.map +1 -1
  195. package/es/scenegraph/stick-text/index.js +4 -4
  196. package/es/scenegraph/stick-text/index.js.map +1 -1
  197. package/es/scenegraph/style/corner-cell.d.ts +3 -0
  198. package/es/scenegraph/style/corner-cell.js +25 -0
  199. package/es/scenegraph/style/corner-cell.js.map +1 -0
  200. package/es/scenegraph/style/frame-border.d.ts +1 -0
  201. package/es/scenegraph/style/frame-border.js +1 -1
  202. package/es/scenegraph/style/frame-border.js.map +1 -1
  203. package/es/scenegraph/utils/get-cell-merge.js +2 -1
  204. package/es/scenegraph/utils/get-cell-merge.js.map +1 -1
  205. package/es/themes/DARK.js +1 -2
  206. package/es/themes/DEFAULT.js +2 -1
  207. package/es/themes/theme.d.ts +10 -0
  208. package/es/themes/theme.js +50 -4
  209. package/es/themes/theme.js.map +1 -1
  210. package/es/tools/debounce.js +1 -1
  211. package/es/ts-types/customElement.d.ts +2 -0
  212. package/es/ts-types/customElement.js.map +1 -1
  213. package/es/ts-types/events.d.ts +8 -0
  214. package/es/ts-types/events.js.map +1 -1
  215. package/es/ts-types/list-table/define/basic-define.js.map +1 -1
  216. package/es/ts-types/list-table/define/chart-define.d.ts +1 -1
  217. package/es/ts-types/list-table/define/chart-define.js.map +1 -1
  218. package/es/ts-types/list-table/layout-map/api.d.ts +2 -2
  219. package/es/ts-types/list-table/layout-map/api.js.map +1 -1
  220. package/es/ts-types/new-data-set.d.ts +1 -0
  221. package/es/ts-types/new-data-set.js.map +1 -1
  222. package/es/ts-types/pivot-table/indicator/basic-indicator.js.map +1 -1
  223. package/es/ts-types/pivot-table/indicator/chart-indicator.d.ts +1 -1
  224. package/es/ts-types/pivot-table/indicator/chart-indicator.js.map +1 -1
  225. package/es/ts-types/theme.d.ts +5 -0
  226. package/es/ts-types/theme.js.map +1 -1
  227. package/package.json +9 -9
  228. package/cjs/chartType.js +0 -14
  229. package/cjs/chartType.js.map +0 -1
  230. package/cjs/layout/pivot-chart/get-axis-config.js.map +0 -1
  231. package/cjs/layout/pivot-chart/get-chart-spec.d.ts +0 -4
  232. package/cjs/layout/pivot-chart/get-chart-spec.js.map +0 -1
  233. package/cjs/plugins/chartTypes.js.map +0 -1
  234. package/es/chartType.js.map +0 -1
  235. package/es/layout/pivot-chart/get-axis-config.js.map +0 -1
  236. package/es/layout/pivot-chart/get-chart-spec.d.ts +0 -4
  237. package/es/layout/pivot-chart/get-chart-spec.js.map +0 -1
  238. package/es/plugins/chartTypes.js +0 -2
  239. package/es/plugins/chartTypes.js.map +0 -1
  240. /package/cjs/{chartType.d.ts → chartModule.d.ts} +0 -0
  241. /package/cjs/layout/{pivot-chart → chart-helper}/get-axis-config.d.ts +0 -0
  242. /package/cjs/plugins/{chartTypes.d.ts → chartModules.d.ts} +0 -0
  243. /package/es/{chartType.d.ts → chartModule.d.ts} +0 -0
  244. /package/es/layout/{pivot-chart → chart-helper}/get-axis-config.d.ts +0 -0
  245. /package/es/plugins/{chartTypes.d.ts → chartModules.d.ts} +0 -0
@@ -29,5 +29,7 @@ export interface TableEvents {
29
29
  LEGEND_ITEM_CLICK: 'legend_item_click';
30
30
  LEGEND_ITEM_HOVER: 'legend_item_hover';
31
31
  LEGEND_ITEM_UNHOVER: 'legend_item_unHover';
32
+ MOUSEENTER_AXIS: 'mouseenter_axis';
33
+ MOUSELEAVE_AXIS: 'mouseleave_axis';
32
34
  }
33
35
  export declare const TABLE_EVENT_TYPE: TableEvents;
@@ -28,6 +28,8 @@ export const TABLE_EVENT_TYPE = {
28
28
  ICON_CLICK: "icon_click",
29
29
  LEGEND_ITEM_CLICK: "legend_item_click",
30
30
  LEGEND_ITEM_HOVER: "legend_item_hover",
31
- LEGEND_ITEM_UNHOVER: "legend_item_unHover"
31
+ LEGEND_ITEM_UNHOVER: "legend_item_unHover",
32
+ MOUSEENTER_AXIS: "mouseenter_axis",
33
+ MOUSELEAVE_AXIS: "mouseleave_axis"
32
34
  };
33
35
  //# sourceMappingURL=TABLE_EVENT_TYPE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["core/TABLE_EVENT_TYPE.ts"],"names":[],"mappings":"AAsHA,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;IAC9B,iBAAiB,EAAE,mBAAmB;IACtC,sBAAsB,EAAE,wBAAwB;IAChD,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,MAAM,EAAE,QAAQ;IAChB,kBAAkB,EAAE,oBAAoB;IACxC,sBAAsB,EAAE,wBAAwB;IAChD,eAAe,EAAE,iBAAiB;IAElC,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAE1C,2BAA2B,EAAE,6BAA6B;IAE1D,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IAEtB,UAAU,EAAE,YAAY;IAExB,iBAAiB,EAAE,mBAAmB;IACtC,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;CAC5B,CAAC","file":"TABLE_EVENT_TYPE.js","sourcesContent":["export interface TableEvents {\n /**\n * 鼠标点击单元格事件\n */\n CLICK_CELL: 'click_cell';\n /**\n * 鼠标双击单元格事件\n */\n DBLCLICK_CELL: 'dblclick_cell';\n /**\n * 单元格上鼠标按下事件\n */\n MOUSEDOWN_CELL: 'mousedown_cell';\n /**\n * 单元格鼠标松开事件\n */\n MOUSEUP_CELL: 'mouseup_cell';\n\n /**\n * 单元格选中状态改变事件\n */\n SELECTED_CELL: 'selected_cell';\n /**\n * 键盘按下事件\n */\n KEYDOWN: 'keydown';\n /**\n * 鼠标进入表格事件\n */\n MOUSEENTER_TABLE: 'mouseenter_table';\n /**\n * 鼠标离开表格事件\n */\n MOUSELEAVE_TABLE: 'mouseleave_table';\n /**\n * 鼠标在某个单元格上移动事件\n */\n MOUSEMOVE_CELL: 'mousemove_cell';\n /**\n * 鼠标进入单元格事件\n */\n MOUSEENTER_CELL: 'mouseenter_cell';\n /**\n * 鼠标离开单元格事件\n */\n MOUSELEAVE_CELL: 'mouseleave_cell';\n /**\n * 单元格右键事件\n */\n CONTEXTMENU_CELL: 'contextmenu_cell';\n /**\n * 列宽调整事件\n */\n RESIZE_COLUMN: 'resize_column';\n /**\n * 列宽调整结束事件\n */\n RESIZE_COLUMN_END: 'resize_column_end';\n /**\n * 拖拽表头移动位置的事件\n */\n CHANGE_HEADER_POSITION: 'change_header_position';\n /**\n * 点击排序图标事件\n */\n SORT_CLICK: 'sort_click';\n /**\n * 点击固定列图标 冻结或者解冻事件\n */\n FREEZE_CLICK: 'freeze_click';\n /**\n * 滚动表格事件\n */\n SCROLL: 'scroll';\n\n /**\n * 点击下拉菜单图标事件\n */\n DROPDOWNMENU_CLICK: 'dropdownmenu_click';\n /**\n * 鼠标经过迷你图标记事件\n */\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol';\n\n /**\n * 拖拽框选单元格鼠标松开事件\n */\n DRAG_SELECT_END: 'drag_select_end';\n\n /**\n * 点击下拉菜单按钮\n */\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click';\n /**\n * 清空下拉菜单事件(菜单显示时点击其他区域)\n */\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear';\n\n /**\n * 树形结构展开收起的点击事件\n */\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change';\n\n SHOW_MENU: 'show_menu';\n HIDE_MENU: 'hide_menu';\n /**\n * icon图标点击事件\n */\n ICON_CLICK: 'icon_click';\n\n // legend component\n LEGEND_ITEM_CLICK: 'legend_item_click';\n LEGEND_ITEM_HOVER: 'legend_item_hover';\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover';\n}\n/**\n * Table event types\n */\nexport const TABLE_EVENT_TYPE: TableEvents = {\n CLICK_CELL: 'click_cell',\n DBLCLICK_CELL: 'dblclick_cell',\n MOUSEDOWN_CELL: 'mousedown_cell',\n MOUSEUP_CELL: 'mouseup_cell',\n SELECTED_CELL: 'selected_cell',\n KEYDOWN: 'keydown',\n MOUSEENTER_TABLE: 'mouseenter_table',\n MOUSELEAVE_TABLE: 'mouseleave_table',\n MOUSEMOVE_CELL: 'mousemove_cell',\n MOUSEENTER_CELL: 'mouseenter_cell',\n MOUSELEAVE_CELL: 'mouseleave_cell',\n CONTEXTMENU_CELL: 'contextmenu_cell',\n RESIZE_COLUMN: 'resize_column',\n RESIZE_COLUMN_END: 'resize_column_end',\n CHANGE_HEADER_POSITION: 'change_header_position',\n SORT_CLICK: 'sort_click',\n FREEZE_CLICK: 'freeze_click',\n SCROLL: 'scroll',\n DROPDOWNMENU_CLICK: 'dropdownmenu_click',\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol',\n DRAG_SELECT_END: 'drag_select_end',\n\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click', // 点击下拉菜单按钮\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear', // 清空下拉菜单事件(菜单显示时点击其他区域)\n\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change', //树形结构展开收起的点击事件\n\n SHOW_MENU: 'show_menu',\n HIDE_MENU: 'hide_menu',\n\n ICON_CLICK: 'icon_click',\n\n LEGEND_ITEM_CLICK: 'legend_item_click',\n LEGEND_ITEM_HOVER: 'legend_item_hover',\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover'\n} as TableEvents;\n"]}
1
+ {"version":3,"sources":["core/TABLE_EVENT_TYPE.ts"],"names":[],"mappings":"AAyHA,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;IAC9B,iBAAiB,EAAE,mBAAmB;IACtC,sBAAsB,EAAE,wBAAwB;IAChD,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,MAAM,EAAE,QAAQ;IAChB,kBAAkB,EAAE,oBAAoB;IACxC,sBAAsB,EAAE,wBAAwB;IAChD,eAAe,EAAE,iBAAiB;IAElC,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAE1C,2BAA2B,EAAE,6BAA6B;IAE1D,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IAEtB,UAAU,EAAE,YAAY;IAExB,iBAAiB,EAAE,mBAAmB;IACtC,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAE1C,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;CACpB,CAAC","file":"TABLE_EVENT_TYPE.js","sourcesContent":["export interface TableEvents {\n /**\n * 鼠标点击单元格事件\n */\n CLICK_CELL: 'click_cell';\n /**\n * 鼠标双击单元格事件\n */\n DBLCLICK_CELL: 'dblclick_cell';\n /**\n * 单元格上鼠标按下事件\n */\n MOUSEDOWN_CELL: 'mousedown_cell';\n /**\n * 单元格鼠标松开事件\n */\n MOUSEUP_CELL: 'mouseup_cell';\n\n /**\n * 单元格选中状态改变事件\n */\n SELECTED_CELL: 'selected_cell';\n /**\n * 键盘按下事件\n */\n KEYDOWN: 'keydown';\n /**\n * 鼠标进入表格事件\n */\n MOUSEENTER_TABLE: 'mouseenter_table';\n /**\n * 鼠标离开表格事件\n */\n MOUSELEAVE_TABLE: 'mouseleave_table';\n /**\n * 鼠标在某个单元格上移动事件\n */\n MOUSEMOVE_CELL: 'mousemove_cell';\n /**\n * 鼠标进入单元格事件\n */\n MOUSEENTER_CELL: 'mouseenter_cell';\n /**\n * 鼠标离开单元格事件\n */\n MOUSELEAVE_CELL: 'mouseleave_cell';\n /**\n * 单元格右键事件\n */\n CONTEXTMENU_CELL: 'contextmenu_cell';\n /**\n * 列宽调整事件\n */\n RESIZE_COLUMN: 'resize_column';\n /**\n * 列宽调整结束事件\n */\n RESIZE_COLUMN_END: 'resize_column_end';\n /**\n * 拖拽表头移动位置的事件\n */\n CHANGE_HEADER_POSITION: 'change_header_position';\n /**\n * 点击排序图标事件\n */\n SORT_CLICK: 'sort_click';\n /**\n * 点击固定列图标 冻结或者解冻事件\n */\n FREEZE_CLICK: 'freeze_click';\n /**\n * 滚动表格事件\n */\n SCROLL: 'scroll';\n\n /**\n * 点击下拉菜单图标事件\n */\n DROPDOWNMENU_CLICK: 'dropdownmenu_click';\n /**\n * 鼠标经过迷你图标记事件\n */\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol';\n\n /**\n * 拖拽框选单元格鼠标松开事件\n */\n DRAG_SELECT_END: 'drag_select_end';\n\n /**\n * 点击下拉菜单按钮\n */\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click';\n /**\n * 清空下拉菜单事件(菜单显示时点击其他区域)\n */\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear';\n\n /**\n * 树形结构展开收起的点击事件\n */\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change';\n\n SHOW_MENU: 'show_menu';\n HIDE_MENU: 'hide_menu';\n /**\n * icon图标点击事件\n */\n ICON_CLICK: 'icon_click';\n\n // legend component\n LEGEND_ITEM_CLICK: 'legend_item_click';\n LEGEND_ITEM_HOVER: 'legend_item_hover';\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover';\n\n MOUSEENTER_AXIS: 'mouseenter_axis';\n MOUSELEAVE_AXIS: 'mouseleave_axis';\n}\n/**\n * Table event types\n */\nexport const TABLE_EVENT_TYPE: TableEvents = {\n CLICK_CELL: 'click_cell',\n DBLCLICK_CELL: 'dblclick_cell',\n MOUSEDOWN_CELL: 'mousedown_cell',\n MOUSEUP_CELL: 'mouseup_cell',\n SELECTED_CELL: 'selected_cell',\n KEYDOWN: 'keydown',\n MOUSEENTER_TABLE: 'mouseenter_table',\n MOUSELEAVE_TABLE: 'mouseleave_table',\n MOUSEMOVE_CELL: 'mousemove_cell',\n MOUSEENTER_CELL: 'mouseenter_cell',\n MOUSELEAVE_CELL: 'mouseleave_cell',\n CONTEXTMENU_CELL: 'contextmenu_cell',\n RESIZE_COLUMN: 'resize_column',\n RESIZE_COLUMN_END: 'resize_column_end',\n CHANGE_HEADER_POSITION: 'change_header_position',\n SORT_CLICK: 'sort_click',\n FREEZE_CLICK: 'freeze_click',\n SCROLL: 'scroll',\n DROPDOWNMENU_CLICK: 'dropdownmenu_click',\n MOUSEOVER_CHART_SYMBOL: 'mouseover_chart_symbol',\n DRAG_SELECT_END: 'drag_select_end',\n\n DROPDOWN_ICON_CLICK: 'dropdown_icon_click', // 点击下拉菜单按钮\n DROPDOWN_MENU_CLEAR: 'dropdown_menu_clear', // 清空下拉菜单事件(菜单显示时点击其他区域)\n\n TREE_HIERARCHY_STATE_CHANGE: 'tree_hierarchy_state_change', //树形结构展开收起的点击事件\n\n SHOW_MENU: 'show_menu',\n HIDE_MENU: 'hide_menu',\n\n ICON_CLICK: 'icon_click',\n\n LEGEND_ITEM_CLICK: 'legend_item_click',\n LEGEND_ITEM_HOVER: 'legend_item_hover',\n LEGEND_ITEM_UNHOVER: 'legend_item_unHover',\n\n MOUSEENTER_AXIS: 'mouseenter_axis',\n MOUSELEAVE_AXIS: 'mouseleave_axis'\n} as TableEvents;\n"]}
@@ -0,0 +1,60 @@
1
+ import type { FilterRules, IDataConfig, SortRule, AggregationRules, SortRules, DerivedFieldRules, Totals, MappingRules, IHeaderTreeDefine } from '../ts-types';
2
+ import type { Aggregator } from './statistics-helper';
3
+ import { typeSort } from './statistics-helper';
4
+ export declare class DatasetForPivotTable {
5
+ dataConfig: IDataConfig;
6
+ records: any[];
7
+ tree: Record<string, Record<string, Aggregator[]>>;
8
+ private colFlatKeys;
9
+ private rowFlatKeys;
10
+ colKeys: string[][];
11
+ rowKeys: string[][];
12
+ rowKeysPath: string[][];
13
+ colKeysPath: string[][];
14
+ rowOrder: string;
15
+ colOrder: string;
16
+ sorted: boolean;
17
+ sortRules: SortRules;
18
+ filterRules: FilterRules;
19
+ aggregationRules: AggregationRules;
20
+ derivedFieldRules: DerivedFieldRules;
21
+ mappingRules: MappingRules;
22
+ totals: Totals;
23
+ indicatorStatistics: {
24
+ max: Aggregator;
25
+ min: Aggregator;
26
+ total: Aggregator;
27
+ }[];
28
+ aggregators: {
29
+ [key: string]: {
30
+ new (dimension: string | string[], formatFun?: any, isRecord?: boolean): Aggregator;
31
+ };
32
+ };
33
+ stringJoinChar: string;
34
+ private rowsIsTotal;
35
+ private colsIsTotal;
36
+ private colGrandTotalLabel;
37
+ private colSubTotalLabel;
38
+ private rowGrandTotalLabel;
39
+ private rowSubTotalLabel;
40
+ rows: string[];
41
+ columns: string[];
42
+ indicatorKeys: string[];
43
+ constructor(dataConfig: IDataConfig, rows: string[], columns: string[], indicators: string[], records: any[], customColTree?: IHeaderTreeDefine[], customRowTree?: IHeaderTreeDefine[]);
44
+ registerAggregator(type: string, aggregator: any): void;
45
+ registerAggregators(): void;
46
+ setRecords(records: any[]): void;
47
+ processRecords(): void;
48
+ filterRecord(record: any): boolean;
49
+ processRecord(record: any): void;
50
+ updateSortRules(sortRules: SortRules): void;
51
+ private getAggregatorRule;
52
+ getAggregator(rowKey: string[] | string, colKey: string[] | string, indicator: string): Aggregator;
53
+ sortKeys(): void;
54
+ arrSort(fieldArr: string[], isRow: boolean): (a: string[], b: string[]) => number;
55
+ getSort(sortRule: SortRule, isSortRow: boolean): typeof typeSort;
56
+ totalStatistics(): void;
57
+ private ArrToTree;
58
+ private TreeToArr;
59
+ private TreeToArr2;
60
+ }
@@ -0,0 +1,378 @@
1
+ import { AggregationType, SortType } from "../ts-types";
2
+
3
+ import { AvgAggregator, CountAggregator, MaxAggregator, MinAggregator, SumAggregator, naturalSort, sortBy, typeSort } from "./statistics-helper";
4
+
5
+ export class DatasetForPivotTable {
6
+ constructor(dataConfig, rows, columns, indicators, records, customColTree, customRowTree) {
7
+ 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, _0, _1, _2;
8
+ this.tree = {}, this.colFlatKeys = {}, this.rowFlatKeys = {}, this.colKeys = [],
9
+ this.rowKeys = [], this.rowOrder = "key_a_to_z", this.colOrder = "key_a_to_z", this.sorted = !1,
10
+ this.indicatorStatistics = [], this.aggregators = {}, this.stringJoinChar = String.fromCharCode(0),
11
+ this.rowsIsTotal = [], this.colsIsTotal = [], this.registerAggregators(), this.dataConfig = dataConfig,
12
+ this.sortRules = null === (_a = this.dataConfig) || void 0 === _a ? void 0 : _a.sortRules,
13
+ this.aggregationRules = null === (_b = this.dataConfig) || void 0 === _b ? void 0 : _b.aggregationRules,
14
+ this.derivedFieldRules = null === (_c = this.dataConfig) || void 0 === _c ? void 0 : _c.derivedFieldRules,
15
+ this.mappingRules = null === (_d = this.dataConfig) || void 0 === _d ? void 0 : _d.mappingRules,
16
+ this.totals = null === (_e = this.dataConfig) || void 0 === _e ? void 0 : _e.totals,
17
+ this.rows = rows, this.columns = columns, this.indicatorKeys = indicators, this.colGrandTotalLabel = null !== (_h = null === (_g = null === (_f = this.totals) || void 0 === _f ? void 0 : _f.column) || void 0 === _g ? void 0 : _g.grandTotalLabel) && void 0 !== _h ? _h : "总计",
18
+ this.colSubTotalLabel = null !== (_l = null === (_k = null === (_j = this.totals) || void 0 === _j ? void 0 : _j.column) || void 0 === _k ? void 0 : _k.subTotalLabel) && void 0 !== _l ? _l : "小计",
19
+ this.rowGrandTotalLabel = null !== (_p = null === (_o = null === (_m = this.totals) || void 0 === _m ? void 0 : _m.row) || void 0 === _o ? void 0 : _o.grandTotalLabel) && void 0 !== _p ? _p : "总计",
20
+ this.rowSubTotalLabel = null !== (_s = null === (_r = null === (_q = this.totals) || void 0 === _q ? void 0 : _q.row) || void 0 === _r ? void 0 : _r.subTotalLabel) && void 0 !== _s ? _s : "小计",
21
+ this.rowsIsTotal = new Array(this.rows.length).fill(!1), this.colsIsTotal = new Array(this.columns.length).fill(!1);
22
+ for (let i = 0, len = null === (_v = null === (_u = null === (_t = this.totals) || void 0 === _t ? void 0 : _t.row) || void 0 === _u ? void 0 : _u.subTotalsDimensions) || void 0 === _v ? void 0 : _v.length; i < len; i++) {
23
+ const dimension = this.totals.row.subTotalsDimensions[i], dimensionIndex = this.rows.indexOf(dimension);
24
+ this.rowsIsTotal[dimensionIndex] = !0;
25
+ }
26
+ for (let i = 0, len = null === (_y = null === (_x = null === (_w = this.totals) || void 0 === _w ? void 0 : _w.column) || void 0 === _x ? void 0 : _x.subTotalsDimensions) || void 0 === _y ? void 0 : _y.length; i < len; i++) {
27
+ const dimension = this.totals.column.subTotalsDimensions[i], dimensionIndex = this.columns.indexOf(dimension);
28
+ this.colsIsTotal[dimensionIndex] = !0;
29
+ }
30
+ if (records) {
31
+ this.records = records;
32
+ const t0 = "undefined" != typeof window ? window.performance.now() : 0;
33
+ this.setRecords(records);
34
+ const t1 = "undefined" != typeof window ? window.performance.now() : 0;
35
+ console.log("processRecords:", t1 - t0);
36
+ const t4 = "undefined" != typeof window ? window.performance.now() : 0;
37
+ this.totalStatistics();
38
+ const t5 = "undefined" != typeof window ? window.performance.now() : 0;
39
+ console.log("totalStatistics:", t5 - t4);
40
+ const t2 = "undefined" != typeof window ? window.performance.now() : 0;
41
+ this.sortKeys();
42
+ const t3 = "undefined" != typeof window ? window.performance.now() : 0;
43
+ console.log("sortKeys:", t3 - t2);
44
+ const t7 = "undefined" != typeof window ? window.performance.now() : 0;
45
+ this.rowKeysPath = customRowTree ? this.TreeToArr2(customRowTree) : this.TreeToArr(this.ArrToTree(this.rowKeys, this.rowsIsTotal, (null === (_0 = null === (_z = null == this ? void 0 : this.totals) || void 0 === _z ? void 0 : _z.row) || void 0 === _0 ? void 0 : _0.showGrandTotals) || 0 === this.columns.length, this.rowGrandTotalLabel, this.rowSubTotalLabel)),
46
+ this.colKeysPath = customColTree ? this.TreeToArr2(customColTree) : this.TreeToArr(this.ArrToTree(this.colKeys, this.colsIsTotal, (null === (_2 = null === (_1 = this.totals) || void 0 === _1 ? void 0 : _1.column) || void 0 === _2 ? void 0 : _2.showGrandTotals) || 0 === this.rows.length, this.colGrandTotalLabel, this.colSubTotalLabel));
47
+ const t8 = "undefined" != typeof window ? window.performance.now() : 0;
48
+ console.log("TreeToArr:", t8 - t7);
49
+ }
50
+ delete this.rowFlatKeys, delete this.colFlatKeys;
51
+ }
52
+ registerAggregator(type, aggregator) {
53
+ this.aggregators[type] = aggregator;
54
+ }
55
+ registerAggregators() {
56
+ this.registerAggregator(AggregationType.SUM, SumAggregator), this.registerAggregator(AggregationType.COUNT, CountAggregator),
57
+ this.registerAggregator(AggregationType.MAX, MaxAggregator), this.registerAggregator(AggregationType.MIN, MinAggregator),
58
+ this.registerAggregator(AggregationType.AVG, AvgAggregator);
59
+ }
60
+ setRecords(records) {
61
+ this.processRecords();
62
+ }
63
+ processRecords() {
64
+ for (let i = 0, len = this.records.length; i < len; i++) {
65
+ const record = this.records[i];
66
+ this.filterRecord(record) && this.processRecord(record);
67
+ }
68
+ }
69
+ filterRecord(record) {
70
+ var _a, _b, _c, _d;
71
+ let isReserved = !0;
72
+ for (let i = 0; i < (null === (_b = null === (_a = this.dataConfig) || void 0 === _a ? void 0 : _a.filterRules) || void 0 === _b ? void 0 : _b.length); i++) {
73
+ const filterRule = null === (_c = this.dataConfig) || void 0 === _c ? void 0 : _c.filterRules[i];
74
+ if (!(null === (_d = filterRule.filterFunc) || void 0 === _d ? void 0 : _d.call(filterRule, record))) {
75
+ isReserved = !1;
76
+ break;
77
+ }
78
+ }
79
+ return isReserved;
80
+ }
81
+ processRecord(record) {
82
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
83
+ null === (_a = this.derivedFieldRules) || void 0 === _a || _a.forEach(((derivedFieldRule, i) => {
84
+ record[derivedFieldRule.fieldName] = derivedFieldRule.derivedFunc(record);
85
+ }));
86
+ const colKey = [], rowKey = [];
87
+ for (let l = 0, len1 = this.rows.length; l < len1; l++) {
88
+ const rowAttr = this.rows[l];
89
+ rowKey.push(record[rowAttr]);
90
+ }
91
+ for (let n = 0, len2 = this.columns.length; n < len2; n++) {
92
+ const colAttr = this.columns[n];
93
+ colKey.push(record[colAttr]);
94
+ }
95
+ const flatRowKey = rowKey.join(this.stringJoinChar), flatColKey = colKey.join(this.stringJoinChar);
96
+ if (0 !== rowKey.length && (this.rowFlatKeys[flatRowKey] || (this.rowKeys.push(rowKey),
97
+ this.rowFlatKeys[flatRowKey] = 1)), 0 !== colKey.length && (this.colFlatKeys[flatColKey] || (this.colKeys.push(colKey),
98
+ this.colFlatKeys[flatColKey] = 1)), 0 !== colKey.length || 0 !== rowKey.length) {
99
+ this.tree[flatRowKey] || (this.tree[flatRowKey] = {}), (null === (_b = this.tree[flatRowKey]) || void 0 === _b ? void 0 : _b[flatColKey]) || (this.tree[flatRowKey][flatColKey] = []);
100
+ for (let i = 0; i < this.indicatorKeys.length; i++) {
101
+ if (!(null === (_d = null === (_c = this.tree[flatRowKey]) || void 0 === _c ? void 0 : _c[flatColKey]) || void 0 === _d ? void 0 : _d[i])) {
102
+ const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);
103
+ this.tree[flatRowKey][flatColKey][i] = new this.aggregators[null !== (_e = null == aggRule ? void 0 : aggRule.aggregationType) && void 0 !== _e ? _e : AggregationType.SUM](null !== (_f = null == aggRule ? void 0 : aggRule.field) && void 0 !== _f ? _f : this.indicatorKeys[i], null == aggRule ? void 0 : aggRule.formatFun);
104
+ }
105
+ null === (_h = null === (_g = this.tree[flatRowKey]) || void 0 === _g ? void 0 : _g[flatColKey]) || void 0 === _h || _h[i].push(record);
106
+ }
107
+ }
108
+ if (this.mappingRules) for (let i = 0; i < this.indicatorKeys.length; i++) {
109
+ if (!this.indicatorStatistics[i]) {
110
+ const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);
111
+ this.indicatorStatistics[i] = {
112
+ max: new this.aggregators[AggregationType.MAX](this.indicatorKeys[i]),
113
+ min: new this.aggregators[AggregationType.MIN](this.indicatorKeys[i]),
114
+ total: new this.aggregators[null !== (_j = null == aggRule ? void 0 : aggRule.aggregationType) && void 0 !== _j ? _j : AggregationType.SUM](null !== (_k = null == aggRule ? void 0 : aggRule.field) && void 0 !== _k ? _k : this.indicatorKeys[i], null == aggRule ? void 0 : aggRule.formatFun)
115
+ };
116
+ }
117
+ this.indicatorStatistics[i].max.push(null === (_m = null === (_l = this.tree[flatRowKey]) || void 0 === _l ? void 0 : _l[flatColKey]) || void 0 === _m ? void 0 : _m[i].value()),
118
+ this.indicatorStatistics[i].min.push(null === (_p = null === (_o = this.tree[flatRowKey]) || void 0 === _o ? void 0 : _o[flatColKey]) || void 0 === _p ? void 0 : _p[i].value()),
119
+ this.indicatorStatistics[i].total.push(record);
120
+ }
121
+ }
122
+ updateSortRules(sortRules) {
123
+ var _a, _b, _c, _d;
124
+ this.sorted = !1, this.sortRules = sortRules, this.sortKeys(), this.rowKeysPath = this.TreeToArr(this.ArrToTree(this.rowKeys, this.rowsIsTotal, (null === (_b = null === (_a = null == this ? void 0 : this.totals) || void 0 === _a ? void 0 : _a.row) || void 0 === _b ? void 0 : _b.showGrandTotals) || 0 === this.columns.length, this.rowGrandTotalLabel, this.rowSubTotalLabel)),
125
+ this.colKeysPath = this.TreeToArr(this.ArrToTree(this.colKeys, this.colsIsTotal, (null === (_d = null === (_c = this.totals) || void 0 === _c ? void 0 : _c.column) || void 0 === _d ? void 0 : _d.showGrandTotals) || 0 === this.rows.length, this.colGrandTotalLabel, this.colSubTotalLabel));
126
+ }
127
+ getAggregatorRule(indicatorKey) {
128
+ var _a;
129
+ return null === (_a = this.aggregationRules) || void 0 === _a ? void 0 : _a.find(((value, index) => indicatorKey === value.indicatorKey));
130
+ }
131
+ getAggregator(rowKey = [], colKey = [], indicator) {
132
+ var _a, _b;
133
+ const indicatorIndex = this.indicatorKeys.indexOf(indicator);
134
+ let agg, flatRowKey, flatColKey;
135
+ return flatRowKey = "string" == typeof rowKey ? rowKey : rowKey.join(this.stringJoinChar),
136
+ flatColKey = "string" == typeof colKey ? colKey : colKey.join(this.stringJoinChar),
137
+ 0 === rowKey.length && 0 === colKey.length || (agg = null === (_b = null === (_a = this.tree[flatRowKey]) || void 0 === _a ? void 0 : _a[flatColKey]) || void 0 === _b ? void 0 : _b[indicatorIndex]),
138
+ agg || {
139
+ className: "",
140
+ push() {},
141
+ value: () => null,
142
+ formatValue: () => "",
143
+ reset() {}
144
+ };
145
+ }
146
+ sortKeys() {
147
+ const that = this;
148
+ if (!this.sorted) {
149
+ this.sorted = !0;
150
+ const getValue = function(rowKey, colKey) {
151
+ return that.getAggregator(rowKey, colKey, "").value();
152
+ };
153
+ switch (this.rowOrder) {
154
+ case "value_a_to_z":
155
+ this.rowKeys.sort((function(a, b) {
156
+ return naturalSort(getValue(a, []), getValue(b, []));
157
+ }));
158
+ break;
159
+
160
+ case "value_z_to_a":
161
+ this.rowKeys.sort((function(a, b) {
162
+ return -naturalSort(getValue(a, []), getValue(b, []));
163
+ }));
164
+ break;
165
+
166
+ default:
167
+ this.rowKeys.sort(this.arrSort(this.rows, !0));
168
+ }
169
+ switch (this.colOrder) {
170
+ case "value_a_to_z":
171
+ this.colKeys.sort((function(a, b) {
172
+ return naturalSort(getValue([], a), getValue([], b));
173
+ }));
174
+ break;
175
+
176
+ case "value_z_to_a":
177
+ this.colKeys.sort((function(a, b) {
178
+ return -naturalSort(getValue([], a), getValue([], b));
179
+ }));
180
+ break;
181
+
182
+ default:
183
+ const sortfun = this.arrSort(this.columns, !1);
184
+ this.colKeys.sort(sortfun);
185
+ }
186
+ }
187
+ }
188
+ arrSort(fieldArr, isRow) {
189
+ let field;
190
+ const that = this, sortersArr = function(_this) {
191
+ const results = [];
192
+ for (let l = 0, len1 = fieldArr.length; l < len1; l++) {
193
+ field = fieldArr[l];
194
+ let isHasSortRule = !1;
195
+ if (that.sortRules) for (let m = 0, len2 = that.sortRules.length; m < len2; m++) that.sortRules[m].sortField === field && (isHasSortRule = !0,
196
+ results.push({
197
+ field: field,
198
+ fieldIndex: l,
199
+ sortRule: that.sortRules[m],
200
+ func: that.getSort(that.sortRules[m], isRow)
201
+ }));
202
+ isHasSortRule || results.push({
203
+ field: field,
204
+ fieldIndex: l,
205
+ func: naturalSort
206
+ });
207
+ }
208
+ return results;
209
+ }.call(this);
210
+ return function(a, b) {
211
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
212
+ let comparison, sorter;
213
+ for (let i = 0; i < sortersArr.length; i++) {
214
+ if (sorter = sortersArr[i], null === (_a = sorter.sortRule) || void 0 === _a ? void 0 : _a.sortByIndicator) {
215
+ let aChanged = a, bChanged = b;
216
+ sorter.fieldIndex < fieldArr.length - 1 && (aChanged = a.slice(0, sorter.fieldIndex + 1),
217
+ aChanged.push(isRow ? null === (_c = null === (_b = that.totals) || void 0 === _b ? void 0 : _b.row) || void 0 === _c ? void 0 : _c.subTotalLabel : null === (_e = null === (_d = that.totals) || void 0 === _d ? void 0 : _d.column) || void 0 === _e ? void 0 : _e.subTotalLabel),
218
+ bChanged = b.slice(0, sorter.fieldIndex + 1), bChanged.push(isRow ? null === (_g = null === (_f = that.totals) || void 0 === _f ? void 0 : _f.row) || void 0 === _g ? void 0 : _g.subTotalLabel : null === (_j = null === (_h = that.totals) || void 0 === _h ? void 0 : _h.column) || void 0 === _j ? void 0 : _j.subTotalLabel)),
219
+ comparison = sorter.func(aChanged, bChanged);
220
+ } else comparison = sorter.func(a[sorter.fieldIndex], b[sorter.fieldIndex]);
221
+ if (0 !== comparison) return comparison * ((null === (_k = sorter.sortRule) || void 0 === _k ? void 0 : _k.sortType) === SortType.DESC ? -1 : 1);
222
+ }
223
+ return 0;
224
+ };
225
+ }
226
+ getSort(sortRule, isSortRow) {
227
+ const that = this;
228
+ return sortRule.sortByIndicator ? (a, b) => {
229
+ const getValue = function(rowKey, colKey) {
230
+ return rowKey.length < that.rows.length && rowKey[rowKey.length - 1] !== that.rowSubTotalLabel && rowKey[rowKey.length - 1] !== that.rowGrandTotalLabel && rowKey.push(that.rowSubTotalLabel),
231
+ colKey.length < that.columns.length && colKey[colKey.length - 1] !== that.colSubTotalLabel && colKey[colKey.length - 1] !== that.colGrandTotalLabel && colKey.push(that.colSubTotalLabel),
232
+ that.getAggregator(rowKey, colKey, sortRule.sortByIndicator).value();
233
+ };
234
+ return isSortRow ? naturalSort(getValue(a, sortRule.query), getValue(b, sortRule.query)) : naturalSort(getValue(sortRule.query, a), getValue(sortRule.query, b));
235
+ } : sortRule.sortBy ? sortBy(sortRule.sortBy) : sortRule.sortType ? typeSort : sortRule.sortFunc ? sortRule.sortFunc : naturalSort;
236
+ }
237
+ totalStatistics() {
238
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
239
+ const that = this;
240
+ if ((null === (_b = null === (_a = null == that ? void 0 : that.totals) || void 0 === _a ? void 0 : _a.column) || void 0 === _b ? void 0 : _b.showSubTotals) && (null === (_e = null === (_d = null === (_c = null == that ? void 0 : that.totals) || void 0 === _c ? void 0 : _c.column) || void 0 === _d ? void 0 : _d.subTotalsDimensions) || void 0 === _e ? void 0 : _e.length) >= 1 || (null === (_g = null === (_f = null == that ? void 0 : that.totals) || void 0 === _f ? void 0 : _f.row) || void 0 === _g ? void 0 : _g.showSubTotals) && (null === (_k = null === (_j = null === (_h = null == that ? void 0 : that.totals) || void 0 === _h ? void 0 : _h.row) || void 0 === _j ? void 0 : _j.subTotalsDimensions) || void 0 === _k ? void 0 : _k.length) >= 1 || (null === (_m = null === (_l = null == that ? void 0 : that.totals) || void 0 === _l ? void 0 : _l.column) || void 0 === _m ? void 0 : _m.showGrandTotals) || (null === (_p = null === (_o = null == that ? void 0 : that.totals) || void 0 === _o ? void 0 : _o.row) || void 0 === _p ? void 0 : _p.showGrandTotals) || 0 === that.rows.length || 0 === that.columns.length) {
241
+ const rowTotalKeys = [], colCompute = (flatRowKey, flatColKey) => {
242
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
243
+ const colKey = flatColKey.split(this.stringJoinChar);
244
+ for (let i = 0, len = null === (_c = null === (_b = null === (_a = that.totals) || void 0 === _a ? void 0 : _a.column) || void 0 === _b ? void 0 : _b.subTotalsDimensions) || void 0 === _c ? void 0 : _c.length; i < len; i++) {
245
+ const dimension = that.totals.column.subTotalsDimensions[i], dimensionIndex = that.columns.indexOf(dimension);
246
+ if (dimensionIndex >= 0) {
247
+ const colTotalKey = colKey.slice(0, dimensionIndex + 1);
248
+ colTotalKey.push(null !== (_f = null === (_e = null === (_d = that.totals) || void 0 === _d ? void 0 : _d.column) || void 0 === _e ? void 0 : _e.subTotalLabel) && void 0 !== _f ? _f : "小计");
249
+ const flatColTotalKey = colTotalKey.join(this.stringJoinChar);
250
+ this.tree[flatRowKey][flatColTotalKey] || (this.tree[flatRowKey][flatColTotalKey] = []);
251
+ for (let i = 0; i < this.indicatorKeys.length; i++) {
252
+ if (!this.tree[flatRowKey][flatColTotalKey][i]) {
253
+ const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);
254
+ this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[null !== (_g = null == aggRule ? void 0 : aggRule.aggregationType) && void 0 !== _g ? _g : AggregationType.SUM](null !== (_h = null == aggRule ? void 0 : aggRule.field) && void 0 !== _h ? _h : this.indicatorKeys[i], null == aggRule ? void 0 : aggRule.formatFun);
255
+ }
256
+ this.tree[flatRowKey][flatColTotalKey][i].push(null === (_k = null === (_j = that.tree[flatRowKey]) || void 0 === _j ? void 0 : _j[flatColKey]) || void 0 === _k ? void 0 : _k[i]);
257
+ }
258
+ }
259
+ }
260
+ if ((null === (_m = null === (_l = that.totals) || void 0 === _l ? void 0 : _l.column) || void 0 === _m ? void 0 : _m.showGrandTotals) || 0 === this.rows.length) {
261
+ const flatColTotalKey = that.colGrandTotalLabel;
262
+ this.tree[flatRowKey][flatColTotalKey] || (this.tree[flatRowKey][flatColTotalKey] = []);
263
+ for (let i = 0; i < this.indicatorKeys.length; i++) {
264
+ if (!this.tree[flatRowKey][flatColTotalKey][i]) {
265
+ const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);
266
+ this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[null !== (_o = null == aggRule ? void 0 : aggRule.aggregationType) && void 0 !== _o ? _o : AggregationType.SUM](null !== (_p = null == aggRule ? void 0 : aggRule.field) && void 0 !== _p ? _p : this.indicatorKeys[i], null == aggRule ? void 0 : aggRule.formatFun);
267
+ }
268
+ this.tree[flatRowKey][flatColTotalKey][i].push(null === (_r = null === (_q = that.tree[flatRowKey]) || void 0 === _q ? void 0 : _q[flatColKey]) || void 0 === _r ? void 0 : _r[i]);
269
+ }
270
+ }
271
+ };
272
+ Object.keys(that.tree).forEach((flatRowKey => {
273
+ const rowKey = flatRowKey.split(this.stringJoinChar);
274
+ Object.keys(that.tree[flatRowKey]).forEach((flatColKey => {
275
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
276
+ for (let i = 0, len = null === (_c = null === (_b = null === (_a = that.totals) || void 0 === _a ? void 0 : _a.row) || void 0 === _b ? void 0 : _b.subTotalsDimensions) || void 0 === _c ? void 0 : _c.length; i < len; i++) {
277
+ const dimension = that.totals.row.subTotalsDimensions[i], dimensionIndex = that.rows.indexOf(dimension);
278
+ if (dimensionIndex >= 0) {
279
+ const rowTotalKey = rowKey.slice(0, dimensionIndex + 1);
280
+ rowTotalKey.push(null !== (_f = null === (_e = null === (_d = that.totals) || void 0 === _d ? void 0 : _d.row) || void 0 === _e ? void 0 : _e.subTotalLabel) && void 0 !== _f ? _f : "小计");
281
+ const flatRowTotalKey = rowTotalKey.join(this.stringJoinChar);
282
+ if (this.tree[flatRowTotalKey] || (this.tree[flatRowTotalKey] = {}, rowTotalKeys.push(flatRowTotalKey)),
283
+ !this.tree[flatRowTotalKey][flatColKey]) {
284
+ this.tree[flatRowTotalKey][flatColKey] = [];
285
+ for (let i = 0; i < this.indicatorKeys.length; i++) {
286
+ if (!this.tree[flatRowTotalKey][flatColKey][i]) {
287
+ const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);
288
+ this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[null !== (_g = null == aggRule ? void 0 : aggRule.aggregationType) && void 0 !== _g ? _g : AggregationType.SUM](null !== (_h = null == aggRule ? void 0 : aggRule.field) && void 0 !== _h ? _h : this.indicatorKeys[i], null == aggRule ? void 0 : aggRule.formatFun);
289
+ }
290
+ this.tree[flatRowTotalKey][flatColKey][i].push(null === (_k = null === (_j = that.tree[flatRowKey]) || void 0 === _j ? void 0 : _j[flatColKey]) || void 0 === _k ? void 0 : _k[i]);
291
+ }
292
+ }
293
+ }
294
+ if ((null === (_m = null === (_l = that.totals) || void 0 === _l ? void 0 : _l.row) || void 0 === _m ? void 0 : _m.showGrandTotals) || 0 === this.columns.length) {
295
+ const flatRowTotalKey = that.rowGrandTotalLabel;
296
+ this.tree[flatRowTotalKey] || (this.tree[flatRowTotalKey] = {}, rowTotalKeys.push(flatRowTotalKey)),
297
+ this.tree[flatRowTotalKey][flatColKey] || (this.tree[flatRowTotalKey][flatColKey] = []);
298
+ for (let i = 0; i < this.indicatorKeys.length; i++) {
299
+ if (!this.tree[flatRowTotalKey][flatColKey][i]) {
300
+ const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);
301
+ this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[null !== (_o = null == aggRule ? void 0 : aggRule.aggregationType) && void 0 !== _o ? _o : AggregationType.SUM](null !== (_p = null == aggRule ? void 0 : aggRule.field) && void 0 !== _p ? _p : this.indicatorKeys[i], null == aggRule ? void 0 : aggRule.formatFun);
302
+ }
303
+ this.tree[flatRowTotalKey][flatColKey][i].push(null === (_r = null === (_q = that.tree[flatRowKey]) || void 0 === _q ? void 0 : _q[flatColKey]) || void 0 === _r ? void 0 : _r[i]);
304
+ }
305
+ }
306
+ colCompute(flatRowKey, flatColKey);
307
+ }
308
+ }));
309
+ })), rowTotalKeys.forEach((flatRowKey => {
310
+ Object.keys(that.tree[flatRowKey]).forEach((flatColKey => {
311
+ colCompute(flatRowKey, flatColKey);
312
+ }));
313
+ }));
314
+ }
315
+ }
316
+ ArrToTree(arr, subTotalFlags, isGrandTotal, grandTotalLabel, subTotalLabel) {
317
+ const result = [], concatStr = this.stringJoinChar, map = new Map;
318
+ if (arr.forEach((item => function(list) {
319
+ const path = [];
320
+ let node;
321
+ list.forEach(((value, index) => {
322
+ path.push(value);
323
+ const flatKey = path.join(concatStr);
324
+ let item = map.get(flatKey);
325
+ if (!item) {
326
+ if (item = {
327
+ id: flatKey,
328
+ children: []
329
+ }, subTotalFlags[index]) {
330
+ let curChild = item.children;
331
+ for (let i = index; i < list.length - 1; i++) {
332
+ const totalChild = {
333
+ id: `${flatKey}${concatStr}${subTotalLabel}`,
334
+ children: []
335
+ };
336
+ curChild.push(totalChild), curChild = totalChild.children;
337
+ }
338
+ }
339
+ map.set(flatKey, item), node ? subTotalFlags[index - 1] ? node.children.splice(node.children.length - 1, 0, item) : node.children.push(item) : result.push(item);
340
+ }
341
+ node = item;
342
+ }));
343
+ }(item))), isGrandTotal) {
344
+ const node = {
345
+ id: grandTotalLabel,
346
+ children: []
347
+ };
348
+ let curChild = node.children;
349
+ for (let i = 1; i < subTotalFlags.length; i++) {
350
+ const totalChild = {
351
+ id: grandTotalLabel,
352
+ children: []
353
+ };
354
+ curChild.push(totalChild), curChild = totalChild.children;
355
+ }
356
+ result.push(node);
357
+ }
358
+ return result;
359
+ }
360
+ TreeToArr(tree) {
361
+ const result = [];
362
+ function getPath(node, arr) {
363
+ var _a;
364
+ arr.push(node.id), node.children.length > 0 ? null === (_a = node.children) || void 0 === _a || _a.forEach((childItem => getPath(childItem, [ ...arr ]))) : result.push(arr);
365
+ }
366
+ return tree.forEach((treeNode => getPath(treeNode, []))), result;
367
+ }
368
+ TreeToArr2(tree) {
369
+ const result = [];
370
+ function getPath(node, arr) {
371
+ var _a, _b;
372
+ arr.push(arr.length > 0 ? [ arr[arr.length - 1], node.value ].join(String.fromCharCode(0)) : node.value),
373
+ (null === (_a = node.children) || void 0 === _a ? void 0 : _a.length) > 0 ? null === (_b = node.children) || void 0 === _b || _b.forEach((childItem => getPath(childItem, [ ...arr ]))) : result.push(arr);
374
+ }
375
+ return tree.forEach((treeNode => getPath(treeNode, []))), result;
376
+ }
377
+ }
378
+ //# sourceMappingURL=dataset-pivot-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["dataset/dataset-pivot-table.ts"],"names":[],"mappings":"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","file":"dataset-pivot-table.js","sourcesContent":["import type {\n FilterRules,\n IDataConfig,\n SortRule,\n AggregationRules,\n AggregationRule,\n SortRules,\n DerivedFieldRule,\n DerivedFieldRules,\n SortByIndicatorRule,\n SortByRule,\n SortTypeRule,\n SortFuncRule,\n Totals,\n MappingRules,\n SortOrder,\n IHeaderTreeDefine\n} from '../ts-types';\nimport { AggregationType, SortType } from '../ts-types';\nimport type { Aggregator } from './statistics-helper';\nimport {\n AvgAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n SumAggregator,\n naturalSort,\n sortBy,\n typeSort\n} from './statistics-helper';\n/**\n * 数据处理模块\n */\nexport class DatasetForPivotTable {\n /**\n * 用户配置\n */\n dataConfig: IDataConfig;\n /**\n * 明细数据\n */\n records: any[];\n /**\n * 树形节点,最后的子节点对应到body部分的每个单元格 树结构: 行-列-单元格\n */\n tree: Record<string, Record<string, Aggregator[]>> = {};\n private colFlatKeys = {};\n private rowFlatKeys = {};\n\n //列表头的每列对应的表头键值\n colKeys: string[][] = [];\n //行表头的每行对应的表头键值\n rowKeys: string[][] = [];\n /**\n * 对应dataset中的rowKeys,行表头的每行表头键值,包含小计总计\n */\n rowKeysPath: string[][];\n /**\n * 对应dataset中的colKeys,列表头的每列表头键值,包含小计总计\n */\n colKeysPath: string[][];\n // allTotal: SumAggregator;\n rowOrder = 'key_a_to_z';\n colOrder = 'key_a_to_z';\n //是否已排序\n sorted = false;\n //排序规则\n sortRules: SortRules;\n //过滤规则\n filterRules: FilterRules;\n //聚合规则\n aggregationRules: AggregationRules;\n //派生字段规则\n derivedFieldRules: DerivedFieldRules;\n mappingRules: MappingRules;\n //汇总配置\n totals: Totals;\n //全局统计各指标的极值\n indicatorStatistics: { max: Aggregator; min: Aggregator; total: Aggregator }[] = [];\n\n aggregators: {\n [key: string]: { new (dimension: string | string[], formatFun?: any, isRecord?: boolean): Aggregator };\n } = {};\n\n stringJoinChar = String.fromCharCode(0);\n //缓存rows对应每个值是否为汇总字段\n private rowsIsTotal: boolean[] = [];\n private colsIsTotal: boolean[] = [];\n private colGrandTotalLabel: string;\n private colSubTotalLabel: string;\n private rowGrandTotalLabel: string;\n private rowSubTotalLabel: string;\n rows: string[];\n columns: string[];\n indicatorKeys: string[];\n constructor(\n dataConfig: IDataConfig,\n rows: string[],\n columns: string[],\n indicators: string[],\n records: any[],\n customColTree?: IHeaderTreeDefine[],\n customRowTree?: IHeaderTreeDefine[]\n ) {\n this.registerAggregators();\n this.dataConfig = dataConfig;\n // this.allTotal = new SumAggregator(this.indicators[0]);\n this.sortRules = this.dataConfig?.sortRules;\n this.aggregationRules = this.dataConfig?.aggregationRules;\n this.derivedFieldRules = this.dataConfig?.derivedFieldRules;\n this.mappingRules = this.dataConfig?.mappingRules;\n this.totals = this.dataConfig?.totals;\n this.rows = rows;\n this.columns = columns;\n this.indicatorKeys = indicators;\n this.colGrandTotalLabel = this.totals?.column?.grandTotalLabel ?? '总计';\n this.colSubTotalLabel = this.totals?.column?.subTotalLabel ?? '小计';\n this.rowGrandTotalLabel = this.totals?.row?.grandTotalLabel ?? '总计';\n this.rowSubTotalLabel = this.totals?.row?.subTotalLabel ?? '小计';\n // for (let i = 0; i < this.indicators.length; i++) {\n // this.indicatorStatistics.push({\n // max: new this.aggregators[AggregationType.MAX](this.indicators[i]),\n // min: new this.aggregators[AggregationType.MIN](this.indicators[i]),\n // total: new this.aggregators[AggregationType.SUM](this.indicators[i]),\n // });\n // }\n this.rowsIsTotal = new Array(this.rows.length).fill(false);\n this.colsIsTotal = new Array(this.columns.length).fill(false);\n for (let i = 0, len = this.totals?.row?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = this.totals.row.subTotalsDimensions[i];\n const dimensionIndex = this.rows.indexOf(dimension);\n this.rowsIsTotal[dimensionIndex] = true;\n }\n for (let i = 0, len = this.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = this.totals.column.subTotalsDimensions[i];\n const dimensionIndex = this.columns.indexOf(dimension);\n this.colsIsTotal[dimensionIndex] = true;\n }\n if (records) {\n //处理数据\n this.records = records;\n const t0 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.setRecords(records);\n const t1 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('processRecords:', t1 - t0);\n\n // 处理汇总\n const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.totalStatistics();\n const t5 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('totalStatistics:', t5 - t4);\n\n //对维度排序\n const t2 = typeof window !== 'undefined' ? window.performance.now() : 0;\n this.sortKeys();\n const t3 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('sortKeys:', t3 - t2);\n //转为树形\n // const t4 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // this.madeTree(this.rowKeys);\n // const t41 = typeof window !== 'undefined' ? window.performance.now() : 0;\n // console.log('madeTree:', t41 - t4);\n\n const t7 = typeof window !== 'undefined' ? window.performance.now() : 0;\n if (customRowTree) {\n this.rowKeysPath = this.TreeToArr2(customRowTree);\n } else {\n this.rowKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.rowKeys,\n this.rowsIsTotal,\n this?.totals?.row?.showGrandTotals || this.columns.length === 0,\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel\n )\n );\n }\n if (customColTree) {\n this.colKeysPath = this.TreeToArr2(customColTree);\n } else {\n this.colKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.colKeys,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals || this.rows.length === 0,\n this.colGrandTotalLabel,\n this.colSubTotalLabel\n )\n );\n }\n const t8 = typeof window !== 'undefined' ? window.performance.now() : 0;\n console.log('TreeToArr:', t8 - t7);\n }\n\n delete this.rowFlatKeys;\n delete this.colFlatKeys;\n }\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.aggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n }\n setRecords(records: any[]) {\n this.processRecords();\n }\n /**\n * 处理数据,遍历所有条目,过滤和派生字段的处理有待优化TODO\n */\n processRecords() {\n for (let i = 0, len = this.records.length; i < len; i++) {\n const record = this.records[i];\n if (this.filterRecord(record)) {\n this.processRecord(record);\n }\n }\n }\n filterRecord(record: any) {\n let isReserved = true;\n for (let i = 0; i < this.dataConfig?.filterRules?.length; i++) {\n const filterRule = this.dataConfig?.filterRules[i];\n if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n return isReserved;\n }\n /**\n * 处理单条数据\n * @param record\n * @returns\n */\n processRecord(record: any) {\n //这个派生字段的计算位置有待确定,是否应该放到filter之前\n this.derivedFieldRules?.forEach((derivedFieldRule: DerivedFieldRule, i: number) => {\n record[derivedFieldRule.fieldName] = derivedFieldRule.derivedFunc(record);\n });\n const colKey = [];\n const rowKey = [];\n\n for (let l = 0, len1 = this.rows.length; l < len1; l++) {\n const rowAttr = this.rows[l];\n rowKey.push(record[rowAttr]);\n }\n for (let n = 0, len2 = this.columns.length; n < len2; n++) {\n const colAttr = this.columns[n];\n colKey.push(record[colAttr]);\n }\n\n // this.allTotal.push(record);\n\n const flatRowKey = rowKey.join(this.stringJoinChar);\n const flatColKey = colKey.join(this.stringJoinChar);\n\n // 此方法判断效率很低\n // if (this.rowKeys.indexOf(rowKey) === -1) this.rowKeys.push(rowKey);\n // if (this.colKeys.indexOf(colKey) === -1) this.colKeys.push(colKey);\n\n // rowTotals colTotals原本汇总的每行每列的总计,当columns或者rows不配置的时候 可以用这个值展示,现在放到了tree上 'total'作为默认键值\n if (rowKey.length !== 0) {\n if (!this.rowFlatKeys[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowFlatKeys[flatRowKey] = 1;\n }\n //如有需要显示总计 或者columns配置空\n // if (this.totals?.row?.showGrandTotals || !(this.dataConfig?.columns?.length > 0))\n // for (let i = 0; i < this.indicators.length; i++) {\n // if (!this.rowTotals[flatRowKey][i]) {\n // const aggRule = this.getAggregatorRule(this.indicators[i]);\n // this.rowTotals[flatRowKey][i] = new this.aggregators[\n // aggRule?.aggregationType ?? AggregationType.SUM\n // ](aggRule?.field ?? this.indicators[i], aggRule?.formatFun);\n // }\n // this.rowTotals[flatRowKey][i].push(record);\n // }\n }\n if (colKey.length !== 0) {\n if (!this.colFlatKeys[flatColKey]) {\n this.colKeys.push(colKey);\n this.colFlatKeys[flatColKey] = 1;\n }\n //如有需要显示总计 或者rows配置空\n // if (this.totals?.column?.showGrandTotals || !(this.dataConfig?.rows?.length > 0))\n // for (let i = 0; i < this.indicators.length; i++) {\n // if (!this.colTotals[flatColKey][i]) {\n // const aggRule = this.getAggregatorRule(this.indicators[i]);\n // this.colTotals[flatColKey][i] = new this.aggregators[\n // aggRule?.aggregationType ?? AggregationType.SUM\n // ](aggRule?.field ?? this.indicators[i], aggRule?.formatFun);\n // }\n // this.colTotals[flatColKey][i].push(record);\n // }\n }\n\n //组织树结构: 行-列-单元格 行key为flatRowKey如’山东青岛‘ 列key为flatColKey如’家具椅子‘\n if (colKey.length !== 0 || rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n //这里改成数组 因为可能是多个指标值 遍历indicators 生成对应类型的聚合对象\n if (!this.tree[flatRowKey]?.[flatColKey]) {\n this.tree[flatRowKey][flatColKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowKey]?.[flatColKey]?.[i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowKey][flatColKey][i] = new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicatorKeys[i],\n aggRule?.formatFun\n );\n }\n //push融合了计算过程\n this.tree[flatRowKey]?.[flatColKey]?.[i].push(record);\n }\n }\n //统计整体的最大最小值和总计值 共mapping使用\n if (this.mappingRules) {\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.indicatorStatistics[i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.indicatorStatistics[i] = {\n max: new this.aggregators[AggregationType.MAX](this.indicatorKeys[i]),\n min: new this.aggregators[AggregationType.MIN](this.indicatorKeys[i]),\n total: new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicatorKeys[i],\n aggRule?.formatFun\n )\n };\n }\n //push融合了计算过程\n this.indicatorStatistics[i].max.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].min.push(this.tree[flatRowKey]?.[flatColKey]?.[i].value());\n this.indicatorStatistics[i].total.push(record);\n }\n }\n }\n /**\n * 全量更新排序规则 对数据重新排序 生成行列paths\n * @param sortRules\n */\n updateSortRules(sortRules: SortRules) {\n this.sorted = false;\n this.sortRules = sortRules;\n this.sortKeys();\n this.rowKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.rowKeys,\n this.rowsIsTotal,\n this?.totals?.row?.showGrandTotals || this.columns.length === 0,\n this.rowGrandTotalLabel,\n this.rowSubTotalLabel\n )\n );\n this.colKeysPath = this.TreeToArr(\n this.ArrToTree(\n this.colKeys,\n this.colsIsTotal,\n this.totals?.column?.showGrandTotals || this.rows.length === 0,\n this.colGrandTotalLabel,\n this.colSubTotalLabel\n )\n );\n }\n private getAggregatorRule(indicatorKey: string): AggregationRule<AggregationType> | undefined {\n return this.aggregationRules?.find((value: AggregationRule<AggregationType>, index: number) => {\n return indicatorKey === value.indicatorKey;\n });\n }\n /**\n * 根据行列的维度key 获取聚合对象\n * @param rowKey\n * @param colKey\n * @param indicator\n * @returns\n */\n getAggregator(rowKey: string[] | string = [], colKey: string[] | string = [], indicator: string): Aggregator {\n const indicatorIndex = this.indicatorKeys.indexOf(indicator);\n let agg;\n let flatRowKey;\n let flatColKey;\n if (typeof rowKey === 'string') {\n flatRowKey = rowKey;\n } else {\n flatRowKey = rowKey.join(this.stringJoinChar);\n }\n\n if (typeof colKey === 'string') {\n flatColKey = colKey;\n } else {\n flatColKey = colKey.join(this.stringJoinChar);\n }\n\n if (rowKey.length === 0 && colKey.length === 0) {\n // agg = this.allTotal;\n // } else if (rowKey.length === 0) {\n // // agg = this.tree.total[flatColKey]?.[sortByIndicatorIndex];\n // agg = this.colTotals[flatColKey]?.[sortByIndicatorIndex];\n // } else if (colKey.length === 0) {\n // // agg = this.tree[flatRowKey].total?.[sortByIndicatorIndex];\n // agg = this.rowTotals[flatRowKey]?.[sortByIndicatorIndex];\n } else {\n agg = this.tree[flatRowKey]?.[flatColKey]?.[indicatorIndex];\n }\n return agg\n ? agg\n : {\n className: '',\n push() {\n // do nothing\n },\n value(): any {\n return null;\n },\n formatValue() {\n return '';\n },\n reset() {\n // do nothing\n }\n };\n }\n /**\n * 根据排序规则 对维度keys排序\n */\n sortKeys() {\n const that = this;\n if (!this.sorted) {\n this.sorted = true;\n const getValue = function (rowKey: any, colKey: any) {\n return that.getAggregator(rowKey, colKey, '').value();\n };\n\n switch (this.rowOrder) {\n case 'value_a_to_z':\n this.rowKeys.sort(function (a, b) {\n return naturalSort(getValue(a, []), getValue(b, []));\n });\n break;\n case 'value_z_to_a':\n this.rowKeys.sort(function (a, b) {\n return -naturalSort(getValue(a, []), getValue(b, []));\n });\n break;\n default:\n this.rowKeys.sort(this.arrSort(this.rows, true));\n }\n switch (this.colOrder) {\n case 'value_a_to_z':\n this.colKeys.sort(function (a, b) {\n return naturalSort(getValue([], a), getValue([], b));\n });\n break;\n case 'value_z_to_a':\n this.colKeys.sort(function (a, b) {\n return -naturalSort(getValue([], a), getValue([], b));\n });\n break;\n default:\n const sortfun = this.arrSort(this.columns, false);\n this.colKeys.sort(sortfun);\n }\n }\n }\n /**\n * 生成排序函数 综合配置的多条排序规则\n * @param fieldArr 排序维度名称 如行rows 列columns\n * @returns\n */\n arrSort(fieldArr: string[], isRow: boolean) {\n let field;\n const that = this;\n const sortersArr: any[] = function (_this: any) {\n const results = [];\n for (let l = 0, len1 = fieldArr.length; l < len1; l++) {\n field = fieldArr[l];\n let isHasSortRule = false;\n if (that.sortRules) {\n for (let m = 0, len2 = that.sortRules.length; m < len2; m++) {\n if (that.sortRules[m].sortField === field) {\n isHasSortRule = true;\n results.push({\n field,\n fieldIndex: l,\n sortRule: that.sortRules[m],\n func: that.getSort(that.sortRules[m], isRow)\n });\n\n // if (that.sortRules[m].sortByIndicator) {\n // isHasSortRule = true;\n // results.push({\n // field,\n // fieldIndex: l,\n // sortRule: that.sortRules[m],\n // func: that.getSort(that.sortRules[m], field),\n // });\n // }\n }\n }\n }\n if (!isHasSortRule) {\n results.push({ field, fieldIndex: l, func: naturalSort });\n }\n }\n return results;\n }.call(this);\n return function (a: string[], b: string[]) {\n let comparison;\n let sorter;\n for (let i = 0; i < sortersArr.length; i++) {\n sorter = sortersArr[i];\n if (sorter.sortRule?.sortByIndicator) {\n let aChanged = a;\n let bChanged = b;\n if (sorter.fieldIndex < fieldArr.length - 1) {\n aChanged = a.slice(0, sorter.fieldIndex + 1);\n aChanged.push(isRow ? that.totals?.row?.subTotalLabel : that.totals?.column?.subTotalLabel);\n bChanged = b.slice(0, sorter.fieldIndex + 1);\n bChanged.push(isRow ? that.totals?.row?.subTotalLabel : that.totals?.column?.subTotalLabel);\n }\n comparison = sorter.func(aChanged, bChanged);\n } else {\n comparison = sorter.func(a[sorter.fieldIndex], b[sorter.fieldIndex]);\n }\n if (comparison !== 0) {\n return comparison * (sorter.sortRule?.sortType === SortType.DESC ? -1 : 1);\n }\n }\n return 0;\n };\n }\n /**\n * 根据具体排序 获取不同的排序函数\n * @param sortRule\n * @returns\n */\n getSort(sortRule: SortRule, isSortRow: boolean) {\n const that = this;\n\n if ((<SortByIndicatorRule>sortRule).sortByIndicator) {\n return (a: string[], b: string[]) => {\n /**\n * 根据rowKey和colKey获取tree上对应的聚合值\n * @param rowKey\n * @param colKey\n * @returns\n */\n const getValue = function (rowKey: any, colKey: any) {\n //如果rowKey提供的不全 如 [地区,省,城市] 只提供了如[华东,山东] 会补全为[华东,山东,小计]\n if (\n rowKey.length < that.rows.length &&\n rowKey[rowKey.length - 1] !== that.rowSubTotalLabel &&\n rowKey[rowKey.length - 1] !== that.rowGrandTotalLabel\n ) {\n rowKey.push(that.rowSubTotalLabel);\n }\n if (\n colKey.length < that.columns.length &&\n colKey[colKey.length - 1] !== that.colSubTotalLabel &&\n colKey[colKey.length - 1] !== that.colGrandTotalLabel\n ) {\n colKey.push(that.colSubTotalLabel);\n }\n return that.getAggregator(rowKey, colKey, (<SortByIndicatorRule>sortRule).sortByIndicator).value();\n };\n if (isSortRow) {\n return naturalSort(\n getValue(a, (<SortByIndicatorRule>sortRule).query),\n getValue(b, (<SortByIndicatorRule>sortRule).query)\n );\n }\n return naturalSort(\n getValue((<SortByIndicatorRule>sortRule).query, a),\n getValue((<SortByIndicatorRule>sortRule).query, b)\n );\n };\n } else if ((<SortByRule>sortRule).sortBy) {\n return sortBy((<SortByRule>sortRule).sortBy);\n }\n if ((<SortTypeRule>sortRule).sortType) {\n return typeSort;\n }\n if ((<SortFuncRule>sortRule).sortFunc) {\n return (<SortFuncRule>sortRule).sortFunc;\n }\n return naturalSort;\n }\n /**\n * 汇总小计\n */\n totalStatistics() {\n const that = this;\n if (\n (that?.totals?.column?.showSubTotals && that?.totals?.column?.subTotalsDimensions?.length >= 1) ||\n (that?.totals?.row?.showSubTotals && that?.totals?.row?.subTotalsDimensions?.length >= 1) ||\n that?.totals?.column?.showGrandTotals ||\n that?.totals?.row?.showGrandTotals ||\n that.rows.length === 0 ||\n that.columns.length === 0\n ) {\n const rowTotalKeys: string[] = [];\n /**\n * 计算每一行的所有列的汇总值\n * @param flatRowKey\n * @param flatColKey\n */\n const colCompute = (flatRowKey: string, flatColKey: string) => {\n const colKey = flatColKey.split(this.stringJoinChar);\n for (let i = 0, len = that.totals?.column?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.column.subTotalsDimensions[i];\n const dimensionIndex = that.columns.indexOf(dimension);\n if (dimensionIndex >= 0) {\n const colTotalKey = colKey.slice(0, dimensionIndex + 1);\n colTotalKey.push(that.totals?.column?.subTotalLabel ?? '小计');\n const flatColTotalKey = colTotalKey.join(this.stringJoinChar);\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n if (that.totals?.column?.showGrandTotals || this.rows.length === 0) {\n const flatColTotalKey = that.colGrandTotalLabel;\n if (!this.tree[flatRowKey][flatColTotalKey]) {\n this.tree[flatRowKey][flatColTotalKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowKey][flatColTotalKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n };\n Object.keys(that.tree).forEach(flatRowKey => {\n const rowKey = flatRowKey.split(this.stringJoinChar);\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n for (let i = 0, len = that.totals?.row?.subTotalsDimensions?.length; i < len; i++) {\n const dimension = that.totals.row.subTotalsDimensions[i];\n const dimensionIndex = that.rows.indexOf(dimension);\n if (dimensionIndex >= 0) {\n const rowTotalKey = rowKey.slice(0, dimensionIndex + 1);\n rowTotalKey.push(that.totals?.row?.subTotalLabel ?? '小计');\n const flatRowTotalKey = rowTotalKey.join(this.stringJoinChar);\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n }\n if (that.totals?.row?.showGrandTotals || this.columns.length === 0) {\n const flatRowTotalKey = that.rowGrandTotalLabel;\n if (!this.tree[flatRowTotalKey]) {\n this.tree[flatRowTotalKey] = {};\n rowTotalKeys.push(flatRowTotalKey);\n }\n if (!this.tree[flatRowTotalKey][flatColKey]) {\n this.tree[flatRowTotalKey][flatColKey] = [];\n }\n for (let i = 0; i < this.indicatorKeys.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicatorKeys[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicatorKeys[i], aggRule?.formatFun);\n }\n this.tree[flatRowTotalKey][flatColKey][i].push(that.tree[flatRowKey]?.[flatColKey]?.[i]);\n }\n }\n colCompute(flatRowKey, flatColKey);\n }\n });\n });\n //增加出来的rowTotalKeys 再遍历一次 汇总小计的小计 如 东北小计(row)-办公用品小计(col)所指单元格的值\n rowTotalKeys.forEach(flatRowKey => {\n Object.keys(that.tree[flatRowKey]).forEach(flatColKey => {\n colCompute(flatRowKey, flatColKey);\n });\n });\n }\n }\n /**\n * 将rowKeys和colKeys 转为树形结构\n * @param arr\n * @param subTotalFlags 标志小计的维度\n * @returns\n */\n private ArrToTree(\n arr: string[][],\n subTotalFlags: boolean[],\n isGrandTotal: boolean,\n grandTotalLabel: string,\n subTotalLabel: string\n ) {\n /**\n *\n * @param {string} s 父级id\n * @param {number} n 需转换数字\n */\n // const getId = (pId: any, curId: any) => `${pId}$${curId}`;\n const result: any[] = []; // 结果\n const concatStr = this.stringJoinChar; // 连接符(随便写,保证key唯一性就OK)\n const map = new Map(); // 存储根节点 主要提升性能\n function addList(list: any) {\n const path: any[] = []; // 路径\n let node: any; // 当前节点\n list.forEach((value: any, index: number) => {\n path.push(value);\n const flatKey = path.join(concatStr);\n //id的值可以每次生成一个新的 这里用的path作为id 方便layout对象获取\n let item: { id: string; children: any[] } = map.get(flatKey); // 当前节点\n if (!item) {\n item = {\n // name: value,\n id: flatKey, //getId(node?.id ?? '', (node?.children?.length ?? result.length) + 1),\n children: []\n };\n if (subTotalFlags[index]) {\n let curChild = item.children;\n for (let i = index; i < list.length - 1; i++) {\n const totalChild: { id: string; children: any[] } = {\n id: `${flatKey}${concatStr}${subTotalLabel}`, // getId(item?.id, 1),\n children: []\n };\n curChild.push(totalChild);\n curChild = totalChild.children;\n }\n }\n map.set(flatKey, item); // 存储路径对应的节点\n if (node) {\n //为了确保汇总小计放到最后 使用splice插入到倒数第二个位置。如果小计放前面 直接push就行\n if (subTotalFlags[index - 1]) {\n node.children.splice(node.children.length - 1, 0, item);\n } else {\n node.children.push(item);\n }\n } else {\n result.push(item);\n }\n }\n node = item; // 更新当前节点\n });\n }\n\n arr.forEach(item => addList(item));\n //最后将总计的节点加上\n if (isGrandTotal) {\n const node: { id: string; children: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n children: []\n };\n let curChild = node.children;\n for (let i = 1; i < subTotalFlags.length; i++) {\n const totalChild: { id: string; children: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n children: []\n };\n curChild.push(totalChild);\n curChild = totalChild.children;\n }\n result.push(node);\n }\n return result;\n }\n //将树形结构转为二维数组 值为node.id\n private TreeToArr(tree: any) {\n const result: any[] = []; // 结果\n function getPath(node: any, arr: any) {\n arr.push(node.id);\n if (node.children.length > 0) {\n // 存在多个节点就递归\n node.children?.forEach((childItem: any) => getPath(childItem, [...arr]));\n } else {\n result.push(arr);\n }\n }\n tree.forEach((treeNode: any) => getPath(treeNode, []));\n return result;\n }\n private TreeToArr2(tree: any) {\n const result: any[] = []; // 结果\n function getPath(node: any, arr: any) {\n arr.push(arr.length > 0 ? [arr[arr.length - 1], node.value].join(String.fromCharCode(0)) : node.value);\n if (node.children?.length > 0) {\n // 存在多个节点就递归\n node.children?.forEach((childItem: any) => getPath(childItem, [...arr]));\n } else {\n result.push(arr);\n }\n }\n tree.forEach((treeNode: any) => getPath(treeNode, []));\n return result;\n }\n}\n"]}