From 2b425a27cf9172bfab336aea4c59c98d3246f532 Mon Sep 17 00:00:00 2001 From: Ananya Verma Date: Tue, 20 Aug 2024 17:44:26 +0530 Subject: [PATCH 1/6] resolve merge conflict --- Client/src/App.jsx | 4 ++++ .../Pages/Monitors/CreateMonitor/index.jsx | 21 +++++++++++++++++-- .../src/Pages/Monitors/Home/actionsMenu.jsx | 8 +++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Client/src/App.jsx b/Client/src/App.jsx index 88e1e7019..6cda26892 100644 --- a/Client/src/App.jsx +++ b/Client/src/App.jsx @@ -59,6 +59,10 @@ function App() { path="/monitors/create" element={} /> + } + /> } diff --git a/Client/src/Pages/Monitors/CreateMonitor/index.jsx b/Client/src/Pages/Monitors/CreateMonitor/index.jsx index bc0f55ed3..779bcf99f 100644 --- a/Client/src/Pages/Monitors/CreateMonitor/index.jsx +++ b/Client/src/Pages/Monitors/CreateMonitor/index.jsx @@ -1,9 +1,9 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { Box, ButtonGroup, Stack, Typography } from "@mui/material"; import { useSelector, useDispatch } from "react-redux"; import { monitorValidation } from "../../../Validation/validation"; import { createUptimeMonitor } from "../../../Features/UptimeMonitors/uptimeMonitorsSlice"; -import { useNavigate } from "react-router-dom"; +import { useNavigate, useParams } from "react-router-dom"; import { useTheme } from "@emotion/react"; import { createToast } from "../../../Utils/toastUtils"; import { logger } from "../../../Utils/Logger"; @@ -19,6 +19,7 @@ import "./index.css"; const CreateMonitor = () => { const MS_PER_MINUTE = 60000; const { user, authToken } = useSelector((state) => state.auth); + const { monitors } = useSelector((state) => state.uptimeMonitors); const dispatch = useDispatch(); const navigate = useNavigate(); const theme = useTheme(); @@ -31,6 +32,7 @@ const CreateMonitor = () => { "notify-email-default": "notification-email", }; + const { monitorId } = useParams(); const [monitor, setMonitor] = useState({ url: "", name: "", @@ -41,6 +43,21 @@ const CreateMonitor = () => { const [https, setHttps] = useState(true); const [errors, setErrors] = useState({}); + useEffect(() => { + if(monitorId){ + const data = monitors.find((monitor) => monitor._id === monitorId); + if (!data) { + console.error("Error fetching monitor of id: " + monitorId); + navigate("/not-found"); + } + const {url, name, ...rest} = data; + rest.interval = rest.interval/60000; + setMonitor({ + ...rest, + }); + } + }, [monitorId, authToken, monitors]); + const handleChange = (event, name) => { const { value, id } = event.target; if (!name) name = idMap[id]; diff --git a/Client/src/Pages/Monitors/Home/actionsMenu.jsx b/Client/src/Pages/Monitors/Home/actionsMenu.jsx index 75274ba49..c4f1049a6 100644 --- a/Client/src/Pages/Monitors/Home/actionsMenu.jsx +++ b/Client/src/Pages/Monitors/Home/actionsMenu.jsx @@ -145,6 +145,14 @@ const ActionsMenu = ({ monitor, isAdmin }) => { Configure )} + { + e.stopPropagation(); + navigate(`/monitors/clone/${actions.id}`); + }} + > + Clone + {isAdmin && ( { From 20868135c1df33b8b735ae2296e4a11952b6a7ae Mon Sep 17 00:00:00 2001 From: Ananya Verma Date: Fri, 23 Aug 2024 00:28:21 +0530 Subject: [PATCH 2/6] remove pages/monitors/index.js --- Client/src/App.jsx | 6 +----- Client/src/Pages/Monitors/CreateMonitor/index.jsx | 8 +++++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/Client/src/App.jsx b/Client/src/App.jsx index 6cda26892..405371db2 100644 --- a/Client/src/App.jsx +++ b/Client/src/App.jsx @@ -56,11 +56,7 @@ function App() { element={} /> } - /> - } /> { const data = monitors.find((monitor) => monitor._id === monitorId); if (!data) { console.error("Error fetching monitor of id: " + monitorId); - navigate("/not-found"); + navigate("/not-found", {replace: true}); } - const {url, name, ...rest} = data; - rest.interval = rest.interval/60000; + const {name, ...rest} = data; //data.name is read-only + if(rest.type == 'http') rest.url = rest.url.substring(8, rest.url.length) + rest.name = `${name} (Clone)`; + rest.interval /= 60000; setMonitor({ ...rest, }); From 2446b81e79efeab0be52ae67a9f35ff948660488 Mon Sep 17 00:00:00 2001 From: Alexander Holliday Date: Sat, 24 Aug 2024 17:48:35 -0700 Subject: [PATCH 3/6] Use MS_PER_MINUTE --- Client/src/Pages/Monitors/CreateMonitor/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/src/Pages/Monitors/CreateMonitor/index.jsx b/Client/src/Pages/Monitors/CreateMonitor/index.jsx index c98c17e35..428248255 100644 --- a/Client/src/Pages/Monitors/CreateMonitor/index.jsx +++ b/Client/src/Pages/Monitors/CreateMonitor/index.jsx @@ -53,7 +53,7 @@ const CreateMonitor = () => { const {name, ...rest} = data; //data.name is read-only if(rest.type == 'http') rest.url = rest.url.substring(8, rest.url.length) rest.name = `${name} (Clone)`; - rest.interval /= 60000; + rest.interval /= MS_PER_MINUTE; setMonitor({ ...rest, }); From bc9e59315a8353399e39e7d67a3602490b77341c Mon Sep 17 00:00:00 2001 From: Ananya Verma Date: Tue, 27 Aug 2024 15:28:03 +0530 Subject: [PATCH 4/6] use URL instance to parse host from url --- Client/src/Pages/Monitors/CreateMonitor/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/src/Pages/Monitors/CreateMonitor/index.jsx b/Client/src/Pages/Monitors/CreateMonitor/index.jsx index 428248255..f77ca5478 100644 --- a/Client/src/Pages/Monitors/CreateMonitor/index.jsx +++ b/Client/src/Pages/Monitors/CreateMonitor/index.jsx @@ -51,7 +51,7 @@ const CreateMonitor = () => { navigate("/not-found", {replace: true}); } const {name, ...rest} = data; //data.name is read-only - if(rest.type == 'http') rest.url = rest.url.substring(8, rest.url.length) + if(rest.type === 'http') rest.url = URL.parse(rest.url)?.host; rest.name = `${name} (Clone)`; rest.interval /= MS_PER_MINUTE; setMonitor({ From 89b042fc3d9c675d52eddade1039687d51b1fc26 Mon Sep 17 00:00:00 2001 From: Ananya Verma Date: Sat, 31 Aug 2024 01:26:30 +0530 Subject: [PATCH 5/6] replace url.parse() with new URL() --- Client/src/Pages/Monitors/CreateMonitor/index.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Client/src/Pages/Monitors/CreateMonitor/index.jsx b/Client/src/Pages/Monitors/CreateMonitor/index.jsx index f77ca5478..e2944b659 100644 --- a/Client/src/Pages/Monitors/CreateMonitor/index.jsx +++ b/Client/src/Pages/Monitors/CreateMonitor/index.jsx @@ -51,7 +51,10 @@ const CreateMonitor = () => { navigate("/not-found", {replace: true}); } const {name, ...rest} = data; //data.name is read-only - if(rest.type === 'http') rest.url = URL.parse(rest.url)?.host; + if(rest.type === 'http'){ + const url = new URL(rest.url) + rest.url = url.host + } rest.name = `${name} (Clone)`; rest.interval /= MS_PER_MINUTE; setMonitor({ From f85c2d001a8030cdea8b399965fdc22f87eb60aa Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Fri, 6 Sep 2024 10:09:13 -0700 Subject: [PATCH 6/6] Resolve conflicts, update create monitor --- .../Pages/Monitors/CreateMonitor/index.jsx | 43 ++++++++++++------- .../src/Pages/Monitors/Home/actionsMenu.jsx | 2 +- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/Client/src/Pages/Monitors/CreateMonitor/index.jsx b/Client/src/Pages/Monitors/CreateMonitor/index.jsx index 408c5788d..36a63f0e6 100644 --- a/Client/src/Pages/Monitors/CreateMonitor/index.jsx +++ b/Client/src/Pages/Monitors/CreateMonitor/index.jsx @@ -13,6 +13,7 @@ import Field from "../../../Components/Inputs/Field"; import Select from "../../../Components/Inputs/Select"; import Checkbox from "../../../Components/Inputs/Checkbox"; import Breadcrumbs from "../../../Components/Breadcrumbs"; +import { getUptimeMonitorById } from "../../../Features/UptimeMonitors/uptimeMonitorsSlice"; import "./index.css"; const CreateMonitor = () => { @@ -43,23 +44,33 @@ const CreateMonitor = () => { const [errors, setErrors] = useState({}); useEffect(() => { - if (monitorId) { - const data = monitors.find((monitor) => monitor._id === monitorId); - if (!data) { - console.error("Error fetching monitor of id: " + monitorId); - navigate("/not-found", { replace: true }); + const fetchMonitor = async () => { + if (monitorId) { + const action = await dispatch( + getUptimeMonitorById({ authToken, monitorId }) + ); + + if (action.payload.success) { + const data = action.payload.data; + const { name, ...rest } = data; //data.name is read-only + if (rest.type === "http") { + const url = new URL(rest.url); + rest.url = url.host; + } + rest.name = `${name} (Clone)`; + rest.interval /= MS_PER_MINUTE; + setMonitor({ + ...rest, + }); + } else { + navigate("/not-found", { replace: true }); + createToast({ + body: "There was an error cloning the monitor.", + }); + } } - const { name, ...rest } = data; //data.name is read-only - if (rest.type === "http") { - const url = new URL(rest.url); - rest.url = url.host; - } - rest.name = `${name} (Clone)`; - rest.interval /= MS_PER_MINUTE; - setMonitor({ - ...rest, - }); - } + }; + fetchMonitor(); }, [monitorId, authToken, monitors]); const handleChange = (event, name) => { diff --git a/Client/src/Pages/Monitors/Home/actionsMenu.jsx b/Client/src/Pages/Monitors/Home/actionsMenu.jsx index 5a25dfc90..7f2eb0d97 100644 --- a/Client/src/Pages/Monitors/Home/actionsMenu.jsx +++ b/Client/src/Pages/Monitors/Home/actionsMenu.jsx @@ -140,7 +140,7 @@ const ActionsMenu = ({ monitor, isAdmin, updateCallback }) => { { e.stopPropagation(); - navigate(`/monitors/clone/${actions.id}`); + navigate(`/monitors/create/${actions.id}`); }} > Clone