Files
Checkmate/src/Components/MonitorStatusHeader/index.jsx
T

56 lines
1.5 KiB
React
Raw Normal View History

2025-01-28 15:42:46 -08:00
import { Stack, Typography } from "@mui/material";
import PulseDot from "../Animated/PulseDot";
import Dot from "../Dot";
import { useTheme } from "@emotion/react";
import useUtils from "../../Pages/Uptime/Monitors/Hooks/useUtils";
import { formatDurationRounded } from "../../Utils/timeUtils";
import ConfigButton from "./ConfigButton";
import SkeletonLayout from "./skeleton";
import PropTypes from "prop-types";
2025-01-31 10:06:57 -08:00
const MonitorStatusHeader = ({ path, shouldRender = true, isAdmin, monitor }) => {
2025-01-28 15:42:46 -08:00
const theme = useTheme();
const { statusColor, statusMsg, determineState } = useUtils();
if (!shouldRender) {
return <SkeletonLayout />;
}
return (
<Stack
direction="row"
justifyContent="space-between"
>
<Stack>
<Typography variant="h1">{monitor?.name}</Typography>
2025-01-28 15:42:46 -08:00
<Stack
direction="row"
alignItems={"center"}
gap={theme.spacing(2)}
>
<PulseDot color={statusColor[determineState(monitor)]} />
<Typography variant="h2">
{monitor?.url?.replace(/^https?:\/\//, "") || "..."}
</Typography>
<Dot />
<Typography>
Checking every {formatDurationRounded(monitor?.interval)}.
</Typography>
</Stack>
</Stack>
<ConfigButton
2025-01-31 10:06:57 -08:00
path={path}
2025-01-28 15:42:46 -08:00
shouldRender={isAdmin}
monitorId={monitor?._id}
2025-01-28 15:42:46 -08:00
/>
</Stack>
);
};
MonitorStatusHeader.propTypes = {
2025-01-31 10:06:57 -08:00
path: PropTypes.string.isRequired,
2025-01-28 15:42:46 -08:00
shouldRender: PropTypes.bool,
isAdmin: PropTypes.bool,
monitor: PropTypes.object,
};
export default MonitorStatusHeader;