65 lines
1.5 KiB
React
65 lines
1.5 KiB
React
import { networkService } from "../../../../main";
|
|
import dayjs from "dayjs";
|
|
import {
|
|
MS_PER_SECOND,
|
|
MS_PER_MINUTE,
|
|
MS_PER_HOUR,
|
|
MS_PER_DAY,
|
|
MS_PER_WEEK,
|
|
} from "../../../../Utils/timeUtils";
|
|
|
|
const useMaintenanceActions = () => {
|
|
const MS_LOOKUP = {
|
|
seconds: MS_PER_SECOND,
|
|
minutes: MS_PER_MINUTE,
|
|
hours: MS_PER_HOUR,
|
|
days: MS_PER_DAY,
|
|
weeks: MS_PER_WEEK,
|
|
};
|
|
const REPEAT_LOOKUP = {
|
|
none: 0,
|
|
daily: MS_PER_DAY,
|
|
weekly: MS_PER_DAY * 7,
|
|
};
|
|
const handleSubmitForm = async (maintenanceWindowId, form) => {
|
|
const start = dayjs(form.startDate)
|
|
.set("hour", form.startTime.hour())
|
|
.set("minute", form.startTime.minute());
|
|
|
|
const MS_MULTIPLIER = MS_LOOKUP[form.durationUnit];
|
|
const durationInMs = form.duration * MS_MULTIPLIER;
|
|
const end = start.add(durationInMs);
|
|
|
|
const repeat = REPEAT_LOOKUP[form.repeat];
|
|
|
|
const submit = {
|
|
monitors: form.monitors.map((monitor) => monitor._id),
|
|
name: form.name,
|
|
start: start.toISOString(),
|
|
end: end.toISOString(),
|
|
repeat,
|
|
};
|
|
|
|
if (repeat === 0) {
|
|
submit.expiry = end;
|
|
}
|
|
|
|
const requestConfig = { maintenanceWindow: submit };
|
|
|
|
if (maintenanceWindowId !== undefined) {
|
|
requestConfig.maintenanceWindowId = maintenanceWindowId;
|
|
}
|
|
const request =
|
|
maintenanceWindowId === undefined
|
|
? networkService.createMaintenanceWindow(requestConfig)
|
|
: networkService.editMaintenanceWindow(requestConfig);
|
|
return request;
|
|
};
|
|
|
|
return {
|
|
handleSubmitForm,
|
|
};
|
|
};
|
|
|
|
export default useMaintenanceActions;
|