From 4ef11daa51d4067da416a59ceecf187c0760a636 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Thu, 13 Feb 2025 14:49:50 -0800 Subject: [PATCH] Refactor out chart helpers --- .../Helpers/Tick.jsx | 31 +++++++ .../Helpers/ToolTip.jsx | 86 +++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 Client/src/Pages/DistributedUptime/Details/Components/DistributedUptimeResponseChart/Helpers/Tick.jsx create mode 100644 Client/src/Pages/DistributedUptime/Details/Components/DistributedUptimeResponseChart/Helpers/ToolTip.jsx diff --git a/Client/src/Pages/DistributedUptime/Details/Components/DistributedUptimeResponseChart/Helpers/Tick.jsx b/Client/src/Pages/DistributedUptime/Details/Components/DistributedUptimeResponseChart/Helpers/Tick.jsx new file mode 100644 index 000000000..15efd5dfa --- /dev/null +++ b/Client/src/Pages/DistributedUptime/Details/Components/DistributedUptimeResponseChart/Helpers/Tick.jsx @@ -0,0 +1,31 @@ +import { useTheme } from "@emotion/react"; +import { useSelector } from "react-redux"; +import { formatDateWithTz } from "../../../../../../Utils/timeUtils"; +import PropTypes from "prop-types"; +import { Text } from "recharts"; +const CustomTick = ({ x, y, payload, index }) => { + const theme = useTheme(); + + const uiTimezone = useSelector((state) => state.ui.timezone); + return ( + + {formatDateWithTz(payload?.value, "h:mm a", uiTimezone)} + + ); +}; + +CustomTick.propTypes = { + x: PropTypes.number, + y: PropTypes.number, + payload: PropTypes.object, + index: PropTypes.number, +}; + +export default CustomTick; diff --git a/Client/src/Pages/DistributedUptime/Details/Components/DistributedUptimeResponseChart/Helpers/ToolTip.jsx b/Client/src/Pages/DistributedUptime/Details/Components/DistributedUptimeResponseChart/Helpers/ToolTip.jsx new file mode 100644 index 000000000..db8cb3890 --- /dev/null +++ b/Client/src/Pages/DistributedUptime/Details/Components/DistributedUptimeResponseChart/Helpers/ToolTip.jsx @@ -0,0 +1,86 @@ +import { Box, Stack, Typography } from "@mui/material"; +import { useSelector } from "react-redux"; +import { formatDateWithTz } from "../../../../../../Utils/timeUtils"; +import PropTypes from "prop-types"; +import { useTheme } from "@emotion/react"; +import AccessTimeIcon from "@mui/icons-material/AccessTime"; +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 + + + + + ); + } + 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]), +}; +export default CustomToolTip;