@ministryofjustice/hmpps-digital-prison-reporting-frontend 7.2.0 → 7.3.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 (55) hide show
  1. package/_networkMocks/dashboard/definitions/visualisations/complete-dataset/list/definition-historic.d.ts +2 -0
  2. package/_networkMocks/dashboard/definitions/visualisations/complete-dataset/matrix/definition.d.ts +1 -0
  3. package/cjs/dpr/components/_dashboards/Dashboard.js +49 -7
  4. package/cjs/dpr/components/_dashboards/Dashboard.js.map +1 -1
  5. package/cjs/dpr/components/_dashboards/dashboard-section/utils.js +19 -15
  6. package/cjs/dpr/components/_dashboards/dashboard-section/utils.js.map +1 -1
  7. package/cjs/dpr/components/_dashboards/dashboard-visualisation/types.js.map +1 -1
  8. package/cjs/dpr/components/_dashboards/scorecard/validate.js +2 -2
  9. package/cjs/dpr/components/_dashboards/scorecard/validate.js.map +1 -1
  10. package/cjs/dpr/components/_dashboards/scorecard-group/validate.js +2 -2
  11. package/cjs/dpr/components/_dashboards/scorecard-group/validate.js.map +1 -1
  12. package/cjs/dpr/routes/journeys/request-report/filters/utils.js +8 -8
  13. package/cjs/dpr/routes/journeys/request-report/filters/utils.js.map +1 -1
  14. package/cjs/dpr/routes/journeys/view-report/async/dashboard/utils.js +2 -2
  15. package/cjs/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +1 -1
  16. package/cjs/dpr/services/dashboardService.js +1 -1
  17. package/cjs/dpr/services/dashboardService.js.map +1 -1
  18. package/dpr/components/_dashboards/Dashboard.js +49 -7
  19. package/dpr/components/_dashboards/Dashboard.js.map +1 -1
  20. package/dpr/components/_dashboards/dashboard-section/utils.js +19 -15
  21. package/dpr/components/_dashboards/dashboard-section/utils.js.map +1 -1
  22. package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +1 -1
  23. package/dpr/components/_dashboards/dashboard-visualisation/utils.js +4 -4
  24. package/dpr/components/_dashboards/dashboard-visualisation/utils.js.map +1 -1
  25. package/dpr/components/_dashboards/scorecard/Scorecard.js +2 -2
  26. package/dpr/components/_dashboards/scorecard/Scorecard.js.map +1 -1
  27. package/dpr/components/_dashboards/scorecard/validate.js +2 -2
  28. package/dpr/components/_dashboards/scorecard/validate.js.map +1 -1
  29. package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js +2 -2
  30. package/dpr/components/_dashboards/scorecard-group/ScorecardGroup.js.map +1 -1
  31. package/dpr/components/_dashboards/scorecard-group/validate.js +2 -2
  32. package/dpr/components/_dashboards/scorecard-group/validate.js.map +1 -1
  33. package/dpr/routes/journeys/request-report/filters/utils.js +8 -8
  34. package/dpr/routes/journeys/request-report/filters/utils.js.map +1 -1
  35. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +2 -2
  36. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +1 -1
  37. package/dpr/services/dashboardService.d.ts +1 -1
  38. package/dpr/services/dashboardService.js +1 -1
  39. package/dpr/services/dashboardService.js.map +1 -1
  40. package/dpr/types/api.d.d.ts +1 -0
  41. package/dpr/types/api.d.ts +1 -0
  42. package/package.json +1 -1
  43. package/src/dpr/components/_dashboards/Dashboard.d.ts +11 -2
  44. package/src/dpr/components/_dashboards/dashboard-section/utils.d.ts +5 -4
  45. package/src/dpr/components/_dashboards/dashboard-visualisation/types.d.ts +1 -1
  46. package/src/dpr/routes/journeys/request-report/filters/utils.d.ts +3 -3
  47. package/src/dpr/services/dashboardService.d.ts +1 -1
  48. package/test-app/mocks/mockClients/dashboards/dashboard-definitions.d.ts +21 -2
  49. package/test-app/mocks/mockClients/dashboards/definitions/parent-child/child-dashboard-1.d.ts +26 -2
  50. package/test-app/mocks/mockClients/dashboards/definitions/parent-child/child-dashboard-2.d.ts +21 -2
  51. package/test-app/mocks/mockClients/dashboards/definitions/parent-child/index.d.ts +21 -2
  52. package/test-app/mocks/mockClients/dashboards/definitions/parent-child/parent-dashboard.d.ts +42 -4
  53. package/test-app/mocks/mockClients/dashboards/mock-client.d.ts +42 -4
  54. package/test-app/mocks/mockClients/reports/mockReportDefinition.d.ts +21 -2
  55. package/test-app/mocks/mockClients/reports/mockReportingClient.d.ts +42 -4
@@ -8,6 +8,7 @@ export declare const definition: {
8
8
  description: string;
9
9
  visualisations: {
10
10
  id: string;
11
+ variantId?: string;
11
12
  type: "list" | "doughnut" | "bar" | "bar-timeseries" | "line" | "scorecard" | "scorecard-group" | "matrix-timeseries" | "line-timeseries";
12
13
  display: string;
13
14
  description?: string | null;
@@ -19,6 +20,7 @@ export declare const definition: {
19
20
  display: string;
20
21
  visualisations: {
21
22
  id: string;
23
+ variantId?: string;
22
24
  type: "list" | "doughnut" | "bar" | "bar-timeseries" | "line" | "scorecard" | "scorecard-group" | "matrix-timeseries" | "line-timeseries";
23
25
  display: string;
24
26
  description?: string | null;
@@ -8,6 +8,7 @@ export declare const definition: {
8
8
  description: string;
9
9
  visualisations: {
10
10
  id: string;
11
+ variantId?: string;
11
12
  type: "list" | "doughnut" | "bar" | "bar-timeseries" | "line" | "scorecard" | "scorecard-group" | "matrix-timeseries" | "line-timeseries";
12
13
  display: string;
13
14
  description?: string | null;
@@ -3,15 +3,16 @@
3
3
  var UserReports = require('../../types/UserReports.js');
4
4
  var _enum = require('../_filters/filter-input/enum.js');
5
5
  var ReportQuery = require('../../types/ReportQuery.js');
6
- var localsHelper = require('../../utils/localsHelper.js');
6
+ var definitionUtils = require('../../utils/definitionUtils.js');
7
7
  var ErrorHandler = require('../../utils/ErrorHandler/ErrorHandler.js');
8
- var DataPresentation = require('./DataPresentation.js');
8
+ var localsHelper = require('../../utils/localsHelper.js');
9
9
  var utils = require('./dashboard-section/utils.js');
10
- var definitionUtils = require('../../utils/definitionUtils.js');
10
+ var DataPresentation = require('./DataPresentation.js');
11
11
 
12
12
  class Dashboard extends DataPresentation {
13
13
  sections;
14
14
  dashboardData;
15
+ parentChildData = [];
15
16
  partialDate;
16
17
  dashboardFeatureFlags;
17
18
  constructor(services, res, req, definition, loadType, requestData) {
@@ -68,11 +69,12 @@ class Dashboard extends DataPresentation {
68
69
  * Gets the dashboard data
69
70
  */
70
71
  getDashboardData = async () => {
71
- this.dashboardData = this.loadType === UserReports.LoadType.SYNC ? await this.getSyncData() : await this.getAysncData();
72
+ this.dashboardData = this.loadType === UserReports.LoadType.SYNC ? await this.getSyncData() : await this.getAsyncData();
73
+ await this.setParentChildData();
72
74
  };
73
- getAysncData = async () => {
75
+ getAsyncData = async () => {
74
76
  const dashboardQueryRecord = this.reportQuery.toRecordWithFilterPrefix(true);
75
- const dashboardResultData = await this.services.dashboardService.getAsyncDashboard(this.token, this.id, this.reportId, this.tableId, dashboardQueryRecord);
77
+ const dashboardResultData = await this.services.dashboardService.getAsyncDashboard(this.token, this.reportId, this.id, this.tableId, dashboardQueryRecord);
76
78
  return Array.isArray(dashboardResultData) ? dashboardResultData.flat().filter(Boolean) : [];
77
79
  };
78
80
  getSyncData = async () => {
@@ -80,6 +82,46 @@ class Dashboard extends DataPresentation {
80
82
  const dashboardData = await this.services.dashboardService.getSyncDashboard(this.token, this.id, this.reportId, reportQueryRecord);
81
83
  return Array.isArray(dashboardData) ? dashboardData.flat().filter(Boolean) : [];
82
84
  };
85
+ setParentChildData = async () => {
86
+ // Get the child data, if applicable
87
+ const childVariants = this.definition?.childVariants;
88
+ this.parentChildData = !childVariants
89
+ ? []
90
+ : await this.getParentChildData(childVariants, this.services, this.token, this.req, this.res, this.requestData);
91
+ };
92
+ /**
93
+ * Gets the parent and child data for a parent child dashboard, returns in a single array with the parent data first, followed by the child data
94
+ * NOTE: Only available for Async
95
+ *
96
+ */
97
+ getParentChildData = async (childVariants, services, token, req, res, requestData) => {
98
+ const { definitionsPath: dataProductDefinitionsPath } = localsHelper.default.getValues(res);
99
+ const { reportId } = req.params;
100
+ const childExecutionData = requestData?.childExecutionData;
101
+ if (!childExecutionData) {
102
+ throw new Error('getParentChildData: No execution data found for child variants');
103
+ }
104
+ const allChildData = await Promise.all(childVariants.map(async (childVariant) => {
105
+ const query = new ReportQuery.ReportQuery({
106
+ fields: this.fields || [],
107
+ template: 'parent-child',
108
+ queryParams: req.query,
109
+ definitionsPath: dataProductDefinitionsPath,
110
+ }).toRecordWithFilterPrefix(true);
111
+ const childData = childExecutionData.find(e => e.variantId === childVariant.id);
112
+ if (!childData || !childData.tableId) {
113
+ throw new Error('getParentChildData: No matching child execution data found');
114
+ }
115
+ const { tableId: childTableId } = childData;
116
+ const childDashboard = await services.dashboardService.getAsyncDashboard(token, reportId, childVariant.id, childTableId, query);
117
+ return {
118
+ id: childVariant.id,
119
+ data: childDashboard.flat().filter(Boolean),
120
+ };
121
+ }));
122
+ const parentData = { id: this.definition.id, data: this.dashboardData };
123
+ return [parentData, ...allChildData];
124
+ };
83
125
  /**
84
126
  * Gets the relevant report details from the report definition
85
127
  *
@@ -98,7 +140,7 @@ class Dashboard extends DataPresentation {
98
140
  };
99
141
  };
100
142
  buildSections = () => {
101
- this.sections = utils.createDashboardSections(this.definition, this.dashboardData, this.reportQuery.toRecordWithFilterPrefix(true), this.dashboardFeatureFlags, this.partialDate);
143
+ this.sections = utils.createDashboardSections(this.definition, this.dashboardData, this.parentChildData, this.reportQuery.toRecordWithFilterPrefix(true), this.dashboardFeatureFlags, this.partialDate);
102
144
  };
103
145
  buildPartialDate = () => {
104
146
  let partialDate;
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard.js","sources":["../../../../../../../../../../src/dpr/components/_dashboards/Dashboard.ts"],"sourcesContent":["import { Request, Response } from 'express'\n\n// Types\nimport { components } from '../../types/api'\nimport { Services } from '../../types/Services'\nimport { LoadType, ReportType, RequestedReport } from '../../types/UserReports'\nimport { DashboardDataResponse } from '../../types/Metrics'\nimport { GranularDateRangeFilterValue, PartialDate } from '../_filters/types'\nimport { DashboardSection } from './dashboard-visualisation/types'\nimport { FilterType } from '../_filters/filter-input/enum'\n\n// Classes\nimport ReportQuery from '../../types/ReportQuery'\n\n// Helpers\nimport LocalsHelper from '../../utils/localsHelper'\nimport ErrorHandler from '../../utils/ErrorHandler/ErrorHandler'\nimport DataPresentation from './DataPresentation'\nimport { createDashboardSections } from './dashboard-section/utils'\nimport DefinitionUtils from '../../utils/definitionUtils'\n\ntype DashboardDefinition = components['schemas']['DashboardDefinition']\n\nexport default class Dashboard extends DataPresentation {\n sections!: DashboardSection[]\n\n dashboardData!: DashboardDataResponse[]\n\n partialDate!: PartialDate | undefined\n\n dashboardFeatureFlags: Record<string, boolean>\n\n constructor(\n services: Services,\n res: Response,\n req: Request,\n definition: DashboardDefinition,\n loadType: LoadType,\n requestData?: RequestedReport | undefined,\n ) {\n super(services, res, req, definition, loadType, ReportType.DASHBOARD, requestData)\n\n this.dashboardFeatureFlags = res.app.locals['featureFlags'].flags\n }\n\n build = async () => {\n const reportMeta = this.buildReportMeta(ReportType.DASHBOARD)\n\n this.buildDashboardDetails()\n\n await this.buildFilters()\n\n await this.buildSavedDefaultsConfig()\n\n this.buildAppliedFilters()\n\n this.buildReportQuery()\n\n await this.getData()\n\n if (this.expired) {\n return {\n expired: this.expired,\n }\n }\n\n this.buildSections()\n\n this.buildActions(ReportType.DASHBOARD)\n\n return {\n dashboardData: {\n ...reportMeta,\n ...this.reportDetails,\n sections: this.sections,\n filters: this.filterData,\n appliedFilters: this.appliedFilters,\n ...this.savedDefaultsConfig,\n ...this.actions,\n ...(this.extractedRequestData && this.extractedRequestData),\n },\n }\n }\n\n /**\n * Gets all the report data\n *\n */\n getData = async () => {\n try {\n await this.getDashboardData()\n } catch (error) {\n const dprError = new ErrorHandler(error).formatError()\n if (dprError.status === 404) {\n this.expired = true\n } else {\n throw error\n }\n }\n }\n\n /**\n * Gets the dashboard data\n */\n getDashboardData = async () => {\n this.dashboardData = this.loadType === LoadType.SYNC ? await this.getSyncData() : await this.getAysncData()\n }\n\n private getAysncData = async () => {\n const dashboardQueryRecord = this.reportQuery.toRecordWithFilterPrefix(true)\n\n const dashboardResultData = await this.services.dashboardService.getAsyncDashboard(\n this.token,\n this.id,\n this.reportId,\n this.tableId,\n dashboardQueryRecord,\n )\n\n return Array.isArray(dashboardResultData) ? dashboardResultData.flat().filter(Boolean) : []\n }\n\n private getSyncData = async () => {\n const reportQueryRecord = this.reportQuery.toRecordWithFilterPrefix(true)\n\n const dashboardData: DashboardDataResponse[][] = await this.services.dashboardService.getSyncDashboard(\n this.token,\n this.id,\n this.reportId,\n reportQueryRecord,\n )\n\n return Array.isArray(dashboardData) ? dashboardData.flat().filter(Boolean) : []\n }\n\n /**\n * Gets the relevant report details from the report definition\n *\n */\n buildDashboardDetails = async () => {\n const { definitionsPath } = LocalsHelper.getValues(this.res)\n\n const reportDefinition =\n this.res.locals['reportDefinitionSummary'] ??\n (await DefinitionUtils.getReportSummary(\n this.reportId,\n this.services.reportingService,\n this.token,\n definitionsPath,\n ))\n\n const { name, description } = this.definition\n\n this.reportDetails = {\n reportName: reportDefinition.name,\n name,\n description: description || reportDefinition.description || '',\n printable: false,\n fields: this.fields ?? [],\n }\n }\n\n buildSections = () => {\n this.sections = createDashboardSections(\n this.definition as DashboardDefinition,\n this.dashboardData,\n this.reportQuery.toRecordWithFilterPrefix(true),\n this.dashboardFeatureFlags,\n this.partialDate,\n )\n }\n\n buildPartialDate = () => {\n let partialDate: PartialDate | undefined\n const granularDateRangeFilter = <GranularDateRangeFilterValue | undefined>(\n this.filterData.find(f => f.type === FilterType.granularDateRange.toLowerCase())\n )\n if (granularDateRangeFilter) {\n partialDate = granularDateRangeFilter.value.partialDate\n }\n this.partialDate = partialDate\n }\n\n /**\n * Builds the report query\n */\n buildReportQuery = () => {\n const { definitionsPath } = LocalsHelper.getValues(this.res)\n\n const queryParams = {\n ...this.getCurrentQuery(),\n }\n\n this.reportQuery = new ReportQuery({\n fields: this.fields ?? [],\n queryParams,\n definitionsPath,\n reportType: ReportType.DASHBOARD,\n })\n }\n}\n"],"names":["ReportType","ErrorHandler","LoadType","LocalsHelper","DefinitionUtils","createDashboardSections","FilterType","ReportQuery"],"mappings":"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"}
1
+ {"version":3,"file":"Dashboard.js","sources":["../../../../../../../../../../src/dpr/components/_dashboards/Dashboard.ts"],"sourcesContent":["import { Request, Response } from 'express'\n\n// Types\nimport { DashboardParentChildData } from 'src/dpr/utils/TemplateBuilder/ParentChildDataBuilder/types'\nimport { components } from '../../types/api'\nimport { DashboardDataResponse } from '../../types/Metrics'\nimport { Services } from '../../types/Services'\nimport { LoadType, ReportType, RequestedReport } from '../../types/UserReports'\nimport { FilterType } from '../_filters/filter-input/enum'\nimport { GranularDateRangeFilterValue, PartialDate } from '../_filters/types'\nimport {\n DashboardDefinition as DashboardDefinitionWithChildVariants,\n DashboardSection,\n} from './dashboard-visualisation/types'\n\n// Classes\nimport ReportQuery from '../../types/ReportQuery'\n\n// Helpers\nimport DefinitionUtils from '../../utils/definitionUtils'\nimport ErrorHandler from '../../utils/ErrorHandler/ErrorHandler'\nimport LocalsHelper from '../../utils/localsHelper'\nimport { createDashboardSections } from './dashboard-section/utils'\nimport DataPresentation from './DataPresentation'\n\ntype DashboardDefinition = components['schemas']['DashboardDefinition']\n\nexport default class Dashboard extends DataPresentation {\n sections!: DashboardSection[]\n\n dashboardData!: DashboardDataResponse[]\n\n parentChildData: DashboardParentChildData[] = []\n\n partialDate!: PartialDate | undefined\n\n dashboardFeatureFlags: Record<string, boolean>\n\n constructor(\n services: Services,\n res: Response,\n req: Request,\n definition: DashboardDefinition,\n loadType: LoadType,\n requestData?: RequestedReport | undefined,\n ) {\n super(services, res, req, definition, loadType, ReportType.DASHBOARD, requestData)\n\n this.dashboardFeatureFlags = res.app.locals['featureFlags'].flags\n }\n\n build = async () => {\n const reportMeta = this.buildReportMeta(ReportType.DASHBOARD)\n\n this.buildDashboardDetails()\n\n await this.buildFilters()\n\n await this.buildSavedDefaultsConfig()\n\n this.buildAppliedFilters()\n\n this.buildReportQuery()\n\n await this.getData()\n\n if (this.expired) {\n return {\n expired: this.expired,\n }\n }\n\n this.buildSections()\n\n this.buildActions(ReportType.DASHBOARD)\n\n return {\n dashboardData: {\n ...reportMeta,\n ...this.reportDetails,\n sections: this.sections,\n filters: this.filterData,\n appliedFilters: this.appliedFilters,\n ...this.savedDefaultsConfig,\n ...this.actions,\n ...(this.extractedRequestData && this.extractedRequestData),\n },\n }\n }\n\n /**\n * Gets all the report data\n *\n */\n getData = async () => {\n try {\n await this.getDashboardData()\n } catch (error) {\n const dprError = new ErrorHandler(error).formatError()\n if (dprError.status === 404) {\n this.expired = true\n } else {\n throw error\n }\n }\n }\n\n /**\n * Gets the dashboard data\n */\n getDashboardData = async () => {\n this.dashboardData = this.loadType === LoadType.SYNC ? await this.getSyncData() : await this.getAsyncData()\n await this.setParentChildData()\n }\n\n private getAsyncData = async () => {\n const dashboardQueryRecord = this.reportQuery.toRecordWithFilterPrefix(true)\n\n const dashboardResultData = await this.services.dashboardService.getAsyncDashboard(\n this.token,\n this.reportId,\n this.id,\n this.tableId,\n dashboardQueryRecord,\n )\n\n return Array.isArray(dashboardResultData) ? dashboardResultData.flat().filter(Boolean) : []\n }\n\n private getSyncData = async () => {\n const reportQueryRecord = this.reportQuery.toRecordWithFilterPrefix(true)\n\n const dashboardData: DashboardDataResponse[][] = await this.services.dashboardService.getSyncDashboard(\n this.token,\n this.id,\n this.reportId,\n reportQueryRecord,\n )\n\n return Array.isArray(dashboardData) ? dashboardData.flat().filter(Boolean) : []\n }\n\n setParentChildData = async () => {\n // Get the child data, if applicable\n const childVariants = (this.definition as DashboardDefinitionWithChildVariants)?.childVariants\n\n this.parentChildData = !childVariants\n ? []\n : await this.getParentChildData(childVariants, this.services, this.token, this.req, this.res, this.requestData)\n }\n\n /**\n * Gets the parent and child data for a parent child dashboard, returns in a single array with the parent data first, followed by the child data\n * NOTE: Only available for Async\n *\n */\n getParentChildData = async (\n childVariants: DashboardDefinition[],\n services: Services,\n token: string,\n req: Request,\n res: Response,\n requestData?: RequestedReport,\n ): Promise<DashboardParentChildData[]> => {\n const { definitionsPath: dataProductDefinitionsPath } = LocalsHelper.getValues(res)\n const { reportId } = <{ reportId: string }>req.params\n const childExecutionData = requestData?.childExecutionData\n\n if (!childExecutionData) {\n throw new Error('getParentChildData: No execution data found for child variants')\n }\n\n const allChildData = await Promise.all(\n childVariants.map(async childVariant => {\n const query = new ReportQuery({\n fields: this.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('getParentChildData: No matching child execution data found')\n }\n const { tableId: childTableId } = childData\n\n const childDashboard = await services.dashboardService.getAsyncDashboard(\n token,\n reportId,\n childVariant.id,\n childTableId,\n query,\n )\n\n return {\n id: childVariant.id,\n data: childDashboard.flat().filter(Boolean),\n }\n }),\n )\n\n const parentData = { id: this.definition.id, data: this.dashboardData }\n\n return [parentData, ...allChildData]\n }\n\n /**\n * Gets the relevant report details from the report definition\n *\n */\n buildDashboardDetails = async () => {\n const { definitionsPath } = LocalsHelper.getValues(this.res)\n\n const reportDefinition =\n this.res.locals['reportDefinitionSummary'] ??\n (await DefinitionUtils.getReportSummary(\n this.reportId,\n this.services.reportingService,\n this.token,\n definitionsPath,\n ))\n\n const { name, description } = this.definition\n\n this.reportDetails = {\n reportName: reportDefinition.name,\n name,\n description: description || reportDefinition.description || '',\n printable: false,\n fields: this.fields ?? [],\n }\n }\n\n buildSections = () => {\n this.sections = createDashboardSections(\n this.definition as DashboardDefinition,\n this.dashboardData,\n this.parentChildData,\n this.reportQuery.toRecordWithFilterPrefix(true),\n this.dashboardFeatureFlags,\n this.partialDate,\n )\n }\n\n buildPartialDate = () => {\n let partialDate: PartialDate | undefined\n const granularDateRangeFilter = <GranularDateRangeFilterValue | undefined>(\n this.filterData.find(f => f.type === FilterType.granularDateRange.toLowerCase())\n )\n if (granularDateRangeFilter) {\n partialDate = granularDateRangeFilter.value.partialDate\n }\n this.partialDate = partialDate\n }\n\n /**\n * Builds the report query\n */\n buildReportQuery = () => {\n const { definitionsPath } = LocalsHelper.getValues(this.res)\n\n const queryParams = {\n ...this.getCurrentQuery(),\n }\n\n this.reportQuery = new ReportQuery({\n fields: this.fields ?? [],\n queryParams,\n definitionsPath,\n reportType: ReportType.DASHBOARD,\n })\n }\n}\n"],"names":["ReportType","ErrorHandler","LoadType","LocalsHelper","ReportQuery","DefinitionUtils","createDashboardSections","FilterType"],"mappings":";;;;;;;;;;;AA2Bc,MAAO,SAAU,SAAQ,gBAAgB,CAAA;AACrD,IAAA,QAAQ;AAER,IAAA,aAAa;IAEb,eAAe,GAA+B,EAAE;AAEhD,IAAA,WAAW;AAEX,IAAA,qBAAqB;IAErB,WAAA,CACE,QAAkB,EAClB,GAAa,EACb,GAAY,EACZ,UAA+B,EAC/B,QAAkB,EAClB,WAAyC,EAAA;AAEzC,QAAA,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAEA,sBAAU,CAAC,SAAS,EAAE,WAAW,CAAC;AAElF,QAAA,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK;IACnE;IAEA,KAAK,GAAG,YAAW;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAACA,sBAAU,CAAC,SAAS,CAAC;QAE7D,IAAI,CAAC,qBAAqB,EAAE;AAE5B,QAAA,MAAM,IAAI,CAAC,YAAY,EAAE;AAEzB,QAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE;QAErC,IAAI,CAAC,mBAAmB,EAAE;QAE1B,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,MAAM,IAAI,CAAC,OAAO,EAAE;AAEpB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;QACH;QAEA,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,IAAI,CAAC,YAAY,CAACA,sBAAU,CAAC,SAAS,CAAC;QAEvC,OAAO;AACL,YAAA,aAAa,EAAE;AACb,gBAAA,GAAG,UAAU;gBACb,GAAG,IAAI,CAAC,aAAa;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,UAAU;gBACxB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,GAAG,IAAI,CAAC,mBAAmB;gBAC3B,GAAG,IAAI,CAAC,OAAO;gBACf,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC;AAC5D,aAAA;SACF;AACH,IAAA,CAAC;AAED;;;AAGG;IACH,OAAO,GAAG,YAAW;AACnB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;QAC/B;QAAE,OAAO,KAAK,EAAE;YACd,MAAM,QAAQ,GAAG,IAAIC,yBAAY,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACtD,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;AAC3B,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB;iBAAO;AACL,gBAAA,MAAM,KAAK;YACb;QACF;AACF,IAAA,CAAC;AAED;;AAEG;IACH,gBAAgB,GAAG,YAAW;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,KAAKC,oBAAQ,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE;AAC3G,QAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE;AACjC,IAAA,CAAC;IAEO,YAAY,GAAG,YAAW;QAChC,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC;AAE5E,QAAA,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAChF,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,OAAO,EACZ,oBAAoB,CACrB;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;AAC7F,IAAA,CAAC;IAEO,WAAW,GAAG,YAAW;QAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC;QAEzE,MAAM,aAAa,GAA8B,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CACpG,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,QAAQ,EACb,iBAAiB,CAClB;QAED,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;AACjF,IAAA,CAAC;IAED,kBAAkB,GAAG,YAAW;;AAE9B,QAAA,MAAM,aAAa,GAAI,IAAI,CAAC,UAAmD,EAAE,aAAa;AAE9F,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACtB,cAAE;AACF,cAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC;AACnH,IAAA,CAAC;AAED;;;;AAIG;AACH,IAAA,kBAAkB,GAAG,OACnB,aAAoC,EACpC,QAAkB,EAClB,KAAa,EACb,GAAY,EACZ,GAAa,EACb,WAA6B,KACU;AACvC,QAAA,MAAM,EAAE,eAAe,EAAE,0BAA0B,EAAE,GAAGC,oBAAY,CAAC,SAAS,CAAC,GAAG,CAAC;AACnF,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAyB,GAAG,CAAC,MAAM;AACrD,QAAA,MAAM,kBAAkB,GAAG,WAAW,EAAE,kBAAkB;QAE1D,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC;QACnF;AAEA,QAAA,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,aAAa,CAAC,GAAG,CAAC,OAAM,YAAY,KAAG;AACrC,YAAA,MAAM,KAAK,GAAG,IAAIC,uBAAW,CAAC;AAC5B,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;AACzB,gBAAA,QAAQ,EAAE,cAAc;gBACxB,WAAW,EAAE,GAAG,CAAC,KAAK;AACtB,gBAAA,eAAe,EAAE,0BAA0B;AAC5C,aAAA,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC;AAEjC,YAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACpC,gBAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC;YAC/E;AACA,YAAA,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS;YAE3C,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CACtE,KAAK,EACL,QAAQ,EACR,YAAY,CAAC,EAAE,EACf,YAAY,EACZ,KAAK,CACN;YAED,OAAO;gBACL,EAAE,EAAE,YAAY,CAAC,EAAE;gBACnB,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;aAC5C;QACH,CAAC,CAAC,CACH;AAED,QAAA,MAAM,UAAU,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE;AAEvE,QAAA,OAAO,CAAC,UAAU,EAAE,GAAG,YAAY,CAAC;AACtC,IAAA,CAAC;AAED;;;AAGG;IACH,qBAAqB,GAAG,YAAW;AACjC,QAAA,MAAM,EAAE,eAAe,EAAE,GAAGD,oBAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAE5D,MAAM,gBAAgB,GACpB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,yBAAyB,CAAC;aACzC,MAAME,uBAAe,CAAC,gBAAgB,CACrC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAC9B,IAAI,CAAC,KAAK,EACV,eAAe,CAChB,CAAC;QAEJ,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU;QAE7C,IAAI,CAAC,aAAa,GAAG;YACnB,UAAU,EAAE,gBAAgB,CAAC,IAAI;YACjC,IAAI;AACJ,YAAA,WAAW,EAAE,WAAW,IAAI,gBAAgB,CAAC,WAAW,IAAI,EAAE;AAC9D,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;SAC1B;AACH,IAAA,CAAC;IAED,aAAa,GAAG,MAAK;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAGC,6BAAuB,CACrC,IAAI,CAAC,UAAiC,EACtC,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAC/C,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,WAAW,CACjB;AACH,IAAA,CAAC;IAED,gBAAgB,GAAG,MAAK;AACtB,QAAA,IAAI,WAAoC;QACxC,MAAM,uBAAuB,IAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAKC,gBAAU,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,CACjF;QACD,IAAI,uBAAuB,EAAE;AAC3B,YAAA,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,WAAW;QACzD;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAChC,IAAA,CAAC;AAED;;AAEG;IACH,gBAAgB,GAAG,MAAK;AACtB,QAAA,MAAM,EAAE,eAAe,EAAE,GAAGJ,oBAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AAE5D,QAAA,MAAM,WAAW,GAAG;YAClB,GAAG,IAAI,CAAC,eAAe,EAAE;SAC1B;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,IAAIC,uBAAW,CAAC;AACjC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACzB,WAAW;YACX,eAAe;YACf,UAAU,EAAEJ,sBAAU,CAAC,SAAS;AACjC,SAAA,CAAC;AACJ,IAAA,CAAC;AACF;;;;"}
@@ -1,43 +1,47 @@
1
1
  'use strict';
2
2
 
3
- var types = require('../dashboard-visualisation/types.js');
4
- var utils$3 = require('../scorecard/utils.js');
5
- var Scorecard = require('../scorecard/Scorecard.js');
6
- var ScorecardGroup = require('../scorecard-group/ScorecardGroup.js');
7
- var utils$2 = require('../dashboard-list/utils.js');
8
3
  var utils$1 = require('../../_charts/utils.js');
4
+ var utils$2 = require('../dashboard-list/utils.js');
5
+ var types = require('../dashboard-visualisation/types.js');
9
6
  var utils = require('../dashboard-visualisation/utils.js');
7
+ var ScorecardGroup = require('../scorecard-group/ScorecardGroup.js');
8
+ var Scorecard = require('../scorecard/Scorecard.js');
9
+ var utils$3 = require('../scorecard/utils.js');
10
10
 
11
- const createDashboardSections = (dashboardDefinition, dashboardData, query, dashboardFeatureFlags, partialDate) => {
11
+ const createDashboardSections = (dashboardDefinition, dashboardData, parentChildData, query, dashboardFeatureFlags, partialDate) => {
12
12
  return dashboardDefinition.sections.map((section) => {
13
13
  const { id, display: title, description } = section;
14
14
  const featureFlagVisTypeMap = utils.getFeatureFlagVisTypeMap(dashboardFeatureFlags);
15
15
  let hasScorecard = false;
16
16
  const visualisations = section.visualisations.map((visDefinition) => {
17
- const { type, display, description: visDescription, id: visId } = visDefinition;
17
+ const { type, variantId, display, description: visDescription, id: visId } = visDefinition;
18
18
  const isEnabled = featureFlagVisTypeMap[type];
19
- let data;
19
+ const dashboardDataForVis = parentChildData.find(data => data.id === variantId)?.data || dashboardData;
20
+ let chartData;
20
21
  switch (type) {
21
22
  case types.DashboardVisualisationType.LIST:
22
- data = utils$2.default.createList(visDefinition, dashboardData);
23
+ chartData = utils$2.default.createList(visDefinition, dashboardDataForVis);
23
24
  break;
24
25
  case types.DashboardVisualisationType.SCORECARD:
25
26
  hasScorecard = true;
26
- data = new Scorecard.ScorecardVisualisation().withDefinition(visDefinition).withData(dashboardData).build();
27
+ chartData = new Scorecard.ScorecardVisualisation().withDefinition(visDefinition).withData(dashboardDataForVis).build();
27
28
  break;
28
29
  case types.DashboardVisualisationType.SCORECARD_GROUP:
29
- data = new ScorecardGroup.ScorecardGroupVisualisation().withDefinition(visDefinition).withData(dashboardData).build();
30
+ chartData = new ScorecardGroup.ScorecardGroupVisualisation()
31
+ .withDefinition(visDefinition)
32
+ .withData(dashboardDataForVis)
33
+ .build();
30
34
  break;
31
35
  case types.DashboardVisualisationType.BAR:
32
36
  case types.DashboardVisualisationType.LINE:
33
37
  case types.DashboardVisualisationType.DONUT: {
34
- data = utils$1.default.createChart(visDefinition, dashboardData, type);
38
+ chartData = utils$1.default.createChart(visDefinition, dashboardDataForVis, type);
35
39
  break;
36
40
  }
37
41
  case types.DashboardVisualisationType.MATRIX_TIMESERIES:
38
42
  case types.DashboardVisualisationType.BAR_TIMESERIES:
39
43
  case types.DashboardVisualisationType.LINE_TIMESERIES: {
40
- data = utils$1.default.createTimeseriesCharts(visDefinition, dashboardData, type, query, partialDate);
44
+ chartData = utils$1.default.createTimeseriesCharts(visDefinition, dashboardDataForVis, type, query, partialDate);
41
45
  break;
42
46
  }
43
47
  }
@@ -46,7 +50,7 @@ const createDashboardSections = (dashboardDefinition, dashboardData, query, dash
46
50
  title: display || '',
47
51
  description: visDescription || '',
48
52
  type,
49
- data,
53
+ data: chartData,
50
54
  isEnabled: isEnabled ?? true,
51
55
  };
52
56
  });
@@ -72,7 +76,7 @@ const addVariantIdToSection = (section, variantId) => ({
72
76
  /**
73
77
  * Builds a master section collection from a parent dashboard and its child variants.
74
78
  *
75
- * @param {DashboardDefintion} definition
79
+ * @param {DashboardDefinition} definition
76
80
  * @return {*} {components['schemas']['DashboardSectionDefinition'][]}
77
81
  */
78
82
  const buildMasterSections = (definition) => {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../../../../../../src/dpr/components/_dashboards/dashboard-section/utils.ts"],"sourcesContent":["import { DashboardDataResponse } from '../../../types/Metrics'\nimport { components } from '../../../types/api'\nimport { PartialDate } from '../../_filters/types'\nimport {\n DashboardDefintion,\n DashboardSection,\n DashboardVisualisation,\n DashboardVisualisationType,\n} from '../dashboard-visualisation/types'\nimport ScorecardsUtils from '../scorecard/utils'\nimport ScorecardVisualisation from '../scorecard/Scorecard'\nimport ScorecardGroupVisualisation from '../scorecard-group/ScorecardGroup'\nimport DashboardListUtils from '../dashboard-list/utils'\nimport ChartUtils from '../../_charts/utils'\nimport { getFeatureFlagVisTypeMap } from '../dashboard-visualisation/utils'\n\nexport const createDashboardSections = (\n dashboardDefinition: components['schemas']['DashboardDefinition'],\n dashboardData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n dashboardFeatureFlags: Record<string, boolean>,\n partialDate?: PartialDate,\n): DashboardSection[] => {\n return dashboardDefinition.sections.map((section: components['schemas']['DashboardSectionDefinition']) => {\n const { id, display: title, description } = section\n const featureFlagVisTypeMap = getFeatureFlagVisTypeMap(dashboardFeatureFlags)\n\n let hasScorecard = false\n const visualisations: DashboardVisualisation[] = section.visualisations.map(\n (visDefinition: components['schemas']['DashboardVisualisationDefinition']) => {\n const { type, display, description: visDescription, id: visId } = visDefinition\n const isEnabled = featureFlagVisTypeMap[type]\n\n let data: DashboardVisualisation['data'] | undefined\n\n switch (type) {\n case DashboardVisualisationType.LIST:\n data = DashboardListUtils.createList(visDefinition, dashboardData)\n break\n\n case DashboardVisualisationType.SCORECARD:\n hasScorecard = true\n data = new ScorecardVisualisation().withDefinition(visDefinition).withData(dashboardData).build()\n break\n\n case DashboardVisualisationType.SCORECARD_GROUP:\n data = new ScorecardGroupVisualisation().withDefinition(visDefinition).withData(dashboardData).build()\n break\n\n case DashboardVisualisationType.BAR:\n case DashboardVisualisationType.LINE:\n case DashboardVisualisationType.DONUT: {\n data = ChartUtils.createChart(visDefinition, dashboardData, type)\n break\n }\n case DashboardVisualisationType.MATRIX_TIMESERIES:\n case DashboardVisualisationType.BAR_TIMESERIES:\n case DashboardVisualisationType.LINE_TIMESERIES: {\n data = ChartUtils.createTimeseriesCharts(visDefinition, dashboardData, type, query, partialDate)\n break\n }\n default:\n break\n }\n\n return {\n id: visId,\n title: display || '',\n description: visDescription || '',\n type,\n data,\n isEnabled: isEnabled ?? true,\n }\n },\n )\n\n if (hasScorecard)\n ScorecardsUtils.mergeScorecardsIntoGroup(\n visualisations,\n featureFlagVisTypeMap[DashboardVisualisationType.SCORECARD_GROUP],\n )\n\n return { id, title: title || '', description: description || '', visualisations }\n })\n}\n\n/**\n * Add variant ID to section\n *\n * @param {components['schemas']['DashboardSectionDefinition']} section\n * @param {string} variantId\n * @return {*} {components['schemas']['DashboardSectionDefinition']}\n */\nexport const addVariantIdToSection = (\n section: components['schemas']['DashboardSectionDefinition'],\n variantId: string,\n): components['schemas']['DashboardSectionDefinition'] => ({\n ...section,\n visualisations: section.visualisations.map(visualisation => ({\n ...visualisation,\n variantId,\n })),\n})\n\n/**\n * Builds a master section collection from a parent dashboard and its child variants.\n *\n * @param {DashboardDefintion} definition\n * @return {*} {components['schemas']['DashboardSectionDefinition'][]}\n */\nexport const buildMasterSections = (\n definition: DashboardDefintion, // TODO: Update this type to components['schemas']['DashboardDefinition'] when `childVariants` field is present\n): components['schemas']['DashboardSectionDefinition'][] => {\n const parentSections = definition.sections.map(section => addVariantIdToSection(section, definition.id))\n\n return definition.childVariants.reduce(\n (sections, childVariant) =>\n childVariant.sections\n .map(section => addVariantIdToSection(section, childVariant.id))\n .reduce(mergeSection, sections),\n parentSections,\n )\n}\n\n/**\n * Merges the sections\n *\n * Rules:\n * - Parent sections are added first and retain their original order.\n * - Child variants are processed in array order.\n * - Child sections are processed in section order within each variant.\n * - If a child section ID matches an existing section ID, its visualisations are appended to that section.\n * - If a child section ID does not exist, the section is appended to the end of the collection.\n * - Visualisation order is preserved as defined in the source section\n *\n * @param {components['schemas']['DashboardSectionDefinition'][]} sections\n * @param {components['schemas']['DashboardSectionDefinition']} section\n * @return {*}\n */\nconst mergeSection = (\n sections: components['schemas']['DashboardSectionDefinition'][],\n section: components['schemas']['DashboardSectionDefinition'],\n) => {\n const existingIndex = sections.findIndex(existing => existing.id === section.id)\n\n if (existingIndex === -1) {\n return [...sections, section]\n }\n\n return sections.map((existing, index) =>\n index === existingIndex\n ? {\n ...existing,\n visualisations: [...existing.visualisations, ...section.visualisations],\n }\n : existing,\n )\n}\n"],"names":["getFeatureFlagVisTypeMap","DashboardVisualisationType","DashboardListUtils","ScorecardVisualisation","ScorecardGroupVisualisation","ChartUtils","ScorecardsUtils"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../../../../../../src/dpr/components/_dashboards/dashboard-section/utils.ts"],"sourcesContent":["import { DashboardParentChildData } from 'src/dpr/utils/TemplateBuilder/ParentChildDataBuilder/types'\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport { components } from '../../../types/api'\nimport ChartUtils from '../../_charts/utils'\nimport { PartialDate } from '../../_filters/types'\nimport DashboardListUtils from '../dashboard-list/utils'\nimport {\n DashboardDefinition,\n DashboardSection,\n DashboardVisualisation,\n DashboardVisualisationType,\n} from '../dashboard-visualisation/types'\nimport { getFeatureFlagVisTypeMap } from '../dashboard-visualisation/utils'\nimport ScorecardGroupVisualisation from '../scorecard-group/ScorecardGroup'\nimport ScorecardVisualisation from '../scorecard/Scorecard'\nimport ScorecardsUtils from '../scorecard/utils'\n\nexport const createDashboardSections = (\n dashboardDefinition: components['schemas']['DashboardDefinition'],\n dashboardData: DashboardDataResponse[],\n parentChildData: DashboardParentChildData[],\n query: Record<string, string | string[]>,\n dashboardFeatureFlags: Record<string, boolean>,\n partialDate?: PartialDate,\n): DashboardSection[] => {\n return dashboardDefinition.sections.map((section: components['schemas']['DashboardSectionDefinition']) => {\n const { id, display: title, description } = section\n const featureFlagVisTypeMap = getFeatureFlagVisTypeMap(dashboardFeatureFlags)\n\n let hasScorecard = false\n const visualisations: DashboardVisualisation[] = section.visualisations.map(\n (visDefinition: components['schemas']['DashboardVisualisationDefinition']) => {\n const { type, variantId, display, description: visDescription, id: visId } = visDefinition\n const isEnabled = featureFlagVisTypeMap[type]\n\n const dashboardDataForVis = parentChildData.find(data => data.id === variantId)?.data || dashboardData\n let chartData: DashboardVisualisation['data']\n\n switch (type) {\n case DashboardVisualisationType.LIST:\n chartData = DashboardListUtils.createList(visDefinition, dashboardDataForVis)\n break\n\n case DashboardVisualisationType.SCORECARD:\n hasScorecard = true\n chartData = new ScorecardVisualisation().withDefinition(visDefinition).withData(dashboardDataForVis).build()\n break\n\n case DashboardVisualisationType.SCORECARD_GROUP:\n chartData = new ScorecardGroupVisualisation()\n .withDefinition(visDefinition)\n .withData(dashboardDataForVis)\n .build()\n break\n\n case DashboardVisualisationType.BAR:\n case DashboardVisualisationType.LINE:\n case DashboardVisualisationType.DONUT: {\n chartData = ChartUtils.createChart(visDefinition, dashboardDataForVis, type)\n break\n }\n case DashboardVisualisationType.MATRIX_TIMESERIES:\n case DashboardVisualisationType.BAR_TIMESERIES:\n case DashboardVisualisationType.LINE_TIMESERIES: {\n chartData = ChartUtils.createTimeseriesCharts(visDefinition, dashboardDataForVis, type, query, partialDate)\n break\n }\n default:\n break\n }\n\n return {\n id: visId,\n title: display || '',\n description: visDescription || '',\n type,\n data: chartData,\n isEnabled: isEnabled ?? true,\n }\n },\n )\n\n if (hasScorecard)\n ScorecardsUtils.mergeScorecardsIntoGroup(\n visualisations,\n featureFlagVisTypeMap[DashboardVisualisationType.SCORECARD_GROUP],\n )\n\n return { id, title: title || '', description: description || '', visualisations }\n })\n}\n\n/**\n * Add variant ID to section\n *\n * @param {components['schemas']['DashboardSectionDefinition']} section\n * @param {string} variantId\n * @return {*} {components['schemas']['DashboardSectionDefinition']}\n */\nexport const addVariantIdToSection = (\n section: components['schemas']['DashboardSectionDefinition'],\n variantId: string,\n): components['schemas']['DashboardSectionDefinition'] => ({\n ...section,\n visualisations: section.visualisations.map(visualisation => ({\n ...visualisation,\n variantId,\n })),\n})\n\n/**\n * Builds a master section collection from a parent dashboard and its child variants.\n *\n * @param {DashboardDefinition} definition\n * @return {*} {components['schemas']['DashboardSectionDefinition'][]}\n */\nexport const buildMasterSections = (\n definition: DashboardDefinition, // TODO: Update this type to components['schemas']['DashboardDefinition'] when `childVariants` field is present\n): components['schemas']['DashboardSectionDefinition'][] => {\n const parentSections = definition.sections.map(section => addVariantIdToSection(section, definition.id))\n\n return definition.childVariants.reduce(\n (sections, childVariant) =>\n childVariant.sections\n .map(section => addVariantIdToSection(section, childVariant.id))\n .reduce(mergeSection, sections),\n parentSections,\n )\n}\n\n/**\n * Merges the sections\n *\n * Rules:\n * - Parent sections are added first and retain their original order.\n * - Child variants are processed in array order.\n * - Child sections are processed in section order within each variant.\n * - If a child section ID matches an existing section ID, its visualisations are appended to that section.\n * - If a child section ID does not exist, the section is appended to the end of the collection.\n * - Visualisation order is preserved as defined in the source section\n *\n * @param {components['schemas']['DashboardSectionDefinition'][]} sections\n * @param {components['schemas']['DashboardSectionDefinition']} section\n * @return {*}\n */\nconst mergeSection = (\n sections: components['schemas']['DashboardSectionDefinition'][],\n section: components['schemas']['DashboardSectionDefinition'],\n) => {\n const existingIndex = sections.findIndex(existing => existing.id === section.id)\n\n if (existingIndex === -1) {\n return [...sections, section]\n }\n\n return sections.map((existing, index) =>\n index === existingIndex\n ? {\n ...existing,\n visualisations: [...existing.visualisations, ...section.visualisations],\n }\n : existing,\n )\n}\n"],"names":["getFeatureFlagVisTypeMap","DashboardVisualisationType","DashboardListUtils","ScorecardVisualisation","ScorecardGroupVisualisation","ChartUtils","ScorecardsUtils"],"mappings":";;;;;;;;;;AAiBO,MAAM,uBAAuB,GAAG,CACrC,mBAAiE,EACjE,aAAsC,EACtC,eAA2C,EAC3C,KAAwC,EACxC,qBAA8C,EAC9C,WAAyB,KACH;IACtB,OAAO,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAA4D,KAAI;QACvG,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO;AACnD,QAAA,MAAM,qBAAqB,GAAGA,8BAAwB,CAAC,qBAAqB,CAAC;QAE7E,IAAI,YAAY,GAAG,KAAK;QACxB,MAAM,cAAc,GAA6B,OAAO,CAAC,cAAc,CAAC,GAAG,CACzE,CAAC,aAAwE,KAAI;AAC3E,YAAA,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,aAAa;AAC1F,YAAA,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC;YAE7C,MAAM,mBAAmB,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,IAAI,IAAI,aAAa;AACtG,YAAA,IAAI,SAAyC;YAE7C,QAAQ,IAAI;gBACV,KAAKC,gCAA0B,CAAC,IAAI;oBAClC,SAAS,GAAGC,eAAkB,CAAC,UAAU,CAAC,aAAa,EAAE,mBAAmB,CAAC;oBAC7E;gBAEF,KAAKD,gCAA0B,CAAC,SAAS;oBACvC,YAAY,GAAG,IAAI;AACnB,oBAAA,SAAS,GAAG,IAAIE,gCAAsB,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE;oBAC5G;gBAEF,KAAKF,gCAA0B,CAAC,eAAe;oBAC7C,SAAS,GAAG,IAAIG,0CAA2B;yBACxC,cAAc,CAAC,aAAa;yBAC5B,QAAQ,CAAC,mBAAmB;AAC5B,yBAAA,KAAK,EAAE;oBACV;gBAEF,KAAKH,gCAA0B,CAAC,GAAG;gBACnC,KAAKA,gCAA0B,CAAC,IAAI;AACpC,gBAAA,KAAKA,gCAA0B,CAAC,KAAK,EAAE;oBACrC,SAAS,GAAGI,eAAU,CAAC,WAAW,CAAC,aAAa,EAAE,mBAAmB,EAAE,IAAI,CAAC;oBAC5E;gBACF;gBACA,KAAKJ,gCAA0B,CAAC,iBAAiB;gBACjD,KAAKA,gCAA0B,CAAC,cAAc;AAC9C,gBAAA,KAAKA,gCAA0B,CAAC,eAAe,EAAE;AAC/C,oBAAA,SAAS,GAAGI,eAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC;oBAC3G;gBACF;;YAKF,OAAO;AACL,gBAAA,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,OAAO,IAAI,EAAE;gBACpB,WAAW,EAAE,cAAc,IAAI,EAAE;gBACjC,IAAI;AACJ,gBAAA,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,SAAS,IAAI,IAAI;aAC7B;AACH,QAAA,CAAC,CACF;AAED,QAAA,IAAI,YAAY;AACd,YAAAC,eAAe,CAAC,wBAAwB,CACtC,cAAc,EACd,qBAAqB,CAACL,gCAA0B,CAAC,eAAe,CAAC,CAClE;AAEH,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,IAAI,EAAE,EAAE,cAAc,EAAE;AACnF,IAAA,CAAC,CAAC;AACJ;AAEA;;;;;;AAMG;AACI,MAAM,qBAAqB,GAAG,CACnC,OAA4D,EAC5D,SAAiB,MACwC;AACzD,IAAA,GAAG,OAAO;IACV,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,KAAK;AAC3D,QAAA,GAAG,aAAa;QAChB,SAAS;AACV,KAAA,CAAC,CAAC;AACJ,CAAA;AAED;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,CACjC,UAA+B,KAC0B;IACzD,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;AAExG,IAAA,OAAO,UAAU,CAAC,aAAa,CAAC,MAAM,CACpC,CAAC,QAAQ,EAAE,YAAY,KACrB,YAAY,CAAC;AACV,SAAA,GAAG,CAAC,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;SAC9D,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,EACnC,cAAc,CACf;AACH;AAEA;;;;;;;;;;;;;;AAcG;AACH,MAAM,YAAY,GAAG,CACnB,QAA+D,EAC/D,OAA4D,KAC1D;AACF,IAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;AAEhF,IAAA,IAAI,aAAa,KAAK,EAAE,EAAE;AACxB,QAAA,OAAO,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC;IAC/B;AAEA,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,KAClC,KAAK,KAAK;AACR,UAAE;AACE,YAAA,GAAG,QAAQ;YACX,cAAc,EAAE,CAAC,GAAG,QAAQ,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;AACxE;UACD,QAAQ,CACb;AACH,CAAC;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../../../../../../../../src/dpr/components/_dashboards/dashboard-visualisation/types.ts"],"sourcesContent":["import z from 'zod'\nimport { components } from '../../../types/api'\nimport { ChartDetails } from '../../../types/Charts'\nimport { BarTimeseriesDefinitionMeasure } from '../../_charts/chart/bar-timeseries/types'\nimport { BarDefinitionMeasure } from '../../_charts/chart/bar/types'\nimport { ChartOptionsType } from '../../_charts/chart/chart-config'\nimport { DoughnutDefinitionMeasure } from '../../_charts/chart/doughnut/types'\nimport { MatrixChartData } from '../../_charts/chart/heatmap/types'\nimport { LineTimeseriesDefinitionMeasure } from '../../_charts/chart/line-timeseries/types'\nimport { LineDefinitionMeasure } from '../../_charts/chart/line/types'\nimport { PartialDate } from '../../_filters/types'\nimport { Scorecard, ScorecardGroup } from '../scorecard/types'\nimport DashboardVisualisationSchemas from './Validate'\n\nexport interface DashboardSection {\n id: string\n title?: string\n description?: string\n visualisations?: DashboardVisualisation[]\n}\n\nexport interface DashboardVisualisation {\n id: string\n type: components['schemas']['DashboardVisualisationDefinition']['type']\n title?: string | undefined\n description?: string | undefined\n isEnabled: boolean\n data:\n | Scorecard\n | Scorecard[]\n | ScorecardGroup[]\n | DashboardVisualisationCardData\n | DashboardVisualisationTable\n | undefined\n}\n\nexport interface DashboardVisualisationCardData {\n chart?: DashboardVisualisationData | undefined\n table?: MoJTable | undefined\n details?: ChartDetails | undefined\n}\n\nexport interface DashboardVisualisationData {\n type: DashboardVisualisationType\n options?: DashboardVisualisationDataOptions\n data: DashboardVisualisationDataValues\n}\n\ninterface DashboardVisualisationDataOptions {\n height?: number\n unit?: components['schemas']['DashboardVisualisationColumnDefinition']['unit']\n timeseries?: boolean\n}\n\nexport interface DashboardVisualisationDataValues {\n labels?: string[]\n datasets: DashboardVisualisationDataSet[]\n axis?: 'x' | 'y'\n config: ChartOptionsType\n partialDate?: PartialDate | undefined\n}\n\nexport interface DashboardVisualisationDataSet {\n label: string\n data: number[] | MatrixChartData[]\n total?: number\n}\n\nexport interface DashboardVisualisationTable {\n table: MoJTable\n ts?: string\n}\n\nexport interface MoJTable {\n head: MoJTableHead[]\n rows: MoJTableRow[][]\n}\n\nexport interface MoJTableRow {\n text?: string\n html?: string\n}\n\nexport interface MoJTableHead {\n text?: string\n html?: string\n classes?: string\n attributes?: Record<string, string>\n}\n\nexport enum DashboardVisualisationType {\n LIST = 'list',\n DONUT = 'doughnut',\n BAR = 'bar',\n LINE = 'line',\n MATRIX = 'matrix',\n MATRIX_TIMESERIES = 'matrix-timeseries',\n BAR_TIMESERIES = 'bar-timeseries',\n LINE_TIMESERIES = 'line-timeseries',\n SCORECARD = 'scorecard',\n SCORECARD_GROUP = 'scorecard-group',\n}\n\nexport type DashboardVisualisationOptions = ListDashboardVisualisationOptions | BucketDashboardVisualisationOptions\n\nexport interface ListDashboardVisualisationOptions {\n showLatest?: boolean\n columnsAsList?: boolean\n}\n\nexport interface BucketDashboardVisualisationOptions {\n useRagColour?: boolean\n buckets?: DashboardVisualisationBucket[]\n baseColour?: string\n}\n\nexport interface DashboardVisualisationBucket {\n min?: number | undefined\n max?: number | undefined\n hexColour?: string | undefined\n}\n\nexport type VisualisationDefinitionType = z.infer<typeof DashboardVisualisationSchemas.DashboardVisualisationSchema>\nexport type VisualisationDefinitionKey = z.infer<typeof DashboardVisualisationSchemas.DashboardVisualisationKeySchema>\nexport type VisualisationDefinitionMeasure = z.infer<\n typeof DashboardVisualisationSchemas.DashboardVisualisationMeasureSchema\n>\n\nexport type ChartMeasure =\n | BarDefinitionMeasure\n | DoughnutDefinitionMeasure\n | LineDefinitionMeasure\n | VisualisationDefinitionMeasure\n\nexport type TimeseriesChartMeasure = LineTimeseriesDefinitionMeasure[] | BarTimeseriesDefinitionMeasure[]\n\n// NOTE: This is a temporary type while to mock the new field which will be added the the schema in ticket https://dsdmoj.atlassian.net/browse/DPR2-2981\n// TODO: Remove this type and update all references to it when the components['schemas']['DashboardDefinition'] type is up to date\nexport type DashboardDefintion = components['schemas']['DashboardDefinition'] & {\n childVariants: components['schemas']['DashboardDefinition'][]\n}\n"],"names":["DashboardVisualisationType"],"mappings":";;AA0FYA;AAAZ,CAAA,UAAY,0BAA0B,EAAA;AACpC,IAAA,0BAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,0BAAA,CAAA,OAAA,CAAA,GAAA,UAAkB;AAClB,IAAA,0BAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,0BAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,0BAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,0BAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,0BAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,0BAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,0BAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,0BAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACrC,CAAC,EAXWA,kCAA0B,KAA1BA,kCAA0B,GAAA,EAAA,CAAA,CAAA;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../../../../../../../../src/dpr/components/_dashboards/dashboard-visualisation/types.ts"],"sourcesContent":["import z from 'zod'\nimport { components } from '../../../types/api'\nimport { ChartDetails } from '../../../types/Charts'\nimport { BarTimeseriesDefinitionMeasure } from '../../_charts/chart/bar-timeseries/types'\nimport { BarDefinitionMeasure } from '../../_charts/chart/bar/types'\nimport { ChartOptionsType } from '../../_charts/chart/chart-config'\nimport { DoughnutDefinitionMeasure } from '../../_charts/chart/doughnut/types'\nimport { MatrixChartData } from '../../_charts/chart/heatmap/types'\nimport { LineTimeseriesDefinitionMeasure } from '../../_charts/chart/line-timeseries/types'\nimport { LineDefinitionMeasure } from '../../_charts/chart/line/types'\nimport { PartialDate } from '../../_filters/types'\nimport { Scorecard, ScorecardGroup } from '../scorecard/types'\nimport DashboardVisualisationSchemas from './Validate'\n\nexport interface DashboardSection {\n id: string\n title?: string\n description?: string\n visualisations?: DashboardVisualisation[]\n}\n\nexport interface DashboardVisualisation {\n id: string\n type: components['schemas']['DashboardVisualisationDefinition']['type']\n title?: string | undefined\n description?: string | undefined\n isEnabled: boolean\n data:\n | Scorecard\n | Scorecard[]\n | ScorecardGroup[]\n | DashboardVisualisationCardData\n | DashboardVisualisationTable\n | undefined\n}\n\nexport interface DashboardVisualisationCardData {\n chart?: DashboardVisualisationData | undefined\n table?: MoJTable | undefined\n details?: ChartDetails | undefined\n}\n\nexport interface DashboardVisualisationData {\n type: DashboardVisualisationType\n options?: DashboardVisualisationDataOptions\n data: DashboardVisualisationDataValues\n}\n\ninterface DashboardVisualisationDataOptions {\n height?: number\n unit?: components['schemas']['DashboardVisualisationColumnDefinition']['unit']\n timeseries?: boolean\n}\n\nexport interface DashboardVisualisationDataValues {\n labels?: string[]\n datasets: DashboardVisualisationDataSet[]\n axis?: 'x' | 'y'\n config: ChartOptionsType\n partialDate?: PartialDate | undefined\n}\n\nexport interface DashboardVisualisationDataSet {\n label: string\n data: number[] | MatrixChartData[]\n total?: number\n}\n\nexport interface DashboardVisualisationTable {\n table: MoJTable\n ts?: string\n}\n\nexport interface MoJTable {\n head: MoJTableHead[]\n rows: MoJTableRow[][]\n}\n\nexport interface MoJTableRow {\n text?: string\n html?: string\n}\n\nexport interface MoJTableHead {\n text?: string\n html?: string\n classes?: string\n attributes?: Record<string, string>\n}\n\nexport enum DashboardVisualisationType {\n LIST = 'list',\n DONUT = 'doughnut',\n BAR = 'bar',\n LINE = 'line',\n MATRIX = 'matrix',\n MATRIX_TIMESERIES = 'matrix-timeseries',\n BAR_TIMESERIES = 'bar-timeseries',\n LINE_TIMESERIES = 'line-timeseries',\n SCORECARD = 'scorecard',\n SCORECARD_GROUP = 'scorecard-group',\n}\n\nexport type DashboardVisualisationOptions = ListDashboardVisualisationOptions | BucketDashboardVisualisationOptions\n\nexport interface ListDashboardVisualisationOptions {\n showLatest?: boolean\n columnsAsList?: boolean\n}\n\nexport interface BucketDashboardVisualisationOptions {\n useRagColour?: boolean\n buckets?: DashboardVisualisationBucket[]\n baseColour?: string\n}\n\nexport interface DashboardVisualisationBucket {\n min?: number | undefined\n max?: number | undefined\n hexColour?: string | undefined\n}\n\nexport type VisualisationDefinitionType = z.infer<typeof DashboardVisualisationSchemas.DashboardVisualisationSchema>\nexport type VisualisationDefinitionKey = z.infer<typeof DashboardVisualisationSchemas.DashboardVisualisationKeySchema>\nexport type VisualisationDefinitionMeasure = z.infer<\n typeof DashboardVisualisationSchemas.DashboardVisualisationMeasureSchema\n>\n\nexport type ChartMeasure =\n | BarDefinitionMeasure\n | DoughnutDefinitionMeasure\n | LineDefinitionMeasure\n | VisualisationDefinitionMeasure\n\nexport type TimeseriesChartMeasure = LineTimeseriesDefinitionMeasure[] | BarTimeseriesDefinitionMeasure[]\n\n// NOTE: This is a temporary type while to mock the new field which will be added the the schema in ticket https://dsdmoj.atlassian.net/browse/DPR2-2981\n// TODO: Remove this type and update all references to it when the components['schemas']['DashboardDefinition'] type is up to date\nexport type DashboardDefinition = components['schemas']['DashboardDefinition'] & {\n childVariants: components['schemas']['DashboardDefinition'][]\n}\n"],"names":["DashboardVisualisationType"],"mappings":";;AA0FYA;AAAZ,CAAA,UAAY,0BAA0B,EAAA;AACpC,IAAA,0BAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,0BAAA,CAAA,OAAA,CAAA,GAAA,UAAkB;AAClB,IAAA,0BAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,0BAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,0BAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,0BAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,0BAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,0BAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,0BAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,0BAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACrC,CAAC,EAXWA,kCAA0B,KAA1BA,kCAA0B,GAAA,EAAA,CAAA,CAAA;;"}
@@ -26,8 +26,8 @@ const ScorecardSchema = z.z.object({
26
26
  measures: ScorecardMeasuresSchema,
27
27
  }),
28
28
  });
29
- var ScorecardChartSchemas = {
29
+ var ScorecardSchemas = {
30
30
  ScorecardSchema};
31
31
 
32
- module.exports = ScorecardChartSchemas;
32
+ module.exports = ScorecardSchemas;
33
33
  //# sourceMappingURL=validate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sources":["../../../../../../../../../../../src/dpr/components/_dashboards/scorecard/validate.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n DashboardVisualisationSchema,\n DashboardColumns,\n BucketOptionsSchema,\n UnitType,\n} from '../dashboard-visualisation/Validate'\n\nconst scorecardKey = z.object({\n id: z.string(),\n type: z.string().optional(),\n optional: z.boolean().default(false),\n})\n\nconst scorecardMeasure = z.object({\n id: z.string(),\n type: z.string().optional(),\n unit: z.enum(UnitType).optional(),\n})\n\nconst ScorecardMeasuresSchema = z.array(scorecardMeasure).length(1, 'Measure must contain a single item')\n\nconst ScorecardSchema = z.object({\n ...DashboardVisualisationSchema.shape,\n type: z.literal('scorecard'),\n display: z.string(),\n description: z.string().optional(),\n options: z.object(BucketOptionsSchema.shape).optional(),\n columns: z.object({\n ...DashboardColumns.shape,\n keys: z.array(scorecardKey).min(1),\n measures: ScorecardMeasuresSchema,\n }),\n})\n\nexport default {\n ScorecardSchema,\n ScorecardMeasuresSchema,\n}\n"],"names":["z","UnitType","DashboardVisualisationSchema","BucketOptionsSchema","DashboardColumns"],"mappings":";;;;;AAQA,MAAM,YAAY,GAAGA,GAAC,CAAC,MAAM,CAAC;AAC5B,IAAA,EAAE,EAAEA,GAAC,CAAC,MAAM,EAAE;AACd,IAAA,IAAI,EAAEA,GAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAEA,GAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,CAAA,CAAC;AAEF,MAAM,gBAAgB,GAAGA,GAAC,CAAC,MAAM,CAAC;AAChC,IAAA,EAAE,EAAEA,GAAC,CAAC,MAAM,EAAE;AACd,IAAA,IAAI,EAAEA,GAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAEA,GAAC,CAAC,IAAI,CAACC,iBAAQ,CAAC,CAAC,QAAQ,EAAE;AAClC,CAAA,CAAC;AAEF,MAAM,uBAAuB,GAAGD,GAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,oCAAoC,CAAC;AAEzG,MAAM,eAAe,GAAGA,GAAC,CAAC,MAAM,CAAC;IAC/B,GAAGE,qCAA4B,CAAC,KAAK;AACrC,IAAA,IAAI,EAAEF,GAAC,CAAC,OAAO,CAAC,WAAW,CAAC;AAC5B,IAAA,OAAO,EAAEA,GAAC,CAAC,MAAM,EAAE;AACnB,IAAA,WAAW,EAAEA,GAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAEA,GAAC,CAAC,MAAM,CAACG,4BAAmB,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;AACvD,IAAA,OAAO,EAAEH,GAAC,CAAC,MAAM,CAAC;QAChB,GAAGI,yBAAgB,CAAC,KAAK;QACzB,IAAI,EAAEJ,GAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,QAAA,QAAQ,EAAE,uBAAuB;KAClC,CAAC;AACH,CAAA,CAAC;AAEF,4BAAe;IACb,gBAED;;;;"}
1
+ {"version":3,"file":"validate.js","sources":["../../../../../../../../../../../src/dpr/components/_dashboards/scorecard/validate.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n DashboardVisualisationSchema,\n DashboardColumns,\n BucketOptionsSchema,\n UnitType,\n} from '../dashboard-visualisation/Validate'\n\nconst scorecardKey = z.object({\n id: z.string(),\n type: z.string().optional(),\n optional: z.boolean().default(false),\n})\n\nconst scorecardMeasure = z.object({\n id: z.string(),\n type: z.string().optional(),\n unit: z.enum(UnitType).optional(),\n})\n\nconst ScorecardMeasuresSchema = z.array(scorecardMeasure).length(1, 'Measure must contain a single item')\n\nconst ScorecardSchema = z.object({\n ...DashboardVisualisationSchema.shape,\n type: z.literal('scorecard'),\n display: z.string(),\n description: z.string().optional(),\n options: z.object(BucketOptionsSchema.shape).optional(),\n columns: z.object({\n ...DashboardColumns.shape,\n keys: z.array(scorecardKey).min(1),\n measures: ScorecardMeasuresSchema,\n }),\n})\n\nexport default {\n ScorecardSchema,\n ScorecardMeasuresSchema,\n}\n"],"names":["z","UnitType","DashboardVisualisationSchema","BucketOptionsSchema","DashboardColumns"],"mappings":";;;;;AAQA,MAAM,YAAY,GAAGA,GAAC,CAAC,MAAM,CAAC;AAC5B,IAAA,EAAE,EAAEA,GAAC,CAAC,MAAM,EAAE;AACd,IAAA,IAAI,EAAEA,GAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAEA,GAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,CAAA,CAAC;AAEF,MAAM,gBAAgB,GAAGA,GAAC,CAAC,MAAM,CAAC;AAChC,IAAA,EAAE,EAAEA,GAAC,CAAC,MAAM,EAAE;AACd,IAAA,IAAI,EAAEA,GAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAEA,GAAC,CAAC,IAAI,CAACC,iBAAQ,CAAC,CAAC,QAAQ,EAAE;AAClC,CAAA,CAAC;AAEF,MAAM,uBAAuB,GAAGD,GAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,oCAAoC,CAAC;AAEzG,MAAM,eAAe,GAAGA,GAAC,CAAC,MAAM,CAAC;IAC/B,GAAGE,qCAA4B,CAAC,KAAK;AACrC,IAAA,IAAI,EAAEF,GAAC,CAAC,OAAO,CAAC,WAAW,CAAC;AAC5B,IAAA,OAAO,EAAEA,GAAC,CAAC,MAAM,EAAE;AACnB,IAAA,WAAW,EAAEA,GAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAEA,GAAC,CAAC,MAAM,CAACG,4BAAmB,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;AACvD,IAAA,OAAO,EAAEH,GAAC,CAAC,MAAM,CAAC;QAChB,GAAGI,yBAAgB,CAAC,KAAK;QACzB,IAAI,EAAEJ,GAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,QAAA,QAAQ,EAAE,uBAAuB;KAClC,CAAC;AACH,CAAA,CAAC;AAEF,uBAAe;IACb,gBAED;;;;"}
@@ -24,8 +24,8 @@ const ScorecardGroupSchema = z.z.object({
24
24
  }, { error: 'Measure must have length 2 when displayValue is defined' }),
25
25
  }),
26
26
  });
27
- var ScorecardGroupChartSchemas = {
27
+ var ScorecardGroupSchemas = {
28
28
  ScorecardGroupSchema};
29
29
 
30
- module.exports = ScorecardGroupChartSchemas;
30
+ module.exports = ScorecardGroupSchemas;
31
31
  //# sourceMappingURL=validate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sources":["../../../../../../../../../../../src/dpr/components/_dashboards/scorecard-group/validate.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n DashboardVisualisationSchema,\n DashboardColumns,\n BucketOptionsSchema,\n UnitType,\n} from '../dashboard-visualisation/Validate'\n\nconst ScorecardGroupColumn = z.object({\n id: z.string(),\n display: z.string().optional(),\n displayValue: z.boolean().optional(),\n unit: z.enum(UnitType).optional(),\n})\n\nconst ScorecardGroupSchema = z.object({\n ...DashboardVisualisationSchema.shape,\n type: z.literal('scorecard-group'),\n options: z.object(BucketOptionsSchema.shape).optional(),\n columns: z.object({\n ...DashboardColumns.shape,\n measures: z\n .array(ScorecardGroupColumn)\n .min(2, 'Measure must contain two or more items')\n .refine(\n measures => {\n const displayValue = measures.find(m => m.displayValue !== undefined)\n return displayValue ? measures.length === 2 : true\n },\n { error: 'Measure must have length 2 when displayValue is defined' },\n ),\n }),\n})\n\nexport default {\n ScorecardGroupSchema,\n ScorecardGroupColumn,\n}\n"],"names":["z","UnitType","DashboardVisualisationSchema","BucketOptionsSchema","DashboardColumns"],"mappings":";;;;;AAQA,MAAM,oBAAoB,GAAGA,GAAC,CAAC,MAAM,CAAC;AACpC,IAAA,EAAE,EAAEA,GAAC,CAAC,MAAM,EAAE;AACd,IAAA,OAAO,EAAEA,GAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC9B,IAAA,YAAY,EAAEA,GAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAEA,GAAC,CAAC,IAAI,CAACC,iBAAQ,CAAC,CAAC,QAAQ,EAAE;AAClC,CAAA,CAAC;AAEF,MAAM,oBAAoB,GAAGD,GAAC,CAAC,MAAM,CAAC;IACpC,GAAGE,qCAA4B,CAAC,KAAK;AACrC,IAAA,IAAI,EAAEF,GAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAClC,OAAO,EAAEA,GAAC,CAAC,MAAM,CAACG,4BAAmB,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;AACvD,IAAA,OAAO,EAAEH,GAAC,CAAC,MAAM,CAAC;QAChB,GAAGI,yBAAgB,CAAC,KAAK;AACzB,QAAA,QAAQ,EAAEJ;aACP,KAAK,CAAC,oBAAoB;AAC1B,aAAA,GAAG,CAAC,CAAC,EAAE,wCAAwC;aAC/C,MAAM,CACL,QAAQ,IAAG;AACT,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC;AACrE,YAAA,OAAO,YAAY,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI;AACpD,QAAA,CAAC,EACD,EAAE,KAAK,EAAE,yDAAyD,EAAE,CACrE;KACJ,CAAC;AACH,CAAA,CAAC;AAEF,iCAAe;IACb,qBAED;;;;"}
1
+ {"version":3,"file":"validate.js","sources":["../../../../../../../../../../../src/dpr/components/_dashboards/scorecard-group/validate.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n DashboardVisualisationSchema,\n DashboardColumns,\n BucketOptionsSchema,\n UnitType,\n} from '../dashboard-visualisation/Validate'\n\nconst ScorecardGroupColumn = z.object({\n id: z.string(),\n display: z.string().optional(),\n displayValue: z.boolean().optional(),\n unit: z.enum(UnitType).optional(),\n})\n\nconst ScorecardGroupSchema = z.object({\n ...DashboardVisualisationSchema.shape,\n type: z.literal('scorecard-group'),\n options: z.object(BucketOptionsSchema.shape).optional(),\n columns: z.object({\n ...DashboardColumns.shape,\n measures: z\n .array(ScorecardGroupColumn)\n .min(2, 'Measure must contain two or more items')\n .refine(\n measures => {\n const displayValue = measures.find(m => m.displayValue !== undefined)\n return displayValue ? measures.length === 2 : true\n },\n { error: 'Measure must have length 2 when displayValue is defined' },\n ),\n }),\n})\n\nexport default {\n ScorecardGroupSchema,\n ScorecardGroupColumn,\n}\n"],"names":["z","UnitType","DashboardVisualisationSchema","BucketOptionsSchema","DashboardColumns"],"mappings":";;;;;AAQA,MAAM,oBAAoB,GAAGA,GAAC,CAAC,MAAM,CAAC;AACpC,IAAA,EAAE,EAAEA,GAAC,CAAC,MAAM,EAAE;AACd,IAAA,OAAO,EAAEA,GAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC9B,IAAA,YAAY,EAAEA,GAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAEA,GAAC,CAAC,IAAI,CAACC,iBAAQ,CAAC,CAAC,QAAQ,EAAE;AAClC,CAAA,CAAC;AAEF,MAAM,oBAAoB,GAAGD,GAAC,CAAC,MAAM,CAAC;IACpC,GAAGE,qCAA4B,CAAC,KAAK;AACrC,IAAA,IAAI,EAAEF,GAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAClC,OAAO,EAAEA,GAAC,CAAC,MAAM,CAACG,4BAAmB,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;AACvD,IAAA,OAAO,EAAEH,GAAC,CAAC,MAAM,CAAC;QAChB,GAAGI,yBAAgB,CAAC,KAAK;AACzB,QAAA,QAAQ,EAAEJ;aACP,KAAK,CAAC,oBAAoB;AAC1B,aAAA,GAAG,CAAC,CAAC,EAAE,wCAAwC;aAC/C,MAAM,CACL,QAAQ,IAAG;AACT,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC;AACrE,YAAA,OAAO,YAAY,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI;AACpD,QAAA,CAAC,EACD,EAAE,KAAK,EAAE,yDAAyD,EAAE,CACrE;KACJ,CAAC;AACH,CAAA,CAAC;AAEF,4BAAe;IACb,qBAED;;;;"}
@@ -2,17 +2,17 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var utils$1 = require('../../../../components/_dashboards/dashboard-section/utils.js');
6
5
  var utils$3 = require('../../../../components/_async/async-filters-form/utils.js');
7
- var localsHelper = require('../../../../utils/localsHelper.js');
6
+ var utils$1 = require('../../../../components/_dashboards/dashboard-section/utils.js');
8
7
  var utils = require('../../../../components/_filters/utils.js');
8
+ var localsHelper = require('../../../../utils/localsHelper.js');
9
+ var utils$2 = require('../../../../components/_async/request-details/utils.js');
10
+ var ReportQuery = require('../../../../types/ReportQuery.js');
9
11
  var UserReports = require('../../../../types/UserReports.js');
10
12
  var definitionUtils = require('../../../../utils/definitionUtils.js');
11
- var sessionHelper = require('../../../../utils/sessionHelper.js');
12
13
  var queryMappers = require('../../../../utils/queryMappers.js');
14
+ var sessionHelper = require('../../../../utils/sessionHelper.js');
13
15
  var urlHelper = require('../../../../utils/urlHelper.js');
14
- var utils$2 = require('../../../../components/_async/request-details/utils.js');
15
- var ReportQuery = require('../../../../types/ReportQuery.js');
16
16
  var builder = require('../../my-reports/requested-reports/builder.js');
17
17
 
18
18
  // Utils
@@ -309,12 +309,12 @@ const renderDashboardRequestData = async ({ req, token, reportId, definitionPath
309
309
  const productDefinition = productDefinitions.find((def) => def.id === reportId);
310
310
  // TODO: Remove the "as" when components['schemas']['DashboardDefinition'] includes the `childVariants` field
311
311
  const { childVariants } = definition;
312
- const masterDefintion = definition;
312
+ const masterDefinition = definition;
313
313
  if (childVariants?.length) {
314
314
  // TODO: Remove the casting of definition when components['schemas']['DashboardDefinition'] includes the `childVariants` field
315
- masterDefintion.sections = utils$1.buildMasterSections(definition);
315
+ masterDefinition.sections = utils$1.buildMasterSections(definition);
316
316
  }
317
- const { name, description, sections, filterFields: fields } = masterDefintion;
317
+ const { name, description, sections, filterFields: fields } = masterDefinition;
318
318
  return {
319
319
  reportName: productDefinition?.name || '',
320
320
  name: name || '',
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../../../../../../../src/dpr/routes/journeys/request-report/filters/utils.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport { Request, Response, NextFunction } from 'express'\n\n// Utils\nimport { buildMasterSections } from '../../../../components/_dashboards/dashboard-section/utils'\nimport { buildFilterData, buildSortData } from '../../../../components/_async/async-filters-form/utils'\nimport LocalsHelper from '../../../../utils/localsHelper'\nimport { getRequestFilters } from '../../../../components/_filters/utils'\n\n// Types\nimport { ReportType } from '../../../../types/UserReports'\nimport type { ExecutionData, ChildReportExecutionData } from '../../../../types/ExecutionData'\nimport type { AsyncReportUtilsParams, RequestDataResult, RequestReportData } from '../../../../types/AsyncReportUtils'\nimport type { SetQueryFromFiltersResult } from '../../../../components/_async/async-filters-form/types'\nimport type { components } from '../../../../types/api'\nimport type { Services } from '../../../../types/Services'\nimport { getDashboardFields, getFields } from '../../../../utils/definitionUtils'\nimport { getActiveJourneyValue, setActiveJourneySortSearch } from '../../../../utils/sessionHelper'\nimport { formBodyToQueryObject } from '../../../../utils/queryMappers'\nimport { joinQueryStrings } from '../../../../utils/urlHelper'\nimport { buildQuerySummary } from '../../../../components/_async/request-details/utils'\nimport ReportQuery from '../../../../types/ReportQuery'\nimport { RequestedReportBuilder } from '../../my-reports/requested-reports/builder'\nimport { DashboardDefintion } from '../../../../components/_dashboards/dashboard-visualisation/types'\n\n// ----------------------------------------------------------------------\n// POST\n// ----------------------------------------------------------------------\n\n/**\n * Sends the request for the async report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const request = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token } = LocalsHelper.getValues(res)\n const requestArgs = { req, res, token }\n\n const { executionData, queryData, childExecutionData } = await requestProduct({\n ...requestArgs,\n services,\n })\n\n if (executionData.executionId && executionData.tableId) {\n await updateStore({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n })\n } else {\n throw new Error('No execution data returned')\n }\n\n return executionData\n}\n\n/**\n * Updates the store with the request details\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {SetQueryFromFiltersResult} querySummaryData\n * @param {string} executionData\n * @return {*} {Promise<string>}\n */\nexport const updateStore = async ({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n}: {\n req: Request\n res: Response\n services: Services\n queryData?: SetQueryFromFiltersResult | undefined\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n}): Promise<void> => {\n const { dprUser } = LocalsHelper.getValues(res)\n\n const requestedReportData = new RequestedReportBuilder(req, res)\n .withExecutionData(executionData)\n .withChildExecutionData(childExecutionData)\n .withQueryData(queryData)\n .build()\n\n if (!requestedReportData) {\n return\n }\n\n await services.requestedReportService.addReport(dprUser.id, requestedReportData)\n const removedExecutionIds = await services.requestedReportService.removeDuplicateRequestedReports(dprUser.id)\n\n if (!removedExecutionIds.length) {\n return\n }\n\n await services.recentlyViewedService.removeSupersededViewedReports(removedExecutionIds, dprUser.id)\n}\n\n/**\n * Request the child variants\n *\n * @param {(Array<components['schemas']['ChildVariantDefinition']>\n * | Array<components['schemas']['DashboardDefinition']>)} childVariants\n * @param {Services} services\n * @param {ReportType} reportType\n * @param {string} token\n * @param {string} reportId\n * @param {SetQueryFromFiltersResult} [queryData]\n * @param {string} [dataProductDefinitionsPath]\n * @return {*} {Promise<Array<ChildReportExecutionData>>}\n */\nconst requestChildVariants = async (\n childVariants:\n | Array<components['schemas']['ChildVariantDefinition']>\n | Array<components['schemas']['DashboardDefinition']>,\n services: Services,\n reportType: ReportType,\n token: string,\n reportId: string,\n queryData?: SetQueryFromFiltersResult,\n dataProductDefinitionsPath?: string,\n): Promise<Array<ChildReportExecutionData>> => {\n const query = queryData\n ? Object.fromEntries(Object.entries(queryData.query).filter(([key]) => key !== 'sortColumn' && key !== 'sortedAsc'))\n : {}\n\n const results: Array<ChildReportExecutionData | null> = await Promise.all(\n childVariants.map(async childVariant => {\n const queryParams = {\n ...query,\n ...(dataProductDefinitionsPath && { dataProductDefinitionsPath }),\n }\n\n const response =\n reportType === ReportType.DASHBOARD\n ? await services.dashboardService.requestAsyncDashboard(token, reportId, childVariant.id, queryParams)\n : await services.reportingService.requestAsyncReport(token, reportId, childVariant.id, queryParams)\n\n const { executionId, tableId } = response\n\n if (!executionId || !tableId) {\n if (reportType === ReportType.DASHBOARD) {\n return null\n }\n\n throw new Error('requestChildVariants: No executionId or tableId in response')\n }\n\n return {\n executionId,\n tableId,\n variantId: childVariant.id,\n }\n }),\n )\n\n return results.filter((result): result is ChildReportExecutionData => result !== null)\n}\n\n/**\n * Request the dashboard - get the execution data\n *\n * @param {Request} req\n * @param {Response} res\n * @param {string} token\n * @param {Services} services\n * @return {*}\n */\nconst requestDashboard = async (req: Request, res: Response, token: string, services: Services) => {\n const { definitionsPath: dataProductDefinitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n const { reportId, id } = req.body as { reportId: string; id: string }\n\n const definition = await services.dashboardService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n // TODO: Update this type to components['schemas']['DashboardDefinition'] when `childVariants` field is present\n const childVariants = (<DashboardDefintion>definition).childVariants ?? []\n\n const fields = getDashboardFields(definition)\n\n const query = new ReportQuery({\n fields,\n queryParams: formBodyToQueryObject(req.body),\n definitionsPath: <string>dataProductDefinitionsPath,\n reportType: ReportType.DASHBOARD,\n }).toRecordWithFilterPrefix(true) as Record<string, string>\n\n const requestResponse = await services.dashboardService.requestAsyncDashboard(token, reportId, id, {\n ...query,\n dataProductDefinitionsPath,\n })\n\n const { executionId, tableId } = requestResponse\n\n if (!executionId || !tableId) {\n throw new Error('Execution of report request failed - no execution data returned')\n }\n\n const executionData = {\n executionId,\n tableId,\n ...(dpdPathFromQuery && { dataProductDefinitionsPath }),\n }\n\n const querySummary = buildQuerySummary(req.body, fields)\n const filterData = buildFilterData(req.body)\n\n const queryData = {\n querySummary,\n filterData,\n query,\n }\n\n const childExecutionData = await requestChildVariants(\n childVariants,\n services,\n ReportType.DASHBOARD,\n token,\n reportId,\n queryData,\n dataProductDefinitionsPath,\n )\n\n return {\n executionData,\n childExecutionData,\n queryData,\n }\n}\n\n/**\n * Request the report - get the execution data\n *\n * @param {Request} req\n * @param {Response} res\n * @param {string} token\n * @param {Services} services\n * @return {*}\n */\nconst requestReport = async (req: Request, res: Response, token: string, services: Services) => {\n const { definitionsPath: dataProductDefinitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n const { reportId, id } = req.body as { reportId: string; id: string }\n\n const definition = await services.reportingService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n const childVariants = (<components['schemas']['SingleVariantReportDefinition']>definition).variant.childVariants ?? []\n\n const fields = getFields(definition)\n\n const query = new ReportQuery({\n fields,\n queryParams: formBodyToQueryObject(req.body),\n definitionsPath: <string>dataProductDefinitionsPath,\n reportType: ReportType.REPORT,\n }).toRecordWithFilterPrefix(true) as Record<string, string>\n\n const requestResponse = await services.reportingService.requestAsyncReport(token, reportId, id, {\n ...query,\n dataProductDefinitionsPath,\n })\n const { executionId, tableId } = requestResponse\n\n if (!executionId || !tableId) {\n throw new Error('Execution of report request failed - no execution data returned')\n }\n\n const executionData = {\n executionId,\n tableId,\n ...(dpdPathFromQuery && { dataProductDefinitionsPath }),\n }\n\n const sortData = buildSortData(req.body)\n setActiveJourneySortSearch(req, { reportId, id, tableId }, sortData)\n\n const querySummary = buildQuerySummary(req.body, fields)\n const filterData = buildFilterData(req.body)\n\n const queryData = {\n querySummary,\n filterData,\n query,\n ...(sortData && { sortData }),\n }\n\n const childExecutionData = await requestChildVariants(\n childVariants,\n services,\n ReportType.REPORT,\n token,\n reportId,\n queryData,\n dataProductDefinitionsPath,\n )\n\n return {\n executionData,\n childExecutionData,\n queryData,\n }\n}\n\nconst requestProduct = async ({\n req,\n res,\n token,\n services,\n}: {\n req: Request\n res: Response\n token: string\n services: Services\n}): Promise<{\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n queryData?: SetQueryFromFiltersResult | undefined\n}> => {\n const { type } = req.body as { type: ReportType }\n\n switch (type) {\n case ReportType.REPORT:\n return requestReport(req, res, token, services)\n\n case ReportType.DASHBOARD:\n return requestDashboard(req, res, token, services)\n\n default:\n throw new Error(`Unsupported report type: ${type}`)\n }\n}\n\n// ----------------------------------------------------------------------\n// ERROR\n// ----------------------------------------------------------------------\n\nexport const getFiltersFromReqBody = (req: Request) => {\n return Object.keys(req.body)\n .filter(attr => attr.includes('filters.'))\n .filter(attr => !!req.body[attr])\n .map(attr => {\n return { name: attr, value: req.body[attr] }\n })\n}\n\n// ----------------------------------------------------------------------\n// GET\n// ----------------------------------------------------------------------\n\n/**\n * Returns the data required for rendering the async filters component\n *\n * @param {AsyncReportUtilsParams} { req, res, dataSources }\n * @return {*}\n */\nexport const renderRequest = async ({\n req,\n res,\n services,\n next,\n}: {\n req: Request\n res: Response\n next: NextFunction\n services: Services\n}): Promise<RequestDataResult | boolean> => {\n try {\n const { reportId, type, id } = req.params as { reportId: string; type: ReportType; id: string }\n const {\n token,\n csrfToken,\n definitionsPath: definitionPath,\n dprUser,\n saveDefaultsEnabled,\n } = LocalsHelper.getValues(res)\n const { definition } = res.locals\n\n let name: string = ''\n let reportName: string = ''\n let description: string = ''\n let fields: components['schemas']['FieldDefinition'][] = []\n let sections: components['schemas']['DashboardDefinition']['sections'] = []\n\n if (type === ReportType.REPORT) {\n const reportData = await renderReportRequestData(\n definition as components['schemas']['SingleVariantReportDefinition'],\n )\n\n name = reportData.name\n reportName = reportData.reportName\n description = reportData.description\n fields = reportData.fields\n }\n\n if (type === ReportType.DASHBOARD) {\n const dashboardData = await renderDashboardRequestData({\n req,\n token,\n reportId: reportId as string,\n definitionPath,\n services,\n definition: definition as components['schemas']['DashboardDefinition'],\n })\n\n name = dashboardData.name\n reportName = dashboardData.reportName\n description = dashboardData.description\n fields = dashboardData.fields\n sections = dashboardData.sections\n }\n\n const filtersData = await getRequestFilters(req, res, fields)\n\n const hasDefaults = await services.defaultFilterValuesService.hasDefaults(dprUser.id, reportId, id)\n\n const reportData: RequestReportData = {\n reportName,\n name,\n description,\n reportId,\n id,\n definitionPath,\n csrfToken,\n sections,\n hasDefaults,\n type,\n saveDefaultsEnabled,\n }\n\n return {\n title: `Request ${type}`,\n filtersDescription: `Customise your ${type} using the filters below and submit your request.`,\n filtersData,\n reportData,\n }\n } catch (error) {\n next(error)\n return false\n }\n}\n\nconst renderDashboardRequestData = async ({\n req,\n token,\n reportId,\n definitionPath,\n services,\n definition,\n}: {\n req: Request\n token: string\n reportId: string\n definitionPath: string\n services: Services\n definition: components['schemas']['DashboardDefinition']\n}) => {\n const productDefinitions =\n req.session['allDefinitions'] ?? (await services.reportingService.getDefinitions(token, definitionPath))\n\n const productDefinition = productDefinitions.find(\n (def: components['schemas']['ReportDefinitionSummary']) => def.id === reportId,\n )\n\n // TODO: Remove the \"as\" when components['schemas']['DashboardDefinition'] includes the `childVariants` field\n const { childVariants } = definition as DashboardDefintion\n\n const masterDefintion = definition\n if (childVariants?.length) {\n // TODO: Remove the casting of definition when components['schemas']['DashboardDefinition'] includes the `childVariants` field\n masterDefintion.sections = buildMasterSections(<DashboardDefintion>definition)\n }\n\n const { name, description, sections, filterFields: fields } = masterDefintion\n\n return {\n reportName: productDefinition?.name || '',\n name: name || '',\n description: description || productDefinition?.description || '',\n sections: sections || [],\n fields: fields || [],\n }\n}\n\nconst renderReportRequestData = async (definition: components['schemas']['SingleVariantReportDefinition']) => {\n const fields = getFields(definition)\n return {\n definition,\n reportName: definition.name,\n name: definition.variant.name,\n description: definition.variant.description || definition.description || '',\n template: definition.variant.specification,\n fields,\n }\n}\n\n/**\n * Ensures that the request will always contain the correct qs on first render\n *\n * @param {Response} res\n * @param {Request} req\n * @return {*}\n */\nexport const redirectWithDefaults = (res: Response, req: Request) => {\n const effectiveQueryString = setDefaultQueryString(req)\n\n if (effectiveQueryString && Object.keys(req.query).length === 0) {\n const baseUrl = req.originalUrl.split('?')[0].replace(/\\/$/, '')\n res.redirect(`${baseUrl}?${effectiveQueryString}`)\n return true\n }\n return false\n}\n\n/**\n * Sets the defaults query string for pre-filters\n *\n * @param {Request} req\n * @return {*}\n */\nexport const setDefaultQueryString = (req: Request) => {\n const { id, reportId } = req.params as {\n id: string\n reportId: string\n }\n const sessionKey = { id, reportId }\n const defaultFiltersSearch = getActiveJourneyValue(req, sessionKey, 'defaultFiltersSearch')\n const savedRequestDefaultsSearch = getActiveJourneyValue(req, sessionKey, 'savedRequestDefaultsSearch')\n const defaultSortQueryString = getActiveJourneyValue(req, sessionKey, 'defaultSortQueryString')\n\n // If DPD defaults, use those unless there are saved defaults\n const effectiveQueryString =\n savedRequestDefaultsSearch && savedRequestDefaultsSearch.length > 0\n ? savedRequestDefaultsSearch\n : defaultFiltersSearch\n\n if (defaultSortQueryString && defaultSortQueryString.length > 0) {\n return joinQueryStrings(effectiveQueryString, defaultSortQueryString)\n }\n\n return effectiveQueryString\n}\n\nexport default {\n request,\n renderRequest,\n getFiltersFromReqBody,\n}\n"],"names":["LocalsHelper","RequestedReportBuilder","ReportType","getDashboardFields","ReportQuery","formBodyToQueryObject","buildQuerySummary","buildFilterData","getFields","buildSortData","setActiveJourneySortSearch","getRequestFilters","buildMasterSections","getActiveJourneyValue","joinQueryStrings"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../../../../../../../src/dpr/routes/journeys/request-report/filters/utils.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport { NextFunction, Request, Response } from 'express'\n\n// Utils\nimport { buildFilterData, buildSortData } from '../../../../components/_async/async-filters-form/utils'\nimport { buildMasterSections } from '../../../../components/_dashboards/dashboard-section/utils'\nimport { getRequestFilters } from '../../../../components/_filters/utils'\nimport LocalsHelper from '../../../../utils/localsHelper'\n\n// Types\nimport type { SetQueryFromFiltersResult } from '../../../../components/_async/async-filters-form/types'\nimport { buildQuerySummary } from '../../../../components/_async/request-details/utils'\nimport { DashboardDefinition } from '../../../../components/_dashboards/dashboard-visualisation/types'\nimport type { components } from '../../../../types/api'\nimport type { AsyncReportUtilsParams, RequestDataResult, RequestReportData } from '../../../../types/AsyncReportUtils'\nimport type { ChildReportExecutionData, ExecutionData } from '../../../../types/ExecutionData'\nimport ReportQuery from '../../../../types/ReportQuery'\nimport type { Services } from '../../../../types/Services'\nimport { ReportType } from '../../../../types/UserReports'\nimport { getDashboardFields, getFields } from '../../../../utils/definitionUtils'\nimport { formBodyToQueryObject } from '../../../../utils/queryMappers'\nimport { getActiveJourneyValue, setActiveJourneySortSearch } from '../../../../utils/sessionHelper'\nimport { joinQueryStrings } from '../../../../utils/urlHelper'\nimport { RequestedReportBuilder } from '../../my-reports/requested-reports/builder'\n\n// ----------------------------------------------------------------------\n// POST\n// ----------------------------------------------------------------------\n\n/**\n * Sends the request for the async report\n *\n * @param {AsyncReportUtilsParams} { req, res, services }\n * @return {*}\n */\nexport const request = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { token } = LocalsHelper.getValues(res)\n const requestArgs = { req, res, token }\n\n const { executionData, queryData, childExecutionData } = await requestProduct({\n ...requestArgs,\n services,\n })\n\n if (executionData.executionId && executionData.tableId) {\n await updateStore({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n })\n } else {\n throw new Error('No execution data returned')\n }\n\n return executionData\n}\n\n/**\n * Updates the store with the request details\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {SetQueryFromFiltersResult} querySummaryData\n * @param {string} executionData\n * @return {*} {Promise<string>}\n */\nexport const updateStore = async ({\n req,\n res,\n services,\n queryData,\n executionData,\n childExecutionData,\n}: {\n req: Request\n res: Response\n services: Services\n queryData?: SetQueryFromFiltersResult | undefined\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n}): Promise<void> => {\n const { dprUser } = LocalsHelper.getValues(res)\n\n const requestedReportData = new RequestedReportBuilder(req, res)\n .withExecutionData(executionData)\n .withChildExecutionData(childExecutionData)\n .withQueryData(queryData)\n .build()\n\n if (!requestedReportData) {\n return\n }\n\n await services.requestedReportService.addReport(dprUser.id, requestedReportData)\n const removedExecutionIds = await services.requestedReportService.removeDuplicateRequestedReports(dprUser.id)\n\n if (!removedExecutionIds.length) {\n return\n }\n\n await services.recentlyViewedService.removeSupersededViewedReports(removedExecutionIds, dprUser.id)\n}\n\n/**\n * Request the child variants\n *\n * @param {(Array<components['schemas']['ChildVariantDefinition']>\n * | Array<components['schemas']['DashboardDefinition']>)} childVariants\n * @param {Services} services\n * @param {ReportType} reportType\n * @param {string} token\n * @param {string} reportId\n * @param {SetQueryFromFiltersResult} [queryData]\n * @param {string} [dataProductDefinitionsPath]\n * @return {*} {Promise<Array<ChildReportExecutionData>>}\n */\nconst requestChildVariants = async (\n childVariants:\n | Array<components['schemas']['ChildVariantDefinition']>\n | Array<components['schemas']['DashboardDefinition']>,\n services: Services,\n reportType: ReportType,\n token: string,\n reportId: string,\n queryData?: SetQueryFromFiltersResult,\n dataProductDefinitionsPath?: string,\n): Promise<Array<ChildReportExecutionData>> => {\n const query = queryData\n ? Object.fromEntries(Object.entries(queryData.query).filter(([key]) => key !== 'sortColumn' && key !== 'sortedAsc'))\n : {}\n\n const results: Array<ChildReportExecutionData | null> = await Promise.all(\n childVariants.map(async childVariant => {\n const queryParams = {\n ...query,\n ...(dataProductDefinitionsPath && { dataProductDefinitionsPath }),\n }\n\n const response =\n reportType === ReportType.DASHBOARD\n ? await services.dashboardService.requestAsyncDashboard(token, reportId, childVariant.id, queryParams)\n : await services.reportingService.requestAsyncReport(token, reportId, childVariant.id, queryParams)\n\n const { executionId, tableId } = response\n\n if (!executionId || !tableId) {\n if (reportType === ReportType.DASHBOARD) {\n return null\n }\n\n throw new Error('requestChildVariants: No executionId or tableId in response')\n }\n\n return {\n executionId,\n tableId,\n variantId: childVariant.id,\n }\n }),\n )\n\n return results.filter((result): result is ChildReportExecutionData => result !== null)\n}\n\n/**\n * Request the dashboard - get the execution data\n *\n * @param {Request} req\n * @param {Response} res\n * @param {string} token\n * @param {Services} services\n * @return {*}\n */\nconst requestDashboard = async (req: Request, res: Response, token: string, services: Services) => {\n const { definitionsPath: dataProductDefinitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n const { reportId, id } = req.body as { reportId: string; id: string }\n\n const definition = await services.dashboardService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n // TODO: Update this type to components['schemas']['DashboardDefinition'] when `childVariants` field is present\n const childVariants = (<DashboardDefinition>definition).childVariants ?? []\n\n const fields = getDashboardFields(definition)\n\n const query = new ReportQuery({\n fields,\n queryParams: formBodyToQueryObject(req.body),\n definitionsPath: <string>dataProductDefinitionsPath,\n reportType: ReportType.DASHBOARD,\n }).toRecordWithFilterPrefix(true) as Record<string, string>\n\n const requestResponse = await services.dashboardService.requestAsyncDashboard(token, reportId, id, {\n ...query,\n dataProductDefinitionsPath,\n })\n\n const { executionId, tableId } = requestResponse\n\n if (!executionId || !tableId) {\n throw new Error('Execution of report request failed - no execution data returned')\n }\n\n const executionData = {\n executionId,\n tableId,\n ...(dpdPathFromQuery && { dataProductDefinitionsPath }),\n }\n\n const querySummary = buildQuerySummary(req.body, fields)\n const filterData = buildFilterData(req.body)\n\n const queryData = {\n querySummary,\n filterData,\n query,\n }\n\n const childExecutionData = await requestChildVariants(\n childVariants,\n services,\n ReportType.DASHBOARD,\n token,\n reportId,\n queryData,\n dataProductDefinitionsPath,\n )\n\n return {\n executionData,\n childExecutionData,\n queryData,\n }\n}\n\n/**\n * Request the report - get the execution data\n *\n * @param {Request} req\n * @param {Response} res\n * @param {string} token\n * @param {Services} services\n * @return {*}\n */\nconst requestReport = async (req: Request, res: Response, token: string, services: Services) => {\n const { definitionsPath: dataProductDefinitionsPath, dpdPathFromQuery } = LocalsHelper.getValues(res)\n const { reportId, id } = req.body as { reportId: string; id: string }\n\n const definition = await services.reportingService.getDefinition(token, reportId, id, dataProductDefinitionsPath)\n\n const childVariants = (<components['schemas']['SingleVariantReportDefinition']>definition).variant.childVariants ?? []\n\n const fields = getFields(definition)\n\n const query = new ReportQuery({\n fields,\n queryParams: formBodyToQueryObject(req.body),\n definitionsPath: <string>dataProductDefinitionsPath,\n reportType: ReportType.REPORT,\n }).toRecordWithFilterPrefix(true) as Record<string, string>\n\n const requestResponse = await services.reportingService.requestAsyncReport(token, reportId, id, {\n ...query,\n dataProductDefinitionsPath,\n })\n const { executionId, tableId } = requestResponse\n\n if (!executionId || !tableId) {\n throw new Error('Execution of report request failed - no execution data returned')\n }\n\n const executionData = {\n executionId,\n tableId,\n ...(dpdPathFromQuery && { dataProductDefinitionsPath }),\n }\n\n const sortData = buildSortData(req.body)\n setActiveJourneySortSearch(req, { reportId, id, tableId }, sortData)\n\n const querySummary = buildQuerySummary(req.body, fields)\n const filterData = buildFilterData(req.body)\n\n const queryData = {\n querySummary,\n filterData,\n query,\n ...(sortData && { sortData }),\n }\n\n const childExecutionData = await requestChildVariants(\n childVariants,\n services,\n ReportType.REPORT,\n token,\n reportId,\n queryData,\n dataProductDefinitionsPath,\n )\n\n return {\n executionData,\n childExecutionData,\n queryData,\n }\n}\n\nconst requestProduct = async ({\n req,\n res,\n token,\n services,\n}: {\n req: Request\n res: Response\n token: string\n services: Services\n}): Promise<{\n executionData: ExecutionData\n childExecutionData: Array<ChildReportExecutionData>\n queryData?: SetQueryFromFiltersResult | undefined\n}> => {\n const { type } = req.body as { type: ReportType }\n\n switch (type) {\n case ReportType.REPORT:\n return requestReport(req, res, token, services)\n\n case ReportType.DASHBOARD:\n return requestDashboard(req, res, token, services)\n\n default:\n throw new Error(`Unsupported report type: ${type}`)\n }\n}\n\n// ----------------------------------------------------------------------\n// ERROR\n// ----------------------------------------------------------------------\n\nexport const getFiltersFromReqBody = (req: Request) => {\n return Object.keys(req.body)\n .filter(attr => attr.includes('filters.'))\n .filter(attr => !!req.body[attr])\n .map(attr => {\n return { name: attr, value: req.body[attr] }\n })\n}\n\n// ----------------------------------------------------------------------\n// GET\n// ----------------------------------------------------------------------\n\n/**\n * Returns the data required for rendering the async filters component\n *\n * @param {AsyncReportUtilsParams} { req, res, dataSources }\n * @return {*}\n */\nexport const renderRequest = async ({\n req,\n res,\n services,\n next,\n}: {\n req: Request\n res: Response\n next: NextFunction\n services: Services\n}): Promise<RequestDataResult | boolean> => {\n try {\n const { reportId, type, id } = req.params as { reportId: string; type: ReportType; id: string }\n const {\n token,\n csrfToken,\n definitionsPath: definitionPath,\n dprUser,\n saveDefaultsEnabled,\n } = LocalsHelper.getValues(res)\n const { definition } = res.locals\n\n let name: string = ''\n let reportName: string = ''\n let description: string = ''\n let fields: components['schemas']['FieldDefinition'][] = []\n let sections: components['schemas']['DashboardDefinition']['sections'] = []\n\n if (type === ReportType.REPORT) {\n const reportData = await renderReportRequestData(\n definition as components['schemas']['SingleVariantReportDefinition'],\n )\n\n name = reportData.name\n reportName = reportData.reportName\n description = reportData.description\n fields = reportData.fields\n }\n\n if (type === ReportType.DASHBOARD) {\n const dashboardData = await renderDashboardRequestData({\n req,\n token,\n reportId: reportId as string,\n definitionPath,\n services,\n definition: definition as components['schemas']['DashboardDefinition'],\n })\n\n name = dashboardData.name\n reportName = dashboardData.reportName\n description = dashboardData.description\n fields = dashboardData.fields\n sections = dashboardData.sections\n }\n\n const filtersData = await getRequestFilters(req, res, fields)\n\n const hasDefaults = await services.defaultFilterValuesService.hasDefaults(dprUser.id, reportId, id)\n\n const reportData: RequestReportData = {\n reportName,\n name,\n description,\n reportId,\n id,\n definitionPath,\n csrfToken,\n sections,\n hasDefaults,\n type,\n saveDefaultsEnabled,\n }\n\n return {\n title: `Request ${type}`,\n filtersDescription: `Customise your ${type} using the filters below and submit your request.`,\n filtersData,\n reportData,\n }\n } catch (error) {\n next(error)\n return false\n }\n}\n\nconst renderDashboardRequestData = async ({\n req,\n token,\n reportId,\n definitionPath,\n services,\n definition,\n}: {\n req: Request\n token: string\n reportId: string\n definitionPath: string\n services: Services\n definition: components['schemas']['DashboardDefinition']\n}) => {\n const productDefinitions =\n req.session['allDefinitions'] ?? (await services.reportingService.getDefinitions(token, definitionPath))\n\n const productDefinition = productDefinitions.find(\n (def: components['schemas']['ReportDefinitionSummary']) => def.id === reportId,\n )\n\n // TODO: Remove the \"as\" when components['schemas']['DashboardDefinition'] includes the `childVariants` field\n const { childVariants } = definition as DashboardDefinition\n\n const masterDefinition = definition\n if (childVariants?.length) {\n // TODO: Remove the casting of definition when components['schemas']['DashboardDefinition'] includes the `childVariants` field\n masterDefinition.sections = buildMasterSections(<DashboardDefinition>definition)\n }\n\n const { name, description, sections, filterFields: fields } = masterDefinition\n\n return {\n reportName: productDefinition?.name || '',\n name: name || '',\n description: description || productDefinition?.description || '',\n sections: sections || [],\n fields: fields || [],\n }\n}\n\nconst renderReportRequestData = async (definition: components['schemas']['SingleVariantReportDefinition']) => {\n const fields = getFields(definition)\n return {\n definition,\n reportName: definition.name,\n name: definition.variant.name,\n description: definition.variant.description || definition.description || '',\n template: definition.variant.specification,\n fields,\n }\n}\n\n/**\n * Ensures that the request will always contain the correct qs on first render\n *\n * @param {Response} res\n * @param {Request} req\n * @return {*}\n */\nexport const redirectWithDefaults = (res: Response, req: Request) => {\n const effectiveQueryString = setDefaultQueryString(req)\n\n if (effectiveQueryString && Object.keys(req.query).length === 0) {\n const baseUrl = req.originalUrl.split('?')[0].replace(/\\/$/, '')\n res.redirect(`${baseUrl}?${effectiveQueryString}`)\n return true\n }\n return false\n}\n\n/**\n * Sets the defaults query string for pre-filters\n *\n * @param {Request} req\n * @return {*}\n */\nexport const setDefaultQueryString = (req: Request) => {\n const { id, reportId } = req.params as {\n id: string\n reportId: string\n }\n const sessionKey = { id, reportId }\n const defaultFiltersSearch = getActiveJourneyValue(req, sessionKey, 'defaultFiltersSearch')\n const savedRequestDefaultsSearch = getActiveJourneyValue(req, sessionKey, 'savedRequestDefaultsSearch')\n const defaultSortQueryString = getActiveJourneyValue(req, sessionKey, 'defaultSortQueryString')\n\n // If DPD defaults, use those unless there are saved defaults\n const effectiveQueryString =\n savedRequestDefaultsSearch && savedRequestDefaultsSearch.length > 0\n ? savedRequestDefaultsSearch\n : defaultFiltersSearch\n\n if (defaultSortQueryString && defaultSortQueryString.length > 0) {\n return joinQueryStrings(effectiveQueryString, defaultSortQueryString)\n }\n\n return effectiveQueryString\n}\n\nexport default {\n request,\n renderRequest,\n getFiltersFromReqBody,\n}\n"],"names":["LocalsHelper","RequestedReportBuilder","ReportType","getDashboardFields","ReportQuery","formBodyToQueryObject","buildQuerySummary","buildFilterData","getFields","buildSortData","setActiveJourneySortSearch","getRequestFilters","buildMasterSections","getActiveJourneyValue","joinQueryStrings"],"mappings":"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"}
@@ -2,11 +2,11 @@
2
2
 
3
3
  var UserReports = require('../../../../../types/UserReports.js');
4
4
  var Dashboard = require('../../../../../components/_dashboards/Dashboard.js');
5
+ var utils$1 = require('../../../../../components/_dashboards/dashboard-visualisation/utils.js');
5
6
  var localsHelper = require('../../../../../utils/localsHelper.js');
6
- var utils$2 = require('../../utils.js');
7
7
  var utils = require('../../../my-reports/utils.js');
8
+ var utils$2 = require('../../utils.js');
8
9
  var validate = require('./validate.js');
9
- var utils$1 = require('../../../../../components/_dashboards/dashboard-visualisation/utils.js');
10
10
 
11
11
  const renderDashboard = async ({ req, res, services }) => {
12
12
  const { token, dprUser, definitionsPath } = localsHelper.default.getValues(res);