import { BaseChart } from "./HistogramStatus"; import { BaseBox } from "../DesignElements"; import ResponseTimeIcon from "@/assets/icons/response-time-icon.svg?react"; import { normalizeResponseTimes } from "@/Utils/v2/DataUtils"; import { AreaChart, Area, XAxis, Tooltip, CartesianGrid, ResponsiveContainer, Text, } from "recharts"; import Typography from "@mui/material/Typography"; import { formatDateWithTz, tickDateFormatLookup, tooltipDateFormatLookup, } from "@/Utils/v2/TimeUtils"; import { useTheme } from "@mui/material/styles"; import type { GroupedCheck } from "@/Types/Check"; import { useSelector } from "react-redux"; type XTickProps = { x: number; y: number; payload: { value: any }; range: string; }; const XTick: React.FC = ({ x, y, payload, range }) => { const format = tickDateFormatLookup(range); const theme = useTheme(); const uiTimezone = useSelector((state: any) => state.ui.timezone); return ( {formatDateWithTz(payload?.value, format, uiTimezone)} ); }; type ResponseTimeToolTipProps = { active?: boolean | undefined; payload?: any[]; label?: string; range: string; theme: any; uiTimezone: string; }; const ResponseTimeToolTip: React.FC = ({ active, payload, label, range, theme, uiTimezone, }) => { if (!label) return null; if (!payload) return null; if (!active) return null; const format = tooltipDateFormatLookup(range); const responseTime = Math.floor(payload?.[0]?.payload?.avgResponseTime || 0); return ( {formatDateWithTz(label, format, uiTimezone)} Response time: {responseTime} ms ); }; export const ChartResponseTime = ({ checks, range, }: { checks: GroupedCheck[]; range: string; }) => { const theme = useTheme(); const uiTimezone = useSelector((state: any) => state.ui.timezone); const normalized = normalizeResponseTimes( checks, "avgResponseTime" ); return ( } title="Response times" > ( )} /> ( )} /> ); };