@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.17.4 → 4.17.6

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 (561) hide show
  1. package/dpr/assets/app.js.map +1 -1
  2. package/dpr/components/_async/async-filters-form/sortByTemplate.js +1 -1
  3. package/dpr/components/_async/async-filters-form/sortByTemplate.js.map +1 -1
  4. package/dpr/components/_async/async-filters-form/types.d.js +1 -1
  5. package/dpr/components/_async/async-filters-form/types.d.js.map +1 -1
  6. package/dpr/components/_async/async-filters-form/utils.js +1 -1
  7. package/dpr/components/_async/async-filters-form/utils.js.map +2 -2
  8. package/dpr/components/_async/async-filters-form/utils.test.ts +9 -9
  9. package/dpr/components/_async/async-filters-form/utils.ts +1 -1
  10. package/dpr/components/_async/async-filters-form/view.njk +6 -3
  11. package/dpr/components/_catalogue/catalogue/types.js +1 -1
  12. package/dpr/components/_catalogue/catalogue/types.js.map +1 -1
  13. package/dpr/components/_catalogue/catalogue/utils.js +1 -1
  14. package/dpr/components/_catalogue/catalogue/utils.js.map +2 -2
  15. package/dpr/components/_catalogue/catalogue/utils.test.ts +6 -3
  16. package/dpr/components/_catalogue/catalogue/utils.ts +1 -1
  17. package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
  18. package/dpr/components/_catalogue/catalogue-list/utils.js.map +2 -2
  19. package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -0
  20. package/dpr/components/_catalogue/catalogue-list/utils.ts +5 -5
  21. package/dpr/components/_charts/chart/Buckets.js +1 -1
  22. package/dpr/components/_charts/chart/Buckets.js.map +3 -3
  23. package/dpr/components/_charts/chart/Buckets.ts +3 -3
  24. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +1 -1
  25. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +3 -3
  26. package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +1 -13
  27. package/dpr/components/_charts/chart/heatmap/types.js +1 -1
  28. package/dpr/components/_charts/chart/heatmap/types.js.map +2 -2
  29. package/dpr/components/_charts/chart/heatmap/types.ts +1 -1
  30. package/dpr/components/_charts/utils.js +1 -1
  31. package/dpr/components/_charts/utils.js.map +3 -3
  32. package/dpr/components/_charts/utils.test.ts +1 -0
  33. package/dpr/components/_charts/utils.ts +84 -43
  34. package/dpr/components/_dashboards/dashboard-list/utils.js +1 -1
  35. package/dpr/components/_dashboards/dashboard-list/utils.js.map +2 -2
  36. package/dpr/components/_dashboards/dashboard-list/utils.test.ts +1 -0
  37. package/dpr/components/_dashboards/dashboard-list/utils.ts +16 -11
  38. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js +1 -1
  39. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js.map +2 -2
  40. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.ts +1 -1
  41. package/dpr/components/_dashboards/dashboard-visualisation/types.js +1 -1
  42. package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +2 -2
  43. package/dpr/components/_dashboards/dashboard-visualisation/types.ts +8 -8
  44. package/dpr/components/_dashboards/scorecard/Scorecard.js +1 -1
  45. package/dpr/components/_dashboards/scorecard/Scorecard.js.map +2 -2
  46. package/dpr/components/_dashboards/scorecard/Scorecard.ts +8 -8
  47. package/dpr/components/_dashboards/scorecard/types.js +1 -1
  48. package/dpr/components/_dashboards/scorecard/types.js.map +2 -2
  49. package/dpr/components/_dashboards/scorecard/types.ts +12 -10
  50. package/dpr/components/_dashboards/scorecard/utils.js +1 -1
  51. package/dpr/components/_dashboards/scorecard/utils.js.map +1 -1
  52. package/dpr/components/_dashboards/scorecard/utils.test.ts +1 -0
  53. package/dpr/components/_filters/filter-input/enum.js +1 -1
  54. package/dpr/components/_filters/filter-input/enum.js.map +1 -1
  55. package/dpr/components/_filters/filter-input/filters.js +1 -1
  56. package/dpr/components/_filters/filter-input/filters.js.map +1 -1
  57. package/dpr/components/_filters/filter-input/filters.test.ts +1 -0
  58. package/dpr/components/_filters/filter-input/types.d.js +1 -1
  59. package/dpr/components/_filters/filter-input/types.d.js.map +1 -1
  60. package/dpr/components/_filters/filters-selected/utils.js +1 -1
  61. package/dpr/components/_filters/filters-selected/utils.js.map +3 -3
  62. package/dpr/components/_filters/filters-selected/utils.test.ts +7 -4
  63. package/dpr/components/_filters/filters-selected/utils.ts +1 -1
  64. package/dpr/components/_filters/filtersTypeEnum.js +1 -1
  65. package/dpr/components/_filters/filtersTypeEnum.js.map +1 -1
  66. package/dpr/components/_filters/types.d.js +1 -1
  67. package/dpr/components/_filters/types.d.js.map +2 -2
  68. package/dpr/components/_filters/types.d.ts +5 -5
  69. package/dpr/components/_filters/utils.js +1 -1
  70. package/dpr/components/_filters/utils.js.map +2 -2
  71. package/dpr/components/_filters/utils.test.ts +54 -49
  72. package/dpr/components/_filters/utils.ts +16 -20
  73. package/dpr/components/_inputs/date-input/utils.js +1 -1
  74. package/dpr/components/_inputs/date-input/utils.js.map +1 -1
  75. package/dpr/components/_inputs/date-input/utils.test.ts +1 -0
  76. package/dpr/components/_inputs/date-range/clientClass.mjs +2 -2
  77. package/dpr/components/_inputs/date-range/types.js +1 -1
  78. package/dpr/components/_inputs/date-range/types.js.map +2 -2
  79. package/dpr/components/_inputs/date-range/types.ts +2 -2
  80. package/dpr/components/_inputs/date-range/utils.js +1 -1
  81. package/dpr/components/_inputs/date-range/utils.js.map +2 -2
  82. package/dpr/components/_inputs/date-range/utils.test.ts +5 -7
  83. package/dpr/components/_inputs/date-range/utils.ts +4 -4
  84. package/dpr/components/_inputs/date-range/view.njk +1 -0
  85. package/dpr/components/_inputs/granular-date-range/types.js +1 -1
  86. package/dpr/components/_inputs/granular-date-range/types.js.map +1 -1
  87. package/dpr/components/_inputs/granular-date-range/utils.js +1 -1
  88. package/dpr/components/_inputs/granular-date-range/utils.js.map +1 -1
  89. package/dpr/components/_inputs/granular-date-range/utils.test.ts +1 -0
  90. package/dpr/components/_inputs/multi-select/utils.js +1 -1
  91. package/dpr/components/_inputs/multi-select/utils.js.map +3 -3
  92. package/dpr/components/_inputs/multi-select/utils.ts +1 -1
  93. package/dpr/components/_inputs/multi-select/utilt.test.ts +29 -14
  94. package/dpr/components/_inputs/start-end-date/utils.js +1 -1
  95. package/dpr/components/_inputs/start-end-date/utils.js.map +1 -1
  96. package/dpr/components/_inputs/start-end-date/utils.test.ts +1 -0
  97. package/dpr/components/_reports/report-actions/actionsTemplate.js +1 -1
  98. package/dpr/components/_reports/report-actions/actionsTemplate.js.map +1 -1
  99. package/dpr/components/_reports/report-actions/types.d.js +1 -1
  100. package/dpr/components/_reports/report-actions/types.d.js.map +2 -2
  101. package/dpr/components/_reports/report-actions/types.d.ts +1 -1
  102. package/dpr/components/_reports/report-actions/utils.js +1 -1
  103. package/dpr/components/_reports/report-actions/utils.js.map +1 -1
  104. package/dpr/components/_reports/report-actions/utils.test.ts +8 -4
  105. package/dpr/components/_reports/report-columns-form/types.d.js +1 -1
  106. package/dpr/components/_reports/report-columns-form/types.d.js.map +1 -1
  107. package/dpr/components/_reports/report-columns-form/utils.js +1 -1
  108. package/dpr/components/_reports/report-columns-form/utils.js.map +2 -2
  109. package/dpr/components/_reports/report-columns-form/utils.ts +1 -1
  110. package/dpr/components/_reports/report-data-table/types.d.js +1 -1
  111. package/dpr/components/_reports/report-data-table/types.d.js.map +1 -1
  112. package/dpr/components/_reports/report-data-table/utils.js +1 -1
  113. package/dpr/components/_reports/report-data-table/utils.js.map +3 -3
  114. package/dpr/components/_reports/report-data-table/utils.test.ts +15 -8
  115. package/dpr/components/_reports/report-data-table/utils.ts +20 -8
  116. package/dpr/components/_reports/report-pagination/types.d.js +1 -1
  117. package/dpr/components/_reports/report-pagination/types.d.js.map +2 -2
  118. package/dpr/components/_reports/report-pagination/types.d.ts +2 -2
  119. package/dpr/components/_reports/report-pagination/utils.js +1 -1
  120. package/dpr/components/_reports/report-pagination/utils.js.map +1 -1
  121. package/dpr/components/_reports/report-pagination/utils.test.ts +1 -0
  122. package/dpr/components/_reports/report-totals/utils.js +1 -1
  123. package/dpr/components/_reports/report-totals/utils.js.map +1 -1
  124. package/dpr/components/card-group/utils.js +1 -1
  125. package/dpr/components/card-group/utils.js.map +1 -1
  126. package/dpr/components/card-group/utils.test.ts +7 -0
  127. package/dpr/components/report-list/defaultTokenProvider.js +1 -1
  128. package/dpr/components/report-list/defaultTokenProvider.js.map +3 -3
  129. package/dpr/components/report-list/defaultTokenProvider.ts +3 -3
  130. package/dpr/components/report-list/types.d.js +1 -1
  131. package/dpr/components/report-list/types.d.js.map +1 -1
  132. package/dpr/components/report-list/utils.js +1 -1
  133. package/dpr/components/report-list/utils.js.map +2 -2
  134. package/dpr/components/report-list/utils.test.ts +6 -4
  135. package/dpr/components/report-list/utils.ts +5 -5
  136. package/dpr/components/show-more/utils.js +1 -1
  137. package/dpr/components/show-more/utils.js.map +1 -1
  138. package/dpr/components/user-reports/bookmarks/utils.js +1 -1
  139. package/dpr/components/user-reports/bookmarks/utils.js.map +3 -3
  140. package/dpr/components/user-reports/bookmarks/utils.test.ts +14 -11
  141. package/dpr/components/user-reports/bookmarks/utils.ts +26 -31
  142. package/dpr/components/user-reports/requested/utils.js +1 -1
  143. package/dpr/components/user-reports/requested/utils.js.map +3 -3
  144. package/dpr/components/user-reports/requested/utils.test.ts +4 -3
  145. package/dpr/components/user-reports/requested/utils.ts +4 -3
  146. package/dpr/components/user-reports/types.d.js +1 -1
  147. package/dpr/components/user-reports/types.d.js.map +2 -2
  148. package/dpr/components/user-reports/types.d.ts +1 -1
  149. package/dpr/components/user-reports/utils.js +1 -1
  150. package/dpr/components/user-reports/utils.js.map +3 -3
  151. package/dpr/components/user-reports/utils.test.ts +48 -47
  152. package/dpr/components/user-reports/utils.ts +51 -57
  153. package/dpr/components/user-reports/viewed/utils.js +1 -1
  154. package/dpr/components/user-reports/viewed/utils.js.map +2 -2
  155. package/dpr/components/user-reports/viewed/utils.ts +5 -4
  156. package/dpr/data/agentConfig.js +1 -1
  157. package/dpr/data/agentConfig.js.map +1 -1
  158. package/dpr/data/dashboardClient.js +1 -1
  159. package/dpr/data/dashboardClient.js.map +2 -2
  160. package/dpr/data/dashboardClient.ts +2 -2
  161. package/dpr/data/dprReportingClient.js +1 -1
  162. package/dpr/data/dprReportingClient.js.map +3 -3
  163. package/dpr/data/dprReportingClient.ts +3 -3
  164. package/dpr/data/missingReportClient.js +2 -0
  165. package/dpr/data/missingReportClient.js.map +7 -0
  166. package/dpr/{services/missingReport → data}/missingReportClient.ts +4 -4
  167. package/dpr/data/productCollectionClient.js +2 -0
  168. package/dpr/data/productCollectionClient.js.map +7 -0
  169. package/dpr/data/productCollectionClient.ts +28 -0
  170. package/dpr/data/reportDataStore.js +1 -1
  171. package/dpr/data/reportDataStore.js.map +1 -1
  172. package/dpr/data/reportingClient.js +1 -1
  173. package/dpr/data/reportingClient.js.map +3 -3
  174. package/dpr/data/reportingClient.ts +7 -9
  175. package/dpr/data/restClient.js +1 -1
  176. package/dpr/data/restClient.js.map +2 -2
  177. package/dpr/data/restClient.ts +5 -5
  178. package/dpr/data/types.d.js +1 -1
  179. package/dpr/data/types.d.js.map +2 -2
  180. package/dpr/data/types.d.ts +1 -1
  181. package/dpr/middleware/reportAuthoriser.js +1 -1
  182. package/dpr/middleware/reportAuthoriser.js.map +2 -2
  183. package/dpr/middleware/reportAuthoriser.ts +2 -2
  184. package/dpr/middleware/setUpDprResources.js +1 -1
  185. package/dpr/middleware/setUpDprResources.js.map +2 -2
  186. package/dpr/middleware/setUpDprResources.test.ts +59 -20
  187. package/dpr/middleware/setUpDprResources.ts +30 -29
  188. package/dpr/middleware/setUpNestedRoute.js +1 -1
  189. package/dpr/middleware/setUpNestedRoute.js.map +2 -2
  190. package/dpr/middleware/setUpNestedRoute.ts +1 -1
  191. package/dpr/routes/index.js +1 -1
  192. package/dpr/routes/index.js.map +2 -2
  193. package/dpr/routes/index.ts +1 -2
  194. package/dpr/routes/journeys/download-report/controller.js +1 -1
  195. package/dpr/routes/journeys/download-report/controller.js.map +3 -3
  196. package/dpr/routes/journeys/download-report/controller.ts +7 -6
  197. package/dpr/routes/journeys/download-report/request-download/form/controller.js +1 -1
  198. package/dpr/routes/journeys/download-report/request-download/form/controller.js.map +3 -3
  199. package/dpr/routes/journeys/download-report/request-download/form/controller.ts +1 -1
  200. package/dpr/routes/journeys/download-report/request-download/form/routes.js +1 -1
  201. package/dpr/routes/journeys/download-report/request-download/form/routes.js.map +1 -1
  202. package/dpr/routes/journeys/download-report/request-download/form/submitted/controller.js +1 -1
  203. package/dpr/routes/journeys/download-report/request-download/form/submitted/controller.js.map +3 -3
  204. package/dpr/routes/journeys/download-report/request-download/form/submitted/controller.ts +1 -1
  205. package/dpr/routes/journeys/download-report/request-download/form/submitted/routes.js +1 -1
  206. package/dpr/routes/journeys/download-report/request-download/form/submitted/routes.js.map +1 -1
  207. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js +1 -1
  208. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js.map +1 -1
  209. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js +1 -1
  210. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js.map +1 -1
  211. package/dpr/routes/journeys/download-report/request-download/routes.js +1 -1
  212. package/dpr/routes/journeys/download-report/request-download/routes.js.map +1 -1
  213. package/dpr/routes/journeys/download-report/request-download/service.js +1 -1
  214. package/dpr/routes/journeys/download-report/request-download/service.js.map +3 -3
  215. package/dpr/routes/journeys/download-report/request-download/service.ts +20 -8
  216. package/dpr/routes/journeys/download-report/routes.js +1 -1
  217. package/dpr/routes/journeys/download-report/routes.js.map +3 -3
  218. package/dpr/routes/journeys/download-report/routes.ts +1 -4
  219. package/dpr/routes/journeys/download-report/tests.cy.js +1 -1
  220. package/dpr/routes/journeys/download-report/tests.cy.js.map +2 -2
  221. package/dpr/routes/journeys/download-report/tests.cy.ts +4 -1
  222. package/dpr/routes/journeys/download-report/utils.js +1 -1
  223. package/dpr/routes/journeys/download-report/utils.js.map +2 -2
  224. package/dpr/routes/journeys/download-report/utils.ts +2 -4
  225. package/dpr/routes/journeys/my-reports/bookmarks/controller.js +1 -1
  226. package/dpr/routes/journeys/my-reports/bookmarks/controller.js.map +1 -1
  227. package/dpr/routes/journeys/my-reports/bookmarks/list/controller.js +1 -1
  228. package/dpr/routes/journeys/my-reports/bookmarks/list/controller.js.map +3 -3
  229. package/dpr/routes/journeys/my-reports/bookmarks/list/controller.ts +2 -2
  230. package/dpr/routes/journeys/my-reports/bookmarks/list/routes.js +1 -1
  231. package/dpr/routes/journeys/my-reports/bookmarks/list/routes.js.map +1 -1
  232. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js +1 -1
  233. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js.map +2 -2
  234. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.ts +1 -2
  235. package/dpr/routes/journeys/my-reports/bookmarks/routes.js +1 -1
  236. package/dpr/routes/journeys/my-reports/bookmarks/routes.js.map +1 -1
  237. package/dpr/routes/journeys/my-reports/bookmarks/service.js +3 -3
  238. package/dpr/routes/journeys/my-reports/bookmarks/service.js.map +3 -3
  239. package/dpr/routes/journeys/my-reports/bookmarks/service.ts +31 -18
  240. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js +1 -1
  241. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js.map +2 -2
  242. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.ts +26 -26
  243. package/dpr/routes/journeys/my-reports/bookmarks/utils.js +1 -1
  244. package/dpr/routes/journeys/my-reports/bookmarks/utils.js.map +3 -3
  245. package/dpr/routes/journeys/my-reports/bookmarks/utils.ts +10 -11
  246. package/dpr/routes/journeys/my-reports/recently-viewed/controller.js +1 -1
  247. package/dpr/routes/journeys/my-reports/recently-viewed/controller.js.map +1 -1
  248. package/dpr/routes/journeys/my-reports/recently-viewed/list/controller.js +1 -1
  249. package/dpr/routes/journeys/my-reports/recently-viewed/list/controller.js.map +3 -3
  250. package/dpr/routes/journeys/my-reports/recently-viewed/list/controller.ts +1 -1
  251. package/dpr/routes/journeys/my-reports/recently-viewed/list/routes.js +1 -1
  252. package/dpr/routes/journeys/my-reports/recently-viewed/list/routes.js.map +1 -1
  253. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js +1 -1
  254. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js.map +2 -2
  255. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.ts +7 -4
  256. package/dpr/routes/journeys/my-reports/recently-viewed/routes.js +1 -1
  257. package/dpr/routes/journeys/my-reports/recently-viewed/routes.js.map +1 -1
  258. package/dpr/routes/journeys/my-reports/recently-viewed/service.js +1 -1
  259. package/dpr/routes/journeys/my-reports/recently-viewed/service.js.map +3 -3
  260. package/dpr/routes/journeys/my-reports/recently-viewed/service.ts +0 -2
  261. package/dpr/routes/journeys/my-reports/requested-reports/controller.js +1 -1
  262. package/dpr/routes/journeys/my-reports/requested-reports/controller.js.map +1 -1
  263. package/dpr/routes/journeys/my-reports/requested-reports/list/controller.js +1 -1
  264. package/dpr/routes/journeys/my-reports/requested-reports/list/controller.js.map +3 -3
  265. package/dpr/routes/journeys/my-reports/requested-reports/list/controller.ts +1 -1
  266. package/dpr/routes/journeys/my-reports/requested-reports/list/routes.js +1 -1
  267. package/dpr/routes/journeys/my-reports/requested-reports/list/routes.js.map +1 -1
  268. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js +1 -1
  269. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js.map +1 -1
  270. package/dpr/routes/journeys/my-reports/requested-reports/routes.js +1 -1
  271. package/dpr/routes/journeys/my-reports/requested-reports/routes.js.map +1 -1
  272. package/dpr/routes/journeys/my-reports/requested-reports/service.js +1 -1
  273. package/dpr/routes/journeys/my-reports/requested-reports/service.js.map +3 -3
  274. package/dpr/routes/journeys/my-reports/requested-reports/service.ts +25 -17
  275. package/dpr/routes/journeys/my-reports/routes.js +1 -1
  276. package/dpr/routes/journeys/my-reports/routes.js.map +3 -3
  277. package/dpr/routes/journeys/my-reports/routes.ts +0 -3
  278. package/dpr/routes/journeys/product-collection/routes.js +1 -1
  279. package/dpr/routes/journeys/product-collection/routes.js.map +1 -1
  280. package/dpr/routes/journeys/product-collection/selected/controller.js +1 -1
  281. package/dpr/routes/journeys/product-collection/selected/controller.js.map +2 -2
  282. package/dpr/routes/journeys/product-collection/selected/controller.ts +1 -1
  283. package/dpr/routes/journeys/product-collection/selected/routes.js +1 -1
  284. package/dpr/routes/journeys/product-collection/selected/routes.js.map +1 -1
  285. package/dpr/routes/journeys/product-collection/selected/tests.cy.js +1 -1
  286. package/dpr/routes/journeys/product-collection/selected/tests.cy.js.map +2 -2
  287. package/dpr/routes/journeys/product-collection/selected/tests.cy.ts +6 -4
  288. package/dpr/routes/journeys/product-collection/selected/validation.js +1 -1
  289. package/dpr/routes/journeys/product-collection/selected/validation.js.map +1 -1
  290. package/dpr/routes/journeys/request-missing-report/form/controller.js +1 -1
  291. package/dpr/routes/journeys/request-missing-report/form/controller.js.map +3 -3
  292. package/dpr/routes/journeys/request-missing-report/form/controller.ts +21 -19
  293. package/dpr/routes/journeys/request-missing-report/form/routes.js +1 -1
  294. package/dpr/routes/journeys/request-missing-report/form/routes.js.map +1 -1
  295. package/dpr/routes/journeys/request-missing-report/form/tests.cy.js +1 -1
  296. package/dpr/routes/journeys/request-missing-report/form/tests.cy.js.map +1 -1
  297. package/dpr/routes/journeys/request-missing-report/form/validation.js +1 -1
  298. package/dpr/routes/journeys/request-missing-report/form/validation.js.map +1 -1
  299. package/dpr/routes/journeys/request-missing-report/routes.js +1 -1
  300. package/dpr/routes/journeys/request-missing-report/routes.js.map +1 -1
  301. package/dpr/routes/journeys/request-missing-report/submitted/controller.js +1 -1
  302. package/dpr/routes/journeys/request-missing-report/submitted/controller.js.map +1 -1
  303. package/dpr/routes/journeys/request-missing-report/submitted/routes.js +1 -1
  304. package/dpr/routes/journeys/request-missing-report/submitted/routes.js.map +1 -1
  305. package/dpr/routes/journeys/request-missing-report/submitted/tests.cy.js +1 -1
  306. package/dpr/routes/journeys/request-missing-report/submitted/tests.cy.js.map +1 -1
  307. package/dpr/routes/journeys/request-missing-report/tests.cy.js +1 -1
  308. package/dpr/routes/journeys/request-missing-report/tests.cy.js.map +2 -2
  309. package/dpr/routes/journeys/request-missing-report/tests.cy.ts +1 -1
  310. package/dpr/routes/journeys/request-report/controller.js +1 -1
  311. package/dpr/routes/journeys/request-report/controller.js.map +3 -3
  312. package/dpr/routes/journeys/request-report/controller.ts +1 -1
  313. package/dpr/routes/journeys/request-report/filters/controller.js +1 -1
  314. package/dpr/routes/journeys/request-report/filters/controller.js.map +3 -3
  315. package/dpr/routes/journeys/request-report/filters/controller.ts +7 -8
  316. package/dpr/routes/journeys/request-report/filters/routes.js +1 -1
  317. package/dpr/routes/journeys/request-report/filters/routes.js.map +1 -1
  318. package/dpr/routes/journeys/request-report/filters/tests.cy.js +1 -1
  319. package/dpr/routes/journeys/request-report/filters/tests.cy.js.map +1 -1
  320. package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
  321. package/dpr/routes/journeys/request-report/filters/utils.js.map +3 -3
  322. package/dpr/routes/journeys/request-report/filters/utils.ts +38 -23
  323. package/dpr/routes/journeys/request-report/filters/view.njk +2 -1
  324. package/dpr/routes/journeys/request-report/routes.js +1 -1
  325. package/dpr/routes/journeys/request-report/routes.js.map +2 -2
  326. package/dpr/routes/journeys/request-report/routes.ts +2 -2
  327. package/dpr/routes/journeys/request-report/status/controller.js +1 -1
  328. package/dpr/routes/journeys/request-report/status/controller.js.map +3 -3
  329. package/dpr/routes/journeys/request-report/status/controller.ts +4 -4
  330. package/dpr/routes/journeys/request-report/status/routes.js +1 -1
  331. package/dpr/routes/journeys/request-report/status/routes.js.map +1 -1
  332. package/dpr/routes/journeys/request-report/status/tests.cy.js +1 -1
  333. package/dpr/routes/journeys/request-report/status/tests.cy.js.map +2 -2
  334. package/dpr/routes/journeys/request-report/status/tests.cy.ts +9 -4
  335. package/dpr/routes/journeys/request-report/status/utils.js +1 -1
  336. package/dpr/routes/journeys/request-report/status/utils.js.map +3 -3
  337. package/dpr/routes/journeys/request-report/status/utils.ts +10 -13
  338. package/dpr/routes/journeys/request-report/tests.cy.js +1 -1
  339. package/dpr/routes/journeys/request-report/tests.cy.js.map +2 -2
  340. package/dpr/routes/journeys/request-report/tests.cy.ts +14 -11
  341. package/dpr/routes/journeys/routes.js +1 -1
  342. package/dpr/routes/journeys/routes.js.map +1 -1
  343. package/dpr/routes/journeys/view-report/async/controller.js +1 -1
  344. package/dpr/routes/journeys/view-report/async/controller.js.map +3 -3
  345. package/dpr/routes/journeys/view-report/async/controller.ts +4 -4
  346. package/dpr/routes/journeys/view-report/async/dashboard/controller.js +1 -1
  347. package/dpr/routes/journeys/view-report/async/dashboard/controller.js.map +3 -3
  348. package/dpr/routes/journeys/view-report/async/dashboard/controller.ts +4 -4
  349. package/dpr/routes/journeys/view-report/async/dashboard/routes.js +1 -1
  350. package/dpr/routes/journeys/view-report/async/dashboard/routes.js.map +1 -1
  351. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js +1 -1
  352. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js.map +2 -2
  353. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.ts +2 -2
  354. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  355. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  356. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +6 -8
  357. package/dpr/routes/journeys/view-report/async/report/controller.js +1 -1
  358. package/dpr/routes/journeys/view-report/async/report/controller.js.map +3 -3
  359. package/dpr/routes/journeys/view-report/async/report/controller.ts +5 -5
  360. package/dpr/routes/journeys/view-report/async/report/routes.js +1 -1
  361. package/dpr/routes/journeys/view-report/async/report/routes.js.map +1 -1
  362. package/dpr/routes/journeys/view-report/async/report/tests.cy.js +1 -1
  363. package/dpr/routes/journeys/view-report/async/report/tests.cy.js.map +2 -2
  364. package/dpr/routes/journeys/view-report/async/report/tests.cy.ts +9 -7
  365. package/dpr/routes/journeys/view-report/async/report/types.js +1 -1
  366. package/dpr/routes/journeys/view-report/async/report/types.js.map +2 -2
  367. package/dpr/routes/journeys/view-report/async/report/types.ts +8 -8
  368. package/dpr/routes/journeys/view-report/async/report/utils.js +1 -1
  369. package/dpr/routes/journeys/view-report/async/report/utils.js.map +2 -2
  370. package/dpr/routes/journeys/view-report/async/report/utils.ts +16 -18
  371. package/dpr/routes/journeys/view-report/async/routes.js +1 -1
  372. package/dpr/routes/journeys/view-report/async/routes.js.map +1 -1
  373. package/dpr/routes/journeys/view-report/controller.js +1 -1
  374. package/dpr/routes/journeys/view-report/controller.js.map +3 -3
  375. package/dpr/routes/journeys/view-report/controller.ts +1 -1
  376. package/dpr/routes/journeys/view-report/routes.js +1 -1
  377. package/dpr/routes/journeys/view-report/routes.js.map +2 -2
  378. package/dpr/routes/journeys/view-report/routes.ts +6 -3
  379. package/dpr/routes/journeys/view-report/sync/load-report/controller.js +1 -1
  380. package/dpr/routes/journeys/view-report/sync/load-report/controller.js.map +2 -2
  381. package/dpr/routes/journeys/view-report/sync/load-report/controller.ts +1 -1
  382. package/dpr/routes/journeys/view-report/sync/load-report/routes.js +1 -1
  383. package/dpr/routes/journeys/view-report/sync/load-report/routes.js.map +1 -1
  384. package/dpr/routes/journeys/view-report/sync/report/controller.js +1 -1
  385. package/dpr/routes/journeys/view-report/sync/report/controller.js.map +3 -3
  386. package/dpr/routes/journeys/view-report/sync/report/controller.ts +6 -6
  387. package/dpr/routes/journeys/view-report/sync/report/routes.js +1 -1
  388. package/dpr/routes/journeys/view-report/sync/report/routes.js.map +1 -1
  389. package/dpr/routes/journeys/view-report/sync/report/utils.js +1 -1
  390. package/dpr/routes/journeys/view-report/sync/report/utils.js.map +3 -3
  391. package/dpr/routes/journeys/view-report/sync/report/utils.ts +29 -19
  392. package/dpr/routes/journeys/view-report/sync/routes.js +1 -1
  393. package/dpr/routes/journeys/view-report/sync/routes.js.map +1 -1
  394. package/dpr/routes/journeys/view-report/sync/tests.cy.js +1 -1
  395. package/dpr/routes/journeys/view-report/sync/tests.cy.js.map +2 -2
  396. package/dpr/routes/journeys/view-report/sync/tests.cy.ts +1 -1
  397. package/dpr/routes/journeys/view-report/utils.js +1 -1
  398. package/dpr/routes/journeys/view-report/utils.js.map +3 -3
  399. package/dpr/routes/journeys/view-report/utils.ts +22 -12
  400. package/dpr/services/dashboardService.js +1 -1
  401. package/dpr/services/dashboardService.js.map +3 -3
  402. package/dpr/services/dashboardService.ts +1 -3
  403. package/dpr/services/defaultFilterValuesService.js +1 -1
  404. package/dpr/services/defaultFilterValuesService.js.map +3 -3
  405. package/dpr/services/defaultFilterValuesService.ts +34 -15
  406. package/dpr/services/index.js +1 -1
  407. package/dpr/services/index.js.map +1 -1
  408. package/dpr/services/missingReport/missingReportService.js +2 -0
  409. package/dpr/services/missingReport/missingReportService.js.map +7 -0
  410. package/dpr/services/missingReport/missingReportService.ts +26 -0
  411. package/dpr/services/productCollection/productCollectionService.js +1 -1
  412. package/dpr/services/productCollection/productCollectionService.js.map +3 -3
  413. package/dpr/services/productCollection/productCollectionService.ts +19 -14
  414. package/dpr/services/productCollection/productCollectionStoreService.js +1 -1
  415. package/dpr/services/productCollection/productCollectionStoreService.js.map +3 -3
  416. package/dpr/services/productCollection/productCollectionStoreService.ts +9 -3
  417. package/dpr/services/reportStoreService.js +1 -1
  418. package/dpr/services/reportStoreService.js.map +2 -2
  419. package/dpr/services/reportStoreService.ts +1 -1
  420. package/dpr/services/reportingService.js +1 -1
  421. package/dpr/services/reportingService.js.map +3 -3
  422. package/dpr/services/reportingService.ts +1 -3
  423. package/dpr/setUpNunjucksFilters.js +1 -1
  424. package/dpr/setUpNunjucksFilters.js.map +1 -1
  425. package/dpr/types/AsyncReportUtils.js +1 -1
  426. package/dpr/types/AsyncReportUtils.js.map +2 -2
  427. package/dpr/types/AsyncReportUtils.ts +2 -1
  428. package/dpr/types/Bookmark.js +1 -1
  429. package/dpr/types/Bookmark.js.map +2 -2
  430. package/dpr/types/Bookmark.ts +9 -3
  431. package/dpr/types/Charts.js +1 -1
  432. package/dpr/types/Charts.js.map +1 -1
  433. package/dpr/types/Download.js +1 -1
  434. package/dpr/types/Download.js.map +1 -1
  435. package/dpr/types/DprConfig.js +1 -1
  436. package/dpr/types/DprConfig.js.map +2 -2
  437. package/dpr/types/DprConfig.ts +8 -0
  438. package/dpr/types/DprUser.js +1 -1
  439. package/dpr/types/DprUser.js.map +2 -2
  440. package/dpr/types/DprUser.ts +2 -2
  441. package/dpr/types/EmbeddedReportUtils.js +1 -1
  442. package/dpr/types/EmbeddedReportUtils.js.map +1 -1
  443. package/dpr/types/ExecutionData.d.js +1 -1
  444. package/dpr/types/ExecutionData.d.js.map +2 -2
  445. package/dpr/types/ExecutionData.d.ts +2 -2
  446. package/dpr/types/Metrics.js +1 -1
  447. package/dpr/types/Metrics.js.map +2 -2
  448. package/dpr/types/Metrics.ts +1 -1
  449. package/dpr/types/ReportQuery.js +1 -1
  450. package/dpr/types/ReportQuery.js.map +2 -2
  451. package/dpr/types/ReportQuery.ts +15 -11
  452. package/dpr/types/ReportStore.js +1 -1
  453. package/dpr/types/ReportStore.js.map +1 -1
  454. package/dpr/types/Services.d.js +1 -1
  455. package/dpr/types/Services.d.js.map +2 -2
  456. package/dpr/types/Services.d.ts +8 -8
  457. package/dpr/types/Templates.d.js +1 -1
  458. package/dpr/types/Templates.d.js.map +1 -1
  459. package/dpr/types/UserReports.js +1 -1
  460. package/dpr/types/UserReports.js.map +2 -2
  461. package/dpr/types/UserReports.ts +29 -15
  462. package/dpr/types/api.d.js +1 -1
  463. package/dpr/types/api.d.js.map +1 -1
  464. package/dpr/types/index.d.js +1 -1
  465. package/dpr/types/index.d.js.map +2 -2
  466. package/dpr/types/index.d.ts +1 -1
  467. package/dpr/utils/CollatedSummaryBuilder/CollatedSummaryBuilder.js +1 -1
  468. package/dpr/utils/CollatedSummaryBuilder/CollatedSummaryBuilder.js.map +1 -1
  469. package/dpr/utils/CollatedSummaryBuilder/CollatedSummaryBuilder.test.ts +2 -0
  470. package/dpr/utils/CreateDprServices.js +2 -0
  471. package/dpr/utils/CreateDprServices.js.map +7 -0
  472. package/dpr/utils/CreateDprServices.ts +73 -0
  473. package/dpr/utils/DataTableBuilder/DataTableBuilder.js +1 -1
  474. package/dpr/utils/DataTableBuilder/DataTableBuilder.js.map +1 -1
  475. package/dpr/utils/DataTableBuilder/DataTableBuilder.test.ts +10 -0
  476. package/dpr/utils/DataTableBuilder/types.d.js +1 -1
  477. package/dpr/utils/DataTableBuilder/types.d.js.map +2 -2
  478. package/dpr/utils/DataTableBuilder/types.d.ts +3 -3
  479. package/dpr/utils/DateMapper/DateMapper.js +1 -1
  480. package/dpr/utils/DateMapper/DateMapper.js.map +2 -2
  481. package/dpr/utils/DateMapper/DateMapper.test.ts +22 -9
  482. package/dpr/utils/DateMapper/DateMapper.ts +9 -11
  483. package/dpr/utils/DateMapper/types.d.js +1 -1
  484. package/dpr/utils/DateMapper/types.d.js.map +1 -1
  485. package/dpr/utils/ErrorHandler.js +2 -0
  486. package/dpr/utils/ErrorHandler.js.map +7 -0
  487. package/dpr/utils/ErrorHandler.ts +85 -0
  488. package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.js +1 -1
  489. package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.js.map +2 -2
  490. package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.test.ts +13 -2
  491. package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.ts +3 -3
  492. package/dpr/utils/ParentChildDataTableBuilder/types.d.js +1 -1
  493. package/dpr/utils/ParentChildDataTableBuilder/types.d.js.map +1 -1
  494. package/dpr/utils/Personalisation/personalisationUtils.js +1 -1
  495. package/dpr/utils/Personalisation/personalisationUtils.js.map +3 -3
  496. package/dpr/utils/Personalisation/personalisationUtils.ts +6 -2
  497. package/dpr/utils/Personalisation/types.d.js +1 -1
  498. package/dpr/utils/Personalisation/types.d.js.map +1 -1
  499. package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.js +1 -1
  500. package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.js.map +2 -2
  501. package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.test.ts +5 -0
  502. package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.ts +1 -1
  503. package/dpr/utils/SectionedDataTableBuilder/types.d.js +1 -1
  504. package/dpr/utils/SectionedDataTableBuilder/types.d.js.map +1 -1
  505. package/dpr/utils/SectionedFieldsTableBuilder/SectionedFieldsTableBuilder.js +1 -1
  506. package/dpr/utils/SectionedFieldsTableBuilder/SectionedFieldsTableBuilder.js.map +2 -2
  507. package/dpr/utils/SectionedFieldsTableBuilder/SectionedFieldsTableBuilder.test.ts +7 -4
  508. package/dpr/utils/SectionedFieldsTableBuilder/SectionedFieldsTableBuilder.ts +3 -3
  509. package/dpr/utils/SummaryDataTableBuilder/SummaryDataTableBuilder.js +1 -1
  510. package/dpr/utils/SummaryDataTableBuilder/SummaryDataTableBuilder.js.map +1 -1
  511. package/dpr/utils/SummaryDataTableBuilder/SummaryDataTableBuilder.test.ts +1 -0
  512. package/dpr/utils/UserStoreItemBuilder.js +1 -1
  513. package/dpr/utils/UserStoreItemBuilder.js.map +2 -2
  514. package/dpr/utils/UserStoreItemBuilder.ts +19 -32
  515. package/dpr/utils/arrayUtils.js +1 -1
  516. package/dpr/utils/arrayUtils.js.map +1 -1
  517. package/dpr/utils/datasetHelper.js +1 -1
  518. package/dpr/utils/datasetHelper.js.map +2 -2
  519. package/dpr/utils/datasetHelper.test.ts +21 -33
  520. package/dpr/utils/datasetHelper.ts +12 -17
  521. package/dpr/utils/definitionUtils.js +1 -1
  522. package/dpr/utils/definitionUtils.js.map +3 -3
  523. package/dpr/utils/definitionUtils.ts +14 -3
  524. package/dpr/utils/index.js +1 -1
  525. package/dpr/utils/index.js.map +1 -1
  526. package/dpr/utils/indexedAccesHelper.js +2 -0
  527. package/dpr/utils/indexedAccesHelper.js.map +7 -0
  528. package/dpr/utils/indexedAccesHelper.ts +24 -0
  529. package/dpr/utils/localsHelper.js +1 -1
  530. package/dpr/utils/localsHelper.js.map +2 -2
  531. package/dpr/utils/localsHelper.ts +8 -8
  532. package/dpr/utils/logger.js +1 -1
  533. package/dpr/utils/logger.js.map +2 -2
  534. package/dpr/utils/logger.ts +1 -1
  535. package/dpr/utils/reportListsHelper.js +1 -1
  536. package/dpr/utils/reportListsHelper.js.map +1 -1
  537. package/dpr/utils/reportStoreHelper.js +1 -1
  538. package/dpr/utils/reportStoreHelper.js.map +1 -1
  539. package/dpr/utils/reportStoreHelper.test.ts +3 -2
  540. package/dpr/utils/requestStatusHelper.js +1 -1
  541. package/dpr/utils/requestStatusHelper.js.map +3 -3
  542. package/dpr/utils/requestStatusHelper.ts +29 -42
  543. package/dpr/utils/sanitisedError.js +1 -1
  544. package/dpr/utils/sanitisedError.js.map +2 -2
  545. package/dpr/utils/sanitisedError.ts +1 -1
  546. package/dpr/utils/urlHelper.js +1 -1
  547. package/dpr/utils/urlHelper.js.map +2 -2
  548. package/dpr/utils/urlHelper.ts +4 -4
  549. package/dpr/validation/validate.js +1 -1
  550. package/dpr/validation/validate.js.map +2 -2
  551. package/dpr/validation/validate.ts +2 -2
  552. package/package.json +4 -2
  553. package/dpr/components/error-summary/utils.js +0 -2
  554. package/dpr/components/error-summary/utils.js.map +0 -7
  555. package/dpr/components/error-summary/utils.test.ts +0 -54
  556. package/dpr/components/error-summary/utils.ts +0 -65
  557. package/dpr/services/missingReport/missingReportClient.js +0 -2
  558. package/dpr/services/missingReport/missingReportClient.js.map +0 -7
  559. package/dpr/utils/ReportStoreServiceUtils.js +0 -2
  560. package/dpr/utils/ReportStoreServiceUtils.js.map +0 -7
  561. package/dpr/utils/ReportStoreServiceUtils.ts +0 -140
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/dpr/components/_charts/chart/heatmap/HeatmapChart.ts"],
4
- "sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport dayjs from 'dayjs'\nimport { Granularity } from '../../../_inputs/granular-date-range/types'\nimport { DashboardDataResponse } from '../../../../types/Metrics'\nimport {\n DashboardVisualisationType,\n DashboardVisualisationBucket,\n DashboardVisualisationData,\n} from '../../../_dashboards/dashboard-visualisation/types'\nimport { MatrixChartData } from './types'\nimport DatasetHelper from '../../../../utils/datasetHelper'\nimport DashboardVisualisationClass from '../../../_dashboards/dashboard-visualisation/DashboardVisualisation'\nimport Buckets from '../Buckets'\nimport { components } from '../../../../types/api'\n\nclass HeatmapChart extends DashboardVisualisationClass {\n private granularity: Granularity\n\n private data: MatrixChartData[] = []\n\n private dayDateFormat = 'DD/MM/YYYY'\n\n private valueKey = ''\n\n private label = ''\n\n private buckets: DashboardVisualisationBucket[] = []\n\n private bucketsHelper: Buckets\n\n private isTimeseriesChart: boolean\n\n constructor(\n responseData: DashboardDataResponse[],\n granularity: Granularity,\n definition: components['schemas']['DashboardVisualisationDefinition'],\n ) {\n super(responseData, definition)\n\n this.granularity = granularity\n this.isTimeseriesChart = <DashboardVisualisationType>this.type === DashboardVisualisationType.LINE_TIMESERIES\n this.setLabel()\n this.initUnit()\n this.bucketsHelper = new Buckets(responseData, this.definition, this.valueKey, true)\n this.buckets = this.bucketsHelper.getBuckets()\n }\n\n initUnit = () => {\n // todo\n this.unit = this.columns.measures[0].unit ? this.columns.measures[0].unit : undefined\n }\n\n private setLabel = () => {\n const { id, display } = this.columns.measures[1]\n this.valueKey = id\n this.label = display || ''\n }\n\n private validateDefinition = () => {\n const { id, columns, type } = this.definition\n const errors = []\n\n // Validate measures\n if (columns.measures.length !== 2) {\n errors.push(`Measures should only have 2 columns defined. Only found ${columns.measures.length}`)\n } else if (<DashboardVisualisationType>type === DashboardVisualisationType.MATRIX_TIMESERIES) {\n if (columns.measures[0].id !== 'ts') {\n errors.push(`measure at index 0 has incorrect ID. Expected ID to be \"ts\". Found \"${columns.measures[0].id}\"`)\n }\n }\n\n // Throw the error\n if (errors.length) {\n const message = `Validation: Visualisaton definition: ID: ${id}, type: ${type}, errors: ${errors.join(',')}`\n throw new Error(message)\n }\n }\n\n private initTimeseriesData = () => {\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(this.responseData)\n\n this.data = timeBlockData.map((tsData) => {\n const { raw, rag } = tsData[0][this.valueKey]\n const tsRaw = tsData[0].ts.raw\n\n const v: MatrixChartData['v'] = Number(raw)\n const r: MatrixChartData['r'] = rag !== undefined ? Number(tsData[0][this.valueKey].rag) : undefined\n let x: MatrixChartData['x'] = 0\n let y: MatrixChartData['y'] = 0\n\n switch (this.granularity) {\n case 'hourly':\n break\n case 'weekly':\n x = dayjs(tsRaw, this.dayDateFormat).format('ddd')\n y = dayjs(tsRaw, this.dayDateFormat).week()\n break\n case 'daily':\n x = dayjs(tsRaw, this.dayDateFormat).format('MMM YY')\n y = dayjs(tsRaw, this.dayDateFormat).format('D')\n break\n case 'monthly':\n {\n const ts = (<string>tsRaw).split(' ')\n x = ts[1]\n y = ts[0]\n }\n break\n case 'annually':\n x = 'year'\n y = <string>tsRaw\n break\n default:\n x = dayjs(tsRaw, this.dayDateFormat).format('MMM YY')\n y = dayjs(tsRaw, this.dayDateFormat).format('D')\n break\n }\n return { y, x, v, r }\n })\n }\n\n private bucketData = () => {\n this.data = this.data.map((d) => {\n const { v, r } = d\n const bucketData = this.bucketsHelper.getBucketForValue(v, r)\n return { ...d, c: bucketData.colour }\n })\n }\n\n build = (): DashboardVisualisationData => {\n this.validateDefinition()\n this.initTimeseriesData()\n this.bucketData()\n\n return {\n type: this.type,\n unit: this.unit,\n timeseries: true,\n data: {\n datasets: [\n {\n label: this.label,\n data: this.data,\n },\n ],\n },\n }\n }\n}\n\nexport { HeatmapChart }\nexport default HeatmapChart\n"],
5
- "mappings": "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",
6
- "names": ["HeatmapChart_exports", "__export", "HeatmapChart", "HeatmapChart_default", "__toCommonJS", "import_dayjs", "import_types", "import_datasetHelper", "import_DashboardVisualisation", "import_Buckets", "DashboardVisualisationClass", "responseData", "granularity", "definition", "id", "display", "columns", "type", "errors", "message", "timeBlockData", "DatasetHelper", "tsData", "raw", "rag", "tsRaw", "v", "r", "x", "y", "dayjs", "ts", "d", "bucketData", "Buckets"]
4
+ "sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport dayjs from 'dayjs'\nimport { Granularity } from '../../../_inputs/granular-date-range/types'\nimport { DashboardDataResponse } from '../../../../types/Metrics'\nimport {\n DashboardVisualisationType,\n DashboardVisualisationData,\n} from '../../../_dashboards/dashboard-visualisation/types'\nimport { MatrixChartData } from './types'\nimport DatasetHelper from '../../../../utils/datasetHelper'\nimport DashboardVisualisationClass from '../../../_dashboards/dashboard-visualisation/DashboardVisualisation'\nimport Buckets from '../Buckets'\nimport { components } from '../../../../types/api'\n\nclass HeatmapChart extends DashboardVisualisationClass {\n private granularity: Granularity\n\n private data: MatrixChartData[] = []\n\n private dayDateFormat = 'DD/MM/YYYY'\n\n private valueKey = ''\n\n private label = ''\n\n private bucketsHelper: Buckets\n\n constructor(\n responseData: DashboardDataResponse[],\n granularity: Granularity,\n definition: components['schemas']['DashboardVisualisationDefinition'],\n ) {\n super(responseData, definition)\n\n this.granularity = granularity\n this.setLabel()\n this.initUnit()\n this.bucketsHelper = new Buckets(responseData, this.definition, this.valueKey, true)\n }\n\n private setLabel = () => {\n const { id, display } = this.columns.measures[1]\n this.valueKey = id\n this.label = display || ''\n }\n\n private validateDefinition = () => {\n const { id, columns, type } = this.definition\n const errors = []\n\n // Validate measures\n if (columns.measures.length !== 2) {\n errors.push(`Measures should only have 2 columns defined. Only found ${columns.measures.length}`)\n } else if (<DashboardVisualisationType>type === DashboardVisualisationType.MATRIX_TIMESERIES) {\n if (columns.measures[0].id !== 'ts') {\n errors.push(`measure at index 0 has incorrect ID. Expected ID to be \"ts\". Found \"${columns.measures[0].id}\"`)\n }\n }\n\n // Throw the error\n if (errors.length) {\n const message = `Validation: Visualisaton definition: ID: ${id}, type: ${type}, errors: ${errors.join(',')}`\n throw new Error(message)\n }\n }\n\n private initTimeseriesData = () => {\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(this.responseData)\n\n this.data = timeBlockData.map((tsData) => {\n const { raw, rag } = tsData[0][this.valueKey]\n const tsRaw = tsData[0]['ts'].raw\n\n const v: MatrixChartData['v'] = Number(raw)\n const r: MatrixChartData['r'] = rag !== undefined ? Number(tsData[0][this.valueKey].rag) : undefined\n let x: MatrixChartData['x'] = 0\n let y: MatrixChartData['y'] = 0\n\n switch (this.granularity) {\n case 'hourly':\n break\n case 'weekly':\n x = dayjs(tsRaw, this.dayDateFormat).format('ddd')\n y = dayjs(tsRaw, this.dayDateFormat).week()\n break\n case 'daily':\n x = dayjs(tsRaw, this.dayDateFormat).format('MMM YY')\n y = dayjs(tsRaw, this.dayDateFormat).format('D')\n break\n case 'monthly':\n {\n const ts = (<string>tsRaw).split(' ')\n x = ts[1]\n y = ts[0]\n }\n break\n case 'annually':\n x = 'year'\n y = <string>tsRaw\n break\n default:\n x = dayjs(tsRaw, this.dayDateFormat).format('MMM YY')\n y = dayjs(tsRaw, this.dayDateFormat).format('D')\n break\n }\n return { y, x, v, r }\n })\n }\n\n private bucketData = () => {\n this.data = this.data.map((d) => {\n const { v, r } = d\n const bucketData = this.bucketsHelper.getBucketForValue(v, r)\n return { ...d, c: bucketData.colour }\n })\n }\n\n build = (): DashboardVisualisationData => {\n this.validateDefinition()\n this.initTimeseriesData()\n this.bucketData()\n\n return {\n type: this.type,\n unit: this.unit,\n timeseries: true,\n data: {\n datasets: [\n {\n label: this.label,\n data: this.data,\n },\n ],\n },\n }\n }\n}\n\nexport { HeatmapChart }\nexport default HeatmapChart\n"],
5
+ "mappings": "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",
6
+ "names": ["HeatmapChart_exports", "__export", "HeatmapChart", "HeatmapChart_default", "__toCommonJS", "import_dayjs", "import_types", "import_datasetHelper", "import_DashboardVisualisation", "import_Buckets", "DashboardVisualisationClass", "responseData", "granularity", "definition", "id", "display", "columns", "type", "errors", "message", "timeBlockData", "DatasetHelper", "tsData", "raw", "rag", "tsRaw", "r", "x", "y", "dayjs", "ts", "d", "v", "bucketData", "Buckets"]
7
7
  }
@@ -4,7 +4,6 @@ import { Granularity } from '../../../_inputs/granular-date-range/types'
4
4
  import { DashboardDataResponse } from '../../../../types/Metrics'
5
5
  import {
6
6
  DashboardVisualisationType,
7
- DashboardVisualisationBucket,
8
7
  DashboardVisualisationData,
9
8
  } from '../../../_dashboards/dashboard-visualisation/types'
10
9
  import { MatrixChartData } from './types'
@@ -24,12 +23,8 @@ class HeatmapChart extends DashboardVisualisationClass {
24
23
 
25
24
  private label = ''
26
25
 
27
- private buckets: DashboardVisualisationBucket[] = []
28
-
29
26
  private bucketsHelper: Buckets
30
27
 
31
- private isTimeseriesChart: boolean
32
-
33
28
  constructor(
34
29
  responseData: DashboardDataResponse[],
35
30
  granularity: Granularity,
@@ -38,16 +33,9 @@ class HeatmapChart extends DashboardVisualisationClass {
38
33
  super(responseData, definition)
39
34
 
40
35
  this.granularity = granularity
41
- this.isTimeseriesChart = <DashboardVisualisationType>this.type === DashboardVisualisationType.LINE_TIMESERIES
42
36
  this.setLabel()
43
37
  this.initUnit()
44
38
  this.bucketsHelper = new Buckets(responseData, this.definition, this.valueKey, true)
45
- this.buckets = this.bucketsHelper.getBuckets()
46
- }
47
-
48
- initUnit = () => {
49
- // todo
50
- this.unit = this.columns.measures[0].unit ? this.columns.measures[0].unit : undefined
51
39
  }
52
40
 
53
41
  private setLabel = () => {
@@ -81,7 +69,7 @@ class HeatmapChart extends DashboardVisualisationClass {
81
69
 
82
70
  this.data = timeBlockData.map((tsData) => {
83
71
  const { raw, rag } = tsData[0][this.valueKey]
84
- const tsRaw = tsData[0].ts.raw
72
+ const tsRaw = tsData[0]['ts'].raw
85
73
 
86
74
  const v: MatrixChartData['v'] = Number(raw)
87
75
  const r: MatrixChartData['r'] = rag !== undefined ? Number(tsData[0][this.valueKey].rag) : undefined
@@ -1,2 +1,2 @@
1
- var a=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var x=(e,r,b,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of m(r))!u.call(e,n)&&n!==b&&a(e,n,{get:()=>r[n],enumerable:!(t=i(r,n))||t.enumerable});return e};var g=e=>x(a({},"__esModule",{value:!0}),e);var s={};module.exports=g(s);
1
+ "use strict";var a=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var x=(e,r,i,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of b(r))!m.call(e,n)&&n!==i&&a(e,n,{get:()=>r[n],enumerable:!(t=u(r,n))||t.enumerable});return e};var d=e=>x(a({},"__esModule",{value:!0}),e);var f={};module.exports=d(f);
2
2
  //# sourceMappingURL=types.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/dpr/components/_charts/chart/heatmap/types.ts"],
4
- "sourcesContent": ["export interface MatrixChartData {\n x: number | string\n y: number | string\n r?: number\n v: number\n}\n"],
5
- "mappings": "kWAAA,IAAAA,EAAA,kBAAAC,EAAAD",
4
+ "sourcesContent": ["export interface MatrixChartData {\n x: number | string\n y: number | string\n r?: number | undefined\n v: number\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_exports", "__toCommonJS"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  export interface MatrixChartData {
2
2
  x: number | string
3
3
  y: number | string
4
- r?: number
4
+ r?: number | undefined
5
5
  v: number
6
6
  }
@@ -1,2 +1,2 @@
1
- var G=Object.create;var f=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var j=(a,s)=>{for(var e in s)f(a,e,{get:s[e],enumerable:!0})},V=(a,s,e,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of A(s))!H.call(a,o)&&o!==e&&f(a,o,{get:()=>s[o],enumerable:!(t=$(s,o))||t.enumerable});return a};var p=(a,s,e)=>(e=a!=null?G(F(a)):{},V(s||!a||!a.__esModule?f(e,"default",{value:a,enumerable:!0}):e,a)),v=a=>V(f({},"__esModule",{value:!0}),a);var Q={};j(Q,{createChart:()=>S,createMatrixChart:()=>B,createTimeseriesCharts:()=>L,default:()=>P});module.exports=v(Q);var x=p(require("dayjs")),T=p(require("dayjs/plugin/weekOfYear")),h=p(require("../../utils/datasetHelper")),R=p(require("../_dashboards/dashboard-list/utils")),k=require("../_inputs/granular-date-range/types"),M=p(require("./chart/heatmap/HeatmapChart"));x.default.extend(T.default);const S=(a,s)=>{let e,t,o;const{dataSetRows:n,snapshotData:r}=O(a,s);return n.length&&(t=Y(a,r),e=z(a,n),o=C(a,n)),{details:o,table:e,chart:t}},L=(a,s)=>{let e,t,o;const{latestData:n,dataSetRows:r,timeseriesData:u}=g(a,s);return r.length&&(t=N(a,u),e=w(a,u),o=C(a,n,!0)),{details:o,table:e,chart:t}},B=(a,s,e)=>{let t,o,n,r=k.Granularity.DAILY;Object.keys(e).forEach(c=>{c.includes("granularity")&&(r=e[c])});const{latestData:u,dataSetRows:i,timeseriesData:l}=g(a,s);return i.length&&(o=new M.default(l,r,a).build(),t=w(a,l),n=C(a,u,!0)),{details:n,table:t,chart:o}},O=(a,s)=>{const e=h.default.getLastestDataset(s),t=h.default.getDatasetRows(a,e),o=h.default.filterRowsByDisplayColumns(a,t,!0);return{dataSetRows:t,snapshotData:o}},g=(a,s)=>{const e=h.default.getLastestDataset(s),t=h.default.getDatasetRows(a,s),o=h.default.filterRowsByDisplayColumns(a,t,!0);return{latestData:e,dataSetRows:t,timeseriesData:o}},C=(a,s,e=!1)=>{const t=[],o=W(a,s,e);return s[0]?.ts&&t.push({label:"Values for:",value:s[0]?.ts.raw}),{meta:t,headlines:o}},W=(a,s,e=!1)=>{const t=[],{columns:o}=a,{measures:n}=o,r=!!n.find(d=>d.axis);let u,i,l,c;return e?(i=n.find(d=>d.id!=="ts"),i&&(c=`${s[0].ts.raw}`,l=+s[0][i.id].raw,u={label:c,value:l})):(i=r?n.find(d=>d.axis&&d.axis==="y"):n[0],i&&(c=`Total ${i.display.toLowerCase()}`,l=s.reduce((d,D)=>d+ +D[i.id].raw,0),u={label:c,value:l})),t.push(u),t},Y=(a,s)=>{const{type:e,columns:t}=a,{measures:o}=t,n=!!o.find(l=>l.axis);let r,u,i;return n?{labels:r,unit:u,datasets:i}=U(t,s):{labels:r,unit:u,datasets:i}=E(t,s),{type:e,unit:u,data:{labels:r,datasets:i}}},E=(a,s)=>{const{keys:e,measures:t}=a,o=t.map(i=>i.display),n=e[e.length-1]?.id,r=t[0].unit?t[0].unit:void 0,u=s.map(i=>{const l=i[n]?`${i[n].raw}`:"All",c=t.map(D=>{const m=D.id;return i[m]?+i[m].raw:0}),d=c.reduce((D,m)=>D+m,0);return{label:l,data:c,total:d}});return{labels:o,unit:r,datasets:u}},U=(a,s)=>{const{measures:e,keys:t}=a,o=e.find(d=>d.axis==="x"),n=e.find(d=>d.axis==="y"),r=n?.unit||void 0,u=h.default.getGroupKey(t,s),i=u?h.default.groupRowsByKey(s,u.id):[s],l=i[0]?.map(d=>`${d[o.id].raw}`),c=i.map(d=>{const D=d.map(m=>+m[n.id].raw);return{label:u?`${d[0][u.id].raw}`:n.display,data:D,total:D.reduce((m,b)=>m+b,0)}});return{labels:l,unit:r,datasets:c}},z=(a,s)=>{const{columns:e}=a,{keys:t,measures:o}=e,r=[...t,...o].map(l=>({text:l.display})),u=h.default.filterRowsByDisplayColumns(a,s,!0),i=R.default.createTableRows(u);return{head:r,rows:i}},N=(a,s)=>{const{columns:e}=a,{keys:t,measures:o}=e,n=o[0].unit?o[0].unit:void 0,r=a.type.split("-")[0],i=h.default.getGroupKey(t,s).id,l=h.default.groupRowsByTimestamp(s),c=l.map(m=>m[0].ts.raw),d=l[0].length,D=[];for(let m=0;m<d;m+=1){const b=l.map(y=>+y[m][o[1].id].raw),J=b.reduce((y,K)=>y+K,0),I=l[0][m][i].raw;D.push({data:b,label:I,total:J})}return{type:r,unit:n,timeseries:!0,data:{labels:c,datasets:D}}},w=(a,s)=>{const{columns:e}=a,{keys:t,measures:o}=e;let n=s.flat(),r=[...o];if(s.length>1){const l=r.findIndex(D=>D.id==="ts"),c=r[l];r.splice(l,1),r=[...t.filter(D=>D.id!=="ts"),...r],r.unshift(c)}else n=h.default.filterRowsByDisplayColumns(a,n);const u=r.map(l=>({text:l.display})),i=R.default.createTableRows(n);return{head:u,rows:i}};var P={createChart:S,createTimeseriesCharts:L,createMatrixChart:B};0&&(module.exports={createChart,createMatrixChart,createTimeseriesCharts});
1
+ "use strict";var A=Object.create;var R=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var Y=(a,s)=>{for(var t in s)R(a,t,{get:s[t],enumerable:!0})},T=(a,s,t,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of $(s))!H.call(a,o)&&o!==t&&R(a,o,{get:()=>s[o],enumerable:!(e=G(s,o))||e.enumerable});return a};var y=(a,s,t)=>(t=a!=null?A(F(a)):{},T(s||!a||!a.__esModule?R(t,"default",{value:a,enumerable:!0}):t,a)),j=a=>T(R({},"__esModule",{value:!0}),a);var Q={};Y(Q,{createChart:()=>J,createMatrixChart:()=>N,createTimeseriesCharts:()=>K,default:()=>P});module.exports=j(Q);var S=y(require("dayjs")),I=y(require("dayjs/plugin/weekOfYear")),h=y(require("../../utils/datasetHelper")),x=y(require("../_dashboards/dashboard-list/utils")),L=require("../_inputs/granular-date-range/types"),B=y(require("./chart/heatmap/HeatmapChart"));S.default.extend(I.default);const J=(a,s)=>{let t,e,o;const{dataSetRows:n,snapshotData:l}=v(a,s);return n.length&&(e=O(a,l),t=X(a,n),o=V(a,n)),{details:o,table:t,chart:e}},K=(a,s)=>{let t,e,o;const{latestData:n,dataSetRows:l,timeseriesData:d}=k(a,s);return l.length&&(e=z(a,d),t=M(a,d),o=V(a,n,!0)),{details:o,table:t,chart:e}},N=(a,s,t)=>{let e,o,n,l=L.Granularity.DAILY;Object.keys(t).forEach(D=>{D.includes("granularity")&&(l=t[D])});const{latestData:d,dataSetRows:i,timeseriesData:r}=k(a,s);return i.length&&(o=new B.default(r,l,a).build(),e=M(a,r),n=V(a,d,!0)),{details:n,table:e,chart:o}},v=(a,s)=>{const t=h.default.getLastestDataset(s),e=h.default.getDatasetRows(a,t),o=h.default.filterRowsByDisplayColumns(a,e,!0);return{dataSetRows:e,snapshotData:o}},k=(a,s)=>{const t=h.default.getLastestDataset(s),e=h.default.getDatasetRows(a,s),o=h.default.filterRowsByDisplayColumns(a,e,!0);return{latestData:t,dataSetRows:e,timeseriesData:o}},V=(a,s,t=!1)=>{const e=[],o=E(a,s,t);return s[0]?.ts.raw&&e.push({label:"Values for:",value:s[0]?.ts.raw}),{meta:e,headlines:o}},E=(a,s,t=!1)=>{const e=[],{columns:o}=a,{measures:n}=o,l=!!n.find(u=>u.axis);let d,i,r,D;if(t){if(i=n.find(u=>u.id!=="ts"),i){const{id:u}=i,{raw:m}=s[0][u];D=`${s[0].ts.raw}`,r=m?Number(m):void 0,r&&(d={label:D,value:r})}}else if(i=l?n.find(u=>u.axis&&u.axis==="y"):n[0],i){const u=i.display?.toLowerCase();D=u?`Total ${u}`:"Total",r=s.reduce((m,c)=>{if(i){const{id:b}=i,{raw:p}=c[b];if(p)return m+Number(p)}return m},0),d={label:D,value:r}}return d&&e.push(d),e},O=(a,s)=>{const{type:t,columns:e}=a,{measures:o}=e,n=!!o.find(r=>r.axis);let l,d,i;if(n)({labels:l,unit:d,datasets:i}=U(e,s));else{const r=W(e,s);l=r.labels,d=r.unit,i=r.datasets}return{type:t,unit:d,data:{labels:l,datasets:i}}},W=(a,s)=>{const{keys:t,measures:e}=a,o=e.map(i=>i.display||""),n=t?t[t.length-1]?.id:void 0,l=e[0].unit?e[0].unit:void 0,d=s.map(i=>{const r=n&&i[n]?`${i[n].raw}`:"All",D=e.map(m=>{const c=m.id;return i[c]&&i[c].raw?Number(i[c].raw):0}),u=D.reduce((m,c)=>m+c,0);return{label:r,data:D,total:u}});return{labels:o,unit:l,datasets:d}},U=(a,s)=>{const{measures:t,keys:e}=a,o=t.find(u=>u.axis==="x")||t[0],n=t.find(u=>u.axis==="y")||t[1];if(!o||!n)throw new Error("No X of Y Axis found in definition");const l=n?.unit||void 0,d=h.default.getGroupKey(s,e),i=d?h.default.groupRowsByKey(s,d.id):[s],r=i[0]?.map(u=>{const{id:m}=o,c=u[m];return c?`${c.raw}`:""}),D=i.map(u=>{const m=u.map(b=>{const{id:p}=n,f=b[p],w=f&&f.raw?Number(f.raw):0;return Number(w)});let c="";if(d){const b=d.id,p=u[0];c=p&&p[b]?`${p[b].raw}`:""}else c=n.display||c;return{label:c,data:m,total:m.reduce((b,p)=>b+p,0)}});return{labels:r,unit:l,datasets:D}},X=(a,s)=>{const{columns:t}=a,{measures:e}=t,l=[...t.keys||[],...e].map(r=>({text:r.display||""})),d=h.default.filterRowsByDisplayColumns(a,s,!0),i=x.default.createTableRows(d);return{head:l,rows:i}},z=(a,s)=>{const{columns:t}=a,{keys:e,measures:o}=t,n=o[0].unit?o[0].unit:void 0,l=a.type.split("-")[0],i=h.default.getGroupKey(s,e)?.id,r=h.default.groupRowsByTimestamp(s),D=r.map(c=>c[0].ts.raw),u=r[0].length,m=[];for(let c=0;c<u;c+=1){const b=r.map(g=>{const{raw:C}=g[c][o[1].id];return C?Number(C):0}),p=b.reduce((g,C)=>g+C,0),f=r[0][c][i].raw,w=f||"";m.push({data:b,label:w,total:p})}return{type:l,unit:n,timeseries:!0,data:{labels:D,datasets:m}}},M=(a,s)=>{const{columns:t}=a,{keys:e,measures:o}=t;let n=s.flat(),l=[...o];if(s.length>1){const r=l.findIndex(m=>m.id==="ts"),D=l[r];l.splice(r,1),l=[...e?e.filter(m=>m.id!=="ts"):[],...l],l.unshift(D)}else n=h.default.filterRowsByDisplayColumns(a,n);const d=l.map(r=>({text:r.display})),i=x.default.createTableRows(n);return{head:d,rows:i}};var P={createChart:J,createTimeseriesCharts:K,createMatrixChart:N};0&&(module.exports={createChart,createMatrixChart,createTimeseriesCharts});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/components/_charts/utils.ts"],
4
- "sourcesContent": ["import dayjs from 'dayjs'\nimport weekOfYear from 'dayjs/plugin/weekOfYear'\nimport { ChartDetails, ChartMetaData } from '../../types/Charts'\nimport { DashboardDataResponse } from '../../types/Metrics'\nimport DatasetHelper from '../../utils/datasetHelper'\nimport DashboardListUtils from '../_dashboards/dashboard-list/utils'\nimport { Granularity } from '../_inputs/granular-date-range/types'\nimport HeatmapChart from './chart/heatmap/HeatmapChart'\nimport { components } from '../../types/api'\nimport {\n DashboardVisualisationData,\n DashboardVisualisationDataSet,\n DashboardVisualisatonCardData,\n MoJTable,\n} from '../_dashboards/dashboard-visualisation/types'\n\ndayjs.extend(weekOfYear)\n\nexport const createChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData => {\n let table: MoJTable\n let chart: DashboardVisualisationData\n let details: ChartDetails\n\n const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createSnapshotChart(chartDefinition, snapshotData)\n table = createSnapshotTable(chartDefinition, dataSetRows)\n details = getChartDetails(chartDefinition, dataSetRows)\n }\n\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData => {\n let table: MoJTable\n let chart: DashboardVisualisationData\n let details: ChartDetails\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createTimeseriesChart(chartDefinition, timeseriesData)\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createMatrixChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n) => {\n let table: MoJTable\n let chart: DashboardVisualisationData\n let details: ChartDetails\n let granularity: Granularity = Granularity.DAILY\n\n Object.keys(query).forEach((key) => {\n if (key.includes('granularity')) {\n granularity = <Granularity>query[key]\n }\n })\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = new HeatmapChart(timeseriesData, granularity, chartDefinition).build()\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nconst getDataForSnapshotCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const data = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, data)\n const snapshotData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n dataSetRows,\n snapshotData,\n }\n}\n\nconst getDataForTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const latestData = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, rawData)\n const timeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n latestData,\n dataSetRows,\n timeseriesData,\n }\n}\n\nconst getChartDetails = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n): ChartDetails => {\n const meta: ChartMetaData[] = []\n const headlines: ChartMetaData[] = createHeadlines(chartDefinition, data, timeseries)\n\n if (data[0]?.ts) {\n meta.push({\n label: 'Values for:',\n value: data[0]?.ts.raw,\n })\n }\n\n return {\n meta,\n headlines,\n }\n}\n\nconst createHeadlines = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n) => {\n const headlines: ChartMetaData[] = []\n const { columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n let headline: ChartMetaData\n\n let headlineColumn: components['schemas']['DashboardVisualisationColumnDefinition']\n let value: number\n let label: string\n\n if (timeseries) {\n headlineColumn = measures.find((col) => col.id !== 'ts')\n if (headlineColumn) {\n label = `${data[0].ts.raw}`\n value = +data[0][headlineColumn.id].raw\n\n headline = {\n label,\n value,\n }\n }\n } else {\n headlineColumn = !isListChart ? measures[0] : measures.find((col) => col.axis && col.axis === 'y')\n\n if (headlineColumn) {\n label = `Total ${headlineColumn.display.toLowerCase()}`\n value = data.reduce((acc: number, d: DashboardDataResponse) => acc + +d[headlineColumn.id].raw, 0)\n\n headline = {\n label,\n value,\n }\n }\n }\n\n headlines.push(headline)\n\n return headlines\n}\n\nconst createSnapshotChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n snapshotData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { type, columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n\n let labels: string[]\n let unit\n let datasets: DashboardVisualisationDataSet[]\n\n if (!isListChart) {\n ;({ labels, unit, datasets } = buildChart(columns, snapshotData))\n } else {\n ;({ labels, unit, datasets } = buildChartFromListData(columns, snapshotData))\n }\n\n return {\n type,\n unit,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst buildChart = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { keys, measures } = columns\n const labels = measures.map((col) => col.display)\n const labelId = keys[keys.length - 1]?.id as keyof DashboardDataResponse\n const unit = measures[0].unit ? measures[0].unit : undefined\n\n const datasets = rawData.map((row) => {\n const label = row[labelId] ? `${row[labelId].raw}` : 'All'\n const data = measures.map((c) => {\n const rowId = c.id as keyof DashboardDataResponse\n return row[rowId] ? +row[rowId].raw : 0\n })\n const total = data.reduce((acc: number, val: number) => acc + val, 0)\n return { label, data, total } as DashboardVisualisationDataSet\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst buildChartFromListData = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { measures, keys } = columns\n\n const xAxisColumn = measures.find((col) => col.axis === 'x')\n const yAxisColumn = measures.find((col) => col.axis === 'y')\n\n const unit = yAxisColumn?.unit || undefined\n const groupKey = DatasetHelper.getGroupKey(keys, rawData)\n const groupsData = groupKey ? DatasetHelper.groupRowsByKey(rawData, groupKey.id) : [rawData]\n\n const labels = groupsData[0]?.map((row) => {\n return `${row[xAxisColumn.id].raw}`\n })\n\n const datasets: DashboardVisualisationDataSet[] = groupsData.map((groupData) => {\n const data = groupData.map((row) => +row[yAxisColumn.id].raw)\n return {\n label: groupKey ? `${groupData[0][groupKey.id].raw}` : yAxisColumn.display,\n data,\n total: data.reduce((acc: number, val: number) => acc + val, 0),\n }\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst createSnapshotTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n const headerColumns = [...keys, ...measures]\n const head = headerColumns.map((column) => {\n return { text: column.display }\n })\n\n const filteredRowData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, data, true)\n const rows = DashboardListUtils.createTableRows(filteredRowData)\n\n return {\n head,\n rows,\n }\n}\n\nconst createTimeseriesChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n const unit = measures[0].unit ? measures[0].unit : undefined\n const type = <components['schemas']['DashboardVisualisationDefinition']['type']>chartDefinition.type.split('-')[0]\n const groupKey = DatasetHelper.getGroupKey(keys, timeseriesData)\n const labelId = groupKey.id as keyof DashboardDataResponse\n\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(timeseriesData)\n const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0].ts.raw as unknown as string)\n const datasetCount = timeBlockData[0].length\n\n const datasets: DashboardVisualisationDataSet[] = []\n for (let index = 0; index < datasetCount; index += 1) {\n const data = timeBlockData.map((timeperiod) => {\n return +timeperiod[index][measures[1].id].raw\n })\n const total = data.reduce((a, c) => a + c, 0)\n const label = timeBlockData[0][index][labelId].raw as string\n\n datasets.push({\n data,\n label,\n total,\n })\n }\n\n return {\n type,\n unit,\n timeseries: true,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst createTimeseriesTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n let flatTimeseriesData = timeseriesData.flat()\n let headerColumns = [...measures]\n\n if (timeseriesData.length > 1) {\n // Add keys as columns as well as measures, and put TS first:\n // Get TS column an remove it from headings\n const timestampIndex = headerColumns.findIndex((m) => m.id === 'ts')\n const timestampCol = headerColumns[timestampIndex]\n headerColumns.splice(timestampIndex, 1)\n // Remove duplicate TS from keys if present and add keys to headings\n const keysWithoutTs = keys.filter((k) => k.id !== 'ts')\n headerColumns = [...keysWithoutTs, ...headerColumns]\n // Add TS column to the start\n headerColumns.unshift(timestampCol)\n } else {\n flatTimeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, flatTimeseriesData)\n }\n\n const head = headerColumns.map((column) => {\n return { text: column.display }\n })\n\n const rows = DashboardListUtils.createTableRows(flatTimeseriesData)\n\n return {\n head,\n rows,\n } as MoJTable\n}\n\nexport default {\n createChart,\n createTimeseriesCharts,\n createMatrixChart,\n}\n"],
5
- "mappings": "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",
6
- "names": ["utils_exports", "__export", "createChart", "createMatrixChart", "createTimeseriesCharts", "utils_default", "__toCommonJS", "import_dayjs", "import_weekOfYear", "import_datasetHelper", "import_utils", "import_types", "import_HeatmapChart", "dayjs", "weekOfYear", "chartDefinition", "rawData", "table", "chart", "details", "dataSetRows", "snapshotData", "getDataForSnapshotCharts", "createSnapshotChart", "createSnapshotTable", "getChartDetails", "latestData", "timeseriesData", "getDataForTimeseriesCharts", "createTimeseriesChart", "createTimeseriesTable", "query", "granularity", "key", "HeatmapChart", "data", "DatasetHelper", "timeseries", "meta", "headlines", "createHeadlines", "columns", "measures", "isListChart", "col", "headline", "headlineColumn", "value", "label", "acc", "d", "type", "labels", "unit", "datasets", "buildChartFromListData", "buildChart", "keys", "labelId", "row", "c", "rowId", "total", "val", "xAxisColumn", "yAxisColumn", "groupKey", "groupsData", "groupData", "head", "column", "filteredRowData", "rows", "DashboardListUtils", "timeBlockData", "datasetCount", "index", "timeperiod", "a", "flatTimeseriesData", "headerColumns", "timestampIndex", "m", "timestampCol", "k"]
4
+ "sourcesContent": ["import dayjs from 'dayjs'\nimport weekOfYear from 'dayjs/plugin/weekOfYear'\nimport { ChartDetails, ChartMetaData } from '../../types/Charts'\nimport { DashboardDataResponse } from '../../types/Metrics'\nimport DatasetHelper from '../../utils/datasetHelper'\nimport DashboardListUtils from '../_dashboards/dashboard-list/utils'\nimport { Granularity } from '../_inputs/granular-date-range/types'\nimport HeatmapChart from './chart/heatmap/HeatmapChart'\nimport { components } from '../../types/api'\nimport {\n DashboardVisualisationData,\n DashboardVisualisationDataSet,\n DashboardVisualisatonCardData,\n MoJTable,\n} from '../_dashboards/dashboard-visualisation/types'\n\ndayjs.extend(weekOfYear)\n\nexport const createChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData | undefined => {\n let table: MoJTable | undefined\n let chart: DashboardVisualisationData | undefined\n let details: ChartDetails | undefined\n\n const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createSnapshotChart(chartDefinition, snapshotData)\n table = createSnapshotTable(chartDefinition, dataSetRows)\n details = getChartDetails(chartDefinition, dataSetRows)\n }\n\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData => {\n let table: MoJTable | undefined\n let chart: DashboardVisualisationData | undefined\n let details: ChartDetails | undefined\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createTimeseriesChart(chartDefinition, timeseriesData)\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createMatrixChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n) => {\n let table: MoJTable | undefined\n let chart: DashboardVisualisationData | undefined\n let details: ChartDetails | undefined\n let granularity: Granularity = Granularity.DAILY\n\n Object.keys(query).forEach((key) => {\n if (key.includes('granularity')) {\n granularity = <Granularity>query[key]\n }\n })\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = new HeatmapChart(timeseriesData, granularity, chartDefinition).build()\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nconst getDataForSnapshotCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const data = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, data)\n const snapshotData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n dataSetRows,\n snapshotData,\n }\n}\n\nconst getDataForTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const latestData = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, rawData)\n const timeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n latestData,\n dataSetRows,\n timeseriesData,\n }\n}\n\nconst getChartDetails = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n): ChartDetails => {\n const meta: ChartMetaData[] = []\n const headlines: ChartMetaData[] = createHeadlines(chartDefinition, data, timeseries)\n\n if (data[0]?.['ts'].raw) {\n meta.push({\n label: 'Values for:',\n value: data[0]?.['ts'].raw,\n })\n }\n\n return {\n meta,\n headlines,\n }\n}\n\nconst createHeadlines = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n) => {\n const headlines: ChartMetaData[] = []\n const { columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n let headline: ChartMetaData | undefined\n\n let headlineColumn: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined\n let value: number | undefined\n let label: string\n\n if (timeseries) {\n headlineColumn = measures.find((col) => col.id !== 'ts')\n if (headlineColumn) {\n const { id } = headlineColumn\n const { raw } = data[0][id]\n label = `${data[0]['ts'].raw}`\n value = raw ? Number(raw) : undefined\n\n if (value) {\n headline = {\n label,\n value,\n }\n }\n }\n } else {\n headlineColumn = !isListChart ? measures[0] : measures.find((col) => col.axis && col.axis === 'y')\n\n if (headlineColumn) {\n const display = headlineColumn.display?.toLowerCase()\n label = display ? `Total ${display}` : 'Total'\n value = data.reduce((acc: number, d: DashboardDataResponse) => {\n if (headlineColumn) {\n const { id } = headlineColumn\n const { raw } = d[id]\n if (raw) {\n return acc + Number(raw)\n }\n }\n return acc\n }, 0)\n\n headline = {\n label,\n value,\n }\n }\n }\n\n if (headline) headlines.push(headline)\n\n return headlines\n}\n\nconst createSnapshotChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n snapshotData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { type, columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n\n let labels: string[]\n let unit\n let datasets: DashboardVisualisationDataSet[]\n\n if (!isListChart) {\n const chart = buildChart(columns, snapshotData)\n labels = chart.labels\n unit = chart.unit\n datasets = chart.datasets\n } else {\n ;({ labels, unit, datasets } = buildChartFromListData(columns, snapshotData))\n }\n\n return {\n type,\n unit,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst buildChart = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { keys, measures } = columns\n const labels = measures.map((col) => col.display || '')\n const labelId = keys ? (keys[keys.length - 1]?.id as keyof DashboardDataResponse) : undefined\n const unit = measures[0].unit ? measures[0].unit : undefined\n\n const datasets = rawData.map((row) => {\n const label = labelId && row[labelId] ? `${row[labelId].raw}` : 'All'\n const data = measures.map((c) => {\n const rowId = c.id as keyof DashboardDataResponse\n return row[rowId] && row[rowId].raw ? Number(row[rowId].raw) : 0\n })\n const total = data.reduce((acc: number, val: number) => acc + val, 0)\n return { label, data, total } as DashboardVisualisationDataSet\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst buildChartFromListData = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { measures, keys } = columns\n\n const xAxisColumn = measures.find((col) => col.axis === 'x') || measures[0]\n const yAxisColumn = measures.find((col) => col.axis === 'y') || measures[1]\n\n if (!xAxisColumn || !yAxisColumn) {\n throw new Error('No X of Y Axis found in definition')\n }\n\n const unit = yAxisColumn?.unit || undefined\n const groupKey = DatasetHelper.getGroupKey(rawData, keys)\n const groupsData = groupKey ? DatasetHelper.groupRowsByKey(rawData, groupKey.id) : [rawData]\n\n const labels = groupsData[0]?.map((row) => {\n const { id: xId } = xAxisColumn\n const field = row[xId]\n return field ? `${field.raw}` : ''\n })\n\n const datasets: DashboardVisualisationDataSet[] = groupsData.map((groupData) => {\n const data = groupData.map((row) => {\n const { id: yId } = yAxisColumn\n const field = row[yId]\n const raw = field && field.raw ? Number(field.raw) : 0\n return Number(raw)\n })\n\n let label = ''\n if (groupKey) {\n const groupKeyId = groupKey.id\n const groupRow = groupData[0]\n label = groupRow && groupRow[groupKeyId] ? `${groupRow[groupKeyId].raw}` : ''\n } else {\n label = yAxisColumn.display || label\n }\n\n return {\n label,\n data,\n total: data.reduce((acc: number, val: number) => acc + val, 0),\n }\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst createSnapshotTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { measures } = columns\n const keys = columns.keys || []\n\n const headerColumns = [...keys, ...measures]\n const head = headerColumns.map((column) => {\n return { text: column.display || '' }\n })\n\n const filteredRowData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, data, true)\n const rows = DashboardListUtils.createTableRows(filteredRowData)\n\n return {\n head,\n rows,\n }\n}\n\nconst createTimeseriesChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n const unit = measures[0].unit ? measures[0].unit : undefined\n const type = <components['schemas']['DashboardVisualisationDefinition']['type']>chartDefinition.type.split('-')[0]\n const groupKey = DatasetHelper.getGroupKey(timeseriesData, keys)\n const labelId = groupKey?.id as keyof DashboardDataResponse\n\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(timeseriesData)\n const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0]['ts'].raw as unknown as string)\n const datasetCount = timeBlockData[0].length\n\n const datasets: DashboardVisualisationDataSet[] = []\n for (let index = 0; index < datasetCount; index += 1) {\n const data = timeBlockData.map((timeperiod) => {\n const { raw } = timeperiod[index][measures[1].id]\n return raw ? Number(raw) : 0\n })\n const total = data.reduce((a, c) => a + c, 0)\n const rawValue = timeBlockData[0][index][labelId].raw\n const label = rawValue ? <string>rawValue : ''\n\n datasets.push({\n data,\n label,\n total,\n })\n }\n\n return {\n type,\n unit,\n timeseries: true,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst createTimeseriesTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n let flatTimeseriesData = timeseriesData.flat()\n let headerColumns = [...measures]\n\n if (timeseriesData.length > 1) {\n // Add keys as columns as well as measures, and put TS first:\n // Get TS column an remove it from headings\n const timestampIndex = headerColumns.findIndex((m) => m.id === 'ts')\n const timestampCol = headerColumns[timestampIndex]\n headerColumns.splice(timestampIndex, 1)\n // Remove duplicate TS from keys if present and add keys to headings\n const keysWithoutTs = keys ? keys.filter((k) => k.id !== 'ts') : []\n headerColumns = [...keysWithoutTs, ...headerColumns]\n // Add TS column to the start\n headerColumns.unshift(timestampCol)\n } else {\n flatTimeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, flatTimeseriesData)\n }\n\n const head = headerColumns.map((column) => {\n return { text: column.display }\n })\n\n const rows = DashboardListUtils.createTableRows(flatTimeseriesData)\n\n return {\n head,\n rows,\n } as MoJTable\n}\n\nexport default {\n createChart,\n createTimeseriesCharts,\n createMatrixChart,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["utils_exports", "__export", "createChart", "createMatrixChart", "createTimeseriesCharts", "utils_default", "__toCommonJS", "import_dayjs", "import_weekOfYear", "import_datasetHelper", "import_utils", "import_types", "import_HeatmapChart", "dayjs", "weekOfYear", "chartDefinition", "rawData", "table", "chart", "details", "dataSetRows", "snapshotData", "getDataForSnapshotCharts", "createSnapshotChart", "createSnapshotTable", "getChartDetails", "latestData", "timeseriesData", "getDataForTimeseriesCharts", "createTimeseriesChart", "createTimeseriesTable", "query", "granularity", "key", "HeatmapChart", "data", "DatasetHelper", "timeseries", "meta", "headlines", "createHeadlines", "columns", "measures", "isListChart", "col", "headline", "headlineColumn", "value", "label", "id", "raw", "display", "acc", "d", "type", "labels", "unit", "datasets", "buildChartFromListData", "buildChart", "keys", "labelId", "row", "c", "rowId", "total", "val", "xAxisColumn", "yAxisColumn", "groupKey", "groupsData", "xId", "field", "groupData", "yId", "groupKeyId", "groupRow", "head", "column", "filteredRowData", "rows", "DashboardListUtils", "timeBlockData", "datasetCount", "index", "timeperiod", "a", "rawValue", "flatTimeseriesData", "headerColumns", "timestampIndex", "timestampCol", "k"]
7
7
  }
@@ -1,3 +1,4 @@
1
+ import { expect } from '@jest/globals'
1
2
  /* eslint-disable prefer-destructuring */
2
3
  import { DashboardDataResponse } from '../../types/Metrics'
3
4
  import ChartCardUtils from './utils'
@@ -19,10 +19,10 @@ dayjs.extend(weekOfYear)
19
19
  export const createChart = (
20
20
  chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
21
21
  rawData: DashboardDataResponse[],
22
- ): DashboardVisualisatonCardData => {
23
- let table: MoJTable
24
- let chart: DashboardVisualisationData
25
- let details: ChartDetails
22
+ ): DashboardVisualisatonCardData | undefined => {
23
+ let table: MoJTable | undefined
24
+ let chart: DashboardVisualisationData | undefined
25
+ let details: ChartDetails | undefined
26
26
 
27
27
  const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)
28
28
  if (dataSetRows.length) {
@@ -42,9 +42,9 @@ export const createTimeseriesCharts = (
42
42
  chartDefinition: components['schemas']['DashboardVisualisationDefinition'],
43
43
  rawData: DashboardDataResponse[],
44
44
  ): DashboardVisualisatonCardData => {
45
- let table: MoJTable
46
- let chart: DashboardVisualisationData
47
- let details: ChartDetails
45
+ let table: MoJTable | undefined
46
+ let chart: DashboardVisualisationData | undefined
47
+ let details: ChartDetails | undefined
48
48
 
49
49
  const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)
50
50
  if (dataSetRows.length) {
@@ -64,9 +64,9 @@ export const createMatrixChart = (
64
64
  rawData: DashboardDataResponse[],
65
65
  query: Record<string, string | string[]>,
66
66
  ) => {
67
- let table: MoJTable
68
- let chart: DashboardVisualisationData
69
- let details: ChartDetails
67
+ let table: MoJTable | undefined
68
+ let chart: DashboardVisualisationData | undefined
69
+ let details: ChartDetails | undefined
70
70
  let granularity: Granularity = Granularity.DAILY
71
71
 
72
72
  Object.keys(query).forEach((key) => {
@@ -125,10 +125,10 @@ const getChartDetails = (
125
125
  const meta: ChartMetaData[] = []
126
126
  const headlines: ChartMetaData[] = createHeadlines(chartDefinition, data, timeseries)
127
127
 
128
- if (data[0]?.ts) {
128
+ if (data[0]?.['ts'].raw) {
129
129
  meta.push({
130
130
  label: 'Values for:',
131
- value: data[0]?.ts.raw,
131
+ value: data[0]?.['ts'].raw,
132
132
  })
133
133
  }
134
134
 
@@ -147,29 +147,43 @@ const createHeadlines = (
147
147
  const { columns } = chartDefinition
148
148
  const { measures } = columns
149
149
  const isListChart = !!measures.find((col) => col.axis)
150
- let headline: ChartMetaData
150
+ let headline: ChartMetaData | undefined
151
151
 
152
- let headlineColumn: components['schemas']['DashboardVisualisationColumnDefinition']
153
- let value: number
152
+ let headlineColumn: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined
153
+ let value: number | undefined
154
154
  let label: string
155
155
 
156
156
  if (timeseries) {
157
157
  headlineColumn = measures.find((col) => col.id !== 'ts')
158
158
  if (headlineColumn) {
159
- label = `${data[0].ts.raw}`
160
- value = +data[0][headlineColumn.id].raw
161
-
162
- headline = {
163
- label,
164
- value,
159
+ const { id } = headlineColumn
160
+ const { raw } = data[0][id]
161
+ label = `${data[0]['ts'].raw}`
162
+ value = raw ? Number(raw) : undefined
163
+
164
+ if (value) {
165
+ headline = {
166
+ label,
167
+ value,
168
+ }
165
169
  }
166
170
  }
167
171
  } else {
168
172
  headlineColumn = !isListChart ? measures[0] : measures.find((col) => col.axis && col.axis === 'y')
169
173
 
170
174
  if (headlineColumn) {
171
- label = `Total ${headlineColumn.display.toLowerCase()}`
172
- value = data.reduce((acc: number, d: DashboardDataResponse) => acc + +d[headlineColumn.id].raw, 0)
175
+ const display = headlineColumn.display?.toLowerCase()
176
+ label = display ? `Total ${display}` : 'Total'
177
+ value = data.reduce((acc: number, d: DashboardDataResponse) => {
178
+ if (headlineColumn) {
179
+ const { id } = headlineColumn
180
+ const { raw } = d[id]
181
+ if (raw) {
182
+ return acc + Number(raw)
183
+ }
184
+ }
185
+ return acc
186
+ }, 0)
173
187
 
174
188
  headline = {
175
189
  label,
@@ -178,7 +192,7 @@ const createHeadlines = (
178
192
  }
179
193
  }
180
194
 
181
- headlines.push(headline)
195
+ if (headline) headlines.push(headline)
182
196
 
183
197
  return headlines
184
198
  }
@@ -196,7 +210,10 @@ const createSnapshotChart = (
196
210
  let datasets: DashboardVisualisationDataSet[]
197
211
 
198
212
  if (!isListChart) {
199
- ;({ labels, unit, datasets } = buildChart(columns, snapshotData))
213
+ const chart = buildChart(columns, snapshotData)
214
+ labels = chart.labels
215
+ unit = chart.unit
216
+ datasets = chart.datasets
200
217
  } else {
201
218
  ;({ labels, unit, datasets } = buildChartFromListData(columns, snapshotData))
202
219
  }
@@ -216,15 +233,15 @@ const buildChart = (
216
233
  rawData: DashboardDataResponse[],
217
234
  ) => {
218
235
  const { keys, measures } = columns
219
- const labels = measures.map((col) => col.display)
220
- const labelId = keys[keys.length - 1]?.id as keyof DashboardDataResponse
236
+ const labels = measures.map((col) => col.display || '')
237
+ const labelId = keys ? (keys[keys.length - 1]?.id as keyof DashboardDataResponse) : undefined
221
238
  const unit = measures[0].unit ? measures[0].unit : undefined
222
239
 
223
240
  const datasets = rawData.map((row) => {
224
- const label = row[labelId] ? `${row[labelId].raw}` : 'All'
241
+ const label = labelId && row[labelId] ? `${row[labelId].raw}` : 'All'
225
242
  const data = measures.map((c) => {
226
243
  const rowId = c.id as keyof DashboardDataResponse
227
- return row[rowId] ? +row[rowId].raw : 0
244
+ return row[rowId] && row[rowId].raw ? Number(row[rowId].raw) : 0
228
245
  })
229
246
  const total = data.reduce((acc: number, val: number) => acc + val, 0)
230
247
  return { label, data, total } as DashboardVisualisationDataSet
@@ -243,21 +260,42 @@ const buildChartFromListData = (
243
260
  ) => {
244
261
  const { measures, keys } = columns
245
262
 
246
- const xAxisColumn = measures.find((col) => col.axis === 'x')
247
- const yAxisColumn = measures.find((col) => col.axis === 'y')
263
+ const xAxisColumn = measures.find((col) => col.axis === 'x') || measures[0]
264
+ const yAxisColumn = measures.find((col) => col.axis === 'y') || measures[1]
265
+
266
+ if (!xAxisColumn || !yAxisColumn) {
267
+ throw new Error('No X of Y Axis found in definition')
268
+ }
248
269
 
249
270
  const unit = yAxisColumn?.unit || undefined
250
- const groupKey = DatasetHelper.getGroupKey(keys, rawData)
271
+ const groupKey = DatasetHelper.getGroupKey(rawData, keys)
251
272
  const groupsData = groupKey ? DatasetHelper.groupRowsByKey(rawData, groupKey.id) : [rawData]
252
273
 
253
274
  const labels = groupsData[0]?.map((row) => {
254
- return `${row[xAxisColumn.id].raw}`
275
+ const { id: xId } = xAxisColumn
276
+ const field = row[xId]
277
+ return field ? `${field.raw}` : ''
255
278
  })
256
279
 
257
280
  const datasets: DashboardVisualisationDataSet[] = groupsData.map((groupData) => {
258
- const data = groupData.map((row) => +row[yAxisColumn.id].raw)
281
+ const data = groupData.map((row) => {
282
+ const { id: yId } = yAxisColumn
283
+ const field = row[yId]
284
+ const raw = field && field.raw ? Number(field.raw) : 0
285
+ return Number(raw)
286
+ })
287
+
288
+ let label = ''
289
+ if (groupKey) {
290
+ const groupKeyId = groupKey.id
291
+ const groupRow = groupData[0]
292
+ label = groupRow && groupRow[groupKeyId] ? `${groupRow[groupKeyId].raw}` : ''
293
+ } else {
294
+ label = yAxisColumn.display || label
295
+ }
296
+
259
297
  return {
260
- label: groupKey ? `${groupData[0][groupKey.id].raw}` : yAxisColumn.display,
298
+ label,
261
299
  data,
262
300
  total: data.reduce((acc: number, val: number) => acc + val, 0),
263
301
  }
@@ -275,11 +313,12 @@ const createSnapshotTable = (
275
313
  data: DashboardDataResponse[],
276
314
  ): MoJTable => {
277
315
  const { columns } = chartDefinition
278
- const { keys, measures } = columns
316
+ const { measures } = columns
317
+ const keys = columns.keys || []
279
318
 
280
319
  const headerColumns = [...keys, ...measures]
281
320
  const head = headerColumns.map((column) => {
282
- return { text: column.display }
321
+ return { text: column.display || '' }
283
322
  })
284
323
 
285
324
  const filteredRowData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, data, true)
@@ -300,20 +339,22 @@ const createTimeseriesChart = (
300
339
 
301
340
  const unit = measures[0].unit ? measures[0].unit : undefined
302
341
  const type = <components['schemas']['DashboardVisualisationDefinition']['type']>chartDefinition.type.split('-')[0]
303
- const groupKey = DatasetHelper.getGroupKey(keys, timeseriesData)
304
- const labelId = groupKey.id as keyof DashboardDataResponse
342
+ const groupKey = DatasetHelper.getGroupKey(timeseriesData, keys)
343
+ const labelId = groupKey?.id as keyof DashboardDataResponse
305
344
 
306
345
  const timeBlockData = DatasetHelper.groupRowsByTimestamp(timeseriesData)
307
- const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0].ts.raw as unknown as string)
346
+ const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0]['ts'].raw as unknown as string)
308
347
  const datasetCount = timeBlockData[0].length
309
348
 
310
349
  const datasets: DashboardVisualisationDataSet[] = []
311
350
  for (let index = 0; index < datasetCount; index += 1) {
312
351
  const data = timeBlockData.map((timeperiod) => {
313
- return +timeperiod[index][measures[1].id].raw
352
+ const { raw } = timeperiod[index][measures[1].id]
353
+ return raw ? Number(raw) : 0
314
354
  })
315
355
  const total = data.reduce((a, c) => a + c, 0)
316
- const label = timeBlockData[0][index][labelId].raw as string
356
+ const rawValue = timeBlockData[0][index][labelId].raw
357
+ const label = rawValue ? <string>rawValue : ''
317
358
 
318
359
  datasets.push({
319
360
  data,
@@ -350,7 +391,7 @@ const createTimeseriesTable = (
350
391
  const timestampCol = headerColumns[timestampIndex]
351
392
  headerColumns.splice(timestampIndex, 1)
352
393
  // Remove duplicate TS from keys if present and add keys to headings
353
- const keysWithoutTs = keys.filter((k) => k.id !== 'ts')
394
+ const keysWithoutTs = keys ? keys.filter((k) => k.id !== 'ts') : []
354
395
  headerColumns = [...keysWithoutTs, ...headerColumns]
355
396
  // Add TS column to the start
356
397
  headerColumns.unshift(timestampCol)
@@ -1,2 +1,2 @@
1
- var g=Object.create;var w=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var T=(t,s)=>{for(var e in s)w(t,e,{get:s[e],enumerable:!0})},d=(t,s,e,a)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of x(s))!L.call(t,o)&&o!==e&&w(t,o,{get:()=>s[o],enumerable:!(a=R(s,o))||a.enumerable});return t};var M=(t,s,e)=>(e=t!=null?g(y(t)):{},d(s||!t||!t.__esModule?w(e,"default",{value:t,enumerable:!0}):e,t)),J=t=>d(w({},"__esModule",{value:!0}),t);var $={};T($,{createList:()=>f,createTableRows:()=>D,default:()=>A});module.exports=J($);var u=M(require("../../../utils/datasetHelper"));const f=(t,s)=>{const{columns:e,options:a}=t,o=a,l=o?.showLatest!==void 0?o.showLatest:!0,r=o?.columnsAsList,{measures:c,keys:n}=e,h=!c&&!n||!c.length&&!n;let i=[...s];l&&(i=u.default.getLastestDataset(i));let p,m,b;return h?{head:p,rows:m,ts:b}=E(i):r?{head:p,rows:m,ts:b}=V(t,i):{head:p,rows:m,ts:b}=C(t,i),m.length&&c&&(m=O(m,c)),{table:{head:p,rows:m},ts:b}},V=(t,s)=>{const{columns:e}=t,{keys:a,measures:o}=e,l=u.default.getGroupKey(a||[],s),r=s[0]?.ts?.raw,c=r?`${r}`:"",n=[];n.push({text:""}),s.forEach(i=>{n.push({text:l?i[l.id].raw:""})});const h=[];return o.forEach(i=>{h.push([{text:i.display}])}),o.forEach((i,p)=>{s.forEach(m=>{h[p].push({text:`${m[i.id].raw}`})})}),{rows:h,head:n,ts:c}},D=(t,s)=>t.map(e=>{const a=s?.length?Array(s.length):Array(Object.keys(t[0]).length);return Object.keys(e).forEach((o,l)=>{const r=s?.length?s.findIndex(n=>n.id===o):l,c=e[o].raw;a.splice(r,1,{text:c})}),a}),C=(t,s)=>{const{measures:e}=t.columns,a=e.map(h=>({text:h.display})),o=u.default.getDatasetRows(t,s),l=u.default.filterRowsByDisplayColumns(t,o),r=D(l,e),c=o[0]?.ts?.raw,n=c?`${c}`:"";return{head:a,rows:r,ts:n}},E=t=>{const s=Object.keys(t[0]).map(r=>({text:r})),e=D(t),o=u.default.getLastestDataset(t)[0]?.ts?.raw,l=o?`${o}`:"";return{head:s,rows:e,ts:l}},O=(t,s)=>{const e=s.flatMap((a,o)=>a.aggregate?[o]:[]);if(e.length){const a=[{html:"<strong>Total<strong>"}];for(let o=1;o<s.length;o+=1)a[o]={text:""};t.push(a),e.forEach(o=>{const l=t.reduce((r,c)=>{const n=c[o];return n&&n.text&&(r+=Number(n.text)),r},0);t[t.length-1][o]={html:`<strong>${l}<strong>`}})}return t};var A={createList:f,createTableRows:D};0&&(module.exports={createList,createTableRows});
1
+ "use strict";var g=Object.create;var d=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var J=(t,s)=>{for(var e in s)d(t,e,{get:s[e],enumerable:!0})},D=(t,s,e,a)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of x(s))!M.call(t,o)&&o!==e&&d(t,o,{get:()=>s[o],enumerable:!(a=R(s,o))||a.enumerable});return t};var y=(t,s,e)=>(e=t!=null?g(T(t)):{},D(s||!t||!t.__esModule?d(e,"default",{value:t,enumerable:!0}):e,t)),L=t=>D(d({},"__esModule",{value:!0}),t);var A={};J(A,{createList:()=>f,createTableRows:()=>w,default:()=>$});module.exports=L(A);var u=y(require("../../../utils/datasetHelper"));const f=(t,s)=>{const{columns:e,options:a}=t,o=a,l=o?.showLatest!==void 0?o.showLatest:!0,r=o?.columnsAsList,{measures:c,keys:n}=e,h=!c&&!n||!c.length&&!n;let i=[...s];l&&(i=u.default.getLastestDataset(i));let p,m,b;return h?{head:p,rows:m,ts:b}=E(i):r?{head:p,rows:m,ts:b}=V(t,i):{head:p,rows:m,ts:b}=C(t,i),m.length&&c&&(m=O(m,c)),{table:{head:p,rows:m},ts:b}},V=(t,s)=>{const{columns:e}=t,{keys:a,measures:o}=e,l=u.default.getGroupKey(s,a||[]),r=s[0]?.ts?.raw,c=r?`${r}`:"",n=[];n.push({text:""}),s.forEach(i=>{n.push({text:l?`${i[l.id].raw}`:""})});const h=[];return o.forEach(i=>{h.push([{text:i.display}])}),o.forEach((i,p)=>{s.forEach(m=>{h[p].push({text:`${m[i.id].raw}`})})}),{rows:h,head:n,ts:c}},w=(t,s)=>t.map(e=>{const a=s?.length?Array(s.length):Array(Object.keys(t[0]).length);return Object.keys(e).forEach((o,l)=>{const r=s?.length?s.findIndex(n=>n.id===o):l,c=e[o].raw;a.splice(r,1,{text:c})}),a}),C=(t,s)=>{const{measures:e}=t.columns,a=e.map(h=>({text:h.display||""})),o=u.default.getDatasetRows(t,s),l=u.default.filterRowsByDisplayColumns(t,o),r=w(l,e),c=o[0]?.ts?.raw,n=c?`${c}`:"";return{head:a,rows:r,ts:n}},E=t=>{const s=Object.keys(t[0]).map(r=>({text:r||""})),e=w(t),o=u.default.getLastestDataset(t)[0]?.ts?.raw,l=o?`${o}`:"";return{head:s,rows:e,ts:l}},O=(t,s)=>{const e=s.flatMap((a,o)=>a.aggregate?[o]:[]);if(e.length){const a=[{html:"<strong>Total<strong>"}];for(let o=1;o<s.length;o+=1)a[o]={text:""};t.push(a),e.forEach(o=>{const l=t.reduce((r,c)=>{const n=c[o];return n&&n.text&&(r+=Number(n.text)),r},0);t[t.length-1][o]={html:`<strong>${l}<strong>`}})}return t};var $={createList:f,createTableRows:w};0&&(module.exports={createList,createTableRows});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_dashboards/dashboard-list/utils.ts"],
4
- "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport { ListDashboardVisualisationOptions, MoJTable, MoJTableRow } from '../dashboard-visualisation/types'\nimport DatasetHelper from '../../../utils/datasetHelper'\nimport { components } from '../../../types/api'\n\nexport const createList = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n): { table: MoJTable; ts: string } => {\n const { columns, options } = listDefinition\n const listOptions = <ListDashboardVisualisationOptions>options\n const showLatest = listOptions?.showLatest !== undefined ? listOptions.showLatest : true\n const columnsAsList = listOptions?.columnsAsList\n const { measures, keys } = columns\n const showAllData = (!measures && !keys) || (!measures.length && !keys)\n\n let datasetData: DashboardDataResponse[] = [...dashboardData]\n if (showLatest) {\n datasetData = DatasetHelper.getLastestDataset(datasetData)\n }\n\n let head\n let rows\n let ts\n\n if (showAllData) {\n ;({ head, rows, ts } = createFullList(datasetData))\n } else if (columnsAsList) {\n ;({ head, rows, ts } = createListFromColumns(listDefinition, datasetData))\n } else {\n ;({ head, rows, ts } = creatListFromRows(listDefinition, datasetData))\n }\n\n if (rows.length && measures) rows = sumColumns(rows, measures)\n\n return {\n table: {\n head,\n rows,\n },\n ts,\n }\n}\n\nconst createListFromColumns = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n) => {\n const { columns } = listDefinition\n const { keys, measures } = columns\n const groupKey = DatasetHelper.getGroupKey(keys || [], dashboardData)\n\n const timestampData = dashboardData[0]?.ts?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n const head = []\n head.push({ text: '' })\n dashboardData.forEach((row) => {\n head.push({\n text: groupKey ? row[groupKey.id].raw : '',\n })\n })\n\n const rows: MoJTableRow[][] = []\n measures.forEach((measure) => {\n rows.push([{ text: measure.display }] as MoJTableRow[])\n })\n\n measures.forEach((measure, index) => {\n dashboardData.forEach((row) => {\n rows[index].push({ text: `${row[measure.id].raw}` })\n })\n })\n\n return {\n rows,\n head,\n ts,\n }\n}\n\nexport const createTableRows = (\n data: DashboardDataResponse[],\n measures?: components['schemas']['DashboardVisualisationColumnDefinition'][],\n): MoJTableRow[][] => {\n return data.map((dataRow) => {\n const row: MoJTableRow[] = measures?.length ? Array(measures.length) : Array(Object.keys(data[0]).length)\n Object.keys(dataRow).forEach((key, index) => {\n const headIndex = measures?.length ? measures.findIndex((m) => m.id === key) : index\n const text = dataRow[key].raw\n row.splice(headIndex, 1, { text } as MoJTableRow)\n })\n\n return row\n })\n}\n\nconst creatListFromRows = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n) => {\n const { measures } = listDefinition.columns\n\n const head = measures.map((column) => {\n return { text: column.display }\n })\n\n const dataSetRows = DatasetHelper.getDatasetRows(listDefinition, dashboardData)\n const displayRows = DatasetHelper.filterRowsByDisplayColumns(listDefinition, dataSetRows)\n const rows = createTableRows(displayRows, measures)\n\n const timestampData = dataSetRows[0]?.ts?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n return {\n head,\n rows,\n ts,\n }\n}\n\nconst createFullList = (dashboardData: DashboardDataResponse[]) => {\n const head = Object.keys(dashboardData[0]).map((key) => {\n return { text: key }\n })\n const rows = createTableRows(dashboardData)\n\n const latestData = DatasetHelper.getLastestDataset(dashboardData)\n const timestampData = latestData[0]?.ts?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n return {\n head,\n rows,\n ts,\n }\n}\n\nconst sumColumns = (\n rowsData: MoJTableRow[][],\n measures: components['schemas']['DashboardVisualisationColumnDefinition'][],\n) => {\n const sumColumnIndexes: number[] = measures.flatMap((col, idx) => (col.aggregate ? [idx] : []))\n\n if (sumColumnIndexes.length) {\n const sumRow: MoJTableRow[] = [{ html: `<strong>Total<strong>` }]\n for (let index = 1; index < measures.length; index += 1) {\n sumRow[index] = { text: '' }\n }\n\n rowsData.push(sumRow)\n sumColumnIndexes.forEach((index) => {\n const total = rowsData.reduce((acc, row) => {\n const rowIndex = row[index]\n if (rowIndex && rowIndex.text) {\n acc += Number(rowIndex.text)\n }\n return acc\n }, 0)\n rowsData[rowsData.length - 1][index] = {\n html: `<strong>${total}<strong>`,\n }\n })\n }\n\n return rowsData\n}\n\nexport default {\n createList,\n createTableRows,\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport {\n ListDashboardVisualisationOptions,\n MoJTable,\n MoJTableHead,\n MoJTableRow,\n} from '../dashboard-visualisation/types'\nimport DatasetHelper from '../../../utils/datasetHelper'\nimport { components } from '../../../types/api'\n\nexport const createList = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n): { table: MoJTable; ts: string } => {\n const { columns, options } = listDefinition\n const listOptions = <ListDashboardVisualisationOptions>options\n const showLatest = listOptions?.showLatest !== undefined ? listOptions.showLatest : true\n const columnsAsList = listOptions?.columnsAsList\n const { measures, keys } = columns\n const showAllData = (!measures && !keys) || (!measures.length && !keys)\n\n let datasetData: DashboardDataResponse[] = [...dashboardData]\n if (showLatest) {\n datasetData = DatasetHelper.getLastestDataset(datasetData)\n }\n\n let head\n let rows\n let ts\n\n if (showAllData) {\n ;({ head, rows, ts } = createFullList(datasetData))\n } else if (columnsAsList) {\n ;({ head, rows, ts } = createListFromColumns(listDefinition, datasetData))\n } else {\n ;({ head, rows, ts } = creatListFromRows(listDefinition, datasetData))\n }\n\n if (rows.length && measures) rows = sumColumns(rows, measures)\n\n return {\n table: {\n head,\n rows,\n },\n ts,\n }\n}\n\nconst createListFromColumns = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n) => {\n const { columns } = listDefinition\n const { keys, measures } = columns\n const groupKey = DatasetHelper.getGroupKey(dashboardData, keys || [])\n\n const timestampData = dashboardData[0]?.['ts']?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n const head: MoJTableHead[] = []\n head.push({ text: '' })\n dashboardData.forEach((row) => {\n head.push({\n text: groupKey ? `${row[groupKey.id].raw}` : '',\n })\n })\n\n const rows: MoJTableRow[][] = []\n measures.forEach((measure) => {\n rows.push([{ text: measure.display }] as MoJTableRow[])\n })\n\n measures.forEach((measure, index) => {\n dashboardData.forEach((row) => {\n rows[index].push({ text: `${row[measure.id].raw}` })\n })\n })\n\n return {\n rows,\n head,\n ts,\n }\n}\n\nexport const createTableRows = (\n data: DashboardDataResponse[],\n measures?: components['schemas']['DashboardVisualisationColumnDefinition'][],\n): MoJTableRow[][] => {\n return data.map((dataRow) => {\n const row: MoJTableRow[] = measures?.length ? Array(measures.length) : Array(Object.keys(data[0]).length)\n Object.keys(dataRow).forEach((key, index) => {\n const headIndex = measures?.length ? measures.findIndex((m) => m.id === key) : index\n const text = dataRow[key].raw\n row.splice(headIndex, 1, { text } as MoJTableRow)\n })\n\n return row\n })\n}\n\nconst creatListFromRows = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n) => {\n const { measures } = listDefinition.columns\n\n const head: MoJTableHead[] = measures.map((column) => {\n return { text: column.display || '' }\n })\n\n const dataSetRows = DatasetHelper.getDatasetRows(listDefinition, dashboardData)\n const displayRows = DatasetHelper.filterRowsByDisplayColumns(listDefinition, dataSetRows)\n const rows = createTableRows(displayRows, measures)\n\n const timestampData = dataSetRows[0]?.['ts']?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n return {\n head,\n rows,\n ts,\n }\n}\n\nconst createFullList = (dashboardData: DashboardDataResponse[]) => {\n const head: MoJTableHead[] = Object.keys(dashboardData[0]).map((key) => {\n return { text: key || '' }\n })\n const rows = createTableRows(dashboardData)\n\n const latestData = DatasetHelper.getLastestDataset(dashboardData)\n const timestampData = latestData[0]?.['ts']?.raw\n const ts = timestampData ? `${timestampData}` : ''\n\n return {\n head,\n rows,\n ts,\n }\n}\n\nconst sumColumns = (\n rowsData: MoJTableRow[][],\n measures: components['schemas']['DashboardVisualisationColumnDefinition'][],\n) => {\n const sumColumnIndexes: number[] = measures.flatMap((col, idx) => (col.aggregate ? [idx] : []))\n\n if (sumColumnIndexes.length) {\n const sumRow: MoJTableRow[] = [{ html: `<strong>Total<strong>` }]\n for (let index = 1; index < measures.length; index += 1) {\n sumRow[index] = { text: '' }\n }\n\n rowsData.push(sumRow)\n sumColumnIndexes.forEach((index) => {\n const total = rowsData.reduce((acc, row) => {\n const rowIndex = row[index]\n if (rowIndex && rowIndex.text) {\n acc += Number(rowIndex.text)\n }\n return acc\n }, 0)\n rowsData[rowsData.length - 1][index] = {\n html: `<strong>${total}<strong>`,\n }\n })\n }\n\n return rowsData\n}\n\nexport default {\n createList,\n createTableRows,\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["utils_exports", "__export", "createList", "createTableRows", "utils_default", "__toCommonJS", "import_datasetHelper", "listDefinition", "dashboardData", "columns", "options", "listOptions", "showLatest", "columnsAsList", "measures", "keys", "showAllData", "datasetData", "DatasetHelper", "head", "rows", "ts", "createFullList", "createListFromColumns", "creatListFromRows", "sumColumns", "groupKey", "timestampData", "row", "measure", "index", "data", "dataRow", "key", "headIndex", "m", "text", "column", "dataSetRows", "displayRows", "rowsData", "sumColumnIndexes", "col", "idx", "sumRow", "total", "acc", "rowIndex"]
7
7
  }
@@ -1,3 +1,4 @@
1
+ import { expect } from '@jest/globals'
1
2
  import DashboardListUtils from './utils'
2
3
  import { mockListDefinitionAgeRange1 } from '../../../../../test-app/mocks/mockClients/dashboards/definitions/age-breakdown/visualisations/list-definitions-1'
3
4
  import { dataQualityColsToList } from '../../../../../test-app/mocks/mockClients/dashboards/definitions/examples/visualisations/lists'