@ministryofjustice/hmpps-digital-prison-reporting-frontend 6.8.2 → 7.0.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 (23) hide show
  1. package/cjs/dpr/routes/journeys/my-reports/recently-viewed/builder.js +10 -2
  2. package/cjs/dpr/routes/journeys/my-reports/recently-viewed/builder.js.map +1 -1
  3. package/cjs/dpr/routes/journeys/my-reports/requested-reports/builder.js +1 -1
  4. package/cjs/dpr/routes/journeys/my-reports/requested-reports/builder.js.map +1 -1
  5. package/cjs/dpr/routes/journeys/my-reports/validation.js +2 -2
  6. package/cjs/dpr/routes/journeys/my-reports/validation.js.map +1 -1
  7. package/cjs/dpr/routes/journeys/view-report/utils.js.map +1 -1
  8. package/cjs/dpr/utils/reportListsHelper.js.map +1 -1
  9. package/dpr/all.scss +41 -40
  10. package/dpr/components/_async/async-filters-form/actions/save-defaults/view.njk +1 -1
  11. package/dpr/components/_filters/filters-save-defaults/view.njk +1 -1
  12. package/dpr/routes/journeys/my-reports/recently-viewed/builder.js +10 -2
  13. package/dpr/routes/journeys/my-reports/recently-viewed/builder.js.map +1 -1
  14. package/dpr/routes/journeys/my-reports/requested-reports/builder.js +1 -1
  15. package/dpr/routes/journeys/my-reports/requested-reports/builder.js.map +1 -1
  16. package/dpr/routes/journeys/my-reports/validation.js +2 -2
  17. package/dpr/routes/journeys/my-reports/validation.js.map +1 -1
  18. package/dpr/routes/journeys/view-report/utils.js.map +1 -1
  19. package/dpr/utils/reportListsHelper.js.map +1 -1
  20. package/package.json +3 -3
  21. package/src/dpr/routes/journeys/my-reports/recently-viewed/validation.d.ts +2 -2
  22. package/src/dpr/routes/journeys/my-reports/requested-reports/validation.d.ts +6 -6
  23. package/src/dpr/routes/journeys/my-reports/validation.d.ts +3 -3
@@ -2,6 +2,7 @@
2
2
 
3
3
  var builder = require('../builder.js');
4
4
  var types = require('../../../../utils/ReportStatus/types.js');
5
+ var queryMappers = require('../../../../utils/queryMappers.js');
5
6
 
6
7
  class ViewedReportBuilder extends builder.StoreItemBuilder {
7
8
  req;
@@ -74,9 +75,16 @@ class ViewedReportBuilder extends builder.StoreItemBuilder {
74
75
  };
75
76
  };
76
77
  buildInteractiveQuery = () => {
77
- if (!this.interactiveQuery.query || !this.interactiveQuery.querySummary)
78
+ if (!this.interactiveQuery.query || !this.interactiveQuery.querySummary) {
78
79
  return undefined;
79
- const { query: data, querySummary: summary } = this.interactiveQuery;
80
+ }
81
+ const { query, querySummary: summary } = this.interactiveQuery;
82
+ const data = {
83
+ ...query,
84
+ ...(query['columns'] && {
85
+ columns: queryMappers.normalizeQueryStringArray(query['columns']),
86
+ }),
87
+ };
80
88
  return {
81
89
  data,
82
90
  summary,
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sources":["../../../../../../../../../../../../src/dpr/routes/journeys/my-reports/recently-viewed/builder.ts"],"sourcesContent":["import type { Request, Response } from 'express'\nimport { QueryData } from '../../../../components/_async/async-filters-form/types'\nimport {\n AsyncReportQueryData,\n AsyncReportUrlData,\n ParamsConfig,\n RecentlyViewedReport,\n} from '../../../../types/UserReports'\nimport { StoreItemBuilder, ReportData } from '../builder'\nimport { RequestStatus } from '../../../../utils/ReportStatus/types'\n\nexport class ViewedReportBuilder extends StoreItemBuilder {\n filters!: ParamsConfig\n\n sort!: ParamsConfig\n\n reportData!: ReportData\n\n requestUrls!: AsyncReportUrlData | undefined\n\n interactiveQuery!: QueryData\n\n asyncQueryData!: AsyncReportQueryData | undefined\n\n constructor(\n readonly req: Request,\n res: Response,\n ) {\n super(res)\n }\n\n // Public methods\n\n withReportData = (reportData: ReportData) => {\n this.reportData = reportData\n\n return this\n }\n\n withRequestData = (asyncQueryData: AsyncReportQueryData | undefined, url: AsyncReportUrlData | undefined) => {\n this.withAsyncUrls(url)\n this.withAsyncQuery(asyncQueryData)\n\n return this\n }\n\n private withAsyncUrls = (url: AsyncReportUrlData | undefined) => {\n this.requestUrls = url\n }\n\n private withAsyncQuery = (asyncQueryData: AsyncReportQueryData | undefined) => {\n this.asyncQueryData = asyncQueryData\n }\n\n withInteractiveQuery = (interactiveQueryData: QueryData) => {\n this.interactiveQuery = interactiveQueryData\n\n return this\n }\n\n // Builder methods\n\n private buildReportData = () => {\n return this.buildReportMetaData(this.reportData)\n }\n\n private buildUrls = () => {\n const origin = this.req.get('host') || ''\n const report = this.buildReportUrls()\n\n let polling\n let request\n\n if (this.requestUrls) {\n polling = this.requestUrls.polling\n request = this.requestUrls.request\n }\n\n return {\n origin,\n ...(polling && { polling }),\n ...(request && { request }),\n report,\n }\n }\n\n private buildReportUrls = () => {\n const origin = this.req.get('host') || ''\n const fullUrl = `${this.req.protocol}://${origin}${this.req.originalUrl}`\n\n const parsed = new URL(fullUrl)\n const { search } = parsed\n\n return {\n fullUrl,\n search,\n }\n }\n\n private buildStatus = () => {\n return RequestStatus.READY\n }\n\n private buildTimestamp = () => {\n return {\n lastViewed: new Date(),\n }\n }\n\n private buildInteractiveQuery = (): AsyncReportQueryData | undefined => {\n if (!this.interactiveQuery.query || !this.interactiveQuery.querySummary) return undefined\n\n const { query: data, querySummary: summary } = this.interactiveQuery\n\n return {\n data,\n summary,\n }\n }\n\n build = (): RecentlyViewedReport => {\n const reportData = this.buildReportData()\n const url = this.buildUrls()\n const status = this.buildStatus()\n const timestamp = this.buildTimestamp()\n const definitionsPath = this.buidDefinitionsPath()\n const interactiveQuery = this.buildInteractiveQuery()\n\n const viewedReportData: RecentlyViewedReport = {\n ...reportData,\n ...this.executionData,\n ...(definitionsPath && definitionsPath),\n ...(this.asyncQueryData && { query: this.asyncQueryData }),\n ...(interactiveQuery && { interactiveQuery }),\n url,\n status,\n timestamp,\n }\n\n return viewedReportData\n }\n}\n"],"names":["StoreItemBuilder","RequestStatus"],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sources":["../../../../../../../../../../../../src/dpr/routes/journeys/my-reports/recently-viewed/builder.ts"],"sourcesContent":["import type { Request, Response } from 'express'\nimport { QueryData } from '../../../../components/_async/async-filters-form/types'\nimport {\n AsyncReportQueryData,\n AsyncReportUrlData,\n ParamsConfig,\n RecentlyViewedReport,\n} from '../../../../types/UserReports'\nimport { StoreItemBuilder, ReportData } from '../builder'\nimport { RequestStatus } from '../../../../utils/ReportStatus/types'\nimport { normalizeQueryStringArray } from '../../../../utils/queryMappers'\n\nexport class ViewedReportBuilder extends StoreItemBuilder {\n filters!: ParamsConfig\n\n sort!: ParamsConfig\n\n reportData!: ReportData\n\n requestUrls!: AsyncReportUrlData | undefined\n\n interactiveQuery!: QueryData\n\n asyncQueryData!: AsyncReportQueryData | undefined\n\n constructor(\n readonly req: Request,\n res: Response,\n ) {\n super(res)\n }\n\n // Public methods\n\n withReportData = (reportData: ReportData) => {\n this.reportData = reportData\n\n return this\n }\n\n withRequestData = (asyncQueryData: AsyncReportQueryData | undefined, url: AsyncReportUrlData | undefined) => {\n this.withAsyncUrls(url)\n this.withAsyncQuery(asyncQueryData)\n\n return this\n }\n\n private withAsyncUrls = (url: AsyncReportUrlData | undefined) => {\n this.requestUrls = url\n }\n\n private withAsyncQuery = (asyncQueryData: AsyncReportQueryData | undefined) => {\n this.asyncQueryData = asyncQueryData\n }\n\n withInteractiveQuery = (interactiveQueryData: QueryData) => {\n this.interactiveQuery = interactiveQueryData\n\n return this\n }\n\n // Builder methods\n\n private buildReportData = () => {\n return this.buildReportMetaData(this.reportData)\n }\n\n private buildUrls = () => {\n const origin = this.req.get('host') || ''\n const report = this.buildReportUrls()\n\n let polling\n let request\n\n if (this.requestUrls) {\n polling = this.requestUrls.polling\n request = this.requestUrls.request\n }\n\n return {\n origin,\n ...(polling && { polling }),\n ...(request && { request }),\n report,\n }\n }\n\n private buildReportUrls = () => {\n const origin = this.req.get('host') || ''\n const fullUrl = `${this.req.protocol}://${origin}${this.req.originalUrl}`\n\n const parsed = new URL(fullUrl)\n const { search } = parsed\n\n return {\n fullUrl,\n search,\n }\n }\n\n private buildStatus = () => {\n return RequestStatus.READY\n }\n\n private buildTimestamp = () => {\n return {\n lastViewed: new Date(),\n }\n }\n\n private buildInteractiveQuery = (): AsyncReportQueryData | undefined => {\n if (!this.interactiveQuery.query || !this.interactiveQuery.querySummary) {\n return undefined\n }\n\n const { query, querySummary: summary } = this.interactiveQuery\n\n const data = {\n ...query,\n ...(query['columns'] && {\n columns: normalizeQueryStringArray(query['columns']),\n }),\n }\n\n return {\n data,\n summary,\n }\n }\n\n build = (): RecentlyViewedReport => {\n const reportData = this.buildReportData()\n const url = this.buildUrls()\n const status = this.buildStatus()\n const timestamp = this.buildTimestamp()\n const definitionsPath = this.buidDefinitionsPath()\n const interactiveQuery = this.buildInteractiveQuery()\n\n const viewedReportData: RecentlyViewedReport = {\n ...reportData,\n ...this.executionData,\n ...(definitionsPath && definitionsPath),\n ...(this.asyncQueryData && { query: this.asyncQueryData }),\n ...(interactiveQuery && { interactiveQuery }),\n url,\n status,\n timestamp,\n }\n\n return viewedReportData\n }\n}\n"],"names":["StoreItemBuilder","RequestStatus","normalizeQueryStringArray"],"mappings":"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"}
@@ -31,7 +31,7 @@ class RequestedReportBuilder extends builder.StoreItemBuilder {
31
31
  return undefined;
32
32
  const { sortData } = this.queryData;
33
33
  return {
34
- data: sortData,
34
+ data: sortData ?? {},
35
35
  queryString: new URLSearchParams(sortData).toString(),
36
36
  };
37
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sources":["../../../../../../../../../../../../src/dpr/routes/journeys/my-reports/requested-reports/builder.ts"],"sourcesContent":["import type { Request, Response } from 'express'\nimport {\n AsyncReportQueryData,\n ParamsConfig,\n ReportType,\n RequestedDashboard,\n RequestedReport,\n RequestFormData,\n} from '../../../../types/UserReports'\nimport { StoreItemBuilder } from '../builder'\nimport { RequestStatus } from '../../../../utils/ReportStatus/types'\nimport { components } from '../../../../types/api'\n\nexport class RequestedReportBuilder extends StoreItemBuilder {\n filters!: ParamsConfig\n\n sort!: ParamsConfig\n\n constructor(\n readonly req: Request,\n res: Response,\n ) {\n super(res)\n }\n\n private buildReportData = () => {\n const requestFormData: RequestFormData = this.req.body\n this.reportType = requestFormData.type as ReportType\n\n return this.buildReportMetaData(requestFormData)\n }\n\n private buildFilters = () => {\n if (!this.queryData || !this.queryData.filterData) return undefined\n\n const { filterData } = this.queryData\n\n return {\n data: filterData,\n queryString: new URLSearchParams(filterData).toString(),\n }\n }\n\n private buildSortData = () => {\n if (!this.queryData || !this.queryData?.sortData) return undefined\n\n const { sortData } = this.queryData\n\n return {\n data: sortData,\n queryString: new URLSearchParams(sortData).toString(),\n }\n }\n\n private buildRequestUrls = () => {\n const url = new URL(this.req.originalUrl, `${this.req.protocol}://${this.req.get('host')}`)\n const { pathname, search, origin } = url\n\n const pollingUrlData = this.setPollingUrlData(origin)\n\n const requestUrlData = {\n fullUrl: `${origin}${this.req.originalUrl}`,\n pathname,\n search,\n }\n\n return {\n origin,\n request: requestUrlData,\n polling: pollingUrlData,\n }\n }\n\n private setPollingUrlData = (origin: string) => {\n const { definitionsPath, dpdPathFromQuery } = this.res.locals\n\n const { executionId } = this.executionData\n\n let pollingPath = this.req.baseUrl.replace('/filters', `/${executionId}/status`)\n if (dpdPathFromQuery) {\n pollingPath = `${pollingPath}?dataProductDefinitionsPath=${definitionsPath}`\n }\n\n const pollingFullUrl = `${origin}${pollingPath}`\n\n return {\n fullUrl: pollingFullUrl,\n pathname: pollingPath,\n }\n }\n\n private buildStatus = () => {\n return RequestStatus.SUBMITTED\n }\n\n private buildTimestamp = () => {\n return {\n requested: new Date(),\n }\n }\n\n private buildQuery = (): AsyncReportQueryData | undefined => {\n if (!this.queryData?.query || !this.queryData.querySummary) return undefined\n\n const { query: data, querySummary: summary } = this.queryData\n\n return {\n data,\n summary,\n }\n }\n\n private buildSections = () => {\n if (!this.reportType && this.reportType !== ReportType.DASHBOARD) return undefined\n\n const bodySections = this.req.body.sections\n\n const sections: components['schemas']['DashboardSectionDefinition'][] = bodySections\n ? JSON.parse(this.req.body.sections)\n : []\n\n return sections.filter(section => section.display).map(section => ({ name: section.display || '' }))\n }\n\n build = (): RequestedReport => {\n const reportData = this.buildReportData()\n const filters = this.buildFilters()\n const sortBy = this.buildSortData()\n const url = this.buildRequestUrls()\n const status = this.buildStatus()\n const timestamp = this.buildTimestamp()\n const definitionsPath = this.buidDefinitionsPath()\n const query = this.buildQuery()\n const metrics = this.buildSections()\n\n const requestedReportData: RequestedReport | RequestedDashboard = {\n ...reportData,\n ...this.executionData,\n ...(this.childExecutionData && { childExecutionData: this.childExecutionData }),\n ...(filters && { filters }),\n ...(sortBy && { sortBy }),\n ...(query && { query }),\n ...(metrics && { metrics }),\n ...(definitionsPath && definitionsPath),\n url,\n status,\n timestamp,\n }\n\n return requestedReportData\n }\n}\n"],"names":["StoreItemBuilder","RequestStatus","ReportType"],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sources":["../../../../../../../../../../../../src/dpr/routes/journeys/my-reports/requested-reports/builder.ts"],"sourcesContent":["import type { Request, Response } from 'express'\nimport {\n AsyncReportQueryData,\n ParamsConfig,\n ReportType,\n RequestedDashboard,\n RequestedReport,\n RequestFormData,\n} from '../../../../types/UserReports'\nimport { StoreItemBuilder } from '../builder'\nimport { RequestStatus } from '../../../../utils/ReportStatus/types'\nimport { components } from '../../../../types/api'\n\nexport class RequestedReportBuilder extends StoreItemBuilder {\n filters!: ParamsConfig\n\n sort!: ParamsConfig\n\n constructor(\n readonly req: Request,\n res: Response,\n ) {\n super(res)\n }\n\n private buildReportData = () => {\n const requestFormData: RequestFormData = this.req.body\n this.reportType = requestFormData.type as ReportType\n\n return this.buildReportMetaData(requestFormData)\n }\n\n private buildFilters = () => {\n if (!this.queryData || !this.queryData.filterData) return undefined\n\n const { filterData } = this.queryData\n\n return {\n data: filterData,\n queryString: new URLSearchParams(filterData).toString(),\n }\n }\n\n private buildSortData = () => {\n if (!this.queryData || !this.queryData?.sortData) return undefined\n\n const { sortData } = this.queryData\n\n return {\n data: sortData ?? {},\n queryString: new URLSearchParams(sortData).toString(),\n }\n }\n\n private buildRequestUrls = () => {\n const url = new URL(this.req.originalUrl, `${this.req.protocol}://${this.req.get('host')}`)\n const { pathname, search, origin } = url\n\n const pollingUrlData = this.setPollingUrlData(origin)\n\n const requestUrlData = {\n fullUrl: `${origin}${this.req.originalUrl}`,\n pathname,\n search,\n }\n\n return {\n origin,\n request: requestUrlData,\n polling: pollingUrlData,\n }\n }\n\n private setPollingUrlData = (origin: string) => {\n const { definitionsPath, dpdPathFromQuery } = this.res.locals\n\n const { executionId } = this.executionData\n\n let pollingPath = this.req.baseUrl.replace('/filters', `/${executionId}/status`)\n if (dpdPathFromQuery) {\n pollingPath = `${pollingPath}?dataProductDefinitionsPath=${definitionsPath}`\n }\n\n const pollingFullUrl = `${origin}${pollingPath}`\n\n return {\n fullUrl: pollingFullUrl,\n pathname: pollingPath,\n }\n }\n\n private buildStatus = () => {\n return RequestStatus.SUBMITTED\n }\n\n private buildTimestamp = () => {\n return {\n requested: new Date(),\n }\n }\n\n private buildQuery = (): AsyncReportQueryData | undefined => {\n if (!this.queryData?.query || !this.queryData.querySummary) return undefined\n\n const { query: data, querySummary: summary } = this.queryData\n\n return {\n data,\n summary,\n }\n }\n\n private buildSections = () => {\n if (!this.reportType && this.reportType !== ReportType.DASHBOARD) return undefined\n\n const bodySections = this.req.body.sections\n\n const sections: components['schemas']['DashboardSectionDefinition'][] = bodySections\n ? JSON.parse(this.req.body.sections)\n : []\n\n return sections.filter(section => section.display).map(section => ({ name: section.display || '' }))\n }\n\n build = (): RequestedReport => {\n const reportData = this.buildReportData()\n const filters = this.buildFilters()\n const sortBy = this.buildSortData()\n const url = this.buildRequestUrls()\n const status = this.buildStatus()\n const timestamp = this.buildTimestamp()\n const definitionsPath = this.buidDefinitionsPath()\n const query = this.buildQuery()\n const metrics = this.buildSections()\n\n const requestedReportData: RequestedReport | RequestedDashboard = {\n ...reportData,\n ...this.executionData,\n ...(this.childExecutionData && { childExecutionData: this.childExecutionData }),\n ...(filters && { filters }),\n ...(sortBy && { sortBy }),\n ...(query && { query }),\n ...(metrics && { metrics }),\n ...(definitionsPath && definitionsPath),\n url,\n status,\n timestamp,\n }\n\n return requestedReportData\n }\n}\n"],"names":["StoreItemBuilder","RequestStatus","ReportType"],"mappings":"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"}
@@ -33,7 +33,7 @@ const QuerySummaryItemSchema = z.z
33
33
  })
34
34
  .catchall(z.z.unknown());
35
35
  const AsyncReportQueryDataSchema = z.z.object({
36
- data: z.z.record(z.z.string(), z.z.union([z.z.string(), z.z.array(z.z.string())])),
36
+ data: z.z.record(z.z.string(), z.z.union([z.z.string(), z.z.array(z.z.string())])).default({}),
37
37
  summary: z.z.array(QuerySummaryItemSchema),
38
38
  });
39
39
  const AsyncReportUrlItemDataSchema = z.z.object({
@@ -55,7 +55,7 @@ const ChildReportExecutionDataSchema = z.z.object({
55
55
  status: RequestStatusSchema.optional(),
56
56
  });
57
57
  const ParamsConfigSchema = z.z.object({
58
- data: z.z.record(z.z.string(), z.z.string()),
58
+ data: z.z.record(z.z.string(), z.z.string()).default({}),
59
59
  queryString: z.z.string(),
60
60
  });
61
61
  const normalizeStoredReportData = (data) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/my-reports/validation.ts"],"sourcesContent":["import { LoadType, ReportType, RequestStatus } from 'src/dpr/types/UserReports'\nimport { z } from 'zod'\n\nconst RequestStatusSchema = z.enum([\n RequestStatus.SUBMITTED,\n RequestStatus.STARTED,\n RequestStatus.PICKED,\n RequestStatus.READY,\n RequestStatus.FINISHED,\n RequestStatus.EXPIRED,\n RequestStatus.FAILED,\n RequestStatus.ABORTED,\n RequestStatus.ALL,\n])\n\nconst ReportTypeSchema = z.enum([ReportType.REPORT, ReportType.DASHBOARD])\n\nconst LoadTypeSchema = z.enum([LoadType.ASYNC, LoadType.SYNC])\n\nexport const AsyncReportsTimestampSchema = z.object({\n lastViewed: z.coerce.date().optional(),\n requested: z.coerce.date().optional(),\n completed: z.coerce.date().optional(),\n expired: z.coerce.date().optional(),\n failed: z.coerce.date().optional(),\n retried: z.coerce.date().optional(),\n aborted: z.coerce.date().optional(),\n refresh: z.coerce.date().optional(),\n})\n\nconst QuerySummaryItemSchema = z\n .object({\n name: z.string(),\n value: z.string(),\n })\n .catchall(z.unknown())\n\nconst AsyncReportQueryDataSchema = z.object({\n data: z.record(z.string(), z.union([z.string(), z.array(z.string())])),\n summary: z.array(QuerySummaryItemSchema),\n})\n\nconst AsyncReportUrlItemDataSchema = z.object({\n pathname: z.string().optional(),\n fullUrl: z.string().optional(),\n search: z.string().optional(),\n default: z.string().optional(),\n})\n\nconst AsyncReportUrlDataSchema = z.object({\n origin: z.string(),\n request: AsyncReportUrlItemDataSchema.optional(),\n report: AsyncReportUrlItemDataSchema.optional(),\n polling: AsyncReportUrlItemDataSchema.optional(),\n})\n\nconst ChildReportExecutionDataSchema = z.object({\n variantId: z.string(),\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n status: RequestStatusSchema.optional(),\n})\n\nexport const ParamsConfigSchema = z.object({\n data: z.record(z.string(), z.string()),\n queryString: z.string(),\n})\n\nexport const normalizeStoredReportData = <\n T extends {\n name?: string | undefined\n variantName?: string | undefined\n },\n>(\n data: T,\n) => ({\n ...data,\n name: data.name ?? data.variantName ?? '',\n})\n\nexport const StoredReportDataObjectSchema = z.object({\n reportId: z.string(),\n variantId: z.string().optional(),\n id: z.string(),\n\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n\n reportName: z.string(),\n\n variantName: z.string().optional(),\n name: z.string().optional(),\n\n description: z.string(),\n\n status: RequestStatusSchema.optional(),\n\n timestamp: AsyncReportsTimestampSchema,\n\n dataProductDefinitionsPath: z.string().optional(),\n dpdPathFromQuery: z.boolean().optional(),\n\n query: AsyncReportQueryDataSchema.optional(),\n interactiveQuery: AsyncReportQueryDataSchema.optional(),\n\n url: AsyncReportUrlDataSchema.optional(),\n\n type: ReportTypeSchema,\n\n loadType: LoadTypeSchema.optional(),\n\n childExecutionData: z.array(ChildReportExecutionDataSchema).optional(),\n})\n"],"names":["z","RequestStatus","ReportType","LoadType"],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/my-reports/validation.ts"],"sourcesContent":["import { LoadType, ReportType, RequestStatus } from 'src/dpr/types/UserReports'\nimport { z } from 'zod'\n\nconst RequestStatusSchema = z.enum([\n RequestStatus.SUBMITTED,\n RequestStatus.STARTED,\n RequestStatus.PICKED,\n RequestStatus.READY,\n RequestStatus.FINISHED,\n RequestStatus.EXPIRED,\n RequestStatus.FAILED,\n RequestStatus.ABORTED,\n RequestStatus.ALL,\n])\n\nconst ReportTypeSchema = z.enum([ReportType.REPORT, ReportType.DASHBOARD])\n\nconst LoadTypeSchema = z.enum([LoadType.ASYNC, LoadType.SYNC])\n\nexport const AsyncReportsTimestampSchema = z.object({\n lastViewed: z.coerce.date().optional(),\n requested: z.coerce.date().optional(),\n completed: z.coerce.date().optional(),\n expired: z.coerce.date().optional(),\n failed: z.coerce.date().optional(),\n retried: z.coerce.date().optional(),\n aborted: z.coerce.date().optional(),\n refresh: z.coerce.date().optional(),\n})\n\nconst QuerySummaryItemSchema = z\n .object({\n name: z.string(),\n value: z.string(),\n })\n .catchall(z.unknown())\n\nconst AsyncReportQueryDataSchema = z.object({\n data: z.record(z.string(), z.union([z.string(), z.array(z.string())])).default({}),\n summary: z.array(QuerySummaryItemSchema),\n})\n\nconst AsyncReportUrlItemDataSchema = z.object({\n pathname: z.string().optional(),\n fullUrl: z.string().optional(),\n search: z.string().optional(),\n default: z.string().optional(),\n})\n\nconst AsyncReportUrlDataSchema = z.object({\n origin: z.string(),\n request: AsyncReportUrlItemDataSchema.optional(),\n report: AsyncReportUrlItemDataSchema.optional(),\n polling: AsyncReportUrlItemDataSchema.optional(),\n})\n\nconst ChildReportExecutionDataSchema = z.object({\n variantId: z.string(),\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n status: RequestStatusSchema.optional(),\n})\n\nexport const ParamsConfigSchema = z.object({\n data: z.record(z.string(), z.string()).default({}),\n queryString: z.string(),\n})\n\nexport const normalizeStoredReportData = <\n T extends {\n name?: string | undefined\n variantName?: string | undefined\n },\n>(\n data: T,\n) => ({\n ...data,\n name: data.name ?? data.variantName ?? '',\n})\n\nexport const StoredReportDataObjectSchema = z.object({\n reportId: z.string(),\n variantId: z.string().optional(),\n id: z.string(),\n\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n\n reportName: z.string(),\n\n variantName: z.string().optional(),\n name: z.string().optional(),\n\n description: z.string(),\n\n status: RequestStatusSchema.optional(),\n\n timestamp: AsyncReportsTimestampSchema,\n\n dataProductDefinitionsPath: z.string().optional(),\n dpdPathFromQuery: z.boolean().optional(),\n\n query: AsyncReportQueryDataSchema.optional(),\n interactiveQuery: AsyncReportQueryDataSchema.optional(),\n\n url: AsyncReportUrlDataSchema.optional(),\n\n type: ReportTypeSchema,\n\n loadType: LoadTypeSchema.optional(),\n\n childExecutionData: z.array(ChildReportExecutionDataSchema).optional(),\n})\n"],"names":["z","RequestStatus","ReportType","LoadType"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/view-report/utils.ts"],"sourcesContent":["import { Request, Response } from 'express'\nimport {\n qsToQueryObject,\n normalizeQueryStringArray,\n queryObjectToQs,\n extractFiltersFromQuery,\n} from '../../../utils/queryMappers'\n\nimport { joinQueryStrings } from '../../../utils/urlHelper'\nimport { components } from '../../../types/api'\nimport { Services } from '../../../types/Services'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport ColumnsUtils from '../../../components/_reports/report-heading/report-columns/report-columns-form/utils'\nimport { getActiveJourneyValue } from '../../../utils/sessionHelper'\nimport { getFields } from '../../../utils/definitionUtils'\nimport { LoadType, RequestedReport } from '../../../types/UserReports'\nimport { QuerySummaryItem } from '../../../components/_async/request-details/types'\nimport { buildQuerySummary } from '../../../components/_async/request-details/utils'\nimport { ViewedReportBuilder } from '../my-reports/recently-viewed/builder'\nimport { ReportData } from '../my-reports/builder'\nimport { getMyReport } from '../my-reports/utils'\n\n/**\n * Apply interactive query to a REPORT\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {('columns' | 'filters')} applyType\n * @return {*}\n */\nexport const applyReportInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n) => {\n const { reportId, id } = <{ id: string; reportId: string }>req.params\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n\n // Get the definition\n const definition =\n (res.locals['definition'] as components['schemas']['SingleVariantReportDefinition']) ??\n (await services.reportingService.getDefinition(token, reportId, id, definitionsPath))\n\n const fields = getFields(definition) || []\n\n return applyInteractiveQuery(req, res, applyType, loadType, fields)\n}\n\n/**\n * Apply interactive query to a DASHBOARD\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {('columns' | 'filters')} applyType\n * @return {*}\n */\nexport const applyDashboardInteractiveQuery = async (\n req: Request,\n res: Response,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n) => {\n return applyInteractiveQuery(req, res, applyType, loadType)\n}\n\n/**\n * Apply the interactive query\n *\n * @param {Request} req\n * @param {Response} res\n * @param {('columns' | 'filters')} applyType\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nconst applyInteractiveQuery = async (\n req: Request,\n res: Response,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n fields?: components['schemas']['FieldDefinition'][],\n) => {\n const { tableId, id, reportId } = <{ id: string; reportId: string; tableId: string }>req.params\n\n // Get the stored interactive query data\n const sessionkey = loadType === LoadType.ASYNC ? { id, tableId, reportId } : { id, reportId }\n const queryDataFromSession = getActiveJourneyValue(req, sessionkey, 'currentReportSearch')\n\n let queryData: Record<string, string | string[]> = {}\n let filtersData: Record<string, string | string[]> = {}\n let columnsData: Record<string, string | string[]> = {}\n\n if (queryDataFromSession) {\n queryData = qsToQueryObject(queryDataFromSession, '')\n filtersData = qsToQueryObject(queryDataFromSession, 'filters.')\n columnsData = qsToQueryObject(queryDataFromSession, 'columns')\n }\n\n // Set the query values from the current query\n const preventDefault = queryData?.['preventDefault']\n const pageSize = queryData?.['pageSize']\n const selectedPage = applyType === 'columns' ? queryData?.['selectedPage'] : '1'\n const sortColumn = queryData?.['sortColumn']\n const sortedAsc = queryData?.['sortedAsc']\n\n // Create merged form data\n let formData: Record<string, string | string[]> = {\n ...(preventDefault && { preventDefault }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...(filtersData && filtersData),\n ...(columnsData && columnsData),\n }\n\n formData =\n applyType === 'columns' && fields\n ? applyColumns(req, queryData, formData, fields)\n : applyFilters(req, queryData, formData)\n\n const filtersString = queryObjectToQs(formData)\n\n // Redirect back to report\n res.redirect(`${req.baseUrl}?${filtersString}`)\n}\n\n/**\n * Apply columns\n *\n * @param {Request} req\n * @param {(Record<string, string | string[]>)} queryData\n * @param {(Record<string, string | string[]>)} formData\n * @param {components['schemas']['FieldDefinition'][]} fields\n * @return {*}\n */\nconst applyColumns = (\n req: Request,\n queryData: Record<string, string | string[]>,\n formData: Record<string, string | string[]>,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { columns: reqColumns } = req.body\n\n // Normalize the req columns - should always be an array\n let bodyColumns: string[] = []\n if (reqColumns) {\n bodyColumns = Array.isArray(reqColumns) ? reqColumns : [reqColumns]\n }\n\n // ensure mandatory cols are present and set the updated columns\n const mandatoryCols = ColumnsUtils.mandatoryColumns(fields)\n const columns = Array.from(new Set([...mandatoryCols, ...bodyColumns]))\n\n // Keep the filter values the same as current\n let filters = {}\n if (queryData) {\n filters = Object.keys(queryData)\n .filter(key => key.includes('filters.'))\n .reduce((acc, key) => ({ ...acc, [key]: queryData[key] }), {})\n }\n\n return { ...formData, columns, ...filters }\n}\n\n/**\n * Apply filters\n *\n * @param {(Record<string, string | string[]>)} queryData\n * @param {(Record<string, string | string[]>)} formData\n * @return {*}\n */\nconst applyFilters = (\n req: Request,\n queryData: Record<string, string | string[]>,\n formData: Record<string, string | string[]>,\n) => {\n // Ensure current columns stay the same and are normalized\n const columns = normalizeQueryStringArray(queryData?.['columns']) || []\n const filters = Object.fromEntries(\n Object.keys(req.body)\n .filter(key => key.startsWith('filters.'))\n .map(key => [key, req.body[key]]),\n )\n\n return { ...formData, ...filters, columns }\n}\n\n/**\n * Reset filters action\n *\n * @param {Request} req\n * @param {Response} res\n */\nconst resetFilters = (req: Request, res: Response, sessionKey: { id: string; reportId: string; tableId?: string }) => {\n // Create the reset querystring\n const finalQuery = resetFiltersQueryString(req, sessionKey)\n\n // Redirect with new query string - query string will handle all rendered elements\n if (finalQuery) {\n res.redirect(`${req.baseUrl}?${finalQuery}`)\n }\n}\n\n/**\n * Creates the query string to reset the filters\n *\n * @param {Request} req\n * @param {{ id: string; reportId: string; tableId?: string }} sessionKey\n * @return {*} {string}\n */\nconst resetFiltersQueryString = (\n req: Request,\n sessionKey: { id: string; reportId: string; tableId?: string },\n): string => {\n const defaultSessionKey = { id: sessionKey.id, reportId: sessionKey.reportId }\n const defaultFiltersSearch = getActiveJourneyValue(req, defaultSessionKey, 'interactiveDefaultFiltersSearch')\n const savedInteractiveDefaultsSearch = getActiveJourneyValue(req, defaultSessionKey, 'savedInteractiveDefaultsSearch')\n\n // Set the effective qs: if saved defaults, use those. Otherwise use DPD defaults\n const effectiveQueryString =\n savedInteractiveDefaultsSearch && savedInteractiveDefaultsSearch.length\n ? savedInteractiveDefaultsSearch\n : defaultFiltersSearch\n\n // Get all the current stuff\n const currentColumnsSearch = getActiveJourneyValue(req, sessionKey, 'currentReportColumnsSearch')\n const currentSortSearch = getActiveJourneyValue(req, sessionKey, 'currentSortSearch')\n const currentPageSizeSearch = getActiveJourneyValue(req, sessionKey, 'currentPageSizeSearch')\n\n // Create the final querystring\n return joinQueryStrings(effectiveQueryString, currentColumnsSearch, currentSortSearch, currentPageSizeSearch)\n}\n\n/**\n * Creates the query string to reset the columns\n *\n * @param {Request} req\n * @param {{ id: string; reportId: string; tableId?: string }} sessionKey\n * @return {*} {string}\n */\nconst resetColumnsQueryString = (\n req: Request,\n sessionKey: { id: string; reportId: string; tableId?: string },\n): string => {\n // get the default DPD filters\n const defaultSessionKey = { id: sessionKey.id, reportId: sessionKey.reportId }\n const defaultColumnsSearch = getActiveJourneyValue(req, defaultSessionKey, 'defaultColumnsSearch')\n\n // Get all the current stuff\n const currentReportFiltersSearch = getActiveJourneyValue(req, sessionKey, 'currentReportFiltersSearch')\n const currentSortSearch = getActiveJourneyValue(req, sessionKey, 'currentSortSearch')\n const currentPageSizeSearch = getActiveJourneyValue(req, sessionKey, 'currentPageSizeSearch')\n\n // Create the final querystring\n return joinQueryStrings(defaultColumnsSearch, currentReportFiltersSearch, currentSortSearch, currentPageSizeSearch)\n}\n\n/**\n * Creates the default query string\n *\n * @param {Request} req\n * @return {*} {(string | undefined)}\n */\nconst createDefaultQueryString = (req: Request): string | undefined => {\n const { id, reportId, tableId } = req.params as {\n id: string\n reportId: string\n tableId: string\n }\n\n // Get the interactive report defaults\n const sessionKey = { id, reportId }\n\n // Definition defaults\n const defaultFiltersSearch = getActiveJourneyValue(req, sessionKey, 'interactiveDefaultFiltersSearch')\n const defaultColumnsSearch = getActiveJourneyValue(req, sessionKey, 'defaultColumnsSearch')\n const defaultSort = getActiveJourneyValue(req, sessionKey, 'defaultSortQueryString')\n\n // User defined values\n const savedInteractiveDefaultsSearch = getActiveJourneyValue(req, sessionKey, 'savedInteractiveDefaultsSearch')\n const requestedSort = getActiveJourneyValue(req, { id, reportId, tableId }, 'requestedSortSearch')\n\n /**\n * A report will always have default columns.\n * Redirect when the request has no query params,\n * applying default columns and optional filters.\n */\n const hasIncomingQueryParams = Object.keys(req.query).length > 0\n if (hasIncomingQueryParams || !defaultColumnsSearch) {\n return undefined\n }\n\n // Filters: saved defaults override interactive default\n const filtersToApply =\n savedInteractiveDefaultsSearch && savedInteractiveDefaultsSearch.length\n ? savedInteractiveDefaultsSearch\n : defaultFiltersSearch\n\n // Sort precedence: requested > default > none\n const sortToApply = requestedSort ?? defaultSort\n\n // Build the query string progressively\n let query = defaultColumnsSearch\n if (filtersToApply) {\n query = joinQueryStrings(query, filtersToApply)\n }\n if (sortToApply) {\n query = joinQueryStrings(query, sortToApply)\n }\n return query\n}\n\n/**\n * Redirects the report to use the defaults\n *\n * @param {Response} res\n * @param {Request} req\n * @return {*}\n */\nexport const redirectWithDefaults = (res: Response, req: Request) => {\n const finalQuery = createDefaultQueryString(req)\n if (finalQuery) {\n const baseUrl = req.originalUrl.split('?')[0].replace(/\\/$/, '')\n res.redirect(`${baseUrl}?${finalQuery}`)\n return true\n }\n return false\n}\n\n/**\n * Updates the report state to expired and redirects\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n */\nexport const updateStateToExpiredAndRedirect = async (req: Request, res: Response, services: Services) => {\n const { tableId } = req.params as { tableId: string }\n const { dprUser } = LocalsHelper.getValues(res)\n\n // set the report to expired\n await services.recentlyViewedService.setToExpiredByTableId(tableId, dprUser.id)\n await services.requestedReportService.setToExpiredByTableId(tableId, dprUser.id)\n\n // get the updated report state\n const updatedReportState = await getMyReport({ tableId }, 'recentlyViewedReports', services, dprUser.id)\n const pollingUrl = updatedReportState?.url?.polling?.fullUrl\n\n // redirect to polling page, or safe fallback\n res.redirect(pollingUrl ?? '/')\n}\n\n/**\n * Updates the state for a viewed ASYNC report\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {RequestedReport} reportStateData\n * @param {string} userId\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nexport const updateLastViewedAsync = async (\n req: Request,\n res: Response,\n services: Services,\n reportStateData: RequestedReport,\n userId: string,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n\n const filtersQuery = extractFiltersFromQuery(req.query)\n const interactiveQueryData: { query: Record<string, string | string[]>; querySummary: QuerySummaryItem[] } = {\n query: <Record<string, string>>req.query,\n querySummary: buildQuerySummary(filtersQuery, fields),\n }\n\n const recentlyViewedReportData = new ViewedReportBuilder(req, res)\n .withReportData(reportData)\n .withExecutionData(executionData)\n .withInteractiveQuery(interactiveQueryData)\n .withRequestData(query, url)\n .build()\n\n if (executionId) await services.requestedReportService.updateLastViewed(executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedReportData, userId)\n}\n\n/**\n * Updates the last viewed state for a sync report\n *\n * @param {Request} req\n * @param {Services} services\n * @param {*} stateData\n * @param {string} userId\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nexport const updateLastViewedSync = async (\n req: Request,\n res: Response,\n services: Services,\n reportData: ReportData,\n userId: string,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const filtersQuery = extractFiltersFromQuery(req.query)\n const interactiveQueryData: { query: Record<string, string>; querySummary: QuerySummaryItem[] } = {\n query: <Record<string, string>>req.query,\n querySummary: buildQuerySummary(filtersQuery, fields),\n }\n\n const recentlyViewedReportData = new ViewedReportBuilder(req, res)\n .withReportData(reportData)\n .withInteractiveQuery(interactiveQueryData)\n .build()\n\n await services.recentlyViewedService?.setRecentlyViewed(recentlyViewedReportData, userId)\n}\n\nexport default {\n applyDashboardInteractiveQuery,\n applyReportInteractiveQuery,\n resetFilters,\n resetFiltersQueryString,\n resetColumnsQueryString,\n redirectWithDefaults,\n}\n"],"names":["LocalsHelper","getFields","LoadType","getActiveJourneyValue","qsToQueryObject","queryObjectToQs","ColumnsUtils","normalizeQueryStringArray","joinQueryStrings","getMyReport","extractFiltersFromQuery","buildQuerySummary","ViewedReportBuilder"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/view-report/utils.ts"],"sourcesContent":["import { Request, Response } from 'express'\nimport {\n qsToQueryObject,\n normalizeQueryStringArray,\n queryObjectToQs,\n extractFiltersFromQuery,\n} from '../../../utils/queryMappers'\n\nimport { joinQueryStrings } from '../../../utils/urlHelper'\nimport { components } from '../../../types/api'\nimport { Services } from '../../../types/Services'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport ColumnsUtils from '../../../components/_reports/report-heading/report-columns/report-columns-form/utils'\nimport { getActiveJourneyValue } from '../../../utils/sessionHelper'\nimport { getFields } from '../../../utils/definitionUtils'\nimport { LoadType, RequestedReport } from '../../../types/UserReports'\nimport { QuerySummaryItem } from '../../../components/_async/request-details/types'\nimport { buildQuerySummary } from '../../../components/_async/request-details/utils'\nimport { ViewedReportBuilder } from '../my-reports/recently-viewed/builder'\nimport { ReportData } from '../my-reports/builder'\nimport { getMyReport } from '../my-reports/utils'\n\n/**\n * Apply interactive query to a REPORT\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {('columns' | 'filters')} applyType\n * @return {*}\n */\nexport const applyReportInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n) => {\n const { reportId, id } = <{ id: string; reportId: string }>req.params\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n\n // Get the definition\n const definition =\n (res.locals['definition'] as components['schemas']['SingleVariantReportDefinition']) ??\n (await services.reportingService.getDefinition(token, reportId, id, definitionsPath))\n\n const fields = getFields(definition) || []\n\n return applyInteractiveQuery(req, res, applyType, loadType, fields)\n}\n\n/**\n * Apply interactive query to a DASHBOARD\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {('columns' | 'filters')} applyType\n * @return {*}\n */\nexport const applyDashboardInteractiveQuery = async (\n req: Request,\n res: Response,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n) => {\n return applyInteractiveQuery(req, res, applyType, loadType)\n}\n\n/**\n * Apply the interactive query\n *\n * @param {Request} req\n * @param {Response} res\n * @param {('columns' | 'filters')} applyType\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nconst applyInteractiveQuery = async (\n req: Request,\n res: Response,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n fields?: components['schemas']['FieldDefinition'][],\n) => {\n const { tableId, id, reportId } = <{ id: string; reportId: string; tableId: string }>req.params\n\n // Get the stored interactive query data\n const sessionkey = loadType === LoadType.ASYNC ? { id, tableId, reportId } : { id, reportId }\n const queryDataFromSession = getActiveJourneyValue(req, sessionkey, 'currentReportSearch')\n\n let queryData: Record<string, string | string[]> = {}\n let filtersData: Record<string, string | string[]> = {}\n let columnsData: Record<string, string | string[]> = {}\n\n if (queryDataFromSession) {\n queryData = qsToQueryObject(queryDataFromSession, '')\n filtersData = qsToQueryObject(queryDataFromSession, 'filters.')\n columnsData = qsToQueryObject(queryDataFromSession, 'columns')\n }\n\n // Set the query values from the current query\n const preventDefault = queryData?.['preventDefault']\n const pageSize = queryData?.['pageSize']\n const selectedPage = applyType === 'columns' ? queryData?.['selectedPage'] : '1'\n const sortColumn = queryData?.['sortColumn']\n const sortedAsc = queryData?.['sortedAsc']\n\n // Create merged form data\n let formData: Record<string, string | string[]> = {\n ...(preventDefault && { preventDefault }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...(filtersData && filtersData),\n ...(columnsData && columnsData),\n }\n\n formData =\n applyType === 'columns' && fields\n ? applyColumns(req, queryData, formData, fields)\n : applyFilters(req, queryData, formData)\n\n const filtersString = queryObjectToQs(formData)\n\n // Redirect back to report\n res.redirect(`${req.baseUrl}?${filtersString}`)\n}\n\n/**\n * Apply columns\n *\n * @param {Request} req\n * @param {(Record<string, string | string[]>)} queryData\n * @param {(Record<string, string | string[]>)} formData\n * @param {components['schemas']['FieldDefinition'][]} fields\n * @return {*}\n */\nconst applyColumns = (\n req: Request,\n queryData: Record<string, string | string[]>,\n formData: Record<string, string | string[]>,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { columns: reqColumns } = req.body\n\n // Normalize the req columns - should always be an array\n let bodyColumns: string[] = []\n if (reqColumns) {\n bodyColumns = Array.isArray(reqColumns) ? reqColumns : [reqColumns]\n }\n\n // ensure mandatory cols are present and set the updated columns\n const mandatoryCols = ColumnsUtils.mandatoryColumns(fields)\n const columns = Array.from(new Set([...mandatoryCols, ...bodyColumns]))\n\n // Keep the filter values the same as current\n let filters = {}\n if (queryData) {\n filters = Object.keys(queryData)\n .filter(key => key.includes('filters.'))\n .reduce((acc, key) => ({ ...acc, [key]: queryData[key] }), {})\n }\n\n return { ...formData, columns, ...filters }\n}\n\n/**\n * Apply filters\n *\n * @param {(Record<string, string | string[]>)} queryData\n * @param {(Record<string, string | string[]>)} formData\n * @return {*}\n */\nconst applyFilters = (\n req: Request,\n queryData: Record<string, string | string[]>,\n formData: Record<string, string | string[]>,\n) => {\n // Ensure current columns stay the same and are normalized\n const columns = normalizeQueryStringArray(queryData?.['columns']) || []\n const filters = Object.fromEntries(\n Object.keys(req.body)\n .filter(key => key.startsWith('filters.'))\n .map(key => [key, req.body[key]]),\n )\n\n return { ...formData, ...filters, columns }\n}\n\n/**\n * Reset filters action\n *\n * @param {Request} req\n * @param {Response} res\n */\nconst resetFilters = (req: Request, res: Response, sessionKey: { id: string; reportId: string; tableId?: string }) => {\n // Create the reset querystring\n const finalQuery = resetFiltersQueryString(req, sessionKey)\n\n // Redirect with new query string - query string will handle all rendered elements\n if (finalQuery) {\n res.redirect(`${req.baseUrl}?${finalQuery}`)\n }\n}\n\n/**\n * Creates the query string to reset the filters\n *\n * @param {Request} req\n * @param {{ id: string; reportId: string; tableId?: string }} sessionKey\n * @return {*} {string}\n */\nconst resetFiltersQueryString = (\n req: Request,\n sessionKey: { id: string; reportId: string; tableId?: string },\n): string => {\n const defaultSessionKey = { id: sessionKey.id, reportId: sessionKey.reportId }\n const defaultFiltersSearch = getActiveJourneyValue(req, defaultSessionKey, 'interactiveDefaultFiltersSearch')\n const savedInteractiveDefaultsSearch = getActiveJourneyValue(req, defaultSessionKey, 'savedInteractiveDefaultsSearch')\n\n // Set the effective qs: if saved defaults, use those. Otherwise use DPD defaults\n const effectiveQueryString =\n savedInteractiveDefaultsSearch && savedInteractiveDefaultsSearch.length\n ? savedInteractiveDefaultsSearch\n : defaultFiltersSearch\n\n // Get all the current stuff\n const currentColumnsSearch = getActiveJourneyValue(req, sessionKey, 'currentReportColumnsSearch')\n const currentSortSearch = getActiveJourneyValue(req, sessionKey, 'currentSortSearch')\n const currentPageSizeSearch = getActiveJourneyValue(req, sessionKey, 'currentPageSizeSearch')\n\n // Create the final querystring\n return joinQueryStrings(effectiveQueryString, currentColumnsSearch, currentSortSearch, currentPageSizeSearch)\n}\n\n/**\n * Creates the query string to reset the columns\n *\n * @param {Request} req\n * @param {{ id: string; reportId: string; tableId?: string }} sessionKey\n * @return {*} {string}\n */\nconst resetColumnsQueryString = (\n req: Request,\n sessionKey: { id: string; reportId: string; tableId?: string },\n): string => {\n // get the default DPD filters\n const defaultSessionKey = { id: sessionKey.id, reportId: sessionKey.reportId }\n const defaultColumnsSearch = getActiveJourneyValue(req, defaultSessionKey, 'defaultColumnsSearch')\n\n // Get all the current stuff\n const currentReportFiltersSearch = getActiveJourneyValue(req, sessionKey, 'currentReportFiltersSearch')\n const currentSortSearch = getActiveJourneyValue(req, sessionKey, 'currentSortSearch')\n const currentPageSizeSearch = getActiveJourneyValue(req, sessionKey, 'currentPageSizeSearch')\n\n // Create the final querystring\n return joinQueryStrings(defaultColumnsSearch, currentReportFiltersSearch, currentSortSearch, currentPageSizeSearch)\n}\n\n/**\n * Creates the default query string\n *\n * @param {Request} req\n * @return {*} {(string | undefined)}\n */\nconst createDefaultQueryString = (req: Request): string | undefined => {\n const { id, reportId, tableId } = req.params as {\n id: string\n reportId: string\n tableId: string\n }\n\n // Get the interactive report defaults\n const sessionKey = { id, reportId }\n\n // Definition defaults\n const defaultFiltersSearch = getActiveJourneyValue(req, sessionKey, 'interactiveDefaultFiltersSearch')\n const defaultColumnsSearch = getActiveJourneyValue(req, sessionKey, 'defaultColumnsSearch')\n const defaultSort = getActiveJourneyValue(req, sessionKey, 'defaultSortQueryString')\n\n // User defined values\n const savedInteractiveDefaultsSearch = getActiveJourneyValue(req, sessionKey, 'savedInteractiveDefaultsSearch')\n const requestedSort = getActiveJourneyValue(req, { id, reportId, tableId }, 'requestedSortSearch')\n\n /**\n * A report will always have default columns.\n * Redirect when the request has no query params,\n * applying default columns and optional filters.\n */\n const hasIncomingQueryParams = Object.keys(req.query).length > 0\n if (hasIncomingQueryParams || !defaultColumnsSearch) {\n return undefined\n }\n\n // Filters: saved defaults override interactive default\n const filtersToApply =\n savedInteractiveDefaultsSearch && savedInteractiveDefaultsSearch.length\n ? savedInteractiveDefaultsSearch\n : defaultFiltersSearch\n\n // Sort precedence: requested > default > none\n const sortToApply = requestedSort ?? defaultSort\n\n // Build the query string progressively\n let query = defaultColumnsSearch\n if (filtersToApply) {\n query = joinQueryStrings(query, filtersToApply)\n }\n if (sortToApply) {\n query = joinQueryStrings(query, sortToApply)\n }\n return query\n}\n\n/**\n * Redirects the report to use the defaults\n *\n * @param {Response} res\n * @param {Request} req\n * @return {*}\n */\nexport const redirectWithDefaults = (res: Response, req: Request) => {\n const finalQuery = createDefaultQueryString(req)\n if (finalQuery) {\n const baseUrl = req.originalUrl.split('?')[0].replace(/\\/$/, '')\n res.redirect(`${baseUrl}?${finalQuery}`)\n return true\n }\n return false\n}\n\n/**\n * Updates the report state to expired and redirects\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n */\nexport const updateStateToExpiredAndRedirect = async (req: Request, res: Response, services: Services) => {\n const { tableId } = req.params as { tableId: string }\n const { dprUser } = LocalsHelper.getValues(res)\n\n // set the report to expired\n await services.recentlyViewedService.setToExpiredByTableId(tableId, dprUser.id)\n await services.requestedReportService.setToExpiredByTableId(tableId, dprUser.id)\n\n // get the updated report state\n const updatedReportState = await getMyReport({ tableId }, 'recentlyViewedReports', services, dprUser.id)\n const pollingUrl = updatedReportState?.url?.polling?.fullUrl\n\n // redirect to polling page, or safe fallback\n res.redirect(pollingUrl ?? '/')\n}\n\n/**\n * Updates the state for a viewed ASYNC report\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {RequestedReport} reportStateData\n * @param {string} userId\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nexport const updateLastViewedAsync = async (\n req: Request,\n res: Response,\n services: Services,\n reportStateData: RequestedReport,\n userId: string,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n\n const filtersQuery = extractFiltersFromQuery(req.query)\n const interactiveQueryData: { query: Record<string, string | string[]>; querySummary: QuerySummaryItem[] } = {\n query: <Record<string, string | string[]>>req.query,\n querySummary: buildQuerySummary(filtersQuery, fields),\n }\n\n const recentlyViewedReportData = new ViewedReportBuilder(req, res)\n .withReportData(reportData)\n .withExecutionData(executionData)\n .withInteractiveQuery(interactiveQueryData)\n .withRequestData(query, url)\n .build()\n\n if (executionId) await services.requestedReportService.updateLastViewed(executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedReportData, userId)\n}\n\n/**\n * Updates the last viewed state for a sync report\n *\n * @param {Request} req\n * @param {Services} services\n * @param {*} stateData\n * @param {string} userId\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nexport const updateLastViewedSync = async (\n req: Request,\n res: Response,\n services: Services,\n reportData: ReportData,\n userId: string,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const filtersQuery = extractFiltersFromQuery(req.query)\n const interactiveQueryData: { query: Record<string, string>; querySummary: QuerySummaryItem[] } = {\n query: <Record<string, string>>req.query,\n querySummary: buildQuerySummary(filtersQuery, fields),\n }\n\n const recentlyViewedReportData = new ViewedReportBuilder(req, res)\n .withReportData(reportData)\n .withInteractiveQuery(interactiveQueryData)\n .build()\n\n await services.recentlyViewedService?.setRecentlyViewed(recentlyViewedReportData, userId)\n}\n\nexport default {\n applyDashboardInteractiveQuery,\n applyReportInteractiveQuery,\n resetFilters,\n resetFiltersQueryString,\n resetColumnsQueryString,\n redirectWithDefaults,\n}\n"],"names":["LocalsHelper","getFields","LoadType","getActiveJourneyValue","qsToQueryObject","queryObjectToQs","ColumnsUtils","normalizeQueryStringArray","joinQueryStrings","getMyReport","extractFiltersFromQuery","buildQuerySummary","ViewedReportBuilder"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reportListsHelper.js","sources":["../../../../../../../../../src/dpr/utils/reportListsHelper.ts"],"sourcesContent":["import { Response } from 'express'\nimport { LoadType, ReportType, RequestStatus } from '../types/UserReports'\nimport localsHelper, { getRouteLocals } from './localsHelper'\nimport { setNestedPath } from './urlHelper'\n\nexport const itemActionsHtml = (\n retryHref: string,\n executionId: string,\n type: 'requested' | 'viewed',\n status: RequestStatus,\n) => {\n const text = status === RequestStatus.EXPIRED ? 'Refresh' : 'Retry'\n return `<div class=\"dpr-icon-wrapper__item-actions\">\n <a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1' href=\"${retryHref}\">${text}</a>\n <a class=\"govuk-link dpr-user-list-action govuk-link--no-visited-state dpr-remove-${type}-report-button\"\" href=\"#\" data-execution-id='${executionId}'>Remove</a>\n </div>`\n}\n\nconst getTypeTagColor = (type: ReportType) => {\n let tagColourClass = ''\n switch (type) {\n case ReportType.DASHBOARD:\n tagColourClass = 'govuk-tag--purple'\n break\n case ReportType.UNAVAILABLE:\n tagColourClass = 'govuk-tag--grey'\n break\n default:\n tagColourClass = ''\n break\n }\n return tagColourClass\n}\n\nexport const createListItemProduct = (productName: string, reportName: string, type: ReportType, ts?: string) => {\n const tsClass = !ts ? 'dpr-display-none' : ''\n const tagColor = getTypeTagColor(type)\n const reportType = toSentenceCase(type)\n return `<div>\n <p class=\"govuk-body govuk-!-margin-bottom-1\" aria-label=\"Report name ${reportName}\"><strong>${reportName}</strong></p>\n <p class=\"govuk-body-s govuk-!-margin-bottom-3\" aria-label=\"Product name ${productName}\">${productName}</p>\n <strong class=\"govuk-tag ${tagColor} dpr-request-status-tag--small govuk-!-margin-bottom-4\" aria-label=\"Report type ${reportType}\">${reportType}</strong>\n <p class=\"govuk-body-xs govuk-!-margin-bottom-0 govuk-!-margin-top-3 ${tsClass}\" aria-label=\"Timestamp\">${ts}</p>\n</div>`\n}\n\nexport const createListItemProductMin = (reportName: string, type: ReportType) => {\n const tagColor = getTypeTagColor(type)\n const reportType = toSentenceCase(type)\n return `<div>\n <p class=\"govuk-body-s govuk-!-margin-bottom-2\"><strong>${reportName}</strong></p>\n <strong class=\"govuk-tag ${tagColor} dpr-request-status-tag--small\">${reportType}</strong>\n</div>`\n}\n\nexport const createListActions = (\n href: string,\n type: ReportType,\n loadType?: LoadType,\n bookmarkHtml?: string,\n authorised = true,\n missing = false,\n) => {\n if (!authorised) {\n return `<strong class=\"govuk-tag govuk-tag--red dpr-request-status-tag dpr-request-status-tag--small dpr-unauthorised-report\" aria-label=\"You are unauthorised to view this report\">Unauthorised</strong>`\n }\n\n let requestAction\n let actionText\n if (missing) {\n actionText = `Request report`\n requestAction = `<a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1' href=\"${href}\">${actionText}</a>`\n } else {\n actionText = `Request ${type}`\n if (loadType && loadType === LoadType.SYNC) {\n actionText = `Load ${type}`\n }\n requestAction = `<a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1 dpr-live-report dpr-type__${type}' href=\"${href}\">${actionText}</a>`\n }\n\n if (bookmarkHtml) {\n requestAction = `${requestAction}</br>${bookmarkHtml}`\n }\n\n return requestAction\n}\n\nexport const toSentenceCase = (text: string) => {\n return text.charAt(0).toUpperCase() + text.substring(1).toLowerCase()\n}\n\nexport const setInitialHref = (\n loadType: LoadType,\n type: ReportType,\n reportId: string,\n id: string,\n res: Response,\n isMissing = false,\n) => {\n const { pathSuffix, dpdPathFromQuery } = localsHelper.getValues(res)\n const { nestedBaseUrl } = getRouteLocals(res)\n const rootPath = setNestedPath(`/dpr`, nestedBaseUrl)\n\n let href = ''\n if (isMissing) {\n href = `${rootPath}/request-missing-report/${reportId}/${id}/form`\n } else {\n const dpdPathQueryParam = dpdPathFromQuery ? pathSuffix : ''\n href = `${rootPath}/request-report/${type}/${reportId}/${id}/filters${dpdPathQueryParam}`\n\n if (loadType && loadType === LoadType.SYNC) {\n href = `${rootPath}/view-report/sync/${type}/${reportId}/${id}/load-report${dpdPathQueryParam}`\n }\n }\n return href\n}\n"],"names":["ReportType","LoadType","localsHelper","getRouteLocals","setNestedPath"],"mappings":"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"}
1
+ {"version":3,"file":"reportListsHelper.js","sources":["../../../../../../../../../src/dpr/utils/reportListsHelper.ts"],"sourcesContent":["import { Response } from 'express'\nimport { LoadType, ReportType, RequestStatus } from '../types/UserReports'\nimport localsHelper, { getRouteLocals } from './localsHelper'\nimport { setNestedPath } from './urlHelper'\n\nexport const itemActionsHtml = (\n retryHref: string,\n executionId: string,\n type: 'requested' | 'viewed',\n status: RequestStatus,\n) => {\n const text = status === RequestStatus.EXPIRED ? 'Refresh' : 'Retry'\n return `<div class=\"dpr-icon-wrapper__item-actions\">\n <a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1' href=\"${retryHref}\">${text}</a>\n <a class=\"govuk-link dpr-user-list-action govuk-link--no-visited-state dpr-remove-${type}-report-button\"\" href=\"#\" data-execution-id='${executionId}'>Remove</a>\n </div>`\n}\n\nconst getTypeTagColor = (type: ReportType) => {\n let tagColourClass = ''\n switch (type) {\n case ReportType.DASHBOARD:\n tagColourClass = 'govuk-tag--purple'\n break\n case ReportType.UNAVAILABLE:\n tagColourClass = 'govuk-tag--grey'\n break\n default:\n tagColourClass = ''\n break\n }\n return tagColourClass\n}\n\nexport const createListItemProduct = (productName: string, reportName: string, type: ReportType, ts?: string) => {\n const tsClass = !ts ? 'dpr-display-none' : ''\n const tagColor = getTypeTagColor(type)\n const reportType = toSentenceCase(type)\n return `<div>\n <p class=\"govuk-body govuk-!-margin-bottom-1\" aria-label=\"Report name ${reportName}\"><strong>${reportName}</strong></p>\n <p class=\"govuk-body-s govuk-!-margin-bottom-3\" aria-label=\"Product name ${productName}\">${productName}</p>\n <strong class=\"govuk-tag ${tagColor} dpr-request-status-tag--small govuk-!-margin-bottom-4\" aria-label=\"Report type ${reportType}\">${reportType}</strong>\n <p class=\"govuk-body-s govuk-!-margin-bottom-0 govuk-!-margin-top-3 ${tsClass}\" aria-label=\"Timestamp\">${ts}</p>\n</div>`\n}\n\nexport const createListItemProductMin = (reportName: string, type: ReportType) => {\n const tagColor = getTypeTagColor(type)\n const reportType = toSentenceCase(type)\n return `<div>\n <p class=\"govuk-body-s govuk-!-margin-bottom-2\"><strong>${reportName}</strong></p>\n <strong class=\"govuk-tag ${tagColor} dpr-request-status-tag--small\">${reportType}</strong>\n</div>`\n}\n\nexport const createListActions = (\n href: string,\n type: ReportType,\n loadType?: LoadType,\n bookmarkHtml?: string,\n authorised = true,\n missing = false,\n) => {\n if (!authorised) {\n return `<strong class=\"govuk-tag govuk-tag--red dpr-request-status-tag dpr-request-status-tag--small dpr-unauthorised-report\" aria-label=\"You are unauthorised to view this report\">Unauthorised</strong>`\n }\n\n let requestAction\n let actionText\n if (missing) {\n actionText = `Request report`\n requestAction = `<a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1' href=\"${href}\">${actionText}</a>`\n } else {\n actionText = `Request ${type}`\n if (loadType && loadType === LoadType.SYNC) {\n actionText = `Load ${type}`\n }\n requestAction = `<a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1 dpr-live-report dpr-type__${type}' href=\"${href}\">${actionText}</a>`\n }\n\n if (bookmarkHtml) {\n requestAction = `${requestAction}</br>${bookmarkHtml}`\n }\n\n return requestAction\n}\n\nexport const toSentenceCase = (text: string) => {\n return text.charAt(0).toUpperCase() + text.substring(1).toLowerCase()\n}\n\nexport const setInitialHref = (\n loadType: LoadType,\n type: ReportType,\n reportId: string,\n id: string,\n res: Response,\n isMissing = false,\n) => {\n const { pathSuffix, dpdPathFromQuery } = localsHelper.getValues(res)\n const { nestedBaseUrl } = getRouteLocals(res)\n const rootPath = setNestedPath(`/dpr`, nestedBaseUrl)\n\n let href = ''\n if (isMissing) {\n href = `${rootPath}/request-missing-report/${reportId}/${id}/form`\n } else {\n const dpdPathQueryParam = dpdPathFromQuery ? pathSuffix : ''\n href = `${rootPath}/request-report/${type}/${reportId}/${id}/filters${dpdPathQueryParam}`\n\n if (loadType && loadType === LoadType.SYNC) {\n href = `${rootPath}/view-report/sync/${type}/${reportId}/${id}/load-report${dpdPathQueryParam}`\n }\n }\n return href\n}\n"],"names":["ReportType","LoadType","localsHelper","getRouteLocals","setNestedPath"],"mappings":"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"}
package/dpr/all.scss CHANGED
@@ -3,11 +3,12 @@ $govuk-global-styles: true;
3
3
 
4
4
  $dpr-images-path: '/assets/dpr/assets/images/';
5
5
  $govuk-assets-path: '/assets/';
6
- @import 'govuk-frontend/dist/govuk/all';
7
6
 
8
7
  // Configure MoJ Frontend
9
8
  $moj-assets-path: '/assets/';
10
9
  $moj-images-path: '/assets/images/';
10
+
11
+ @import 'govuk-frontend/dist/govuk';
11
12
  @import '@ministryofjustice/frontend/moj/all';
12
13
 
13
14
  .govuk-width-container {
@@ -20,7 +21,7 @@ $moj-images-path: '/assets/images/';
20
21
 
21
22
  .dpr-child-report {
22
23
  .govuk-table {
23
- border: solid 1px govuk-colour('mid-grey');
24
+ border: solid 1px govuk-colour('black', $variant: 'tint-80');
24
25
 
25
26
  th,
26
27
  td {
@@ -93,11 +94,11 @@ ul.dpr-card-group__item__filters-list {
93
94
  }
94
95
 
95
96
  li.dpr-query-summary {
96
- background-color: govuk-colour('light-grey');
97
+ background-color: govuk-colour('black', $variant: 'tint-95');
97
98
  }
98
99
 
99
100
  li.dpr-interactive-query-summary {
100
- background-color: lighten(govuk-colour('light-blue'), 36%);
101
+ background-color: lighten(govuk-colour('blue', $variant: 'tint-25'), 36%);
101
102
  }
102
103
 
103
104
  li:last-child {
@@ -312,11 +313,11 @@ li.dpr-my-reports__item-filters-list-item {
312
313
  }
313
314
 
314
315
  li.dpr-my-reports__item-filters-list-item--pre {
315
- background-color: govuk-colour('light-grey');
316
+ background-color: govuk-colour('black', $variant: 'tint-95');
316
317
  }
317
318
 
318
319
  li.dpr-my-reports__item-filters-list-item--int {
319
- background-color: lighten(govuk-colour('light-blue'), 36%);
320
+ background-color: lighten(govuk-colour('blue', $variant: 'tint-25'), 36%);
320
321
  }
321
322
 
322
323
  li:last-child {
@@ -619,7 +620,7 @@ li:last-child {
619
620
  width: fit-content;
620
621
 
621
622
  .govuk-table {
622
- border: solid 1px govuk-colour('mid-grey');
623
+ border: solid 1px govuk-colour('black', $variant: 'tint-80');
623
624
  margin-bottom: 0;
624
625
 
625
626
  th,
@@ -627,7 +628,7 @@ li:last-child {
627
628
  padding: 10px;
628
629
  }
629
630
  th {
630
- background-color: govuk-colour('light-grey');
631
+ background-color: govuk-colour('black', $variant: 'tint-95');
631
632
  border-bottom: 0px;
632
633
  }
633
634
  }
@@ -656,7 +657,7 @@ li:last-child {
656
657
  padding: govuk-spacing(1);
657
658
  }
658
659
  th {
659
- background-color: govuk-colour('light-grey');
660
+ background-color: govuk-colour('black', $variant: 'tint-95');
660
661
  border-bottom: 0px;
661
662
  }
662
663
  }
@@ -673,7 +674,7 @@ li:last-child {
673
674
  padding-top: govuk-spacing(2);
674
675
  padding-bottom: govuk-spacing(1);
675
676
  z-index: 100;
676
- border-bottom: solid 3px govuk-colour('light-blue');
677
+ border-bottom: solid 3px govuk-colour('blue', $variant: 'tint-25');
677
678
  margin-bottom: govuk-spacing(6);
678
679
 
679
680
  h2.govuk-heading-m {
@@ -687,7 +688,7 @@ li:last-child {
687
688
  margin-bottom: govuk-spacing(2);
688
689
 
689
690
  .dpr-report-section__title {
690
- border-bottom: solid 2px govuk-colour('mid-grey');
691
+ border-bottom: solid 2px govuk-colour('black', $variant: 'tint-80');
691
692
  margin-bottom: govuk-spacing(0);
692
693
 
693
694
  h2.govuk-heading-m {
@@ -735,7 +736,7 @@ li:last-child {
735
736
 
736
737
  .govuk-table__cell {
737
738
  h2 {
738
- background-color: govuk-colour('light-grey');
739
+ background-color: govuk-colour('black', $variant: 'tint-95');
739
740
  padding: govuk-spacing(2);
740
741
  padding-left: govuk-spacing(2);
741
742
  margin-bottom: govuk-spacing(0);
@@ -898,13 +899,13 @@ li:last-child {
898
899
  }
899
900
 
900
901
  .dpr-report-summary-cell-table-header {
901
- border-bottom: solid 4px govuk-colour('mid-grey');
902
+ border-bottom: solid 4px govuk-colour('black', $variant: 'tint-80');
902
903
  background-color: white;
903
904
  }
904
905
 
905
906
  .dpr-report-summary-cell-table-footer {
906
- border-top: solid 4px govuk-colour('mid-grey');
907
- border-bottom: solid 2px govuk-colour('mid-grey');
907
+ border-top: solid 4px govuk-colour('black', $variant: 'tint-80');
908
+ border-bottom: solid 2px govuk-colour('black', $variant: 'tint-80');
908
909
  background-color: white;
909
910
  }
910
911
  }
@@ -939,7 +940,7 @@ li:last-child {
939
940
  .dpr-table-container--list {
940
941
  .govuk-table__body {
941
942
  tr.govuk-table__row:nth-child(even) {
942
- background-color: govuk-colour('light-grey');
943
+ background-color: govuk-colour('black', $variant: 'tint-95');
943
944
  }
944
945
  }
945
946
  }
@@ -1033,7 +1034,7 @@ li:last-child {
1033
1034
 
1034
1035
  margin-bottom: govuk-spacing(6);
1035
1036
  border: solid 1px #b1b4b6;
1036
- border-left: solid 4px govuk-colour('light-blue');
1037
+ border-left: solid 4px govuk-colour('blue', $variant: 'tint-25');
1037
1038
 
1038
1039
  h2 {
1039
1040
  background-color: #f3f2f1;
@@ -1073,7 +1074,7 @@ li:last-child {
1073
1074
  }
1074
1075
  }
1075
1076
 
1076
- border-left: solid 1px govuk-colour('mid-grey');
1077
+ border-left: solid 1px govuk-colour('black', $variant: 'tint-80');
1077
1078
  margin-bottom: govuk-spacing(2);
1078
1079
 
1079
1080
  h2 {
@@ -1209,7 +1210,7 @@ li:last-child {
1209
1210
  position: relative;
1210
1211
 
1211
1212
  .dpr-columns-section-heading {
1212
- background-color: govuk-colour('light-grey');
1213
+ background-color: govuk-colour('black', $variant: 'tint-95');
1213
1214
  padding: govuk-spacing(2);
1214
1215
  padding-left: govuk-spacing(4);
1215
1216
  padding-right: govuk-spacing(4);
@@ -1395,7 +1396,7 @@ li:last-child {
1395
1396
  color: govuk-colour('blue');
1396
1397
 
1397
1398
  &:hover {
1398
- color: govuk-colour('dark-blue');
1399
+ color: govuk-colour('blue', $variant: 'shade-50');
1399
1400
  }
1400
1401
  }
1401
1402
  }
@@ -1443,14 +1444,14 @@ li:last-child {
1443
1444
  }
1444
1445
  .dpr-interactive-filters-section,
1445
1446
  .dpr-columns-section-wrapper {
1446
- border: solid 1px govuk-colour('mid-grey');
1447
+ border: solid 1px govuk-colour('black', $variant: 'tint-80');
1447
1448
  margin-bottom: govuk-spacing(4);
1448
1449
 
1449
1450
  .dpr-interactive-filters-heading {
1450
1451
  padding: govuk-spacing(2);
1451
1452
  padding-left: govuk-spacing(4);
1452
1453
  padding-right: govuk-spacing(4);
1453
- border-bottom: solid 1px govuk-colour('mid-grey');
1454
+ border-bottom: solid 1px govuk-colour('black', $variant: 'tint-80');
1454
1455
 
1455
1456
  p {
1456
1457
  margin-bottom: 0px;
@@ -1466,8 +1467,8 @@ li:last-child {
1466
1467
  padding-top: govuk-spacing(3);
1467
1468
  padding-bottom: govuk-spacing(2);
1468
1469
  background-color: white;
1469
- border-top: solid 1px govuk-colour('mid-grey');
1470
- border-bottom: solid 1px govuk-colour('mid-grey');
1470
+ border-top: solid 1px govuk-colour('black', $variant: 'tint-80');
1471
+ border-bottom: solid 1px govuk-colour('black', $variant: 'tint-80');
1471
1472
  }
1472
1473
 
1473
1474
  .dpr-interactive-filters-accordion {
@@ -1494,7 +1495,7 @@ li:last-child {
1494
1495
  }
1495
1496
 
1496
1497
  .dpr-filter-item {
1497
- border-bottom: 1px Solid govuk-colour('mid-grey');
1498
+ border-bottom: 1px Solid govuk-colour('black', $variant: 'tint-80');
1498
1499
  padding-right: govuk-spacing(3);
1499
1500
 
1500
1501
  .govuk-form-group {
@@ -1565,7 +1566,7 @@ li:last-child {
1565
1566
  position: relative;
1566
1567
 
1567
1568
  .dpr-selected-filters {
1568
- background-color: govuk-colour('light-grey');
1569
+ background-color: govuk-colour('black', $variant: 'tint-95');
1569
1570
  padding: govuk-spacing(4);
1570
1571
  }
1571
1572
  }
@@ -1603,10 +1604,10 @@ li:last-child {
1603
1604
  }
1604
1605
  }
1605
1606
  .dpr-scorecard {
1606
- background-color: govuk-colour('light-grey');
1607
+ background-color: govuk-colour('black', $variant: 'tint-95');
1607
1608
  padding: govuk-spacing(2);
1608
1609
  padding-bottom: govuk-spacing(7);
1609
- border-top: dotted 2px govuk-colour('mid-grey');
1610
+ border-top: dotted 2px govuk-colour('black', $variant: 'tint-80');
1610
1611
  position: relative;
1611
1612
 
1612
1613
  .dpr-scorecard__value {
@@ -1658,7 +1659,7 @@ li:last-child {
1658
1659
 
1659
1660
  .moj-side-navigation__item:has(.dashboard-sidebar-nav-item) {
1660
1661
  padding-top: govuk-spacing(1);
1661
- border-top: solid 1px govuk-colour('light-grey');
1662
+ border-top: solid 1px govuk-colour('black', $variant: 'tint-95');
1662
1663
  margin-top: govuk-spacing(3);
1663
1664
  }
1664
1665
 
@@ -1679,7 +1680,7 @@ li:last-child {
1679
1680
  }
1680
1681
  .dashboard-section-break {
1681
1682
  border: 0px;
1682
- border-bottom: 1px solid lighten(govuk-colour('mid-grey'), 15%);
1683
+ border-bottom: 1px solid lighten(govuk-colour('black', $variant: 'tint-80'), 15%);
1683
1684
  margin-top: govuk-spacing(6);
1684
1685
  margin-bottom: govuk-spacing(6);
1685
1686
  }
@@ -1856,18 +1857,18 @@ li:last-child {
1856
1857
  }
1857
1858
 
1858
1859
  .chart-colour__purple {
1859
- background-color: govuk-colour('bright-purple');
1860
+ background-color: govuk-colour('magenta', $variant: 'shade-25');
1860
1861
  }
1861
1862
 
1862
1863
  .chart-colour__purple {
1863
- background-color: govuk-colour('bright-purple');
1864
+ background-color: govuk-colour('magenta', $variant: 'shade-25');
1864
1865
  }
1865
1866
 
1866
1867
  .chart-colour__green {
1867
1868
  background-color: govuk-colour('green');
1868
1869
  }
1869
1870
  .chart-colour__dark_blue {
1870
- background-color: govuk-colour('dark-blue');
1871
+ background-color: govuk-colour('blue', $variant: 'shade-50');
1871
1872
  }
1872
1873
 
1873
1874
  @for $i from 1 through 200 {
@@ -1995,12 +1996,12 @@ li:last-child {
1995
1996
  }
1996
1997
  }
1997
1998
  .dpr-catalogue-filters {
1998
- border: Solid 1px govuk-colour('mid-grey');
1999
+ border: Solid 1px govuk-colour('black', $variant: 'tint-80');
1999
2000
  margin-bottom: govuk-spacing(6);
2000
2001
 
2001
2002
  .dpr-catalogue-filters--heading {
2002
2003
  padding: govuk-spacing(4);
2003
- background-color: govuk-colour('light-grey');
2004
+ background-color: govuk-colour('black', $variant: 'tint-95');
2004
2005
 
2005
2006
  h2 {
2006
2007
  margin: 0px;
@@ -2097,11 +2098,11 @@ li:last-child {
2097
2098
  }
2098
2099
 
2099
2100
  .dpr-async-request-filters__section {
2100
- border: solid 1px govuk-colour('mid-grey');
2101
+ border: solid 1px govuk-colour('black', $variant: 'tint-80');
2101
2102
  margin-bottom: govuk-spacing(6);
2102
2103
 
2103
2104
  .dpr-async-request-filters__section--heading {
2104
- background-color: govuk-colour('mid-grey');
2105
+ background-color: govuk-colour('black', $variant: 'tint-80');
2105
2106
  padding: govuk-spacing(2);
2106
2107
  padding-left: govuk-spacing(4);
2107
2108
  padding-right: govuk-spacing(4);
@@ -2115,8 +2116,8 @@ li:last-child {
2115
2116
  padding: govuk-spacing(4);
2116
2117
  padding-bottom: govuk-spacing(2);
2117
2118
  padding-top: govuk-spacing(3);
2118
- border-top: solid 1px govuk-colour('mid-grey');
2119
- border-bottom: solid 1px govuk-colour('mid-grey');
2119
+ border-top: solid 1px govuk-colour('black', $variant: 'tint-80');
2120
+ border-bottom: solid 1px govuk-colour('black', $variant: 'tint-80');
2120
2121
  background-color: white;
2121
2122
  }
2122
2123
 
@@ -2137,7 +2138,7 @@ li:last-child {
2137
2138
 
2138
2139
  .dpr-filter-item {
2139
2140
  background-color: none;
2140
- border-bottom: 1px Solid govuk-colour('mid-grey');
2141
+ border-bottom: 1px Solid govuk-colour('black', $variant: 'tint-80');
2141
2142
  padding-top: govuk-spacing(5);
2142
2143
 
2143
2144
  &:last-child {
@@ -8,7 +8,7 @@
8
8
 
9
9
  <div class="dpr-save-defaults-action">
10
10
  {% if hasDefaults %}
11
- <p class="govuk-body-xs govuk-!-margin-bottom-2 govuk-!-margin-top-1">
11
+ <p class="govuk-body-s govuk-!-margin-bottom-2 govuk-!-margin-top-1">
12
12
  Your saved default filter values have been applied to this form.
13
13
  </p>
14
14
  {% set text = 'Update defaults' %}
@@ -9,7 +9,7 @@
9
9
 
10
10
  <div class="dpr-save-defaults-action">
11
11
  {% if hasDefaults %}
12
- <p class="govuk-body-xs govuk-!-margin-bottom-2 govuk-!-margin-top-1">
12
+ <p class="govuk-body-s govuk-!-margin-bottom-2 govuk-!-margin-top-1">
13
13
  Your saved default filter values have been applied to this form.
14
14
  </p>
15
15
  {% set text = 'Update defaults' %}
@@ -1,5 +1,6 @@
1
1
  import { StoreItemBuilder } from '../builder.js';
2
2
  import { RequestStatus } from '../../../../utils/ReportStatus/types.js';
3
+ import { normalizeQueryStringArray } from '../../../../utils/queryMappers.js';
3
4
 
4
5
  class ViewedReportBuilder extends StoreItemBuilder {
5
6
  req;
@@ -72,9 +73,16 @@ class ViewedReportBuilder extends StoreItemBuilder {
72
73
  };
73
74
  };
74
75
  buildInteractiveQuery = () => {
75
- if (!this.interactiveQuery.query || !this.interactiveQuery.querySummary)
76
+ if (!this.interactiveQuery.query || !this.interactiveQuery.querySummary) {
76
77
  return undefined;
77
- const { query: data, querySummary: summary } = this.interactiveQuery;
78
+ }
79
+ const { query, querySummary: summary } = this.interactiveQuery;
80
+ const data = {
81
+ ...query,
82
+ ...(query['columns'] && {
83
+ columns: normalizeQueryStringArray(query['columns']),
84
+ }),
85
+ };
78
86
  return {
79
87
  data,
80
88
  summary,
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/my-reports/recently-viewed/builder.ts"],"sourcesContent":["import type { Request, Response } from 'express'\nimport { QueryData } from '../../../../components/_async/async-filters-form/types'\nimport {\n AsyncReportQueryData,\n AsyncReportUrlData,\n ParamsConfig,\n RecentlyViewedReport,\n} from '../../../../types/UserReports'\nimport { StoreItemBuilder, ReportData } from '../builder'\nimport { RequestStatus } from '../../../../utils/ReportStatus/types'\n\nexport class ViewedReportBuilder extends StoreItemBuilder {\n filters!: ParamsConfig\n\n sort!: ParamsConfig\n\n reportData!: ReportData\n\n requestUrls!: AsyncReportUrlData | undefined\n\n interactiveQuery!: QueryData\n\n asyncQueryData!: AsyncReportQueryData | undefined\n\n constructor(\n readonly req: Request,\n res: Response,\n ) {\n super(res)\n }\n\n // Public methods\n\n withReportData = (reportData: ReportData) => {\n this.reportData = reportData\n\n return this\n }\n\n withRequestData = (asyncQueryData: AsyncReportQueryData | undefined, url: AsyncReportUrlData | undefined) => {\n this.withAsyncUrls(url)\n this.withAsyncQuery(asyncQueryData)\n\n return this\n }\n\n private withAsyncUrls = (url: AsyncReportUrlData | undefined) => {\n this.requestUrls = url\n }\n\n private withAsyncQuery = (asyncQueryData: AsyncReportQueryData | undefined) => {\n this.asyncQueryData = asyncQueryData\n }\n\n withInteractiveQuery = (interactiveQueryData: QueryData) => {\n this.interactiveQuery = interactiveQueryData\n\n return this\n }\n\n // Builder methods\n\n private buildReportData = () => {\n return this.buildReportMetaData(this.reportData)\n }\n\n private buildUrls = () => {\n const origin = this.req.get('host') || ''\n const report = this.buildReportUrls()\n\n let polling\n let request\n\n if (this.requestUrls) {\n polling = this.requestUrls.polling\n request = this.requestUrls.request\n }\n\n return {\n origin,\n ...(polling && { polling }),\n ...(request && { request }),\n report,\n }\n }\n\n private buildReportUrls = () => {\n const origin = this.req.get('host') || ''\n const fullUrl = `${this.req.protocol}://${origin}${this.req.originalUrl}`\n\n const parsed = new URL(fullUrl)\n const { search } = parsed\n\n return {\n fullUrl,\n search,\n }\n }\n\n private buildStatus = () => {\n return RequestStatus.READY\n }\n\n private buildTimestamp = () => {\n return {\n lastViewed: new Date(),\n }\n }\n\n private buildInteractiveQuery = (): AsyncReportQueryData | undefined => {\n if (!this.interactiveQuery.query || !this.interactiveQuery.querySummary) return undefined\n\n const { query: data, querySummary: summary } = this.interactiveQuery\n\n return {\n data,\n summary,\n }\n }\n\n build = (): RecentlyViewedReport => {\n const reportData = this.buildReportData()\n const url = this.buildUrls()\n const status = this.buildStatus()\n const timestamp = this.buildTimestamp()\n const definitionsPath = this.buidDefinitionsPath()\n const interactiveQuery = this.buildInteractiveQuery()\n\n const viewedReportData: RecentlyViewedReport = {\n ...reportData,\n ...this.executionData,\n ...(definitionsPath && definitionsPath),\n ...(this.asyncQueryData && { query: this.asyncQueryData }),\n ...(interactiveQuery && { interactiveQuery }),\n url,\n status,\n timestamp,\n }\n\n return viewedReportData\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/my-reports/recently-viewed/builder.ts"],"sourcesContent":["import type { Request, Response } from 'express'\nimport { QueryData } from '../../../../components/_async/async-filters-form/types'\nimport {\n AsyncReportQueryData,\n AsyncReportUrlData,\n ParamsConfig,\n RecentlyViewedReport,\n} from '../../../../types/UserReports'\nimport { StoreItemBuilder, ReportData } from '../builder'\nimport { RequestStatus } from '../../../../utils/ReportStatus/types'\nimport { normalizeQueryStringArray } from '../../../../utils/queryMappers'\n\nexport class ViewedReportBuilder extends StoreItemBuilder {\n filters!: ParamsConfig\n\n sort!: ParamsConfig\n\n reportData!: ReportData\n\n requestUrls!: AsyncReportUrlData | undefined\n\n interactiveQuery!: QueryData\n\n asyncQueryData!: AsyncReportQueryData | undefined\n\n constructor(\n readonly req: Request,\n res: Response,\n ) {\n super(res)\n }\n\n // Public methods\n\n withReportData = (reportData: ReportData) => {\n this.reportData = reportData\n\n return this\n }\n\n withRequestData = (asyncQueryData: AsyncReportQueryData | undefined, url: AsyncReportUrlData | undefined) => {\n this.withAsyncUrls(url)\n this.withAsyncQuery(asyncQueryData)\n\n return this\n }\n\n private withAsyncUrls = (url: AsyncReportUrlData | undefined) => {\n this.requestUrls = url\n }\n\n private withAsyncQuery = (asyncQueryData: AsyncReportQueryData | undefined) => {\n this.asyncQueryData = asyncQueryData\n }\n\n withInteractiveQuery = (interactiveQueryData: QueryData) => {\n this.interactiveQuery = interactiveQueryData\n\n return this\n }\n\n // Builder methods\n\n private buildReportData = () => {\n return this.buildReportMetaData(this.reportData)\n }\n\n private buildUrls = () => {\n const origin = this.req.get('host') || ''\n const report = this.buildReportUrls()\n\n let polling\n let request\n\n if (this.requestUrls) {\n polling = this.requestUrls.polling\n request = this.requestUrls.request\n }\n\n return {\n origin,\n ...(polling && { polling }),\n ...(request && { request }),\n report,\n }\n }\n\n private buildReportUrls = () => {\n const origin = this.req.get('host') || ''\n const fullUrl = `${this.req.protocol}://${origin}${this.req.originalUrl}`\n\n const parsed = new URL(fullUrl)\n const { search } = parsed\n\n return {\n fullUrl,\n search,\n }\n }\n\n private buildStatus = () => {\n return RequestStatus.READY\n }\n\n private buildTimestamp = () => {\n return {\n lastViewed: new Date(),\n }\n }\n\n private buildInteractiveQuery = (): AsyncReportQueryData | undefined => {\n if (!this.interactiveQuery.query || !this.interactiveQuery.querySummary) {\n return undefined\n }\n\n const { query, querySummary: summary } = this.interactiveQuery\n\n const data = {\n ...query,\n ...(query['columns'] && {\n columns: normalizeQueryStringArray(query['columns']),\n }),\n }\n\n return {\n data,\n summary,\n }\n }\n\n build = (): RecentlyViewedReport => {\n const reportData = this.buildReportData()\n const url = this.buildUrls()\n const status = this.buildStatus()\n const timestamp = this.buildTimestamp()\n const definitionsPath = this.buidDefinitionsPath()\n const interactiveQuery = this.buildInteractiveQuery()\n\n const viewedReportData: RecentlyViewedReport = {\n ...reportData,\n ...this.executionData,\n ...(definitionsPath && definitionsPath),\n ...(this.asyncQueryData && { query: this.asyncQueryData }),\n ...(interactiveQuery && { interactiveQuery }),\n url,\n status,\n timestamp,\n }\n\n return viewedReportData\n }\n}\n"],"names":[],"mappings":"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"}
@@ -29,7 +29,7 @@ class RequestedReportBuilder extends StoreItemBuilder {
29
29
  return undefined;
30
30
  const { sortData } = this.queryData;
31
31
  return {
32
- data: sortData,
32
+ data: sortData ?? {},
33
33
  queryString: new URLSearchParams(sortData).toString(),
34
34
  };
35
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/my-reports/requested-reports/builder.ts"],"sourcesContent":["import type { Request, Response } from 'express'\nimport {\n AsyncReportQueryData,\n ParamsConfig,\n ReportType,\n RequestedDashboard,\n RequestedReport,\n RequestFormData,\n} from '../../../../types/UserReports'\nimport { StoreItemBuilder } from '../builder'\nimport { RequestStatus } from '../../../../utils/ReportStatus/types'\nimport { components } from '../../../../types/api'\n\nexport class RequestedReportBuilder extends StoreItemBuilder {\n filters!: ParamsConfig\n\n sort!: ParamsConfig\n\n constructor(\n readonly req: Request,\n res: Response,\n ) {\n super(res)\n }\n\n private buildReportData = () => {\n const requestFormData: RequestFormData = this.req.body\n this.reportType = requestFormData.type as ReportType\n\n return this.buildReportMetaData(requestFormData)\n }\n\n private buildFilters = () => {\n if (!this.queryData || !this.queryData.filterData) return undefined\n\n const { filterData } = this.queryData\n\n return {\n data: filterData,\n queryString: new URLSearchParams(filterData).toString(),\n }\n }\n\n private buildSortData = () => {\n if (!this.queryData || !this.queryData?.sortData) return undefined\n\n const { sortData } = this.queryData\n\n return {\n data: sortData,\n queryString: new URLSearchParams(sortData).toString(),\n }\n }\n\n private buildRequestUrls = () => {\n const url = new URL(this.req.originalUrl, `${this.req.protocol}://${this.req.get('host')}`)\n const { pathname, search, origin } = url\n\n const pollingUrlData = this.setPollingUrlData(origin)\n\n const requestUrlData = {\n fullUrl: `${origin}${this.req.originalUrl}`,\n pathname,\n search,\n }\n\n return {\n origin,\n request: requestUrlData,\n polling: pollingUrlData,\n }\n }\n\n private setPollingUrlData = (origin: string) => {\n const { definitionsPath, dpdPathFromQuery } = this.res.locals\n\n const { executionId } = this.executionData\n\n let pollingPath = this.req.baseUrl.replace('/filters', `/${executionId}/status`)\n if (dpdPathFromQuery) {\n pollingPath = `${pollingPath}?dataProductDefinitionsPath=${definitionsPath}`\n }\n\n const pollingFullUrl = `${origin}${pollingPath}`\n\n return {\n fullUrl: pollingFullUrl,\n pathname: pollingPath,\n }\n }\n\n private buildStatus = () => {\n return RequestStatus.SUBMITTED\n }\n\n private buildTimestamp = () => {\n return {\n requested: new Date(),\n }\n }\n\n private buildQuery = (): AsyncReportQueryData | undefined => {\n if (!this.queryData?.query || !this.queryData.querySummary) return undefined\n\n const { query: data, querySummary: summary } = this.queryData\n\n return {\n data,\n summary,\n }\n }\n\n private buildSections = () => {\n if (!this.reportType && this.reportType !== ReportType.DASHBOARD) return undefined\n\n const bodySections = this.req.body.sections\n\n const sections: components['schemas']['DashboardSectionDefinition'][] = bodySections\n ? JSON.parse(this.req.body.sections)\n : []\n\n return sections.filter(section => section.display).map(section => ({ name: section.display || '' }))\n }\n\n build = (): RequestedReport => {\n const reportData = this.buildReportData()\n const filters = this.buildFilters()\n const sortBy = this.buildSortData()\n const url = this.buildRequestUrls()\n const status = this.buildStatus()\n const timestamp = this.buildTimestamp()\n const definitionsPath = this.buidDefinitionsPath()\n const query = this.buildQuery()\n const metrics = this.buildSections()\n\n const requestedReportData: RequestedReport | RequestedDashboard = {\n ...reportData,\n ...this.executionData,\n ...(this.childExecutionData && { childExecutionData: this.childExecutionData }),\n ...(filters && { filters }),\n ...(sortBy && { sortBy }),\n ...(query && { query }),\n ...(metrics && { metrics }),\n ...(definitionsPath && definitionsPath),\n url,\n status,\n timestamp,\n }\n\n return requestedReportData\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sources":["../../../../../../../../../../../src/dpr/routes/journeys/my-reports/requested-reports/builder.ts"],"sourcesContent":["import type { Request, Response } from 'express'\nimport {\n AsyncReportQueryData,\n ParamsConfig,\n ReportType,\n RequestedDashboard,\n RequestedReport,\n RequestFormData,\n} from '../../../../types/UserReports'\nimport { StoreItemBuilder } from '../builder'\nimport { RequestStatus } from '../../../../utils/ReportStatus/types'\nimport { components } from '../../../../types/api'\n\nexport class RequestedReportBuilder extends StoreItemBuilder {\n filters!: ParamsConfig\n\n sort!: ParamsConfig\n\n constructor(\n readonly req: Request,\n res: Response,\n ) {\n super(res)\n }\n\n private buildReportData = () => {\n const requestFormData: RequestFormData = this.req.body\n this.reportType = requestFormData.type as ReportType\n\n return this.buildReportMetaData(requestFormData)\n }\n\n private buildFilters = () => {\n if (!this.queryData || !this.queryData.filterData) return undefined\n\n const { filterData } = this.queryData\n\n return {\n data: filterData,\n queryString: new URLSearchParams(filterData).toString(),\n }\n }\n\n private buildSortData = () => {\n if (!this.queryData || !this.queryData?.sortData) return undefined\n\n const { sortData } = this.queryData\n\n return {\n data: sortData ?? {},\n queryString: new URLSearchParams(sortData).toString(),\n }\n }\n\n private buildRequestUrls = () => {\n const url = new URL(this.req.originalUrl, `${this.req.protocol}://${this.req.get('host')}`)\n const { pathname, search, origin } = url\n\n const pollingUrlData = this.setPollingUrlData(origin)\n\n const requestUrlData = {\n fullUrl: `${origin}${this.req.originalUrl}`,\n pathname,\n search,\n }\n\n return {\n origin,\n request: requestUrlData,\n polling: pollingUrlData,\n }\n }\n\n private setPollingUrlData = (origin: string) => {\n const { definitionsPath, dpdPathFromQuery } = this.res.locals\n\n const { executionId } = this.executionData\n\n let pollingPath = this.req.baseUrl.replace('/filters', `/${executionId}/status`)\n if (dpdPathFromQuery) {\n pollingPath = `${pollingPath}?dataProductDefinitionsPath=${definitionsPath}`\n }\n\n const pollingFullUrl = `${origin}${pollingPath}`\n\n return {\n fullUrl: pollingFullUrl,\n pathname: pollingPath,\n }\n }\n\n private buildStatus = () => {\n return RequestStatus.SUBMITTED\n }\n\n private buildTimestamp = () => {\n return {\n requested: new Date(),\n }\n }\n\n private buildQuery = (): AsyncReportQueryData | undefined => {\n if (!this.queryData?.query || !this.queryData.querySummary) return undefined\n\n const { query: data, querySummary: summary } = this.queryData\n\n return {\n data,\n summary,\n }\n }\n\n private buildSections = () => {\n if (!this.reportType && this.reportType !== ReportType.DASHBOARD) return undefined\n\n const bodySections = this.req.body.sections\n\n const sections: components['schemas']['DashboardSectionDefinition'][] = bodySections\n ? JSON.parse(this.req.body.sections)\n : []\n\n return sections.filter(section => section.display).map(section => ({ name: section.display || '' }))\n }\n\n build = (): RequestedReport => {\n const reportData = this.buildReportData()\n const filters = this.buildFilters()\n const sortBy = this.buildSortData()\n const url = this.buildRequestUrls()\n const status = this.buildStatus()\n const timestamp = this.buildTimestamp()\n const definitionsPath = this.buidDefinitionsPath()\n const query = this.buildQuery()\n const metrics = this.buildSections()\n\n const requestedReportData: RequestedReport | RequestedDashboard = {\n ...reportData,\n ...this.executionData,\n ...(this.childExecutionData && { childExecutionData: this.childExecutionData }),\n ...(filters && { filters }),\n ...(sortBy && { sortBy }),\n ...(query && { query }),\n ...(metrics && { metrics }),\n ...(definitionsPath && definitionsPath),\n url,\n status,\n timestamp,\n }\n\n return requestedReportData\n }\n}\n"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ const QuerySummaryItemSchema = z
31
31
  })
32
32
  .catchall(z.unknown());
33
33
  const AsyncReportQueryDataSchema = z.object({
34
- data: z.record(z.string(), z.union([z.string(), z.array(z.string())])),
34
+ data: z.record(z.string(), z.union([z.string(), z.array(z.string())])).default({}),
35
35
  summary: z.array(QuerySummaryItemSchema),
36
36
  });
37
37
  const AsyncReportUrlItemDataSchema = z.object({
@@ -53,7 +53,7 @@ const ChildReportExecutionDataSchema = z.object({
53
53
  status: RequestStatusSchema.optional(),
54
54
  });
55
55
  const ParamsConfigSchema = z.object({
56
- data: z.record(z.string(), z.string()),
56
+ data: z.record(z.string(), z.string()).default({}),
57
57
  queryString: z.string(),
58
58
  });
59
59
  const normalizeStoredReportData = (data) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sources":["../../../../../../../../../../src/dpr/routes/journeys/my-reports/validation.ts"],"sourcesContent":["import { LoadType, ReportType, RequestStatus } from 'src/dpr/types/UserReports'\nimport { z } from 'zod'\n\nconst RequestStatusSchema = z.enum([\n RequestStatus.SUBMITTED,\n RequestStatus.STARTED,\n RequestStatus.PICKED,\n RequestStatus.READY,\n RequestStatus.FINISHED,\n RequestStatus.EXPIRED,\n RequestStatus.FAILED,\n RequestStatus.ABORTED,\n RequestStatus.ALL,\n])\n\nconst ReportTypeSchema = z.enum([ReportType.REPORT, ReportType.DASHBOARD])\n\nconst LoadTypeSchema = z.enum([LoadType.ASYNC, LoadType.SYNC])\n\nexport const AsyncReportsTimestampSchema = z.object({\n lastViewed: z.coerce.date().optional(),\n requested: z.coerce.date().optional(),\n completed: z.coerce.date().optional(),\n expired: z.coerce.date().optional(),\n failed: z.coerce.date().optional(),\n retried: z.coerce.date().optional(),\n aborted: z.coerce.date().optional(),\n refresh: z.coerce.date().optional(),\n})\n\nconst QuerySummaryItemSchema = z\n .object({\n name: z.string(),\n value: z.string(),\n })\n .catchall(z.unknown())\n\nconst AsyncReportQueryDataSchema = z.object({\n data: z.record(z.string(), z.union([z.string(), z.array(z.string())])),\n summary: z.array(QuerySummaryItemSchema),\n})\n\nconst AsyncReportUrlItemDataSchema = z.object({\n pathname: z.string().optional(),\n fullUrl: z.string().optional(),\n search: z.string().optional(),\n default: z.string().optional(),\n})\n\nconst AsyncReportUrlDataSchema = z.object({\n origin: z.string(),\n request: AsyncReportUrlItemDataSchema.optional(),\n report: AsyncReportUrlItemDataSchema.optional(),\n polling: AsyncReportUrlItemDataSchema.optional(),\n})\n\nconst ChildReportExecutionDataSchema = z.object({\n variantId: z.string(),\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n status: RequestStatusSchema.optional(),\n})\n\nexport const ParamsConfigSchema = z.object({\n data: z.record(z.string(), z.string()),\n queryString: z.string(),\n})\n\nexport const normalizeStoredReportData = <\n T extends {\n name?: string | undefined\n variantName?: string | undefined\n },\n>(\n data: T,\n) => ({\n ...data,\n name: data.name ?? data.variantName ?? '',\n})\n\nexport const StoredReportDataObjectSchema = z.object({\n reportId: z.string(),\n variantId: z.string().optional(),\n id: z.string(),\n\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n\n reportName: z.string(),\n\n variantName: z.string().optional(),\n name: z.string().optional(),\n\n description: z.string(),\n\n status: RequestStatusSchema.optional(),\n\n timestamp: AsyncReportsTimestampSchema,\n\n dataProductDefinitionsPath: z.string().optional(),\n dpdPathFromQuery: z.boolean().optional(),\n\n query: AsyncReportQueryDataSchema.optional(),\n interactiveQuery: AsyncReportQueryDataSchema.optional(),\n\n url: AsyncReportUrlDataSchema.optional(),\n\n type: ReportTypeSchema,\n\n loadType: LoadTypeSchema.optional(),\n\n childExecutionData: z.array(ChildReportExecutionDataSchema).optional(),\n})\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sources":["../../../../../../../../../../src/dpr/routes/journeys/my-reports/validation.ts"],"sourcesContent":["import { LoadType, ReportType, RequestStatus } from 'src/dpr/types/UserReports'\nimport { z } from 'zod'\n\nconst RequestStatusSchema = z.enum([\n RequestStatus.SUBMITTED,\n RequestStatus.STARTED,\n RequestStatus.PICKED,\n RequestStatus.READY,\n RequestStatus.FINISHED,\n RequestStatus.EXPIRED,\n RequestStatus.FAILED,\n RequestStatus.ABORTED,\n RequestStatus.ALL,\n])\n\nconst ReportTypeSchema = z.enum([ReportType.REPORT, ReportType.DASHBOARD])\n\nconst LoadTypeSchema = z.enum([LoadType.ASYNC, LoadType.SYNC])\n\nexport const AsyncReportsTimestampSchema = z.object({\n lastViewed: z.coerce.date().optional(),\n requested: z.coerce.date().optional(),\n completed: z.coerce.date().optional(),\n expired: z.coerce.date().optional(),\n failed: z.coerce.date().optional(),\n retried: z.coerce.date().optional(),\n aborted: z.coerce.date().optional(),\n refresh: z.coerce.date().optional(),\n})\n\nconst QuerySummaryItemSchema = z\n .object({\n name: z.string(),\n value: z.string(),\n })\n .catchall(z.unknown())\n\nconst AsyncReportQueryDataSchema = z.object({\n data: z.record(z.string(), z.union([z.string(), z.array(z.string())])).default({}),\n summary: z.array(QuerySummaryItemSchema),\n})\n\nconst AsyncReportUrlItemDataSchema = z.object({\n pathname: z.string().optional(),\n fullUrl: z.string().optional(),\n search: z.string().optional(),\n default: z.string().optional(),\n})\n\nconst AsyncReportUrlDataSchema = z.object({\n origin: z.string(),\n request: AsyncReportUrlItemDataSchema.optional(),\n report: AsyncReportUrlItemDataSchema.optional(),\n polling: AsyncReportUrlItemDataSchema.optional(),\n})\n\nconst ChildReportExecutionDataSchema = z.object({\n variantId: z.string(),\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n status: RequestStatusSchema.optional(),\n})\n\nexport const ParamsConfigSchema = z.object({\n data: z.record(z.string(), z.string()).default({}),\n queryString: z.string(),\n})\n\nexport const normalizeStoredReportData = <\n T extends {\n name?: string | undefined\n variantName?: string | undefined\n },\n>(\n data: T,\n) => ({\n ...data,\n name: data.name ?? data.variantName ?? '',\n})\n\nexport const StoredReportDataObjectSchema = z.object({\n reportId: z.string(),\n variantId: z.string().optional(),\n id: z.string(),\n\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n\n reportName: z.string(),\n\n variantName: z.string().optional(),\n name: z.string().optional(),\n\n description: z.string(),\n\n status: RequestStatusSchema.optional(),\n\n timestamp: AsyncReportsTimestampSchema,\n\n dataProductDefinitionsPath: z.string().optional(),\n dpdPathFromQuery: z.boolean().optional(),\n\n query: AsyncReportQueryDataSchema.optional(),\n interactiveQuery: AsyncReportQueryDataSchema.optional(),\n\n url: AsyncReportUrlDataSchema.optional(),\n\n type: ReportTypeSchema,\n\n loadType: LoadTypeSchema.optional(),\n\n childExecutionData: z.array(ChildReportExecutionDataSchema).optional(),\n})\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../../../../../src/dpr/routes/journeys/view-report/utils.ts"],"sourcesContent":["import { Request, Response } from 'express'\nimport {\n qsToQueryObject,\n normalizeQueryStringArray,\n queryObjectToQs,\n extractFiltersFromQuery,\n} from '../../../utils/queryMappers'\n\nimport { joinQueryStrings } from '../../../utils/urlHelper'\nimport { components } from '../../../types/api'\nimport { Services } from '../../../types/Services'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport ColumnsUtils from '../../../components/_reports/report-heading/report-columns/report-columns-form/utils'\nimport { getActiveJourneyValue } from '../../../utils/sessionHelper'\nimport { getFields } from '../../../utils/definitionUtils'\nimport { LoadType, RequestedReport } from '../../../types/UserReports'\nimport { QuerySummaryItem } from '../../../components/_async/request-details/types'\nimport { buildQuerySummary } from '../../../components/_async/request-details/utils'\nimport { ViewedReportBuilder } from '../my-reports/recently-viewed/builder'\nimport { ReportData } from '../my-reports/builder'\nimport { getMyReport } from '../my-reports/utils'\n\n/**\n * Apply interactive query to a REPORT\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {('columns' | 'filters')} applyType\n * @return {*}\n */\nexport const applyReportInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n) => {\n const { reportId, id } = <{ id: string; reportId: string }>req.params\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n\n // Get the definition\n const definition =\n (res.locals['definition'] as components['schemas']['SingleVariantReportDefinition']) ??\n (await services.reportingService.getDefinition(token, reportId, id, definitionsPath))\n\n const fields = getFields(definition) || []\n\n return applyInteractiveQuery(req, res, applyType, loadType, fields)\n}\n\n/**\n * Apply interactive query to a DASHBOARD\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {('columns' | 'filters')} applyType\n * @return {*}\n */\nexport const applyDashboardInteractiveQuery = async (\n req: Request,\n res: Response,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n) => {\n return applyInteractiveQuery(req, res, applyType, loadType)\n}\n\n/**\n * Apply the interactive query\n *\n * @param {Request} req\n * @param {Response} res\n * @param {('columns' | 'filters')} applyType\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nconst applyInteractiveQuery = async (\n req: Request,\n res: Response,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n fields?: components['schemas']['FieldDefinition'][],\n) => {\n const { tableId, id, reportId } = <{ id: string; reportId: string; tableId: string }>req.params\n\n // Get the stored interactive query data\n const sessionkey = loadType === LoadType.ASYNC ? { id, tableId, reportId } : { id, reportId }\n const queryDataFromSession = getActiveJourneyValue(req, sessionkey, 'currentReportSearch')\n\n let queryData: Record<string, string | string[]> = {}\n let filtersData: Record<string, string | string[]> = {}\n let columnsData: Record<string, string | string[]> = {}\n\n if (queryDataFromSession) {\n queryData = qsToQueryObject(queryDataFromSession, '')\n filtersData = qsToQueryObject(queryDataFromSession, 'filters.')\n columnsData = qsToQueryObject(queryDataFromSession, 'columns')\n }\n\n // Set the query values from the current query\n const preventDefault = queryData?.['preventDefault']\n const pageSize = queryData?.['pageSize']\n const selectedPage = applyType === 'columns' ? queryData?.['selectedPage'] : '1'\n const sortColumn = queryData?.['sortColumn']\n const sortedAsc = queryData?.['sortedAsc']\n\n // Create merged form data\n let formData: Record<string, string | string[]> = {\n ...(preventDefault && { preventDefault }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...(filtersData && filtersData),\n ...(columnsData && columnsData),\n }\n\n formData =\n applyType === 'columns' && fields\n ? applyColumns(req, queryData, formData, fields)\n : applyFilters(req, queryData, formData)\n\n const filtersString = queryObjectToQs(formData)\n\n // Redirect back to report\n res.redirect(`${req.baseUrl}?${filtersString}`)\n}\n\n/**\n * Apply columns\n *\n * @param {Request} req\n * @param {(Record<string, string | string[]>)} queryData\n * @param {(Record<string, string | string[]>)} formData\n * @param {components['schemas']['FieldDefinition'][]} fields\n * @return {*}\n */\nconst applyColumns = (\n req: Request,\n queryData: Record<string, string | string[]>,\n formData: Record<string, string | string[]>,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { columns: reqColumns } = req.body\n\n // Normalize the req columns - should always be an array\n let bodyColumns: string[] = []\n if (reqColumns) {\n bodyColumns = Array.isArray(reqColumns) ? reqColumns : [reqColumns]\n }\n\n // ensure mandatory cols are present and set the updated columns\n const mandatoryCols = ColumnsUtils.mandatoryColumns(fields)\n const columns = Array.from(new Set([...mandatoryCols, ...bodyColumns]))\n\n // Keep the filter values the same as current\n let filters = {}\n if (queryData) {\n filters = Object.keys(queryData)\n .filter(key => key.includes('filters.'))\n .reduce((acc, key) => ({ ...acc, [key]: queryData[key] }), {})\n }\n\n return { ...formData, columns, ...filters }\n}\n\n/**\n * Apply filters\n *\n * @param {(Record<string, string | string[]>)} queryData\n * @param {(Record<string, string | string[]>)} formData\n * @return {*}\n */\nconst applyFilters = (\n req: Request,\n queryData: Record<string, string | string[]>,\n formData: Record<string, string | string[]>,\n) => {\n // Ensure current columns stay the same and are normalized\n const columns = normalizeQueryStringArray(queryData?.['columns']) || []\n const filters = Object.fromEntries(\n Object.keys(req.body)\n .filter(key => key.startsWith('filters.'))\n .map(key => [key, req.body[key]]),\n )\n\n return { ...formData, ...filters, columns }\n}\n\n/**\n * Reset filters action\n *\n * @param {Request} req\n * @param {Response} res\n */\nconst resetFilters = (req: Request, res: Response, sessionKey: { id: string; reportId: string; tableId?: string }) => {\n // Create the reset querystring\n const finalQuery = resetFiltersQueryString(req, sessionKey)\n\n // Redirect with new query string - query string will handle all rendered elements\n if (finalQuery) {\n res.redirect(`${req.baseUrl}?${finalQuery}`)\n }\n}\n\n/**\n * Creates the query string to reset the filters\n *\n * @param {Request} req\n * @param {{ id: string; reportId: string; tableId?: string }} sessionKey\n * @return {*} {string}\n */\nconst resetFiltersQueryString = (\n req: Request,\n sessionKey: { id: string; reportId: string; tableId?: string },\n): string => {\n const defaultSessionKey = { id: sessionKey.id, reportId: sessionKey.reportId }\n const defaultFiltersSearch = getActiveJourneyValue(req, defaultSessionKey, 'interactiveDefaultFiltersSearch')\n const savedInteractiveDefaultsSearch = getActiveJourneyValue(req, defaultSessionKey, 'savedInteractiveDefaultsSearch')\n\n // Set the effective qs: if saved defaults, use those. Otherwise use DPD defaults\n const effectiveQueryString =\n savedInteractiveDefaultsSearch && savedInteractiveDefaultsSearch.length\n ? savedInteractiveDefaultsSearch\n : defaultFiltersSearch\n\n // Get all the current stuff\n const currentColumnsSearch = getActiveJourneyValue(req, sessionKey, 'currentReportColumnsSearch')\n const currentSortSearch = getActiveJourneyValue(req, sessionKey, 'currentSortSearch')\n const currentPageSizeSearch = getActiveJourneyValue(req, sessionKey, 'currentPageSizeSearch')\n\n // Create the final querystring\n return joinQueryStrings(effectiveQueryString, currentColumnsSearch, currentSortSearch, currentPageSizeSearch)\n}\n\n/**\n * Creates the query string to reset the columns\n *\n * @param {Request} req\n * @param {{ id: string; reportId: string; tableId?: string }} sessionKey\n * @return {*} {string}\n */\nconst resetColumnsQueryString = (\n req: Request,\n sessionKey: { id: string; reportId: string; tableId?: string },\n): string => {\n // get the default DPD filters\n const defaultSessionKey = { id: sessionKey.id, reportId: sessionKey.reportId }\n const defaultColumnsSearch = getActiveJourneyValue(req, defaultSessionKey, 'defaultColumnsSearch')\n\n // Get all the current stuff\n const currentReportFiltersSearch = getActiveJourneyValue(req, sessionKey, 'currentReportFiltersSearch')\n const currentSortSearch = getActiveJourneyValue(req, sessionKey, 'currentSortSearch')\n const currentPageSizeSearch = getActiveJourneyValue(req, sessionKey, 'currentPageSizeSearch')\n\n // Create the final querystring\n return joinQueryStrings(defaultColumnsSearch, currentReportFiltersSearch, currentSortSearch, currentPageSizeSearch)\n}\n\n/**\n * Creates the default query string\n *\n * @param {Request} req\n * @return {*} {(string | undefined)}\n */\nconst createDefaultQueryString = (req: Request): string | undefined => {\n const { id, reportId, tableId } = req.params as {\n id: string\n reportId: string\n tableId: string\n }\n\n // Get the interactive report defaults\n const sessionKey = { id, reportId }\n\n // Definition defaults\n const defaultFiltersSearch = getActiveJourneyValue(req, sessionKey, 'interactiveDefaultFiltersSearch')\n const defaultColumnsSearch = getActiveJourneyValue(req, sessionKey, 'defaultColumnsSearch')\n const defaultSort = getActiveJourneyValue(req, sessionKey, 'defaultSortQueryString')\n\n // User defined values\n const savedInteractiveDefaultsSearch = getActiveJourneyValue(req, sessionKey, 'savedInteractiveDefaultsSearch')\n const requestedSort = getActiveJourneyValue(req, { id, reportId, tableId }, 'requestedSortSearch')\n\n /**\n * A report will always have default columns.\n * Redirect when the request has no query params,\n * applying default columns and optional filters.\n */\n const hasIncomingQueryParams = Object.keys(req.query).length > 0\n if (hasIncomingQueryParams || !defaultColumnsSearch) {\n return undefined\n }\n\n // Filters: saved defaults override interactive default\n const filtersToApply =\n savedInteractiveDefaultsSearch && savedInteractiveDefaultsSearch.length\n ? savedInteractiveDefaultsSearch\n : defaultFiltersSearch\n\n // Sort precedence: requested > default > none\n const sortToApply = requestedSort ?? defaultSort\n\n // Build the query string progressively\n let query = defaultColumnsSearch\n if (filtersToApply) {\n query = joinQueryStrings(query, filtersToApply)\n }\n if (sortToApply) {\n query = joinQueryStrings(query, sortToApply)\n }\n return query\n}\n\n/**\n * Redirects the report to use the defaults\n *\n * @param {Response} res\n * @param {Request} req\n * @return {*}\n */\nexport const redirectWithDefaults = (res: Response, req: Request) => {\n const finalQuery = createDefaultQueryString(req)\n if (finalQuery) {\n const baseUrl = req.originalUrl.split('?')[0].replace(/\\/$/, '')\n res.redirect(`${baseUrl}?${finalQuery}`)\n return true\n }\n return false\n}\n\n/**\n * Updates the report state to expired and redirects\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n */\nexport const updateStateToExpiredAndRedirect = async (req: Request, res: Response, services: Services) => {\n const { tableId } = req.params as { tableId: string }\n const { dprUser } = LocalsHelper.getValues(res)\n\n // set the report to expired\n await services.recentlyViewedService.setToExpiredByTableId(tableId, dprUser.id)\n await services.requestedReportService.setToExpiredByTableId(tableId, dprUser.id)\n\n // get the updated report state\n const updatedReportState = await getMyReport({ tableId }, 'recentlyViewedReports', services, dprUser.id)\n const pollingUrl = updatedReportState?.url?.polling?.fullUrl\n\n // redirect to polling page, or safe fallback\n res.redirect(pollingUrl ?? '/')\n}\n\n/**\n * Updates the state for a viewed ASYNC report\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {RequestedReport} reportStateData\n * @param {string} userId\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nexport const updateLastViewedAsync = async (\n req: Request,\n res: Response,\n services: Services,\n reportStateData: RequestedReport,\n userId: string,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n\n const filtersQuery = extractFiltersFromQuery(req.query)\n const interactiveQueryData: { query: Record<string, string | string[]>; querySummary: QuerySummaryItem[] } = {\n query: <Record<string, string>>req.query,\n querySummary: buildQuerySummary(filtersQuery, fields),\n }\n\n const recentlyViewedReportData = new ViewedReportBuilder(req, res)\n .withReportData(reportData)\n .withExecutionData(executionData)\n .withInteractiveQuery(interactiveQueryData)\n .withRequestData(query, url)\n .build()\n\n if (executionId) await services.requestedReportService.updateLastViewed(executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedReportData, userId)\n}\n\n/**\n * Updates the last viewed state for a sync report\n *\n * @param {Request} req\n * @param {Services} services\n * @param {*} stateData\n * @param {string} userId\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nexport const updateLastViewedSync = async (\n req: Request,\n res: Response,\n services: Services,\n reportData: ReportData,\n userId: string,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const filtersQuery = extractFiltersFromQuery(req.query)\n const interactiveQueryData: { query: Record<string, string>; querySummary: QuerySummaryItem[] } = {\n query: <Record<string, string>>req.query,\n querySummary: buildQuerySummary(filtersQuery, fields),\n }\n\n const recentlyViewedReportData = new ViewedReportBuilder(req, res)\n .withReportData(reportData)\n .withInteractiveQuery(interactiveQueryData)\n .build()\n\n await services.recentlyViewedService?.setRecentlyViewed(recentlyViewedReportData, userId)\n}\n\nexport default {\n applyDashboardInteractiveQuery,\n applyReportInteractiveQuery,\n resetFilters,\n resetFiltersQueryString,\n resetColumnsQueryString,\n redirectWithDefaults,\n}\n"],"names":["LocalsHelper","ColumnsUtils"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../../../../../src/dpr/routes/journeys/view-report/utils.ts"],"sourcesContent":["import { Request, Response } from 'express'\nimport {\n qsToQueryObject,\n normalizeQueryStringArray,\n queryObjectToQs,\n extractFiltersFromQuery,\n} from '../../../utils/queryMappers'\n\nimport { joinQueryStrings } from '../../../utils/urlHelper'\nimport { components } from '../../../types/api'\nimport { Services } from '../../../types/Services'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport ColumnsUtils from '../../../components/_reports/report-heading/report-columns/report-columns-form/utils'\nimport { getActiveJourneyValue } from '../../../utils/sessionHelper'\nimport { getFields } from '../../../utils/definitionUtils'\nimport { LoadType, RequestedReport } from '../../../types/UserReports'\nimport { QuerySummaryItem } from '../../../components/_async/request-details/types'\nimport { buildQuerySummary } from '../../../components/_async/request-details/utils'\nimport { ViewedReportBuilder } from '../my-reports/recently-viewed/builder'\nimport { ReportData } from '../my-reports/builder'\nimport { getMyReport } from '../my-reports/utils'\n\n/**\n * Apply interactive query to a REPORT\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {('columns' | 'filters')} applyType\n * @return {*}\n */\nexport const applyReportInteractiveQuery = async (\n req: Request,\n res: Response,\n services: Services,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n) => {\n const { reportId, id } = <{ id: string; reportId: string }>req.params\n const { token, definitionsPath } = LocalsHelper.getValues(res)\n\n // Get the definition\n const definition =\n (res.locals['definition'] as components['schemas']['SingleVariantReportDefinition']) ??\n (await services.reportingService.getDefinition(token, reportId, id, definitionsPath))\n\n const fields = getFields(definition) || []\n\n return applyInteractiveQuery(req, res, applyType, loadType, fields)\n}\n\n/**\n * Apply interactive query to a DASHBOARD\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {('columns' | 'filters')} applyType\n * @return {*}\n */\nexport const applyDashboardInteractiveQuery = async (\n req: Request,\n res: Response,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n) => {\n return applyInteractiveQuery(req, res, applyType, loadType)\n}\n\n/**\n * Apply the interactive query\n *\n * @param {Request} req\n * @param {Response} res\n * @param {('columns' | 'filters')} applyType\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nconst applyInteractiveQuery = async (\n req: Request,\n res: Response,\n applyType: 'columns' | 'filters',\n loadType: LoadType,\n fields?: components['schemas']['FieldDefinition'][],\n) => {\n const { tableId, id, reportId } = <{ id: string; reportId: string; tableId: string }>req.params\n\n // Get the stored interactive query data\n const sessionkey = loadType === LoadType.ASYNC ? { id, tableId, reportId } : { id, reportId }\n const queryDataFromSession = getActiveJourneyValue(req, sessionkey, 'currentReportSearch')\n\n let queryData: Record<string, string | string[]> = {}\n let filtersData: Record<string, string | string[]> = {}\n let columnsData: Record<string, string | string[]> = {}\n\n if (queryDataFromSession) {\n queryData = qsToQueryObject(queryDataFromSession, '')\n filtersData = qsToQueryObject(queryDataFromSession, 'filters.')\n columnsData = qsToQueryObject(queryDataFromSession, 'columns')\n }\n\n // Set the query values from the current query\n const preventDefault = queryData?.['preventDefault']\n const pageSize = queryData?.['pageSize']\n const selectedPage = applyType === 'columns' ? queryData?.['selectedPage'] : '1'\n const sortColumn = queryData?.['sortColumn']\n const sortedAsc = queryData?.['sortedAsc']\n\n // Create merged form data\n let formData: Record<string, string | string[]> = {\n ...(preventDefault && { preventDefault }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n ...(filtersData && filtersData),\n ...(columnsData && columnsData),\n }\n\n formData =\n applyType === 'columns' && fields\n ? applyColumns(req, queryData, formData, fields)\n : applyFilters(req, queryData, formData)\n\n const filtersString = queryObjectToQs(formData)\n\n // Redirect back to report\n res.redirect(`${req.baseUrl}?${filtersString}`)\n}\n\n/**\n * Apply columns\n *\n * @param {Request} req\n * @param {(Record<string, string | string[]>)} queryData\n * @param {(Record<string, string | string[]>)} formData\n * @param {components['schemas']['FieldDefinition'][]} fields\n * @return {*}\n */\nconst applyColumns = (\n req: Request,\n queryData: Record<string, string | string[]>,\n formData: Record<string, string | string[]>,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { columns: reqColumns } = req.body\n\n // Normalize the req columns - should always be an array\n let bodyColumns: string[] = []\n if (reqColumns) {\n bodyColumns = Array.isArray(reqColumns) ? reqColumns : [reqColumns]\n }\n\n // ensure mandatory cols are present and set the updated columns\n const mandatoryCols = ColumnsUtils.mandatoryColumns(fields)\n const columns = Array.from(new Set([...mandatoryCols, ...bodyColumns]))\n\n // Keep the filter values the same as current\n let filters = {}\n if (queryData) {\n filters = Object.keys(queryData)\n .filter(key => key.includes('filters.'))\n .reduce((acc, key) => ({ ...acc, [key]: queryData[key] }), {})\n }\n\n return { ...formData, columns, ...filters }\n}\n\n/**\n * Apply filters\n *\n * @param {(Record<string, string | string[]>)} queryData\n * @param {(Record<string, string | string[]>)} formData\n * @return {*}\n */\nconst applyFilters = (\n req: Request,\n queryData: Record<string, string | string[]>,\n formData: Record<string, string | string[]>,\n) => {\n // Ensure current columns stay the same and are normalized\n const columns = normalizeQueryStringArray(queryData?.['columns']) || []\n const filters = Object.fromEntries(\n Object.keys(req.body)\n .filter(key => key.startsWith('filters.'))\n .map(key => [key, req.body[key]]),\n )\n\n return { ...formData, ...filters, columns }\n}\n\n/**\n * Reset filters action\n *\n * @param {Request} req\n * @param {Response} res\n */\nconst resetFilters = (req: Request, res: Response, sessionKey: { id: string; reportId: string; tableId?: string }) => {\n // Create the reset querystring\n const finalQuery = resetFiltersQueryString(req, sessionKey)\n\n // Redirect with new query string - query string will handle all rendered elements\n if (finalQuery) {\n res.redirect(`${req.baseUrl}?${finalQuery}`)\n }\n}\n\n/**\n * Creates the query string to reset the filters\n *\n * @param {Request} req\n * @param {{ id: string; reportId: string; tableId?: string }} sessionKey\n * @return {*} {string}\n */\nconst resetFiltersQueryString = (\n req: Request,\n sessionKey: { id: string; reportId: string; tableId?: string },\n): string => {\n const defaultSessionKey = { id: sessionKey.id, reportId: sessionKey.reportId }\n const defaultFiltersSearch = getActiveJourneyValue(req, defaultSessionKey, 'interactiveDefaultFiltersSearch')\n const savedInteractiveDefaultsSearch = getActiveJourneyValue(req, defaultSessionKey, 'savedInteractiveDefaultsSearch')\n\n // Set the effective qs: if saved defaults, use those. Otherwise use DPD defaults\n const effectiveQueryString =\n savedInteractiveDefaultsSearch && savedInteractiveDefaultsSearch.length\n ? savedInteractiveDefaultsSearch\n : defaultFiltersSearch\n\n // Get all the current stuff\n const currentColumnsSearch = getActiveJourneyValue(req, sessionKey, 'currentReportColumnsSearch')\n const currentSortSearch = getActiveJourneyValue(req, sessionKey, 'currentSortSearch')\n const currentPageSizeSearch = getActiveJourneyValue(req, sessionKey, 'currentPageSizeSearch')\n\n // Create the final querystring\n return joinQueryStrings(effectiveQueryString, currentColumnsSearch, currentSortSearch, currentPageSizeSearch)\n}\n\n/**\n * Creates the query string to reset the columns\n *\n * @param {Request} req\n * @param {{ id: string; reportId: string; tableId?: string }} sessionKey\n * @return {*} {string}\n */\nconst resetColumnsQueryString = (\n req: Request,\n sessionKey: { id: string; reportId: string; tableId?: string },\n): string => {\n // get the default DPD filters\n const defaultSessionKey = { id: sessionKey.id, reportId: sessionKey.reportId }\n const defaultColumnsSearch = getActiveJourneyValue(req, defaultSessionKey, 'defaultColumnsSearch')\n\n // Get all the current stuff\n const currentReportFiltersSearch = getActiveJourneyValue(req, sessionKey, 'currentReportFiltersSearch')\n const currentSortSearch = getActiveJourneyValue(req, sessionKey, 'currentSortSearch')\n const currentPageSizeSearch = getActiveJourneyValue(req, sessionKey, 'currentPageSizeSearch')\n\n // Create the final querystring\n return joinQueryStrings(defaultColumnsSearch, currentReportFiltersSearch, currentSortSearch, currentPageSizeSearch)\n}\n\n/**\n * Creates the default query string\n *\n * @param {Request} req\n * @return {*} {(string | undefined)}\n */\nconst createDefaultQueryString = (req: Request): string | undefined => {\n const { id, reportId, tableId } = req.params as {\n id: string\n reportId: string\n tableId: string\n }\n\n // Get the interactive report defaults\n const sessionKey = { id, reportId }\n\n // Definition defaults\n const defaultFiltersSearch = getActiveJourneyValue(req, sessionKey, 'interactiveDefaultFiltersSearch')\n const defaultColumnsSearch = getActiveJourneyValue(req, sessionKey, 'defaultColumnsSearch')\n const defaultSort = getActiveJourneyValue(req, sessionKey, 'defaultSortQueryString')\n\n // User defined values\n const savedInteractiveDefaultsSearch = getActiveJourneyValue(req, sessionKey, 'savedInteractiveDefaultsSearch')\n const requestedSort = getActiveJourneyValue(req, { id, reportId, tableId }, 'requestedSortSearch')\n\n /**\n * A report will always have default columns.\n * Redirect when the request has no query params,\n * applying default columns and optional filters.\n */\n const hasIncomingQueryParams = Object.keys(req.query).length > 0\n if (hasIncomingQueryParams || !defaultColumnsSearch) {\n return undefined\n }\n\n // Filters: saved defaults override interactive default\n const filtersToApply =\n savedInteractiveDefaultsSearch && savedInteractiveDefaultsSearch.length\n ? savedInteractiveDefaultsSearch\n : defaultFiltersSearch\n\n // Sort precedence: requested > default > none\n const sortToApply = requestedSort ?? defaultSort\n\n // Build the query string progressively\n let query = defaultColumnsSearch\n if (filtersToApply) {\n query = joinQueryStrings(query, filtersToApply)\n }\n if (sortToApply) {\n query = joinQueryStrings(query, sortToApply)\n }\n return query\n}\n\n/**\n * Redirects the report to use the defaults\n *\n * @param {Response} res\n * @param {Request} req\n * @return {*}\n */\nexport const redirectWithDefaults = (res: Response, req: Request) => {\n const finalQuery = createDefaultQueryString(req)\n if (finalQuery) {\n const baseUrl = req.originalUrl.split('?')[0].replace(/\\/$/, '')\n res.redirect(`${baseUrl}?${finalQuery}`)\n return true\n }\n return false\n}\n\n/**\n * Updates the report state to expired and redirects\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n */\nexport const updateStateToExpiredAndRedirect = async (req: Request, res: Response, services: Services) => {\n const { tableId } = req.params as { tableId: string }\n const { dprUser } = LocalsHelper.getValues(res)\n\n // set the report to expired\n await services.recentlyViewedService.setToExpiredByTableId(tableId, dprUser.id)\n await services.requestedReportService.setToExpiredByTableId(tableId, dprUser.id)\n\n // get the updated report state\n const updatedReportState = await getMyReport({ tableId }, 'recentlyViewedReports', services, dprUser.id)\n const pollingUrl = updatedReportState?.url?.polling?.fullUrl\n\n // redirect to polling page, or safe fallback\n res.redirect(pollingUrl ?? '/')\n}\n\n/**\n * Updates the state for a viewed ASYNC report\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Services} services\n * @param {RequestedReport} reportStateData\n * @param {string} userId\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nexport const updateLastViewedAsync = async (\n req: Request,\n res: Response,\n services: Services,\n reportStateData: RequestedReport,\n userId: string,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n\n const filtersQuery = extractFiltersFromQuery(req.query)\n const interactiveQueryData: { query: Record<string, string | string[]>; querySummary: QuerySummaryItem[] } = {\n query: <Record<string, string | string[]>>req.query,\n querySummary: buildQuerySummary(filtersQuery, fields),\n }\n\n const recentlyViewedReportData = new ViewedReportBuilder(req, res)\n .withReportData(reportData)\n .withExecutionData(executionData)\n .withInteractiveQuery(interactiveQueryData)\n .withRequestData(query, url)\n .build()\n\n if (executionId) await services.requestedReportService.updateLastViewed(executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedReportData, userId)\n}\n\n/**\n * Updates the last viewed state for a sync report\n *\n * @param {Request} req\n * @param {Services} services\n * @param {*} stateData\n * @param {string} userId\n * @param {components['schemas']['FieldDefinition'][]} fields\n */\nexport const updateLastViewedSync = async (\n req: Request,\n res: Response,\n services: Services,\n reportData: ReportData,\n userId: string,\n fields: components['schemas']['FieldDefinition'][],\n) => {\n const filtersQuery = extractFiltersFromQuery(req.query)\n const interactiveQueryData: { query: Record<string, string>; querySummary: QuerySummaryItem[] } = {\n query: <Record<string, string>>req.query,\n querySummary: buildQuerySummary(filtersQuery, fields),\n }\n\n const recentlyViewedReportData = new ViewedReportBuilder(req, res)\n .withReportData(reportData)\n .withInteractiveQuery(interactiveQueryData)\n .build()\n\n await services.recentlyViewedService?.setRecentlyViewed(recentlyViewedReportData, userId)\n}\n\nexport default {\n applyDashboardInteractiveQuery,\n applyReportInteractiveQuery,\n resetFilters,\n resetFiltersQueryString,\n resetColumnsQueryString,\n redirectWithDefaults,\n}\n"],"names":["LocalsHelper","ColumnsUtils"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reportListsHelper.js","sources":["../../../../../../../../src/dpr/utils/reportListsHelper.ts"],"sourcesContent":["import { Response } from 'express'\nimport { LoadType, ReportType, RequestStatus } from '../types/UserReports'\nimport localsHelper, { getRouteLocals } from './localsHelper'\nimport { setNestedPath } from './urlHelper'\n\nexport const itemActionsHtml = (\n retryHref: string,\n executionId: string,\n type: 'requested' | 'viewed',\n status: RequestStatus,\n) => {\n const text = status === RequestStatus.EXPIRED ? 'Refresh' : 'Retry'\n return `<div class=\"dpr-icon-wrapper__item-actions\">\n <a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1' href=\"${retryHref}\">${text}</a>\n <a class=\"govuk-link dpr-user-list-action govuk-link--no-visited-state dpr-remove-${type}-report-button\"\" href=\"#\" data-execution-id='${executionId}'>Remove</a>\n </div>`\n}\n\nconst getTypeTagColor = (type: ReportType) => {\n let tagColourClass = ''\n switch (type) {\n case ReportType.DASHBOARD:\n tagColourClass = 'govuk-tag--purple'\n break\n case ReportType.UNAVAILABLE:\n tagColourClass = 'govuk-tag--grey'\n break\n default:\n tagColourClass = ''\n break\n }\n return tagColourClass\n}\n\nexport const createListItemProduct = (productName: string, reportName: string, type: ReportType, ts?: string) => {\n const tsClass = !ts ? 'dpr-display-none' : ''\n const tagColor = getTypeTagColor(type)\n const reportType = toSentenceCase(type)\n return `<div>\n <p class=\"govuk-body govuk-!-margin-bottom-1\" aria-label=\"Report name ${reportName}\"><strong>${reportName}</strong></p>\n <p class=\"govuk-body-s govuk-!-margin-bottom-3\" aria-label=\"Product name ${productName}\">${productName}</p>\n <strong class=\"govuk-tag ${tagColor} dpr-request-status-tag--small govuk-!-margin-bottom-4\" aria-label=\"Report type ${reportType}\">${reportType}</strong>\n <p class=\"govuk-body-xs govuk-!-margin-bottom-0 govuk-!-margin-top-3 ${tsClass}\" aria-label=\"Timestamp\">${ts}</p>\n</div>`\n}\n\nexport const createListItemProductMin = (reportName: string, type: ReportType) => {\n const tagColor = getTypeTagColor(type)\n const reportType = toSentenceCase(type)\n return `<div>\n <p class=\"govuk-body-s govuk-!-margin-bottom-2\"><strong>${reportName}</strong></p>\n <strong class=\"govuk-tag ${tagColor} dpr-request-status-tag--small\">${reportType}</strong>\n</div>`\n}\n\nexport const createListActions = (\n href: string,\n type: ReportType,\n loadType?: LoadType,\n bookmarkHtml?: string,\n authorised = true,\n missing = false,\n) => {\n if (!authorised) {\n return `<strong class=\"govuk-tag govuk-tag--red dpr-request-status-tag dpr-request-status-tag--small dpr-unauthorised-report\" aria-label=\"You are unauthorised to view this report\">Unauthorised</strong>`\n }\n\n let requestAction\n let actionText\n if (missing) {\n actionText = `Request report`\n requestAction = `<a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1' href=\"${href}\">${actionText}</a>`\n } else {\n actionText = `Request ${type}`\n if (loadType && loadType === LoadType.SYNC) {\n actionText = `Load ${type}`\n }\n requestAction = `<a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1 dpr-live-report dpr-type__${type}' href=\"${href}\">${actionText}</a>`\n }\n\n if (bookmarkHtml) {\n requestAction = `${requestAction}</br>${bookmarkHtml}`\n }\n\n return requestAction\n}\n\nexport const toSentenceCase = (text: string) => {\n return text.charAt(0).toUpperCase() + text.substring(1).toLowerCase()\n}\n\nexport const setInitialHref = (\n loadType: LoadType,\n type: ReportType,\n reportId: string,\n id: string,\n res: Response,\n isMissing = false,\n) => {\n const { pathSuffix, dpdPathFromQuery } = localsHelper.getValues(res)\n const { nestedBaseUrl } = getRouteLocals(res)\n const rootPath = setNestedPath(`/dpr`, nestedBaseUrl)\n\n let href = ''\n if (isMissing) {\n href = `${rootPath}/request-missing-report/${reportId}/${id}/form`\n } else {\n const dpdPathQueryParam = dpdPathFromQuery ? pathSuffix : ''\n href = `${rootPath}/request-report/${type}/${reportId}/${id}/filters${dpdPathQueryParam}`\n\n if (loadType && loadType === LoadType.SYNC) {\n href = `${rootPath}/view-report/sync/${type}/${reportId}/${id}/load-report${dpdPathQueryParam}`\n }\n }\n return href\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reportListsHelper.js","sources":["../../../../../../../../src/dpr/utils/reportListsHelper.ts"],"sourcesContent":["import { Response } from 'express'\nimport { LoadType, ReportType, RequestStatus } from '../types/UserReports'\nimport localsHelper, { getRouteLocals } from './localsHelper'\nimport { setNestedPath } from './urlHelper'\n\nexport const itemActionsHtml = (\n retryHref: string,\n executionId: string,\n type: 'requested' | 'viewed',\n status: RequestStatus,\n) => {\n const text = status === RequestStatus.EXPIRED ? 'Refresh' : 'Retry'\n return `<div class=\"dpr-icon-wrapper__item-actions\">\n <a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1' href=\"${retryHref}\">${text}</a>\n <a class=\"govuk-link dpr-user-list-action govuk-link--no-visited-state dpr-remove-${type}-report-button\"\" href=\"#\" data-execution-id='${executionId}'>Remove</a>\n </div>`\n}\n\nconst getTypeTagColor = (type: ReportType) => {\n let tagColourClass = ''\n switch (type) {\n case ReportType.DASHBOARD:\n tagColourClass = 'govuk-tag--purple'\n break\n case ReportType.UNAVAILABLE:\n tagColourClass = 'govuk-tag--grey'\n break\n default:\n tagColourClass = ''\n break\n }\n return tagColourClass\n}\n\nexport const createListItemProduct = (productName: string, reportName: string, type: ReportType, ts?: string) => {\n const tsClass = !ts ? 'dpr-display-none' : ''\n const tagColor = getTypeTagColor(type)\n const reportType = toSentenceCase(type)\n return `<div>\n <p class=\"govuk-body govuk-!-margin-bottom-1\" aria-label=\"Report name ${reportName}\"><strong>${reportName}</strong></p>\n <p class=\"govuk-body-s govuk-!-margin-bottom-3\" aria-label=\"Product name ${productName}\">${productName}</p>\n <strong class=\"govuk-tag ${tagColor} dpr-request-status-tag--small govuk-!-margin-bottom-4\" aria-label=\"Report type ${reportType}\">${reportType}</strong>\n <p class=\"govuk-body-s govuk-!-margin-bottom-0 govuk-!-margin-top-3 ${tsClass}\" aria-label=\"Timestamp\">${ts}</p>\n</div>`\n}\n\nexport const createListItemProductMin = (reportName: string, type: ReportType) => {\n const tagColor = getTypeTagColor(type)\n const reportType = toSentenceCase(type)\n return `<div>\n <p class=\"govuk-body-s govuk-!-margin-bottom-2\"><strong>${reportName}</strong></p>\n <strong class=\"govuk-tag ${tagColor} dpr-request-status-tag--small\">${reportType}</strong>\n</div>`\n}\n\nexport const createListActions = (\n href: string,\n type: ReportType,\n loadType?: LoadType,\n bookmarkHtml?: string,\n authorised = true,\n missing = false,\n) => {\n if (!authorised) {\n return `<strong class=\"govuk-tag govuk-tag--red dpr-request-status-tag dpr-request-status-tag--small dpr-unauthorised-report\" aria-label=\"You are unauthorised to view this report\">Unauthorised</strong>`\n }\n\n let requestAction\n let actionText\n if (missing) {\n actionText = `Request report`\n requestAction = `<a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1' href=\"${href}\">${actionText}</a>`\n } else {\n actionText = `Request ${type}`\n if (loadType && loadType === LoadType.SYNC) {\n actionText = `Load ${type}`\n }\n requestAction = `<a class='govuk-link dpr-user-list-action govuk-link--no-visited-state govuk-!-margin-bottom-1 dpr-live-report dpr-type__${type}' href=\"${href}\">${actionText}</a>`\n }\n\n if (bookmarkHtml) {\n requestAction = `${requestAction}</br>${bookmarkHtml}`\n }\n\n return requestAction\n}\n\nexport const toSentenceCase = (text: string) => {\n return text.charAt(0).toUpperCase() + text.substring(1).toLowerCase()\n}\n\nexport const setInitialHref = (\n loadType: LoadType,\n type: ReportType,\n reportId: string,\n id: string,\n res: Response,\n isMissing = false,\n) => {\n const { pathSuffix, dpdPathFromQuery } = localsHelper.getValues(res)\n const { nestedBaseUrl } = getRouteLocals(res)\n const rootPath = setNestedPath(`/dpr`, nestedBaseUrl)\n\n let href = ''\n if (isMissing) {\n href = `${rootPath}/request-missing-report/${reportId}/${id}/form`\n } else {\n const dpdPathQueryParam = dpdPathFromQuery ? pathSuffix : ''\n href = `${rootPath}/request-report/${type}/${reportId}/${id}/filters${dpdPathQueryParam}`\n\n if (loadType && loadType === LoadType.SYNC) {\n href = `${rootPath}/view-report/sync/${type}/${reportId}/${id}/load-report${dpdPathQueryParam}`\n }\n }\n return href\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ministryofjustice/hmpps-digital-prison-reporting-frontend",
3
- "version": "6.8.2",
3
+ "version": "7.0.0",
4
4
  "description": "The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./index.js",
@@ -77,7 +77,7 @@
77
77
  },
78
78
  "dependencies": {
79
79
  "@flipt-io/flipt-client-js": "0.4.2",
80
- "@ministryofjustice/frontend": "^8.0.0",
80
+ "@ministryofjustice/frontend": "9.0.0",
81
81
  "@sentry/node": "10.57.0",
82
82
  "@tsconfig/node24": "24.0.4",
83
83
  "agentkeepalive": "^4.5.0",
@@ -91,7 +91,7 @@
91
91
  "dayjs": "^1.11.21",
92
92
  "express": "^5.2.1",
93
93
  "express-session": "^1.19.0",
94
- "govuk-frontend": "^5.13.0",
94
+ "govuk-frontend": "6.2.0",
95
95
  "nocache": "^4.0.0",
96
96
  "nunjucks": "^3.2.4",
97
97
  "nunjucks-date": "^1.5.0",
@@ -32,14 +32,14 @@ export declare const ViewedReportSchema: import("zod").ZodPipe<import("zod").Zod
32
32
  dataProductDefinitionsPath: import("zod").ZodOptional<import("zod").ZodString>;
33
33
  dpdPathFromQuery: import("zod").ZodOptional<import("zod").ZodBoolean>;
34
34
  query: import("zod").ZodOptional<import("zod").ZodObject<{
35
- data: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodArray<import("zod").ZodString>]>>;
35
+ data: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodArray<import("zod").ZodString>]>>>;
36
36
  summary: import("zod").ZodArray<import("zod").ZodObject<{
37
37
  name: import("zod").ZodString;
38
38
  value: import("zod").ZodString;
39
39
  }, import("zod/v4/core").$catchall<import("zod").ZodUnknown>>>;
40
40
  }, import("zod/v4/core").$strip>>;
41
41
  interactiveQuery: import("zod").ZodOptional<import("zod").ZodObject<{
42
- data: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodArray<import("zod").ZodString>]>>;
42
+ data: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodArray<import("zod").ZodString>]>>>;
43
43
  summary: import("zod").ZodArray<import("zod").ZodObject<{
44
44
  name: import("zod").ZodString;
45
45
  value: import("zod").ZodString;
@@ -33,14 +33,14 @@ export declare const RequestedReportSchema: z.ZodPipe<z.ZodObject<{
33
33
  dataProductDefinitionsPath: z.ZodOptional<z.ZodString>;
34
34
  dpdPathFromQuery: z.ZodOptional<z.ZodBoolean>;
35
35
  query: z.ZodOptional<z.ZodObject<{
36
- data: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
36
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
37
37
  summary: z.ZodArray<z.ZodObject<{
38
38
  name: z.ZodString;
39
39
  value: z.ZodString;
40
40
  }, z.core.$catchall<z.ZodUnknown>>>;
41
41
  }, z.core.$strip>>;
42
42
  interactiveQuery: z.ZodOptional<z.ZodObject<{
43
- data: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
43
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
44
44
  summary: z.ZodArray<z.ZodObject<{
45
45
  name: z.ZodString;
46
46
  value: z.ZodString;
@@ -93,11 +93,11 @@ export declare const RequestedReportSchema: z.ZodPipe<z.ZodObject<{
93
93
  }, z.core.$strip>>>;
94
94
  errorMessage: z.ZodOptional<z.ZodString>;
95
95
  filters: z.ZodOptional<z.ZodObject<{
96
- data: z.ZodRecord<z.ZodString, z.ZodString>;
96
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
97
97
  queryString: z.ZodString;
98
98
  }, z.core.$strip>>;
99
99
  sortBy: z.ZodOptional<z.ZodObject<{
100
- data: z.ZodRecord<z.ZodString, z.ZodString>;
100
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
101
101
  queryString: z.ZodString;
102
102
  }, z.core.$strip>>;
103
103
  }, z.core.$strip>, z.ZodTransform<{
@@ -293,14 +293,14 @@ export declare const RequestedDashboardSchema: z.ZodPipe<z.ZodObject<{
293
293
  dataProductDefinitionsPath: z.ZodOptional<z.ZodString>;
294
294
  dpdPathFromQuery: z.ZodOptional<z.ZodBoolean>;
295
295
  query: z.ZodOptional<z.ZodObject<{
296
- data: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
296
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
297
297
  summary: z.ZodArray<z.ZodObject<{
298
298
  name: z.ZodString;
299
299
  value: z.ZodString;
300
300
  }, z.core.$catchall<z.ZodUnknown>>>;
301
301
  }, z.core.$strip>>;
302
302
  interactiveQuery: z.ZodOptional<z.ZodObject<{
303
- data: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
303
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
304
304
  summary: z.ZodArray<z.ZodObject<{
305
305
  name: z.ZodString;
306
306
  value: z.ZodString;
@@ -11,7 +11,7 @@ export declare const AsyncReportsTimestampSchema: z.ZodObject<{
11
11
  refresh: z.ZodOptional<z.ZodCoercedDate<unknown>>;
12
12
  }, z.core.$strip>;
13
13
  export declare const ParamsConfigSchema: z.ZodObject<{
14
- data: z.ZodRecord<z.ZodString, z.ZodString>;
14
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
15
15
  queryString: z.ZodString;
16
16
  }, z.core.$strip>;
17
17
  export declare const normalizeStoredReportData: <T extends {
@@ -54,14 +54,14 @@ export declare const StoredReportDataObjectSchema: z.ZodObject<{
54
54
  dataProductDefinitionsPath: z.ZodOptional<z.ZodString>;
55
55
  dpdPathFromQuery: z.ZodOptional<z.ZodBoolean>;
56
56
  query: z.ZodOptional<z.ZodObject<{
57
- data: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
57
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
58
58
  summary: z.ZodArray<z.ZodObject<{
59
59
  name: z.ZodString;
60
60
  value: z.ZodString;
61
61
  }, z.core.$catchall<z.ZodUnknown>>>;
62
62
  }, z.core.$strip>>;
63
63
  interactiveQuery: z.ZodOptional<z.ZodObject<{
64
- data: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
64
+ data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
65
65
  summary: z.ZodArray<z.ZodObject<{
66
66
  name: z.ZodString;
67
67
  value: z.ZodString;