diff --git a/Client/src/Components/StatusBoxes/index.jsx b/Client/src/Components/StatusBoxes/index.jsx
new file mode 100644
index 000000000..6e09d0cba
--- /dev/null
+++ b/Client/src/Components/StatusBoxes/index.jsx
@@ -0,0 +1,28 @@
+// Components
+import { Stack } from "@mui/material";
+import SkeletonLayout from "./skeleton";
+// Utils
+import { useTheme } from "@mui/material/styles";
+import PropTypes from "prop-types";
+const StatusBoxes = ({ shouldRender, children }) => {
+ const theme = useTheme();
+ if (!shouldRender) {
+ return ;
+ }
+
+ return (
+
+ {children}
+
+ );
+};
+
+StatusBoxes.propTypes = {
+ shouldRender: PropTypes.bool,
+ children: PropTypes.node,
+};
+
+export default StatusBoxes;
diff --git a/Client/src/Components/StatusBoxes/skeleton.jsx b/Client/src/Components/StatusBoxes/skeleton.jsx
new file mode 100644
index 000000000..b0f04ff3f
--- /dev/null
+++ b/Client/src/Components/StatusBoxes/skeleton.jsx
@@ -0,0 +1,31 @@
+import { Stack, Skeleton } from "@mui/material";
+import { useTheme } from "@emotion/react";
+import PropTypes from "prop-types";
+const SkeletonLayout = ({ numBoxes }) => {
+ const theme = useTheme();
+ return (
+
+ {Array.from({ length: numBoxes }).map((_, index) => {
+ const width = `${100 / numBoxes}%`;
+ return (
+
+ );
+ })}
+
+ );
+};
+
+SkeletonLayout.propTypes = {
+ numBoxes: PropTypes.number,
+};
+
+export default SkeletonLayout;
diff --git a/Client/src/Pages/Uptime/Details/Components/ChartBoxes/index.jsx b/Client/src/Pages/Uptime/Details/Components/ChartBoxes/index.jsx
index d9e581267..5565529fb 100644
--- a/Client/src/Pages/Uptime/Details/Components/ChartBoxes/index.jsx
+++ b/Client/src/Pages/Uptime/Details/Components/ChartBoxes/index.jsx
@@ -1,6 +1,6 @@
// Components
import { Stack, Typography, Box } from "@mui/material";
-import ChartBox from "../Charts/ChartBox";
+import ChartBox from "../../../../../Components/Charts/ChartBox";
import UptimeIcon from "../../../../../assets/icons/uptime-icon.svg?react";
import IncidentsIcon from "../../../../../assets/icons/incidents.svg?react";
import AverageResponseIcon from "../../../../../assets/icons/average-response-icon.svg?react";
@@ -40,7 +40,10 @@ const ChartBoxes = ({
icon={}
header="Uptime"
>
-
+
Total Checks
@@ -129,6 +132,7 @@ const ChartBoxes = ({
export default ChartBoxes;
ChartBoxes.propTypes = {
+ shouldRender: PropTypes.bool,
monitor: PropTypes.object.isRequired,
dateRange: PropTypes.string.isRequired,
uiTimezone: PropTypes.string.isRequired,
diff --git a/Client/src/Pages/Uptime/Details/Components/Charts/ChartBox.jsx b/Client/src/Pages/Uptime/Details/Components/Charts/ChartBox.jsx
deleted file mode 100644
index 3d4d73421..000000000
--- a/Client/src/Pages/Uptime/Details/Components/Charts/ChartBox.jsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import { Stack, Typography } from "@mui/material";
-import { useTheme } from "@emotion/react";
-import IconBox from "../../../../../Components/IconBox";
-import PropTypes from "prop-types";
-const ChartBox = ({ children, icon, header, height = "300px" }) => {
- const theme = useTheme();
- return (
- span": {
- color: theme.palette.primary.contrastText,
- fontSize: 20,
- "& span": {
- opacity: 0.8,
- marginLeft: 2,
- fontSize: 15,
- },
- },
- "& .MuiStack-root": {
- flexDirection: "row",
- gap: theme.spacing(6),
- },
- "& .MuiStack-root:first-of-type": {
- alignItems: "center",
- },
- "& tspan, & text": {
- fill: theme.palette.primary.contrastTextTertiary,
- },
- "& path": {
- transition: "fill 300ms ease, stroke-width 400ms ease",
- },
- }}
- >
-
- {icon}
- {header}
-
-
- {children}
-
- );
-};
-
-export default ChartBox;
-
-ChartBox.propTypes = {
- children: PropTypes.node,
- icon: PropTypes.node.isRequired,
- header: PropTypes.string.isRequired,
- height: PropTypes.string,
-};
diff --git a/Client/src/Pages/Uptime/Details/Components/Charts/ResponseTimeChart.jsx b/Client/src/Pages/Uptime/Details/Components/Charts/ResponseTimeChart.jsx
index 79e9473ef..8be1125c2 100644
--- a/Client/src/Pages/Uptime/Details/Components/Charts/ResponseTimeChart.jsx
+++ b/Client/src/Pages/Uptime/Details/Components/Charts/ResponseTimeChart.jsx
@@ -1,4 +1,4 @@
-import ChartBox from "./ChartBox";
+import ChartBox from "../../../../../Components/Charts/ChartBox";
import MonitorDetailsAreaChart from "../../../../../Components/Charts/MonitorDetailsAreaChart";
import ResponseTimeIcon from "../../../../../assets/icons/response-time-icon.svg?react";
import SkeletonLayout from "./ResponseTimeChartSkeleton";
diff --git a/Client/src/Pages/Uptime/Details/Components/ConfigButton/index.jsx b/Client/src/Pages/Uptime/Details/Components/ConfigButton/index.jsx
deleted file mode 100644
index 467655abf..000000000
--- a/Client/src/Pages/Uptime/Details/Components/ConfigButton/index.jsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import { Button, Box } from "@mui/material";
-import { useTheme } from "@emotion/react";
-import { useNavigate } from "react-router-dom";
-import SettingsIcon from "../../../../../assets/icons/settings-bold.svg?react";
-import PropTypes from "prop-types";
-const ConfigButton = ({ shouldRender, monitorId }) => {
- const theme = useTheme();
- const navigate = useNavigate();
-
- if (!shouldRender) return null;
-
- return (
-
-
-
- );
-};
-
-ConfigButton.propTypes = {
- shouldRender: PropTypes.bool,
- monitorId: PropTypes.string,
-};
-
-export default ConfigButton;
diff --git a/Client/src/Pages/Uptime/Details/Components/MonitorHeader/index.jsx b/Client/src/Pages/Uptime/Details/Components/MonitorHeader/index.jsx
deleted file mode 100644
index 53d4c4dfa..000000000
--- a/Client/src/Pages/Uptime/Details/Components/MonitorHeader/index.jsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import { Stack, Typography } from "@mui/material";
-import PulseDot from "../../../../../Components/Animated/PulseDot";
-import Dot from "../../../../../Components/Dot";
-import { useTheme } from "@emotion/react";
-import useUtils from "../../../Monitors/Hooks/useUtils";
-import { formatDurationRounded } from "../../../../../Utils/timeUtils";
-import ConfigButton from "../ConfigButton";
-import SkeletonLayout from "./skeleton";
-import PropTypes from "prop-types";
-
-const MonitorHeader = ({ shouldRender = true, isAdmin, monitor }) => {
- const theme = useTheme();
- const { statusColor, statusMsg, determineState } = useUtils();
- console.log(shouldRender);
- if (!shouldRender) {
- return ;
- }
-
- return (
-
-
- {monitor.name}
-
-
-
- {monitor?.url?.replace(/^https?:\/\//, "") || "..."}
-
-
-
- Checking every {formatDurationRounded(monitor?.interval)}.
-
-
-
-
-
- );
-};
-
-MonitorHeader.propTypes = {
- shouldRender: PropTypes.bool,
- isAdmin: PropTypes.bool,
- monitor: PropTypes.object,
-};
-
-export default MonitorHeader;
diff --git a/Client/src/Pages/Uptime/Details/Components/MonitorHeader/skeleton.jsx b/Client/src/Pages/Uptime/Details/Components/MonitorHeader/skeleton.jsx
deleted file mode 100644
index 64dc0547f..000000000
--- a/Client/src/Pages/Uptime/Details/Components/MonitorHeader/skeleton.jsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Stack, Skeleton } from "@mui/material";
-
-const SkeletonLayout = () => {
- return (
-
-
-
-
- );
-};
-
-export default SkeletonLayout;
diff --git a/Client/src/Pages/Uptime/Details/Components/ResponseTable/index.jsx b/Client/src/Pages/Uptime/Details/Components/ResponseTable/index.jsx
index 56ea8eca7..1f5a19203 100644
--- a/Client/src/Pages/Uptime/Details/Components/ResponseTable/index.jsx
+++ b/Client/src/Pages/Uptime/Details/Components/ResponseTable/index.jsx
@@ -1,4 +1,4 @@
-import ChartBox from "../Charts/ChartBox";
+import ChartBox from "../../../../../Components/Charts/ChartBox";
import PropTypes from "prop-types";
import HistoryIcon from "../../../../../assets/icons/history-icon.svg?react";
import Table from "../../../../../Components/Table";
diff --git a/Client/src/Pages/Uptime/Details/Components/StatusBoxes/skeleton.jsx b/Client/src/Pages/Uptime/Details/Components/StatusBoxes/skeleton.jsx
deleted file mode 100644
index 993b410c8..000000000
--- a/Client/src/Pages/Uptime/Details/Components/StatusBoxes/skeleton.jsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { Stack, Skeleton } from "@mui/material";
-import { useTheme } from "@emotion/react";
-const SkeletonLayout = () => {
- const theme = useTheme();
- return (
-
-
-
-
-
- );
-};
-
-export default SkeletonLayout;
diff --git a/Client/src/Pages/Uptime/Details/Components/StatusBoxes/index.jsx b/Client/src/Pages/Uptime/Details/Components/UptimeStatusBoxes/index.jsx
similarity index 73%
rename from Client/src/Pages/Uptime/Details/Components/StatusBoxes/index.jsx
rename to Client/src/Pages/Uptime/Details/Components/UptimeStatusBoxes/index.jsx
index 3f483889b..ad4620396 100644
--- a/Client/src/Pages/Uptime/Details/Components/StatusBoxes/index.jsx
+++ b/Client/src/Pages/Uptime/Details/Components/UptimeStatusBoxes/index.jsx
@@ -1,20 +1,13 @@
-// Components
-import { Stack, Typography } from "@mui/material";
+import StatusBoxes from "../../../../../Components/StatusBoxes";
import StatBox from "../../../../../Components/StatBox";
-import SkeletonLayout from "./skeleton";
-// Utils
-import { useTheme } from "@mui/material/styles";
-import useUtils from "../../../Monitors/Hooks/useUtils";
import { getHumanReadableDuration } from "../../../../../Utils/timeUtils";
-import PropTypes from "prop-types";
-const StatusBoxes = ({ shouldRender, monitor, certificateExpiry }) => {
- // Utils
+import { useTheme } from "@mui/material/styles";
+import { Typography } from "@mui/material";
+import useUtils from "../../../Monitors/Hooks/useUtils";
+
+const UptimeStatusBoxes = ({ shouldRender, monitor, certificateExpiry }) => {
const theme = useTheme();
const { determineState } = useUtils();
-
- if (!shouldRender) {
- return ;
- }
const { time: streakTime, units: streakUnits } = getHumanReadableDuration(
monitor?.uptimeStreak
);
@@ -22,12 +15,8 @@ const StatusBoxes = ({ shouldRender, monitor, certificateExpiry }) => {
const { time: lastCheckTime, units: lastCheckUnits } = getHumanReadableDuration(
monitor?.timeSinceLastCheck
);
-
return (
-
+
{
}
/>
-
+
);
};
-StatusBoxes.propTypes = {
- shouldRender: PropTypes.bool,
- monitor: PropTypes.object,
- certificateExpiry: PropTypes.string,
-};
-
-export default StatusBoxes;
+export default UptimeStatusBoxes;
diff --git a/Client/src/Pages/Uptime/Details/index.jsx b/Client/src/Pages/Uptime/Details/index.jsx
index 81265eb56..33583b0cb 100644
--- a/Client/src/Pages/Uptime/Details/index.jsx
+++ b/Client/src/Pages/Uptime/Details/index.jsx
@@ -1,11 +1,11 @@
// Components
import Breadcrumbs from "../../../Components/Breadcrumbs";
-import MonitorHeader from "./Components/MonitorHeader";
-import StatusBoxes from "./Components/StatusBoxes";
+import MonitorStatusHeader from "../../../Components/MonitorStatusHeader";
import TimeFramePicker from "./Components/TimeFramePicker";
import ChartBoxes from "./Components/ChartBoxes";
import ResponseTimeChart from "./Components/Charts/ResponseTimeChart";
import ResponseTable from "./Components/ResponseTable";
+import UptimeStatusBoxes from "./Components/UptimeStatusBoxes";
// MUI Components
import { Stack } from "@mui/material";
@@ -80,12 +80,12 @@ const UptimeDetails = () => {
return (
-
-