Files
Checkmate/client/src/Components/common/controls/HeaderTimeRange.tsx
T

82 lines
2.1 KiB
TypeScript
Raw Normal View History

2026-01-25 15:56:15 +00:00
import Stack from "@mui/material/Stack";
2026-01-28 19:00:34 +00:00
import Box from "@mui/material/Box";
2026-01-25 15:56:15 +00:00
import Typography from "@mui/material/Typography";
2026-02-20 18:13:39 +00:00
import { ToggleButtonGroup, ToggleButton } from "@/Components/inputs";
2026-01-25 15:56:15 +00:00
import { useTheme } from "@mui/material/styles";
2026-01-28 17:59:11 +00:00
import CircularProgress from "@mui/material/CircularProgress";
2026-01-28 18:45:11 +00:00
import { useTranslation } from "react-i18next";
2026-01-28 19:00:34 +00:00
import { useMediaQuery } from "@mui/material";
2026-01-25 15:56:15 +00:00
interface MonitorTimeFrameHeaderProps {
isLoading?: boolean;
hasDateRange?: boolean;
dateRange: string;
setDateRange: (dateRange: string) => void;
}
export const HeaderTimeRange = ({
isLoading = false,
hasDateRange = true,
dateRange,
setDateRange,
}: MonitorTimeFrameHeaderProps) => {
const theme = useTheme();
2026-01-28 18:45:11 +00:00
const { t } = useTranslation();
2026-01-28 19:00:34 +00:00
const isSmallScreen = useMediaQuery(theme.breakpoints.down("md"));
2026-01-25 15:56:15 +00:00
const handleChange = (
_event: React.MouseEvent<HTMLElement>,
newValue: string | null
) => {
if (newValue !== null) {
setDateRange(newValue);
}
};
let timeFramePicker = null;
if (hasDateRange) {
timeFramePicker = (
<ToggleButtonGroup
2026-01-28 19:00:34 +00:00
orientation={isSmallScreen ? "vertical" : "horizontal"}
2026-01-25 15:56:15 +00:00
value={dateRange}
exclusive
onChange={handleChange}
size="small"
2026-01-28 19:00:34 +00:00
fullWidth={isSmallScreen}
2026-01-25 15:56:15 +00:00
>
2026-01-28 18:45:11 +00:00
<ToggleButton value="recent">
{t("components.headerTimeRange.labels.recent")}
2026-01-26 17:15:08 +00:00
</ToggleButton>
2026-01-28 18:45:11 +00:00
<ToggleButton value="day">
{t("components.headerTimeRange.labels.day")}
2026-01-26 17:15:08 +00:00
</ToggleButton>
2026-01-28 18:45:11 +00:00
<ToggleButton value="week">
{t("components.headerTimeRange.labels.week")}
2026-01-26 17:15:08 +00:00
</ToggleButton>
2026-01-28 18:45:11 +00:00
<ToggleButton value="month">
{t("components.headerTimeRange.labels.month")}
2026-01-26 17:15:08 +00:00
</ToggleButton>
2026-01-25 15:56:15 +00:00
</ToggleButtonGroup>
);
}
return (
<Stack
2026-01-28 19:06:21 +00:00
direction={{ xs: "column", md: "row" }}
2026-01-25 15:56:15 +00:00
justifyContent="flex-end"
alignItems="center"
gap={theme.spacing(4)}
>
2026-01-28 19:00:34 +00:00
<Box
width={16}
height={16}
>
{isLoading && <CircularProgress size={16} />}
</Box>
2026-01-25 15:56:15 +00:00
<Typography variant="body2">
2026-01-28 18:45:11 +00:00
{t(`components.headerTimeRange.description.${dateRange}`)}
2026-01-25 15:56:15 +00:00
</Typography>
{timeFramePicker}
</Stack>
);
};