diff --git a/client/src/Hooks/useMaintenanceWindowForm.ts b/client/src/Hooks/useMaintenanceWindowForm.ts index 1f10d55efd..4e7d84a9a9 100644 --- a/client/src/Hooks/useMaintenanceWindowForm.ts +++ b/client/src/Hooks/useMaintenanceWindowForm.ts @@ -2,6 +2,7 @@ import { useMemo } from "react"; import dayjs from "dayjs"; import { maintenanceWindowSchema, + maintenanceWindowEditSchema, repeatOptions, type MaintenanceWindowFormData, } from "@/Validation/maintenanceWindow"; @@ -47,6 +48,9 @@ export const useMaintenanceWindowForm = ({ }; } - return { schema: maintenanceWindowSchema, defaults }; + return { + schema: data ? maintenanceWindowEditSchema : maintenanceWindowSchema, + defaults, + }; }, [data]); }; diff --git a/client/src/Validation/maintenanceWindow.ts b/client/src/Validation/maintenanceWindow.ts index 61ccf3c8da..dbe447e871 100644 --- a/client/src/Validation/maintenanceWindow.ts +++ b/client/src/Validation/maintenanceWindow.ts @@ -14,30 +14,32 @@ 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"), - }) - .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"], - } - ); +const maintenanceWindowBaseSchema = 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 = maintenanceWindowBaseSchema.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 const maintenanceWindowEditSchema = maintenanceWindowBaseSchema; export type MaintenanceWindowFormData = z.infer;