diff --git a/Client/src/Pages/DistributedUptime/Details/Components/ControlsHeader/index.jsx b/Client/src/Pages/DistributedUptime/Details/Components/ControlsHeader/index.jsx
new file mode 100644
index 000000000..5531fc08e
--- /dev/null
+++ b/Client/src/Pages/DistributedUptime/Details/Components/ControlsHeader/index.jsx
@@ -0,0 +1,91 @@
+// Components
+import { Box, Stack, Typography, Button } from "@mui/material";
+import Image from "../../../../../Components/Image";
+import SettingsIcon from "../../../../../assets/icons/settings-bold.svg?react";
+
+//Utils
+import { useTheme } from "@mui/material/styles";
+import { useNavigate } from "react-router-dom";
+import { useLocation } from "react-router-dom";
+import PropTypes from "prop-types";
+
+const Controls = ({ isDeleteOpen, setIsDeleteOpen, isDeleting, monitorId }) => {
+ const theme = useTheme();
+ const navigate = useNavigate();
+
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+
+Controls.propTypes = {
+ isDeleting: PropTypes.bool,
+ monitorId: PropTypes.string,
+ isDeleteOpen: PropTypes.bool.isRequired,
+ setIsDeleteOpen: PropTypes.func.isRequired,
+};
+
+const ControlsHeader = ({ isDeleting, isDeleteOpen, setIsDeleteOpen, monitorId }) => {
+ const theme = useTheme();
+
+ return (
+
+
+
+ );
+};
+
+ControlsHeader.propTypes = {
+ monitorId: PropTypes.string,
+ isDeleting: PropTypes.bool,
+ isDeleteOpen: PropTypes.bool.isRequired,
+ setIsDeleteOpen: PropTypes.func.isRequired,
+};
+
+export default ControlsHeader;
diff --git a/Client/src/Pages/DistributedUptime/Details/Hooks/useDeleteMonitor.jsx b/Client/src/Pages/DistributedUptime/Details/Hooks/useDeleteMonitor.jsx
new file mode 100644
index 000000000..ece7c42e5
--- /dev/null
+++ b/Client/src/Pages/DistributedUptime/Details/Hooks/useDeleteMonitor.jsx
@@ -0,0 +1,27 @@
+import { useSelector } from "react-redux";
+import { useState } from "react";
+import { networkService } from "../../../../main";
+import { createToast } from "../../../../Utils/toastUtils";
+
+const useDeleteMonitor = ({ monitorId }) => {
+ const [isLoading, setIsLoading] = useState(false);
+ const { authToken } = useSelector((state) => state.auth);
+ const deleteMonitor = async () => {
+ try {
+ setIsLoading(true);
+ await networkService.deleteMonitorById({ authToken, monitorId });
+ return true;
+ } catch (error) {
+ createToast({
+ body: error.message,
+ });
+ return false;
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ return [deleteMonitor, isLoading];
+};
+
+export { useDeleteMonitor };
diff --git a/Client/src/Pages/DistributedUptime/Details/index.jsx b/Client/src/Pages/DistributedUptime/Details/index.jsx
index 9915e1811..dfda12198 100644
--- a/Client/src/Pages/DistributedUptime/Details/index.jsx
+++ b/Client/src/Pages/DistributedUptime/Details/index.jsx
@@ -12,23 +12,31 @@ import MonitorTimeFrameHeader from "../../../Components/MonitorTimeFrameHeader";
import GenericFallback from "../../../Components/GenericFallback";
import MonitorCreateHeader from "../../../Components/MonitorCreateHeader";
import SkeletonLayout from "./Components/Skeleton";
+import ControlsHeader from "./Components/ControlsHeader";
+import Dialog from "../../../Components/Dialog";
//Utils
import { useTheme } from "@mui/material/styles";
import { useState } from "react";
import { useParams } from "react-router-dom";
import { useIsAdmin } from "../../../Hooks/useIsAdmin";
import { useSubscribeToDetails } from "./Hooks/useSubscribeToDetails";
+import { useDeleteMonitor } from "./Hooks/useDeleteMonitor";
+import { useNavigate } from "react-router-dom";
const DistributedUptimeDetails = () => {
const { monitorId } = useParams();
// Local State
const [dateRange, setDateRange] = useState("day");
+ const [isDeleteOpen, setIsDeleteOpen] = useState(false);
// Utils
const theme = useTheme();
const isAdmin = useIsAdmin();
+ const navigate = useNavigate();
const [isLoading, networkError, connectionStatus, monitor, lastUpdateTrigger] =
useSubscribeToDetails({ monitorId, dateRange });
+
+ const [deleteMonitor, isDeleting] = useDeleteMonitor({ monitorId });
// Constants
const BREADCRUMBS = [
{ name: "Distributed Uptime", path: "/distributed-uptime" },
@@ -76,6 +84,12 @@ const DistributedUptimeDetails = () => {
isAdmin={isAdmin}
path={`/status/distributed/create/${monitorId}`}
/>
+
{
/>
+