53 lines
1.3 KiB
TypeScript
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]);
|
|
};
|