Files
Checkmate/client/src/Hooks/useMaintenanceWindowForm.ts
T
2026-02-04 22:55:54 +00:00

53 lines
1.3 KiB
TypeScript

import { useMemo } from "react";
import dayjs from "dayjs";
import {
maintenanceWindowSchema,
repeatOptions,
type MaintenanceWindowFormData,
} from "@/Validation/maintenanceWindow";
import type { MaintenanceWindow } from "@/Types/MaintenanceWindow";
interface UseMaintenanceWindowFormOptions {
data?: MaintenanceWindow | null;
}
const getRepeatId = (repeatMs: number): string => {
const option = repeatOptions.find((opt) => opt.value === repeatMs);
return option?.id ?? "none";
};
export const useMaintenanceWindowForm = ({
data = null,
}: UseMaintenanceWindowFormOptions = {}) => {
return useMemo(() => {
let defaults: MaintenanceWindowFormData;
if (data) {
const startDate = dayjs(data.start);
defaults = {
name: data.name,
repeat: getRepeatId(data.repeat),
startDate: startDate.format("YYYY-MM-DD"),
startTime: startDate.format("HH:mm"),
duration: data.duration ?? 0,
durationUnit: data.durationUnit ?? "minutes",
monitors: [data.monitorId],
};
} else {
const now = dayjs();
defaults = {
name: "",
repeat: "none",
startDate: now.format("YYYY-MM-DD"),
startTime: now.format("HH:mm"),
duration: 0,
durationUnit: "minutes",
monitors: [],
};
}
return { schema: maintenanceWindowSchema, defaults };
}, [data]);
};