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 ( - -