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