This commit is contained in:
Alex Holliday committed 2026-02-04 22:55:54 +00:00
1 parent dc0e198a8e
commit f0b152fc8f
10 files changed
+142 -72

No files matched your search

+26 -15
View File
@@ -1,4 +1,5 @@
import { z } from "zod";
import dayjs from "dayjs";
export const repeatOptions = [
{ id: "none", name: "Don't repeat", value: 0 },
@@ -13,20 +14,30 @@ export const durationUnitOptions = [
{ id: "days", name: "days", multiplier: 86400000 },
] as const;
export const maintenanceWindowSchema = z.object({
name: z
.string()
.min(1, "Name is required")
.max(100, "Name must be at most 100 characters"),
repeat: z.string(),
startDate: z.string().min(1, "Start date is required"),
startTime: z.string().min(1, "Start time is required"),
duration: z
.number()
.int()
.min(1, "Duration must be at least 1"),
durationUnit: z.string(),
monitors: z.array(z.string()).min(1, "At least one monitor is required"),
});
export const maintenanceWindowSchema = z
.object({
name: z
.string()
.min(1, "Name is required")
.max(100, "Name must be at most 100 characters"),
repeat: z.string(),
startDate: z.string().min(1, "Start date is required"),
startTime: z.string().min(1, "Start time is required"),
duration: z.number().int().min(1, "Duration must be at least 1"),
durationUnit: z.string(),
monitors: z.array(z.string()).min(1, "At least one monitor is required"),
})
.refine(
(data) => {
const startDateTime = dayjs(data.startDate)
.set("hour", parseInt(data.startTime.split(":")[0], 10))
.set("minute", parseInt(data.startTime.split(":")[1], 10));
return startDateTime.isAfter(dayjs());
},
{
message: "Start date and time must be in the future",
path: ["startDate"],
}
);
export type MaintenanceWindowFormData = z.infer<typeof maintenanceWindowSchema>;