@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
93 lines (89 loc) • 3.5 kB
JavaScript
'use strict';
var UserReports = require('../../../types/UserReports.js');
var z = require('zod');
const RequestStatusSchema = z.z.enum([
UserReports.RequestStatus.SUBMITTED,
UserReports.RequestStatus.STARTED,
UserReports.RequestStatus.PICKED,
UserReports.RequestStatus.READY,
UserReports.RequestStatus.FINISHED,
UserReports.RequestStatus.EXPIRED,
UserReports.RequestStatus.FAILED,
UserReports.RequestStatus.ABORTED,
UserReports.RequestStatus.ALL,
]);
const ReportTypeSchema = z.z.enum([UserReports.ReportType.REPORT, UserReports.ReportType.DASHBOARD]);
const LoadTypeSchema = z.z.enum([UserReports.LoadType.ASYNC, UserReports.LoadType.SYNC]);
const AsyncReportsTimestampSchema = z.z.object({
lastViewed: z.z.coerce.date().optional(),
requested: z.z.coerce.date().optional(),
completed: z.z.coerce.date().optional(),
expired: z.z.coerce.date().optional(),
failed: z.z.coerce.date().optional(),
retried: z.z.coerce.date().optional(),
aborted: z.z.coerce.date().optional(),
refresh: z.z.coerce.date().optional(),
});
const QuerySummaryItemSchema = z.z
.object({
name: z.z.string(),
value: z.z.string(),
})
.catchall(z.z.unknown());
const AsyncReportQueryDataSchema = z.z.object({
data: z.z.record(z.z.string(), z.z.union([z.z.string(), z.z.array(z.z.string())])).default({}),
summary: z.z.array(QuerySummaryItemSchema),
});
const AsyncReportUrlItemDataSchema = z.z.object({
pathname: z.z.string().optional(),
fullUrl: z.z.string().optional(),
search: z.z.string().optional(),
default: z.z.string().optional(),
});
const AsyncReportUrlDataSchema = z.z.object({
origin: z.z.string(),
request: AsyncReportUrlItemDataSchema.optional(),
report: AsyncReportUrlItemDataSchema.optional(),
polling: AsyncReportUrlItemDataSchema.optional(),
});
const ChildReportExecutionDataSchema = z.z.object({
variantId: z.z.string(),
executionId: z.z.string().optional(),
tableId: z.z.string().optional(),
status: RequestStatusSchema.optional(),
});
const ParamsConfigSchema = z.z.object({
data: z.z.record(z.z.string(), z.z.string()).default({}),
queryString: z.z.string(),
});
const normalizeStoredReportData = (data) => ({
...data,
name: data.name ?? data.variantName ?? '',
});
const StoredReportDataObjectSchema = z.z.object({
reportId: z.z.string(),
variantId: z.z.string().optional(),
id: z.z.string(),
executionId: z.z.string().optional(),
tableId: z.z.string().optional(),
reportName: z.z.string(),
variantName: z.z.string().optional(),
name: z.z.string().optional(),
schedule: z.z.string().optional(),
description: z.z.string(),
status: RequestStatusSchema.optional(),
timestamp: AsyncReportsTimestampSchema,
dataProductDefinitionsPath: z.z.string().optional(),
dpdPathFromQuery: z.z.boolean().optional(),
query: AsyncReportQueryDataSchema.optional(),
interactiveQuery: AsyncReportQueryDataSchema.optional(),
url: AsyncReportUrlDataSchema.optional(),
type: ReportTypeSchema,
loadType: LoadTypeSchema.optional(),
childExecutionData: z.z.array(ChildReportExecutionDataSchema).optional(),
});
exports.AsyncReportsTimestampSchema = AsyncReportsTimestampSchema;
exports.ParamsConfigSchema = ParamsConfigSchema;
exports.StoredReportDataObjectSchema = StoredReportDataObjectSchema;
exports.normalizeStoredReportData = normalizeStoredReportData;
//# sourceMappingURL=validation.js.map