@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.16.1 → 4.17.1

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 (211) hide show
  1. package/dpr/components/_catalogue/catalogue/utils.js +1 -1
  2. package/dpr/components/_catalogue/catalogue/utils.js.map +3 -3
  3. package/dpr/components/_catalogue/catalogue/utils.test.ts +15 -1
  4. package/dpr/components/_catalogue/catalogue/utils.ts +22 -4
  5. package/dpr/components/_catalogue/catalogue/view.njk +2 -1
  6. package/dpr/components/_catalogue/catalogue-filters/view.njk +2 -2
  7. package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
  8. package/dpr/components/_catalogue/catalogue-list/utils.js.map +3 -3
  9. package/dpr/components/_catalogue/catalogue-list/utils.ts +4 -5
  10. package/dpr/components/_catalogue/catalogue-search/clientClass.mjs +14 -0
  11. package/dpr/components/_catalogue/catalogue-search/view.njk +24 -1
  12. package/dpr/components/_charts/chart/Buckets.js +1 -1
  13. package/dpr/components/_charts/chart/Buckets.js.map +3 -3
  14. package/dpr/components/_charts/chart/Buckets.ts +44 -36
  15. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +1 -1
  16. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +2 -2
  17. package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +22 -14
  18. package/dpr/components/_charts/chart/heatmap/types.js +2 -0
  19. package/dpr/components/_charts/chart/heatmap/types.js.map +7 -0
  20. package/dpr/components/_charts/chart/heatmap/types.ts +6 -0
  21. package/dpr/components/_charts/utils.js +1 -1
  22. package/dpr/components/_charts/utils.js.map +3 -3
  23. package/dpr/components/_charts/utils.test.ts +10 -7
  24. package/dpr/components/_charts/utils.ts +57 -50
  25. package/dpr/components/_dashboards/dashboard/view.njk +1 -1
  26. package/dpr/components/_dashboards/dashboard-list/utils.js +1 -1
  27. package/dpr/components/_dashboards/dashboard-list/utils.js.map +2 -2
  28. package/dpr/components/_dashboards/dashboard-list/utils.test.ts +3 -3
  29. package/dpr/components/_dashboards/dashboard-list/utils.ts +16 -12
  30. package/dpr/components/_dashboards/dashboard-section/view.njk +1 -1
  31. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js +2 -0
  32. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js.map +7 -0
  33. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.ts +40 -0
  34. package/dpr/components/_dashboards/dashboard-visualisation/types.js +2 -0
  35. package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +7 -0
  36. package/dpr/components/_dashboards/dashboard-visualisation/types.ts +102 -0
  37. package/dpr/components/_dashboards/dashboard-visualisation/view.njk +1 -1
  38. package/dpr/components/_dashboards/scorecard/Scorecard.js +1 -1
  39. package/dpr/components/_dashboards/scorecard/Scorecard.js.map +2 -2
  40. package/dpr/components/_dashboards/scorecard/Scorecard.ts +37 -29
  41. package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
  42. package/dpr/components/_dashboards/scorecard/types.ts +1 -0
  43. package/dpr/components/_dashboards/scorecard/utils.js +1 -1
  44. package/dpr/components/_dashboards/scorecard/utils.js.map +2 -2
  45. package/dpr/components/_dashboards/scorecard/utils.test.ts +13 -4
  46. package/dpr/components/_dashboards/scorecard/utils.ts +6 -5
  47. package/dpr/components/_dashboards/scorecard/view.njk +6 -5
  48. package/dpr/components/_dashboards/scorecard-group/view.njk +4 -4
  49. package/dpr/components/_reports/report-actions/types.d.js.map +1 -1
  50. package/dpr/components/_reports/report-actions/types.d.ts +1 -1
  51. package/dpr/components/_reports/report-heading/view.njk +1 -1
  52. package/dpr/data/dashboardClient.js +1 -1
  53. package/dpr/data/dashboardClient.js.map +2 -2
  54. package/dpr/data/dashboardClient.ts +8 -7
  55. package/dpr/data/dprReportingClient.js +1 -1
  56. package/dpr/data/dprReportingClient.js.map +3 -3
  57. package/dpr/data/dprReportingClient.ts +2 -0
  58. package/dpr/data/reportingClient.js +1 -1
  59. package/dpr/data/reportingClient.js.map +1 -1
  60. package/dpr/data/reportingClient.ts +1 -1
  61. package/dpr/middleware/reportAuthoriser.js +1 -1
  62. package/dpr/middleware/reportAuthoriser.js.map +3 -3
  63. package/dpr/middleware/reportAuthoriser.ts +9 -20
  64. package/dpr/middleware/setUpDprResources.js +1 -1
  65. package/dpr/middleware/setUpDprResources.js.map +3 -3
  66. package/dpr/middleware/setUpDprResources.test.ts +7 -0
  67. package/dpr/middleware/setUpDprResources.ts +17 -2
  68. package/dpr/routes/journeys/download-report/controller.js +1 -1
  69. package/dpr/routes/journeys/download-report/controller.js.map +3 -3
  70. package/dpr/routes/journeys/download-report/controller.ts +4 -1
  71. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js +1 -1
  72. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js.map +2 -2
  73. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.ts +1 -0
  74. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js +1 -1
  75. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js.map +2 -2
  76. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.ts +1 -0
  77. package/dpr/routes/journeys/download-report/tests.cy.js +1 -1
  78. package/dpr/routes/journeys/download-report/tests.cy.js.map +2 -2
  79. package/dpr/routes/journeys/download-report/tests.cy.ts +2 -7
  80. package/dpr/routes/journeys/download-report/utils.js +1 -1
  81. package/dpr/routes/journeys/download-report/utils.js.map +3 -3
  82. package/dpr/routes/journeys/download-report/utils.ts +10 -7
  83. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js +1 -1
  84. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js.map +2 -2
  85. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.ts +1 -0
  86. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js +1 -1
  87. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js.map +3 -3
  88. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.ts +5 -12
  89. package/dpr/routes/journeys/my-reports/bookmarks/utils.js +1 -1
  90. package/dpr/routes/journeys/my-reports/bookmarks/utils.js.map +3 -3
  91. package/dpr/routes/journeys/my-reports/bookmarks/utils.ts +11 -5
  92. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js +1 -1
  93. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js.map +3 -3
  94. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.ts +4 -6
  95. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js +1 -1
  96. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js.map +2 -2
  97. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.ts +1 -0
  98. package/dpr/routes/journeys/product-collection/routes.js +2 -0
  99. package/dpr/routes/journeys/product-collection/routes.js.map +7 -0
  100. package/dpr/routes/journeys/product-collection/routes.ts +28 -0
  101. package/dpr/routes/journeys/product-collection/selected/controller.js +2 -0
  102. package/dpr/routes/journeys/product-collection/selected/controller.js.map +7 -0
  103. package/dpr/routes/journeys/product-collection/selected/controller.ts +29 -0
  104. package/dpr/routes/journeys/product-collection/selected/routes.js +2 -0
  105. package/dpr/routes/journeys/product-collection/selected/routes.js.map +7 -0
  106. package/dpr/routes/journeys/product-collection/selected/routes.ts +15 -0
  107. package/dpr/routes/journeys/product-collection/selected/tests.cy.js +2 -0
  108. package/dpr/routes/journeys/product-collection/selected/tests.cy.js.map +7 -0
  109. package/dpr/routes/journeys/product-collection/selected/tests.cy.ts +54 -0
  110. package/dpr/routes/journeys/product-collection/selected/validation.js +2 -0
  111. package/dpr/routes/journeys/product-collection/selected/validation.js.map +7 -0
  112. package/dpr/routes/journeys/product-collection/selected/validation.ts +5 -0
  113. package/dpr/routes/journeys/request-missing-report/form/tests.cy.js +1 -1
  114. package/dpr/routes/journeys/request-missing-report/form/tests.cy.js.map +2 -2
  115. package/dpr/routes/journeys/request-missing-report/form/tests.cy.ts +1 -0
  116. package/dpr/routes/journeys/request-missing-report/tests.cy.js +1 -1
  117. package/dpr/routes/journeys/request-missing-report/tests.cy.js.map +2 -2
  118. package/dpr/routes/journeys/request-missing-report/tests.cy.ts +3 -4
  119. package/dpr/routes/journeys/request-report/filters/tests.cy.js +1 -1
  120. package/dpr/routes/journeys/request-report/filters/tests.cy.js.map +3 -3
  121. package/dpr/routes/journeys/request-report/filters/tests.cy.ts +3 -6
  122. package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
  123. package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
  124. package/dpr/routes/journeys/request-report/filters/utils.ts +2 -3
  125. package/dpr/routes/journeys/request-report/status/tests.cy.js +1 -1
  126. package/dpr/routes/journeys/request-report/status/tests.cy.js.map +2 -2
  127. package/dpr/routes/journeys/request-report/status/tests.cy.ts +2 -6
  128. package/dpr/routes/journeys/request-report/tests.cy.js +1 -1
  129. package/dpr/routes/journeys/request-report/tests.cy.js.map +3 -3
  130. package/dpr/routes/journeys/request-report/tests.cy.ts +5 -32
  131. package/dpr/routes/journeys/routes.js +1 -1
  132. package/dpr/routes/journeys/routes.js.map +2 -2
  133. package/dpr/routes/journeys/routes.ts +2 -0
  134. package/dpr/routes/journeys/view-report/async/controller.js.map +2 -2
  135. package/dpr/routes/journeys/view-report/async/controller.ts +2 -2
  136. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js +1 -1
  137. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js.map +2 -2
  138. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.ts +2 -9
  139. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  140. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  141. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +100 -95
  142. package/dpr/routes/journeys/view-report/async/report/controller.js +1 -1
  143. package/dpr/routes/journeys/view-report/async/report/controller.js.map +3 -3
  144. package/dpr/routes/journeys/view-report/async/report/controller.ts +4 -6
  145. package/dpr/routes/journeys/view-report/async/report/tests.cy.js +1 -1
  146. package/dpr/routes/journeys/view-report/async/report/tests.cy.js.map +2 -2
  147. package/dpr/routes/journeys/view-report/async/report/tests.cy.ts +8 -17
  148. package/dpr/routes/journeys/view-report/async/report/types.js +2 -0
  149. package/dpr/routes/journeys/view-report/async/report/types.js.map +7 -0
  150. package/dpr/routes/journeys/view-report/async/report/types.ts +31 -0
  151. package/dpr/routes/journeys/view-report/async/report/utils.js +1 -1
  152. package/dpr/routes/journeys/view-report/async/report/utils.js.map +3 -3
  153. package/dpr/routes/journeys/view-report/async/report/utils.ts +173 -136
  154. package/dpr/routes/journeys/view-report/sync/tests.cy.js +1 -1
  155. package/dpr/routes/journeys/view-report/sync/tests.cy.js.map +3 -3
  156. package/dpr/routes/journeys/view-report/sync/tests.cy.ts +3 -4
  157. package/dpr/services/dashboardService.js +1 -1
  158. package/dpr/services/dashboardService.js.map +2 -2
  159. package/dpr/services/dashboardService.ts +7 -5
  160. package/dpr/services/productCollection/productCollectionService.js +2 -0
  161. package/dpr/services/productCollection/productCollectionService.js.map +7 -0
  162. package/dpr/services/productCollection/productCollectionService.ts +25 -0
  163. package/dpr/services/productCollection/productCollectionStoreService.js +2 -0
  164. package/dpr/services/productCollection/productCollectionStoreService.js.map +7 -0
  165. package/dpr/services/productCollection/productCollectionStoreService.ts +26 -0
  166. package/dpr/services/reportingService.js +1 -1
  167. package/dpr/services/reportingService.js.map +1 -1
  168. package/dpr/services/reportingService.ts +1 -1
  169. package/dpr/types/AsyncReportUtils.js.map +1 -1
  170. package/dpr/types/AsyncReportUtils.ts +3 -4
  171. package/dpr/types/Charts.js +1 -1
  172. package/dpr/types/Charts.js.map +3 -3
  173. package/dpr/types/Charts.ts +0 -82
  174. package/dpr/types/Metrics.js +1 -1
  175. package/dpr/types/Metrics.js.map +1 -1
  176. package/dpr/types/Metrics.ts +7 -0
  177. package/dpr/types/ReportQuery.js +1 -1
  178. package/dpr/types/ReportQuery.js.map +3 -3
  179. package/dpr/types/ReportQuery.ts +24 -15
  180. package/dpr/types/ReportStore.js +1 -1
  181. package/dpr/types/ReportStore.js.map +1 -1
  182. package/dpr/types/ReportStore.ts +1 -0
  183. package/dpr/types/Services.d.js +1 -1
  184. package/dpr/types/Services.d.js.map +1 -1
  185. package/dpr/types/Services.d.ts +15 -0
  186. package/dpr/types/api.d.js +1 -1
  187. package/dpr/types/api.d.js.map +1 -1
  188. package/dpr/types/api.d.ts +197 -6
  189. package/dpr/utils/Personalisation/personalisationUtils.js +1 -1
  190. package/dpr/utils/Personalisation/personalisationUtils.js.map +3 -3
  191. package/dpr/utils/Personalisation/personalisationUtils.ts +15 -6
  192. package/dpr/utils/ReportStoreServiceUtils.js +1 -1
  193. package/dpr/utils/ReportStoreServiceUtils.js.map +3 -3
  194. package/dpr/utils/ReportStoreServiceUtils.ts +7 -0
  195. package/dpr/utils/UserStoreItemBuilder.js +1 -1
  196. package/dpr/utils/UserStoreItemBuilder.js.map +1 -1
  197. package/dpr/utils/UserStoreItemBuilder.ts +2 -2
  198. package/dpr/utils/datasetHelper.js +1 -1
  199. package/dpr/utils/datasetHelper.js.map +3 -3
  200. package/dpr/utils/datasetHelper.test.ts +11 -11
  201. package/dpr/utils/datasetHelper.ts +23 -8
  202. package/dpr/utils/logger.js +1 -1
  203. package/dpr/utils/logger.js.map +3 -3
  204. package/dpr/utils/logger.ts +6 -1
  205. package/package.json +2 -1
  206. package/dpr/components/_charts/chart/DashboardVisualisation.js +0 -2
  207. package/dpr/components/_charts/chart/DashboardVisualisation.js.map +0 -7
  208. package/dpr/components/_charts/chart/DashboardVisualisation.ts +0 -43
  209. package/dpr/components/_dashboards/dashboard/types.js +0 -2
  210. package/dpr/components/_dashboards/dashboard/types.js.map +0 -7
  211. package/dpr/components/_dashboards/dashboard/types.ts +0 -120
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/dpr/routes/journeys/view-report/async/dashboard/tests.cy.ts"],
4
- "sourcesContent": ["import { checkA11y } from '../../../../../../../cypress-tests/cypressUtils'\n\ncontext('Viewing a report', () => {\n const path = '/embedded/platform/'\n\n describe('dashboard tests', () => {\n before(() => {\n cy.task('resetStubs')\n cy.task('resetRedis')\n cy.task('stubDefinitions')\n cy.task('stubTestDashboard8')\n cy.task('stubMockDashboardsStatusFinished')\n cy.task('stubViewAsyncResults')\n cy.task('stubDashboardSuccessResult20')\n cy.task('stubSingleSummaries')\n cy.task('stubDefinitionUnprintable')\n cy.task('stubDefinitionEmptyReport')\n })\n\n it('should mark the dashboard as recently viewed', () => {\n // Request and run a report so we can go back to it for each test\n cy.visit(path)\n cy.findByRole('tab', { name: /Viewed \\(0\\)/ }).should('be.visible')\n checkA11y()\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return (\n element.textContent.includes('Test Dashboard') &&\n element.textContent.includes('Dashboard used for testing testing')\n )\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request dashboard' }).click()\n })\n })\n checkA11y()\n cy.findByRole('button', { name: /Request/ }).click()\n checkA11y()\n cy.findByRole('heading', { level: 1, name: /Test Dashboard/ }).should('be.visible')\n checkA11y()\n cy.visit(path)\n cy.findByRole('tab', { name: /Viewed \\(1\\)/ }).should('be.visible')\n })\n })\n})\n"],
5
- "mappings": "AAAA,IAAAA,EAA0B,2DAE1B,QAAQ,mBAAoB,IAAM,CAChC,MAAMC,EAAO,sBAEb,SAAS,kBAAmB,IAAM,CAChC,OAAO,IAAM,CACX,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,iBAAiB,EACzB,GAAG,KAAK,oBAAoB,EAC5B,GAAG,KAAK,kCAAkC,EAC1C,GAAG,KAAK,sBAAsB,EAC9B,GAAG,KAAK,8BAA8B,EACtC,GAAG,KAAK,qBAAqB,EAC7B,GAAG,KAAK,2BAA2B,EACnC,GAAG,KAAK,2BAA2B,CACrC,CAAC,EAED,GAAG,+CAAgD,IAAM,CAEvD,GAAG,MAAMA,CAAI,EACb,GAAG,WAAW,MAAO,CAAE,KAAM,cAAe,CAAC,EAAE,OAAO,YAAY,KAClE,aAAU,EACV,GAAG,gBAAgB,sBAAsB,EAAE,OAAO,IAAM,CACtD,GAAG,WAAW,MAAO,CACnB,KAAM,CAACC,EAAGC,IAENA,EAAQ,YAAY,SAAS,gBAAgB,GAC7CA,EAAQ,YAAY,SAAS,oCAAoC,CAGvE,CAAC,EAAE,OAAO,IAAM,CACd,GAAG,WAAW,OAAQ,CAAE,KAAM,mBAAoB,CAAC,EAAE,MAAM,CAC7D,CAAC,CACH,CAAC,KACD,aAAU,EACV,GAAG,WAAW,SAAU,CAAE,KAAM,SAAU,CAAC,EAAE,MAAM,KACnD,aAAU,EACV,GAAG,WAAW,UAAW,CAAE,MAAO,EAAG,KAAM,gBAAiB,CAAC,EAAE,OAAO,YAAY,KAClF,aAAU,EACV,GAAG,MAAMF,CAAI,EACb,GAAG,WAAW,MAAO,CAAE,KAAM,cAAe,CAAC,EAAE,OAAO,YAAY,CACpE,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { checkA11y, executeDashboardStubs } from '../../../../../../../cypress-tests/cypressUtils'\n\ncontext('Viewing a report', () => {\n const path = '/embedded/platform/'\n\n describe('dashboard tests', () => {\n before(() => {\n executeDashboardStubs()\n cy.task('stubTestDashboard8')\n cy.task('stubDashboardSuccessResult20')\n })\n\n it('should mark the dashboard as recently viewed', () => {\n // Request and run a report so we can go back to it for each test\n cy.visit(path)\n cy.findByRole('tab', { name: /Viewed \\(0\\)/ }).should('be.visible')\n checkA11y()\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return (\n element.textContent.includes('Test Dashboard') &&\n element.textContent.includes('Dashboard used for testing testing')\n )\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request dashboard' }).click()\n })\n })\n checkA11y()\n cy.findByRole('button', { name: /Request/ }).click()\n checkA11y()\n cy.findByRole('heading', { level: 1, name: /Test Dashboard/ }).should('be.visible')\n checkA11y()\n cy.visit(path)\n cy.findByRole('tab', { name: /Viewed \\(1\\)/ }).should('be.visible')\n })\n })\n})\n"],
5
+ "mappings": "AAAA,IAAAA,EAAiD,2DAEjD,QAAQ,mBAAoB,IAAM,CAChC,MAAMC,EAAO,sBAEb,SAAS,kBAAmB,IAAM,CAChC,OAAO,IAAM,IACX,yBAAsB,EACtB,GAAG,KAAK,oBAAoB,EAC5B,GAAG,KAAK,8BAA8B,CACxC,CAAC,EAED,GAAG,+CAAgD,IAAM,CAEvD,GAAG,MAAMA,CAAI,EACb,GAAG,WAAW,MAAO,CAAE,KAAM,cAAe,CAAC,EAAE,OAAO,YAAY,KAClE,aAAU,EACV,GAAG,gBAAgB,sBAAsB,EAAE,OAAO,IAAM,CACtD,GAAG,WAAW,MAAO,CACnB,KAAM,CAACC,EAAGC,IAENA,EAAQ,YAAY,SAAS,gBAAgB,GAC7CA,EAAQ,YAAY,SAAS,oCAAoC,CAGvE,CAAC,EAAE,OAAO,IAAM,CACd,GAAG,WAAW,OAAQ,CAAE,KAAM,mBAAoB,CAAC,EAAE,MAAM,CAC7D,CAAC,CACH,CAAC,KACD,aAAU,EACV,GAAG,WAAW,SAAU,CAAE,KAAM,SAAU,CAAC,EAAE,MAAM,KACnD,aAAU,EACV,GAAG,WAAW,UAAW,CAAE,MAAO,EAAG,KAAM,gBAAiB,CAAC,EAAE,OAAO,YAAY,KAClF,aAAU,EACV,GAAG,MAAMF,CAAI,EACb,GAAG,WAAW,MAAO,CAAE,KAAM,cAAe,CAAC,EAAE,OAAO,YAAY,CACpE,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["import_cypressUtils", "path", "_", "element"]
7
7
  }
@@ -1,20 +1,13 @@
1
- import { checkA11y } from '../../../../../../../cypress-tests/cypressUtils'
1
+ import { checkA11y, executeDashboardStubs } from '../../../../../../../cypress-tests/cypressUtils'
2
2
 
3
3
  context('Viewing a report', () => {
4
4
  const path = '/embedded/platform/'
5
5
 
6
6
  describe('dashboard tests', () => {
7
7
  before(() => {
8
- cy.task('resetStubs')
9
- cy.task('resetRedis')
10
- cy.task('stubDefinitions')
8
+ executeDashboardStubs()
11
9
  cy.task('stubTestDashboard8')
12
- cy.task('stubMockDashboardsStatusFinished')
13
- cy.task('stubViewAsyncResults')
14
10
  cy.task('stubDashboardSuccessResult20')
15
- cy.task('stubSingleSummaries')
16
- cy.task('stubDefinitionUnprintable')
17
- cy.task('stubDefinitionEmptyReport')
18
11
  })
19
12
 
20
13
  it('should mark the dashboard as recently viewed', () => {
@@ -1,2 +1,2 @@
1
- var M=Object.create;var b=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var _=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var Q=(t,e)=>{for(var r in e)b(t,r,{get:e[r],enumerable:!0})},T=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of O(e))!H.call(t,a)&&a!==r&&b(t,a,{get:()=>e[a],enumerable:!(s=N(e,a))||s.enumerable});return t};var p=(t,e,r)=>(r=t!=null?M(_(t)):{},T(e||!t||!t.__esModule?b(r,"default",{value:t,enumerable:!0}):r,t)),G=t=>T(b({},"__esModule",{value:!0}),t);var J={};Q(J,{default:()=>z,renderAsyncDashboard:()=>P});module.exports=G(J);var k=p(require("parseurl")),c=require("../../../../../components/_dashboards/dashboard/types"),S=require("../../../../../types/UserReports"),h=p(require("../../../../../components/_charts/utils")),E=p(require("../../../../../utils/definitionUtils")),V=p(require("../../../../../components/user-reports/utils")),w=p(require("../../../../../components/_dashboards/dashboard-list/utils")),U=p(require("../../../../../components/_filters/utils")),F=p(require("../../../../../components/_dashboards/scorecard/utils")),I=p(require("../../../../../components/_dashboards/scorecard/Scorecard")),q=p(require("../../../../../components/_reports/report-actions/utils")),C=p(require("../../../../../types/ReportQuery")),g=p(require("../../../../../utils/localsHelper")),L=require("../../../../../components/_filters/filtersTypeEnum");const X=(t,e,r)=>{const s=e.name,{name:a}=t,i=r.url.request.fullUrl,{executionId:d}=r;return q.default.getActions({share:{reportName:s,name:a,url:i},refresh:{url:i,executionId:d},copy:{url:i}})},W=async({req:t,res:e,services:r,next:s})=>{const{token:a}=g.default.getValues(e),{reportId:i,id:d}=t.params,{dataProductDefinitionsPath:n}=t.query,l=await r.dashboardService.getDefinition(a,i,d,n),o=await E.default.getReportSummary(i,r.reportingService,a,n),u=await U.default.getFilters({fields:l.filterFields||[],req:t,filtersType:L.FiltersType.INTERACTIVE}),f=U.default.setRequestQueryFromFilterValues(u.filters);return{query:new C.default({fields:l.filterFields||[],queryParams:f,definitionsPath:n,reportType:S.ReportType.DASHBOARD}).toRecordWithFilterPrefix(!0),filters:u,dashboardDefinition:l,reportDefinition:o}},j=(t,e,r)=>t.sections.map(s=>{const{id:a,display:i,description:d}=s;let n=!1;const l=s.visualisations.map(o=>{const{type:u,display:f,description:D,id:R}=o;let m;switch(u){case c.DashboardVisualisationType.LIST:m=w.default.createList(o,e);break;case c.DashboardVisualisationType.SCORECARD:n=!0,m=new I.default(e,o).build();break;case c.DashboardVisualisationType.SCORECARD_GROUP:m=new I.default(e,o,!0).build();break;case c.DashboardVisualisationType.BAR:case c.DashboardVisualisationType.LINE:case c.DashboardVisualisationType.DONUT:{m=h.default.createChart(o,e);break}case c.DashboardVisualisationType.MATRIX:case c.DashboardVisualisationType.MATRIX_TIMESERIES:{m=h.default.createMatrixChart(o,e,r);break}case c.DashboardVisualisationType.BAR_TIMESERIES:case c.DashboardVisualisationType.LINE_TIMESERIES:{m=h.default.createTimeseriesCharts(o,e);break}default:break}return{id:R,title:f,description:D,type:u,data:m}});return n&&F.default.mergeScorecardsIntoGroup(l),{id:a,title:i,description:d,visualisations:l}}),v=async(t,e,r,s,a,i,d)=>{const n=await t.requestedReportService.getReportByTableId(e,r);return s&&s.length&&n&&V.default.updateLastViewed({services:t,reportStateData:n,userId:r,req:i,filters:d}),n},P=async({req:t,res:e,services:r,next:s})=>{const{token:a,csrfToken:i,dprUser:d,nestedBaseUrl:n}=g.default.getValues(e),{reportId:l,id:o,tableId:u}=t.params,f=(0,k.default)(t),{query:D,filters:R,reportDefinition:m,dashboardDefinition:y}=await W({req:t,res:e,services:r}),x=(await r.dashboardService.getAsyncDashboard(a,o,l,u,D)).flat(),A=j(y,x,D),B=await v(r,u,d.id,A,f,t,R.filters);return{dashboardData:{token:a,id:o,reportId:l,name:y.name,description:y.description,reportName:m.name,bookmarked:await r.bookmarkService.isBookmarked(o,l,d.id),nestedBaseUrl:n,csrfToken:i,sections:A,filters:R,type:S.ReportType.DASHBOARD,actions:X(y,m,B)}}};var z={renderAsyncDashboard:P};0&&(module.exports={renderAsyncDashboard});
1
+ var O=Object.create;var h=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var Q=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var v=(t,e)=>{for(var r in e)h(t,r,{get:e[r],enumerable:!0})},w=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of H(e))!G.call(t,s)&&s!==r&&h(t,s,{get:()=>e[s],enumerable:!(n=_(e,s))||n.enumerable});return t};var p=(t,e,r)=>(r=t!=null?O(Q(t)):{},w(e||!t||!t.__esModule?h(r,"default",{value:t,enumerable:!0}):r,t)),W=t=>w(h({},"__esModule",{value:!0}),t);var Y={};v(Y,{default:()=>K,renderAsyncDashboard:()=>M});module.exports=W(Y);var V=p(require("parseurl")),l=require("../../../../../components/_dashboards/dashboard-visualisation/types"),y=require("../../../../../types/UserReports"),b=p(require("../../../../../components/_charts/utils")),P=p(require("../../../../../utils/definitionUtils")),q=p(require("../../../../../components/user-reports/utils")),F=p(require("../../../../../components/_dashboards/dashboard-list/utils")),S=p(require("../../../../../components/_filters/utils")),C=p(require("../../../../../components/_dashboards/scorecard/utils")),g=p(require("../../../../../components/_dashboards/scorecard/Scorecard")),x=p(require("../../../../../components/_reports/report-actions/utils")),B=p(require("../../../../../types/ReportQuery")),U=p(require("../../../../../utils/localsHelper")),L=require("../../../../../components/_filters/filtersTypeEnum");const X=(t,e,r)=>{const n=e.name,{name:s}=t,a=r?.url?.request?.fullUrl,c=r?.executionId;let o={};return a&&(o={share:{reportName:n,name:s,url:a},copy:{url:a}},c&&(o={...o,refresh:{url:a,executionId:c}})),x.default.getActions(o)},j=async({req:t,res:e,services:r,next:n})=>{const{token:s}=U.default.getValues(e),{reportId:a,id:c}=t.params,o=t.query.dataProductDefinitionsPath,d=await r.dashboardService.getDefinition(s,a,c,o),i=await P.default.getReportSummary(a,r.reportingService,s,o),u=await S.default.getFilters({fields:d.filterFields||[],req:t,filtersType:L.FiltersType.INTERACTIVE}),f=S.default.setRequestQueryFromFilterValues(u.filters);return{query:new B.default({fields:d.filterFields||[],queryParams:f,definitionsPath:o,reportType:y.ReportType.DASHBOARD}).toRecordWithFilterPrefix(!0),filters:u,dashboardDefinition:d,reportDefinition:i}},z=(t,e,r)=>t.sections.map(n=>{const{id:s,display:a,description:c}=n;let o=!1;const d=n.visualisations.map(i=>{const{type:u,display:f,description:D,id:A}=i;let m;switch(u){case l.DashboardVisualisationType.LIST:m=F.default.createList(i,e);break;case l.DashboardVisualisationType.SCORECARD:o=!0,m=new g.default(e,i).build();break;case l.DashboardVisualisationType.SCORECARD_GROUP:m=new g.default(e,i,!0).build();break;case l.DashboardVisualisationType.BAR:case l.DashboardVisualisationType.LINE:case l.DashboardVisualisationType.DONUT:{m=b.default.createChart(i,e);break}case l.DashboardVisualisationType.MATRIX_TIMESERIES:{m=b.default.createMatrixChart(i,e,r);break}case l.DashboardVisualisationType.BAR_TIMESERIES:case l.DashboardVisualisationType.LINE_TIMESERIES:{m=b.default.createTimeseriesCharts(i,e);break}default:break}return{id:A,title:f,description:D,type:u,data:m}});return o&&C.default.mergeScorecardsIntoGroup(d),{id:s,title:a,description:c,visualisations:d}}),J=async(t,e,r,n,s,a)=>{const{requestedReportService:c}=t,o=c?await c.getReportByTableId(e,r):void 0;return n&&n.length&&o&&q.default.updateLastViewed({services:t,reportStateData:o,userId:r,req:s,filters:a}),o},M=async({req:t,res:e,services:r,next:n})=>{const{token:s,csrfToken:a,dprUser:c,nestedBaseUrl:o}=U.default.getValues(e),{reportId:d,id:i,tableId:u}=t.params,{bookmarkService:f,requestedReportService:D}=r,A=(0,V.default)(t),{query:m,filters:I,reportDefinition:k,dashboardDefinition:R}=await j({req:t,res:e,services:r}),N=(await r.dashboardService.getAsyncDashboard(s,i,d,u,m)).flat(),T=z(R,N,m);let E;return D&&(E=await J(r,u,c.id,T,t,I.filters)),{dashboardData:{token:s,id:i,reportId:d,name:R.name,description:R.description,reportName:k.name,bookmarked:f?await f.isBookmarked(i,d,c.id):!1,nestedBaseUrl:o,csrfToken:a,sections:T,filters:I,type:y.ReportType.DASHBOARD,actions:X(R,k,E)}}};var K={renderAsyncDashboard:M};0&&(module.exports={renderAsyncDashboard});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/dpr/routes/journeys/view-report/async/dashboard/utils.ts"],
4
- "sourcesContent": ["import parseUrl from 'parseurl'\nimport { Url } from 'url'\nimport { Request } from 'express'\nimport type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'\n\nimport {\n DashboardUIVisualisation,\n DashboardVisualisationType,\n ListVisualisation,\n type DashboardDefinition,\n type DashboardSection,\n type DashboardUISection,\n type DashboardVisualisation,\n} from '../../../../../components/_dashboards/dashboard/types'\nimport type { DashboardDataResponse } from '../../../../../types/Metrics'\nimport type { RequestedReport } from '../../../../../types/UserReports'\nimport { ReportType } from '../../../../../types/UserReports'\nimport type { components } from '../../../../../types/api'\n\nimport ChartUtils from '../../../../../components/_charts/utils'\nimport DefinitionUtils from '../../../../../utils/definitionUtils'\nimport UserReportsUtils from '../../../../../components/user-reports/utils'\nimport DashboardListUtils from '../../../../../components/_dashboards/dashboard-list/utils'\nimport FilterUtils from '../../../../../components/_filters/utils'\nimport ScorecardsUtils from '../../../../../components/_dashboards/scorecard/utils'\nimport ScorecardVisualisation from '../../../../../components/_dashboards/scorecard/Scorecard'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport { Services } from '../../../../../types/Services'\nimport { FilterValue } from '../../../../../components/_filters/types'\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\n\nconst setDashboardActions = (\n dashboardDefinition: DashboardDefinition,\n reportDefinition: components['schemas']['ReportDefinitionSummary'],\n requestData: RequestedReport,\n) => {\n const reportName = reportDefinition.name\n const { name } = dashboardDefinition\n const actionsUrl = requestData.url.request.fullUrl\n const { executionId } = requestData\n\n return ReportActionsUtils.getActions({\n share: {\n reportName,\n name,\n url: actionsUrl,\n },\n refresh: {\n url: actionsUrl,\n executionId,\n },\n copy: {\n url: actionsUrl,\n },\n })\n}\n\nconst getDefinitionData = async ({ req, res, services, next }: AsyncReportUtilsParams) => {\n const { token } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const { dataProductDefinitionsPath } = req.query\n\n // Dashboard Definition,\n const dashboardDefinition: DashboardDefinition = await services.dashboardService.getDefinition(\n token,\n reportId,\n id,\n dataProductDefinitionsPath,\n )\n\n // Report summary data\n const reportDefinition = await DefinitionUtils.getReportSummary(\n reportId,\n services.reportingService,\n token,\n <string>dataProductDefinitionsPath,\n )\n\n // Get the filters\n const filtersData = await FilterUtils.getFilters({\n fields: dashboardDefinition.filterFields || [],\n req,\n filtersType: FiltersType.INTERACTIVE,\n })\n\n const filtersQuery = FilterUtils.setRequestQueryFromFilterValues(filtersData.filters)\n\n // Create the query\n const query = new ReportQuery({\n fields: dashboardDefinition.filterFields || [],\n queryParams: filtersQuery,\n definitionsPath: <string>dataProductDefinitionsPath,\n reportType: ReportType.DASHBOARD,\n }).toRecordWithFilterPrefix(true)\n\n return {\n query,\n filters: filtersData,\n dashboardDefinition,\n reportDefinition,\n }\n}\n\nconst getSections = (\n dashboardDefinition: DashboardDefinition,\n dashboardData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n): DashboardUISection[] => {\n return dashboardDefinition.sections.map((section: DashboardSection) => {\n const { id, display: title, description } = section\n\n let hasScorecard = false\n const visualisations = section.visualisations.map((visDefinition: DashboardVisualisation) => {\n const { type, display, description: visDescription, id: visId } = visDefinition\n\n let data: DashboardUIVisualisation['data']\n\n switch (type) {\n case DashboardVisualisationType.LIST:\n data = DashboardListUtils.createList(visDefinition as ListVisualisation, dashboardData)\n break\n\n case DashboardVisualisationType.SCORECARD:\n hasScorecard = true\n data = new ScorecardVisualisation(dashboardData, visDefinition).build()\n break\n\n case DashboardVisualisationType.SCORECARD_GROUP:\n data = new ScorecardVisualisation(dashboardData, visDefinition, true).build()\n break\n\n case DashboardVisualisationType.BAR:\n case DashboardVisualisationType.LINE:\n case DashboardVisualisationType.DONUT: {\n data = ChartUtils.createChart(visDefinition, dashboardData)\n break\n }\n case DashboardVisualisationType.MATRIX:\n case DashboardVisualisationType.MATRIX_TIMESERIES: {\n data = ChartUtils.createMatrixChart(visDefinition, dashboardData, query)\n break\n }\n case DashboardVisualisationType.BAR_TIMESERIES:\n case DashboardVisualisationType.LINE_TIMESERIES: {\n data = ChartUtils.createTimeseriesCharts(visDefinition, dashboardData)\n break\n }\n default:\n break\n }\n\n return {\n id: visId,\n title: display,\n description: visDescription,\n type,\n data,\n }\n })\n\n if (hasScorecard) ScorecardsUtils.mergeScorecardsIntoGroup(visualisations)\n\n return { id, title, description, visualisations }\n })\n}\n\nconst updateStore = async (\n services: Services,\n tableId: string,\n userId: string,\n sections: DashboardUISection[],\n url: Url,\n req: Request,\n filters: FilterValue[],\n) => {\n const dashboardRequestData: RequestedReport = await services.requestedReportService.getReportByTableId(\n tableId,\n userId,\n )\n\n // Add to recently viewed\n if (sections && sections.length && dashboardRequestData) {\n UserReportsUtils.updateLastViewed({\n services,\n reportStateData: dashboardRequestData,\n userId,\n req,\n filters,\n })\n }\n\n return dashboardRequestData\n}\n\nexport const renderAsyncDashboard = async ({ req, res, services, next }: AsyncReportUtilsParams) => {\n const { token, csrfToken, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)\n const { reportId, id, tableId } = req.params\n const url = parseUrl(req)\n\n // Get the definition Data\n const { query, filters, reportDefinition, dashboardDefinition } = await getDefinitionData({\n req,\n res,\n services,\n })\n\n // Get the results data\n const dashboardData: DashboardDataResponse[][] = await services.dashboardService.getAsyncDashboard(\n token,\n id,\n reportId,\n tableId,\n query,\n )\n\n const flattenedData: DashboardDataResponse[] = dashboardData.flat()\n\n // Get the dashboard parts\n const sections: DashboardUISection[] = getSections(dashboardDefinition, flattenedData, query)\n\n // Update the store\n const dashboardRequestData = await updateStore(services, tableId, dprUser.id, sections, url, req, filters.filters)\n\n return {\n dashboardData: {\n token,\n id,\n reportId,\n name: dashboardDefinition.name,\n description: dashboardDefinition.description,\n reportName: reportDefinition.name,\n bookmarked: await services.bookmarkService.isBookmarked(id, reportId, dprUser.id),\n nestedBaseUrl,\n csrfToken,\n sections,\n filters,\n type: ReportType.DASHBOARD,\n actions: setDashboardActions(dashboardDefinition, reportDefinition, dashboardRequestData),\n },\n }\n}\n\nexport default {\n renderAsyncDashboard,\n}\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,yBAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAqB,uBAKrBC,EAQO,iEAGPC,EAA2B,4CAG3BC,EAAuB,sDACvBC,EAA4B,mDAC5BD,EAA6B,2DAC7BA,EAA+B,yEAC/BA,EAAwB,uDACxBA,EAA4B,oEAC5BE,EAAmC,wEACnCF,EAA+B,sEAC/BG,EAAwB,+CACxBC,EAAyB,gDAGzBC,EAA4B,8DAE5B,MAAMC,EAAsB,CAC1BC,EACAC,EACAC,IACG,CACH,MAAMC,EAAaF,EAAiB,KAC9B,CAAE,KAAAG,CAAK,EAAIJ,EACXK,EAAaH,EAAY,IAAI,QAAQ,QACrC,CAAE,YAAAI,CAAY,EAAIJ,EAExB,OAAO,EAAAK,QAAmB,WAAW,CACnC,MAAO,CACL,WAAAJ,EACA,KAAAC,EACA,IAAKC,CACP,EACA,QAAS,CACP,IAAKA,EACL,YAAAC,CACF,EACA,KAAM,CACJ,IAAKD,CACP,CACF,CAAC,CACH,EAEMG,EAAoB,MAAO,CAAE,IAAAC,EAAK,IAAAC,EAAK,SAAAC,EAAU,KAAAC,CAAK,IAA8B,CACxF,KAAM,CAAE,MAAAC,CAAM,EAAI,EAAAC,QAAa,UAAUJ,CAAG,EACtC,CAAE,SAAAK,EAAU,GAAAC,CAAG,EAAIP,EAAI,OACvB,CAAE,2BAAAQ,CAA2B,EAAIR,EAAI,MAGrCT,EAA2C,MAAMW,EAAS,iBAAiB,cAC/EE,EACAE,EACAC,EACAC,CACF,EAGMhB,EAAmB,MAAM,EAAAiB,QAAgB,iBAC7CH,EACAJ,EAAS,iBACTE,EACQI,CACV,EAGME,EAAc,MAAM,EAAAC,QAAY,WAAW,CAC/C,OAAQpB,EAAoB,cAAgB,CAAC,EAC7C,IAAAS,EACA,YAAa,cAAY,WAC3B,CAAC,EAEKY,EAAe,EAAAD,QAAY,gCAAgCD,EAAY,OAAO,EAUpF,MAAO,CACL,MARY,IAAI,EAAAG,QAAY,CAC5B,OAAQtB,EAAoB,cAAgB,CAAC,EAC7C,YAAaqB,EACb,gBAAyBJ,EACzB,WAAY,aAAW,SACzB,CAAC,EAAE,yBAAyB,EAAI,EAI9B,QAASE,EACT,oBAAAnB,EACA,iBAAAC,CACF,CACF,EAEMsB,EAAc,CAClBvB,EACAwB,EACAC,IAEOzB,EAAoB,SAAS,IAAK0B,GAA8B,CACrE,KAAM,CAAE,GAAAV,EAAI,QAASW,EAAO,YAAAC,CAAY,EAAIF,EAE5C,IAAIG,EAAe,GACnB,MAAMC,EAAiBJ,EAAQ,eAAe,IAAKK,GAA0C,CAC3F,KAAM,CAAE,KAAAC,EAAM,QAAAC,EAAS,YAAaC,EAAgB,GAAIC,CAAM,EAAIJ,EAElE,IAAIK,EAEJ,OAAQJ,EAAM,CACZ,KAAK,6BAA2B,KAC9BI,EAAO,EAAAC,QAAmB,WAAWN,EAAoCP,CAAa,EACtF,MAEF,KAAK,6BAA2B,UAC9BK,EAAe,GACfO,EAAO,IAAI,EAAAE,QAAuBd,EAAeO,CAAa,EAAE,MAAM,EACtE,MAEF,KAAK,6BAA2B,gBAC9BK,EAAO,IAAI,EAAAE,QAAuBd,EAAeO,EAAe,EAAI,EAAE,MAAM,EAC5E,MAEF,KAAK,6BAA2B,IAChC,KAAK,6BAA2B,KAChC,KAAK,6BAA2B,MAAO,CACrCK,EAAO,EAAAG,QAAW,YAAYR,EAAeP,CAAa,EAC1D,KACF,CACA,KAAK,6BAA2B,OAChC,KAAK,6BAA2B,kBAAmB,CACjDY,EAAO,EAAAG,QAAW,kBAAkBR,EAAeP,EAAeC,CAAK,EACvE,KACF,CACA,KAAK,6BAA2B,eAChC,KAAK,6BAA2B,gBAAiB,CAC/CW,EAAO,EAAAG,QAAW,uBAAuBR,EAAeP,CAAa,EACrE,KACF,CACA,QACE,KACJ,CAEA,MAAO,CACL,GAAIW,EACJ,MAAOF,EACP,YAAaC,EACb,KAAAF,EACA,KAAAI,CACF,CACF,CAAC,EAED,OAAIP,GAAc,EAAAW,QAAgB,yBAAyBV,CAAc,EAElE,CAAE,GAAAd,EAAI,MAAAW,EAAO,YAAAC,EAAa,eAAAE,CAAe,CAClD,CAAC,EAGGW,EAAc,MAClB9B,EACA+B,EACAC,EACAC,EACAC,EACApC,EACAqC,IACG,CACH,MAAMC,EAAwC,MAAMpC,EAAS,uBAAuB,mBAClF+B,EACAC,CACF,EAGA,OAAIC,GAAYA,EAAS,QAAUG,GACjC,EAAAC,QAAiB,iBAAiB,CAChC,SAAArC,EACA,gBAAiBoC,EACjB,OAAAJ,EACA,IAAAlC,EACA,QAAAqC,CACF,CAAC,EAGIC,CACT,EAEa3D,EAAuB,MAAO,CAAE,IAAAqB,EAAK,IAAAC,EAAK,SAAAC,EAAU,KAAAC,CAAK,IAA8B,CAClG,KAAM,CAAE,MAAAC,EAAO,UAAAoC,EAAW,QAAAC,EAAS,cAAAC,CAAc,EAAI,EAAArC,QAAa,UAAUJ,CAAG,EACzE,CAAE,SAAAK,EAAU,GAAAC,EAAI,QAAA0B,CAAQ,EAAIjC,EAAI,OAChCoC,KAAM,EAAAO,SAAS3C,CAAG,EAGlB,CAAE,MAAAgB,EAAO,QAAAqB,EAAS,iBAAA7C,EAAkB,oBAAAD,CAAoB,EAAI,MAAMQ,EAAkB,CACxF,IAAAC,EACA,IAAAC,EACA,SAAAC,CACF,CAAC,EAWK0C,GAR2C,MAAM1C,EAAS,iBAAiB,kBAC/EE,EACAG,EACAD,EACA2B,EACAjB,CACF,GAE6D,KAAK,EAG5DmB,EAAiCrB,EAAYvB,EAAqBqD,EAAe5B,CAAK,EAGtFsB,EAAuB,MAAMN,EAAY9B,EAAU+B,EAASQ,EAAQ,GAAIN,EAAUC,EAAKpC,EAAKqC,EAAQ,OAAO,EAEjH,MAAO,CACL,cAAe,CACb,MAAAjC,EACA,GAAAG,EACA,SAAAD,EACA,KAAMf,EAAoB,KAC1B,YAAaA,EAAoB,YACjC,WAAYC,EAAiB,KAC7B,WAAY,MAAMU,EAAS,gBAAgB,aAAaK,EAAID,EAAUmC,EAAQ,EAAE,EAChF,cAAAC,EACA,UAAAF,EACA,SAAAL,EACA,QAAAE,EACA,KAAM,aAAW,UACjB,QAAS/C,EAAoBC,EAAqBC,EAAkB8C,CAAoB,CAC1F,CACF,CACF,EAEA,IAAO5D,EAAQ,CACb,qBAAAC,CACF",
6
- "names": ["utils_exports", "__export", "utils_default", "renderAsyncDashboard", "__toCommonJS", "import_parseurl", "import_types", "import_UserReports", "import_utils", "import_definitionUtils", "import_Scorecard", "import_ReportQuery", "import_localsHelper", "import_filtersTypeEnum", "setDashboardActions", "dashboardDefinition", "reportDefinition", "requestData", "reportName", "name", "actionsUrl", "executionId", "ReportActionsUtils", "getDefinitionData", "req", "res", "services", "next", "token", "LocalsHelper", "reportId", "id", "dataProductDefinitionsPath", "DefinitionUtils", "filtersData", "FilterUtils", "filtersQuery", "ReportQuery", "getSections", "dashboardData", "query", "section", "title", "description", "hasScorecard", "visualisations", "visDefinition", "type", "display", "visDescription", "visId", "data", "DashboardListUtils", "ScorecardVisualisation", "ChartUtils", "ScorecardsUtils", "updateStore", "tableId", "userId", "sections", "url", "filters", "dashboardRequestData", "UserReportsUtils", "csrfToken", "dprUser", "nestedBaseUrl", "parseUrl", "flattenedData"]
4
+ "sourcesContent": ["import parseUrl from 'parseurl'\nimport { Request } from 'express'\nimport { Services } from '../../../../../types/Services'\nimport {\n DashboardSection,\n DashboardVisualisation,\n DashboardVisualisationType,\n} from '../../../../../components/_dashboards/dashboard-visualisation/types'\nimport type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'\n\nimport type { DashboardDataResponse } from '../../../../../types/Metrics'\nimport type { RequestedReport } from '../../../../../types/UserReports'\nimport { ReportType } from '../../../../../types/UserReports'\nimport type { components } from '../../../../../types/api'\n\nimport ChartUtils from '../../../../../components/_charts/utils'\nimport DefinitionUtils from '../../../../../utils/definitionUtils'\nimport UserReportsUtils from '../../../../../components/user-reports/utils'\nimport DashboardListUtils from '../../../../../components/_dashboards/dashboard-list/utils'\nimport FilterUtils from '../../../../../components/_filters/utils'\nimport ScorecardsUtils from '../../../../../components/_dashboards/scorecard/utils'\nimport ScorecardVisualisation from '../../../../../components/_dashboards/scorecard/Scorecard'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport { FilterValue } from '../../../../../components/_filters/types'\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\n\nconst setDashboardActions = (\n dashboardDefinition: components['schemas']['DashboardDefinition'],\n reportDefinition: components['schemas']['ReportDefinitionSummary'],\n requestData?: RequestedReport,\n) => {\n const reportName = reportDefinition.name\n const { name } = dashboardDefinition\n const actionsUrl = requestData?.url?.request?.fullUrl\n const executionId = requestData?.executionId\n\n let actions = {}\n if (actionsUrl) {\n actions = {\n share: {\n reportName,\n name,\n url: actionsUrl,\n },\n copy: {\n url: actionsUrl,\n },\n }\n if (executionId) {\n actions = {\n ...actions,\n refresh: {\n url: actionsUrl,\n executionId,\n },\n }\n }\n }\n\n return ReportActionsUtils.getActions(actions)\n}\n\nconst getDefinitionData = async ({ req, res, services, next }: AsyncReportUtilsParams) => {\n const { token } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const dataProductDefinitionsPath = <string>req.query.dataProductDefinitionsPath\n\n // Dashboard Definition,\n const dashboardDefinition: components['schemas']['DashboardDefinition'] =\n await services.dashboardService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n // Report summary data\n const reportDefinition = await DefinitionUtils.getReportSummary(\n reportId,\n services.reportingService,\n token,\n <string>dataProductDefinitionsPath,\n )\n\n // Get the filters\n const filtersData = await FilterUtils.getFilters({\n fields: dashboardDefinition.filterFields || [],\n req,\n filtersType: FiltersType.INTERACTIVE,\n })\n\n const filtersQuery = FilterUtils.setRequestQueryFromFilterValues(filtersData.filters)\n\n // Create the query\n const query = new ReportQuery({\n fields: dashboardDefinition.filterFields || [],\n queryParams: filtersQuery,\n definitionsPath: <string>dataProductDefinitionsPath,\n reportType: ReportType.DASHBOARD,\n }).toRecordWithFilterPrefix(true)\n\n return {\n query,\n filters: filtersData,\n dashboardDefinition,\n reportDefinition,\n }\n}\n\nconst getSections = (\n dashboardDefinition: components['schemas']['DashboardDefinition'],\n dashboardData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n): DashboardSection[] => {\n return dashboardDefinition.sections.map((section: components['schemas']['DashboardSectionDefinition']) => {\n const { id, display: title, description } = section\n\n let hasScorecard = false\n const visualisations: DashboardVisualisation[] = section.visualisations.map(\n (visDefinition: components['schemas']['DashboardVisualisationDefinition']) => {\n const { type, display, description: visDescription, id: visId } = visDefinition\n\n let data: DashboardVisualisation['data'] | undefined\n\n switch (type) {\n case DashboardVisualisationType.LIST:\n data = DashboardListUtils.createList(visDefinition, dashboardData)\n break\n\n case DashboardVisualisationType.SCORECARD:\n hasScorecard = true\n data = new ScorecardVisualisation(dashboardData, visDefinition).build()\n break\n\n case DashboardVisualisationType.SCORECARD_GROUP:\n data = new ScorecardVisualisation(dashboardData, visDefinition, true).build()\n break\n\n case DashboardVisualisationType.BAR:\n case DashboardVisualisationType.LINE:\n case DashboardVisualisationType.DONUT: {\n data = ChartUtils.createChart(visDefinition, dashboardData)\n break\n }\n case DashboardVisualisationType.MATRIX_TIMESERIES: {\n data = ChartUtils.createMatrixChart(visDefinition, dashboardData, query)\n break\n }\n case DashboardVisualisationType.BAR_TIMESERIES:\n case DashboardVisualisationType.LINE_TIMESERIES: {\n data = ChartUtils.createTimeseriesCharts(visDefinition, dashboardData)\n break\n }\n default:\n break\n }\n\n return {\n id: visId,\n title: display,\n description: visDescription,\n type,\n data,\n }\n },\n )\n\n if (hasScorecard) ScorecardsUtils.mergeScorecardsIntoGroup(visualisations)\n\n return { id, title, description, visualisations }\n })\n}\n\nconst updateStore = async (\n services: Services,\n tableId: string,\n userId: string,\n sections: DashboardSection[],\n req: Request,\n filters: FilterValue[],\n): Promise<RequestedReport | undefined> => {\n const { requestedReportService } = services\n const dashboardRequestData = requestedReportService\n ? await requestedReportService.getReportByTableId(tableId, userId)\n : undefined\n\n // Add to recently viewed\n if (sections && sections.length && dashboardRequestData) {\n UserReportsUtils.updateLastViewed({\n services,\n reportStateData: dashboardRequestData,\n userId,\n req,\n filters,\n })\n }\n\n return dashboardRequestData\n}\n\nexport const renderAsyncDashboard = async ({ req, res, services, next }: AsyncReportUtilsParams) => {\n const { token, csrfToken, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)\n const { reportId, id, tableId } = req.params\n const { bookmarkService, requestedReportService } = services\n const url = parseUrl(req)\n\n // Get the definition Data\n const { query, filters, reportDefinition, dashboardDefinition } = await getDefinitionData({\n req,\n res,\n services,\n })\n\n // Get the results data\n const dashboardData: DashboardDataResponse[][] = await services.dashboardService.getAsyncDashboard(\n token,\n id,\n reportId,\n tableId,\n query,\n )\n\n const flattenedData: DashboardDataResponse[] = dashboardData.flat()\n\n // Get the dashboard parts\n const sections: DashboardSection[] = getSections(dashboardDefinition, flattenedData, query)\n\n // Update the store\n let dashboardRequestData\n if (requestedReportService) {\n dashboardRequestData = await updateStore(services, tableId, dprUser.id, sections, req, filters.filters)\n }\n\n return {\n dashboardData: {\n token,\n id,\n reportId,\n name: dashboardDefinition.name,\n description: dashboardDefinition.description,\n reportName: reportDefinition.name,\n bookmarked: bookmarkService ? await bookmarkService.isBookmarked(id, reportId, dprUser.id) : false,\n nestedBaseUrl,\n csrfToken,\n sections,\n filters,\n type: ReportType.DASHBOARD,\n actions: setDashboardActions(dashboardDefinition, reportDefinition, dashboardRequestData),\n },\n }\n}\n\nexport default {\n renderAsyncDashboard,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["utils_exports", "__export", "utils_default", "renderAsyncDashboard", "__toCommonJS", "import_parseurl", "import_types", "import_UserReports", "import_utils", "import_definitionUtils", "import_Scorecard", "import_ReportQuery", "import_localsHelper", "import_filtersTypeEnum", "setDashboardActions", "dashboardDefinition", "reportDefinition", "requestData", "reportName", "name", "actionsUrl", "executionId", "actions", "ReportActionsUtils", "getDefinitionData", "req", "res", "services", "next", "token", "LocalsHelper", "reportId", "id", "dataProductDefinitionsPath", "DefinitionUtils", "filtersData", "FilterUtils", "filtersQuery", "ReportQuery", "getSections", "dashboardData", "query", "section", "title", "description", "hasScorecard", "visualisations", "visDefinition", "type", "display", "visDescription", "visId", "data", "DashboardListUtils", "ScorecardVisualisation", "ChartUtils", "ScorecardsUtils", "updateStore", "tableId", "userId", "sections", "filters", "requestedReportService", "dashboardRequestData", "UserReportsUtils", "csrfToken", "dprUser", "nestedBaseUrl", "bookmarkService", "url", "parseUrl", "flattenedData"]
7
7
  }
@@ -1,17 +1,13 @@
1
1
  import parseUrl from 'parseurl'
2
- import { Url } from 'url'
3
2
  import { Request } from 'express'
4
- import type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'
5
-
3
+ import { Services } from '../../../../../types/Services'
6
4
  import {
7
- DashboardUIVisualisation,
5
+ DashboardSection,
6
+ DashboardVisualisation,
8
7
  DashboardVisualisationType,
9
- ListVisualisation,
10
- type DashboardDefinition,
11
- type DashboardSection,
12
- type DashboardUISection,
13
- type DashboardVisualisation,
14
- } from '../../../../../components/_dashboards/dashboard/types'
8
+ } from '../../../../../components/_dashboards/dashboard-visualisation/types'
9
+ import type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'
10
+
15
11
  import type { DashboardDataResponse } from '../../../../../types/Metrics'
16
12
  import type { RequestedReport } from '../../../../../types/UserReports'
17
13
  import { ReportType } from '../../../../../types/UserReports'
@@ -27,48 +23,53 @@ import ScorecardVisualisation from '../../../../../components/_dashboards/scorec
27
23
  import ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'
28
24
  import ReportQuery from '../../../../../types/ReportQuery'
29
25
  import LocalsHelper from '../../../../../utils/localsHelper'
30
- import { Services } from '../../../../../types/Services'
31
26
  import { FilterValue } from '../../../../../components/_filters/types'
32
27
  import { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'
33
28
 
34
29
  const setDashboardActions = (
35
- dashboardDefinition: DashboardDefinition,
30
+ dashboardDefinition: components['schemas']['DashboardDefinition'],
36
31
  reportDefinition: components['schemas']['ReportDefinitionSummary'],
37
- requestData: RequestedReport,
32
+ requestData?: RequestedReport,
38
33
  ) => {
39
34
  const reportName = reportDefinition.name
40
35
  const { name } = dashboardDefinition
41
- const actionsUrl = requestData.url.request.fullUrl
42
- const { executionId } = requestData
43
-
44
- return ReportActionsUtils.getActions({
45
- share: {
46
- reportName,
47
- name,
48
- url: actionsUrl,
49
- },
50
- refresh: {
51
- url: actionsUrl,
52
- executionId,
53
- },
54
- copy: {
55
- url: actionsUrl,
56
- },
57
- })
36
+ const actionsUrl = requestData?.url?.request?.fullUrl
37
+ const executionId = requestData?.executionId
38
+
39
+ let actions = {}
40
+ if (actionsUrl) {
41
+ actions = {
42
+ share: {
43
+ reportName,
44
+ name,
45
+ url: actionsUrl,
46
+ },
47
+ copy: {
48
+ url: actionsUrl,
49
+ },
50
+ }
51
+ if (executionId) {
52
+ actions = {
53
+ ...actions,
54
+ refresh: {
55
+ url: actionsUrl,
56
+ executionId,
57
+ },
58
+ }
59
+ }
60
+ }
61
+
62
+ return ReportActionsUtils.getActions(actions)
58
63
  }
59
64
 
60
65
  const getDefinitionData = async ({ req, res, services, next }: AsyncReportUtilsParams) => {
61
66
  const { token } = LocalsHelper.getValues(res)
62
67
  const { reportId, id } = req.params
63
- const { dataProductDefinitionsPath } = req.query
68
+ const dataProductDefinitionsPath = <string>req.query.dataProductDefinitionsPath
64
69
 
65
70
  // Dashboard Definition,
66
- const dashboardDefinition: DashboardDefinition = await services.dashboardService.getDefinition(
67
- token,
68
- reportId,
69
- id,
70
- dataProductDefinitionsPath,
71
- )
71
+ const dashboardDefinition: components['schemas']['DashboardDefinition'] =
72
+ await services.dashboardService.getDefinition(token, reportId, id, dataProductDefinitionsPath)
72
73
 
73
74
  // Report summary data
74
75
  const reportDefinition = await DefinitionUtils.getReportSummary(
@@ -104,61 +105,62 @@ const getDefinitionData = async ({ req, res, services, next }: AsyncReportUtilsP
104
105
  }
105
106
 
106
107
  const getSections = (
107
- dashboardDefinition: DashboardDefinition,
108
+ dashboardDefinition: components['schemas']['DashboardDefinition'],
108
109
  dashboardData: DashboardDataResponse[],
109
110
  query: Record<string, string | string[]>,
110
- ): DashboardUISection[] => {
111
- return dashboardDefinition.sections.map((section: DashboardSection) => {
111
+ ): DashboardSection[] => {
112
+ return dashboardDefinition.sections.map((section: components['schemas']['DashboardSectionDefinition']) => {
112
113
  const { id, display: title, description } = section
113
114
 
114
115
  let hasScorecard = false
115
- const visualisations = section.visualisations.map((visDefinition: DashboardVisualisation) => {
116
- const { type, display, description: visDescription, id: visId } = visDefinition
117
-
118
- let data: DashboardUIVisualisation['data']
119
-
120
- switch (type) {
121
- case DashboardVisualisationType.LIST:
122
- data = DashboardListUtils.createList(visDefinition as ListVisualisation, dashboardData)
123
- break
124
-
125
- case DashboardVisualisationType.SCORECARD:
126
- hasScorecard = true
127
- data = new ScorecardVisualisation(dashboardData, visDefinition).build()
128
- break
129
-
130
- case DashboardVisualisationType.SCORECARD_GROUP:
131
- data = new ScorecardVisualisation(dashboardData, visDefinition, true).build()
132
- break
133
-
134
- case DashboardVisualisationType.BAR:
135
- case DashboardVisualisationType.LINE:
136
- case DashboardVisualisationType.DONUT: {
137
- data = ChartUtils.createChart(visDefinition, dashboardData)
138
- break
139
- }
140
- case DashboardVisualisationType.MATRIX:
141
- case DashboardVisualisationType.MATRIX_TIMESERIES: {
142
- data = ChartUtils.createMatrixChart(visDefinition, dashboardData, query)
143
- break
116
+ const visualisations: DashboardVisualisation[] = section.visualisations.map(
117
+ (visDefinition: components['schemas']['DashboardVisualisationDefinition']) => {
118
+ const { type, display, description: visDescription, id: visId } = visDefinition
119
+
120
+ let data: DashboardVisualisation['data'] | undefined
121
+
122
+ switch (type) {
123
+ case DashboardVisualisationType.LIST:
124
+ data = DashboardListUtils.createList(visDefinition, dashboardData)
125
+ break
126
+
127
+ case DashboardVisualisationType.SCORECARD:
128
+ hasScorecard = true
129
+ data = new ScorecardVisualisation(dashboardData, visDefinition).build()
130
+ break
131
+
132
+ case DashboardVisualisationType.SCORECARD_GROUP:
133
+ data = new ScorecardVisualisation(dashboardData, visDefinition, true).build()
134
+ break
135
+
136
+ case DashboardVisualisationType.BAR:
137
+ case DashboardVisualisationType.LINE:
138
+ case DashboardVisualisationType.DONUT: {
139
+ data = ChartUtils.createChart(visDefinition, dashboardData)
140
+ break
141
+ }
142
+ case DashboardVisualisationType.MATRIX_TIMESERIES: {
143
+ data = ChartUtils.createMatrixChart(visDefinition, dashboardData, query)
144
+ break
145
+ }
146
+ case DashboardVisualisationType.BAR_TIMESERIES:
147
+ case DashboardVisualisationType.LINE_TIMESERIES: {
148
+ data = ChartUtils.createTimeseriesCharts(visDefinition, dashboardData)
149
+ break
150
+ }
151
+ default:
152
+ break
144
153
  }
145
- case DashboardVisualisationType.BAR_TIMESERIES:
146
- case DashboardVisualisationType.LINE_TIMESERIES: {
147
- data = ChartUtils.createTimeseriesCharts(visDefinition, dashboardData)
148
- break
149
- }
150
- default:
151
- break
152
- }
153
154
 
154
- return {
155
- id: visId,
156
- title: display,
157
- description: visDescription,
158
- type,
159
- data,
160
- }
161
- })
155
+ return {
156
+ id: visId,
157
+ title: display,
158
+ description: visDescription,
159
+ type,
160
+ data,
161
+ }
162
+ },
163
+ )
162
164
 
163
165
  if (hasScorecard) ScorecardsUtils.mergeScorecardsIntoGroup(visualisations)
164
166
 
@@ -170,15 +172,14 @@ const updateStore = async (
170
172
  services: Services,
171
173
  tableId: string,
172
174
  userId: string,
173
- sections: DashboardUISection[],
174
- url: Url,
175
+ sections: DashboardSection[],
175
176
  req: Request,
176
177
  filters: FilterValue[],
177
- ) => {
178
- const dashboardRequestData: RequestedReport = await services.requestedReportService.getReportByTableId(
179
- tableId,
180
- userId,
181
- )
178
+ ): Promise<RequestedReport | undefined> => {
179
+ const { requestedReportService } = services
180
+ const dashboardRequestData = requestedReportService
181
+ ? await requestedReportService.getReportByTableId(tableId, userId)
182
+ : undefined
182
183
 
183
184
  // Add to recently viewed
184
185
  if (sections && sections.length && dashboardRequestData) {
@@ -197,6 +198,7 @@ const updateStore = async (
197
198
  export const renderAsyncDashboard = async ({ req, res, services, next }: AsyncReportUtilsParams) => {
198
199
  const { token, csrfToken, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)
199
200
  const { reportId, id, tableId } = req.params
201
+ const { bookmarkService, requestedReportService } = services
200
202
  const url = parseUrl(req)
201
203
 
202
204
  // Get the definition Data
@@ -218,10 +220,13 @@ export const renderAsyncDashboard = async ({ req, res, services, next }: AsyncRe
218
220
  const flattenedData: DashboardDataResponse[] = dashboardData.flat()
219
221
 
220
222
  // Get the dashboard parts
221
- const sections: DashboardUISection[] = getSections(dashboardDefinition, flattenedData, query)
223
+ const sections: DashboardSection[] = getSections(dashboardDefinition, flattenedData, query)
222
224
 
223
225
  // Update the store
224
- const dashboardRequestData = await updateStore(services, tableId, dprUser.id, sections, url, req, filters.filters)
226
+ let dashboardRequestData
227
+ if (requestedReportService) {
228
+ dashboardRequestData = await updateStore(services, tableId, dprUser.id, sections, req, filters.filters)
229
+ }
225
230
 
226
231
  return {
227
232
  dashboardData: {
@@ -231,7 +236,7 @@ export const renderAsyncDashboard = async ({ req, res, services, next }: AsyncRe
231
236
  name: dashboardDefinition.name,
232
237
  description: dashboardDefinition.description,
233
238
  reportName: reportDefinition.name,
234
- bookmarked: await services.bookmarkService.isBookmarked(id, reportId, dprUser.id),
239
+ bookmarked: bookmarkService ? await bookmarkService.isBookmarked(id, reportId, dprUser.id) : false,
235
240
  nestedBaseUrl,
236
241
  csrfToken,
237
242
  sections,
@@ -1,2 +1,2 @@
1
- var f=Object.create;var o=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var b=(t,e)=>{for(var r in e)o(t,r,{get:e[r],enumerable:!0})},d=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of w(e))!S.call(t,a)&&a!==r&&o(t,a,{get:()=>e[a],enumerable:!(s=R(e,a))||s.enumerable});return t};var p=(t,e,r)=>(r=t!=null?f(E(t)):{},d(e||!t||!t.__esModule?o(r,"default",{value:t,enumerable:!0}):r,t)),H=t=>d(o({},"__esModule",{value:!0}),t);var P={};b(P,{ViewAyncReportController:()=>y,default:()=>I});module.exports=H(P);var m=p(require("../../../../../components/error-summary/utils")),u=p(require("../../../../../utils/localsHelper")),h=p(require("./utils")),n=p(require("../../utils"));class y{constructor(e,r){this.GET=async(e,r,s)=>{const{type:a}=e.params;try{const l={req:e,res:r,services:this.services,next:s},i=await h.default.renderReport(l);r.render("dpr/routes/journeys/view-report/report",{layoutPath:this.layoutPath,...i})}catch(l){const i=m.default.handleError(l,e.params.type);let c;if(i.status==="EXPIRED"){const{dprUser:v}=u.default.getValues(r);c=await this.services.recentlyViewedService.asyncSetToExpiredByTableId(e.params.tableId,v.id)}e.body.title=`Failed to retrieve ${a}`,e.body.error=i,c&&(e.body.refreshLink=c),s()}};this.applyFilters=async(e,r,s)=>{await n.default.applyReportInteractiveQuery(e,r,this.services,"filters")};this.applyColumns=async(e,r,s)=>{await n.default.applyReportInteractiveQuery(e,r,this.services,"columns")};this.layoutPath=e,this.services=r}}var I=y;0&&(module.exports={ViewAyncReportController});
1
+ var R=Object.create;var i=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var H=(t,r)=>{for(var e in r)i(t,e,{get:r[e],enumerable:!0})},m=(t,r,e,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of E(r))!b.call(t,o)&&o!==e&&i(t,o,{get:()=>r[o],enumerable:!(s=w(r,o))||s.enumerable});return t};var p=(t,r,e)=>(e=t!=null?R(S(t)):{},m(r||!t||!t.__esModule?i(e,"default",{value:t,enumerable:!0}):e,t)),I=t=>m(i({},"__esModule",{value:!0}),t);var x={};H(x,{ViewAyncReportController:()=>y,default:()=>P});module.exports=I(x);var u=p(require("../../../../../components/error-summary/utils")),h=p(require("../../../../../utils/localsHelper")),v=p(require("./utils")),n=p(require("../../utils"));class y{constructor(r,e){this.GET=async(r,e,s)=>{const{type:o}=r.params;try{const c={req:r,res:e,services:this.services,next:s},a=await v.default.renderReport(c);e.render("dpr/routes/journeys/view-report/report",{layoutPath:this.layoutPath,...a})}catch(c){const a=u.default.handleError(c,r.params.type);let l;const{recentlyViewedService:d}=this.services;if(a.status==="EXPIRED"&&d){const{dprUser:f}=h.default.getValues(e);l=await d.asyncSetToExpiredByTableId(r.params.tableId,f.id)}r.body.title=`Failed to retrieve ${o}`,r.body.error=a,l&&(r.body.refreshLink=l),s()}};this.applyFilters=async(r,e,s)=>{await n.default.applyReportInteractiveQuery(r,e,this.services,"filters")};this.applyColumns=async(r,e,s)=>{await n.default.applyReportInteractiveQuery(r,e,this.services,"columns")};this.layoutPath=r,this.services=e}}var P=y;0&&(module.exports={ViewAyncReportController});
2
2
  //# sourceMappingURL=controller.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/dpr/routes/journeys/view-report/async/report/controller.ts"],
4
- "sourcesContent": ["import { RequestHandler } from 'express'\nimport { Services } from '../../../../../types/Services'\nimport ErrorSummaryUtils from '../../../../../components/error-summary/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport AsyncReportUtils from './utils'\nimport ViewReportUtils from '../../utils'\n\nclass ViewAyncReportController {\n layoutPath: string\n\n services: Services\n\n constructor(layoutPath: string, services: Services) {\n this.layoutPath = layoutPath\n this.services = services\n }\n\n GET: RequestHandler = async (req, res, next) => {\n const { type } = req.params\n try {\n const params = { req, res, services: this.services, next }\n\n const renderData = await AsyncReportUtils.renderReport(params)\n\n res.render(`dpr/routes/journeys/view-report/report`, {\n layoutPath: this.layoutPath,\n ...renderData,\n })\n } catch (error) {\n const dprError = ErrorSummaryUtils.handleError(error, req.params.type)\n let refreshLink\n if (dprError.status === 'EXPIRED') {\n const { dprUser } = LocalsHelper.getValues(res)\n refreshLink = await this.services.recentlyViewedService.asyncSetToExpiredByTableId(\n req.params.tableId,\n dprUser.id,\n )\n }\n req.body.title = `Failed to retrieve ${type}`\n req.body.error = dprError\n if (refreshLink) {\n req.body.refreshLink = refreshLink\n }\n next()\n }\n }\n\n applyFilters: RequestHandler = async (req, res, next) => {\n await ViewReportUtils.applyReportInteractiveQuery(req, res, this.services, 'filters')\n }\n\n applyColumns: RequestHandler = async (req, res, next) => {\n await ViewReportUtils.applyReportInteractiveQuery(req, res, this.services, 'columns')\n }\n}\n\nexport { ViewAyncReportController }\nexport default ViewAyncReportController\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAEA,IAAAK,EAA8B,4DAC9BC,EAAyB,gDACzBD,EAA6B,sBAC7BA,EAA4B,0BAE5B,MAAMH,CAAyB,CAK7B,YAAYK,EAAoBC,EAAoB,CAKpD,SAAsB,MAAOC,EAAKC,EAAKC,IAAS,CAC9C,KAAM,CAAE,KAAAC,CAAK,EAAIH,EAAI,OACrB,GAAI,CACF,MAAMI,EAAS,CAAE,IAAAJ,EAAK,IAAAC,EAAK,SAAU,KAAK,SAAU,KAAAC,CAAK,EAEnDG,EAAa,MAAM,EAAAC,QAAiB,aAAaF,CAAM,EAE7DH,EAAI,OAAO,yCAA0C,CACnD,WAAY,KAAK,WACjB,GAAGI,CACL,CAAC,CACH,OAASE,EAAO,CACd,MAAMC,EAAW,EAAAC,QAAkB,YAAYF,EAAOP,EAAI,OAAO,IAAI,EACrE,IAAIU,EACJ,GAAIF,EAAS,SAAW,UAAW,CACjC,KAAM,CAAE,QAAAG,CAAQ,EAAI,EAAAC,QAAa,UAAUX,CAAG,EAC9CS,EAAc,MAAM,KAAK,SAAS,sBAAsB,2BACtDV,EAAI,OAAO,QACXW,EAAQ,EACV,CACF,CACAX,EAAI,KAAK,MAAQ,sBAAsBG,CAAI,GAC3CH,EAAI,KAAK,MAAQQ,EACbE,IACFV,EAAI,KAAK,YAAcU,GAEzBR,EAAK,CACP,CACF,EAEA,kBAA+B,MAAOF,EAAKC,EAAKC,IAAS,CACvD,MAAM,EAAAW,QAAgB,4BAA4Bb,EAAKC,EAAK,KAAK,SAAU,SAAS,CACtF,EAEA,kBAA+B,MAAOD,EAAKC,EAAKC,IAAS,CACvD,MAAM,EAAAW,QAAgB,4BAA4Bb,EAAKC,EAAK,KAAK,SAAU,SAAS,CACtF,EAxCE,KAAK,WAAaH,EAClB,KAAK,SAAWC,CAClB,CAuCF,CAGA,IAAOL,EAAQD",
6
- "names": ["controller_exports", "__export", "ViewAyncReportController", "controller_default", "__toCommonJS", "import_utils", "import_localsHelper", "layoutPath", "services", "req", "res", "next", "type", "params", "renderData", "AsyncReportUtils", "error", "dprError", "ErrorSummaryUtils", "refreshLink", "dprUser", "LocalsHelper", "ViewReportUtils"]
4
+ "sourcesContent": ["import { RequestHandler } from 'express'\nimport { Services } from '../../../../../types/Services'\nimport ErrorSummaryUtils from '../../../../../components/error-summary/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport AsyncReportUtils from './utils'\nimport ViewReportUtils from '../../utils'\n\nclass ViewAyncReportController {\n layoutPath: string\n\n services: Services\n\n constructor(layoutPath: string, services: Services) {\n this.layoutPath = layoutPath\n this.services = services\n }\n\n GET: RequestHandler = async (req, res, next) => {\n const { type } = req.params\n try {\n const params = { req, res, services: this.services, next }\n\n const renderData = await AsyncReportUtils.renderReport(params)\n\n res.render(`dpr/routes/journeys/view-report/report`, {\n layoutPath: this.layoutPath,\n ...renderData,\n })\n } catch (error) {\n const dprError = ErrorSummaryUtils.handleError(<Error>error, req.params.type)\n let refreshLink\n const { recentlyViewedService } = this.services\n if (dprError.status === 'EXPIRED' && recentlyViewedService) {\n const { dprUser } = LocalsHelper.getValues(res)\n refreshLink = await recentlyViewedService.asyncSetToExpiredByTableId(req.params.tableId, dprUser.id)\n }\n req.body.title = `Failed to retrieve ${type}`\n req.body.error = dprError\n if (refreshLink) {\n req.body.refreshLink = refreshLink\n }\n next()\n }\n }\n\n applyFilters: RequestHandler = async (req, res, next) => {\n await ViewReportUtils.applyReportInteractiveQuery(req, res, this.services, 'filters')\n }\n\n applyColumns: RequestHandler = async (req, res, next) => {\n await ViewReportUtils.applyReportInteractiveQuery(req, res, this.services, 'columns')\n }\n}\n\nexport { ViewAyncReportController }\nexport default ViewAyncReportController\n"],
5
+ "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAEA,IAAAK,EAA8B,4DAC9BC,EAAyB,gDACzBD,EAA6B,sBAC7BA,EAA4B,0BAE5B,MAAMH,CAAyB,CAK7B,YAAYK,EAAoBC,EAAoB,CAKpD,SAAsB,MAAOC,EAAKC,EAAKC,IAAS,CAC9C,KAAM,CAAE,KAAAC,CAAK,EAAIH,EAAI,OACrB,GAAI,CACF,MAAMI,EAAS,CAAE,IAAAJ,EAAK,IAAAC,EAAK,SAAU,KAAK,SAAU,KAAAC,CAAK,EAEnDG,EAAa,MAAM,EAAAC,QAAiB,aAAaF,CAAM,EAE7DH,EAAI,OAAO,yCAA0C,CACnD,WAAY,KAAK,WACjB,GAAGI,CACL,CAAC,CACH,OAASE,EAAO,CACd,MAAMC,EAAW,EAAAC,QAAkB,YAAmBF,EAAOP,EAAI,OAAO,IAAI,EAC5E,IAAIU,EACJ,KAAM,CAAE,sBAAAC,CAAsB,EAAI,KAAK,SACvC,GAAIH,EAAS,SAAW,WAAaG,EAAuB,CAC1D,KAAM,CAAE,QAAAC,CAAQ,EAAI,EAAAC,QAAa,UAAUZ,CAAG,EAC9CS,EAAc,MAAMC,EAAsB,2BAA2BX,EAAI,OAAO,QAASY,EAAQ,EAAE,CACrG,CACAZ,EAAI,KAAK,MAAQ,sBAAsBG,CAAI,GAC3CH,EAAI,KAAK,MAAQQ,EACbE,IACFV,EAAI,KAAK,YAAcU,GAEzBR,EAAK,CACP,CACF,EAEA,kBAA+B,MAAOF,EAAKC,EAAKC,IAAS,CACvD,MAAM,EAAAY,QAAgB,4BAA4Bd,EAAKC,EAAK,KAAK,SAAU,SAAS,CACtF,EAEA,kBAA+B,MAAOD,EAAKC,EAAKC,IAAS,CACvD,MAAM,EAAAY,QAAgB,4BAA4Bd,EAAKC,EAAK,KAAK,SAAU,SAAS,CACtF,EAtCE,KAAK,WAAaH,EAClB,KAAK,SAAWC,CAClB,CAqCF,CAGA,IAAOL,EAAQD",
6
+ "names": ["controller_exports", "__export", "ViewAyncReportController", "controller_default", "__toCommonJS", "import_utils", "import_localsHelper", "layoutPath", "services", "req", "res", "next", "type", "params", "renderData", "AsyncReportUtils", "error", "dprError", "ErrorSummaryUtils", "refreshLink", "recentlyViewedService", "dprUser", "LocalsHelper", "ViewReportUtils"]
7
7
  }
@@ -27,14 +27,12 @@ class ViewAyncReportController {
27
27
  ...renderData,
28
28
  })
29
29
  } catch (error) {
30
- const dprError = ErrorSummaryUtils.handleError(error, req.params.type)
30
+ const dprError = ErrorSummaryUtils.handleError(<Error>error, req.params.type)
31
31
  let refreshLink
32
- if (dprError.status === 'EXPIRED') {
32
+ const { recentlyViewedService } = this.services
33
+ if (dprError.status === 'EXPIRED' && recentlyViewedService) {
33
34
  const { dprUser } = LocalsHelper.getValues(res)
34
- refreshLink = await this.services.recentlyViewedService.asyncSetToExpiredByTableId(
35
- req.params.tableId,
36
- dprUser.id,
37
- )
35
+ refreshLink = await recentlyViewedService.asyncSetToExpiredByTableId(req.params.tableId, dprUser.id)
38
36
  }
39
37
  req.body.title = `Failed to retrieve ${type}`
40
38
  req.body.error = dprError