//Components import DistributedUptimeMap from "../../DistributedUptime/Details/Components/DistributedUptimeMap"; import Breadcrumbs from "../../../Components/Breadcrumbs"; import { Stack, Typography } from "@mui/material"; import DeviceTicker from "../../DistributedUptime/Details/Components/DeviceTicker"; import DistributedUptimeResponseChart from "../../DistributedUptime/Details/Components/DistributedUptimeResponseChart"; import NextExpectedCheck from "../../DistributedUptime/Details/Components/NextExpectedCheck"; import Footer from "../../DistributedUptime/Details/Components/Footer"; import StatBoxes from "../../DistributedUptime/Details/Components/StatBoxes"; import ControlsHeader from "../../StatusPage/Status/Components/ControlsHeader"; import MonitorTimeFrameHeader from "../../../Components/MonitorTimeFrameHeader"; import GenericFallback from "../../../Components/GenericFallback"; import Dialog from "../../../Components/Dialog"; import SkeletonLayout from "./Components/Skeleton"; import UptLogo from "../../../assets/icons/upt_logo.png"; import PeopleAltOutlinedIcon from "@mui/icons-material/PeopleAltOutlined"; import InfoBox from "../../../Components/InfoBox"; import StatusHeader from "../../DistributedUptime/Details/Components/StatusHeader"; import MonitorsList from "./Components/MonitorsList"; import { RowContainer } from "../../../Components/StandardContainer"; //Utils import { useTheme } from "@mui/material/styles"; import { useState, useEffect, useRef } from "react"; import { useParams } from "react-router-dom"; import { useSubscribeToDetails } from "../../DistributedUptime/Details/Hooks/useSubscribeToDetails"; import { useDUStatusPageFetchByUrl } from "./Hooks/useDUStatusPageFetchByUrl"; import { useStatusPageDelete } from "../../StatusPage/Status/Hooks/useStatusPageDelete"; import TimeFrameHeader from "./Components/TimeframeHeader"; import SubHeader from "../../../Components/Subheader"; import { safelyParseFloat } from "../../../Utils/utils"; import { useNavigate, useLocation } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { useSelector, useDispatch } from "react-redux"; import { setMode } from "../../../Features/UI/uiSlice"; // Responsive import { useMediaQuery } from "@mui/material"; const DistributedUptimeStatus = () => { const { url } = useParams(); const location = useLocation(); const { t } = useTranslation(); const isPublic = location.pathname.startsWith("/status/distributed/public"); const elementToCapture = useRef(null); // Redux state const mode = useSelector((state) => state.ui.mode); const originalModeRef = useRef(null); // Local State const [dateRange, setDateRange] = useState("recent"); const [isDeleteOpen, setIsDeleteOpen] = useState(false); const [timeFrame, setTimeFrame] = useState(30); // Utils const theme = useTheme(); const isSmallScreen = useMediaQuery(theme.breakpoints.down("sm")); const navigate = useNavigate(); const dispatch = useDispatch(); const [ statusPageIsLoading, statusPageNetworkError, statusPage, monitorId, isPublished, ] = useDUStatusPageFetchByUrl({ url, timeFrame, }); const [isLoading, networkError, connectionStatus, monitor, lastUpdateTrigger] = useSubscribeToDetails({ monitorId, dateRange, isPublic, isPublished }); const [deleteStatusPage, isDeleting] = useStatusPageDelete(() => { navigate("/distributed-uptime"); }, url); // Constants const BREADCRUMBS = [ { name: "Distributed Uptime", path: "/distributed-uptime" }, { name: "details", path: `/distributed-uptime/${monitorId}` }, { name: "status", path: `` }, ]; let sx = {}; if (isPublic) { sx = { paddingTop: "10vh", paddingRight: "10vw", paddingBottom: "10vh", paddingLeft: "10vw", }; } // Default to dark mode useEffect(() => { const cleanup = () => { if (originalModeRef.current === null) { originalModeRef.current = mode; } if (isPublic) { dispatch(setMode(originalModeRef.current)); } }; if (isPublic) { dispatch(setMode("dark")); } window.addEventListener("beforeunload", cleanup); return () => { window.removeEventListener("beforeunload", cleanup); }; }, [dispatch, isPublic]); // Done loading, a status page doesn't exist if (!statusPageIsLoading && typeof statusPage === "undefined") { return ( {t("distributedUptimeStatusPageNotSetUp")} {t("distributedUptimeStatusContactAdmin")} ); } // Done loading, a status page exists but is not public if (!statusPageIsLoading && isPublic && statusPage.isPublished === false) { return ( {t("distributedUptimeStatusPageNotPublic")} ); } if (isLoading || statusPageIsLoading) { return ; } if (networkError || statusPageNetworkError) { return ( {t("networkError")} {t("checkConnection")} ); } if ( typeof statusPage === "undefined" || typeof monitor === "undefined" || monitor.totalChecks === 0 ) { return ( {t("distributedUptimeDetailsNoMonitorHistory")} ); } return ( {!isPublic && } {t("distributedRightCategoryTitle")} {statusPage.companyName} 0} direction={{ s: "column", md: "row" }} headerText={t("distributedStatusServerMonitors")} subHeaderText={t("distributedStatusServerMonitorsDescription")} gap={isSmallScreen ? theme.spacing(10) : 0} alignItems={{ s: "flex-start", md: "flex-end" }} >