@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.
- package/cjs/dpr/routes/journeys/my-reports/recently-viewed/builder.js +10 -2
- package/cjs/dpr/routes/journeys/my-reports/recently-viewed/builder.js.map +1 -1
- package/cjs/dpr/routes/journeys/my-reports/requested-reports/builder.js +1 -1
- package/cjs/dpr/routes/journeys/my-reports/requested-reports/builder.js.map +1 -1
- package/cjs/dpr/routes/journeys/my-reports/validation.js +2 -2
- package/cjs/dpr/routes/journeys/my-reports/validation.js.map +1 -1
- package/cjs/dpr/routes/journeys/view-report/utils.js.map +1 -1
- package/cjs/dpr/utils/reportListsHelper.js.map +1 -1
- package/dpr/all.scss +41 -40
- package/dpr/components/_async/async-filters-form/actions/save-defaults/view.njk +1 -1
- package/dpr/components/_filters/filters-save-defaults/view.njk +1 -1
- package/dpr/routes/journeys/my-reports/recently-viewed/builder.js +10 -2
- package/dpr/routes/journeys/my-reports/recently-viewed/builder.js.map +1 -1
- package/dpr/routes/journeys/my-reports/requested-reports/builder.js +1 -1
- package/dpr/routes/journeys/my-reports/requested-reports/builder.js.map +1 -1
- package/dpr/routes/journeys/my-reports/validation.js +2 -2
- package/dpr/routes/journeys/my-reports/validation.js.map +1 -1
- package/dpr/routes/journeys/view-report/utils.js.map +1 -1
- package/dpr/utils/reportListsHelper.js.map +1 -1
- package/package.json +3 -3
- package/src/dpr/routes/journeys/my-reports/recently-viewed/validation.d.ts +2 -2
- package/src/dpr/routes/journeys/my-reports/requested-reports/validation.d.ts +6 -6
- 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
|
-
|
|
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
|
|
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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"}
|
|
@@ -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":";;;;;;AAaM,MAAO,sBAAuB,SAAQA,wBAAgB,CAAA;AAM/C,IAAA,GAAA;AALX,IAAA,OAAO;AAEP,IAAA,IAAI;IAEJ,WAAA,CACW,GAAY,EACrB,GAAa,EAAA;QAEb,KAAK,CAAC,GAAG,CAAC;QAHD,IAAA,CAAA,GAAG,GAAH,GAAG;IAId;IAEQ,eAAe,GAAG,MAAK;AAC7B,QAAA,MAAM,eAAe,GAAoB,IAAI,CAAC,GAAG,CAAC,IAAI;AACtD,QAAA,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,IAAkB;AAEpD,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;AAClD,IAAA,CAAC;IAEO,YAAY,GAAG,MAAK;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AAEnE,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS;QAErC,OAAO;AACL,YAAA,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;SACxD;AACH,IAAA,CAAC;IAEO,aAAa,GAAG,MAAK;QAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ;AAAE,YAAA,OAAO,SAAS;AAElE,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS;QAEnC,OAAO;
|
|
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":";;;;;AAGA,MAAM,mBAAmB,GAAGA,GAAC,CAAC,IAAI,CAAC;AACjC,IAAAC,yBAAa,CAAC,SAAS;AACvB,IAAAA,yBAAa,CAAC,OAAO;AACrB,IAAAA,yBAAa,CAAC,MAAM;AACpB,IAAAA,yBAAa,CAAC,KAAK;AACnB,IAAAA,yBAAa,CAAC,QAAQ;AACtB,IAAAA,yBAAa,CAAC,OAAO;AACrB,IAAAA,yBAAa,CAAC,MAAM;AACpB,IAAAA,yBAAa,CAAC,OAAO;AACrB,IAAAA,yBAAa,CAAC,GAAG;AAClB,CAAA,CAAC;AAEF,MAAM,gBAAgB,GAAGD,GAAC,CAAC,IAAI,CAAC,CAACE,sBAAU,CAAC,MAAM,EAAEA,sBAAU,CAAC,SAAS,CAAC,CAAC;AAE1E,MAAM,cAAc,GAAGF,GAAC,CAAC,IAAI,CAAC,CAACG,oBAAQ,CAAC,KAAK,EAAEA,oBAAQ,CAAC,IAAI,CAAC,CAAC;AAEvD,MAAM,2BAA2B,GAAGH,GAAC,CAAC,MAAM,CAAC;IAClD,UAAU,EAAEA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAEA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAEA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,OAAO,EAAEA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAEA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAEA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,OAAO,EAAEA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,OAAO,EAAEA,GAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;AACpC,CAAA;AAED,MAAM,sBAAsB,GAAGA;AAC5B,KAAA,MAAM,CAAC;AACN,IAAA,IAAI,EAAEA,GAAC,CAAC,MAAM,EAAE;AAChB,IAAA,KAAK,EAAEA,GAAC,CAAC,MAAM,EAAE;CAClB;AACA,KAAA,QAAQ,CAACA,GAAC,CAAC,OAAO,EAAE,CAAC;AAExB,MAAM,0BAA0B,GAAGA,GAAC,CAAC,MAAM,CAAC;AAC1C,IAAA,IAAI,EAAEA,GAAC,CAAC,MAAM,CAACA,GAAC,CAAC,MAAM,EAAE,EAAEA,GAAC,CAAC,KAAK,CAAC,CAACA,GAAC,CAAC,MAAM,EAAE,EAAEA,GAAC,CAAC,KAAK,CAACA,GAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;
|
|
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-
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
907
|
-
border-bottom: solid 2px govuk-colour('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
1470
|
-
border-bottom: solid 1px govuk-colour('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
1860
|
+
background-color: govuk-colour('magenta', $variant: 'shade-25');
|
|
1860
1861
|
}
|
|
1861
1862
|
|
|
1862
1863
|
.chart-colour__purple {
|
|
1863
|
-
background-color: govuk-colour('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
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('
|
|
2119
|
-
border-bottom: solid 1px govuk-colour('
|
|
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('
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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
|
|
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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"}
|
|
@@ -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":";;;;AAaM,MAAO,sBAAuB,SAAQ,gBAAgB,CAAA;AAM/C,IAAA,GAAA;AALX,IAAA,OAAO;AAEP,IAAA,IAAI;IAEJ,WAAA,CACW,GAAY,EACrB,GAAa,EAAA;QAEb,KAAK,CAAC,GAAG,CAAC;QAHD,IAAA,CAAA,GAAG,GAAH,GAAG;IAId;IAEQ,eAAe,GAAG,MAAK;AAC7B,QAAA,MAAM,eAAe,GAAoB,IAAI,CAAC,GAAG,CAAC,IAAI;AACtD,QAAA,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,IAAkB;AAEpD,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;AAClD,IAAA,CAAC;IAEO,YAAY,GAAG,MAAK;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AAEnE,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS;QAErC,OAAO;AACL,YAAA,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;SACxD;AACH,IAAA,CAAC;IAEO,aAAa,GAAG,MAAK;QAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ;AAAE,YAAA,OAAO,SAAS;AAElE,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS;QAEnC,OAAO;
|
|
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":";;;;AAaM,MAAO,sBAAuB,SAAQ,gBAAgB,CAAA;AAM/C,IAAA,GAAA;AALX,IAAA,OAAO;AAEP,IAAA,IAAI;IAEJ,WAAA,CACW,GAAY,EACrB,GAAa,EAAA;QAEb,KAAK,CAAC,GAAG,CAAC;QAHD,IAAA,CAAA,GAAG,GAAH,GAAG;IAId;IAEQ,eAAe,GAAG,MAAK;AAC7B,QAAA,MAAM,eAAe,GAAoB,IAAI,CAAC,GAAG,CAAC,IAAI;AACtD,QAAA,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,IAAkB;AAEpD,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;AAClD,IAAA,CAAC;IAEO,YAAY,GAAG,MAAK;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU;AAAE,YAAA,OAAO,SAAS;AAEnE,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS;QAErC,OAAO;AACL,YAAA,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;SACxD;AACH,IAAA,CAAC;IAEO,aAAa,GAAG,MAAK;QAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ;AAAE,YAAA,OAAO,SAAS;AAElE,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS;QAEnC,OAAO;YACL,IAAI,EAAE,QAAQ,IAAI,EAAE;YACpB,WAAW,EAAE,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;SACtD;AACH,IAAA,CAAC;IAEO,gBAAgB,GAAG,MAAK;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAA,GAAA,EAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA,CAAE,CAAC;QAC3F,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG;QAExC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAErD,QAAA,MAAM,cAAc,GAAG;YACrB,OAAO,EAAE,GAAG,MAAM,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAA,CAAE;YAC3C,QAAQ;YACR,MAAM;SACP;QAED,OAAO;YACL,MAAM;AACN,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,OAAO,EAAE,cAAc;SACxB;AACH,IAAA,CAAC;AAEO,IAAA,iBAAiB,GAAG,CAAC,MAAc,KAAI;QAC7C,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;AAE7D,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,aAAa;AAE1C,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAA,CAAA,EAAI,WAAW,CAAA,OAAA,CAAS,CAAC;QAChF,IAAI,gBAAgB,EAAE;AACpB,YAAA,WAAW,GAAG,CAAA,EAAG,WAAW,CAAA,4BAAA,EAA+B,eAAe,EAAE;QAC9E;AAEA,QAAA,MAAM,cAAc,GAAG,CAAA,EAAG,MAAM,CAAA,EAAG,WAAW,EAAE;QAEhD,OAAO;AACL,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,QAAQ,EAAE,WAAW;SACtB;AACH,IAAA,CAAC;IAEO,WAAW,GAAG,MAAK;QACzB,OAAO,aAAa,CAAC,SAAS;AAChC,IAAA,CAAC;IAEO,cAAc,GAAG,MAAK;QAC5B,OAAO;YACL,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB;AACH,IAAA,CAAC;IAEO,UAAU,GAAG,MAAuC;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS;AAE5E,QAAA,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS;QAE7D,OAAO;YACL,IAAI;YACJ,OAAO;SACR;AACH,IAAA,CAAC;IAEO,aAAa,GAAG,MAAK;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,SAAS;AAAE,YAAA,OAAO,SAAS;QAElF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ;QAE3C,MAAM,QAAQ,GAA0D;AACtE,cAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ;cACjC,EAAE;AAEN,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;AACtG,IAAA,CAAC;IAED,KAAK,GAAG,MAAsB;AAC5B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE;AACvC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE;AAEpC,QAAA,MAAM,mBAAmB,GAAyC;AAChE,YAAA,GAAG,UAAU;YACb,GAAG,IAAI,CAAC,aAAa;AACrB,YAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC/E,YAAA,IAAI,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,YAAA,IAAI,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;AACzB,YAAA,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;AACvB,YAAA,IAAI,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,YAAA,IAAI,eAAe,IAAI,eAAe,CAAC;YACvC,GAAG;YACH,MAAM;YACN,SAAS;SACV;AAED,QAAA,OAAO,mBAAmB;AAC5B,IAAA,CAAC;AACF;;;;"}
|
|
@@ -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":";;;AAGA,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC;AACjC,IAAA,aAAa,CAAC,SAAS;AACvB,IAAA,aAAa,CAAC,OAAO;AACrB,IAAA,aAAa,CAAC,MAAM;AACpB,IAAA,aAAa,CAAC,KAAK;AACnB,IAAA,aAAa,CAAC,QAAQ;AACtB,IAAA,aAAa,CAAC,OAAO;AACrB,IAAA,aAAa,CAAC,MAAM;AACpB,IAAA,aAAa,CAAC,OAAO;AACrB,IAAA,aAAa,CAAC,GAAG;AAClB,CAAA,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;AAE1E,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAEvD,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;AACpC,CAAA;AAED,MAAM,sBAAsB,GAAG;AAC5B,KAAA,MAAM,CAAC;AACN,IAAA,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;AAChB,IAAA,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB;AACA,KAAA,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAExB,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;AAC1C,IAAA,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;
|
|
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-
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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;
|