@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.28.8 → 4.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dpr/all.js +6 -8
  2. package/dpr/all.js.map +3 -3
  3. package/dpr/all.scss +296 -414
  4. package/dpr/all.ts +6 -11
  5. package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
  6. package/dpr/components/_charts/chart/clientClass.js +1 -0
  7. package/dpr/components/_charts/chart/clientClass.js.map +2 -2
  8. package/dpr/components/_charts/chart/clientClass.ts +1 -0
  9. package/dpr/components/_reports/{report-actions → report-heading/report-actions}/actionsTemplate.js.map +1 -1
  10. package/dpr/components/_reports/{report-actions → report-heading/report-actions}/clientClass.js +1 -1
  11. package/dpr/components/_reports/report-heading/report-actions/clientClass.js.map +7 -0
  12. package/dpr/components/_reports/{report-actions → report-heading/report-actions}/clientClass.ts +1 -1
  13. package/dpr/components/_reports/report-heading/report-actions/types.d.js.map +7 -0
  14. package/dpr/components/_reports/{report-actions → report-heading/report-actions}/types.d.ts +1 -1
  15. package/dpr/components/_reports/{report-actions → report-heading/report-actions}/utils.js.map +1 -1
  16. package/dpr/components/_reports/{report-actions → report-heading/report-actions}/utils.test.ts +2 -2
  17. package/dpr/components/_reports/{report-columns-form → report-heading/report-columns/report-columns-form}/clientClass.js +1 -3
  18. package/dpr/components/_reports/report-heading/report-columns/report-columns-form/clientClass.js.map +7 -0
  19. package/dpr/components/_reports/{report-columns-form → report-heading/report-columns/report-columns-form}/clientClass.ts +1 -3
  20. package/dpr/components/_reports/{report-columns-form → report-heading/report-columns/report-columns-form}/types.d.js.map +1 -1
  21. package/dpr/components/_reports/{report-columns-form → report-heading/report-columns/report-columns-form}/utils.js +1 -1
  22. package/dpr/components/_reports/report-heading/report-columns/report-columns-form/utils.js.map +7 -0
  23. package/dpr/components/_reports/{report-columns-form → report-heading/report-columns/report-columns-form}/utils.ts +2 -2
  24. package/dpr/components/_reports/{report-columns → report-heading/report-columns}/view.njk +1 -1
  25. package/dpr/components/_reports/{report-download-message → report-heading/report-download-message}/clientClass.js +1 -1
  26. package/dpr/components/_reports/report-heading/report-download-message/clientClass.js.map +7 -0
  27. package/dpr/components/_reports/{report-download-message → report-heading/report-download-message}/clientClass.ts +1 -1
  28. package/dpr/components/_reports/{report-filters → report-heading/report-filters}/view.njk +1 -1
  29. package/dpr/components/_reports/report-heading/view.njk +4 -4
  30. package/dpr/components/_reports/report-page/report-print-message/view.njk +10 -0
  31. package/dpr/components/_reports/report-page/report-template/report-no-data-message/styles.scss +8 -0
  32. package/dpr/components/_reports/report-page/report-template/report-no-data-message/view.njk +11 -0
  33. package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/clientClass.js +1 -1
  34. package/dpr/components/_reports/report-page/report-template/report-pagination/clientClass.js.map +7 -0
  35. package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/clientClass.ts +1 -1
  36. package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/types.d.js.map +1 -1
  37. package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/utils.js.map +1 -1
  38. package/dpr/components/_reports/report-page/report-template/report-section/parent-child-template/styles.scss +88 -0
  39. package/dpr/components/_reports/report-page/report-template/report-section/parent-child-template/view.njk +29 -0
  40. package/dpr/components/_reports/{report-data-table → report-page/report-template/report-section/report-data-table}/clientClass.js +17 -10
  41. package/dpr/components/_reports/report-page/report-template/report-section/report-data-table/clientClass.js.map +7 -0
  42. package/dpr/components/_reports/{report-data-table → report-page/report-template/report-section/report-data-table}/clientClass.ts +20 -10
  43. package/dpr/components/_reports/{report-data-table → report-page/report-template/report-section/report-data-table}/style.scss +35 -185
  44. package/dpr/components/_reports/report-page/report-template/report-section/report-data-table/types.d.js.map +7 -0
  45. package/dpr/components/_reports/{report-data-table → report-page/report-template/report-section/report-data-table}/types.d.ts +2 -2
  46. package/dpr/components/_reports/report-page/report-template/report-section/report-data-table/view.njk +27 -0
  47. package/dpr/components/_reports/report-page/report-template/report-section/styles.scss +33 -0
  48. package/dpr/components/_reports/report-page/report-template/report-section/view.njk +58 -0
  49. package/dpr/components/_reports/{report-summary-table → report-page/report-template/report-summary-table}/styles.scss +21 -4
  50. package/dpr/components/_reports/{report-totals → report-page/report-template/report-totals}/utils.js.map +1 -1
  51. package/dpr/components/_reports/report-page/report-template/styles.scss +5 -0
  52. package/dpr/components/_reports/report-page/report-template/template-config.js +66 -0
  53. package/dpr/components/_reports/report-page/report-template/template-config.js.map +7 -0
  54. package/dpr/components/_reports/report-page/report-template/template-config.ts +45 -0
  55. package/dpr/components/_reports/report-page/report-template/utils.js +82 -0
  56. package/dpr/components/_reports/report-page/report-template/utils.js.map +7 -0
  57. package/dpr/components/_reports/report-page/report-template/utils.ts +100 -0
  58. package/dpr/components/_reports/report-page/report-template/view.njk +61 -0
  59. package/dpr/components/_reports/{report-wrapper → report-page}/styles.scss +7 -5
  60. package/dpr/components/_reports/report-page/view.njk +26 -0
  61. package/dpr/components/card-group/view.njk +0 -4
  62. package/dpr/components/report-list/utils.js +11 -3
  63. package/dpr/components/report-list/utils.js.map +2 -2
  64. package/dpr/components/report-list/utils.ts +11 -1
  65. package/dpr/components/report-list/view.njk +2 -2
  66. package/dpr/components/show-more/style.scss +3 -4
  67. package/dpr/data/reportingClient.js.map +2 -2
  68. package/dpr/data/reportingClient.ts +4 -4
  69. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  70. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +1 -1
  71. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +1 -1
  72. package/dpr/routes/journeys/view-report/async/report/controller.js.map +2 -2
  73. package/dpr/routes/journeys/view-report/async/report/controller.ts +0 -1
  74. package/dpr/routes/journeys/view-report/async/report/report-variants.cy.js +207 -56
  75. package/dpr/routes/journeys/view-report/async/report/report-variants.cy.js.map +2 -2
  76. package/dpr/routes/journeys/view-report/async/report/report-variants.cy.ts +333 -64
  77. package/dpr/routes/journeys/view-report/async/report/utils.js +9 -17
  78. package/dpr/routes/journeys/view-report/async/report/utils.js.map +3 -3
  79. package/dpr/routes/journeys/view-report/async/report/utils.ts +12 -22
  80. package/dpr/routes/journeys/view-report/report.njk +2 -2
  81. package/dpr/routes/journeys/view-report/sync/dashboard/utils.js +1 -1
  82. package/dpr/routes/journeys/view-report/sync/dashboard/utils.js.map +1 -1
  83. package/dpr/routes/journeys/view-report/sync/dashboard/utils.ts +1 -1
  84. package/dpr/routes/journeys/view-report/sync/report/utils.js +38 -11
  85. package/dpr/routes/journeys/view-report/sync/report/utils.js.map +3 -3
  86. package/dpr/routes/journeys/view-report/sync/report/utils.ts +39 -14
  87. package/dpr/routes/journeys/view-report/utils.js +1 -1
  88. package/dpr/routes/journeys/view-report/utils.js.map +1 -1
  89. package/dpr/routes/journeys/view-report/utils.ts +1 -1
  90. package/dpr/services/reportingService.js.map +2 -2
  91. package/dpr/services/reportingService.ts +2 -2
  92. package/dpr/types/ReportQuery.js +1 -1
  93. package/dpr/types/ReportQuery.js.map +1 -1
  94. package/dpr/types/ReportQuery.ts +1 -1
  95. package/dpr/types/UserReports.js.map +1 -1
  96. package/dpr/types/UserReports.ts +3 -3
  97. package/dpr/utils/TemplateBuilder/ParentChildDataBuilder/ParentChildDataBuilder.js +193 -0
  98. package/dpr/utils/TemplateBuilder/ParentChildDataBuilder/ParentChildDataBuilder.js.map +7 -0
  99. package/dpr/utils/TemplateBuilder/ParentChildDataBuilder/ParentChildDataBuilder.ts +203 -0
  100. package/dpr/utils/TemplateBuilder/ParentChildDataBuilder/types.d.js.map +7 -0
  101. package/dpr/utils/TemplateBuilder/ParentChildDataBuilder/types.d.ts +36 -0
  102. package/dpr/utils/TemplateBuilder/ReportBuilder/ReportBuilder.js +114 -0
  103. package/dpr/utils/TemplateBuilder/ReportBuilder/ReportBuilder.js.map +7 -0
  104. package/dpr/utils/TemplateBuilder/ReportBuilder/ReportBuilder.ts +117 -0
  105. package/dpr/utils/TemplateBuilder/ReportBuilder/types.d.js.map +7 -0
  106. package/dpr/utils/TemplateBuilder/ReportBuilder/types.d.ts +6 -0
  107. package/dpr/utils/TemplateBuilder/SectionedDataHelper/SectionedDataHelper.js +202 -0
  108. package/dpr/utils/TemplateBuilder/SectionedDataHelper/SectionedDataHelper.js.map +7 -0
  109. package/dpr/utils/TemplateBuilder/SectionedDataHelper/SectionedDataHelper.ts +246 -0
  110. package/dpr/utils/TemplateBuilder/SectionedDataHelper/types.js +17 -0
  111. package/dpr/utils/TemplateBuilder/SectionedDataHelper/types.js.map +7 -0
  112. package/dpr/utils/TemplateBuilder/SectionedDataHelper/types.ts +41 -0
  113. package/dpr/utils/{CollatedSummaryBuilder/CollatedSummaryBuilder.js → TemplateBuilder/SummaryDataHelper/SummaryDataHelper.js} +6 -8
  114. package/dpr/utils/TemplateBuilder/SummaryDataHelper/SummaryDataHelper.js.map +7 -0
  115. package/dpr/utils/{CollatedSummaryBuilder/CollatedSummaryBuilder.test.ts → TemplateBuilder/SummaryDataHelper/SummaryDataHelper.test.ts} +4 -4
  116. package/dpr/utils/{CollatedSummaryBuilder/CollatedSummaryBuilder.ts → TemplateBuilder/SummaryDataHelper/SummaryDataHelper.ts} +6 -9
  117. package/dpr/utils/TemplateBuilder/TemplateBuilder.js +74 -0
  118. package/dpr/utils/TemplateBuilder/TemplateBuilder.js.map +7 -0
  119. package/dpr/utils/TemplateBuilder/TemplateBuilder.ts +68 -0
  120. package/dpr/utils/definitionUtils.js +22 -2
  121. package/dpr/utils/definitionUtils.js.map +2 -2
  122. package/dpr/utils/definitionUtils.ts +26 -1
  123. package/package.json +1 -1
  124. package/dpr/DprLoadingHelper.js +0 -51
  125. package/dpr/DprLoadingHelper.js.map +0 -7
  126. package/dpr/DprLoadingHelper.ts +0 -27
  127. package/dpr/components/_reports/report/view.njk +0 -40
  128. package/dpr/components/_reports/report-actions/clientClass.js.map +0 -7
  129. package/dpr/components/_reports/report-actions/types.d.js.map +0 -7
  130. package/dpr/components/_reports/report-columns-form/clientClass.js.map +0 -7
  131. package/dpr/components/_reports/report-columns-form/utils.js.map +0 -7
  132. package/dpr/components/_reports/report-data-table/clientClass.js.map +0 -7
  133. package/dpr/components/_reports/report-data-table/types.d.js.map +0 -7
  134. package/dpr/components/_reports/report-data-table/utils.js +0 -123
  135. package/dpr/components/_reports/report-data-table/utils.js.map +0 -7
  136. package/dpr/components/_reports/report-data-table/utils.test.ts +0 -604
  137. package/dpr/components/_reports/report-data-table/utils.ts +0 -150
  138. package/dpr/components/_reports/report-data-table/view.njk +0 -24
  139. package/dpr/components/_reports/report-data-table-wrapper/view.njk +0 -27
  140. package/dpr/components/_reports/report-download-message/clientClass.js.map +0 -7
  141. package/dpr/components/_reports/report-no-data-message/styles.scss +0 -4
  142. package/dpr/components/_reports/report-no-data-message/view.njk +0 -13
  143. package/dpr/components/_reports/report-pagination/clientClass.js.map +0 -7
  144. package/dpr/components/_reports/report-print-message/view.njk +0 -8
  145. package/dpr/components/_reports/report-template/view.njk +0 -44
  146. package/dpr/components/_reports/report-wrapper/view.njk +0 -19
  147. package/dpr/components/loading-anim/styles.scss +0 -117
  148. package/dpr/components/loading-anim/view.njk +0 -18
  149. package/dpr/utils/CollatedSummaryBuilder/CollatedSummaryBuilder.js.map +0 -7
  150. package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.js +0 -202
  151. package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.js.map +0 -7
  152. package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.test.ts +0 -503
  153. package/dpr/utils/ParentChildDataTableBuilder/ParentChildDataTableBuilder.ts +0 -224
  154. package/dpr/utils/ParentChildDataTableBuilder/types.d.js.map +0 -7
  155. package/dpr/utils/ParentChildDataTableBuilder/types.d.ts +0 -11
  156. package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.js +0 -311
  157. package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.js.map +0 -7
  158. package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.test.ts +0 -492
  159. package/dpr/utils/SectionedDataTableBuilder/SectionedDataTableBuilder.ts +0 -342
  160. package/dpr/utils/SectionedDataTableBuilder/types.d.js.map +0 -7
  161. package/dpr/utils/SectionedDataTableBuilder/types.d.ts +0 -5
  162. package/dpr/utils/SectionedFieldsTableBuilder/SectionedFieldsTableBuilder.js +0 -146
  163. package/dpr/utils/SectionedFieldsTableBuilder/SectionedFieldsTableBuilder.js.map +0 -7
  164. package/dpr/utils/SectionedFieldsTableBuilder/SectionedFieldsTableBuilder.test.ts +0 -140
  165. package/dpr/utils/SectionedFieldsTableBuilder/SectionedFieldsTableBuilder.ts +0 -150
  166. /package/dpr/components/_reports/{report-actions → report-heading/report-actions}/actionsTemplate.js +0 -0
  167. /package/dpr/components/_reports/{report-actions → report-heading/report-actions}/actionsTemplate.ts +0 -0
  168. /package/dpr/components/_reports/{report-actions → report-heading/report-actions}/style.scss +0 -0
  169. /package/dpr/components/_reports/{report-actions → report-heading/report-actions}/types.d.js +0 -0
  170. /package/dpr/components/_reports/{report-actions → report-heading/report-actions}/utils.js +0 -0
  171. /package/dpr/components/_reports/{report-actions → report-heading/report-actions}/utils.ts +0 -0
  172. /package/dpr/components/_reports/{report-actions → report-heading/report-actions}/view.njk +0 -0
  173. /package/dpr/components/_reports/{report-columns-form → report-heading/report-columns/report-columns-form}/style.scss +0 -0
  174. /package/dpr/components/_reports/{report-columns-form → report-heading/report-columns/report-columns-form}/types.d.js +0 -0
  175. /package/dpr/components/_reports/{report-columns-form → report-heading/report-columns/report-columns-form}/types.d.ts +0 -0
  176. /package/dpr/components/_reports/{report-columns-form → report-heading/report-columns/report-columns-form}/view.njk +0 -0
  177. /package/dpr/components/_reports/{report-columns → report-heading/report-columns}/styles.scss +0 -0
  178. /package/dpr/components/_reports/{report-download-message → report-heading/report-download-message}/style.scss +0 -0
  179. /package/dpr/components/_reports/{report-download-message → report-heading/report-download-message}/view.njk +0 -0
  180. /package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/style.scss +0 -0
  181. /package/dpr/components/_reports/{report-data-table → report-page/report-template/report-pagination}/types.d.js +0 -0
  182. /package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/types.d.ts +0 -0
  183. /package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/utils.js +0 -0
  184. /package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/utils.test.ts +0 -0
  185. /package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/utils.ts +0 -0
  186. /package/dpr/components/_reports/{report-pagination → report-page/report-template/report-pagination}/view.njk +0 -0
  187. /package/dpr/components/_reports/{report-pagination → report-page/report-template/report-section/report-data-table}/types.d.js +0 -0
  188. /package/dpr/components/_reports/{report-summary-table → report-page/report-template/report-summary-table}/view.njk +0 -0
  189. /package/dpr/components/_reports/{report-totals → report-page/report-template/report-totals}/style.scss +0 -0
  190. /package/dpr/components/_reports/{report-totals → report-page/report-template/report-totals}/utils.js +0 -0
  191. /package/dpr/components/_reports/{report-totals → report-page/report-template/report-totals}/utils.ts +0 -0
  192. /package/dpr/components/_reports/{report-totals → report-page/report-template/report-totals}/view.njk +0 -0
  193. /package/dpr/utils/{ParentChildDataTableBuilder → TemplateBuilder/ParentChildDataBuilder}/types.d.js +0 -0
  194. /package/dpr/utils/{SectionedDataTableBuilder → TemplateBuilder/ReportBuilder}/types.d.js +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../dpr/routes/journeys/view-report/async/report/utils.ts"],
4
- "sourcesContent": ["import parseUrl from 'parseurl'\nimport { Url } from 'url'\nimport { Request, Response } from 'express'\n\n// Types\nimport type { Columns } from '../../../../../components/_reports/report-columns-form/types'\nimport type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'\nimport type { DataTable } from '../../../../../utils/DataTableBuilder/types'\nimport type { components } from '../../../../../types/api'\nimport type { AsyncSummary, RequestedReport } from '../../../../../types/UserReports'\nimport { LoadType, ReportType } from '../../../../../types/UserReports'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport type { ChildData } from '../../../../../utils/ParentChildDataTableBuilder/types'\nimport type { ExtractedDefinitionData, ExtractedRequestData, ReportUrls } from './types'\nimport type { DownloadActionParams } from '../../../../../components/_reports/report-actions/types'\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\nimport type { Services } from '../../../../../types/Services'\n\n// Utils\nimport definitionUtils from '../../../../../utils/definitionUtils'\nimport PaginationUtils from '../../../../../components/_reports/report-pagination/utils'\nimport TotalsUtils from '../../../../../components/_reports/report-totals/utils'\nimport ReportFiltersUtils from '../../../../../components/_filters/utils'\nimport ColumnUtils from '../../../../../components/_reports/report-columns-form/utils'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\nimport UserReportsUtils from '../../../../../components/user-reports/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport DataTableUtils from '../../../../../components/_reports/report-data-table/utils'\nimport RequestedReportService from '../../../my-reports/requested-reports/service'\n\nimport CollatedSummaryBuilder from '../../../../../utils/CollatedSummaryBuilder/CollatedSummaryBuilder'\n\nexport const getData = async ({\n res,\n req,\n services,\n token,\n userId,\n}: AsyncReportUtilsParams & { token: string; userId: string }) => {\n const { definitionsPath: definitionPath } = LocalsHelper.getValues(res)\n const { reportId, variantId, id, tableId } = req.params\n const reportVariantId = variantId || id\n\n // Get the request data\n const requestedReportService = <RequestedReportService>services.requestedReportService\n const requestData: RequestedReport | undefined = await requestedReportService.getReportByTableId(tableId, userId)\n const queryData = requestData?.query?.data\n\n // Get the definition\n const definition: components['schemas']['SingleVariantReportDefinition'] =\n await services.reportingService.getDefinition(token, reportId, reportVariantId, definitionPath, queryData)\n const { variant } = definition\n const { specification } = variant\n\n if (!specification) {\n throw new Error('No specification found in variant definition')\n }\n\n // Get the columns\n const columns = ColumnUtils.getColumns(specification, req)\n\n // initialise report query\n const reportQuery = await initReportQuery(definition, columns, res, req, services, requestData)\n\n // Get the reportData\n const reportData = await getReportData({ definition, services, token, req, res, reportQuery })\n\n // Get the summary data, if applicable\n const { summaries } = definition.variant\n const summariesData = !summaries ? [] : await getSummariesData(summaries, services, token, req, res)\n\n // Get the child data, if applicable\n const { childVariants } = definition.variant\n const childData: ChildData[] = !childVariants\n ? []\n : await getChildData(childVariants, services, token, req, res, requestData)\n\n return {\n definition,\n requestData,\n reportData,\n summariesData,\n childData,\n reportQuery,\n columns,\n }\n}\n\nconst initReportQuery = async (\n definition: components['schemas']['SingleVariantReportDefinition'],\n columns: Columns,\n res: Response,\n req: Request,\n services: Services,\n requestData?: RequestedReport,\n) => {\n const { definitionsPath } = LocalsHelper.getValues(res)\n const fields = definitionUtils.getFields(definition)\n const template = definitionUtils.getTemplate(definition)\n\n const filtersData = await ReportFiltersUtils.getFilters({\n fields,\n req,\n filtersType: FiltersType.INTERACTIVE,\n res,\n services,\n })\n\n // Sort\n const sortColumn = req.query?.['sortColumn'] || requestData?.sortBy?.data?.['sortColumn']\n const sortedAsc = req.query?.['sortedAsc'] || requestData?.sortBy?.data?.['sortedAsc']\n\n // Pagination\n const selectedPage = req.query?.['selectedPage']\n const pageSize = req.query?.['pageSize']\n\n // Filters\n const filtersQuery = ReportFiltersUtils.setRequestQueryFromFilterValues(filtersData.filters)\n\n const queryParams = {\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...filtersQuery,\n ...(pageSize && { pageSize }),\n ...(selectedPage && { selectedPage }),\n ...(columns && { columns: columns.value }),\n }\n\n return new ReportQuery({\n fields,\n template,\n queryParams,\n definitionsPath,\n })\n}\n\nconst getReportData = async (args: {\n definition: components['schemas']['SingleVariantReportDefinition']\n services: Services\n token: string\n req: Request\n res: Response\n reportQuery: ReportQuery\n}) => {\n const { services, token, req, reportQuery } = args\n const { reportId, variantId, id, tableId } = req.params\n const reportVariantId = variantId || id\n\n return services.reportingService.getAsyncReport(\n token,\n reportId,\n reportVariantId,\n tableId,\n reportQuery.toRecordWithFilterPrefix(true),\n )\n}\n\nexport const getSummariesData = async (\n summaries: components['schemas']['ReportSummary'][],\n services: Services,\n token: string,\n req: Request,\n res: Response,\n): Promise<AsyncSummary[]> => {\n const { reportId, variantId, id, tableId } = req.params\n const { definitionsPath: dataProductDefinitionsPath } = LocalsHelper.getValues(res)\n const reportVariantId = variantId || id\n\n return Promise.all(\n summaries.map(async (summary) => {\n const summaryReport = await services.reportingService.getAsyncSummaryReport(\n token,\n reportId,\n reportVariantId,\n tableId,\n summary.id,\n {\n dataProductDefinitionsPath,\n },\n )\n\n return {\n ...summary,\n data: summaryReport,\n }\n }),\n )\n}\n\nexport const getChildData = async (\n childVariants: components['schemas']['ChildVariantDefinition'][],\n services: Services,\n token: string,\n req: Request,\n res: Response,\n requestData?: RequestedReport,\n): Promise<ChildData[]> => {\n const { definitionsPath: dataProductDefinitionsPath } = LocalsHelper.getValues(res)\n const { reportId } = req.params\n const childExecutionData = requestData?.childExecutionData\n if (!childExecutionData) {\n throw new Error('getChildData: No execution data found for child variants')\n }\n return Promise.all(\n childVariants.map(async (childVariant) => {\n const { specification } = childVariant\n if (!specification) {\n throw new Error('getChildData: No specification found in child variant definition')\n }\n\n const query = new ReportQuery({\n fields: specification?.fields || [],\n template: 'parent-child',\n queryParams: req.query,\n definitionsPath: dataProductDefinitionsPath,\n }).toRecordWithFilterPrefix(true)\n\n const childData = childExecutionData.find((e) => e.variantId === childVariant.id)\n if (!childData || !childData.tableId) {\n throw new Error('getChildData: No matching child execution data found')\n }\n const { tableId: childTableId } = childData\n\n const childReport = await services.reportingService.getAsyncReport(\n token,\n reportId,\n childVariant.id,\n childTableId,\n query,\n )\n\n return {\n id: childVariant.id,\n data: childReport,\n }\n }),\n )\n}\n\n/**\n * Entry point function to render the report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const renderReport = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token, dprUser } = LocalsHelper.getValues(res)\n\n // Get the report data\n const { definition, requestData, reportData, childData, summariesData, reportQuery, columns } = await getData({\n req,\n res,\n services,\n token,\n userId: dprUser.id,\n })\n\n // Get the data table\n const dataTable: DataTable[] = DataTableUtils.createDataTable(\n definition,\n columns,\n reportData,\n childData,\n summariesData,\n reportQuery,\n )\n\n // Get the template data\n const templateData = await getTemplateData(\n req,\n res,\n services,\n definition,\n summariesData,\n dataTable,\n columns,\n reportQuery,\n requestData,\n )\n\n const renderData = {\n ...templateData,\n dataTable,\n }\n\n if (requestData && Object.keys(requestData).length) {\n UserReportsUtils.updateLastViewed({\n req,\n services,\n reportStateData: requestData,\n userId: dprUser.id,\n filters: templateData.filterData.filters,\n })\n }\n\n return { renderData }\n}\n\nconst getTemplateData = async (\n req: Request,\n res: Response,\n services: Services,\n definition: components['schemas']['SingleVariantReportDefinition'],\n summariesData: AsyncSummary[],\n dataTable: DataTable[],\n columns: Columns,\n reportQuery: ReportQuery,\n requestData?: RequestedReport,\n) => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n // get url data\n const url = parseUrl(req)\n if (!url) {\n throw new Error('Unable to set url data from request')\n }\n\n const urls = url ? setUrls(url, req) : undefined\n\n // get from definition\n const definitionData = extractDataFromDefinition(definition)\n const { fields, specification } = definitionData\n\n // get from requestedData\n const requestedData = requestData ? extractDataFromRequest(requestData) : undefined\n\n // Get the count\n const count = await getCount(definition, services, res, req, reportQuery)\n\n // Get the filters\n const filterData = await ReportFiltersUtils.getFilters({\n fields,\n req,\n res,\n services,\n filtersType: FiltersType.INTERACTIVE,\n })\n\n // Set the features\n const features = await setFeatures(services, res, req, columns, definitionData, requestedData, urls)\n\n // Set the extra meta data\n const meta = setMetaData(res, req)\n\n let reportSummaries\n if (summariesData.length) {\n const collatedSummaryBuilder = new CollatedSummaryBuilder(specification, summariesData)\n reportSummaries = collatedSummaryBuilder.collatePageSummaries()\n }\n\n let pagination\n let totals\n if (definitionData.template === 'list') {\n pagination = PaginationUtils.getPaginationData(url, count, req)\n const { pageSize, currentPage, totalRows } = pagination\n totals = TotalsUtils.getTotals(pageSize, currentPage, totalRows, dataTable[0].rowCount)\n }\n\n return {\n ...(showColumns(specification) && { columns }),\n filterData,\n count,\n nestedBaseUrl,\n ...meta,\n ...features,\n ...definitionData,\n ...requestedData,\n ...urls,\n ...(pagination && { pagination }),\n ...(totals && { totals }),\n ...(reportSummaries && { reportSummaries }),\n }\n}\n\nconst showColumns = (specification: components['schemas']['Specification']) => {\n const { template } = specification\n\n return !['row-section', 'row-section-child', 'summary', 'summary-section'].includes(template)\n}\n\nconst setMetaData = (res: Response, req: Request) => {\n const { csrfToken } = LocalsHelper.getValues(res)\n const { tableId, reportId, id } = req.params\n\n return {\n csrfToken,\n loadType: LoadType.ASYNC,\n type: ReportType.REPORT,\n tableId,\n reportId,\n id,\n }\n}\n\nconst setUrls = (url: Url, req: Request): ReportUrls => {\n const { search } = url\n const encodedSearch = search ? encodeURIComponent(search) : undefined\n const pathname = search ? req.originalUrl.split(search)[0] : req.originalUrl\n const reportUrl = pathname.replace('/download-disabled', '').replace('/download-disabled?', '')\n\n return {\n reportUrl,\n reportSearch: search || undefined,\n encodedSearch,\n pathname,\n }\n}\n\nconst setFeatures = async (\n services: Services,\n res: Response,\n req: Request,\n columns: Columns,\n definitionData: ExtractedDefinitionData,\n requestData?: ExtractedRequestData,\n urls?: ReportUrls,\n) => {\n const { csrfToken, dprUser, bookmarkingEnabled, downloadingEnabled } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const { downloadPermissionService, bookmarkService } = services\n\n let canDownload = false\n if (downloadingEnabled) {\n canDownload = await downloadPermissionService.downloadEnabledForReport(dprUser.id, reportId, id)\n }\n\n let bookmarked\n if (bookmarkingEnabled) {\n bookmarked = await bookmarkService.isBookmarked(id, reportId, dprUser.id)\n }\n\n const actions = setActions(csrfToken, columns, canDownload, res, req, definitionData, requestData, urls)\n\n return {\n actions,\n canDownload,\n bookmarked,\n }\n}\n\nconst getCount = async (\n definition: components['schemas']['SingleVariantReportDefinition'],\n services: Services,\n res: Response,\n req: Request,\n reportQuery: ReportQuery,\n) => {\n const { token } = LocalsHelper.getValues(res)\n const { tableId, reportId, id } = req.params\n\n return !definition.variant.interactive\n ? services.reportingService.getAsyncCount(token, tableId)\n : services.reportingService.getAsyncInteractiveCount(token, tableId, reportId, id, reportQuery)\n}\n\nconst extractDataFromDefinition = (\n definition: components['schemas']['SingleVariantReportDefinition'],\n): ExtractedDefinitionData => {\n const { variant, name: reportName, description: reportDescription } = definition\n const { classification, printable, specification, name, description } = variant\n if (!specification) {\n throw new Error('No specification found in variant definition')\n }\n const { template, fields } = specification\n\n return {\n reportName,\n name,\n description: description || reportDescription,\n classification,\n printable: Boolean(printable),\n specification,\n template,\n fields,\n }\n}\n\nconst extractDataFromRequest = (requestData: RequestedReport): ExtractedRequestData => {\n const { query, url, timestamp } = requestData\n\n return {\n executionId: requestData.executionId,\n requestedTimestamp: timestamp.requested ? new Date(timestamp.requested).toLocaleString() : undefined,\n querySummary: query?.summary || [],\n queryData: query?.data,\n requestUrl: url?.request,\n defaultQuery: url?.report?.default,\n dataProductDefinitionsPath: requestData.dataProductDefinitionsPath,\n }\n}\n\nconst setActions = (\n csrfToken: string,\n columns: Columns,\n canDownload: boolean,\n res: Response,\n req: Request,\n definitionData: ExtractedDefinitionData,\n requestData?: ExtractedRequestData,\n urls?: ReportUrls,\n) => {\n const { reportName, name, printable } = definitionData\n const { tableId, id, reportId } = req.params\n const { nestedBaseUrl, definitionsPath, downloadingEnabled } = LocalsHelper.getValues(res)\n\n // DownloadActionParams\n let downloadConfig: DownloadActionParams | undefined\n if (urls && downloadingEnabled) {\n downloadConfig = {\n enabled: downloadingEnabled,\n name,\n reportName,\n csrfToken,\n reportId,\n id,\n tableId,\n columns: columns.value,\n definitionPath: definitionsPath,\n loadType: LoadType.ASYNC,\n nestedBaseUrl,\n canDownload,\n currentUrl: urls.pathname,\n currentQueryParams: urls.reportSearch,\n ...(requestData?.queryData && {\n sortColumn: <string>requestData.queryData['sortColumn'],\n sortedAsc: <string>requestData.queryData['sortedAsc'],\n }),\n }\n }\n\n let shareConfig\n let copyConfig\n if (requestData?.requestUrl?.fullUrl) {\n shareConfig = {\n reportName,\n name,\n url: requestData.requestUrl.fullUrl,\n }\n copyConfig = {\n url: requestData.requestUrl.fullUrl,\n }\n }\n\n let refreshConfig\n if (requestData?.executionId && requestData?.requestUrl?.fullUrl) {\n refreshConfig = {\n url: requestData.requestUrl.fullUrl,\n executionId: requestData.executionId,\n }\n }\n\n return ReportActionsUtils.getActions({\n ...(downloadConfig && { download: downloadConfig }),\n ...(shareConfig && { share: shareConfig }),\n ...(refreshConfig && { refresh: refreshConfig }),\n ...(copyConfig && { copy: copyConfig }),\n print: { enabled: printable },\n })\n}\n\nexport default {\n renderReport,\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_utils", "LocalsHelper", "ColumnUtils", "definitionUtils", "ReportFiltersUtils", "ReportQuery", "DataTableUtils", "UserReportsUtils", "parseUrl", "CollatedSummaryBuilder", "PaginationUtils", "TotalsUtils", "ReportActionsUtils"]
4
+ "sourcesContent": ["import parseUrl from 'parseurl'\nimport { Url } from 'url'\nimport { Request, Response } from 'express'\n\n// Types\nimport { ReportTemplateData } from '../../../../../utils/TemplateBuilder/SectionedDataHelper/types'\nimport { ChildData } from '../../../../../utils/TemplateBuilder/ParentChildDataBuilder/types'\nimport type { Columns } from '../../../../../components/_reports/report-heading/report-columns/report-columns-form/types'\nimport type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'\nimport type { DataTable } from '../../../../../utils/DataTableBuilder/types'\nimport type { components } from '../../../../../types/api'\nimport type { AsyncSummary, RequestedReport } from '../../../../../types/UserReports'\nimport { LoadType, ReportType } from '../../../../../types/UserReports'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport type { ExtractedDefinitionData, ExtractedRequestData, ReportUrls } from './types'\nimport type { DownloadActionParams } from '../../../../../components/_reports/report-heading/report-actions/types'\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\nimport type { Services } from '../../../../../types/Services'\n\n// Utils\nimport definitionUtils from '../../../../../utils/definitionUtils'\nimport PaginationUtils from '../../../../../components/_reports/report-page/report-template/report-pagination/utils'\nimport TotalsUtils from '../../../../../components/_reports/report-page/report-template/report-totals/utils'\nimport ReportFiltersUtils from '../../../../../components/_filters/utils'\nimport ColumnUtils from '../../../../../components/_reports/report-heading/report-columns/report-columns-form/utils'\nimport ReportActionsUtils from '../../../../../components/_reports/report-heading/report-actions/utils'\nimport UserReportsUtils from '../../../../../components/user-reports/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport ReportTemplateUtils from '../../../../../components/_reports/report-page/report-template/utils'\nimport RequestedReportService from '../../../my-reports/requested-reports/service'\n\nexport const getData = async ({\n res,\n req,\n services,\n token,\n userId,\n}: AsyncReportUtilsParams & { token: string; userId: string }) => {\n const { definitionsPath: definitionPath } = LocalsHelper.getValues(res)\n const { reportId, variantId, id, tableId } = req.params\n const reportVariantId = variantId || id\n\n // Get the request data\n const requestedReportService = <RequestedReportService>services.requestedReportService\n const requestData: RequestedReport | undefined = await requestedReportService.getReportByTableId(tableId, userId)\n const queryData = requestData?.query?.data\n\n // Get the definition\n const definition: components['schemas']['SingleVariantReportDefinition'] =\n await services.reportingService.getDefinition(token, reportId, reportVariantId, definitionPath, queryData)\n const { variant } = definition\n const { specification } = variant\n\n if (!specification) {\n throw new Error('No specification found in variant definition')\n }\n\n // Get the columns\n const columns = ColumnUtils.getColumns(specification, req)\n\n // initialise report query\n const reportQuery = await initReportQuery(definition, columns, res, req, services, requestData)\n\n // Get the reportData\n const reportData = await getReportData({ definition, services, token, req, res, reportQuery })\n\n // Get the summary data, if applicable\n const { summaries } = definition.variant\n const summariesData = !summaries ? [] : await getSummariesData(summaries, services, token, req, res)\n\n // Get the child data, if applicable\n const { childVariants } = definition.variant\n const childData: ChildData[] = !childVariants\n ? []\n : await getChildData(childVariants, services, token, req, res, requestData)\n\n return {\n definition,\n requestData,\n reportData,\n summariesData,\n childData,\n reportQuery,\n columns,\n }\n}\n\nconst initReportQuery = async (\n definition: components['schemas']['SingleVariantReportDefinition'],\n columns: Columns,\n res: Response,\n req: Request,\n services: Services,\n requestData?: RequestedReport,\n) => {\n const { definitionsPath } = LocalsHelper.getValues(res)\n const fields = definitionUtils.getFields(definition)\n const template = definitionUtils.getTemplate(definition)\n\n const filtersData = await ReportFiltersUtils.getFilters({\n fields,\n req,\n filtersType: FiltersType.INTERACTIVE,\n res,\n services,\n })\n\n // Sort\n const sortColumn = req.query?.['sortColumn'] || requestData?.sortBy?.data?.['sortColumn']\n const sortedAsc = req.query?.['sortedAsc'] || requestData?.sortBy?.data?.['sortedAsc']\n\n // Pagination\n const selectedPage = req.query?.['selectedPage']\n const pageSize = req.query?.['pageSize']\n\n // Filters\n const filtersQuery = ReportFiltersUtils.setRequestQueryFromFilterValues(filtersData.filters)\n\n const queryParams = {\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...filtersQuery,\n ...(pageSize && { pageSize }),\n ...(selectedPage && { selectedPage }),\n ...(columns && { columns: columns.value }),\n }\n\n return new ReportQuery({\n fields,\n template,\n queryParams,\n definitionsPath,\n })\n}\n\nconst getReportData = async (args: {\n definition: components['schemas']['SingleVariantReportDefinition']\n services: Services\n token: string\n req: Request\n res: Response\n reportQuery: ReportQuery\n}) => {\n const { services, token, req, reportQuery } = args\n const { reportId, variantId, id, tableId } = req.params\n const reportVariantId = variantId || id\n\n return services.reportingService.getAsyncReport(\n token,\n reportId,\n reportVariantId,\n tableId,\n reportQuery.toRecordWithFilterPrefix(true),\n )\n}\n\nexport const getSummariesData = async (\n summaries: components['schemas']['ReportSummary'][],\n services: Services,\n token: string,\n req: Request,\n res: Response,\n): Promise<AsyncSummary[]> => {\n const { reportId, variantId, id, tableId } = req.params\n const { definitionsPath: dataProductDefinitionsPath } = LocalsHelper.getValues(res)\n const reportVariantId = variantId || id\n\n return Promise.all(\n summaries.map(async (summary) => {\n const summaryReport = await services.reportingService.getAsyncSummaryReport(\n token,\n reportId,\n reportVariantId,\n tableId,\n summary.id,\n {\n dataProductDefinitionsPath,\n },\n )\n\n return {\n ...summary,\n data: summaryReport,\n }\n }),\n )\n}\n\nexport const getChildData = async (\n childVariants: components['schemas']['ChildVariantDefinition'][],\n services: Services,\n token: string,\n req: Request,\n res: Response,\n requestData?: RequestedReport,\n): Promise<ChildData[]> => {\n const { definitionsPath: dataProductDefinitionsPath } = LocalsHelper.getValues(res)\n const { reportId } = req.params\n const childExecutionData = requestData?.childExecutionData\n if (!childExecutionData) {\n throw new Error('getChildData: No execution data found for child variants')\n }\n return Promise.all(\n childVariants.map(async (childVariant) => {\n const { specification } = childVariant\n if (!specification) {\n throw new Error('getChildData: No specification found in child variant definition')\n }\n\n const query = new ReportQuery({\n fields: specification?.fields || [],\n template: 'parent-child',\n queryParams: req.query,\n definitionsPath: dataProductDefinitionsPath,\n }).toRecordWithFilterPrefix(true)\n\n const childData = childExecutionData.find((e) => e.variantId === childVariant.id)\n if (!childData || !childData.tableId) {\n throw new Error('getChildData: No matching child execution data found')\n }\n const { tableId: childTableId } = childData\n\n const childReport = await services.reportingService.getAsyncReport(\n token,\n reportId,\n childVariant.id,\n childTableId,\n query,\n )\n\n return {\n id: childVariant.id,\n data: childReport,\n }\n }),\n )\n}\n\n/**\n * Entry point function to render the report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const renderReport = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token, dprUser } = LocalsHelper.getValues(res)\n\n // Get the report data\n const { definition, requestData, reportData, childData, summariesData, reportQuery, columns } = await getData({\n req,\n res,\n services,\n token,\n userId: dprUser.id,\n })\n\n // Get the data table\n const dataTable: DataTable | ReportTemplateData = ReportTemplateUtils.createReportTemplateData(\n definition,\n columns,\n reportData,\n childData,\n summariesData,\n reportQuery,\n )\n\n // Get the template data\n const templateData = await getTemplateData(\n req,\n res,\n services,\n definition,\n dataTable,\n columns,\n reportQuery,\n requestData,\n )\n\n const renderData = {\n ...templateData,\n dataTable,\n }\n\n if (requestData && Object.keys(requestData).length) {\n UserReportsUtils.updateLastViewed({\n req,\n services,\n reportStateData: requestData,\n userId: dprUser.id,\n filters: templateData.filterData.filters,\n })\n }\n\n return { renderData }\n}\n\nconst getTemplateData = async (\n req: Request,\n res: Response,\n services: Services,\n definition: components['schemas']['SingleVariantReportDefinition'],\n dataTable: DataTable | ReportTemplateData,\n columns: Columns,\n reportQuery: ReportQuery,\n requestData?: RequestedReport,\n) => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n // get url data\n const url = parseUrl(req)\n if (!url) {\n throw new Error('Unable to set url data from request')\n }\n\n const urls = url ? setUrls(url, req) : undefined\n\n // get from definition\n const definitionData = extractDataFromDefinition(definition)\n const { fields, specification } = definitionData\n\n // get from requestedData\n const requestedData = requestData ? extractDataFromRequest(requestData) : undefined\n\n // Get the count\n const count = await getCount(definition, services, res, req, reportQuery)\n\n // Get the filters\n const filterData = await ReportFiltersUtils.getFilters({\n fields,\n req,\n res,\n services,\n filtersType: FiltersType.INTERACTIVE,\n })\n\n // Set the features\n const features = await setFeatures(services, res, req, columns, definitionData, requestedData, urls)\n\n // Set the extra meta data\n const meta = setMetaData(res, req)\n\n let pagination\n let totals\n if (definitionData.template === 'list') {\n pagination = PaginationUtils.getPaginationData(url, count, req)\n const { pageSize, currentPage, totalRows } = pagination\n totals = TotalsUtils.getTotals(pageSize, currentPage, totalRows, dataTable.rowCount)\n }\n\n return {\n ...(showColumns(specification) && { columns }),\n filterData,\n count,\n nestedBaseUrl,\n ...meta,\n ...features,\n ...definitionData,\n ...requestedData,\n ...urls,\n ...(pagination && { pagination }),\n ...(totals && { totals }),\n }\n}\n\nconst showColumns = (specification: components['schemas']['Specification']) => {\n const { template } = specification\n\n return !['row-section', 'row-section-child', 'summary', 'summary-section'].includes(template)\n}\n\nconst setMetaData = (res: Response, req: Request) => {\n const { csrfToken } = LocalsHelper.getValues(res)\n const { tableId, reportId, id } = req.params\n\n return {\n csrfToken,\n loadType: LoadType.ASYNC,\n type: ReportType.REPORT,\n tableId,\n reportId,\n id,\n }\n}\n\nconst setUrls = (url: Url, req: Request): ReportUrls => {\n const { search } = url\n const encodedSearch = search ? encodeURIComponent(search) : undefined\n const pathname = search ? req.originalUrl.split(search)[0] : req.originalUrl\n const reportUrl = pathname.replace('/download-disabled', '').replace('/download-disabled?', '')\n\n return {\n reportUrl,\n reportSearch: search || undefined,\n encodedSearch,\n pathname,\n }\n}\n\nconst setFeatures = async (\n services: Services,\n res: Response,\n req: Request,\n columns: Columns,\n definitionData: ExtractedDefinitionData,\n requestData?: ExtractedRequestData,\n urls?: ReportUrls,\n) => {\n const { csrfToken, dprUser, bookmarkingEnabled, downloadingEnabled } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const { downloadPermissionService, bookmarkService } = services\n\n let canDownload = false\n if (downloadingEnabled) {\n canDownload = await downloadPermissionService.downloadEnabledForReport(dprUser.id, reportId, id)\n }\n\n let bookmarked\n if (bookmarkingEnabled) {\n bookmarked = await bookmarkService.isBookmarked(id, reportId, dprUser.id)\n }\n\n const actions = setActions(csrfToken, columns, canDownload, res, req, definitionData, requestData, urls)\n\n return {\n actions,\n canDownload,\n bookmarked,\n }\n}\n\nconst getCount = async (\n definition: components['schemas']['SingleVariantReportDefinition'],\n services: Services,\n res: Response,\n req: Request,\n reportQuery: ReportQuery,\n) => {\n const { token } = LocalsHelper.getValues(res)\n const { tableId, reportId, id } = req.params\n\n return !definition.variant.interactive\n ? services.reportingService.getAsyncCount(token, tableId)\n : services.reportingService.getAsyncInteractiveCount(token, tableId, reportId, id, reportQuery)\n}\n\nconst extractDataFromDefinition = (\n definition: components['schemas']['SingleVariantReportDefinition'],\n): ExtractedDefinitionData => {\n const { variant, name: reportName, description: reportDescription } = definition\n const { classification, printable, specification, name, description } = variant\n if (!specification) {\n throw new Error('No specification found in variant definition')\n }\n const { template, fields } = specification\n\n return {\n reportName,\n name,\n description: description || reportDescription,\n classification,\n printable: Boolean(printable),\n specification,\n template,\n fields,\n }\n}\n\nconst extractDataFromRequest = (requestData: RequestedReport): ExtractedRequestData => {\n const { query, url, timestamp } = requestData\n\n return {\n executionId: requestData.executionId,\n requestedTimestamp: timestamp.requested ? new Date(timestamp.requested).toLocaleString() : undefined,\n querySummary: query?.summary || [],\n queryData: query?.data,\n requestUrl: url?.request,\n defaultQuery: url?.report?.default,\n dataProductDefinitionsPath: requestData.dataProductDefinitionsPath,\n }\n}\n\nconst setActions = (\n csrfToken: string,\n columns: Columns,\n canDownload: boolean,\n res: Response,\n req: Request,\n definitionData: ExtractedDefinitionData,\n requestData?: ExtractedRequestData,\n urls?: ReportUrls,\n) => {\n const { reportName, name, printable } = definitionData\n const { tableId, id, reportId } = req.params\n const { nestedBaseUrl, definitionsPath, downloadingEnabled } = LocalsHelper.getValues(res)\n\n // DownloadActionParams\n let downloadConfig: DownloadActionParams | undefined\n if (urls && downloadingEnabled) {\n downloadConfig = {\n enabled: downloadingEnabled,\n name,\n reportName,\n csrfToken,\n reportId,\n id,\n tableId,\n columns: columns.value,\n definitionPath: definitionsPath,\n loadType: LoadType.ASYNC,\n nestedBaseUrl,\n canDownload,\n currentUrl: urls.pathname,\n currentQueryParams: urls.reportSearch,\n ...(requestData?.queryData && {\n sortColumn: <string>requestData.queryData['sortColumn'],\n sortedAsc: <string>requestData.queryData['sortedAsc'],\n }),\n }\n }\n\n let shareConfig\n let copyConfig\n if (requestData?.requestUrl?.fullUrl) {\n shareConfig = {\n reportName,\n name,\n url: requestData.requestUrl.fullUrl,\n }\n copyConfig = {\n url: requestData.requestUrl.fullUrl,\n }\n }\n\n let refreshConfig\n if (requestData?.executionId && requestData?.requestUrl?.fullUrl) {\n refreshConfig = {\n url: requestData.requestUrl.fullUrl,\n executionId: requestData.executionId,\n }\n }\n\n return ReportActionsUtils.getActions({\n ...(downloadConfig && { download: downloadConfig }),\n ...(shareConfig && { share: shareConfig }),\n ...(refreshConfig && { refresh: refreshConfig }),\n ...(copyConfig && { copy: copyConfig }),\n print: { enabled: printable },\n })\n}\n\nexport default {\n renderReport,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_utils", "LocalsHelper", "ColumnUtils", "definitionUtils", "ReportFiltersUtils", "ReportQuery", "ReportTemplateUtils", "UserReportsUtils", "parseUrl", "PaginationUtils", "TotalsUtils", "ReportActionsUtils"]
7
7
  }
@@ -3,33 +3,32 @@ import { Url } from 'url'
3
3
  import { Request, Response } from 'express'
4
4
 
5
5
  // Types
6
- import type { Columns } from '../../../../../components/_reports/report-columns-form/types'
6
+ import { ReportTemplateData } from '../../../../../utils/TemplateBuilder/SectionedDataHelper/types'
7
+ import { ChildData } from '../../../../../utils/TemplateBuilder/ParentChildDataBuilder/types'
8
+ import type { Columns } from '../../../../../components/_reports/report-heading/report-columns/report-columns-form/types'
7
9
  import type { AsyncReportUtilsParams } from '../../../../../types/AsyncReportUtils'
8
10
  import type { DataTable } from '../../../../../utils/DataTableBuilder/types'
9
11
  import type { components } from '../../../../../types/api'
10
12
  import type { AsyncSummary, RequestedReport } from '../../../../../types/UserReports'
11
13
  import { LoadType, ReportType } from '../../../../../types/UserReports'
12
14
  import ReportQuery from '../../../../../types/ReportQuery'
13
- import type { ChildData } from '../../../../../utils/ParentChildDataTableBuilder/types'
14
15
  import type { ExtractedDefinitionData, ExtractedRequestData, ReportUrls } from './types'
15
- import type { DownloadActionParams } from '../../../../../components/_reports/report-actions/types'
16
+ import type { DownloadActionParams } from '../../../../../components/_reports/report-heading/report-actions/types'
16
17
  import { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'
17
18
  import type { Services } from '../../../../../types/Services'
18
19
 
19
20
  // Utils
20
21
  import definitionUtils from '../../../../../utils/definitionUtils'
21
- import PaginationUtils from '../../../../../components/_reports/report-pagination/utils'
22
- import TotalsUtils from '../../../../../components/_reports/report-totals/utils'
22
+ import PaginationUtils from '../../../../../components/_reports/report-page/report-template/report-pagination/utils'
23
+ import TotalsUtils from '../../../../../components/_reports/report-page/report-template/report-totals/utils'
23
24
  import ReportFiltersUtils from '../../../../../components/_filters/utils'
24
- import ColumnUtils from '../../../../../components/_reports/report-columns-form/utils'
25
- import ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'
25
+ import ColumnUtils from '../../../../../components/_reports/report-heading/report-columns/report-columns-form/utils'
26
+ import ReportActionsUtils from '../../../../../components/_reports/report-heading/report-actions/utils'
26
27
  import UserReportsUtils from '../../../../../components/user-reports/utils'
27
28
  import LocalsHelper from '../../../../../utils/localsHelper'
28
- import DataTableUtils from '../../../../../components/_reports/report-data-table/utils'
29
+ import ReportTemplateUtils from '../../../../../components/_reports/report-page/report-template/utils'
29
30
  import RequestedReportService from '../../../my-reports/requested-reports/service'
30
31
 
31
- import CollatedSummaryBuilder from '../../../../../utils/CollatedSummaryBuilder/CollatedSummaryBuilder'
32
-
33
32
  export const getData = async ({
34
33
  res,
35
34
  req,
@@ -256,7 +255,7 @@ export const renderReport = async ({ req, res, services }: AsyncReportUtilsParam
256
255
  })
257
256
 
258
257
  // Get the data table
259
- const dataTable: DataTable[] = DataTableUtils.createDataTable(
258
+ const dataTable: DataTable | ReportTemplateData = ReportTemplateUtils.createReportTemplateData(
260
259
  definition,
261
260
  columns,
262
261
  reportData,
@@ -271,7 +270,6 @@ export const renderReport = async ({ req, res, services }: AsyncReportUtilsParam
271
270
  res,
272
271
  services,
273
272
  definition,
274
- summariesData,
275
273
  dataTable,
276
274
  columns,
277
275
  reportQuery,
@@ -301,8 +299,7 @@ const getTemplateData = async (
301
299
  res: Response,
302
300
  services: Services,
303
301
  definition: components['schemas']['SingleVariantReportDefinition'],
304
- summariesData: AsyncSummary[],
305
- dataTable: DataTable[],
302
+ dataTable: DataTable | ReportTemplateData,
306
303
  columns: Columns,
307
304
  reportQuery: ReportQuery,
308
305
  requestData?: RequestedReport,
@@ -342,18 +339,12 @@ const getTemplateData = async (
342
339
  // Set the extra meta data
343
340
  const meta = setMetaData(res, req)
344
341
 
345
- let reportSummaries
346
- if (summariesData.length) {
347
- const collatedSummaryBuilder = new CollatedSummaryBuilder(specification, summariesData)
348
- reportSummaries = collatedSummaryBuilder.collatePageSummaries()
349
- }
350
-
351
342
  let pagination
352
343
  let totals
353
344
  if (definitionData.template === 'list') {
354
345
  pagination = PaginationUtils.getPaginationData(url, count, req)
355
346
  const { pageSize, currentPage, totalRows } = pagination
356
- totals = TotalsUtils.getTotals(pageSize, currentPage, totalRows, dataTable[0].rowCount)
347
+ totals = TotalsUtils.getTotals(pageSize, currentPage, totalRows, dataTable.rowCount)
357
348
  }
358
349
 
359
350
  return {
@@ -368,7 +359,6 @@ const getTemplateData = async (
368
359
  ...urls,
369
360
  ...(pagination && { pagination }),
370
361
  ...(totals && { totals }),
371
- ...(reportSummaries && { reportSummaries }),
372
362
  }
373
363
  }
374
364
 
@@ -1,7 +1,7 @@
1
- {% from "../../../components/_reports/report-wrapper/view.njk" import dprReportWrapper %}
1
+ {% from "../../../components/_reports/report-page/view.njk" import dprReportPage %}
2
2
 
3
3
  {% extends layoutPath %}
4
4
 
5
5
  {% block content %}
6
- {{ dprReportWrapper(renderData) }}
6
+ {{ dprReportPage(renderData) }}
7
7
  {% endblock %}
@@ -38,7 +38,7 @@ var import_utils = __toESM(require("../../../../../components/_filters/filters-s
38
38
  var import_localsHelper = __toESM(require("../../../../../utils/localsHelper"));
39
39
  var import_UserStoreItemBuilder = __toESM(require("../../../../../utils/UserStoreItemBuilder"));
40
40
  var import_utils2 = __toESM(require("../../async/dashboard/utils"));
41
- var import_utils3 = __toESM(require("../../../../../components/_reports/report-actions/utils"));
41
+ var import_utils3 = __toESM(require("../../../../../components/_reports/report-heading/report-actions/utils"));
42
42
  const setAsRecentlyViewed = async ({
43
43
  req,
44
44
  services,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../dpr/routes/journeys/view-report/sync/dashboard/utils.ts"],
4
- "sourcesContent": ["import type { Request, Response } from 'express'\nimport Dict = NodeJS.Dict\n\nimport type { Services } from '../../../../../types/Services'\nimport { ReportType, RequestStatus } from '../../../../../types/UserReports'\nimport { FilterValue } from '../../../../../components/_filters/types'\nimport SelectedFiltersUtils from '../../../../../components/_filters/filters-selected/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport UserStoreItemBuilder from '../../../../../utils/UserStoreItemBuilder'\nimport { DashboardDataResponse } from '../../../../../types/Metrics'\nimport AsyncDashboardUtils from '../../async/dashboard/utils'\nimport { DashboardSection } from '../../../../../components/_dashboards/dashboard-visualisation/types'\nimport { components } from '../../../../../types/api'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\n\nconst setAsRecentlyViewed = async ({\n req,\n services,\n reportName,\n name,\n description,\n reportId,\n id,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportName: string\n name: string\n description: string\n reportId: string\n id: string\n userId: string\n filters: FilterValue[]\n}) => {\n const stateData = {\n type: ReportType.DASHBOARD,\n reportId,\n id,\n reportName,\n description,\n name,\n }\n\n const interactiveQueryData: { query: Dict<string>; querySummary: Array<Dict<string>> } = {\n query: <Dict<string>>req.query,\n querySummary: SelectedFiltersUtils.getQuerySummary(<Dict<string>>req.query, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(stateData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addReportUrls(req)\n .build()\n\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport const renderSyncDashboard = async ({\n req,\n res,\n services,\n}: {\n req: Request\n res: Response\n services: Services\n}) => {\n const { token, csrfToken, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`\n\n const {\n query,\n filters: filterData,\n reportDefinition,\n dashboardDefinition,\n } = await AsyncDashboardUtils.getDefinitionData({\n req,\n res,\n services,\n })\n\n const dashboardData: DashboardDataResponse[][] = await services.dashboardService.getSyncDashboard(\n token,\n id,\n reportId,\n query,\n )\n const flattenedData: DashboardDataResponse[] = dashboardData.flat()\n\n // Get the dashboard parts\n const sections: DashboardSection[] = AsyncDashboardUtils.getSections(dashboardDefinition, flattenedData, query)\n\n await setAsRecentlyViewed({\n req,\n services,\n reportName: reportDefinition.name,\n name: dashboardDefinition.name,\n description: dashboardDefinition.description || reportDefinition.description || '',\n reportId,\n id,\n userId: dprUser.id,\n filters: filterData.filters,\n })\n\n return {\n dashboardData: {\n token,\n id,\n reportId,\n name: dashboardDefinition.name,\n description: dashboardDefinition.description,\n reportName: reportDefinition.name,\n bookmarked: await services.bookmarkService.isBookmarked(id, reportId, dprUser.id),\n nestedBaseUrl,\n csrfToken,\n sections,\n filters: filterData,\n type: ReportType.DASHBOARD,\n actions: setActions(dashboardDefinition, reportDefinition, fullUrl),\n },\n }\n}\n\nexport const setActions = (\n definition: components['schemas']['DashboardDefinition'],\n summaryDefinition: components['schemas']['ReportDefinitionSummary'],\n url: string,\n) => {\n const { name: reportName } = summaryDefinition\n const { name } = definition\n\n return ReportActionsUtils.getActions({\n share: {\n reportName,\n name,\n url,\n },\n copy: {\n url,\n },\n })\n}\n\nexport default {\n renderSyncDashboard,\n}\n"],
4
+ "sourcesContent": ["import type { Request, Response } from 'express'\nimport Dict = NodeJS.Dict\n\nimport type { Services } from '../../../../../types/Services'\nimport { ReportType, RequestStatus } from '../../../../../types/UserReports'\nimport { FilterValue } from '../../../../../components/_filters/types'\nimport SelectedFiltersUtils from '../../../../../components/_filters/filters-selected/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport UserStoreItemBuilder from '../../../../../utils/UserStoreItemBuilder'\nimport { DashboardDataResponse } from '../../../../../types/Metrics'\nimport AsyncDashboardUtils from '../../async/dashboard/utils'\nimport { DashboardSection } from '../../../../../components/_dashboards/dashboard-visualisation/types'\nimport { components } from '../../../../../types/api'\nimport ReportActionsUtils from '../../../../../components/_reports/report-heading/report-actions/utils'\n\nconst setAsRecentlyViewed = async ({\n req,\n services,\n reportName,\n name,\n description,\n reportId,\n id,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportName: string\n name: string\n description: string\n reportId: string\n id: string\n userId: string\n filters: FilterValue[]\n}) => {\n const stateData = {\n type: ReportType.DASHBOARD,\n reportId,\n id,\n reportName,\n description,\n name,\n }\n\n const interactiveQueryData: { query: Dict<string>; querySummary: Array<Dict<string>> } = {\n query: <Dict<string>>req.query,\n querySummary: SelectedFiltersUtils.getQuerySummary(<Dict<string>>req.query, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(stateData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addReportUrls(req)\n .build()\n\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport const renderSyncDashboard = async ({\n req,\n res,\n services,\n}: {\n req: Request\n res: Response\n services: Services\n}) => {\n const { token, csrfToken, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`\n\n const {\n query,\n filters: filterData,\n reportDefinition,\n dashboardDefinition,\n } = await AsyncDashboardUtils.getDefinitionData({\n req,\n res,\n services,\n })\n\n const dashboardData: DashboardDataResponse[][] = await services.dashboardService.getSyncDashboard(\n token,\n id,\n reportId,\n query,\n )\n const flattenedData: DashboardDataResponse[] = dashboardData.flat()\n\n // Get the dashboard parts\n const sections: DashboardSection[] = AsyncDashboardUtils.getSections(dashboardDefinition, flattenedData, query)\n\n await setAsRecentlyViewed({\n req,\n services,\n reportName: reportDefinition.name,\n name: dashboardDefinition.name,\n description: dashboardDefinition.description || reportDefinition.description || '',\n reportId,\n id,\n userId: dprUser.id,\n filters: filterData.filters,\n })\n\n return {\n dashboardData: {\n token,\n id,\n reportId,\n name: dashboardDefinition.name,\n description: dashboardDefinition.description,\n reportName: reportDefinition.name,\n bookmarked: await services.bookmarkService.isBookmarked(id, reportId, dprUser.id),\n nestedBaseUrl,\n csrfToken,\n sections,\n filters: filterData,\n type: ReportType.DASHBOARD,\n actions: setActions(dashboardDefinition, reportDefinition, fullUrl),\n },\n }\n}\n\nexport const setActions = (\n definition: components['schemas']['DashboardDefinition'],\n summaryDefinition: components['schemas']['ReportDefinitionSummary'],\n url: string,\n) => {\n const { name: reportName } = summaryDefinition\n const { name } = definition\n\n return ReportActionsUtils.getActions({\n share: {\n reportName,\n name,\n url,\n },\n copy: {\n url,\n },\n })\n}\n\nexport default {\n renderSyncDashboard,\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,yBAA0C;AAE1C,mBAAiC;AACjC,0BAAyB;AACzB,kCAAiC;AAEjC,IAAAA,gBAAgC;AAGhC,IAAAA,gBAA+B;AAE/B,MAAM,sBAAsB,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAUM;AACJ,QAAM,YAAY;AAAA,IAChB,MAAM,8BAAW;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,uBAAmF;AAAA,IACvF,OAAqB,IAAI;AAAA,IACzB,cAAc,aAAAC,QAAqB,gBAA8B,IAAI,OAAO,OAAO;AAAA,EACrF;AAEA,QAAM,qBAAqB,IAAI,4BAAAC,QAAqB,SAAS,EAC1D,oBAAoB,oBAAoB,EACxC,UAAU,iCAAc,KAAK,EAC7B,aAAa,EACb,cAAc,GAAG,EACjB,MAAM;AAET,QAAM,SAAS,sBAAsB,kBAAkB,oBAAoB,MAAM;AACnF;AAEO,MAAM,sBAAsB,OAAO;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,QAAM,EAAE,OAAO,WAAW,SAAS,cAAc,IAAI,oBAAAC,QAAa,UAAU,GAAG;AAC/E,QAAM,EAAE,UAAU,GAAG,IAAI,IAAI;AAC7B,QAAM,UAAU,GAAG,IAAI,QAAQ,MAAM,IAAI,IAAI,MAAM,CAAC,GAAG,IAAI,WAAW;AAEtE,QAAM;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACF,IAAI,MAAM,cAAAC,QAAoB,kBAAkB;AAAA,IAC9C;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,gBAA2C,MAAM,SAAS,iBAAiB;AAAA,IAC/E;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,gBAAyC,cAAc,KAAK;AAGlE,QAAM,WAA+B,cAAAA,QAAoB,YAAY,qBAAqB,eAAe,KAAK;AAE9G,QAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,IACA,YAAY,iBAAiB;AAAA,IAC7B,MAAM,oBAAoB;AAAA,IAC1B,aAAa,oBAAoB,eAAe,iBAAiB,eAAe;AAAA,IAChF;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB,SAAS,WAAW;AAAA,EACtB,CAAC;AAED,SAAO;AAAA,IACL,eAAe;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,oBAAoB;AAAA,MAC1B,aAAa,oBAAoB;AAAA,MACjC,YAAY,iBAAiB;AAAA,MAC7B,YAAY,MAAM,SAAS,gBAAgB,aAAa,IAAI,UAAU,QAAQ,EAAE;AAAA,MAChF;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,MAAM,8BAAW;AAAA,MACjB,SAAS,WAAW,qBAAqB,kBAAkB,OAAO;AAAA,IACpE;AAAA,EACF;AACF;AAEO,MAAM,aAAa,CACxB,YACA,mBACA,QACG;AACH,QAAM,EAAE,MAAM,WAAW,IAAI;AAC7B,QAAM,EAAE,KAAK,IAAI;AAEjB,SAAO,cAAAC,QAAmB,WAAW;AAAA,IACnC,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,IAAO,gBAAQ;AAAA,EACb;AACF;",
6
6
  "names": ["import_utils", "SelectedFiltersUtils", "UserStoreItemBuilder", "LocalsHelper", "AsyncDashboardUtils", "ReportActionsUtils"]
7
7
  }
@@ -11,7 +11,7 @@ import { DashboardDataResponse } from '../../../../../types/Metrics'
11
11
  import AsyncDashboardUtils from '../../async/dashboard/utils'
12
12
  import { DashboardSection } from '../../../../../components/_dashboards/dashboard-visualisation/types'
13
13
  import { components } from '../../../../../types/api'
14
- import ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'
14
+ import ReportActionsUtils from '../../../../../components/_reports/report-heading/report-actions/utils'
15
15
 
16
16
  const setAsRecentlyViewed = async ({
17
17
  req,
@@ -39,16 +39,16 @@ module.exports = __toCommonJS(utils_exports);
39
39
  var import_parseurl = __toESM(require("parseurl"));
40
40
  var import_UserReports = require("../../../../../types/UserReports");
41
41
  var import_ReportQuery = __toESM(require("../../../../../types/ReportQuery"));
42
- var import_utils = __toESM(require("../../../../../components/_reports/report-pagination/utils"));
43
- var import_utils2 = __toESM(require("../../../../../components/_reports/report-totals/utils"));
44
- var import_utils3 = __toESM(require("../../../../../components/_reports/report-columns-form/utils"));
45
- var import_utils4 = __toESM(require("../../../../../components/_reports/report-actions/utils"));
42
+ var import_utils = __toESM(require("../../../../../components/_reports/report-page/report-template/report-pagination/utils"));
43
+ var import_utils2 = __toESM(require("../../../../../components/_reports/report-page/report-template/report-totals/utils"));
44
+ var import_utils3 = __toESM(require("../../../../../components/_reports/report-heading/report-columns/report-columns-form/utils"));
45
+ var import_utils4 = __toESM(require("../../../../../components/_reports/report-heading/report-actions/utils"));
46
46
  var import_utils5 = __toESM(require("../../../../../components/_filters/utils"));
47
47
  var import_utils6 = __toESM(require("../../../../../components/_filters/filters-selected/utils"));
48
48
  var import_localsHelper = __toESM(require("../../../../../utils/localsHelper"));
49
49
  var import_UserStoreItemBuilder = __toESM(require("../../../../../utils/UserStoreItemBuilder"));
50
- var import_DataTableBuilder = __toESM(require("../../../../../utils/DataTableBuilder/DataTableBuilder"));
51
50
  var import_filtersTypeEnum = require("../../../../../components/_filters/filtersTypeEnum");
51
+ var import_utils7 = __toESM(require("../../../../../components/_reports/report-page/report-template/utils"));
52
52
  const setActions = (csrfToken, reportDefinition, columns, url, canDownload, count, dataProductDefinitionsPath, currentUrl, currentQueryParams, nestedBaseUrl) => {
53
53
  const { name: reportName, variant, id: reportId } = reportDefinition;
54
54
  const { name, id, printable } = variant;
@@ -197,12 +197,30 @@ const getReportRenderData = async ({
197
197
  specification,
198
198
  reportQuery,
199
199
  data,
200
- filtersType
200
+ filtersType,
201
+ definition
201
202
  }) => {
202
203
  const url = (0, import_parseurl.default)(req);
203
204
  const fullUrl = `${req.protocol}://${req.get("host")}${req.originalUrl}`;
204
205
  const pathname = url?.search ? req.originalUrl.split(url.search)[0] : req.originalUrl;
205
- const dataTable = new import_DataTableBuilder.default(specification.fields).withHeaderSortOptions(reportQuery).buildTable(data);
206
+ const columns = import_utils3.default.getColumns(specification, req);
207
+ const reportDefinition = {
208
+ ...definition,
209
+ variant: {
210
+ ...definition.variant,
211
+ interactive: true
212
+ }
213
+ };
214
+ const dataTable = import_utils7.default.createReportTemplateData(
215
+ reportDefinition,
216
+ columns,
217
+ data,
218
+ [],
219
+ // child data - N/A for sync reports
220
+ [],
221
+ // summaries data - N/A for sync reports
222
+ reportQuery
223
+ );
206
224
  let pagination;
207
225
  let totals;
208
226
  if (url) {
@@ -221,9 +239,8 @@ const getReportRenderData = async ({
221
239
  services,
222
240
  filtersType: filtersType || import_filtersTypeEnum.FiltersType.INTERACTIVE
223
241
  });
224
- const columns = import_utils3.default.getColumns(specification, req);
225
242
  return {
226
- dataTable: [dataTable],
243
+ dataTable,
227
244
  totals,
228
245
  filterData,
229
246
  columns,
@@ -231,7 +248,8 @@ const getReportRenderData = async ({
231
248
  reportUrl: pathname.replace("/download-disabled", "").replace("/download-disabled?", ""),
232
249
  reportSearch: url?.search,
233
250
  encodedSearch: url?.search ? encodeURIComponent(url.search) : void 0,
234
- fullUrl
251
+ fullUrl,
252
+ template: specification.template
235
253
  };
236
254
  };
237
255
  const getRenderData = async ({
@@ -253,7 +271,16 @@ const getRenderData = async ({
253
271
  if (!specification) {
254
272
  throw new Error("No specicication found in definition");
255
273
  }
256
- const reportRenderData = await getReportRenderData({ req, res, services, count, specification, reportQuery, data });
274
+ const reportRenderData = await getReportRenderData({
275
+ req,
276
+ res,
277
+ services,
278
+ count,
279
+ specification,
280
+ reportQuery,
281
+ data,
282
+ definition: reportDefinition
283
+ });
257
284
  const actions = setActions(
258
285
  csrfToken,
259
286
  reportDefinition,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../dpr/routes/journeys/view-report/sync/report/utils.ts"],
4
- "sourcesContent": ["import parseUrl from 'parseurl'\nimport type { Request, Response } from 'express'\nimport Dict = NodeJS.Dict\nimport type { components } from '../../../../../types/api'\nimport type { DataTable } from '../../../../../utils/DataTableBuilder/types'\nimport type { ListWithWarnings } from '../../../../../data/types'\nimport type { Columns } from '../../../../../components/_reports/report-columns-form/types'\nimport type { Services } from '../../../../../types/Services'\nimport type { DownloadActionParams } from '../../../../../components/_reports/report-actions/types'\nimport { LoadType, ReportType, RequestStatus } from '../../../../../types/UserReports'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport { Template } from '../../../../../types/Templates'\nimport { FilterValue } from '../../../../../components/_filters/types'\n\nimport PaginationUtils from '../../../../../components/_reports/report-pagination/utils'\nimport TotalsUtils from '../../../../../components/_reports/report-totals/utils'\nimport ColumnUtils from '../../../../../components/_reports/report-columns-form/utils'\nimport ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'\nimport FiltersUtils from '../../../../../components/_filters/utils'\nimport SelectedFiltersUtils from '../../../../../components/_filters/filters-selected/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport UserStoreItemBuilder from '../../../../../utils/UserStoreItemBuilder'\n\nimport DataTableBuilder from '../../../../../utils/DataTableBuilder/DataTableBuilder'\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\n\nexport const setActions = (\n csrfToken: string,\n reportDefinition: components['schemas']['SingleVariantReportDefinition'],\n columns: Columns,\n url: string,\n canDownload: boolean,\n count: number,\n dataProductDefinitionsPath: string,\n currentUrl: string,\n currentQueryParams: string,\n nestedBaseUrl: string,\n) => {\n const { name: reportName, variant, id: reportId } = reportDefinition\n const { name, id, printable } = variant\n\n const downloadConfig: DownloadActionParams = {\n enabled: count > 0,\n name,\n reportName,\n csrfToken,\n reportId,\n id,\n columns: columns.value,\n loadType: LoadType.SYNC,\n definitionPath: dataProductDefinitionsPath,\n canDownload,\n currentUrl,\n currentQueryParams,\n nestedBaseUrl,\n }\n\n return ReportActionsUtils.getActions({\n download: downloadConfig,\n print: {\n enabled: Boolean(printable),\n },\n share: {\n reportName,\n name,\n url,\n },\n copy: {\n url,\n },\n })\n}\n\nconst setAsRecentlyViewed = async ({\n req,\n services,\n reportName,\n name,\n description,\n reportId,\n id,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportName: string\n name: string\n description: string\n reportId: string\n id: string\n userId: string\n filters: FilterValue[]\n}) => {\n const stateData = {\n type: ReportType.REPORT,\n reportId,\n id,\n reportName,\n description,\n name,\n }\n\n const interactiveQueryData: { query: Dict<string>; querySummary: Array<Dict<string>> } = {\n query: <Dict<string>>req.query,\n querySummary: SelectedFiltersUtils.getQuerySummary(<Dict<string>>req.query, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(stateData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addReportUrls(req)\n .build()\n\n await services.recentlyViewedService?.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport const getReportData = async ({\n services,\n req,\n token,\n reportId,\n id,\n dataProductDefinitionsPath,\n}: {\n services: Services\n req: Request\n token: string\n reportId: string\n id: string\n dataProductDefinitionsPath?: string\n}) => {\n const reportDefinition = await services.reportingService.getDefinition(\n token,\n reportId,\n id,\n dataProductDefinitionsPath,\n )\n const { variant } = reportDefinition\n const { resourceName, specification } = variant\n\n const reportQuery = new ReportQuery({\n fields: specification?.fields || [],\n template: (specification?.template as Template) || 'list',\n queryParams: req.query,\n definitionsPath: <string>dataProductDefinitionsPath,\n })\n\n return {\n reportData: await services.reportingService.getListWithWarnings(resourceName, token, reportQuery),\n reportDefinition,\n reportQuery,\n }\n}\n\nexport const getReport = async ({ req, res, services }: { req: Request; res: Response; services: Services }) => {\n const { token, csrfToken, dprUser } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const dataProductDefinitionsPath = <string>req.query['dataProductDefinitionsPath']\n\n const { reportData, reportDefinition, reportQuery } = await getReportData({\n services,\n req,\n token,\n reportId,\n id,\n dataProductDefinitionsPath,\n })\n const count = await services.reportingService.getCount(reportDefinition.variant.resourceName, token, reportQuery)\n const canDownload = Boolean(\n await services.downloadPermissionService?.downloadEnabledForReport(dprUser.id, reportId, id),\n )\n const bookmarked = Boolean(await services.bookmarkService?.isBookmarked(id, reportId, dprUser.id))\n\n const renderData = await getRenderData({\n req,\n res,\n services,\n reportDefinition,\n reportQuery,\n reportData,\n count,\n csrfToken,\n canDownload,\n })\n\n if (Object.keys(renderData).length) {\n await setAsRecentlyViewed({\n req,\n services,\n reportName: renderData.reportName,\n name: renderData.name,\n description: renderData.description || '',\n reportId,\n id,\n userId: dprUser.id,\n filters: renderData.filterData.filters,\n })\n }\n\n return {\n renderData: {\n ...renderData,\n csrfToken,\n loadType: LoadType.SYNC,\n reportId,\n id,\n bookmarked,\n dataProductDefinitionsPath,\n },\n }\n}\n\nexport const getReportRenderData = async ({\n req,\n res,\n services,\n count,\n specification,\n reportQuery,\n data,\n filtersType,\n}: {\n req: Request\n res?: Response\n services?: Services\n count: number\n specification: components['schemas']['Specification']\n reportQuery: ReportQuery\n data: Dict<string>[]\n filtersType?: FiltersType\n}) => {\n const url = parseUrl(req)\n const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`\n const pathname = url?.search ? req.originalUrl.split(url.search)[0] : req.originalUrl\n\n const dataTable: DataTable = new DataTableBuilder(specification.fields)\n .withHeaderSortOptions(reportQuery)\n .buildTable(data)\n\n let pagination\n let totals\n if (url) {\n pagination = PaginationUtils.getPaginationData(url, count, req)\n totals = TotalsUtils.getTotals(\n pagination.pageSize,\n pagination.currentPage,\n pagination.totalRows,\n dataTable.rowCount,\n )\n }\n\n const filterData = await FiltersUtils.getFilters({\n fields: specification.fields,\n req,\n res,\n services,\n filtersType: filtersType || FiltersType.INTERACTIVE,\n })\n\n const columns = ColumnUtils.getColumns(specification, req)\n\n return {\n dataTable: [dataTable],\n totals,\n filterData,\n columns,\n pagination,\n reportUrl: pathname.replace('/download-disabled', '').replace('/download-disabled?', ''),\n reportSearch: url?.search,\n encodedSearch: url?.search ? encodeURIComponent(url.search) : undefined,\n fullUrl,\n }\n}\n\nexport const getRenderData = async ({\n req,\n res,\n services,\n reportDefinition,\n reportQuery,\n reportData,\n count,\n csrfToken,\n canDownload,\n}: {\n req: Request\n res: Response\n services: Services\n reportDefinition: components['schemas']['SingleVariantReportDefinition']\n reportQuery: ReportQuery\n reportData: ListWithWarnings\n csrfToken: string\n count: number\n canDownload: boolean\n}) => {\n const { dataProductDefinitionsPath } = req.query\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n const { name: reportName, description: reportDescription } = reportDefinition\n const { specification, name, description, classification, printable } = reportDefinition.variant\n const { data } = reportData\n\n if (!specification) {\n throw new Error('No specicication found in definition')\n }\n\n const reportRenderData = await getReportRenderData({ req, res, services, count, specification, reportQuery, data })\n\n const actions = setActions(\n csrfToken,\n reportDefinition,\n reportRenderData.columns,\n `${req.protocol}://${req.get('host')}${req.originalUrl}`,\n canDownload,\n count,\n <string>dataProductDefinitionsPath,\n reportRenderData.reportUrl,\n reportRenderData.reportSearch || '',\n nestedBaseUrl,\n )\n\n return {\n ...reportRenderData,\n reportName,\n name,\n description: description || reportDescription,\n count,\n type: ReportType.REPORT,\n classification,\n printable,\n actions,\n warnings: reportData.warnings,\n canDownload,\n nestedBaseUrl,\n }\n}\n\nexport default {\n getRenderData,\n getReport,\n getReportData,\n getReportRenderData,\n setActions,\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_utils", "ReportActionsUtils", "SelectedFiltersUtils", "UserStoreItemBuilder", "ReportQuery", "LocalsHelper", "parseUrl", "DataTableBuilder", "PaginationUtils", "TotalsUtils", "FiltersUtils", "ColumnUtils"]
4
+ "sourcesContent": ["import parseUrl from 'parseurl'\nimport type { Request, Response } from 'express'\nimport Dict = NodeJS.Dict\nimport type { components } from '../../../../../types/api'\nimport type { DataTable } from '../../../../../utils/DataTableBuilder/types'\nimport type { ListWithWarnings } from '../../../../../data/types'\nimport type { Columns } from '../../../../../components/_reports/report-heading/report-columns/report-columns-form/types'\nimport type { Services } from '../../../../../types/Services'\nimport type { DownloadActionParams } from '../../../../../components/_reports/report-heading/report-actions/types'\nimport { LoadType, ReportType, RequestStatus } from '../../../../../types/UserReports'\nimport ReportQuery from '../../../../../types/ReportQuery'\nimport { Template } from '../../../../../types/Templates'\nimport { FilterValue } from '../../../../../components/_filters/types'\n\nimport PaginationUtils from '../../../../../components/_reports/report-page/report-template/report-pagination/utils'\nimport TotalsUtils from '../../../../../components/_reports/report-page/report-template/report-totals/utils'\nimport ColumnUtils from '../../../../../components/_reports/report-heading/report-columns/report-columns-form/utils'\nimport ReportActionsUtils from '../../../../../components/_reports/report-heading/report-actions/utils'\nimport FiltersUtils from '../../../../../components/_filters/utils'\nimport SelectedFiltersUtils from '../../../../../components/_filters/filters-selected/utils'\nimport LocalsHelper from '../../../../../utils/localsHelper'\nimport UserStoreItemBuilder from '../../../../../utils/UserStoreItemBuilder'\n\nimport { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'\nimport { ReportTemplateData } from '../../../../../utils/TemplateBuilder/SectionedDataHelper/types'\nimport ReportTemplateUtils from '../../../../../components/_reports/report-page/report-template/utils'\n\nexport const setActions = (\n csrfToken: string,\n reportDefinition: components['schemas']['SingleVariantReportDefinition'],\n columns: Columns,\n url: string,\n canDownload: boolean,\n count: number,\n dataProductDefinitionsPath: string,\n currentUrl: string,\n currentQueryParams: string,\n nestedBaseUrl: string,\n) => {\n const { name: reportName, variant, id: reportId } = reportDefinition\n const { name, id, printable } = variant\n\n const downloadConfig: DownloadActionParams = {\n enabled: count > 0,\n name,\n reportName,\n csrfToken,\n reportId,\n id,\n columns: columns.value,\n loadType: LoadType.SYNC,\n definitionPath: dataProductDefinitionsPath,\n canDownload,\n currentUrl,\n currentQueryParams,\n nestedBaseUrl,\n }\n\n return ReportActionsUtils.getActions({\n download: downloadConfig,\n print: {\n enabled: Boolean(printable),\n },\n share: {\n reportName,\n name,\n url,\n },\n copy: {\n url,\n },\n })\n}\n\nconst setAsRecentlyViewed = async ({\n req,\n services,\n reportName,\n name,\n description,\n reportId,\n id,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportName: string\n name: string\n description: string\n reportId: string\n id: string\n userId: string\n filters: FilterValue[]\n}) => {\n const stateData = {\n type: ReportType.REPORT,\n reportId,\n id,\n reportName,\n description,\n name,\n }\n\n const interactiveQueryData: { query: Dict<string>; querySummary: Array<Dict<string>> } = {\n query: <Dict<string>>req.query,\n querySummary: SelectedFiltersUtils.getQuerySummary(<Dict<string>>req.query, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(stateData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addReportUrls(req)\n .build()\n\n await services.recentlyViewedService?.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport const getReportData = async ({\n services,\n req,\n token,\n reportId,\n id,\n dataProductDefinitionsPath,\n}: {\n services: Services\n req: Request\n token: string\n reportId: string\n id: string\n dataProductDefinitionsPath?: string\n}) => {\n const reportDefinition = await services.reportingService.getDefinition(\n token,\n reportId,\n id,\n dataProductDefinitionsPath,\n )\n const { variant } = reportDefinition\n const { resourceName, specification } = variant\n\n const reportQuery = new ReportQuery({\n fields: specification?.fields || [],\n template: (specification?.template as Template) || 'list',\n queryParams: req.query,\n definitionsPath: <string>dataProductDefinitionsPath,\n })\n\n return {\n reportData: await services.reportingService.getListWithWarnings(resourceName, token, reportQuery),\n reportDefinition,\n reportQuery,\n }\n}\n\nexport const getReport = async ({ req, res, services }: { req: Request; res: Response; services: Services }) => {\n const { token, csrfToken, dprUser } = LocalsHelper.getValues(res)\n const { reportId, id } = req.params\n const dataProductDefinitionsPath = <string>req.query['dataProductDefinitionsPath']\n\n const { reportData, reportDefinition, reportQuery } = await getReportData({\n services,\n req,\n token,\n reportId,\n id,\n dataProductDefinitionsPath,\n })\n const count = await services.reportingService.getCount(reportDefinition.variant.resourceName, token, reportQuery)\n const canDownload = Boolean(\n await services.downloadPermissionService?.downloadEnabledForReport(dprUser.id, reportId, id),\n )\n const bookmarked = Boolean(await services.bookmarkService?.isBookmarked(id, reportId, dprUser.id))\n\n const renderData = await getRenderData({\n req,\n res,\n services,\n reportDefinition,\n reportQuery,\n reportData,\n count,\n csrfToken,\n canDownload,\n })\n\n if (Object.keys(renderData).length) {\n await setAsRecentlyViewed({\n req,\n services,\n reportName: renderData.reportName,\n name: renderData.name,\n description: renderData.description || '',\n reportId,\n id,\n userId: dprUser.id,\n filters: renderData.filterData.filters,\n })\n }\n\n return {\n renderData: {\n ...renderData,\n csrfToken,\n loadType: LoadType.SYNC,\n reportId,\n id,\n bookmarked,\n dataProductDefinitionsPath,\n },\n }\n}\n\nexport const getReportRenderData = async ({\n req,\n res,\n services,\n count,\n specification,\n reportQuery,\n data,\n filtersType,\n definition,\n}: {\n req: Request\n res?: Response\n services?: Services\n count: number\n specification: components['schemas']['Specification']\n reportQuery: ReportQuery\n data: Dict<string>[]\n filtersType?: FiltersType\n definition: components['schemas']['SingleVariantReportDefinition']\n}) => {\n const url = parseUrl(req)\n const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`\n const pathname = url?.search ? req.originalUrl.split(url.search)[0] : req.originalUrl\n const columns = ColumnUtils.getColumns(specification, req)\n const reportDefinition = {\n ...definition,\n variant: {\n ...definition.variant,\n interactive: true,\n },\n }\n\n // Get the data table\n const dataTable: DataTable | ReportTemplateData = ReportTemplateUtils.createReportTemplateData(\n reportDefinition,\n columns,\n data,\n [], // child data - N/A for sync reports\n [], // summaries data - N/A for sync reports\n reportQuery,\n )\n\n let pagination\n let totals\n if (url) {\n pagination = PaginationUtils.getPaginationData(url, count, req)\n totals = TotalsUtils.getTotals(\n pagination.pageSize,\n pagination.currentPage,\n pagination.totalRows,\n dataTable.rowCount,\n )\n }\n\n const filterData = await FiltersUtils.getFilters({\n fields: specification.fields,\n req,\n res,\n services,\n filtersType: filtersType || FiltersType.INTERACTIVE,\n })\n\n return {\n dataTable,\n totals,\n filterData,\n columns,\n pagination,\n reportUrl: pathname.replace('/download-disabled', '').replace('/download-disabled?', ''),\n reportSearch: url?.search,\n encodedSearch: url?.search ? encodeURIComponent(url.search) : undefined,\n fullUrl,\n template: specification.template,\n }\n}\n\nexport const getRenderData = async ({\n req,\n res,\n services,\n reportDefinition,\n reportQuery,\n reportData,\n count,\n csrfToken,\n canDownload,\n}: {\n req: Request\n res: Response\n services: Services\n reportDefinition: components['schemas']['SingleVariantReportDefinition']\n reportQuery: ReportQuery\n reportData: ListWithWarnings\n csrfToken: string\n count: number\n canDownload: boolean\n}) => {\n const { dataProductDefinitionsPath } = req.query\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n const { name: reportName, description: reportDescription } = reportDefinition\n const { specification, name, description, classification, printable } = reportDefinition.variant\n const { data } = reportData\n\n if (!specification) {\n throw new Error('No specicication found in definition')\n }\n\n const reportRenderData = await getReportRenderData({\n req,\n res,\n services,\n count,\n specification,\n reportQuery,\n data,\n definition: reportDefinition,\n })\n\n const actions = setActions(\n csrfToken,\n reportDefinition,\n reportRenderData.columns,\n `${req.protocol}://${req.get('host')}${req.originalUrl}`,\n canDownload,\n count,\n <string>dataProductDefinitionsPath,\n reportRenderData.reportUrl,\n reportRenderData.reportSearch || '',\n nestedBaseUrl,\n )\n\n return {\n ...reportRenderData,\n reportName,\n name,\n description: description || reportDescription,\n count,\n type: ReportType.REPORT,\n classification,\n printable,\n actions,\n warnings: reportData.warnings,\n canDownload,\n nestedBaseUrl,\n }\n}\n\nexport default {\n getRenderData,\n getReport,\n getReportData,\n getReportRenderData,\n setActions,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_utils", "ReportActionsUtils", "SelectedFiltersUtils", "UserStoreItemBuilder", "ReportQuery", "LocalsHelper", "parseUrl", "ColumnUtils", "ReportTemplateUtils", "PaginationUtils", "TotalsUtils", "FiltersUtils"]
7
7
  }
@@ -4,25 +4,26 @@ import Dict = NodeJS.Dict
4
4
  import type { components } from '../../../../../types/api'
5
5
  import type { DataTable } from '../../../../../utils/DataTableBuilder/types'
6
6
  import type { ListWithWarnings } from '../../../../../data/types'
7
- import type { Columns } from '../../../../../components/_reports/report-columns-form/types'
7
+ import type { Columns } from '../../../../../components/_reports/report-heading/report-columns/report-columns-form/types'
8
8
  import type { Services } from '../../../../../types/Services'
9
- import type { DownloadActionParams } from '../../../../../components/_reports/report-actions/types'
9
+ import type { DownloadActionParams } from '../../../../../components/_reports/report-heading/report-actions/types'
10
10
  import { LoadType, ReportType, RequestStatus } from '../../../../../types/UserReports'
11
11
  import ReportQuery from '../../../../../types/ReportQuery'
12
12
  import { Template } from '../../../../../types/Templates'
13
13
  import { FilterValue } from '../../../../../components/_filters/types'
14
14
 
15
- import PaginationUtils from '../../../../../components/_reports/report-pagination/utils'
16
- import TotalsUtils from '../../../../../components/_reports/report-totals/utils'
17
- import ColumnUtils from '../../../../../components/_reports/report-columns-form/utils'
18
- import ReportActionsUtils from '../../../../../components/_reports/report-actions/utils'
15
+ import PaginationUtils from '../../../../../components/_reports/report-page/report-template/report-pagination/utils'
16
+ import TotalsUtils from '../../../../../components/_reports/report-page/report-template/report-totals/utils'
17
+ import ColumnUtils from '../../../../../components/_reports/report-heading/report-columns/report-columns-form/utils'
18
+ import ReportActionsUtils from '../../../../../components/_reports/report-heading/report-actions/utils'
19
19
  import FiltersUtils from '../../../../../components/_filters/utils'
20
20
  import SelectedFiltersUtils from '../../../../../components/_filters/filters-selected/utils'
21
21
  import LocalsHelper from '../../../../../utils/localsHelper'
22
22
  import UserStoreItemBuilder from '../../../../../utils/UserStoreItemBuilder'
23
23
 
24
- import DataTableBuilder from '../../../../../utils/DataTableBuilder/DataTableBuilder'
25
24
  import { FiltersType } from '../../../../../components/_filters/filtersTypeEnum'
25
+ import { ReportTemplateData } from '../../../../../utils/TemplateBuilder/SectionedDataHelper/types'
26
+ import ReportTemplateUtils from '../../../../../components/_reports/report-page/report-template/utils'
26
27
 
27
28
  export const setActions = (
28
29
  csrfToken: string,
@@ -221,6 +222,7 @@ export const getReportRenderData = async ({
221
222
  reportQuery,
222
223
  data,
223
224
  filtersType,
225
+ definition,
224
226
  }: {
225
227
  req: Request
226
228
  res?: Response
@@ -230,14 +232,29 @@ export const getReportRenderData = async ({
230
232
  reportQuery: ReportQuery
231
233
  data: Dict<string>[]
232
234
  filtersType?: FiltersType
235
+ definition: components['schemas']['SingleVariantReportDefinition']
233
236
  }) => {
234
237
  const url = parseUrl(req)
235
238
  const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`
236
239
  const pathname = url?.search ? req.originalUrl.split(url.search)[0] : req.originalUrl
240
+ const columns = ColumnUtils.getColumns(specification, req)
241
+ const reportDefinition = {
242
+ ...definition,
243
+ variant: {
244
+ ...definition.variant,
245
+ interactive: true,
246
+ },
247
+ }
237
248
 
238
- const dataTable: DataTable = new DataTableBuilder(specification.fields)
239
- .withHeaderSortOptions(reportQuery)
240
- .buildTable(data)
249
+ // Get the data table
250
+ const dataTable: DataTable | ReportTemplateData = ReportTemplateUtils.createReportTemplateData(
251
+ reportDefinition,
252
+ columns,
253
+ data,
254
+ [], // child data - N/A for sync reports
255
+ [], // summaries data - N/A for sync reports
256
+ reportQuery,
257
+ )
241
258
 
242
259
  let pagination
243
260
  let totals
@@ -259,10 +276,8 @@ export const getReportRenderData = async ({
259
276
  filtersType: filtersType || FiltersType.INTERACTIVE,
260
277
  })
261
278
 
262
- const columns = ColumnUtils.getColumns(specification, req)
263
-
264
279
  return {
265
- dataTable: [dataTable],
280
+ dataTable,
266
281
  totals,
267
282
  filterData,
268
283
  columns,
@@ -271,6 +286,7 @@ export const getReportRenderData = async ({
271
286
  reportSearch: url?.search,
272
287
  encodedSearch: url?.search ? encodeURIComponent(url.search) : undefined,
273
288
  fullUrl,
289
+ template: specification.template,
274
290
  }
275
291
  }
276
292
 
@@ -305,7 +321,16 @@ export const getRenderData = async ({
305
321
  throw new Error('No specicication found in definition')
306
322
  }
307
323
 
308
- const reportRenderData = await getReportRenderData({ req, res, services, count, specification, reportQuery, data })
324
+ const reportRenderData = await getReportRenderData({
325
+ req,
326
+ res,
327
+ services,
328
+ count,
329
+ specification,
330
+ reportQuery,
331
+ data,
332
+ definition: reportDefinition,
333
+ })
309
334
 
310
335
  const actions = setActions(
311
336
  csrfToken,
@@ -37,7 +37,7 @@ var import_enum = require("../../../components/_filters/filter-input/enum");
37
37
  var import_localsHelper = __toESM(require("../../../utils/localsHelper"));
38
38
  var import_definitionUtils = __toESM(require("../../../utils/definitionUtils"));
39
39
  var import_DateMapper = __toESM(require("../../../utils/DateMapper/DateMapper"));
40
- var import_utils = __toESM(require("../../../components/_reports/report-columns-form/utils"));
40
+ var import_utils = __toESM(require("../../../components/_reports/report-heading/report-columns/report-columns-form/utils"));
41
41
  const applyReportInteractiveQuery = async (req, res, services, applyType) => {
42
42
  const { reportId, id } = req.params;
43
43
  const { token, definitionsPath } = import_localsHelper.default.getValues(res);