@ministryofjustice/hmpps-digital-prison-reporting-frontend 6.8.2 → 6.8.3
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/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/package.json +1 -1
- 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":";;;;;;;;;;;;;;;AAsBA;;;;;;;;AAQG;AACI,MAAM,2BAA2B,GAAG,OACzC,GAAY,EACZ,GAAa,EACb,QAAkB,EAClB,SAAgC,EAChC,QAAkB,KAChB;IACF,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAqC,GAAG,CAAC,MAAM;AACrE,IAAA,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAGA,oBAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAG9D,IAAA,MAAM,UAAU,GACb,GAAG,CAAC,MAAM,CAAC,YAAY,CAA4D;AACpF,SAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;IAEvF,MAAM,MAAM,GAAGC,yBAAS,CAAC,UAAU,CAAC,IAAI,EAAE;AAE1C,IAAA,OAAO,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;AACrE;AAEA;;;;;;;;AAQG;AACI,MAAM,8BAA8B,GAAG,OAC5C,GAAY,EACZ,GAAa,EACb,SAAgC,EAChC,QAAkB,KAChB;IACF,OAAO,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC;AAC7D;AAEA;;;;;;;AAOG;AACH,MAAM,qBAAqB,GAAG,OAC5B,GAAY,EACZ,GAAa,EACb,SAAgC,EAChC,QAAkB,EAClB,MAAmD,KACjD;IACF,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAsD,GAAG,CAAC,MAAM;;IAG/F,MAAM,UAAU,GAAG,QAAQ,KAAKC,oBAAQ,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE;IAC7F,MAAM,oBAAoB,GAAGC,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,qBAAqB,CAAC;IAE1F,IAAI,SAAS,GAAsC,EAAE;IACrD,IAAI,WAAW,GAAsC,EAAE;IACvD,IAAI,WAAW,GAAsC,EAAE;IAEvD,IAAI,oBAAoB,EAAE;AACxB,QAAA,SAAS,GAAGC,4BAAe,CAAC,oBAAoB,EAAE,EAAE,CAAC;AACrD,QAAA,WAAW,GAAGA,4BAAe,CAAC,oBAAoB,EAAE,UAAU,CAAC;AAC/D,QAAA,WAAW,GAAGA,4BAAe,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAChE;;AAGA,IAAA,MAAM,cAAc,GAAG,SAAS,GAAG,gBAAgB,CAAC;AACpD,IAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AACxC,IAAA,MAAM,YAAY,GAAG,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC,GAAG,GAAG;AAChF,IAAA,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAC5C,IAAA,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;;AAG1C,IAAA,IAAI,QAAQ,GAAsC;AAChD,QAAA,IAAI,cAAc,IAAI,EAAE,cAAc,EAAE,CAAC;AACzC,QAAA,IAAI,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;AACrC,QAAA,IAAI,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC7B,QAAA,IAAI,UAAU,IAAI,EAAE,UAAU,EAAE,CAAC;AACjC,QAAA,IAAI,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;AAC/B,QAAA,IAAI,WAAW,IAAI,WAAW,CAAC;AAC/B,QAAA,IAAI,WAAW,IAAI,WAAW,CAAC;KAChC;IAED,QAAQ;QACN,SAAS,KAAK,SAAS,IAAI;cACvB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;cAC7C,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC;AAE5C,IAAA,MAAM,aAAa,GAAGC,4BAAe,CAAC,QAAQ,CAAC;;IAG/C,GAAG,CAAC,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAC,OAAO,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAC;AACjD,CAAC;AAED;;;;;;;;AAQG;AACH,MAAM,YAAY,GAAG,CACnB,GAAY,EACZ,SAA4C,EAC5C,QAA2C,EAC3C,MAAkD,KAChD;IACF,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI;;IAGxC,IAAI,WAAW,GAAa,EAAE;IAC9B,IAAI,UAAU,EAAE;AACd,QAAA,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC;IACrE;;IAGA,MAAM,aAAa,GAAGC,eAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC3D,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;;IAGvE,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,SAAS,EAAE;AACb,QAAA,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS;aAC5B,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;aACtC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAClE;IAEA,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;AAC7C,CAAC;AAED;;;;;;AAMG;AACH,MAAM,YAAY,GAAG,CACnB,GAAY,EACZ,SAA4C,EAC5C,QAA2C,KACzC;;AAEF,IAAA,MAAM,OAAO,GAAGC,sCAAyB,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE;AACvE,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;SACjB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;AACxC,SAAA,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CACpC;IAED,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE;AAC7C,CAAC;AAED;;;;;AAKG;AACH,MAAM,YAAY,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,UAA8D,KAAI;;IAEnH,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,EAAE,UAAU,CAAC;;IAG3D,IAAI,UAAU,EAAE;QACd,GAAG,CAAC,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAC,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAC;IAC9C;AACF,CAAC;AAED;;;;;;AAMG;AACH,MAAM,uBAAuB,GAAG,CAC9B,GAAY,EACZ,UAA8D,KACpD;AACV,IAAA,MAAM,iBAAiB,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC9E,MAAM,oBAAoB,GAAGJ,mCAAqB,CAAC,GAAG,EAAE,iBAAiB,EAAE,iCAAiC,CAAC;IAC7G,MAAM,8BAA8B,GAAGA,mCAAqB,CAAC,GAAG,EAAE,iBAAiB,EAAE,gCAAgC,CAAC;;AAGtH,IAAA,MAAM,oBAAoB,GACxB,8BAA8B,IAAI,8BAA8B,CAAC;AAC/D,UAAE;UACA,oBAAoB;;IAG1B,MAAM,oBAAoB,GAAGA,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,4BAA4B,CAAC;IACjG,MAAM,iBAAiB,GAAGA,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,mBAAmB,CAAC;IACrF,MAAM,qBAAqB,GAAGA,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,uBAAuB,CAAC;;IAG7F,OAAOK,0BAAgB,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,CAAC;AAC/G,CAAC;AAED;;;;;;AAMG;AACH,MAAM,uBAAuB,GAAG,CAC9B,GAAY,EACZ,UAA8D,KACpD;;AAEV,IAAA,MAAM,iBAAiB,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC9E,MAAM,oBAAoB,GAAGL,mCAAqB,CAAC,GAAG,EAAE,iBAAiB,EAAE,sBAAsB,CAAC;;IAGlG,MAAM,0BAA0B,GAAGA,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,4BAA4B,CAAC;IACvG,MAAM,iBAAiB,GAAGA,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,mBAAmB,CAAC;IACrF,MAAM,qBAAqB,GAAGA,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,uBAAuB,CAAC;;IAG7F,OAAOK,0BAAgB,CAAC,oBAAoB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,qBAAqB,CAAC;AACrH,CAAC;AAED;;;;;AAKG;AACH,MAAM,wBAAwB,GAAG,CAAC,GAAY,KAAwB;IACpE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAIrC;;AAGD,IAAA,MAAM,UAAU,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE;;IAGnC,MAAM,oBAAoB,GAAGL,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,iCAAiC,CAAC;IACtG,MAAM,oBAAoB,GAAGA,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,sBAAsB,CAAC;IAC3F,MAAM,WAAW,GAAGA,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,wBAAwB,CAAC;;IAGpF,MAAM,8BAA8B,GAAGA,mCAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,gCAAgC,CAAC;AAC/G,IAAA,MAAM,aAAa,GAAGA,mCAAqB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,qBAAqB,CAAC;AAElG;;;;AAIG;AACH,IAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;AAChE,IAAA,IAAI,sBAAsB,IAAI,CAAC,oBAAoB,EAAE;AACnD,QAAA,OAAO,SAAS;IAClB;;AAGA,IAAA,MAAM,cAAc,GAClB,8BAA8B,IAAI,8BAA8B,CAAC;AAC/D,UAAE;UACA,oBAAoB;;AAG1B,IAAA,MAAM,WAAW,GAAG,aAAa,IAAI,WAAW;;IAGhD,IAAI,KAAK,GAAG,oBAAoB;IAChC,IAAI,cAAc,EAAE;AAClB,QAAA,KAAK,GAAGK,0BAAgB,CAAC,KAAK,EAAE,cAAc,CAAC;IACjD;IACA,IAAI,WAAW,EAAE;AACf,QAAA,KAAK,GAAGA,0BAAgB,CAAC,KAAK,EAAE,WAAW,CAAC;IAC9C;AACA,IAAA,OAAO,KAAK;AACd,CAAC;AAED;;;;;;AAMG;MACU,oBAAoB,GAAG,CAAC,GAAa,EAAE,GAAY,KAAI;AAClE,IAAA,MAAM,UAAU,GAAG,wBAAwB,CAAC,GAAG,CAAC;IAChD,IAAI,UAAU,EAAE;QACd,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAChE,GAAG,CAAC,QAAQ,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAC;AACxC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd;AAEA;;;;;;AAMG;AACI,MAAM,+BAA+B,GAAG,OAAO,GAAY,EAAE,GAAa,EAAE,QAAkB,KAAI;AACvG,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAA6B;IACrD,MAAM,EAAE,OAAO,EAAE,GAAGR,oBAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAG/C,IAAA,MAAM,QAAQ,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;AAC/E,IAAA,MAAM,QAAQ,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;;AAGhF,IAAA,MAAM,kBAAkB,GAAG,MAAMS,iBAAW,CAAC,EAAE,OAAO,EAAE,EAAE,uBAAuB,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;IACxG,MAAM,UAAU,GAAG,kBAAkB,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO;;AAG5D,IAAA,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC;AACjC;AAEA;;;;;;;;;AASG;AACI,MAAM,qBAAqB,GAAG,OACnC,GAAY,EACZ,GAAa,EACb,QAAkB,EAClB,eAAgC,EAChC,MAAc,EACd,MAAkD,KAChD;IACF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,eAAe;AAC/G,IAAA,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE;AACxE,IAAA,MAAM,aAAa,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE;IAE9C,MAAM,YAAY,GAAGC,oCAAuB,CAAC,GAAG,CAAC,KAAK,CAAC;AACvD,IAAA,MAAM,oBAAoB,GAAmF;QAC3G,KAAK,EAA0B,GAAG,CAAC,KAAK;AACxC,QAAA,YAAY,EAAEC,yBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC;KACtD;IAED,MAAM,wBAAwB,GAAG,IAAIC,2BAAmB,CAAC,GAAG,EAAE,GAAG;SAC9D,cAAc,CAAC,UAAU;SACzB,iBAAiB,CAAC,aAAa;SAC/B,oBAAoB,CAAC,oBAAoB;AACzC,SAAA,eAAe,CAAC,KAAK,EAAE,GAAG;AAC1B,SAAA,KAAK,EAAE;AAEV,IAAA,IAAI,WAAW;QAAE,MAAM,QAAQ,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC;IAC5F,MAAM,QAAQ,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,MAAM,CAAC;AAC1F;AAEA;;;;;;;;AAQG;AACI,MAAM,oBAAoB,GAAG,OAClC,GAAY,EACZ,GAAa,EACb,QAAkB,EAClB,UAAsB,EACtB,MAAc,EACd,MAAkD,KAChD;IACF,MAAM,YAAY,GAAGF,oCAAuB,CAAC,GAAG,CAAC,KAAK,CAAC;AACvD,IAAA,MAAM,oBAAoB,GAAwE;QAChG,KAAK,EAA0B,GAAG,CAAC,KAAK;AACxC,QAAA,YAAY,EAAEC,yBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC;KACtD;IAED,MAAM,wBAAwB,GAAG,IAAIC,2BAAmB,CAAC,GAAG,EAAE,GAAG;SAC9D,cAAc,CAAC,UAAU;SACzB,oBAAoB,CAAC,oBAAoB;AACzC,SAAA,KAAK,EAAE;IAEV,MAAM,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,wBAAwB,EAAE,MAAM,CAAC;AAC3F;AAEA,sBAAe;IACb,8BAA8B;IAC9B,2BAA2B;IAC3B,YAAY;IACZ,uBAAuB;IACvB,uBAAuB;IACvB,oBAAoB;CACrB;;;;;;;;;;"}
|
|
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,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":"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"}
|
|
@@ -31,7 +31,7 @@ const QuerySummaryItemSchema = z
|
|
|
31
31
|
})
|
|
32
32
|
.catchall(z.unknown());
|
|
33
33
|
const AsyncReportQueryDataSchema = z.object({
|
|
34
|
-
data: z.record(z.string(), z.union([z.string(), z.array(z.string())])),
|
|
34
|
+
data: z.record(z.string(), z.union([z.string(), z.array(z.string())])).default({}),
|
|
35
35
|
summary: z.array(QuerySummaryItemSchema),
|
|
36
36
|
});
|
|
37
37
|
const AsyncReportUrlItemDataSchema = z.object({
|
|
@@ -53,7 +53,7 @@ const ChildReportExecutionDataSchema = z.object({
|
|
|
53
53
|
status: RequestStatusSchema.optional(),
|
|
54
54
|
});
|
|
55
55
|
const ParamsConfigSchema = z.object({
|
|
56
|
-
data: z.record(z.string(), z.string()),
|
|
56
|
+
data: z.record(z.string(), z.string()).default({}),
|
|
57
57
|
queryString: z.string(),
|
|
58
58
|
});
|
|
59
59
|
const normalizeStoredReportData = (data) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sources":["../../../../../../../../../../src/dpr/routes/journeys/my-reports/validation.ts"],"sourcesContent":["import { LoadType, ReportType, RequestStatus } from 'src/dpr/types/UserReports'\nimport { z } from 'zod'\n\nconst RequestStatusSchema = z.enum([\n RequestStatus.SUBMITTED,\n RequestStatus.STARTED,\n RequestStatus.PICKED,\n RequestStatus.READY,\n RequestStatus.FINISHED,\n RequestStatus.EXPIRED,\n RequestStatus.FAILED,\n RequestStatus.ABORTED,\n RequestStatus.ALL,\n])\n\nconst ReportTypeSchema = z.enum([ReportType.REPORT, ReportType.DASHBOARD])\n\nconst LoadTypeSchema = z.enum([LoadType.ASYNC, LoadType.SYNC])\n\nexport const AsyncReportsTimestampSchema = z.object({\n lastViewed: z.coerce.date().optional(),\n requested: z.coerce.date().optional(),\n completed: z.coerce.date().optional(),\n expired: z.coerce.date().optional(),\n failed: z.coerce.date().optional(),\n retried: z.coerce.date().optional(),\n aborted: z.coerce.date().optional(),\n refresh: z.coerce.date().optional(),\n})\n\nconst QuerySummaryItemSchema = z\n .object({\n name: z.string(),\n value: z.string(),\n })\n .catchall(z.unknown())\n\nconst AsyncReportQueryDataSchema = z.object({\n data: z.record(z.string(), z.union([z.string(), z.array(z.string())])),\n summary: z.array(QuerySummaryItemSchema),\n})\n\nconst AsyncReportUrlItemDataSchema = z.object({\n pathname: z.string().optional(),\n fullUrl: z.string().optional(),\n search: z.string().optional(),\n default: z.string().optional(),\n})\n\nconst AsyncReportUrlDataSchema = z.object({\n origin: z.string(),\n request: AsyncReportUrlItemDataSchema.optional(),\n report: AsyncReportUrlItemDataSchema.optional(),\n polling: AsyncReportUrlItemDataSchema.optional(),\n})\n\nconst ChildReportExecutionDataSchema = z.object({\n variantId: z.string(),\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n status: RequestStatusSchema.optional(),\n})\n\nexport const ParamsConfigSchema = z.object({\n data: z.record(z.string(), z.string()),\n queryString: z.string(),\n})\n\nexport const normalizeStoredReportData = <\n T extends {\n name?: string | undefined\n variantName?: string | undefined\n },\n>(\n data: T,\n) => ({\n ...data,\n name: data.name ?? data.variantName ?? '',\n})\n\nexport const StoredReportDataObjectSchema = z.object({\n reportId: z.string(),\n variantId: z.string().optional(),\n id: z.string(),\n\n executionId: z.string().optional(),\n tableId: z.string().optional(),\n\n reportName: z.string(),\n\n variantName: z.string().optional(),\n name: z.string().optional(),\n\n description: z.string(),\n\n status: RequestStatusSchema.optional(),\n\n timestamp: AsyncReportsTimestampSchema,\n\n dataProductDefinitionsPath: z.string().optional(),\n dpdPathFromQuery: z.boolean().optional(),\n\n query: AsyncReportQueryDataSchema.optional(),\n interactiveQuery: AsyncReportQueryDataSchema.optional(),\n\n url: AsyncReportUrlDataSchema.optional(),\n\n type: ReportTypeSchema,\n\n loadType: LoadTypeSchema.optional(),\n\n childExecutionData: z.array(ChildReportExecutionDataSchema).optional(),\n})\n"],"names":[],"mappings":";;;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":";;;;;;;;;;;AAsBA;;;;;;;;AAQG;AACI,MAAM,2BAA2B,GAAG,OACzC,GAAY,EACZ,GAAa,EACb,QAAkB,EAClB,SAAgC,EAChC,QAAkB,KAChB;IACF,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAqC,GAAG,CAAC,MAAM;AACrE,IAAA,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAGA,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAG9D,IAAA,MAAM,UAAU,GACb,GAAG,CAAC,MAAM,CAAC,YAAY,CAA4D;AACpF,SAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;IAEvF,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE;AAE1C,IAAA,OAAO,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;AACrE;AAEA;;;;;;;;AAQG;AACI,MAAM,8BAA8B,GAAG,OAC5C,GAAY,EACZ,GAAa,EACb,SAAgC,EAChC,QAAkB,KAChB;IACF,OAAO,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC;AAC7D;AAEA;;;;;;;AAOG;AACH,MAAM,qBAAqB,GAAG,OAC5B,GAAY,EACZ,GAAa,EACb,SAAgC,EAChC,QAAkB,EAClB,MAAmD,KACjD;IACF,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAsD,GAAG,CAAC,MAAM;;IAG/F,MAAM,UAAU,GAAG,QAAQ,KAAK,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE;IAC7F,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,qBAAqB,CAAC;IAE1F,IAAI,SAAS,GAAsC,EAAE;IACrD,IAAI,WAAW,GAAsC,EAAE;IACvD,IAAI,WAAW,GAAsC,EAAE;IAEvD,IAAI,oBAAoB,EAAE;AACxB,QAAA,SAAS,GAAG,eAAe,CAAC,oBAAoB,EAAE,EAAE,CAAC;AACrD,QAAA,WAAW,GAAG,eAAe,CAAC,oBAAoB,EAAE,UAAU,CAAC;AAC/D,QAAA,WAAW,GAAG,eAAe,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAChE;;AAGA,IAAA,MAAM,cAAc,GAAG,SAAS,GAAG,gBAAgB,CAAC;AACpD,IAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AACxC,IAAA,MAAM,YAAY,GAAG,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC,GAAG,GAAG;AAChF,IAAA,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAC5C,IAAA,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;;AAG1C,IAAA,IAAI,QAAQ,GAAsC;AAChD,QAAA,IAAI,cAAc,IAAI,EAAE,cAAc,EAAE,CAAC;AACzC,QAAA,IAAI,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;AACrC,QAAA,IAAI,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC7B,QAAA,IAAI,UAAU,IAAI,EAAE,UAAU,EAAE,CAAC;AACjC,QAAA,IAAI,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;AAC/B,QAAA,IAAI,WAAW,IAAI,WAAW,CAAC;AAC/B,QAAA,IAAI,WAAW,IAAI,WAAW,CAAC;KAChC;IAED,QAAQ;QACN,SAAS,KAAK,SAAS,IAAI;cACvB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM;cAC7C,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC;AAE5C,IAAA,MAAM,aAAa,GAAG,eAAe,CAAC,QAAQ,CAAC;;IAG/C,GAAG,CAAC,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAC,OAAO,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAC;AACjD,CAAC;AAED;;;;;;;;AAQG;AACH,MAAM,YAAY,GAAG,CACnB,GAAY,EACZ,SAA4C,EAC5C,QAA2C,EAC3C,MAAkD,KAChD;IACF,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI;;IAGxC,IAAI,WAAW,GAAa,EAAE;IAC9B,IAAI,UAAU,EAAE;AACd,QAAA,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC;IACrE;;IAGA,MAAM,aAAa,GAAGC,WAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC3D,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;;IAGvE,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,SAAS,EAAE;AACb,QAAA,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS;aAC5B,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;aACtC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAClE;IAEA,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;AAC7C,CAAC;AAED;;;;;;AAMG;AACH,MAAM,YAAY,GAAG,CACnB,GAAY,EACZ,SAA4C,EAC5C,QAA2C,KACzC;;AAEF,IAAA,MAAM,OAAO,GAAG,yBAAyB,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE;AACvE,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;SACjB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;AACxC,SAAA,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CACpC;IAED,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE;AAC7C,CAAC;AAED;;;;;AAKG;AACH,MAAM,YAAY,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,UAA8D,KAAI;;IAEnH,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,EAAE,UAAU,CAAC;;IAG3D,IAAI,UAAU,EAAE;QACd,GAAG,CAAC,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAC,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAC;IAC9C;AACF,CAAC;AAED;;;;;;AAMG;AACH,MAAM,uBAAuB,GAAG,CAC9B,GAAY,EACZ,UAA8D,KACpD;AACV,IAAA,MAAM,iBAAiB,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC9E,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,EAAE,iCAAiC,CAAC;IAC7G,MAAM,8BAA8B,GAAG,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,EAAE,gCAAgC,CAAC;;AAGtH,IAAA,MAAM,oBAAoB,GACxB,8BAA8B,IAAI,8BAA8B,CAAC;AAC/D,UAAE;UACA,oBAAoB;;IAG1B,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,4BAA4B,CAAC;IACjG,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,mBAAmB,CAAC;IACrF,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,uBAAuB,CAAC;;IAG7F,OAAO,gBAAgB,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,CAAC;AAC/G,CAAC;AAED;;;;;;AAMG;AACH,MAAM,uBAAuB,GAAG,CAC9B,GAAY,EACZ,UAA8D,KACpD;;AAEV,IAAA,MAAM,iBAAiB,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC9E,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,EAAE,sBAAsB,CAAC;;IAGlG,MAAM,0BAA0B,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,4BAA4B,CAAC;IACvG,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,mBAAmB,CAAC;IACrF,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,uBAAuB,CAAC;;IAG7F,OAAO,gBAAgB,CAAC,oBAAoB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,qBAAqB,CAAC;AACrH,CAAC;AAED;;;;;AAKG;AACH,MAAM,wBAAwB,GAAG,CAAC,GAAY,KAAwB;IACpE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAIrC;;AAGD,IAAA,MAAM,UAAU,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE;;IAGnC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,iCAAiC,CAAC;IACtG,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,sBAAsB,CAAC;IAC3F,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,wBAAwB,CAAC;;IAGpF,MAAM,8BAA8B,GAAG,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,gCAAgC,CAAC;AAC/G,IAAA,MAAM,aAAa,GAAG,qBAAqB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,qBAAqB,CAAC;AAElG;;;;AAIG;AACH,IAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;AAChE,IAAA,IAAI,sBAAsB,IAAI,CAAC,oBAAoB,EAAE;AACnD,QAAA,OAAO,SAAS;IAClB;;AAGA,IAAA,MAAM,cAAc,GAClB,8BAA8B,IAAI,8BAA8B,CAAC;AAC/D,UAAE;UACA,oBAAoB;;AAG1B,IAAA,MAAM,WAAW,GAAG,aAAa,IAAI,WAAW;;IAGhD,IAAI,KAAK,GAAG,oBAAoB;IAChC,IAAI,cAAc,EAAE;AAClB,QAAA,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC;IACjD;IACA,IAAI,WAAW,EAAE;AACf,QAAA,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC;IAC9C;AACA,IAAA,OAAO,KAAK;AACd,CAAC;AAED;;;;;;AAMG;MACU,oBAAoB,GAAG,CAAC,GAAa,EAAE,GAAY,KAAI;AAClE,IAAA,MAAM,UAAU,GAAG,wBAAwB,CAAC,GAAG,CAAC;IAChD,IAAI,UAAU,EAAE;QACd,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAChE,GAAG,CAAC,QAAQ,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAC;AACxC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd;AAEA;;;;;;AAMG;AACI,MAAM,+BAA+B,GAAG,OAAO,GAAY,EAAE,GAAa,EAAE,QAAkB,KAAI;AACvG,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAA6B;IACrD,MAAM,EAAE,OAAO,EAAE,GAAGD,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC;;AAG/C,IAAA,MAAM,QAAQ,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;AAC/E,IAAA,MAAM,QAAQ,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;;AAGhF,IAAA,MAAM,kBAAkB,GAAG,MAAM,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,uBAAuB,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;IACxG,MAAM,UAAU,GAAG,kBAAkB,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO;;AAG5D,IAAA,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC;AACjC;AAEA;;;;;;;;;AASG;AACI,MAAM,qBAAqB,GAAG,OACnC,GAAY,EACZ,GAAa,EACb,QAAkB,EAClB,eAAgC,EAChC,MAAc,EACd,MAAkD,KAChD;IACF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,eAAe;AAC/G,IAAA,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE;AACxE,IAAA,MAAM,aAAa,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE;IAE9C,MAAM,YAAY,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC;AACvD,IAAA,MAAM,oBAAoB,GAAmF;QAC3G,KAAK,EAA0B,GAAG,CAAC,KAAK;AACxC,QAAA,YAAY,EAAE,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC;KACtD;IAED,MAAM,wBAAwB,GAAG,IAAI,mBAAmB,CAAC,GAAG,EAAE,GAAG;SAC9D,cAAc,CAAC,UAAU;SACzB,iBAAiB,CAAC,aAAa;SAC/B,oBAAoB,CAAC,oBAAoB;AACzC,SAAA,eAAe,CAAC,KAAK,EAAE,GAAG;AAC1B,SAAA,KAAK,EAAE;AAEV,IAAA,IAAI,WAAW;QAAE,MAAM,QAAQ,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC;IAC5F,MAAM,QAAQ,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,MAAM,CAAC;AAC1F;AAEA;;;;;;;;AAQG;AACI,MAAM,oBAAoB,GAAG,OAClC,GAAY,EACZ,GAAa,EACb,QAAkB,EAClB,UAAsB,EACtB,MAAc,EACd,MAAkD,KAChD;IACF,MAAM,YAAY,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC;AACvD,IAAA,MAAM,oBAAoB,GAAwE;QAChG,KAAK,EAA0B,GAAG,CAAC,KAAK;AACxC,QAAA,YAAY,EAAE,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC;KACtD;IAED,MAAM,wBAAwB,GAAG,IAAI,mBAAmB,CAAC,GAAG,EAAE,GAAG;SAC9D,cAAc,CAAC,UAAU;SACzB,oBAAoB,CAAC,oBAAoB;AACzC,SAAA,KAAK,EAAE;IAEV,MAAM,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,wBAAwB,EAAE,MAAM,CAAC;AAC3F;AAEA,sBAAe;IACb,8BAA8B;IAC9B,2BAA2B;IAC3B,YAAY;IACZ,uBAAuB;IACvB,uBAAuB;IACvB,oBAAoB;CACrB;;;;"}
|
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ministryofjustice/hmpps-digital-prison-reporting-frontend",
|
|
3
|
-
"version": "6.8.
|
|
3
|
+
"version": "6.8.3",
|
|
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",
|
|
@@ -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;
|