@visactor/vtable 0.9.0-alpha.1 → 0.9.1-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/cjs/ListTable.d.ts +2 -2
  2. package/cjs/ListTable.js.map +1 -1
  3. package/cjs/PivotTable.d.ts +4 -4
  4. package/cjs/PivotTable.js.map +1 -1
  5. package/cjs/core/BaseTable.js +16 -10
  6. package/cjs/core/BaseTable.js.map +1 -1
  7. package/cjs/core/tableHelper.d.ts +11 -0
  8. package/cjs/core/tableHelper.js +47 -3
  9. package/cjs/core/tableHelper.js.map +1 -1
  10. package/cjs/core.d.ts +1 -1
  11. package/cjs/core.js +1 -10
  12. package/cjs/core.js.map +1 -1
  13. package/cjs/data/DataSource.d.ts +2 -2
  14. package/cjs/data/DataSource.js.map +1 -1
  15. package/cjs/dataset/dataset.js.map +1 -1
  16. package/cjs/event/event.js +21 -21
  17. package/cjs/event/event.js.map +1 -1
  18. package/cjs/event/sparkline-event.d.ts +2 -0
  19. package/cjs/event/{chart.js → sparkline-event.js} +10 -8
  20. package/cjs/event/sparkline-event.js.map +1 -0
  21. package/cjs/header-helper/header-helper.d.ts +2 -2
  22. package/cjs/header-helper/header-helper.js.map +1 -1
  23. package/cjs/index.d.ts +1 -1
  24. package/cjs/index.js +1 -1
  25. package/cjs/index.js.map +1 -1
  26. package/cjs/layout/simple-header-layout.js +3 -1
  27. package/cjs/layout/simple-header-layout.js.map +1 -1
  28. package/cjs/render/layout/arc.d.ts +4 -4
  29. package/cjs/render/layout/arc.js +2 -2
  30. package/cjs/render/layout/arc.js.map +1 -1
  31. package/cjs/render/layout/circle.d.ts +4 -4
  32. package/cjs/render/layout/circle.js +1 -1
  33. package/cjs/render/layout/circle.js.map +1 -1
  34. package/cjs/render/layout/container.js +2 -2
  35. package/cjs/render/layout/container.js.map +1 -1
  36. package/cjs/render/layout/element.d.ts +4 -8
  37. package/cjs/render/layout/element.js.map +1 -1
  38. package/cjs/render/layout/rect.d.ts +4 -4
  39. package/cjs/render/layout/rect.js +1 -1
  40. package/cjs/render/layout/rect.js.map +1 -1
  41. package/cjs/render/layout/text.d.ts +2 -3
  42. package/cjs/render/layout/text.js +1 -1
  43. package/cjs/render/layout/text.js.map +1 -1
  44. package/cjs/scenegraph/component/cell-content.js +9 -3
  45. package/cjs/scenegraph/component/cell-content.js.map +1 -1
  46. package/cjs/scenegraph/component/cell-mover.js +3 -5
  47. package/cjs/scenegraph/component/cell-mover.js.map +1 -1
  48. package/cjs/scenegraph/component/custom.js +9 -16
  49. package/cjs/scenegraph/component/custom.js.map +1 -1
  50. package/cjs/scenegraph/component/menu.js +6 -10
  51. package/cjs/scenegraph/component/menu.js.map +1 -1
  52. package/cjs/scenegraph/component/table-component.js +15 -21
  53. package/cjs/scenegraph/component/table-component.js.map +1 -1
  54. package/cjs/scenegraph/debug-tool/debug-tool.d.ts +1 -3
  55. package/cjs/scenegraph/debug-tool/debug-tool.js +6 -22
  56. package/cjs/scenegraph/debug-tool/debug-tool.js.map +1 -1
  57. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js +16 -12
  58. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  59. package/cjs/scenegraph/graphic/contributions/index.js +4 -4
  60. package/cjs/scenegraph/graphic/contributions/index.js.map +1 -1
  61. package/cjs/scenegraph/graphic/contributions/rect-contribution-render.js +1 -1
  62. package/cjs/scenegraph/graphic/contributions/rect-contribution-render.js.map +1 -1
  63. package/cjs/scenegraph/group-creater/cell-helper.js +6 -6
  64. package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
  65. package/cjs/scenegraph/group-creater/cell-type/chart-cell.js +2 -4
  66. package/cjs/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
  67. package/cjs/scenegraph/group-creater/cell-type/image-cell.js +2 -4
  68. package/cjs/scenegraph/group-creater/cell-type/image-cell.js.map +1 -1
  69. package/cjs/scenegraph/group-creater/cell-type/progress-bar-cell.js +10 -13
  70. package/cjs/scenegraph/group-creater/cell-type/progress-bar-cell.js.map +1 -1
  71. package/cjs/scenegraph/group-creater/cell-type/spark-line-cell.js +32 -24
  72. package/cjs/scenegraph/group-creater/cell-type/spark-line-cell.js.map +1 -1
  73. package/cjs/scenegraph/group-creater/cell-type/text-cell.js +5 -7
  74. package/cjs/scenegraph/group-creater/cell-type/text-cell.js.map +1 -1
  75. package/cjs/scenegraph/group-creater/cell-type/video-cell.js +2 -4
  76. package/cjs/scenegraph/group-creater/cell-type/video-cell.js.map +1 -1
  77. package/cjs/scenegraph/group-creater/column-helper.d.ts +1 -10
  78. package/cjs/scenegraph/group-creater/column-helper.js +9 -51
  79. package/cjs/scenegraph/group-creater/column-helper.js.map +1 -1
  80. package/cjs/scenegraph/group-creater/progress/proxy.d.ts +1 -1
  81. package/cjs/scenegraph/group-creater/progress/proxy.js +8 -8
  82. package/cjs/scenegraph/group-creater/progress/proxy.js.map +1 -1
  83. package/cjs/scenegraph/layout/update-width.js +34 -16
  84. package/cjs/scenegraph/layout/update-width.js.map +1 -1
  85. package/cjs/scenegraph/scenegraph.d.ts +5 -3
  86. package/cjs/scenegraph/scenegraph.js +41 -181
  87. package/cjs/scenegraph/scenegraph.js.map +1 -1
  88. package/cjs/scenegraph/select/create-select-border.d.ts +3 -0
  89. package/cjs/scenegraph/select/create-select-border.js +38 -0
  90. package/cjs/scenegraph/select/create-select-border.js.map +1 -0
  91. package/cjs/scenegraph/select/delete-select-border.d.ts +3 -0
  92. package/cjs/scenegraph/select/delete-select-border.js +19 -0
  93. package/cjs/scenegraph/select/delete-select-border.js.map +1 -0
  94. package/cjs/scenegraph/select/move-select-border.d.ts +2 -0
  95. package/cjs/scenegraph/select/move-select-border.js +13 -0
  96. package/cjs/scenegraph/select/move-select-border.js.map +1 -0
  97. package/cjs/scenegraph/select/update-select-border.d.ts +3 -0
  98. package/cjs/scenegraph/select/update-select-border.js +115 -0
  99. package/cjs/scenegraph/select/update-select-border.js.map +1 -0
  100. package/cjs/scenegraph/stick-text/index.d.ts +2 -0
  101. package/cjs/scenegraph/stick-text/index.js +72 -0
  102. package/cjs/scenegraph/stick-text/index.js.map +1 -0
  103. package/cjs/scenegraph/style/frame-border.d.ts +2 -0
  104. package/cjs/scenegraph/style/frame-border.js +46 -18
  105. package/cjs/scenegraph/style/frame-border.js.map +1 -1
  106. package/cjs/scenegraph/utils/get-cell-merge.js +1 -0
  107. package/cjs/scenegraph/utils/get-cell-merge.js.map +1 -1
  108. package/cjs/scenegraph/utils/text-icon-layout.js +4 -5
  109. package/cjs/scenegraph/utils/text-icon-layout.js.map +1 -1
  110. package/cjs/state/common/check-in-select.d.ts +1 -2
  111. package/cjs/state/common/check-in-select.js.map +1 -1
  112. package/cjs/state/hover/col.d.ts +1 -2
  113. package/cjs/state/hover/col.js.map +1 -1
  114. package/cjs/state/hover/is-cell-hover.js +5 -5
  115. package/cjs/state/hover/is-cell-hover.js.map +1 -1
  116. package/cjs/state/hover/row.d.ts +1 -2
  117. package/cjs/state/hover/row.js.map +1 -1
  118. package/cjs/state/hover/single.d.ts +1 -2
  119. package/cjs/state/hover/single.js.map +1 -1
  120. package/cjs/state/hover/update-position.js +10 -10
  121. package/cjs/state/hover/update-position.js.map +1 -1
  122. package/cjs/state/select/update-position.js +4 -4
  123. package/cjs/state/select/update-position.js.map +1 -1
  124. package/cjs/state/sort/index.js +2 -2
  125. package/cjs/state/sort/index.js.map +1 -1
  126. package/cjs/state/spark-line/index.js +2 -4
  127. package/cjs/state/spark-line/index.js.map +1 -1
  128. package/cjs/state/state.d.ts +3 -19
  129. package/cjs/state/state.js +12 -24
  130. package/cjs/state/state.js.map +1 -1
  131. package/cjs/tools/global.d.ts +2 -0
  132. package/cjs/tools/global.js +5 -2
  133. package/cjs/tools/global.js.map +1 -1
  134. package/cjs/tools/pixel-ratio.d.ts +1 -0
  135. package/cjs/tools/pixel-ratio.js +15 -0
  136. package/cjs/tools/pixel-ratio.js.map +1 -0
  137. package/cjs/tools/sort.d.ts +2 -1
  138. package/cjs/tools/sort.js.map +1 -1
  139. package/cjs/tools/util.d.ts +2 -1
  140. package/cjs/tools/util.js.map +1 -1
  141. package/cjs/ts-types/common.d.ts +14 -1
  142. package/cjs/ts-types/common.js +9 -1
  143. package/cjs/ts-types/common.js.map +1 -1
  144. package/cjs/ts-types/customElement.d.ts +9 -9
  145. package/cjs/ts-types/customElement.js.map +1 -1
  146. package/cjs/ts-types/events.d.ts +3 -3
  147. package/cjs/ts-types/events.js.map +1 -1
  148. package/cjs/ts-types/index.d.ts +1 -1
  149. package/cjs/ts-types/index.js +1 -1
  150. package/cjs/ts-types/index.js.map +1 -1
  151. package/cjs/ts-types/list-table/define/index.d.ts +3 -3
  152. package/cjs/ts-types/list-table/define/index.js.map +1 -1
  153. package/cjs/ts-types/list-table/define/sparkline-define.d.ts +1 -1
  154. package/cjs/ts-types/list-table/define/sparkline-define.js.map +1 -1
  155. package/cjs/ts-types/new-data-set.d.ts +2 -1
  156. package/cjs/ts-types/new-data-set.js.map +1 -1
  157. package/cjs/ts-types/pivot-table/dimension/multilinetext-dimension.d.ts +1 -1
  158. package/cjs/ts-types/pivot-table/dimension/multilinetext-dimension.js.map +1 -1
  159. package/cjs/ts-types/pivot-table/indicator/sparkline-indicator.d.ts +1 -1
  160. package/cjs/ts-types/pivot-table/indicator/sparkline-indicator.js.map +1 -1
  161. package/cjs/ts-types/sparkline.d.ts +39 -0
  162. package/cjs/ts-types/{chartType.js → sparkline.js} +1 -1
  163. package/cjs/ts-types/sparkline.js.map +1 -0
  164. package/cjs/ts-types/table-engine.d.ts +6 -6
  165. package/cjs/ts-types/table-engine.js.map +1 -1
  166. package/dist/vtable.js +24033 -24161
  167. package/dist/vtable.min.js +2 -2
  168. package/es/ListTable.d.ts +2 -2
  169. package/es/ListTable.js.map +1 -1
  170. package/es/PivotTable.d.ts +4 -4
  171. package/es/PivotTable.js.map +1 -1
  172. package/es/core/BaseTable.js +17 -11
  173. package/es/core/BaseTable.js.map +1 -1
  174. package/es/core/tableHelper.d.ts +11 -0
  175. package/es/core/tableHelper.js +48 -0
  176. package/es/core/tableHelper.js.map +1 -1
  177. package/es/core.d.ts +1 -1
  178. package/es/core.js +1 -3
  179. package/es/core.js.map +1 -1
  180. package/es/data/DataSource.d.ts +2 -2
  181. package/es/data/DataSource.js.map +1 -1
  182. package/es/dataset/dataset.js.map +1 -1
  183. package/es/event/event.js +4 -4
  184. package/es/event/event.js.map +1 -1
  185. package/es/event/sparkline-event.d.ts +2 -0
  186. package/es/event/{chart.js → sparkline-event.js} +8 -6
  187. package/es/event/sparkline-event.js.map +1 -0
  188. package/es/header-helper/header-helper.d.ts +2 -2
  189. package/es/header-helper/header-helper.js.map +1 -1
  190. package/es/index.d.ts +1 -1
  191. package/es/index.js +1 -1
  192. package/es/index.js.map +1 -1
  193. package/es/layout/simple-header-layout.js +3 -1
  194. package/es/layout/simple-header-layout.js.map +1 -1
  195. package/es/render/layout/arc.d.ts +4 -4
  196. package/es/render/layout/arc.js +2 -2
  197. package/es/render/layout/arc.js.map +1 -1
  198. package/es/render/layout/circle.d.ts +4 -4
  199. package/es/render/layout/circle.js +1 -1
  200. package/es/render/layout/circle.js.map +1 -1
  201. package/es/render/layout/container.js +2 -2
  202. package/es/render/layout/container.js.map +1 -1
  203. package/es/render/layout/element.d.ts +4 -8
  204. package/es/render/layout/element.js.map +1 -1
  205. package/es/render/layout/rect.d.ts +4 -4
  206. package/es/render/layout/rect.js +1 -1
  207. package/es/render/layout/rect.js.map +1 -1
  208. package/es/render/layout/text.d.ts +2 -3
  209. package/es/render/layout/text.js +1 -1
  210. package/es/render/layout/text.js.map +1 -1
  211. package/es/scenegraph/component/cell-content.js +9 -3
  212. package/es/scenegraph/component/cell-content.js.map +1 -1
  213. package/es/scenegraph/component/cell-mover.js +3 -5
  214. package/es/scenegraph/component/cell-mover.js.map +1 -1
  215. package/es/scenegraph/component/custom.js +9 -16
  216. package/es/scenegraph/component/custom.js.map +1 -1
  217. package/es/scenegraph/component/menu.js +6 -10
  218. package/es/scenegraph/component/menu.js.map +1 -1
  219. package/es/scenegraph/component/table-component.js +15 -21
  220. package/es/scenegraph/component/table-component.js.map +1 -1
  221. package/es/scenegraph/debug-tool/debug-tool.d.ts +1 -3
  222. package/es/scenegraph/debug-tool/debug-tool.js +7 -23
  223. package/es/scenegraph/debug-tool/debug-tool.js.map +1 -1
  224. package/es/scenegraph/graphic/contributions/group-contribution-render.js +17 -11
  225. package/es/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  226. package/es/scenegraph/graphic/contributions/index.js +6 -4
  227. package/es/scenegraph/graphic/contributions/index.js.map +1 -1
  228. package/es/scenegraph/graphic/contributions/rect-contribution-render.js +1 -1
  229. package/es/scenegraph/graphic/contributions/rect-contribution-render.js.map +1 -1
  230. package/es/scenegraph/group-creater/cell-helper.js +5 -5
  231. package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
  232. package/es/scenegraph/group-creater/cell-type/chart-cell.js +2 -4
  233. package/es/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
  234. package/es/scenegraph/group-creater/cell-type/image-cell.js +2 -4
  235. package/es/scenegraph/group-creater/cell-type/image-cell.js.map +1 -1
  236. package/es/scenegraph/group-creater/cell-type/progress-bar-cell.js +10 -13
  237. package/es/scenegraph/group-creater/cell-type/progress-bar-cell.js.map +1 -1
  238. package/es/scenegraph/group-creater/cell-type/spark-line-cell.js +32 -24
  239. package/es/scenegraph/group-creater/cell-type/spark-line-cell.js.map +1 -1
  240. package/es/scenegraph/group-creater/cell-type/text-cell.js +4 -6
  241. package/es/scenegraph/group-creater/cell-type/text-cell.js.map +1 -1
  242. package/es/scenegraph/group-creater/cell-type/video-cell.js +2 -4
  243. package/es/scenegraph/group-creater/cell-type/video-cell.js.map +1 -1
  244. package/es/scenegraph/group-creater/column-helper.d.ts +1 -10
  245. package/es/scenegraph/group-creater/column-helper.js +5 -50
  246. package/es/scenegraph/group-creater/column-helper.js.map +1 -1
  247. package/es/scenegraph/group-creater/progress/proxy.d.ts +1 -1
  248. package/es/scenegraph/group-creater/progress/proxy.js +9 -7
  249. package/es/scenegraph/group-creater/progress/proxy.js.map +1 -1
  250. package/es/scenegraph/layout/update-width.js +34 -16
  251. package/es/scenegraph/layout/update-width.js.map +1 -1
  252. package/es/scenegraph/scenegraph.d.ts +5 -3
  253. package/es/scenegraph/scenegraph.js +46 -178
  254. package/es/scenegraph/scenegraph.js.map +1 -1
  255. package/es/scenegraph/select/create-select-border.d.ts +3 -0
  256. package/es/scenegraph/select/create-select-border.js +29 -0
  257. package/es/scenegraph/select/create-select-border.js.map +1 -0
  258. package/es/scenegraph/select/delete-select-border.d.ts +3 -0
  259. package/es/scenegraph/select/delete-select-border.js +12 -0
  260. package/es/scenegraph/select/delete-select-border.js.map +1 -0
  261. package/es/scenegraph/select/move-select-border.d.ts +2 -0
  262. package/es/scenegraph/select/move-select-border.js +7 -0
  263. package/es/scenegraph/select/move-select-border.js.map +1 -0
  264. package/es/scenegraph/select/update-select-border.d.ts +3 -0
  265. package/es/scenegraph/select/update-select-border.js +107 -0
  266. package/es/scenegraph/select/update-select-border.js.map +1 -0
  267. package/es/scenegraph/stick-text/index.d.ts +2 -0
  268. package/es/scenegraph/stick-text/index.js +64 -0
  269. package/es/scenegraph/stick-text/index.js.map +1 -0
  270. package/es/scenegraph/style/frame-border.d.ts +2 -0
  271. package/es/scenegraph/style/frame-border.js +44 -14
  272. package/es/scenegraph/style/frame-border.js.map +1 -1
  273. package/es/scenegraph/utils/get-cell-merge.js +1 -0
  274. package/es/scenegraph/utils/get-cell-merge.js.map +1 -1
  275. package/es/scenegraph/utils/text-icon-layout.js +4 -5
  276. package/es/scenegraph/utils/text-icon-layout.js.map +1 -1
  277. package/es/state/common/check-in-select.d.ts +1 -2
  278. package/es/state/common/check-in-select.js.map +1 -1
  279. package/es/state/hover/col.d.ts +1 -2
  280. package/es/state/hover/col.js.map +1 -1
  281. package/es/state/hover/is-cell-hover.js +2 -2
  282. package/es/state/hover/is-cell-hover.js.map +1 -1
  283. package/es/state/hover/row.d.ts +1 -2
  284. package/es/state/hover/row.js.map +1 -1
  285. package/es/state/hover/single.d.ts +1 -2
  286. package/es/state/hover/single.js.map +1 -1
  287. package/es/state/hover/update-position.js +1 -1
  288. package/es/state/hover/update-position.js.map +1 -1
  289. package/es/state/select/update-position.js +1 -1
  290. package/es/state/select/update-position.js.map +1 -1
  291. package/es/state/sort/index.js +2 -2
  292. package/es/state/sort/index.js.map +1 -1
  293. package/es/state/spark-line/index.js +2 -4
  294. package/es/state/spark-line/index.js.map +1 -1
  295. package/es/state/state.d.ts +3 -19
  296. package/es/state/state.js +5 -22
  297. package/es/state/state.js.map +1 -1
  298. package/es/tools/global.d.ts +2 -0
  299. package/es/tools/global.js +4 -0
  300. package/es/tools/global.js.map +1 -1
  301. package/es/tools/pixel-ratio.d.ts +1 -0
  302. package/es/tools/pixel-ratio.js +11 -0
  303. package/es/tools/pixel-ratio.js.map +1 -0
  304. package/es/tools/sort.d.ts +2 -1
  305. package/es/tools/sort.js.map +1 -1
  306. package/es/tools/util.d.ts +2 -1
  307. package/es/tools/util.js.map +1 -1
  308. package/es/ts-types/common.d.ts +14 -1
  309. package/es/ts-types/common.js +12 -1
  310. package/es/ts-types/common.js.map +1 -1
  311. package/es/ts-types/customElement.d.ts +9 -9
  312. package/es/ts-types/customElement.js.map +1 -1
  313. package/es/ts-types/events.d.ts +3 -3
  314. package/es/ts-types/events.js.map +1 -1
  315. package/es/ts-types/index.d.ts +1 -1
  316. package/es/ts-types/index.js +1 -1
  317. package/es/ts-types/index.js.map +1 -1
  318. package/es/ts-types/list-table/define/index.d.ts +3 -3
  319. package/es/ts-types/list-table/define/index.js.map +1 -1
  320. package/es/ts-types/list-table/define/sparkline-define.d.ts +1 -1
  321. package/es/ts-types/list-table/define/sparkline-define.js.map +1 -1
  322. package/es/ts-types/new-data-set.d.ts +2 -1
  323. package/es/ts-types/new-data-set.js.map +1 -1
  324. package/es/ts-types/pivot-table/dimension/multilinetext-dimension.d.ts +1 -1
  325. package/es/ts-types/pivot-table/dimension/multilinetext-dimension.js.map +1 -1
  326. package/es/ts-types/pivot-table/indicator/sparkline-indicator.d.ts +1 -1
  327. package/es/ts-types/pivot-table/indicator/sparkline-indicator.js.map +1 -1
  328. package/es/ts-types/sparkline.d.ts +39 -0
  329. package/es/ts-types/sparkline.js +2 -0
  330. package/es/ts-types/sparkline.js.map +1 -0
  331. package/es/ts-types/table-engine.d.ts +6 -6
  332. package/es/ts-types/table-engine.js.map +1 -1
  333. package/package.json +18 -6
  334. package/cjs/event/chart.d.ts +0 -2
  335. package/cjs/event/chart.js.map +0 -1
  336. package/cjs/ts-types/chartType.d.ts +0 -53
  337. package/cjs/ts-types/chartType.js.map +0 -1
  338. package/es/event/chart.d.ts +0 -2
  339. package/es/event/chart.js.map +0 -1
  340. package/es/ts-types/chartType.d.ts +0 -53
  341. package/es/ts-types/chartType.js +0 -2
  342. package/es/ts-types/chartType.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["dataset/dataset.ts"],"names":[],"mappings":"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","file":"dataset.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} from '../ts-types';\nimport { AggregationType, SortType } from '../ts-types';\n/**\n * 数据处理模块\n */\nexport class Dataset {\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, 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 indicators: string[];\n constructor(dataConfig: IDataConfig, rows: string[], columns: string[], indicators: string[], records?: any[]) {\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 = dataConfig.totals;\n this.rows = rows;\n this.columns = columns;\n this.indicators = 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 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 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.indicators.length; i++) {\n if (!this.tree[flatRowKey]?.[flatColKey]?.[i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowKey][flatColKey][i] = new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicators[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.indicators.length; i++) {\n if (!this.indicatorStatistics[i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.indicatorStatistics[i] = {\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[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicators[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 | undefined {\n return this.aggregationRules?.find((value: AggregationRule, 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.indicators.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 };\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.indicators.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicators[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.indicators.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicators[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.indicators.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicators[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.indicators.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicators[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; child: any[] } = map.get(flatKey); // 当前节点\n if (!item) {\n item = {\n // name: value,\n id: flatKey, //getId(node?.id ?? '', (node?.child?.length ?? result.length) + 1),\n child: []\n };\n if (subTotalFlags[index]) {\n let curChild = item.child;\n for (let i = index; i < list.length - 1; i++) {\n const totalChild: { id: string; child: any[] } = {\n id: `${flatKey}${concatStr}${subTotalLabel}`, // getId(item?.id, 1),\n child: []\n };\n curChild.push(totalChild);\n curChild = totalChild.child;\n }\n }\n map.set(flatKey, item); // 存储路径对应的节点\n if (node) {\n //为了确保汇总小计放到最后 使用splice插入到倒数第二个位置。如果小计放前面 直接push就行\n if (subTotalFlags[index - 1]) {\n node.child.splice(node.child.length - 1, 0, item);\n } else {\n node.child.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; child: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n child: []\n };\n let curChild = node.child;\n for (let i = 1; i < subTotalFlags.length; i++) {\n const totalChild: { id: string; child: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n child: []\n };\n curChild.push(totalChild);\n curChild = totalChild.child;\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.child.length > 0) {\n // 存在多个节点就递归\n node.child?.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\nabstract class Aggregator {\n className = 'Aggregator';\n isRecord?: boolean = true;\n records?: any[] = [];\n type?: string;\n field?: string;\n formatFun?: any;\n _formatedValue?: any;\n constructor(dimension: string, formatFun?: any, isRecord?: boolean) {\n this.field = dimension;\n this.formatFun = formatFun;\n this.isRecord = isRecord ?? this.isRecord;\n }\n // push(record: any) {\n // if (this.isRecord) {\n // if (record.className === 'Aggregator') this.records.push(...record.records);\n // else this.records.push(record);\n // }\n // }\n abstract push(record: any): void;\n abstract value(): any;\n formatValue() {\n if (!this._formatedValue) {\n if (this.formatFun) {\n this._formatedValue = this.formatFun(this.value());\n } else {\n this._formatedValue = this.value();\n }\n }\n return this._formatedValue;\n }\n}\nclass SumAggregator extends Aggregator {\n type: string = AggregationType.SUM;\n sum = 0;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.sum += record.value();\n } else if (!isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n }\n }\n value() {\n return this.sum;\n }\n}\n\nclass CountAggregator extends Aggregator {\n type: string = AggregationType.COUNT;\n count = 0;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n value() {\n return this.count;\n }\n}\nclass AvgAggregator extends Aggregator {\n type: string = AggregationType.AVG;\n sum = 0;\n count = 0;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator' && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (!isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n value() {\n return this.sum / this.count;\n }\n}\nclass MaxAggregator extends Aggregator {\n type: string = AggregationType.MAX;\n max: number = Number.MIN_SAFE_INTEGER;\n isRecord?: boolean = false;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n //TODO push Aggregator类型的对象没有做处理\n if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (!isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n value() {\n return this.max;\n }\n}\nclass MinAggregator extends Aggregator {\n type: string = AggregationType.MIN;\n min: number = Number.MAX_SAFE_INTEGER;\n isRecord?: boolean = false;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n //TODO push Aggregator类型的对象没有做处理\n if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n }\n }\n value() {\n return this.min;\n }\n}\nfunction indicatorSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nfunction typeSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nfunction naturalSort(as: any, bs: any) {\n const rx = /(\\d+)|(\\D+)/g;\n const rd = /\\d/;\n const rz = /^0/;\n let a;\n let a1;\n let b;\n let b1;\n let nas = 0;\n let nbs = 0;\n if (bs !== null && as === null) {\n return -1;\n }\n if (as !== null && bs === null) {\n return 1;\n }\n if (typeof as === 'number' && isNaN(as)) {\n return -1;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1;\n }\n nas = +as;\n nbs = +bs;\n if (nas < nbs) {\n return -1;\n }\n if (nas > nbs) {\n return 1;\n }\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1;\n }\n a = String(as);\n b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!(rd.test(a) && rd.test(b))) {\n return a > b ? 1 : -1;\n }\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n a1 = a.shift();\n b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return <any>a1.replace(rz, '.0') - <any>b1.replace(rz, '.0');\n }\n return a1 > b1 ? 1 : -1;\n }\n }\n return a.length - b.length;\n}\nfunction sortBy(order: ('asc' | 'desc' | 'normal')[]) {\n let x;\n let i;\n const mapping = {};\n const lowercase_mapping = {};\n // for (i in order) {\n for (let i = 0; i < order.length; i++) {\n x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n lowercase_mapping[x.toLowerCase()] = i;\n }\n }\n return function (a: any, b: any) {\n if (mapping[a] !== null && mapping[a] !== undefined && mapping[b] !== null && mapping[b] !== undefined) {\n return mapping[a] - mapping[b];\n } else if (mapping[a] !== null && mapping[a] !== undefined) {\n return -1;\n } else if (mapping[b] !== null && mapping[b] !== undefined) {\n return 1;\n } else if (\n lowercase_mapping[a] !== null &&\n mapping[a] !== undefined &&\n lowercase_mapping[b] !== null &&\n mapping[b] !== undefined\n ) {\n return lowercase_mapping[a] - lowercase_mapping[b];\n } else if (\n lowercase_mapping[a] === null ||\n mapping[a] === undefined ||\n lowercase_mapping[b] === null ||\n mapping[b] === undefined\n ) {\n return 0;\n } else if (lowercase_mapping[a] !== null && mapping[a] !== undefined) {\n return -1;\n } else if (lowercase_mapping[b] !== null && mapping[b] !== undefined) {\n return 1;\n }\n return naturalSort(a, b);\n };\n}\n"]}
1
+ {"version":3,"sources":["dataset/dataset.ts"],"names":[],"mappings":"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","file":"dataset.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} from '../ts-types';\nimport { AggregationType, SortType } from '../ts-types';\n/**\n * 数据处理模块\n */\nexport class Dataset {\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, 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 indicators: string[];\n constructor(dataConfig: IDataConfig, rows: string[], columns: string[], indicators: string[], records?: any[]) {\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 = dataConfig.totals;\n this.rows = rows;\n this.columns = columns;\n this.indicators = 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 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 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.indicators.length; i++) {\n if (!this.tree[flatRowKey]?.[flatColKey]?.[i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowKey][flatColKey][i] = new this.aggregators[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicators[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.indicators.length; i++) {\n if (!this.indicatorStatistics[i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.indicatorStatistics[i] = {\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[aggRule?.aggregationType ?? AggregationType.SUM](\n aggRule?.field ?? this.indicators[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 | undefined {\n return this.aggregationRules?.find((value: AggregationRule, 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.indicators.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 };\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.indicators.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicators[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.indicators.length; i++) {\n if (!this.tree[flatRowKey][flatColTotalKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowKey][flatColTotalKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicators[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.indicators.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicators[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.indicators.length; i++) {\n if (!this.tree[flatRowTotalKey][flatColKey][i]) {\n const aggRule = this.getAggregatorRule(this.indicators[i]);\n this.tree[flatRowTotalKey][flatColKey][i] = new this.aggregators[\n aggRule?.aggregationType ?? AggregationType.SUM\n ](aggRule?.field ?? this.indicators[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; child: any[] } = map.get(flatKey); // 当前节点\n if (!item) {\n item = {\n // name: value,\n id: flatKey, //getId(node?.id ?? '', (node?.child?.length ?? result.length) + 1),\n child: []\n };\n if (subTotalFlags[index]) {\n let curChild = item.child;\n for (let i = index; i < list.length - 1; i++) {\n const totalChild: { id: string; child: any[] } = {\n id: `${flatKey}${concatStr}${subTotalLabel}`, // getId(item?.id, 1),\n child: []\n };\n curChild.push(totalChild);\n curChild = totalChild.child;\n }\n }\n map.set(flatKey, item); // 存储路径对应的节点\n if (node) {\n //为了确保汇总小计放到最后 使用splice插入到倒数第二个位置。如果小计放前面 直接push就行\n if (subTotalFlags[index - 1]) {\n node.child.splice(node.child.length - 1, 0, item);\n } else {\n node.child.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; child: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n child: []\n };\n let curChild = node.child;\n for (let i = 1; i < subTotalFlags.length; i++) {\n const totalChild: { id: string; child: any[] } = {\n id: grandTotalLabel, // getId(item?.id, 1),\n child: []\n };\n curChild.push(totalChild);\n curChild = totalChild.child;\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.child.length > 0) {\n // 存在多个节点就递归\n node.child?.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\nabstract class Aggregator {\n className = 'Aggregator';\n isRecord?: boolean = true;\n records?: any[] = [];\n type?: string;\n field?: string;\n formatFun?: any;\n _formatedValue?: any;\n constructor(dimension: string, formatFun?: any, isRecord?: boolean) {\n this.field = dimension;\n this.formatFun = formatFun;\n this.isRecord = isRecord ?? this.isRecord;\n }\n // push(record: any) {\n // if (this.isRecord) {\n // if (record.className === 'Aggregator') this.records.push(...record.records);\n // else this.records.push(record);\n // }\n // }\n abstract push(record: any): void;\n abstract value(): any;\n formatValue() {\n if (!this._formatedValue) {\n if (this.formatFun) {\n this._formatedValue = this.formatFun(this.value());\n } else {\n this._formatedValue = this.value();\n }\n }\n return this._formatedValue;\n }\n}\nclass SumAggregator extends Aggregator {\n type: string = AggregationType.SUM;\n sum = 0;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.sum += record.value();\n } else if (!isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n }\n }\n value() {\n return this.sum;\n }\n}\n\nclass CountAggregator extends Aggregator {\n type: string = AggregationType.COUNT;\n count = 0;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator') {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n value() {\n return this.count;\n }\n}\nclass AvgAggregator extends Aggregator {\n type: string = AggregationType.AVG;\n sum = 0;\n count = 0;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.className === 'Aggregator' && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (!isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n value() {\n return this.sum / this.count;\n }\n}\nclass MaxAggregator extends Aggregator {\n type: string = AggregationType.MAX;\n max: number = Number.MIN_SAFE_INTEGER;\n isRecord?: boolean = false;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n //TODO push Aggregator类型的对象没有做处理\n if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (!isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n value() {\n return this.max;\n }\n}\nclass MinAggregator extends Aggregator {\n type: string = AggregationType.MIN;\n min: number = Number.MAX_SAFE_INTEGER;\n isRecord?: boolean = false;\n push(record: any): void {\n if (this.isRecord) {\n if (record.className === 'Aggregator') {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n //TODO push Aggregator类型的对象没有做处理\n if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n }\n }\n value() {\n return this.min;\n }\n}\nfunction indicatorSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nfunction typeSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nfunction naturalSort(as: any, bs: any) {\n const rx = /(\\d+)|(\\D+)/g;\n const rd = /\\d/;\n const rz = /^0/;\n let a;\n let a1;\n let b;\n let b1;\n let nas = 0;\n let nbs = 0;\n if (bs !== null && as === null) {\n return -1;\n }\n if (as !== null && bs === null) {\n return 1;\n }\n if (typeof as === 'number' && isNaN(as)) {\n return -1;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1;\n }\n nas = +as;\n nbs = +bs;\n if (nas < nbs) {\n return -1;\n }\n if (nas > nbs) {\n return 1;\n }\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1;\n }\n a = String(as);\n b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!(rd.test(a) && rd.test(b))) {\n return a > b ? 1 : -1;\n }\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n a1 = a.shift();\n b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return <any>a1.replace(rz, '.0') - <any>b1.replace(rz, '.0');\n }\n return a1 > b1 ? 1 : -1;\n }\n }\n return a.length - b.length;\n}\nfunction sortBy(order: SortOrder[]) {\n let x;\n let i;\n const mapping = {};\n const lowercase_mapping = {};\n // for (i in order) {\n for (let i = 0; i < order.length; i++) {\n x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n lowercase_mapping[x.toLowerCase()] = i;\n }\n }\n return function (a: any, b: any) {\n if (mapping[a] !== null && mapping[a] !== undefined && mapping[b] !== null && mapping[b] !== undefined) {\n return mapping[a] - mapping[b];\n } else if (mapping[a] !== null && mapping[a] !== undefined) {\n return -1;\n } else if (mapping[b] !== null && mapping[b] !== undefined) {\n return 1;\n } else if (\n lowercase_mapping[a] !== null &&\n mapping[a] !== undefined &&\n lowercase_mapping[b] !== null &&\n mapping[b] !== undefined\n ) {\n return lowercase_mapping[a] - lowercase_mapping[b];\n } else if (\n lowercase_mapping[a] === null ||\n mapping[a] === undefined ||\n lowercase_mapping[b] === null ||\n mapping[b] === undefined\n ) {\n return 0;\n } else if (lowercase_mapping[a] !== null && mapping[a] !== undefined) {\n return -1;\n } else if (lowercase_mapping[b] !== null && mapping[b] !== undefined) {\n return 1;\n }\n return naturalSort(a, b);\n };\n}\n"]}
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.EventManeger = void 0;
6
6
 
7
- const vrender_1 = require("@visactor/vrender"), ts_types_1 = require("../ts-types"), state_1 = require("../state/state"), TABLE_EVENT_TYPE_1 = require("../core/TABLE_EVENT_TYPE"), check_in_select_1 = require("../state/common/check-in-select"), util_1 = require("../tools/util"), helper_1 = require("../tools/helper"), Rect_1 = require("../tools/Rect"), media_click_1 = require("./media-click"), drill_1 = require("./drill"), chart_1 = require("./chart"), icon_1 = require("../scenegraph/utils/icon"), scroll_1 = require("./scroll");
7
+ const vrender_1 = require("@visactor/vrender"), ts_types_1 = require("../ts-types"), ts_types_2 = require("../ts-types"), TABLE_EVENT_TYPE_1 = require("../core/TABLE_EVENT_TYPE"), check_in_select_1 = require("../state/common/check-in-select"), util_1 = require("../tools/util"), helper_1 = require("../tools/helper"), Rect_1 = require("../tools/Rect"), media_click_1 = require("./media-click"), drill_1 = require("./drill"), sparkline_event_1 = require("./sparkline-event"), icon_1 = require("../scenegraph/utils/icon"), scroll_1 = require("./scroll");
8
8
 
9
9
  class EventManeger {
10
10
  constructor(table) {
@@ -17,7 +17,7 @@ class EventManeger {
17
17
  this.table.scenegraph.tableGroup.addEventListener("pointermove", (e => {
18
18
  var _a, _b, _c, _d;
19
19
  const eventArgsSet = _getCellEventArgsSet(e);
20
- if (stateManeger.interactionState !== state_1.InteractionState.scrolling) if (stateManeger.interactionState !== state_1.InteractionState.grabing) {
20
+ if (stateManeger.interactionState !== ts_types_1.InteractionState.scrolling) if (stateManeger.interactionState !== ts_types_1.InteractionState.grabing) {
21
21
  if (this.checkColumnResizer(eventArgsSet) ? stateManeger.updateCursor("col-resize") : stateManeger.updateCursor(),
22
22
  this.table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.MOUSELEAVE_CELL)) {
23
23
  const cellGoup = null === (_a = null == eventArgsSet ? void 0 : eventArgsSet.eventArgs) || void 0 === _a ? void 0 : _a.target;
@@ -98,7 +98,7 @@ class EventManeger {
98
98
  }
99
99
  }
100
100
  })), this.table.scenegraph.tableGroup.addEventListener("pointerleave", (e => {
101
- stateManeger.updateInteractionState(state_1.InteractionState.default), this.dealTableHover(),
101
+ stateManeger.updateInteractionState(ts_types_1.InteractionState.default), this.dealTableHover(),
102
102
  stateManeger.updateCursor();
103
103
  const target = e.target;
104
104
  target && !target.isDescendantsOf(this.table.scenegraph.tableGroup) && this.table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.MOUSELEAVE_TABLE, {
@@ -109,18 +109,18 @@ class EventManeger {
109
109
  })), handler.on(this.table.getElement(), "blur", (e => {
110
110
  console.log("blur"), this.dealTableHover();
111
111
  })), this.table.scenegraph.tableGroup.addEventListener("pointerupoutside", (e => {
112
- console.log("pointerupoutside"), stateManeger.updateInteractionState(state_1.InteractionState.default),
112
+ console.log("pointerupoutside"), stateManeger.updateInteractionState(ts_types_1.InteractionState.default),
113
113
  this.dealTableHover(), this.dealTableSelect();
114
114
  })), this.table.scenegraph.tableGroup.addEventListener("pointerdown", (e => {
115
115
  var _a, _b, _c, _d;
116
116
  if (0 !== e.button) return;
117
117
  const eventArgsSet = _getCellEventArgsSet(e);
118
- if (stateManeger.interactionState !== state_1.InteractionState.default) return;
118
+ if (stateManeger.interactionState !== ts_types_1.InteractionState.default) return;
119
119
  stateManeger.menu.isShow && eventArgsSet.eventArgs && eventArgsSet.eventArgs.target !== (null === (_a = stateManeger.residentHoverIcon) || void 0 === _a ? void 0 : _a.icon) && stateManeger.hideMenu();
120
120
  if (!((null === (_d = null === (_c = null === (_b = null == eventArgsSet ? void 0 : eventArgsSet.eventArgs) || void 0 === _b ? void 0 : _b.target) || void 0 === _c ? void 0 : _c.role) || void 0 === _d ? void 0 : _d.startsWith("icon")) ? eventArgsSet.eventArgs.target : void 0)) {
121
- if (this.checkColumnResizer(eventArgsSet, !0)) return void stateManeger.updateInteractionState(state_1.InteractionState.grabing);
122
- if (this.chechColumnMover(eventArgsSet)) return void stateManeger.updateInteractionState(state_1.InteractionState.grabing);
123
- this.dealTableSelect(eventArgsSet) && stateManeger.updateInteractionState(state_1.InteractionState.grabing);
121
+ if (this.checkColumnResizer(eventArgsSet, !0)) return void stateManeger.updateInteractionState(ts_types_1.InteractionState.grabing);
122
+ if (this.chechColumnMover(eventArgsSet)) return void stateManeger.updateInteractionState(ts_types_1.InteractionState.grabing);
123
+ this.dealTableSelect(eventArgsSet) && stateManeger.updateInteractionState(ts_types_1.InteractionState.grabing);
124
124
  }
125
125
  if (this.table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.MOUSEDOWN_CELL)) {
126
126
  const eventArgsSet = _getCellEventArgsSet(e);
@@ -133,7 +133,7 @@ class EventManeger {
133
133
  })), this.table.scenegraph.tableGroup.addEventListener("pointerup", (e => {
134
134
  if (0 === e.button) {
135
135
  if ("grabing" === stateManeger.interactionState) {
136
- if (stateManeger.updateInteractionState(state_1.InteractionState.default), stateManeger.isResizeCol()) {
136
+ if (stateManeger.updateInteractionState(ts_types_1.InteractionState.default), stateManeger.isResizeCol()) {
137
137
  if (this.table.stateManeger.endResizeCol(), this.table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.RESIZE_COLUMN_END)) {
138
138
  const columns = [];
139
139
  for (let col = 0; col < this.table.colCount; col++) columns.push(this.table.getColWidth(col));
@@ -169,7 +169,7 @@ class EventManeger {
169
169
  cellsEvent.cells = this.table.getSelectedCellInfos(), this.table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.DRAG_SELECT_END, cellsEvent);
170
170
  }
171
171
  }
172
- } else stateManeger.interactionState === state_1.InteractionState.scrolling && stateManeger.updateInteractionState(state_1.InteractionState.default);
172
+ } else stateManeger.interactionState === ts_types_1.InteractionState.scrolling && stateManeger.updateInteractionState(ts_types_1.InteractionState.default);
173
173
  if (this.table.hasListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.MOUSEUP_CELL)) {
174
174
  const eventArgsSet = _getCellEventArgsSet(e);
175
175
  eventArgsSet.eventArgs && this.table.fireListeners(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.MOUSEUP_CELL, {
@@ -233,7 +233,7 @@ class EventManeger {
233
233
  console.log("stage click");
234
234
  const target = e.target;
235
235
  target && !target.isDescendantsOf(this.table.scenegraph.tableGroup) && target !== this.table.scenegraph.tableGroup && (console.log("pointerup outside table"),
236
- stateManeger.updateInteractionState(state_1.InteractionState.default), this.dealTableHover(),
236
+ stateManeger.updateInteractionState(ts_types_1.InteractionState.default), this.dealTableHover(),
237
237
  this.dealTableSelect(), stateManeger.updateCursor());
238
238
  })), this.table.scenegraph.tableGroup.addEventListener("dblclick", (e => {
239
239
  var _a, _b;
@@ -262,21 +262,21 @@ class EventManeger {
262
262
  })), scenegraph.component.hScrollBar.addEventListener("pointerover", (e => {
263
263
  stateManeger.showHorizontalScrollBar();
264
264
  })), scenegraph.component.vScrollBar.addEventListener("pointerout", (e => {
265
- stateManeger.interactionState !== state_1.InteractionState.scrolling && stateManeger.hideVerticalScrollBar();
265
+ stateManeger.interactionState !== ts_types_1.InteractionState.scrolling && stateManeger.hideVerticalScrollBar();
266
266
  })), scenegraph.component.hScrollBar.addEventListener("pointerout", (e => {
267
- stateManeger.interactionState !== state_1.InteractionState.scrolling && stateManeger.hideHorizontalScrollBar();
267
+ stateManeger.interactionState !== ts_types_1.InteractionState.scrolling && stateManeger.hideHorizontalScrollBar();
268
268
  })), scenegraph.component.vScrollBar._slider.addEventListener("pointerdown", (() => {
269
- stateManeger.interactionState !== state_1.InteractionState.scrolling && stateManeger.updateInteractionState(state_1.InteractionState.scrolling);
269
+ stateManeger.interactionState !== ts_types_1.InteractionState.scrolling && stateManeger.updateInteractionState(ts_types_1.InteractionState.scrolling);
270
270
  })), scenegraph.component.vScrollBar.addEventListener("pointerup", (() => {
271
- stateManeger.interactionState === state_1.InteractionState.scrolling && stateManeger.updateInteractionState(state_1.InteractionState.default);
271
+ stateManeger.interactionState === ts_types_1.InteractionState.scrolling && stateManeger.updateInteractionState(ts_types_1.InteractionState.default);
272
272
  })), scenegraph.component.vScrollBar.addEventListener("pointerupoutside", (() => {
273
- stateManeger.interactionState === state_1.InteractionState.scrolling && stateManeger.updateInteractionState(state_1.InteractionState.default);
273
+ stateManeger.interactionState === ts_types_1.InteractionState.scrolling && stateManeger.updateInteractionState(ts_types_1.InteractionState.default);
274
274
  })), scenegraph.component.hScrollBar._slider.addEventListener("pointerdown", (() => {
275
- stateManeger.interactionState !== state_1.InteractionState.scrolling && stateManeger.updateInteractionState(state_1.InteractionState.scrolling);
275
+ stateManeger.interactionState !== ts_types_1.InteractionState.scrolling && stateManeger.updateInteractionState(ts_types_1.InteractionState.scrolling);
276
276
  })), scenegraph.component.hScrollBar.addEventListener("pointerup", (() => {
277
- stateManeger.interactionState === state_1.InteractionState.scrolling && stateManeger.updateInteractionState(state_1.InteractionState.default);
277
+ stateManeger.interactionState === ts_types_1.InteractionState.scrolling && stateManeger.updateInteractionState(ts_types_1.InteractionState.default);
278
278
  })), scenegraph.component.hScrollBar.addEventListener("pointerupoutside", (() => {
279
- stateManeger.interactionState === state_1.InteractionState.scrolling && stateManeger.updateInteractionState(state_1.InteractionState.default);
279
+ stateManeger.interactionState === ts_types_1.InteractionState.scrolling && stateManeger.updateInteractionState(ts_types_1.InteractionState.default);
280
280
  }));
281
281
  const throttleVerticalWheel = (0, util_1.throttle)(stateManeger.updateVerticalScrollBar, 20), throttleHorizontalWheel = (0,
282
282
  util_1.throttle)(stateManeger.updateHorizontalScrollBar, 20);
@@ -315,13 +315,13 @@ class EventManeger {
315
315
  const stateManeger = this.table.stateManeger;
316
316
  this.table.listen(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.ICON_CLICK, (iconInfo => {
317
317
  const {col: col, row: row, x: x, y: y, funcType: funcType, icon: icon} = iconInfo;
318
- funcType === ts_types_1.IconFuncTypeEnum.dropDown ? stateManeger.triggerDropDownMenu(col, row, x, y) : funcType === ts_types_1.IconFuncTypeEnum.sort ? stateManeger.triggerSort(col, row, icon) : funcType === ts_types_1.IconFuncTypeEnum.pin ? stateManeger.triggerPin(col, row, icon) : funcType === ts_types_1.IconFuncTypeEnum.drillDown && (0,
318
+ funcType === ts_types_2.IconFuncTypeEnum.dropDown ? stateManeger.triggerDropDownMenu(col, row, x, y) : funcType === ts_types_2.IconFuncTypeEnum.sort ? stateManeger.triggerSort(col, row, icon) : funcType === ts_types_2.IconFuncTypeEnum.pin ? stateManeger.triggerPin(col, row, icon) : funcType === ts_types_2.IconFuncTypeEnum.drillDown && (0,
319
319
  drill_1.drillClick)(this.table);
320
320
  })), this.table.listen(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.DROPDOWNMENU_CLICK, (() => {
321
321
  stateManeger.hideMenu();
322
322
  })), (0, media_click_1.bindMediaClick)(this.table), this.table.listen(TABLE_EVENT_TYPE_1.TABLE_EVENT_TYPE.DBLCLICK_CELL, (e => {
323
323
  this.table._canResizeColumn(e.col, e.row) && this.table.scenegraph.updateAutoColWidth(e.col);
324
- })), this.table.isPivotTable() && (0, drill_1.bindDrillEvent)(this.table), (0, chart_1.bindChartHoverEvent)(this.table);
324
+ })), this.table.isPivotTable() && (0, drill_1.bindDrillEvent)(this.table), (0, sparkline_event_1.bindSparklineHoverEvent)(this.table);
325
325
  }
326
326
  dealTableHover(eventArgsSet) {
327
327
  if (!eventArgsSet) return void this.table.stateManeger.updateHoverPos(-1, -1);