import PropTypes from "prop-types"; import { AreaChart, Area, XAxis, Tooltip, CartesianGrid, ResponsiveContainer, Text, } from "recharts"; import ChartBox from "../../../../../Components/Charts/ChartBox"; import ResponseTimeIcon from "../../../../../assets/icons/response-time-icon.svg?react"; import { Box, Stack, Typography } from "@mui/material"; import { useTheme } from "@emotion/react"; import { useState } from "react"; import { useSelector } from "react-redux"; import { formatDateWithTz } from "../../../../../Utils/timeUtils"; const CustomToolTip = ({ active, payload, label }) => { const uiTimezone = useSelector((state) => state.ui.timezone); const theme = useTheme(); if (active && payload && payload.length) { const responseTime = payload[0]?.payload?.originalAvgResponseTime ? payload[0]?.payload?.originalAvgResponseTime : (payload[0]?.payload?.avgResponseTime ?? 0); return ( {formatDateWithTz(label, "ddd, MMMM D, YYYY, h:mm A", uiTimezone)} Response time {Math.floor(responseTime)} {" "} ms {/* Display original value */} ); } return null; }; CustomToolTip.propTypes = { active: PropTypes.bool, payload: PropTypes.arrayOf( PropTypes.shape({ value: PropTypes.number, payload: PropTypes.shape({ _id: PropTypes.string, avgResponseTime: PropTypes.number, originalAvgResponseTime: PropTypes.number, }), }) ), label: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), }; const CustomTick = ({ x, y, payload, index }) => { const theme = useTheme(); const uiTimezone = useSelector((state) => state.ui.timezone); // Render nothing for the first tick if (index === 0) return null; return ( {formatDateWithTz(payload?.value, "h:mm a", uiTimezone)} ); }; CustomTick.propTypes = { x: PropTypes.number, y: PropTypes.number, payload: PropTypes.object, index: PropTypes.number, }; const DistributedUptimeResponseChart = ({ checks }) => { const theme = useTheme(); const [isHovered, setIsHovered] = useState(false); if (checks.length === 0) return null; return ( } header="Response Times" sx={{ padding: 0 }} > setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} > } minTickGap={0} axisLine={false} tickLine={false} height={20} /> } wrapperStyle={{ pointerEvents: "none" }} /> ); }; DistributedUptimeResponseChart.propTypes = { checks: PropTypes.array, }; export default DistributedUptimeResponseChart;