import { Box, Stack, Typography } from "@mui/material"; import "./index.css"; import { useState } from "react"; import Button from "../../../Components/Button"; import Back from "../../../assets/icons/left-arrow-long.svg?react"; import Select from "../../../Components/Inputs/Select"; import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import dayjs from "dayjs"; import { DatePicker } from "@mui/x-date-pickers/DatePicker"; import { MobileTimePicker } from "@mui/x-date-pickers/MobileTimePicker"; import Field from "../../../Components/Inputs/Field"; import { maintenanceWindowValidation } from "../../../Validation/validation"; import { logger } from "../../../Utils/Logger"; import { createToast } from "../../../Utils/toastUtils"; const directory = { title: "Create a maintenance window", description: "Your pings won’t be sent in this time frame.", }; const repeatOptions = [ { _id: 1, name: "Don't repeat" }, { _id: 2, name: "Repeat daily" }, { _id: 3, name: "Repeat weekly" }, ]; const configOptionTitle = (title, description) => { return ( {title} {description && ( {description} )} ); }; const durationOptions = [ { _id: "minutes", name: "minutes" }, { _id: "hours", name: "hours" }, { _id: "days", name: "days" }, ]; const CreateNewMaintenanceWindow = () => { const [values, setValues] = useState({ repeat: 1, date: dayjs(), startTime: dayjs(), duration: "60", unit: "minutes", displayName: "", AddMonitors: "", }); const [errors, setErrors] = useState({}); const handleChange = (event, name) => { const { value } = event.target; setValues((prev) => ({ ...prev, [name]: value, })); }; const handleSubmit = async () => { const data = { repeat: values.repeat, date: values.date.format("YYYY-MM-DD"), startTime: values.startTime.format("HH:mm"), duration: values.duration, unit: values.unit, displayName: values.displayName, addMonitors: values.AddMonitors, }; const { error } = maintenanceWindowValidation.validate(data, { abortEarly: false, }); logger.log("error: ", error); if (!error || error.details.length === 0) { setErrors({}); } else { const newErrors = {}; error.details.forEach((err) => { newErrors[err.path[0]] = err.message; }); setErrors(newErrors); createToast({ body: error.details && error.details.length > 0 ? error.details[0].message : "Error validating data", }); logger.error("Validation errors:", error.details); } logger.log("Submitting data: ", data); }; const configOptions = [ { title: "Repeat", component: ( handleChange(e, "unit")} id="duration-unit" items={durationOptions} value={values.unit} /> ), }, { title: "Display name", component: ( handleChange(e, "displayName")} error={errors.displayName} /> ), }, { title: "Add monitors", component: ( handleChange(e, "AddMonitors")} error={errors.addMonitors} /> Add all monitors to this maintenance window ), }, ]; return (
); }; export default CreateNewMaintenanceWindow;