@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/data/reportingClient.ts"],
4
- "sourcesContent": ["import ReportQuery from '../types/ReportQuery'\nimport logger from '../utils/logger'\nimport RestClient from './restClient'\nimport Dict = NodeJS.Dict\nimport { components, operations } from '../types/api'\nimport { ApiConfig, Count, FieldValuesRequest, ListWithWarnings } from './types'\nimport type { ResultWithHeaders } from './restClient'\n\nclass ReportingClient {\n restClient: RestClient\n\n constructor(config: ApiConfig) {\n this.restClient = new RestClient('Reporting API Client', config)\n }\n\n getCount(resourceName: string, token: string, countRequest: ReportQuery): Promise<number> {\n logger.info(`Reporting client: Get count. { resourceName: ${resourceName} }`)\n\n return this.restClient\n .get({\n path: `/${resourceName}/count`,\n query: countRequest.toRecordWithFilterPrefix(true),\n token,\n })\n .then((response) => (<Count>response).count)\n }\n\n getList(resourceName: string, token: string, listRequest: ReportQuery): Promise<Array<Dict<string>>> {\n return this.getListWithWarnings(resourceName, token, listRequest).then((response) => response.data)\n }\n\n getListWithWarnings(resourceName: string, token: string, listRequest: ReportQuery): Promise<ListWithWarnings> {\n logger.info(`Reporting client: Get list. { resourceName: ${resourceName} }`)\n\n return this.restClient\n .getWithHeaders<Array<Dict<string>>>({\n path: `/${resourceName}`,\n query: listRequest.toRecordWithFilterPrefix(true),\n token,\n })\n .then((response: ResultWithHeaders<Array<Dict<string>>>) => ({\n data: response.data,\n warnings: {\n noDataAvailable: response.headers['x-no-data-warning'],\n },\n }))\n }\n\n getDefinitionSummary(\n token: string,\n reportId: string,\n definitionsPath?: string,\n ): Promise<components['schemas']['ReportDefinitionSummary']> {\n this.logInfo('Get definition summary', { reportId })\n\n const queryParams: operations['definitionSummary']['parameters']['query'] = {\n dataProductDefinitionsPath: definitionsPath,\n }\n\n return this.restClient\n .get({\n path: `/definitions/${reportId}`,\n query: queryParams,\n token,\n })\n .then((response) => <components['schemas']['ReportDefinitionSummary']>response)\n }\n\n getDefinitions(\n token: string,\n definitionsPath?: string,\n ): Promise<Array<components['schemas']['ReportDefinitionSummary']>> {\n this.logInfo('Get definitions')\n\n const params: operations['definitions_1']['parameters'] = {\n query: {\n renderMethod: 'HTML',\n dataProductDefinitionsPath: definitionsPath,\n },\n }\n\n return this.restClient\n .get({\n path: '/definitions',\n query: params.query,\n token,\n })\n .then((response) => <Array<components['schemas']['ReportDefinitionSummary']>>response)\n }\n\n getDefinition(\n token: string,\n reportId: string,\n variantId: string,\n definitionsPath?: string,\n ): Promise<components['schemas']['SingleVariantReportDefinition']> {\n const query = {\n dataProductDefinitionsPath: definitionsPath,\n }\n this.logInfo('Get definition', { reportId, variantId })\n\n return this.restClient\n .get({\n path: `/definitions/${reportId}/${variantId}`,\n query,\n token,\n })\n .then((response) => <components['schemas']['SingleVariantReportDefinition']>response)\n }\n\n getFieldValues({\n token,\n definitionName,\n variantName,\n fieldName,\n prefix,\n definitionsPath,\n }: FieldValuesRequest): Promise<Array<string>> {\n const query = {\n dataProductDefinitionsPath: definitionsPath,\n prefix,\n }\n this.logInfo('Get field values', { definitionName, variantName, fieldName, prefix })\n\n return this.restClient\n .get({\n path: `/reports/${definitionName}/${variantName}/${fieldName}`,\n token,\n query,\n })\n .then((response) => <Array<string>>response)\n }\n\n requestAsyncReport(\n token: string,\n reportId: string,\n variantId: string,\n query: Record<string, string | boolean | number>,\n ): Promise<Dict<string>> {\n this.logInfo('Request report', { reportId, variantId })\n\n return this.restClient\n .get({\n path: `/async/reports/${reportId}/${variantId}`,\n token,\n query,\n })\n .then((response) => <Dict<string>>response)\n }\n\n cancelAsyncRequest(\n token: string,\n reportId: string,\n variantId: string,\n executionId: string,\n dataProductDefinitionsPath?: string,\n ): Promise<Dict<string>> {\n this.logInfo('Cancel Request', { reportId, variantId, executionId })\n\n return this.restClient\n .delete({\n path: `/reports/${reportId}/${variantId}/statements/${executionId}`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n getAsyncReport(\n token: string,\n reportId: string,\n variantId: string,\n tableId: string,\n query: Dict<string | number>,\n ): Promise<Array<Dict<string>>> {\n this.logInfo('Get Data', { reportId, variantId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${variantId}/tables/${tableId}/result`,\n token,\n query,\n })\n .then((response) => <Array<Dict<string>>>response)\n }\n\n getAsyncSummaryReport(\n token: string,\n reportId: string,\n variantId: string,\n tableId: string,\n summaryId: string,\n query: Dict<string | number>,\n ): Promise<Array<Dict<string>>> {\n this.logInfo('Get summary data', { reportId, variantId, tableId, summaryId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${variantId}/tables/${tableId}/result/summary/${summaryId}`,\n token,\n query,\n })\n .then((response) => <Array<Dict<string>>>response)\n }\n\n getAsyncReportStatus(\n token: string,\n reportId: string,\n variantId: string,\n executionId: string,\n dataProductDefinitionsPath?: string,\n tableId?: string,\n ): Promise<Dict<string>> {\n this.logInfo('Get status', { reportId, variantId, tableId, executionId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${variantId}/statements/${executionId}/status`,\n token,\n query: {\n dataProductDefinitionsPath,\n tableId,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n getAsyncCount(token: string, tableId: string, dataProductDefinitionsPath?: string): Promise<number> {\n this.logInfo('Get count', { tableId })\n\n return this.restClient\n .get({\n path: `/report/tables/${tableId}/count`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => (<Count>response).count)\n }\n\n getAsyncInteractiveCount(\n token: string,\n tableId: string,\n reportId: string,\n id: string,\n filters: ReportQuery,\n ): Promise<number> {\n this.logInfo('Get interactive count', { tableId, reportId, id })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${id}/tables/${tableId}/count`,\n token,\n query: filters.toRecordWithFilterPrefix(true),\n })\n .then((response) => (<Count>response).count)\n }\n\n logInfo(title: string, args?: Dict<string>) {\n logger.info(`Reporting Client: ${title}:`)\n if (args && Object.keys(args).length) logger.info(JSON.stringify(args, null, 2))\n }\n}\n\nexport { ReportingClient }\nexport default ReportingClient\n"],
4
+ "sourcesContent": ["import ReportQuery from '../types/ReportQuery'\nimport logger from '../utils/logger'\nimport RestClient from './restClient'\nimport Dict = NodeJS.Dict\nimport { components, operations } from '../types/api'\nimport { ApiConfig, Count, FieldValuesRequest, ListWithWarnings } from './types'\nimport type { ResultWithHeaders } from './restClient'\n\nclass ReportingClient {\n restClient: RestClient\n\n constructor(config: ApiConfig) {\n this.restClient = new RestClient('Reporting API Client', config)\n }\n\n getCount(resourceName: string, token: string, countRequest: ReportQuery): Promise<number> {\n logger.info(`Reporting client: Get count. { resourceName: ${resourceName} }`)\n\n return this.restClient\n .get({\n path: `/${resourceName}/count`,\n query: countRequest.toRecordWithFilterPrefix(true),\n token,\n })\n .then((response) => (<Count>response).count)\n }\n\n getList(resourceName: string, token: string, listRequest: ReportQuery): Promise<Array<Dict<string>>> {\n return this.getListWithWarnings(resourceName, token, listRequest).then((response) => response.data)\n }\n\n getListWithWarnings(resourceName: string, token: string, listRequest: ReportQuery): Promise<ListWithWarnings> {\n logger.info(`Reporting client: Get list. { resourceName: ${resourceName} }`)\n\n return this.restClient\n .getWithHeaders<Array<Dict<string>>>({\n path: `/${resourceName}`,\n query: listRequest.toRecordWithFilterPrefix(true),\n token,\n })\n .then((response: ResultWithHeaders<Array<Dict<string>>>) => ({\n data: response.data,\n warnings: {\n noDataAvailable: response.headers['x-no-data-warning'],\n },\n }))\n }\n\n getDefinitionSummary(\n token: string,\n reportId: string,\n definitionsPath?: string,\n ): Promise<components['schemas']['ReportDefinitionSummary']> {\n this.logInfo('Get definition summary', { reportId })\n\n const queryParams: operations['definitionSummary']['parameters']['query'] = {\n dataProductDefinitionsPath: definitionsPath,\n }\n\n return this.restClient\n .get({\n path: `/definitions/${reportId}`,\n query: queryParams,\n token,\n })\n .then((response) => <components['schemas']['ReportDefinitionSummary']>response)\n }\n\n getDefinitions(\n token: string,\n definitionsPath?: string,\n ): Promise<Array<components['schemas']['ReportDefinitionSummary']>> {\n this.logInfo('Get definitions')\n\n const params: operations['definitions_1']['parameters'] = {\n query: {\n renderMethod: 'HTML',\n dataProductDefinitionsPath: definitionsPath,\n },\n }\n\n return this.restClient\n .get({\n path: '/definitions',\n query: params.query,\n token,\n })\n .then((response) => <Array<components['schemas']['ReportDefinitionSummary']>>response)\n }\n\n getDefinition(\n token: string,\n reportId: string,\n variantId: string,\n definitionsPath?: string,\n ): Promise<components['schemas']['SingleVariantReportDefinition']> {\n const query = {\n dataProductDefinitionsPath: definitionsPath,\n }\n this.logInfo('Get definition', { reportId, variantId })\n\n return this.restClient\n .get({\n path: `/definitions/${reportId}/${variantId}`,\n query,\n token,\n })\n .then((response) => <components['schemas']['SingleVariantReportDefinition']>response)\n }\n\n getFieldValues({\n token,\n definitionName,\n variantName,\n fieldName,\n prefix,\n definitionsPath,\n }: FieldValuesRequest): Promise<Array<string>> {\n const query = {\n dataProductDefinitionsPath: definitionsPath,\n prefix,\n }\n this.logInfo('Get field values', { definitionName, variantName, fieldName, prefix })\n\n return this.restClient\n .get({\n path: `/reports/${definitionName}/${variantName}/${fieldName}`,\n token,\n query,\n })\n .then((response) => <Array<string>>response)\n }\n\n requestAsyncReport(\n token: string,\n reportId: string,\n variantId: string,\n query: Record<string, string | boolean | number>,\n ): Promise<Dict<string>> {\n this.logInfo('Request report', { reportId, variantId })\n\n return this.restClient\n .get({\n path: `/async/reports/${reportId}/${variantId}`,\n token,\n query,\n })\n .then((response) => <Dict<string>>response)\n }\n\n cancelAsyncRequest(\n token: string,\n reportId: string,\n variantId: string,\n executionId: string,\n dataProductDefinitionsPath?: string,\n ): Promise<Dict<string>> {\n this.logInfo('Cancel Request', { reportId, variantId, executionId })\n\n return this.restClient\n .delete({\n path: `/reports/${reportId}/${variantId}/statements/${executionId}`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n getAsyncReport(\n token: string,\n reportId: string,\n variantId: string,\n tableId: string,\n query: Record<string, string | string[]>,\n ): Promise<Array<Dict<string>>> {\n this.logInfo('Get Data', { reportId, variantId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${variantId}/tables/${tableId}/result`,\n token,\n query,\n })\n .then((response) => <Array<Dict<string>>>response)\n }\n\n getAsyncSummaryReport(\n token: string,\n reportId: string,\n variantId: string,\n tableId: string,\n summaryId: string,\n query: Dict<string | number>,\n ): Promise<Array<Dict<string>>> {\n this.logInfo('Get summary data', { reportId, variantId, tableId, summaryId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${variantId}/tables/${tableId}/result/summary/${summaryId}`,\n token,\n query,\n })\n .then((response) => <Array<Dict<string>>>response)\n }\n\n getAsyncReportStatus(\n token: string,\n reportId: string,\n variantId: string,\n executionId: string,\n dataProductDefinitionsPath?: string,\n tableId?: string,\n ): Promise<Dict<string>> {\n this.logInfo('Get status', { reportId, variantId, tableId, executionId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${variantId}/statements/${executionId}/status`,\n token,\n query: {\n dataProductDefinitionsPath,\n tableId,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n getAsyncCount(token: string, tableId: string, dataProductDefinitionsPath?: string): Promise<number> {\n this.logInfo('Get count', { tableId })\n\n return this.restClient\n .get({\n path: `/report/tables/${tableId}/count`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => (<Count>response).count)\n }\n\n getAsyncInteractiveCount(\n token: string,\n tableId: string,\n reportId: string,\n id: string,\n filters: ReportQuery,\n ): Promise<number> {\n this.logInfo('Get interactive count', { tableId, reportId, id })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${id}/tables/${tableId}/count`,\n token,\n query: filters.toRecordWithFilterPrefix(true),\n })\n .then((response) => (<Count>response).count)\n }\n\n logInfo(title: string, args?: Dict<string>) {\n logger.info(`Reporting Client: ${title}:`)\n if (args && Object.keys(args).length) logger.info(JSON.stringify(args, null, 2))\n }\n}\n\nexport { ReportingClient }\nexport default ReportingClient\n"],
5
5
  "mappings": "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",
6
6
  "names": ["reportingClient_exports", "__export", "ReportingClient", "reportingClient_default", "__toCommonJS", "import_logger", "import_restClient", "config", "RestClient", "resourceName", "token", "countRequest", "logger", "response", "listRequest", "reportId", "definitionsPath", "queryParams", "params", "variantId", "query", "definitionName", "variantName", "fieldName", "prefix", "executionId", "dataProductDefinitionsPath", "tableId", "summaryId", "id", "filters", "title", "args"]
7
7
  }
@@ -173,7 +173,7 @@ class ReportingClient {
173
173
  reportId: string,
174
174
  variantId: string,
175
175
  tableId: string,
176
- query: Dict<string | number>,
176
+ query: Record<string, string | string[]>,
177
177
  ): Promise<Array<Dict<string>>> {
178
178
  this.logInfo('Get Data', { reportId, variantId, tableId })
179
179
 
@@ -1,2 +1,2 @@
1
- var R=Object.create;var a=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var H=(e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})},m=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of v(t))!S.call(e,i)&&i!==r&&a(e,i,{get:()=>t[i],enumerable:!(o=g(t,i))||o.enumerable});return e};var w=(e,t,r)=>(r=e!=null?R(D(e)):{},m(t||!e||!e.__esModule?a(r,"default",{value:e,enumerable:!0}):r,e)),A=e=>m(a({},"__esModule",{value:!0}),e);var b={};H(b,{default:()=>P,reportAuthoriser:()=>y});module.exports=A(b);var h=w(require("../utils/localsHelper")),d=require("../types/UserReports");const y=(e,t)=>async(r,o,i)=>{const{token:s}=h.default.getValues(o),{reportId:p,id:u,variantId:f,type:c}=r.params,{dataProductDefinitionsPath:l}=r.query;let n;c===d.ReportType.REPORT&&(n=await e.reportingService.getDefinition(s,p,f||u,l)),c===d.ReportType.DASHBOARD&&(n=await e.dashboardService.getDefinition(s,p,f||u,l)),o.locals.definition=n,n?.authorised!==void 0&&!n.authorised?o.render("dpr/routes/journeys/view-report/unauthorised",{layoutPath:t,...r.body}):i()};var P=y;0&&(module.exports={reportAuthoriser});
1
+ var S=Object.create;var n=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var w=(e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})},p=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of P(t))!D.call(e,i)&&i!==r&&n(e,i,{get:()=>t[i],enumerable:!(o=v(t,i))||o.enumerable});return e};var H=(e,t,r)=>(r=e!=null?S(R(e)):{},p(t||!e||!e.__esModule?n(r,"default",{value:e,enumerable:!0}):r,e)),b=e=>p(n({},"__esModule",{value:!0}),e);var I={};w(I,{default:()=>x,reportAuthoriser:()=>m});module.exports=b(I);var c=H(require("../utils/localsHelper")),f=require("../types/UserReports");const m=(e,t)=>async(r,o,i)=>{const{token:a}=c.default.getValues(o),{reportId:d,id:l,variantId:y,type:g}=r.params,s=r.query.dataProductDefinitionsPath,u=await e.reportingService.getDefinitionSummary(a,d,s),h=g===f.ReportType.REPORT?e.reportingService:e.dashboardService;o.locals.definition=await h.getDefinition(a,d,y||l,s),u?.authorised!==void 0&&!u.authorised?o.render("dpr/routes/journeys/view-report/unauthorised",{layoutPath:t,...r.body}):i()};var x=m;0&&(module.exports={reportAuthoriser});
2
2
  //# sourceMappingURL=reportAuthoriser.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/middleware/reportAuthoriser.ts"],
4
- "sourcesContent": ["import { RequestHandler } from 'express'\nimport LocalsHelper from '../utils/localsHelper'\nimport { Services } from '../types/Services'\nimport { ReportType } from '../types/UserReports'\n\nexport const reportAuthoriser = (services: Services, layoutPath: string): RequestHandler => {\n return async (req, res, next) => {\n const { token } = LocalsHelper.getValues(res)\n const { reportId, id, variantId, type } = req.params\n const { dataProductDefinitionsPath } = req.query\n\n let definition\n if (type === ReportType.REPORT) {\n definition = await services.reportingService.getDefinition(\n token,\n reportId,\n variantId || id,\n dataProductDefinitionsPath,\n )\n }\n\n if (type === ReportType.DASHBOARD) {\n definition = await services.dashboardService.getDefinition(\n token,\n reportId,\n variantId || id,\n dataProductDefinitionsPath,\n )\n }\n\n res.locals.definition = definition\n if (definition?.authorised !== undefined && !definition.authorised) {\n res.render(`dpr/routes/journeys/view-report/unauthorised`, {\n layoutPath,\n ...req.body,\n })\n } else {\n next()\n }\n }\n}\n\nexport default reportAuthoriser\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,qBAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAyB,oCAEzBC,EAA2B,gCAEpB,MAAMH,EAAmB,CAACI,EAAoBC,IAC5C,MAAOC,EAAKC,EAAKC,IAAS,CAC/B,KAAM,CAAE,MAAAC,CAAM,EAAI,EAAAC,QAAa,UAAUH,CAAG,EACtC,CAAE,SAAAI,EAAU,GAAAC,EAAI,UAAAC,EAAW,KAAAC,CAAK,EAAIR,EAAI,OACxC,CAAE,2BAAAS,CAA2B,EAAIT,EAAI,MAE3C,IAAIU,EACAF,IAAS,aAAW,SACtBE,EAAa,MAAMZ,EAAS,iBAAiB,cAC3CK,EACAE,EACAE,GAAaD,EACbG,CACF,GAGED,IAAS,aAAW,YACtBE,EAAa,MAAMZ,EAAS,iBAAiB,cAC3CK,EACAE,EACAE,GAAaD,EACbG,CACF,GAGFR,EAAI,OAAO,WAAaS,EACpBA,GAAY,aAAe,QAAa,CAACA,EAAW,WACtDT,EAAI,OAAO,+CAAgD,CACzD,WAAAF,EACA,GAAGC,EAAI,IACT,CAAC,EAEDE,EAAK,CAET,EAGF,IAAOT,EAAQC",
6
- "names": ["reportAuthoriser_exports", "__export", "reportAuthoriser_default", "reportAuthoriser", "__toCommonJS", "import_localsHelper", "import_UserReports", "services", "layoutPath", "req", "res", "next", "token", "LocalsHelper", "reportId", "id", "variantId", "type", "dataProductDefinitionsPath", "definition"]
4
+ "sourcesContent": ["import { RequestHandler } from 'express'\nimport LocalsHelper from '../utils/localsHelper'\nimport { Services } from '../types/Services'\nimport { ReportType } from '../types/UserReports'\n\nexport const reportAuthoriser = (services: Services, layoutPath: string): RequestHandler => {\n return async (req, res, next) => {\n const { token } = LocalsHelper.getValues(res)\n const { reportId, id, variantId, type } = req.params\n const dataProductDefinitionsPath = <string | undefined>req.query.dataProductDefinitionsPath\n\n const definitionSummary = await services.reportingService.getDefinitionSummary(\n token,\n reportId,\n dataProductDefinitionsPath,\n )\n\n const service = type === ReportType.REPORT ? services.reportingService : services.dashboardService\n res.locals.definition = await service.getDefinition(token, reportId, variantId || id, dataProductDefinitionsPath)\n\n if (definitionSummary?.authorised !== undefined && !definitionSummary.authorised) {\n res.render(`dpr/routes/journeys/view-report/unauthorised`, {\n layoutPath,\n ...req.body,\n })\n } else {\n next()\n }\n }\n}\n\nexport default reportAuthoriser\n"],
5
+ "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,qBAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAyB,oCAEzBC,EAA2B,gCAEpB,MAAMH,EAAmB,CAACI,EAAoBC,IAC5C,MAAOC,EAAKC,EAAKC,IAAS,CAC/B,KAAM,CAAE,MAAAC,CAAM,EAAI,EAAAC,QAAa,UAAUH,CAAG,EACtC,CAAE,SAAAI,EAAU,GAAAC,EAAI,UAAAC,EAAW,KAAAC,CAAK,EAAIR,EAAI,OACxCS,EAAiDT,EAAI,MAAM,2BAE3DU,EAAoB,MAAMZ,EAAS,iBAAiB,qBACxDK,EACAE,EACAI,CACF,EAEME,EAAUH,IAAS,aAAW,OAASV,EAAS,iBAAmBA,EAAS,iBAClFG,EAAI,OAAO,WAAa,MAAMU,EAAQ,cAAcR,EAAOE,EAAUE,GAAaD,EAAIG,CAA0B,EAE5GC,GAAmB,aAAe,QAAa,CAACA,EAAkB,WACpET,EAAI,OAAO,+CAAgD,CACzD,WAAAF,EACA,GAAGC,EAAI,IACT,CAAC,EAEDE,EAAK,CAET,EAGF,IAAOT,EAAQC",
6
+ "names": ["reportAuthoriser_exports", "__export", "reportAuthoriser_default", "reportAuthoriser", "__toCommonJS", "import_localsHelper", "import_UserReports", "services", "layoutPath", "req", "res", "next", "token", "LocalsHelper", "reportId", "id", "variantId", "type", "dataProductDefinitionsPath", "definitionSummary", "service"]
7
7
  }
@@ -7,29 +7,18 @@ export const reportAuthoriser = (services: Services, layoutPath: string): Reques
7
7
  return async (req, res, next) => {
8
8
  const { token } = LocalsHelper.getValues(res)
9
9
  const { reportId, id, variantId, type } = req.params
10
- const { dataProductDefinitionsPath } = req.query
10
+ const dataProductDefinitionsPath = <string | undefined>req.query.dataProductDefinitionsPath
11
11
 
12
- let definition
13
- if (type === ReportType.REPORT) {
14
- definition = await services.reportingService.getDefinition(
15
- token,
16
- reportId,
17
- variantId || id,
18
- dataProductDefinitionsPath,
19
- )
20
- }
12
+ const definitionSummary = await services.reportingService.getDefinitionSummary(
13
+ token,
14
+ reportId,
15
+ dataProductDefinitionsPath,
16
+ )
21
17
 
22
- if (type === ReportType.DASHBOARD) {
23
- definition = await services.dashboardService.getDefinition(
24
- token,
25
- reportId,
26
- variantId || id,
27
- dataProductDefinitionsPath,
28
- )
29
- }
18
+ const service = type === ReportType.REPORT ? services.reportingService : services.dashboardService
19
+ res.locals.definition = await service.getDefinition(token, reportId, variantId || id, dataProductDefinitionsPath)
30
20
 
31
- res.locals.definition = definition
32
- if (definition?.authorised !== undefined && !definition.authorised) {
21
+ if (definitionSummary?.authorised !== undefined && !definitionSummary.authorised) {
33
22
  res.render(`dpr/routes/journeys/view-report/unauthorised`, {
34
23
  layoutPath,
35
24
  ...req.body,
@@ -1,2 +1,2 @@
1
- var g=Object.create;var l=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var y=(t,o)=>{for(var e in o)l(t,e,{get:o[e],enumerable:!0})},f=(t,o,e,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of D(o))!k.call(t,i)&&i!==e&&l(t,i,{get:()=>o[i],enumerable:!(r=h(o,i))||r.enumerable});return t};var u=(t,o,e)=>(e=t!=null?g(S(t)):{},f(o||!t||!t.__esModule?l(e,"default",{value:t,enumerable:!0}):e,t)),q=t=>f(l({},"__esModule",{value:!0}),t);var v={};y(v,{default:()=>b,populateDefinitions:()=>P,populateRequestedReports:()=>R,setupResources:()=>m});module.exports=q(v);var c=u(require("../utils/definitionUtils")),p=u(require("../utils/localsHelper"));const w=(t,o)=>t[o]?t[o].toString():null,C=t=>w(t,"dataProductDefinitionsPath"),Q=t=>{const o=C(t);return o||null},m=(t,o)=>async(e,r,i)=>{V(e,r);try{return await P(t,e,r,o),await R(t,r),i()}catch(a){return i(a)}},V=(t,o)=>{const e=t.flash("DPR_ERRORS");e&&e[0]&&(o.locals.validationErrors=JSON.parse(e[0]))},P=async(t,o,e,r)=>{const{token:i}=p.default.getValues(e),a=Q(o.query),d=o.body?.dataProductDefinitionsPath,n=a||d;n&&(e.locals.dpdPathFromQuery=!0);const s=r?.dataProductDefinitionsPath;s&&(e.locals.dpdPathFromConfig=!0),e.locals.definitionsPath=n||s,e.locals.pathSuffix=`?dataProductDefinitionsPath=${e.locals.definitionsPath}`,i&&t.reportingService&&(e.locals.definitions=await t.reportingService.getDefinitions(i,e.locals.definitionsPath))},R=async(t,o)=>{const{dprUser:e}=p.default.getValues(o);if(e.id){const{definitions:r,definitionsPath:i}=o.locals,a=await t.requestedReportService.getAllReports(e.id);o.locals.requestedReports=i?a.filter(n=>c.default.getCurrentVariantDefinition(r,n.reportId,n.id)):a;const d=await t.recentlyViewedService.getAllReports(e.id);if(o.locals.recentlyViewedReports=i?d.filter(n=>c.default.getCurrentVariantDefinition(r,n.reportId,n.id)):d,t.bookmarkService){o.locals.bookmarkingEnabled=!0;const n=await t.bookmarkService.getAllBookmarks(e.id);o.locals.bookmarks=i?n.filter(s=>c.default.getCurrentVariantDefinition(r,s.reportId,s.id)):n}t.downloadPermissionService&&(o.locals.downloadingEnabled=!0)}};var b=m;0&&(module.exports={populateDefinitions,populateRequestedReports,setupResources});
1
+ var w=Object.create;var l=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var Q=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var b=(t,o)=>{for(var e in o)l(t,e,{get:o[e],enumerable:!0})},g=(t,o,e,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of q(o))!V.call(t,r)&&r!==e&&l(t,r,{get:()=>o[r],enumerable:!(i=C(o,r))||i.enumerable});return t};var S=(t,o,e)=>(e=t!=null?w(Q(t)):{},g(o||!t||!t.__esModule?l(e,"default",{value:t,enumerable:!0}):e,t)),v=t=>g(l({},"__esModule",{value:!0}),t);var B={};b(B,{default:()=>A,populateDefinitions:()=>D,populateRequestedReports:()=>k,setupResources:()=>h});module.exports=v(B);var c=S(require("../utils/definitionUtils")),f=S(require("../utils/localsHelper"));const I=(t,o)=>t[o]?t[o].toString():null,F=t=>I(t,"dataProductDefinitionsPath"),E=t=>{const o=F(t);return o||null},h=(t,o)=>async(e,i,r)=>{x(e,i);try{return await D(t,e,i,o),await k(t,i),r()}catch(a){return r(a)}},x=(t,o)=>{const e=t.flash("DPR_ERRORS");e&&e[0]&&(o.locals.validationErrors=JSON.parse(e[0]))},D=async(t,o,e,i)=>{const{token:r,dprUser:a}=f.default.getValues(e),d=E(o.query),n=o.body?.dataProductDefinitionsPath,s=d||n;s&&(e.locals.dpdPathFromQuery=!0);const m=i?.dataProductDefinitionsPath;if(m&&(e.locals.dpdPathFromConfig=!0),e.locals.definitionsPath=s||m,e.locals.pathSuffix=`?dataProductDefinitionsPath=${e.locals.definitionsPath}`,r&&t.reportingService){const P=await t.productCollectionStoreService.getSelectedProductCollectionId(a.id);e.locals.definitions=await Promise.all([t.reportingService.getDefinitions(r,e.locals.definitionsPath),P&&t.productCollectionService.getProductCollection(a.id,P)]).then(([R,p])=>{if(p&&p){const y=p.products.map(u=>u.productId);return R.filter(u=>y.includes(u.id))}return R})??[]}},k=async(t,o)=>{const{dprUser:e}=f.default.getValues(o);if(e.id){const{definitions:i,definitionsPath:r}=o.locals,a=await t.requestedReportService.getAllReports(e.id);o.locals.requestedReports=r?a.filter(n=>c.default.getCurrentVariantDefinition(i,n.reportId,n.id)):a;const d=await t.recentlyViewedService.getAllReports(e.id);if(o.locals.recentlyViewedReports=r?d.filter(n=>c.default.getCurrentVariantDefinition(i,n.reportId,n.id)):d,t.bookmarkService){o.locals.bookmarkingEnabled=!0;const n=await t.bookmarkService.getAllBookmarks(e.id);o.locals.bookmarks=r?n.filter(s=>c.default.getCurrentVariantDefinition(i,s.reportId,s.id)):n}t.downloadPermissionService&&(o.locals.downloadingEnabled=!0)}};var A=h;0&&(module.exports={populateDefinitions,populateRequestedReports,setupResources});
2
2
  //# sourceMappingURL=setUpDprResources.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/middleware/setUpDprResources.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { RequestHandler, Response, Request } from 'express'\nimport type { ParsedQs } from 'qs'\nimport { Services } from '../types/Services'\nimport { RequestedReport, StoredReportData } from '../types/UserReports'\nimport DefinitionUtils from '../utils/definitionUtils'\nimport { BookmarkStoreData } from '../types/Bookmark'\nimport { DprConfig } from '../types/DprConfig'\nimport localsHelper from '../utils/localsHelper'\n\nconst getQueryParamAsString = (query: ParsedQs, name: string) => (query[name] ? query[name].toString() : null)\nconst getDefinitionsPath = (query: ParsedQs) => getQueryParamAsString(query, 'dataProductDefinitionsPath')\n\nconst deriveDefinitionsPath = (query: ParsedQs): string | null => {\n const definitionsPath = getDefinitionsPath(query)\n if (definitionsPath) {\n return definitionsPath\n }\n\n return null\n}\n\nexport const setupResources = (services: Services, config?: DprConfig): RequestHandler => {\n return async (req, res, next) => {\n populateValidationErrors(req, res)\n try {\n await populateDefinitions(services, req, res, config)\n await populateRequestedReports(services, res)\n return next()\n } catch (error) {\n return next(error)\n }\n }\n}\n\nconst populateValidationErrors = (req: Request, res: Response) => {\n const errors = req.flash(`DPR_ERRORS`)\n if (errors && errors[0]) {\n res.locals.validationErrors = JSON.parse(errors[0])\n }\n}\n\nexport const populateDefinitions = async (services: Services, req: Request, res: Response, config?: DprConfig) => {\n // Get the DPD path from the query\n const { token } = localsHelper.getValues(res)\n\n const dpdPathFromQuery = deriveDefinitionsPath(req.query)\n const dpdPathFromBody = req.body?.dataProductDefinitionsPath\n const definitionsPathFromQuery = dpdPathFromQuery || dpdPathFromBody\n\n if (definitionsPathFromQuery) {\n res.locals.dpdPathFromQuery = true\n }\n\n // Get the DPD path from the config\n const dpdPathFromConfig = config?.dataProductDefinitionsPath\n if (dpdPathFromConfig) {\n res.locals.dpdPathFromConfig = true\n }\n\n // query takes presedence over config\n res.locals.definitionsPath = definitionsPathFromQuery || dpdPathFromConfig\n res.locals.pathSuffix = `?dataProductDefinitionsPath=${res.locals.definitionsPath}`\n\n if (token && services.reportingService) {\n res.locals.definitions = await services.reportingService.getDefinitions(token, res.locals.definitionsPath)\n }\n}\n\nexport const populateRequestedReports = async (services: Services, res: Response) => {\n const { dprUser } = localsHelper.getValues(res)\n if (dprUser.id) {\n const { definitions, definitionsPath } = res.locals\n\n const requested = await services.requestedReportService.getAllReports(dprUser.id)\n res.locals.requestedReports = !definitionsPath\n ? requested\n : requested.filter((report: RequestedReport) => {\n return DefinitionUtils.getCurrentVariantDefinition(definitions, report.reportId, report.id)\n })\n\n const recent = await services.recentlyViewedService.getAllReports(dprUser.id)\n res.locals.recentlyViewedReports = !definitionsPath\n ? recent\n : recent.filter((report: StoredReportData) => {\n return DefinitionUtils.getCurrentVariantDefinition(definitions, report.reportId, report.id)\n })\n\n if (services.bookmarkService) {\n res.locals.bookmarkingEnabled = true\n\n const bookmarks = await services.bookmarkService.getAllBookmarks(dprUser.id)\n res.locals.bookmarks = !definitionsPath\n ? bookmarks\n : bookmarks.filter((bookmark: BookmarkStoreData) => {\n return DefinitionUtils.getCurrentVariantDefinition(definitions, bookmark.reportId, bookmark.id)\n })\n }\n\n if (services.downloadPermissionService) {\n res.locals.downloadingEnabled = true\n }\n }\n}\n\nexport default setupResources\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,wBAAAC,EAAA,6BAAAC,EAAA,mBAAAC,IAAA,eAAAC,EAAAN,GAKA,IAAAO,EAA4B,uCAG5BC,EAAyB,oCAEzB,MAAMC,EAAwB,CAACC,EAAiBC,IAAkBD,EAAMC,CAAI,EAAID,EAAMC,CAAI,EAAE,SAAS,EAAI,KACnGC,EAAsBF,GAAoBD,EAAsBC,EAAO,4BAA4B,EAEnGG,EAAyBH,GAAmC,CAChE,MAAMI,EAAkBF,EAAmBF,CAAK,EAChD,OAAII,GAIG,IACT,EAEaT,EAAiB,CAACU,EAAoBC,IAC1C,MAAOC,EAAKC,EAAKC,IAAS,CAC/BC,EAAyBH,EAAKC,CAAG,EACjC,GAAI,CACF,aAAMf,EAAoBY,EAAUE,EAAKC,EAAKF,CAAM,EACpD,MAAMZ,EAAyBW,EAAUG,CAAG,EACrCC,EAAK,CACd,OAASE,EAAO,CACd,OAAOF,EAAKE,CAAK,CACnB,CACF,EAGID,EAA2B,CAACH,EAAcC,IAAkB,CAChE,MAAMI,EAASL,EAAI,MAAM,YAAY,EACjCK,GAAUA,EAAO,CAAC,IACpBJ,EAAI,OAAO,iBAAmB,KAAK,MAAMI,EAAO,CAAC,CAAC,EAEtD,EAEanB,EAAsB,MAAOY,EAAoBE,EAAcC,EAAeF,IAAuB,CAEhH,KAAM,CAAE,MAAAO,CAAM,EAAI,EAAAC,QAAa,UAAUN,CAAG,EAEtCO,EAAmBZ,EAAsBI,EAAI,KAAK,EAClDS,EAAkBT,EAAI,MAAM,2BAC5BU,EAA2BF,GAAoBC,EAEjDC,IACFT,EAAI,OAAO,iBAAmB,IAIhC,MAAMU,EAAoBZ,GAAQ,2BAC9BY,IACFV,EAAI,OAAO,kBAAoB,IAIjCA,EAAI,OAAO,gBAAkBS,GAA4BC,EACzDV,EAAI,OAAO,WAAa,+BAA+BA,EAAI,OAAO,eAAe,GAE7EK,GAASR,EAAS,mBACpBG,EAAI,OAAO,YAAc,MAAMH,EAAS,iBAAiB,eAAeQ,EAAOL,EAAI,OAAO,eAAe,EAE7G,EAEad,EAA2B,MAAOW,EAAoBG,IAAkB,CACnF,KAAM,CAAE,QAAAW,CAAQ,EAAI,EAAAL,QAAa,UAAUN,CAAG,EAC9C,GAAIW,EAAQ,GAAI,CACd,KAAM,CAAE,YAAAC,EAAa,gBAAAhB,CAAgB,EAAII,EAAI,OAEvCa,EAAY,MAAMhB,EAAS,uBAAuB,cAAcc,EAAQ,EAAE,EAChFX,EAAI,OAAO,iBAAoBJ,EAE3BiB,EAAU,OAAQC,GACT,EAAAC,QAAgB,4BAA4BH,EAAaE,EAAO,SAAUA,EAAO,EAAE,CAC3F,EAHDD,EAKJ,MAAMG,EAAS,MAAMnB,EAAS,sBAAsB,cAAcc,EAAQ,EAAE,EAO5E,GANAX,EAAI,OAAO,sBAAyBJ,EAEhCoB,EAAO,OAAQF,GACN,EAAAC,QAAgB,4BAA4BH,EAAaE,EAAO,SAAUA,EAAO,EAAE,CAC3F,EAHDE,EAKAnB,EAAS,gBAAiB,CAC5BG,EAAI,OAAO,mBAAqB,GAEhC,MAAMiB,EAAY,MAAMpB,EAAS,gBAAgB,gBAAgBc,EAAQ,EAAE,EAC3EX,EAAI,OAAO,UAAaJ,EAEpBqB,EAAU,OAAQC,GACT,EAAAH,QAAgB,4BAA4BH,EAAaM,EAAS,SAAUA,EAAS,EAAE,CAC/F,EAHDD,CAIN,CAEIpB,EAAS,4BACXG,EAAI,OAAO,mBAAqB,GAEpC,CACF,EAEA,IAAOhB,EAAQG",
6
- "names": ["setUpDprResources_exports", "__export", "setUpDprResources_default", "populateDefinitions", "populateRequestedReports", "setupResources", "__toCommonJS", "import_definitionUtils", "import_localsHelper", "getQueryParamAsString", "query", "name", "getDefinitionsPath", "deriveDefinitionsPath", "definitionsPath", "services", "config", "req", "res", "next", "populateValidationErrors", "error", "errors", "token", "localsHelper", "dpdPathFromQuery", "dpdPathFromBody", "definitionsPathFromQuery", "dpdPathFromConfig", "dprUser", "definitions", "requested", "report", "DefinitionUtils", "recent", "bookmarks", "bookmark"]
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { RequestHandler, Response, Request } from 'express'\nimport type { ParsedQs } from 'qs'\nimport { Services } from '../types/Services'\nimport { RequestedReport, StoredReportData } from '../types/UserReports'\nimport DefinitionUtils from '../utils/definitionUtils'\nimport { BookmarkStoreData } from '../types/Bookmark'\nimport { DprConfig } from '../types/DprConfig'\nimport localsHelper from '../utils/localsHelper'\n\nconst getQueryParamAsString = (query: ParsedQs, name: string) => (query[name] ? query[name].toString() : null)\nconst getDefinitionsPath = (query: ParsedQs) => getQueryParamAsString(query, 'dataProductDefinitionsPath')\n\nconst deriveDefinitionsPath = (query: ParsedQs): string | null => {\n const definitionsPath = getDefinitionsPath(query)\n if (definitionsPath) {\n return definitionsPath\n }\n\n return null\n}\n\nexport const setupResources = (services: Services, config?: DprConfig): RequestHandler => {\n return async (req, res, next) => {\n populateValidationErrors(req, res)\n try {\n await populateDefinitions(services, req, res, config)\n await populateRequestedReports(services, res)\n return next()\n } catch (error) {\n return next(error)\n }\n }\n}\n\nconst populateValidationErrors = (req: Request, res: Response) => {\n const errors = req.flash(`DPR_ERRORS`)\n if (errors && errors[0]) {\n res.locals.validationErrors = JSON.parse(errors[0])\n }\n}\n\nexport const populateDefinitions = async (services: Services, req: Request, res: Response, config?: DprConfig) => {\n // Get the DPD path from the query\n const { token, dprUser } = localsHelper.getValues(res)\n\n const dpdPathFromQuery = deriveDefinitionsPath(req.query)\n const dpdPathFromBody = req.body?.dataProductDefinitionsPath\n const definitionsPathFromQuery = dpdPathFromQuery || dpdPathFromBody\n\n if (definitionsPathFromQuery) {\n res.locals.dpdPathFromQuery = true\n }\n\n // Get the DPD path from the config\n const dpdPathFromConfig = config?.dataProductDefinitionsPath\n if (dpdPathFromConfig) {\n res.locals.dpdPathFromConfig = true\n }\n\n // query takes presedence over config\n res.locals.definitionsPath = definitionsPathFromQuery || dpdPathFromConfig\n res.locals.pathSuffix = `?dataProductDefinitionsPath=${res.locals.definitionsPath}`\n\n if (token && services.reportingService) {\n const selectedProductCollectionId = await services.productCollectionStoreService.getSelectedProductCollectionId(\n dprUser.id,\n )\n\n res.locals.definitions =\n (await Promise.all([\n services.reportingService.getDefinitions(token, res.locals.definitionsPath),\n selectedProductCollectionId &&\n services.productCollectionService.getProductCollection(dprUser.id, selectedProductCollectionId),\n ]).then(([defs, selectedProductCollection]) => {\n if (selectedProductCollection && selectedProductCollection) {\n const productIds = selectedProductCollection.products.map((product) => product.productId)\n return defs.filter((def) => productIds.includes(def.id))\n }\n return defs\n })) ?? []\n }\n}\n\nexport const populateRequestedReports = async (services: Services, res: Response) => {\n const { dprUser } = localsHelper.getValues(res)\n if (dprUser.id) {\n const { definitions, definitionsPath } = res.locals\n\n const requested = await services.requestedReportService.getAllReports(dprUser.id)\n res.locals.requestedReports = !definitionsPath\n ? requested\n : requested.filter((report: RequestedReport) => {\n return DefinitionUtils.getCurrentVariantDefinition(definitions, report.reportId, report.id)\n })\n\n const recent = await services.recentlyViewedService.getAllReports(dprUser.id)\n res.locals.recentlyViewedReports = !definitionsPath\n ? recent\n : recent.filter((report: StoredReportData) => {\n return DefinitionUtils.getCurrentVariantDefinition(definitions, report.reportId, report.id)\n })\n\n if (services.bookmarkService) {\n res.locals.bookmarkingEnabled = true\n\n const bookmarks = await services.bookmarkService.getAllBookmarks(dprUser.id)\n res.locals.bookmarks = !definitionsPath\n ? bookmarks\n : bookmarks.filter((bookmark: BookmarkStoreData) => {\n return DefinitionUtils.getCurrentVariantDefinition(definitions, bookmark.reportId, bookmark.id)\n })\n }\n\n if (services.downloadPermissionService) {\n res.locals.downloadingEnabled = true\n }\n }\n}\n\nexport default setupResources\n"],
5
+ "mappings": "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",
6
+ "names": ["setUpDprResources_exports", "__export", "setUpDprResources_default", "populateDefinitions", "populateRequestedReports", "setupResources", "__toCommonJS", "import_definitionUtils", "import_localsHelper", "getQueryParamAsString", "query", "name", "getDefinitionsPath", "deriveDefinitionsPath", "definitionsPath", "services", "config", "req", "res", "next", "populateValidationErrors", "error", "errors", "token", "dprUser", "localsHelper", "dpdPathFromQuery", "dpdPathFromBody", "definitionsPathFromQuery", "dpdPathFromConfig", "selectedProductCollectionId", "defs", "selectedProductCollection", "productIds", "product", "def", "definitions", "requested", "report", "DefinitionUtils", "recent", "bookmarks", "bookmark"]
7
7
  }
@@ -96,6 +96,13 @@ describe('setUpDprResources', () => {
96
96
 
97
97
  services = {
98
98
  reportingService,
99
+ productCollectionService: {
100
+ getProductCollections: jest.fn(() => []),
101
+ getProductCollection: jest.fn(),
102
+ },
103
+ productCollectionStoreService: {
104
+ getSelectedProductCollectionId: jest.fn(),
105
+ },
99
106
  } as unknown as Services
100
107
 
101
108
  res = {
@@ -42,7 +42,7 @@ const populateValidationErrors = (req: Request, res: Response) => {
42
42
 
43
43
  export const populateDefinitions = async (services: Services, req: Request, res: Response, config?: DprConfig) => {
44
44
  // Get the DPD path from the query
45
- const { token } = localsHelper.getValues(res)
45
+ const { token, dprUser } = localsHelper.getValues(res)
46
46
 
47
47
  const dpdPathFromQuery = deriveDefinitionsPath(req.query)
48
48
  const dpdPathFromBody = req.body?.dataProductDefinitionsPath
@@ -63,7 +63,22 @@ export const populateDefinitions = async (services: Services, req: Request, res:
63
63
  res.locals.pathSuffix = `?dataProductDefinitionsPath=${res.locals.definitionsPath}`
64
64
 
65
65
  if (token && services.reportingService) {
66
- res.locals.definitions = await services.reportingService.getDefinitions(token, res.locals.definitionsPath)
66
+ const selectedProductCollectionId = await services.productCollectionStoreService.getSelectedProductCollectionId(
67
+ dprUser.id,
68
+ )
69
+
70
+ res.locals.definitions =
71
+ (await Promise.all([
72
+ services.reportingService.getDefinitions(token, res.locals.definitionsPath),
73
+ selectedProductCollectionId &&
74
+ services.productCollectionService.getProductCollection(dprUser.id, selectedProductCollectionId),
75
+ ]).then(([defs, selectedProductCollection]) => {
76
+ if (selectedProductCollection && selectedProductCollection) {
77
+ const productIds = selectedProductCollection.products.map((product) => product.productId)
78
+ return defs.filter((def) => productIds.includes(def.id))
79
+ }
80
+ return defs
81
+ })) ?? []
67
82
  }
68
83
  }
69
84
 
@@ -1,2 +1,2 @@
1
- var h=Object.create;var a=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var R=(r,e)=>{for(var o in e)a(r,o,{get:e[o],enumerable:!0})},n=(r,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of P(e))!D.call(r,t)&&t!==o&&a(r,t,{get:()=>e[t],enumerable:!(i=y(e,t))||i.enumerable});return r};var c=(r,e,o)=>(o=r!=null?h(S(r)):{},n(e||!r||!r.__esModule?a(o,"default",{value:r,enumerable:!0}):o,r)),b=r=>n(a({},"__esModule",{value:!0}),r);var x={};R(x,{DownloadReportController:()=>d,default:()=>g});module.exports=b(x);var p=c(require("../../../utils/localsHelper")),m=c(require("./utils"));class d{constructor(e,o){this.POST=async(e,o,i)=>{const{dprUser:t}=p.default.getValues(o),{reportId:u,id:w,loadType:v,currentUrl:f,currentQueryParams:l}=e.body;let s=`${f}/download-disabled`;s=l?`${s}${l}`:s,await this.services.downloadPermissionService.downloadEnabled(t.id,u,w)?await m.default.downloadReport({req:e,res:o,services:this.services,redirect:s,loadType:v}):o.redirect(s)};this.layoutPath=e,this.services=o}}var g=d;0&&(module.exports={DownloadReportController});
1
+ var y=Object.create;var a=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var b=(o,e)=>{for(var r in e)a(o,r,{get:e[r],enumerable:!0})},c=(o,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of S(e))!R.call(o,t)&&t!==r&&a(o,t,{get:()=>e[t],enumerable:!(i=P(e,t))||i.enumerable});return o};var p=(o,e,r)=>(r=o!=null?y(D(o)):{},c(e||!o||!o.__esModule?a(r,"default",{value:o,enumerable:!0}):r,o)),g=o=>c(a({},"__esModule",{value:!0}),o);var H={};b(H,{DownloadReportController:()=>l,default:()=>x});module.exports=g(H);var m=p(require("../../../utils/localsHelper")),u=p(require("./utils"));class l{constructor(e,r){this.POST=async(e,r,i)=>{const{dprUser:t}=m.default.getValues(r),{reportId:w,id:v,loadType:f,currentUrl:h,currentQueryParams:d}=e.body;let s=`${h}/download-disabled`;s=d?`${s}${d}`:s;const{downloadPermissionService:n}=this.services;(n?await n.downloadEnabled(t.id,w,v):!1)?await u.default.downloadReport({req:e,res:r,services:this.services,redirect:s,loadType:f}):r.redirect(s)};this.layoutPath=e,this.services=r}}var x=l;0&&(module.exports={DownloadReportController});
2
2
  //# sourceMappingURL=controller.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/routes/journeys/download-report/controller.ts"],
4
- "sourcesContent": ["import { RequestHandler } from 'express'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport DownloadUtils from './utils'\nimport { Services } from '../../../types/Services'\n\nclass DownloadReportController {\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 POST: RequestHandler = async (req, res, next) => {\n const { dprUser } = LocalsHelper.getValues(res)\n const { reportId, id, loadType, currentUrl, currentQueryParams } = req.body\n\n let redirect = `${currentUrl}/download-disabled`\n redirect = currentQueryParams ? `${redirect}${currentQueryParams}` : redirect\n\n const canDownload = await this.services.downloadPermissionService.downloadEnabled(dprUser.id, reportId, id)\n\n if (canDownload) {\n await DownloadUtils.downloadReport({ req, res, services: this.services, redirect, loadType })\n } else {\n res.redirect(redirect)\n }\n }\n}\n\nexport { DownloadReportController }\nexport default DownloadReportController\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAyB,0CACzBC,EAA0B,sBAG1B,MAAMJ,CAAyB,CAK7B,YAAYK,EAAoBC,EAAoB,CAKpD,UAAuB,MAAOC,EAAKC,EAAKC,IAAS,CAC/C,KAAM,CAAE,QAAAC,CAAQ,EAAI,EAAAC,QAAa,UAAUH,CAAG,EACxC,CAAE,SAAAI,EAAU,GAAAC,EAAI,SAAAC,EAAU,WAAAC,EAAY,mBAAAC,CAAmB,EAAIT,EAAI,KAEvE,IAAIU,EAAW,GAAGF,CAAU,qBAC5BE,EAAWD,EAAqB,GAAGC,CAAQ,GAAGD,CAAkB,GAAKC,EAEjD,MAAM,KAAK,SAAS,0BAA0B,gBAAgBP,EAAQ,GAAIE,EAAUC,CAAE,EAGxG,MAAM,EAAAK,QAAc,eAAe,CAAE,IAAAX,EAAK,IAAAC,EAAK,SAAU,KAAK,SAAU,SAAAS,EAAU,SAAAH,CAAS,CAAC,EAE5FN,EAAI,SAASS,CAAQ,CAEzB,EAlBE,KAAK,WAAaZ,EAClB,KAAK,SAAWC,CAClB,CAiBF,CAGA,IAAOL,EAAQD",
6
- "names": ["controller_exports", "__export", "DownloadReportController", "controller_default", "__toCommonJS", "import_localsHelper", "import_utils", "layoutPath", "services", "req", "res", "next", "dprUser", "LocalsHelper", "reportId", "id", "loadType", "currentUrl", "currentQueryParams", "redirect", "DownloadUtils"]
4
+ "sourcesContent": ["import { RequestHandler } from 'express'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport DownloadUtils from './utils'\nimport { Services } from '../../../types/Services'\n\nclass DownloadReportController {\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 POST: RequestHandler = async (req, res, next) => {\n const { dprUser } = LocalsHelper.getValues(res)\n const { reportId, id, loadType, currentUrl, currentQueryParams } = req.body\n\n let redirect = `${currentUrl}/download-disabled`\n redirect = currentQueryParams ? `${redirect}${currentQueryParams}` : redirect\n\n const { downloadPermissionService } = this.services\n const canDownload = downloadPermissionService\n ? await downloadPermissionService.downloadEnabled(dprUser.id, reportId, id)\n : false\n\n if (canDownload) {\n await DownloadUtils.downloadReport({ req, res, services: this.services, redirect, loadType })\n } else {\n res.redirect(redirect)\n }\n }\n}\n\nexport { DownloadReportController }\nexport default DownloadReportController\n"],
5
+ "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,8BAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAyB,0CACzBC,EAA0B,sBAG1B,MAAMJ,CAAyB,CAK7B,YAAYK,EAAoBC,EAAoB,CAKpD,UAAuB,MAAOC,EAAKC,EAAKC,IAAS,CAC/C,KAAM,CAAE,QAAAC,CAAQ,EAAI,EAAAC,QAAa,UAAUH,CAAG,EACxC,CAAE,SAAAI,EAAU,GAAAC,EAAI,SAAAC,EAAU,WAAAC,EAAY,mBAAAC,CAAmB,EAAIT,EAAI,KAEvE,IAAIU,EAAW,GAAGF,CAAU,qBAC5BE,EAAWD,EAAqB,GAAGC,CAAQ,GAAGD,CAAkB,GAAKC,EAErE,KAAM,CAAE,0BAAAC,CAA0B,EAAI,KAAK,UACvBA,EAChB,MAAMA,EAA0B,gBAAgBR,EAAQ,GAAIE,EAAUC,CAAE,EACxE,IAGF,MAAM,EAAAM,QAAc,eAAe,CAAE,IAAAZ,EAAK,IAAAC,EAAK,SAAU,KAAK,SAAU,SAAAS,EAAU,SAAAH,CAAS,CAAC,EAE5FN,EAAI,SAASS,CAAQ,CAEzB,EArBE,KAAK,WAAaZ,EAClB,KAAK,SAAWC,CAClB,CAoBF,CAGA,IAAOL,EAAQD",
6
+ "names": ["controller_exports", "__export", "DownloadReportController", "controller_default", "__toCommonJS", "import_localsHelper", "import_utils", "layoutPath", "services", "req", "res", "next", "dprUser", "LocalsHelper", "reportId", "id", "loadType", "currentUrl", "currentQueryParams", "redirect", "downloadPermissionService", "DownloadUtils"]
7
7
  }
@@ -20,7 +20,10 @@ class DownloadReportController {
20
20
  let redirect = `${currentUrl}/download-disabled`
21
21
  redirect = currentQueryParams ? `${redirect}${currentQueryParams}` : redirect
22
22
 
23
- const canDownload = await this.services.downloadPermissionService.downloadEnabled(dprUser.id, reportId, id)
23
+ const { downloadPermissionService } = this.services
24
+ const canDownload = downloadPermissionService
25
+ ? await downloadPermissionService.downloadEnabled(dprUser.id, reportId, id)
26
+ : false
24
27
 
25
28
  if (canDownload) {
26
29
  await DownloadUtils.downloadReport({ req, res, services: this.services, redirect, loadType })
@@ -1,2 +1,2 @@
1
- context("Request download form submitted",()=>{before(()=>{cy.task("resetStubs"),cy.task("resetRedis"),cy.task("stubDefinitions")}),it("is accessible",()=>{cy.visit("/embedded/platform/dpr/download-report/request-download/request-examples/request-example-success/tableId/tblId_1753863906851/form/submitted?reportName=C%20Test%20Report&variantName=Successful%20Report&reportUrl=/embedded/platform/dpr/view-report/async/report/request-examples/request-example-success/tblId_1753863906851/report"),cy.injectAxe(),cy.checkA11y(),cy.findByText(/Download is now enabled for this report/).should("be.visible")})});
1
+ context("Request download form submitted",()=>{before(()=>{cy.task("resetStubs"),cy.task("resetRedis"),cy.task("stubDefinitions"),cy.task("stubSingleSummaries")}),it("is accessible",()=>{cy.visit("/embedded/platform/dpr/download-report/request-download/request-examples/request-example-success/tableId/tblId_1753863906851/form/submitted?reportName=C%20Test%20Report&variantName=Successful%20Report&reportUrl=/embedded/platform/dpr/view-report/async/report/request-examples/request-example-success/tblId_1753863906851/report"),cy.injectAxe(),cy.checkA11y(),cy.findByText(/Download is now enabled for this report/).should("be.visible")})});
2
2
  //# sourceMappingURL=tests.cy.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../../src/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.ts"],
4
- "sourcesContent": ["context('Request download form submitted', () => {\n before(() => {\n cy.task('resetStubs')\n cy.task('resetRedis')\n cy.task('stubDefinitions')\n })\n\n it('is accessible', () => {\n cy.visit(\n '/embedded/platform/dpr/download-report/request-download/request-examples/request-example-success/tableId/tblId_1753863906851/form/submitted?reportName=C%20Test%20Report&variantName=Successful%20Report&reportUrl=/embedded/platform/dpr/view-report/async/report/request-examples/request-example-success/tblId_1753863906851/report',\n )\n cy.injectAxe()\n cy.checkA11y()\n cy.findByText(/Download is now enabled for this report/).should('be.visible')\n })\n})\n"],
5
- "mappings": "AAAA,QAAQ,kCAAmC,IAAM,CAC/C,OAAO,IAAM,CACX,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,iBAAiB,CAC3B,CAAC,EAED,GAAG,gBAAiB,IAAM,CACxB,GAAG,MACD,wUACF,EACA,GAAG,UAAU,EACb,GAAG,UAAU,EACb,GAAG,WAAW,yCAAyC,EAAE,OAAO,YAAY,CAC9E,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["context('Request download form submitted', () => {\n before(() => {\n cy.task('resetStubs')\n cy.task('resetRedis')\n cy.task('stubDefinitions')\n cy.task('stubSingleSummaries')\n })\n\n it('is accessible', () => {\n cy.visit(\n '/embedded/platform/dpr/download-report/request-download/request-examples/request-example-success/tableId/tblId_1753863906851/form/submitted?reportName=C%20Test%20Report&variantName=Successful%20Report&reportUrl=/embedded/platform/dpr/view-report/async/report/request-examples/request-example-success/tblId_1753863906851/report',\n )\n cy.injectAxe()\n cy.checkA11y()\n cy.findByText(/Download is now enabled for this report/).should('be.visible')\n })\n})\n"],
5
+ "mappings": "AAAA,QAAQ,kCAAmC,IAAM,CAC/C,OAAO,IAAM,CACX,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,iBAAiB,EACzB,GAAG,KAAK,qBAAqB,CAC/B,CAAC,EAED,GAAG,gBAAiB,IAAM,CACxB,GAAG,MACD,wUACF,EACA,GAAG,UAAU,EACb,GAAG,UAAU,EACb,GAAG,WAAW,yCAAyC,EAAE,OAAO,YAAY,CAC9E,CAAC,CACH,CAAC",
6
6
  "names": []
7
7
  }
@@ -3,6 +3,7 @@ context('Request download form submitted', () => {
3
3
  cy.task('resetStubs')
4
4
  cy.task('resetRedis')
5
5
  cy.task('stubDefinitions')
6
+ cy.task('stubSingleSummaries')
6
7
  })
7
8
 
8
9
  it('is accessible', () => {
@@ -1,2 +1,2 @@
1
- context("Request download form",()=>{const e="/embedded/platform/dpr/download-report/request-download/request-examples/request-example-success/tableId/tblId_1753863906851/form?reportUrl=/embedded/platform/dpr/view-report/async/report/request-examples/request-example-success/tblId_1753863906851/report";before(()=>{cy.task("resetStubs"),cy.task("resetRedis"),cy.task("stubDefinitions"),cy.task("stubDefinitionRequestExamplesSuccess")}),it("is accessible",()=>{cy.visit(e),cy.injectAxe(),cy.checkA11y(),cy.findByRole("heading",{name:/Download request form/}).should("be.visible"),cy.findByRole("button",{name:/Submit request/}).click(),cy.findByRole("link",{name:/provide information on how you will use this data/}).should("be.visible").click(),cy.findByRole("textbox",{name:/Can you provide more detail/}).should("be.focused").type("foo"),cy.findByRole("link",{name:/Enter your Job title/}).should("be.visible").click(),cy.findByRole("textbox",{name:/What is your Job title\?/}).should("be.focused").type("foo"),cy.findByRole("button",{name:/Submit request/}).click(),cy.findByRole("heading",{name:/Download request form/}).should("not.exist")})});
1
+ context("Request download form",()=>{const e="/embedded/platform/dpr/download-report/request-download/request-examples/request-example-success/tableId/tblId_1753863906851/form?reportUrl=/embedded/platform/dpr/view-report/async/report/request-examples/request-example-success/tblId_1753863906851/report";before(()=>{cy.task("resetStubs"),cy.task("resetRedis"),cy.task("stubDefinitions"),cy.task("stubSingleSummaries"),cy.task("stubDefinitionRequestExamplesSuccess")}),it("is accessible",()=>{cy.visit(e),cy.injectAxe(),cy.checkA11y(),cy.findByRole("heading",{name:/Download request form/}).should("be.visible"),cy.findByRole("button",{name:/Submit request/}).click(),cy.findByRole("link",{name:/provide information on how you will use this data/}).should("be.visible").click(),cy.findByRole("textbox",{name:/Can you provide more detail/}).should("be.focused").type("foo"),cy.findByRole("link",{name:/Enter your Job title/}).should("be.visible").click(),cy.findByRole("textbox",{name:/What is your Job title\?/}).should("be.focused").type("foo"),cy.findByRole("button",{name:/Submit request/}).click(),cy.findByRole("heading",{name:/Download request form/}).should("not.exist")})});
2
2
  //# sourceMappingURL=tests.cy.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/dpr/routes/journeys/download-report/request-download/form/tests.cy.ts"],
4
- "sourcesContent": ["context('Request download form', () => {\n const path =\n '/embedded/platform/dpr/download-report/request-download/request-examples/request-example-success/tableId/tblId_1753863906851/form?reportUrl=/embedded/platform/dpr/view-report/async/report/request-examples/request-example-success/tblId_1753863906851/report'\n\n before(() => {\n cy.task('resetStubs')\n cy.task('resetRedis')\n cy.task('stubDefinitions')\n cy.task('stubDefinitionRequestExamplesSuccess')\n })\n\n it('is accessible', () => {\n cy.visit(path)\n cy.injectAxe()\n cy.checkA11y()\n cy.findByRole('heading', { name: /Download request form/ }).should('be.visible')\n cy.findByRole('button', { name: /Submit request/ }).click()\n cy.findByRole('link', { name: /provide information on how you will use this data/ })\n .should('be.visible')\n .click()\n cy.findByRole('textbox', { name: /Can you provide more detail/ })\n .should('be.focused')\n .type('foo')\n cy.findByRole('link', { name: /Enter your Job title/ })\n .should('be.visible')\n .click()\n cy.findByRole('textbox', { name: /What is your Job title\\?/ })\n .should('be.focused')\n .type('foo')\n cy.findByRole('button', { name: /Submit request/ }).click()\n cy.findByRole('heading', { name: /Download request form/ }).should('not.exist')\n })\n})\n"],
5
- "mappings": "AAAA,QAAQ,wBAAyB,IAAM,CACrC,MAAMA,EACJ,kQAEF,OAAO,IAAM,CACX,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,iBAAiB,EACzB,GAAG,KAAK,sCAAsC,CAChD,CAAC,EAED,GAAG,gBAAiB,IAAM,CACxB,GAAG,MAAMA,CAAI,EACb,GAAG,UAAU,EACb,GAAG,UAAU,EACb,GAAG,WAAW,UAAW,CAAE,KAAM,uBAAwB,CAAC,EAAE,OAAO,YAAY,EAC/E,GAAG,WAAW,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAAE,MAAM,EAC1D,GAAG,WAAW,OAAQ,CAAE,KAAM,mDAAoD,CAAC,EAChF,OAAO,YAAY,EACnB,MAAM,EACT,GAAG,WAAW,UAAW,CAAE,KAAM,6BAA8B,CAAC,EAC7D,OAAO,YAAY,EACnB,KAAK,KAAK,EACb,GAAG,WAAW,OAAQ,CAAE,KAAM,sBAAuB,CAAC,EACnD,OAAO,YAAY,EACnB,MAAM,EACT,GAAG,WAAW,UAAW,CAAE,KAAM,0BAA2B,CAAC,EAC1D,OAAO,YAAY,EACnB,KAAK,KAAK,EACb,GAAG,WAAW,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAAE,MAAM,EAC1D,GAAG,WAAW,UAAW,CAAE,KAAM,uBAAwB,CAAC,EAAE,OAAO,WAAW,CAChF,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["context('Request download form', () => {\n const path =\n '/embedded/platform/dpr/download-report/request-download/request-examples/request-example-success/tableId/tblId_1753863906851/form?reportUrl=/embedded/platform/dpr/view-report/async/report/request-examples/request-example-success/tblId_1753863906851/report'\n\n before(() => {\n cy.task('resetStubs')\n cy.task('resetRedis')\n cy.task('stubDefinitions')\n cy.task('stubSingleSummaries')\n cy.task('stubDefinitionRequestExamplesSuccess')\n })\n\n it('is accessible', () => {\n cy.visit(path)\n cy.injectAxe()\n cy.checkA11y()\n cy.findByRole('heading', { name: /Download request form/ }).should('be.visible')\n cy.findByRole('button', { name: /Submit request/ }).click()\n cy.findByRole('link', { name: /provide information on how you will use this data/ })\n .should('be.visible')\n .click()\n cy.findByRole('textbox', { name: /Can you provide more detail/ })\n .should('be.focused')\n .type('foo')\n cy.findByRole('link', { name: /Enter your Job title/ })\n .should('be.visible')\n .click()\n cy.findByRole('textbox', { name: /What is your Job title\\?/ })\n .should('be.focused')\n .type('foo')\n cy.findByRole('button', { name: /Submit request/ }).click()\n cy.findByRole('heading', { name: /Download request form/ }).should('not.exist')\n })\n})\n"],
5
+ "mappings": "AAAA,QAAQ,wBAAyB,IAAM,CACrC,MAAMA,EACJ,kQAEF,OAAO,IAAM,CACX,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,YAAY,EACpB,GAAG,KAAK,iBAAiB,EACzB,GAAG,KAAK,qBAAqB,EAC7B,GAAG,KAAK,sCAAsC,CAChD,CAAC,EAED,GAAG,gBAAiB,IAAM,CACxB,GAAG,MAAMA,CAAI,EACb,GAAG,UAAU,EACb,GAAG,UAAU,EACb,GAAG,WAAW,UAAW,CAAE,KAAM,uBAAwB,CAAC,EAAE,OAAO,YAAY,EAC/E,GAAG,WAAW,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAAE,MAAM,EAC1D,GAAG,WAAW,OAAQ,CAAE,KAAM,mDAAoD,CAAC,EAChF,OAAO,YAAY,EACnB,MAAM,EACT,GAAG,WAAW,UAAW,CAAE,KAAM,6BAA8B,CAAC,EAC7D,OAAO,YAAY,EACnB,KAAK,KAAK,EACb,GAAG,WAAW,OAAQ,CAAE,KAAM,sBAAuB,CAAC,EACnD,OAAO,YAAY,EACnB,MAAM,EACT,GAAG,WAAW,UAAW,CAAE,KAAM,0BAA2B,CAAC,EAC1D,OAAO,YAAY,EACnB,KAAK,KAAK,EACb,GAAG,WAAW,SAAU,CAAE,KAAM,gBAAiB,CAAC,EAAE,MAAM,EAC1D,GAAG,WAAW,UAAW,CAAE,KAAM,uBAAwB,CAAC,EAAE,OAAO,WAAW,CAChF,CAAC,CACH,CAAC",
6
6
  "names": ["path"]
7
7
  }
@@ -6,6 +6,7 @@ context('Request download form', () => {
6
6
  cy.task('resetStubs')
7
7
  cy.task('resetRedis')
8
8
  cy.task('stubDefinitions')
9
+ cy.task('stubSingleSummaries')
9
10
  cy.task('stubDefinitionRequestExamplesSuccess')
10
11
  })
11
12
 
@@ -1,2 +1,2 @@
1
- var i=require("test-app/routes/integrationTests/redisStateTestUtils"),o=require("../../../../../cypress-tests/cypressUtils");context("Download report",()=>{const d="/embedded/platform/";let t,s;before(()=>{cy.task("resetStubs"),cy.task("resetRedis"),cy.task("stubDefinitions"),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubReportsFinishedStatus"),cy.task("stubRequestSuccessResult20"),cy.task("stubRequestSuccessReportTablesCount"),cy.task("stubViewAsyncReportingResults"),cy.task("stubRequestSuccessResult100"),cy.visit(d),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(e,l)=>l.textContent.includes("Successful Report")&&l.textContent.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),(0,o.checkA11y)(),cy.findByRole("button",{name:/Request/}).click(),(0,o.checkA11y)(),cy.findByRole("heading",{level:1,name:/Successful Report/}).should("be.visible"),cy.url().then(e=>{s=e})}),beforeEach(()=>{cy.visit(s)}),describe("Enabling download",()=>{it("should show the enable download button",()=>{cy.findByLabelText(/Enable download/).should("exist").should("be.visible"),cy.findByRole("heading",{name:"To download this report"}).should("not.exist")}),it("should show the download disabled message with link to form",()=>{cy.findByLabelText(/Enable download/).click(),cy.url().should("have.string","/report/download-disabled"),cy.findByRole("heading",{name:"To download this report"}).should("be.visible"),cy.findByRole("link",{name:"Fill out a form"})}),it("should go to the request download form",()=>{cy.findByLabelText(/Enable download/).click(),cy.findByRole("link",{name:"Fill out a form"}).click(),cy.url().then(e=>{t=e}),cy.url().should("match",/\/embedded\/platform\/dpr\/download-report\/request-download\/request-examples\/request-example-success\/tableId\/tblId_[0-9]+\/form/),cy.location().should(e=>{expect(e.search).to.match(/.*reportUrl=\/embedded\/platform\/dpr\/view-report\/async\/report\/request-examples\/request-example-success\/tblId_[0-9]+\/report/)})})}),describe("Requesting download",()=>{it("should prefill the user data in the request form",()=>{cy.visit(t),cy.findByRole("textbox",{name:"What is your Full name?"}).should("have.value","Test User"),cy.findByRole("textbox",{name:"What is your Email address?"}).should("have.value","test@user.com")}),it("should validate the required fields",()=>{cy.visit(t),cy.findByRole("alert").should("not.exist"),cy.findAllByRole("paragraph").contains("Enter your Job title").should("not.exist"),cy.findAllByRole("paragraph").contains("provide information on how you will use this data").should("not.exist"),cy.get("#more-detail-error").should("not.be.visible"),cy.findByRole("button",{name:/Submit request/}).click(),cy.findByRole("alert").should("exist"),cy.findAllByRole("paragraph").contains("Enter your Job title").should("exist"),cy.findAllByRole("paragraph").contains("provide information on how you will use this data").should("exist")}),it("should submit the download request",()=>{cy.visit(t),cy.findByRole("textbox",{name:"What is your Job title?"}).type("Software engineer"),cy.findByRole("textbox",{name:"Can you provide more detail"}).type("I like this report"),cy.findByRole("button",{name:"Submit request"}).click(),cy.findByText(/You have been granted permission/).should("be.visible"),cy.url().as("downloadRequestSubmittedPage"),cy.url().and("match",/dpr\/download-report\/request-download\/request-examples\/request-example-success\/tableId\/tblId_[0-9]+\/form\/submitted/),cy.findByRole("link",{name:/Return to report to download/}).click(),cy.findAllByRole("heading").contains("Successful Report").should("exist"),cy.findByRole("button",{name:/download/}).should("be.visible"),cy.task("stubRequestSuccessResult10MissingFirstRow"),cy.findByRole("button",{name:/download/}).click(),cy.task("checkContents10RowExcelValid").should("equal",!0)}),it("should redirect on trying to download after having the permission to download removed",()=>{(0,i.updateRedisState)("downloadPermissions",[]),cy.findByRole("heading",{name:/To download this report/}).should("not.exist"),cy.findByRole("button",{name:/download/}).click(),cy.findByRole("heading",{name:/To download this report/}).should("be.visible")})})});
1
+ var s=require("test-app/routes/integrationTests/redisStateTestUtils"),o=require("../../../../../cypress-tests/cypressUtils");context("Download report",()=>{const d="/embedded/platform/";let t,l;before(()=>{(0,o.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("stubRequestSuccessResult100"),cy.visit(d),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(e,i)=>i.textContent.includes("Successful Report")&&i.textContent.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),(0,o.checkA11y)(),cy.findByRole("button",{name:/Request/}).click(),(0,o.checkA11y)(),cy.findByRole("heading",{level:1,name:/Successful Report/}).should("be.visible"),cy.url().then(e=>{l=e})}),beforeEach(()=>{cy.visit(l)}),describe("Enabling download",()=>{it("should show the enable download button",()=>{cy.findByLabelText(/Enable download/).should("exist").should("be.visible"),cy.findByRole("heading",{name:"To download this report"}).should("not.exist")}),it("should show the download disabled message with link to form",()=>{cy.findByLabelText(/Enable download/).click(),cy.url().should("have.string","/report/download-disabled"),cy.findByRole("heading",{name:"To download this report"}).should("be.visible"),cy.findByRole("link",{name:"Fill out a form"})}),it("should go to the request download form",()=>{cy.findByLabelText(/Enable download/).click(),cy.findByRole("link",{name:"Fill out a form"}).click(),cy.url().then(e=>{t=e}),cy.url().should("match",/\/embedded\/platform\/dpr\/download-report\/request-download\/request-examples\/request-example-success\/tableId\/tblId_[0-9]+\/form/),cy.location().should(e=>{expect(e.search).to.match(/.*reportUrl=\/embedded\/platform\/dpr\/view-report\/async\/report\/request-examples\/request-example-success\/tblId_[0-9]+\/report/)})})}),describe("Requesting download",()=>{it("should prefill the user data in the request form",()=>{cy.visit(t),cy.findByRole("textbox",{name:"What is your Full name?"}).should("have.value","Test User"),cy.findByRole("textbox",{name:"What is your Email address?"}).should("have.value","test@user.com")}),it("should validate the required fields",()=>{cy.visit(t),cy.findByRole("alert").should("not.exist"),cy.findAllByRole("paragraph").contains("Enter your Job title").should("not.exist"),cy.findAllByRole("paragraph").contains("provide information on how you will use this data").should("not.exist"),cy.get("#more-detail-error").should("not.be.visible"),cy.findByRole("button",{name:/Submit request/}).click(),cy.findByRole("alert").should("exist"),cy.findAllByRole("paragraph").contains("Enter your Job title").should("exist"),cy.findAllByRole("paragraph").contains("provide information on how you will use this data").should("exist")}),it("should submit the download request",()=>{cy.visit(t),cy.findByRole("textbox",{name:"What is your Job title?"}).type("Software engineer"),cy.findByRole("textbox",{name:"Can you provide more detail"}).type("I like this report"),cy.findByRole("button",{name:"Submit request"}).click(),cy.findByText(/You have been granted permission/).should("be.visible"),cy.url().as("downloadRequestSubmittedPage"),cy.url().and("match",/dpr\/download-report\/request-download\/request-examples\/request-example-success\/tableId\/tblId_[0-9]+\/form\/submitted/),cy.findByRole("link",{name:/Return to report to download/}).click(),cy.findAllByRole("heading").contains("Successful Report").should("exist"),cy.findByRole("button",{name:/download/}).should("be.visible"),cy.task("stubRequestSuccessResult10MissingFirstRow"),cy.findByRole("button",{name:/download/}).click(),cy.task("checkContents10RowExcelValid").should("equal",!0)}),it("should redirect on trying to download after having the permission to download removed",()=>{(0,s.updateRedisState)("downloadPermissions",[]),cy.findByRole("heading",{name:/To download this report/}).should("not.exist"),cy.findByRole("button",{name:/download/}).click(),cy.findByRole("heading",{name:/To download this report/}).should("be.visible")})})});
2
2
  //# sourceMappingURL=tests.cy.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/routes/journeys/download-report/tests.cy.ts"],
4
- "sourcesContent": ["import { updateRedisState } from 'test-app/routes/integrationTests/redisStateTestUtils'\nimport { checkA11y } from '../../../../../cypress-tests/cypressUtils'\n\ncontext('Download report', () => {\n const path = '/embedded/platform/'\n let downloadRequestFormPage: string\n let viewReportUrl: string\n\n before(() => {\n cy.task('resetStubs')\n cy.task('resetRedis')\n cy.task('stubDefinitions')\n cy.task('stubDefinitionRequestExamplesSuccess')\n cy.task('stubReportsFinishedStatus')\n cy.task('stubRequestSuccessResult20')\n cy.task('stubRequestSuccessReportTablesCount')\n cy.task('stubViewAsyncReportingResults')\n cy.task('stubRequestSuccessResult100')\n cy.visit(path)\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return element.textContent.includes('Successful Report') && element.textContent.includes('this will succeed')\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request report' }).click()\n })\n })\n checkA11y()\n cy.findByRole('button', { name: /Request/ }).click()\n checkA11y()\n cy.findByRole('heading', { level: 1, name: /Successful Report/ }).should('be.visible')\n cy.url().then((url) => {\n viewReportUrl = url\n })\n })\n\n beforeEach(() => {\n cy.visit(viewReportUrl)\n })\n\n describe('Enabling download', () => {\n it('should show the enable download button', () => {\n cy.findByLabelText(/Enable download/)\n .should('exist')\n .should('be.visible')\n cy.findByRole('heading', { name: 'To download this report' }).should('not.exist')\n })\n\n it('should show the download disabled message with link to form', () => {\n cy.findByLabelText(/Enable download/).click()\n cy.url().should('have.string', '/report/download-disabled')\n cy.findByRole('heading', { name: 'To download this report' }).should('be.visible')\n cy.findByRole('link', { name: 'Fill out a form' })\n })\n\n it('should go to the request download form', () => {\n cy.findByLabelText(/Enable download/).click()\n cy.findByRole('link', { name: 'Fill out a form' }).click()\n\n cy.url().then((url) => {\n downloadRequestFormPage = url\n })\n\n cy.url().should(\n 'match',\n /\\/embedded\\/platform\\/dpr\\/download-report\\/request-download\\/request-examples\\/request-example-success\\/tableId\\/tblId_[0-9]+\\/form/,\n )\n cy.location().should((location) => {\n expect(location.search).to.match(\n /.*reportUrl=\\/embedded\\/platform\\/dpr\\/view-report\\/async\\/report\\/request-examples\\/request-example-success\\/tblId_[0-9]+\\/report/,\n )\n })\n })\n })\n\n describe('Requesting download', () => {\n it('should prefill the user data in the request form', () => {\n cy.visit(downloadRequestFormPage)\n cy.findByRole('textbox', { name: 'What is your Full name?' }).should('have.value', 'Test User')\n cy.findByRole('textbox', { name: 'What is your Email address?' }).should('have.value', 'test@user.com')\n })\n\n it('should validate the required fields', () => {\n cy.visit(downloadRequestFormPage)\n cy.findByRole('alert').should('not.exist')\n\n cy.findAllByRole('paragraph').contains('Enter your Job title').should('not.exist')\n cy.findAllByRole('paragraph').contains('provide information on how you will use this data').should('not.exist')\n cy.get('#more-detail-error').should('not.be.visible')\n\n cy.findByRole('button', { name: /Submit request/ }).click()\n\n cy.findByRole('alert').should('exist')\n cy.findAllByRole('paragraph').contains('Enter your Job title').should('exist')\n cy.findAllByRole('paragraph').contains('provide information on how you will use this data').should('exist')\n })\n\n it('should submit the download request', () => {\n cy.visit(downloadRequestFormPage)\n cy.findByRole('textbox', { name: 'What is your Job title?' }).type('Software engineer')\n cy.findByRole('textbox', { name: 'Can you provide more detail' }).type('I like this report')\n\n cy.findByRole('button', { name: 'Submit request' }).click()\n cy.findByText(/You have been granted permission/).should('be.visible')\n\n cy.url().as('downloadRequestSubmittedPage')\n\n cy.url().and(\n 'match',\n /dpr\\/download-report\\/request-download\\/request-examples\\/request-example-success\\/tableId\\/tblId_[0-9]+\\/form\\/submitted/,\n )\n cy.findByRole('link', { name: /Return to report to download/ }).click()\n cy.findAllByRole('heading').contains('Successful Report').should('exist')\n cy.findByRole('button', { name: /download/ }).should('be.visible')\n\n cy.task('stubRequestSuccessResult10MissingFirstRow')\n cy.findByRole('button', { name: /download/ }).click()\n cy.task('checkContents10RowExcelValid').should('equal', true)\n })\n\n it('should redirect on trying to download after having the permission to download removed', () => {\n updateRedisState('downloadPermissions', [])\n cy.findByRole('heading', { name: /To download this report/ }).should('not.exist')\n cy.findByRole('button', { name: /download/ }).click()\n cy.findByRole('heading', { name: /To download this report/ }).should('be.visible')\n })\n })\n})\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { updateRedisState } from 'test-app/routes/integrationTests/redisStateTestUtils'\nimport { checkA11y, executeReportStubs } from '../../../../../cypress-tests/cypressUtils'\n\ncontext('Download report', () => {\n const path = '/embedded/platform/'\n let downloadRequestFormPage: string\n let viewReportUrl: string\n\n before(() => {\n executeReportStubs()\n cy.task('stubDefinitionRequestExamplesSuccess')\n cy.task('stubRequestSuccessResult20')\n cy.task('stubRequestSuccessResult100')\n cy.visit(path)\n cy.findByLabelText(/Reports catalogue.*/i).within(() => {\n cy.findByRole('row', {\n name: (_, element) => {\n return element.textContent.includes('Successful Report') && element.textContent.includes('this will succeed')\n },\n }).within(() => {\n cy.findByRole('link', { name: 'Request report' }).click()\n })\n })\n checkA11y()\n cy.findByRole('button', { name: /Request/ }).click()\n checkA11y()\n cy.findByRole('heading', { level: 1, name: /Successful Report/ }).should('be.visible')\n cy.url().then((url) => {\n viewReportUrl = url\n })\n })\n\n beforeEach(() => {\n cy.visit(viewReportUrl)\n })\n\n describe('Enabling download', () => {\n it('should show the enable download button', () => {\n cy.findByLabelText(/Enable download/)\n .should('exist')\n .should('be.visible')\n cy.findByRole('heading', { name: 'To download this report' }).should('not.exist')\n })\n\n it('should show the download disabled message with link to form', () => {\n cy.findByLabelText(/Enable download/).click()\n cy.url().should('have.string', '/report/download-disabled')\n cy.findByRole('heading', { name: 'To download this report' }).should('be.visible')\n cy.findByRole('link', { name: 'Fill out a form' })\n })\n\n it('should go to the request download form', () => {\n cy.findByLabelText(/Enable download/).click()\n cy.findByRole('link', { name: 'Fill out a form' }).click()\n\n cy.url().then((url) => {\n downloadRequestFormPage = url\n })\n\n cy.url().should(\n 'match',\n /\\/embedded\\/platform\\/dpr\\/download-report\\/request-download\\/request-examples\\/request-example-success\\/tableId\\/tblId_[0-9]+\\/form/,\n )\n cy.location().should((location) => {\n expect(location.search).to.match(\n /.*reportUrl=\\/embedded\\/platform\\/dpr\\/view-report\\/async\\/report\\/request-examples\\/request-example-success\\/tblId_[0-9]+\\/report/,\n )\n })\n })\n })\n\n describe('Requesting download', () => {\n it('should prefill the user data in the request form', () => {\n cy.visit(downloadRequestFormPage)\n cy.findByRole('textbox', { name: 'What is your Full name?' }).should('have.value', 'Test User')\n cy.findByRole('textbox', { name: 'What is your Email address?' }).should('have.value', 'test@user.com')\n })\n\n it('should validate the required fields', () => {\n cy.visit(downloadRequestFormPage)\n cy.findByRole('alert').should('not.exist')\n\n cy.findAllByRole('paragraph').contains('Enter your Job title').should('not.exist')\n cy.findAllByRole('paragraph').contains('provide information on how you will use this data').should('not.exist')\n cy.get('#more-detail-error').should('not.be.visible')\n\n cy.findByRole('button', { name: /Submit request/ }).click()\n\n cy.findByRole('alert').should('exist')\n cy.findAllByRole('paragraph').contains('Enter your Job title').should('exist')\n cy.findAllByRole('paragraph').contains('provide information on how you will use this data').should('exist')\n })\n\n it('should submit the download request', () => {\n cy.visit(downloadRequestFormPage)\n cy.findByRole('textbox', { name: 'What is your Job title?' }).type('Software engineer')\n cy.findByRole('textbox', { name: 'Can you provide more detail' }).type('I like this report')\n\n cy.findByRole('button', { name: 'Submit request' }).click()\n cy.findByText(/You have been granted permission/).should('be.visible')\n\n cy.url().as('downloadRequestSubmittedPage')\n\n cy.url().and(\n 'match',\n /dpr\\/download-report\\/request-download\\/request-examples\\/request-example-success\\/tableId\\/tblId_[0-9]+\\/form\\/submitted/,\n )\n cy.findByRole('link', { name: /Return to report to download/ }).click()\n cy.findAllByRole('heading').contains('Successful Report').should('exist')\n cy.findByRole('button', { name: /download/ }).should('be.visible')\n\n cy.task('stubRequestSuccessResult10MissingFirstRow')\n cy.findByRole('button', { name: /download/ }).click()\n cy.task('checkContents10RowExcelValid').should('equal', true)\n })\n\n it('should redirect on trying to download after having the permission to download removed', () => {\n updateRedisState('downloadPermissions', [])\n cy.findByRole('heading', { name: /To download this report/ }).should('not.exist')\n cy.findByRole('button', { name: /download/ }).click()\n cy.findByRole('heading', { name: /To download this report/ }).should('be.visible')\n })\n })\n})\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_redisStateTestUtils", "import_cypressUtils", "path", "downloadRequestFormPage", "viewReportUrl", "_", "element", "url", "location"]
7
7
  }
@@ -1,5 +1,5 @@
1
1
  import { updateRedisState } from 'test-app/routes/integrationTests/redisStateTestUtils'
2
- import { checkA11y } from '../../../../../cypress-tests/cypressUtils'
2
+ import { checkA11y, executeReportStubs } from '../../../../../cypress-tests/cypressUtils'
3
3
 
4
4
  context('Download report', () => {
5
5
  const path = '/embedded/platform/'
@@ -7,14 +7,9 @@ context('Download report', () => {
7
7
  let viewReportUrl: string
8
8
 
9
9
  before(() => {
10
- cy.task('resetStubs')
11
- cy.task('resetRedis')
12
- cy.task('stubDefinitions')
10
+ executeReportStubs()
13
11
  cy.task('stubDefinitionRequestExamplesSuccess')
14
- cy.task('stubReportsFinishedStatus')
15
12
  cy.task('stubRequestSuccessResult20')
16
- cy.task('stubRequestSuccessReportTablesCount')
17
- cy.task('stubViewAsyncReportingResults')
18
13
  cy.task('stubRequestSuccessResult100')
19
14
  cy.visit(path)
20
15
  cy.findByLabelText(/Reports catalogue.*/i).within(() => {
@@ -1,2 +1,2 @@
1
- var A=Object.create;var m=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var H=(n,t)=>{for(var e in t)m(n,e,{get:t[e],enumerable:!0})},w=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of N(t))!x.call(n,s)&&s!==e&&m(n,s,{get:()=>t[s],enumerable:!(i=I(t,s))||i.enumerable});return n};var C=(n,t,e)=>(e=n!=null?A(O(n)):{},w(t||!n||!n.__esModule?m(e,"default",{value:n,enumerable:!0}):e,n)),K=n=>w(m({},"__esModule",{value:!0}),n);var $={};H($,{default:()=>Q,downloadReport:()=>L,getKeys:()=>y});module.exports=K($);var R=require("json-2-csv"),T=require("../../../types/UserReports"),q=C(require("../../../utils/localsHelper")),g=C(require("../../../types/ReportQuery"));const V=(n,t)=>(0,R.json2csv)(n,t),y=(n,t)=>{const e=[],i=[];return n.forEach(s=>{Object.keys(s).forEach(o=>{const a=t.find(r=>r.name===o);a&&!i.includes(o)&&(i.push(o),e.push({field:o,title:a.display}))})}),e},E=(n,t)=>n.map(e=>Object.keys(e).filter(i=>t.includes(i)).reduce((i,s)=>(i[s]=e[s],i),{})),J=(n,t)=>{const{specification:e}=t.variant;if(e){const{fields:i}=e,s=i.filter(o=>o.type==="HTML");s.length&&n.map(o=>(s.forEach(a=>{const{name:r}=a,c=o[r];if(c){const p=/target="_blank">(.*?)<\/a>/g.exec(c);o[r]=p?p[1]:c}}),o))}return n},j=async n=>{const{token:t,services:e,tableId:i,reportId:s,id:o,queryParams:a}=n,r=await e.reportingService.getAsyncCount(t,i),c={...a,pageSize:r};return e.reportingService.getAsyncReport(t,s,o,i,c)},F=async n=>{const{token:t,services:e,queryParams:i,definition:s}=n,{variant:o}=s,{resourceName:a,specification:r}=o;let c=[];if(r){const p=new g.default({fields:r.fields,template:r.template,queryParams:i,definitionsPath:i.dataProductDefinitionsPath}),l=await e.reportingService.getCount(a,t,p),f=new g.default({fields:r.fields,template:r.template,queryParams:{...i,pageSize:l},definitionsPath:i.dataProductDefinitionsPath});c=(await e.reportingService.getListWithWarnings(a,t,f)).data}return c},L=async({req:n,services:t,res:e,redirect:i,loadType:s})=>{const{dprUser:o,token:a}=q.default.getValues(e),{reportId:r,id:c,tableId:p,dataProductDefinitionsPath:l,reportName:f,name:D,cols:v,sortedAsc:S,sortColumn:h}=n.body;if(!await t.downloadPermissionService.downloadEnabled(o.id,r,c))e.redirect(i);else{const u=await t.reportingService.getDefinition(a,r,c,l),P={dataProductDefinitionsPath:l,...S&&{sortedAsc:S},...h&&{sortColumn:h}};let d;s===T.LoadType.SYNC?d=await F({definition:u,services:t,token:a,queryParams:P}):d=await j({services:t,token:a,reportId:r,id:c,tableId:p,queryParams:P}),v&&(d=E(d,JSON.parse(v))),d=J(d,u);const b=y(d,u.variant.specification.fields),k=V(d,{keys:b,emptyFieldValue:""});e.setHeader("Content-Type","application/json"),e.setHeader("Content-disposition",`attachment; filename=${f}-${D}-${new Date().toISOString()}.csv`),e.end(k)}};var Q={downloadReport:L,getKeys:y};0&&(module.exports={downloadReport,getKeys});
1
+ var N=Object.create;var m=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var V=(n,t)=>{for(var e in t)m(n,e,{get:t[e],enumerable:!0})},C=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of x(t))!K.call(n,s)&&s!==e&&m(n,s,{get:()=>t[s],enumerable:!(i=O(t,s))||i.enumerable});return n};var R=(n,t,e)=>(e=n!=null?N(H(n)):{},C(t||!n||!n.__esModule?m(e,"default",{value:n,enumerable:!0}):e,n)),E=n=>C(m({},"__esModule",{value:!0}),n);var W={};V(W,{default:()=>$,downloadReport:()=>b,getKeys:()=>y});module.exports=E(W);var T=require("json-2-csv"),q=require("../../../types/UserReports"),L=R(require("../../../utils/localsHelper")),u=R(require("../../../types/ReportQuery"));const J=(n,t)=>(0,T.json2csv)(n,t),y=(n,t)=>{const e=[],i=[];return n.forEach(s=>{Object.keys(s).forEach(o=>{const a=t.find(r=>r.name===o);a&&!i.includes(o)&&(i.push(o),e.push({field:o,title:a.display}))})}),e},j=(n,t)=>n.map(e=>Object.keys(e).filter(i=>t.includes(i)).reduce((i,s)=>(i[s]=e[s],i),{})),z=(n,t)=>{const{specification:e}=t.variant;if(e){const{fields:i}=e,s=i.filter(o=>o.type==="HTML");s.length&&n.map(o=>(s.forEach(a=>{const{name:r}=a,c=o[r];if(c){const p=/target="_blank">(.*?)<\/a>/g.exec(c);o[r]=p?p[1]:c}}),o))}return n},F=async n=>{const{token:t,services:e,tableId:i,reportId:s,id:o,queryParams:a}=n,r=await e.reportingService.getAsyncCount(t,i),c={...a,pageSize:r.toString()};return e.reportingService.getAsyncReport(t,s,o,i,c)},Q=async n=>{const{token:t,services:e,queryParams:i,definition:s}=n,{variant:o}=s,{resourceName:a,specification:r}=o;let c=[];if(r){const p=new u.default({fields:r.fields,template:r.template,queryParams:i,definitionsPath:i.dataProductDefinitionsPath}),l=await e.reportingService.getCount(a,t,p),f=new u.default({fields:r.fields,template:r.template,queryParams:{...i,pageSize:l.toString()},definitionsPath:i.dataProductDefinitionsPath});c=(await e.reportingService.getListWithWarnings(a,t,f)).data}return c},b=async({req:n,services:t,res:e,redirect:i,loadType:s})=>{const{dprUser:o,token:a}=L.default.getValues(e),{reportId:r,id:c,tableId:p,dataProductDefinitionsPath:l,reportName:f,name:D,cols:v,sortedAsc:S,sortColumn:h}=n.body,{downloadPermissionService:P}=t;if(!(P?await P.downloadEnabled(o.id,r,c):!1))e.redirect(i);else{const g=await t.reportingService.getDefinition(a,r,c,l),w={dataProductDefinitionsPath:l,...S&&{sortedAsc:S},...h&&{sortColumn:h}};let d;s===q.LoadType.SYNC?d=await Q({definition:g,services:t,token:a,queryParams:w}):d=await F({services:t,token:a,reportId:r,id:c,tableId:p,queryParams:w}),v&&(d=j(d,JSON.parse(v))),d=z(d,g);const k=g.variant.specification?.fields||[],A=y(d,k),I=J(d,{keys:A,emptyFieldValue:""});e.setHeader("Content-Type","application/json"),e.setHeader("Content-disposition",`attachment; filename=${f}-${D}-${new Date().toISOString()}.csv`),e.end(I)}};var $={downloadReport:b,getKeys:y};0&&(module.exports={downloadReport,getKeys});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/routes/journeys/download-report/utils.ts"],
4
- "sourcesContent": ["import { Response, Request } from 'express'\nimport { json2csv, Json2CsvOptions } from 'json-2-csv'\nimport { KeysList } from 'json-2-csv/lib/types'\nimport { Services } from '../../../types/Services'\nimport Dict = NodeJS.Dict\nimport { LoadType } from '../../../types/UserReports'\nimport { components } from '../../../types/api'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport { Template } from '../../../types/Templates'\nimport ReportQuery from '../../../types/ReportQuery'\n\nconst convertToCsv = (reportData: Dict<string>[], options: Json2CsvOptions) => {\n const csvData = json2csv(reportData, options)\n return csvData\n}\n\nexport const getKeys = (reportData: Dict<string>[], fields: components['schemas']['FieldDefinition'][]): KeysList => {\n const keys: KeysList = []\n const keyNames: string[] = []\n reportData.forEach((row) => {\n Object.keys(row).forEach((key) => {\n const field = fields.find((f) => f.name === key)\n if (field && !keyNames.includes(key)) {\n keyNames.push(key)\n keys.push({\n field: key,\n title: field.display,\n })\n }\n })\n })\n return keys\n}\n\nconst applyColumnsAndSort = (data: Dict<string>[], columns: string[]) => {\n return data.map((row) => {\n return Object.keys(row)\n .filter((key) => columns.includes(key))\n .reduce((obj: Dict<string>, key) => {\n // eslint-disable-next-line no-param-reassign\n obj[key] = row[key]\n return obj\n }, {})\n })\n}\n\nconst removeHtmlTags = (\n reportData: Dict<string>[],\n reportDefinition: components['schemas']['SingleVariantReportDefinition'],\n) => {\n // Find HMTL field + name\n const { specification } = reportDefinition.variant\n if (specification) {\n const { fields } = specification\n const htmlFields = fields.filter((field) => {\n return field.type === 'HTML'\n })\n\n if (htmlFields.length) {\n reportData.map((d) => {\n htmlFields.forEach((field) => {\n const { name } = field\n const colValue = d[name]\n if (colValue) {\n const innerText = /target=\"_blank\">(.*?)<\\/a>/g.exec(colValue)\n // eslint-disable-next-line prefer-destructuring, no-param-reassign\n d[name] = innerText ? innerText[1] : colValue\n }\n })\n return d\n })\n }\n }\n return reportData\n}\n\nconst dowloadAsyncData = async (args: {\n services: Services\n token: string\n tableId: string\n reportId: string\n id: string\n queryParams: {\n dataProductDefinitionsPath: string\n sortedAsc?: string\n sortColumn?: string\n }\n}) => {\n const { token, services, tableId, reportId, id, queryParams } = args\n const pageSize = await services.reportingService.getAsyncCount(token, tableId)\n const query = {\n ...queryParams,\n pageSize,\n }\n return services.reportingService.getAsyncReport(token, reportId, id, tableId, query)\n}\n\nconst downloadSyncData = async (args: {\n definition: components['schemas']['SingleVariantReportDefinition']\n services: Services\n token: string\n queryParams: {\n dataProductDefinitionsPath: string\n sortedAsc?: string\n sortColumn?: string\n }\n}) => {\n const { token, services, queryParams, definition } = args\n const { variant } = definition\n const { resourceName, specification } = variant\n let data = []\n\n if (specification) {\n const countReportQuery = new ReportQuery({\n fields: specification.fields,\n template: specification.template as Template,\n queryParams,\n definitionsPath: <string>queryParams.dataProductDefinitionsPath,\n })\n const count = await services.reportingService.getCount(resourceName, token, countReportQuery)\n\n const dataReportQuery = new ReportQuery({\n fields: specification.fields,\n template: specification.template as Template,\n queryParams: {\n ...queryParams,\n pageSize: count,\n },\n definitionsPath: <string>queryParams.dataProductDefinitionsPath,\n })\n const reportData = await services.reportingService.getListWithWarnings(resourceName, token, dataReportQuery)\n data = reportData.data\n }\n\n return data\n}\n\nexport const downloadReport = async ({\n req,\n services,\n res,\n redirect,\n loadType,\n}: {\n req: Request\n services: Services\n res: Response\n redirect: string\n loadType?: LoadType\n}) => {\n const { dprUser, token } = LocalsHelper.getValues(res)\n const {\n reportId,\n id,\n tableId,\n dataProductDefinitionsPath,\n reportName,\n name,\n cols: columns,\n sortedAsc,\n sortColumn,\n } = req.body\n\n const canDownload = await services.downloadPermissionService.downloadEnabled(dprUser.id, reportId, id)\n if (!canDownload) {\n res.redirect(redirect)\n } else {\n const definition = await services.reportingService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n const queryParams = {\n dataProductDefinitionsPath,\n ...(sortedAsc && { sortedAsc }),\n ...(sortColumn && { sortColumn }),\n }\n\n let reportData\n if (loadType === LoadType.SYNC) {\n reportData = await downloadSyncData({\n definition,\n services,\n token,\n queryParams,\n })\n } else {\n reportData = await dowloadAsyncData({\n services,\n token,\n reportId,\n id,\n tableId,\n queryParams,\n })\n }\n if (columns) {\n reportData = applyColumnsAndSort(reportData, JSON.parse(columns))\n }\n reportData = removeHtmlTags(reportData, definition)\n const keys: KeysList = getKeys(reportData, definition.variant.specification.fields)\n const csvData = convertToCsv(reportData, { keys, emptyFieldValue: '' })\n\n res.setHeader('Content-Type', 'application/json')\n res.setHeader('Content-disposition', `attachment; filename=${reportName}-${name}-${new Date().toISOString()}.csv`)\n res.end(csvData)\n }\n}\n\nexport default {\n downloadReport,\n getKeys,\n}\n"],
5
- "mappings": "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",
6
- "names": ["utils_exports", "__export", "utils_default", "downloadReport", "getKeys", "__toCommonJS", "import_json_2_csv", "import_UserReports", "import_localsHelper", "import_ReportQuery", "convertToCsv", "reportData", "options", "fields", "keys", "keyNames", "row", "key", "field", "f", "applyColumnsAndSort", "data", "columns", "obj", "removeHtmlTags", "reportDefinition", "specification", "htmlFields", "d", "name", "colValue", "innerText", "dowloadAsyncData", "args", "token", "services", "tableId", "reportId", "id", "queryParams", "pageSize", "query", "downloadSyncData", "definition", "variant", "resourceName", "countReportQuery", "ReportQuery", "count", "dataReportQuery", "req", "res", "redirect", "loadType", "dprUser", "LocalsHelper", "dataProductDefinitionsPath", "reportName", "sortedAsc", "sortColumn", "csvData"]
4
+ "sourcesContent": ["import { Response, Request } from 'express'\nimport { json2csv, Json2CsvOptions } from 'json-2-csv'\nimport { KeysList } from 'json-2-csv/lib/types'\nimport { Services } from '../../../types/Services'\nimport Dict = NodeJS.Dict\nimport { LoadType } from '../../../types/UserReports'\nimport { components } from '../../../types/api'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport { Template } from '../../../types/Templates'\nimport ReportQuery from '../../../types/ReportQuery'\n\nconst convertToCsv = (reportData: Dict<string>[], options: Json2CsvOptions) => {\n const csvData = json2csv(reportData, options)\n return csvData\n}\n\nexport const getKeys = (reportData: Dict<string>[], fields: components['schemas']['FieldDefinition'][]): KeysList => {\n const keys: KeysList = []\n const keyNames: string[] = []\n reportData.forEach((row) => {\n Object.keys(row).forEach((key) => {\n const field = fields.find((f) => f.name === key)\n if (field && !keyNames.includes(key)) {\n keyNames.push(key)\n keys.push({\n field: key,\n title: field.display,\n })\n }\n })\n })\n return keys\n}\n\nconst applyColumnsAndSort = (data: Dict<string>[], columns: string[]) => {\n return data.map((row) => {\n return Object.keys(row)\n .filter((key) => columns.includes(key))\n .reduce((obj: Dict<string>, key) => {\n // eslint-disable-next-line no-param-reassign\n obj[key] = row[key]\n return obj\n }, {})\n })\n}\n\nconst removeHtmlTags = (\n reportData: Dict<string>[],\n reportDefinition: components['schemas']['SingleVariantReportDefinition'],\n) => {\n // Find HMTL field + name\n const { specification } = reportDefinition.variant\n if (specification) {\n const { fields } = specification\n const htmlFields = fields.filter((field) => {\n return field.type === 'HTML'\n })\n\n if (htmlFields.length) {\n reportData.map((d) => {\n htmlFields.forEach((field) => {\n const { name } = field\n const colValue = d[name]\n if (colValue) {\n const innerText = /target=\"_blank\">(.*?)<\\/a>/g.exec(colValue)\n // eslint-disable-next-line prefer-destructuring, no-param-reassign\n d[name] = innerText ? innerText[1] : colValue\n }\n })\n return d\n })\n }\n }\n return reportData\n}\n\nconst dowloadAsyncData = async (args: {\n services: Services\n token: string\n tableId: string\n reportId: string\n id: string\n queryParams: {\n dataProductDefinitionsPath: string\n sortedAsc?: string\n sortColumn?: string\n }\n}) => {\n const { token, services, tableId, reportId, id, queryParams } = args\n const pageSize = await services.reportingService.getAsyncCount(token, tableId)\n const query: Record<string, string | string[]> = {\n ...queryParams,\n pageSize: pageSize.toString(),\n }\n return services.reportingService.getAsyncReport(token, reportId, id, tableId, query)\n}\n\nconst downloadSyncData = async (args: {\n definition: components['schemas']['SingleVariantReportDefinition']\n services: Services\n token: string\n queryParams: {\n dataProductDefinitionsPath: string\n sortedAsc?: string\n sortColumn?: string\n }\n}) => {\n const { token, services, queryParams, definition } = args\n const { variant } = definition\n const { resourceName, specification } = variant\n let data: Dict<string>[] = []\n\n if (specification) {\n const countReportQuery = new ReportQuery({\n fields: specification.fields,\n template: specification.template as Template,\n queryParams,\n definitionsPath: <string>queryParams.dataProductDefinitionsPath,\n })\n const count = await services.reportingService.getCount(resourceName, token, countReportQuery)\n\n const dataReportQuery = new ReportQuery({\n fields: specification.fields,\n template: specification.template as Template,\n queryParams: {\n ...queryParams,\n pageSize: count.toString(),\n },\n definitionsPath: <string>queryParams.dataProductDefinitionsPath,\n })\n const reportData = await services.reportingService.getListWithWarnings(resourceName, token, dataReportQuery)\n data = reportData.data\n }\n\n return data\n}\n\nexport const downloadReport = async ({\n req,\n services,\n res,\n redirect,\n loadType,\n}: {\n req: Request\n services: Services\n res: Response\n redirect: string\n loadType?: LoadType\n}) => {\n const { dprUser, token } = LocalsHelper.getValues(res)\n const {\n reportId,\n id,\n tableId,\n dataProductDefinitionsPath,\n reportName,\n name,\n cols: columns,\n sortedAsc,\n sortColumn,\n } = req.body\n const { downloadPermissionService } = services\n const canDownload = downloadPermissionService\n ? await downloadPermissionService.downloadEnabled(dprUser.id, reportId, id)\n : false\n if (!canDownload) {\n res.redirect(redirect)\n } else {\n const definition = await services.reportingService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n const queryParams = {\n dataProductDefinitionsPath,\n ...(sortedAsc && { sortedAsc }),\n ...(sortColumn && { sortColumn }),\n }\n\n let reportData\n if (loadType === LoadType.SYNC) {\n reportData = await downloadSyncData({\n definition,\n services,\n token,\n queryParams,\n })\n } else {\n reportData = await dowloadAsyncData({\n services,\n token,\n reportId,\n id,\n tableId,\n queryParams,\n })\n }\n if (columns) {\n reportData = applyColumnsAndSort(reportData, JSON.parse(columns))\n }\n reportData = removeHtmlTags(reportData, definition)\n const fields = definition.variant.specification?.fields || []\n const keys: KeysList = getKeys(reportData, fields)\n const csvData = convertToCsv(reportData, { keys, emptyFieldValue: '' })\n\n res.setHeader('Content-Type', 'application/json')\n res.setHeader('Content-disposition', `attachment; filename=${reportName}-${name}-${new Date().toISOString()}.csv`)\n res.end(csvData)\n }\n}\n\nexport default {\n downloadReport,\n getKeys,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["utils_exports", "__export", "utils_default", "downloadReport", "getKeys", "__toCommonJS", "import_json_2_csv", "import_UserReports", "import_localsHelper", "import_ReportQuery", "convertToCsv", "reportData", "options", "fields", "keys", "keyNames", "row", "key", "field", "f", "applyColumnsAndSort", "data", "columns", "obj", "removeHtmlTags", "reportDefinition", "specification", "htmlFields", "d", "name", "colValue", "innerText", "dowloadAsyncData", "args", "token", "services", "tableId", "reportId", "id", "queryParams", "pageSize", "query", "downloadSyncData", "definition", "variant", "resourceName", "countReportQuery", "ReportQuery", "count", "dataReportQuery", "req", "res", "redirect", "loadType", "dprUser", "LocalsHelper", "dataProductDefinitionsPath", "reportName", "sortedAsc", "sortColumn", "downloadPermissionService", "csvData"]
7
7
  }