import PropTypes from "prop-types"; import { useTheme } from "@mui/material"; import { BaseLabel } from "../Label"; /** * @component * @param {Object} props * @param {number} props.status - The http status for the label * @param {Styles} props.customStyles - CSS Styles passed from parent component * @returns {JSX.Element} * @example * // Render a http status label * */ const DEFAULT_CODE = 9999; // Default code for unknown status const handleStatusCode = (status) => { if (status >= 100 && status < 600) { return status; } return DEFAULT_CODE; }; const getRoundedStatusCode = (status) => { return Math.floor(status / 100) * 100; }; const HttpStatusLabel = ({ status, customStyles }) => { const theme = useTheme(); const colors = { 400: { dotColor: theme.palette.warning.main, bgColor: theme.palette.warning.dark, borderColor: theme.palette.warning.light, }, 500: { dotColor: theme.palette.error.main, bgColor: theme.palette.error.dark, borderColor: theme.palette.error.light, }, default: { dotColor: theme.palette.unresolved.main, bgColor: theme.palette.unresolved.bg, borderColor: theme.palette.unresolved.light, }, }; const statusCode = handleStatusCode(status); const { borderColor, bgColor, dotColor } = colors[getRoundedStatusCode(statusCode)] || colors.default; return ( ); }; HttpStatusLabel.propTypes = { status: PropTypes.number, customStyles: PropTypes.object, }; export { HttpStatusLabel };