import { Box, IconButton, Stack, Typography } from "@mui/material"; import { useState } from "react"; import { useTheme } from "@emotion/react"; import { useDispatch, useSelector } from "react-redux"; import { useNavigate } from "react-router"; import CloseRoundedIcon from "@mui/icons-material/CloseRounded"; import Field from "../../../Components/Inputs/Field"; import Select from "../../../Components/Inputs/Select"; import Button from "../../../Components/Button"; import Checkbox from "../../../Components/Inputs/Checkbox"; import { monitorValidation } from "../../../Validation/validation"; import { createToast } from "../../../Utils/toastUtils"; import { createPageSpeed } from "../../../Features/PageSpeedMonitor/pageSpeedMonitorSlice"; import "./index.css"; const CreatePageSpeed = () => { const theme = useTheme(); const navigate = useNavigate(); const dispatch = useDispatch(); const MS_PER_MINUTE = 60000; const { user, authToken } = useSelector((state) => state.auth); const frequencies = [ { _id: 1, name: "1 minute" }, { _id: 2, name: "2 minutes" }, { _id: 3, name: "3 minutes" }, { _id: 4, name: "4 minutes" }, { _id: 5, name: "5 minutes" }, ]; const [form, setForm] = useState({ name: "", url: "", interval: 1, }); const [errors, setErrors] = useState({}); const handleChange = (event, id) => { const { value } = event.target; setForm((prev) => ({ ...prev, [id]: value })); const { error } = monitorValidation.validate( { [id]: value }, { abortEarly: false } ); setErrors((prev) => { const newErrors = { ...prev }; if (error) newErrors[id] = error.details[0].message; else delete newErrors[id]; return newErrors; }); }; const handleCreate = async (event) => { event.preventDefault(); let monitor = { url: "http://" + form.url, name: form.name === "" ? form.url : form.name, }; const { error } = monitorValidation.validate(form, { abortEarly: false }); if (error) { const newErrors = {}; error.details.forEach((err) => { newErrors[err.path[0]] = err.message; }); setErrors(newErrors); createToast({ body: "Error validating data." }); } else { monitor = { ...monitor, description: monitor.name, userId: user._id, interval: form.interval * MS_PER_MINUTE, type: "pagespeed", }; try { const action = await dispatch(createPageSpeed({ authToken, monitor })); if (action.meta.requestStatus === "fulfilled") { navigate("/page-speed"); } } catch (error) { createToast({ body: error.details && error.details.length > 0 ? error.details[0].message : "Unknown error.", }); } } }; return (
navigate("/page-speed")} sx={{ p: "5px", opacity: 0.6, "&:focus": { outline: "none" }, }} > Create a page speed monitor handleChange(event, "name")} error={errors.name} /> handleChange(event, "url")} error={errors.url} />