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}`} /> + { />