Files
Checkmate/client/src/Components/MonitorDetailsControlHeader/status.jsx
T

54 lines
1.7 KiB
React
Raw Normal View History

// Components
import Stack from "@mui/material/Stack";
import PulseDot from "../../Components/Animated/PulseDot";
import Typography from "@mui/material/Typography";
import Dot from "../../Components/Dot";
// Utils
import { formatDurationRounded } from "../../Utils/timeUtils";
import PropTypes from "prop-types";
import { useTheme } from "@emotion/react";
2025-06-12 12:44:46 +08:00
import { useMonitorUtils } from "../../Hooks/useMonitorUtils";
import { formatMonitorUrl } from "../../Utils/utils";
2025-05-15 12:19:39 -07:00
/**
* Status component displays the status information of a monitor.
* It includes the monitor's name, URL, and check interval.
*
* @component
* @param {Object} props - Component props
* @param {Object} props.monitor - The monitor object containing details
* @param {string} props.monitor.name - The name of the monitor
* @param {string} props.monitor.url - The URL of the monitor
* @param {number} props.monitor.interval - The interval at which the monitor checks
* @returns {JSX.Element} The rendered component
*/
const Status = ({ monitor }) => {
const theme = useTheme();
2025-06-12 12:44:46 +08:00
const { statusColor, determineState } = useMonitorUtils();
2025-06-17 17:36:06 +05:30
const URL_TRUNCATION_LENGTH = 55;
2025-06-17 10:57:30 +05:30
return (
<Stack>
<Typography variant="monitorName">{monitor?.name}</Typography>
<Stack
direction="row"
alignItems={"center"}
gap={theme.spacing(4)}
>
<PulseDot color={statusColor[determineState(monitor)]} />
2025-06-17 17:36:06 +05:30
<Typography variant="monitorUrl">
{formatMonitorUrl(monitor?.url, URL_TRUNCATION_LENGTH)}
</Typography>
2025-06-17 10:57:30 +05:30
<Dot />
<Typography>
Checking every {formatDurationRounded(monitor?.interval)}.
</Typography>
</Stack>
</Stack>
);
};
Status.propTypes = {
monitor: PropTypes.object,
};
export default Status;