import { Area, AreaChart, CartesianGrid, YAxis } from "recharts" import { ChartContainer, ChartTooltip, ChartTooltipContent, xAxis } from "@/components/ui/chart" import { useYAxisWidth, cn, formatShortDate, toFixedWithoutTrailingZeros, decimalString, chartMargin, } from "@/lib/utils" // import Spinner from '../spinner' import { ChartData } from "@/types" import { memo, useMemo } from "react" /** [label, key, color, opacity] */ type DataKeys = [string, string, number, number] const getNestedValue = (path: string, max = false, data: any): number | null => { // fallback value (obj?.stats?.cpum ? 0 : null) should only come into play when viewing // a max value which doesn't exist, or the value was zero and omitted from the stats object. // so we check if cpum is present. if so, return 0 to make sure the zero value is displayed. // if not, return null - there is no max data so do not display anything. return `stats.${path}${max ? "m" : ""}` .split(".") .reduce((acc: any, key: string) => acc?.[key] ?? (data.stats?.cpum ? 0 : null), data) } export default memo(function AreaChartDefault({ maxToggled = false, unit = " MB/s", chartName, chartData, }: { maxToggled?: boolean unit?: string chartName: string chartData: ChartData }) { const { yAxisWidth, updateYAxisWidth } = useYAxisWidth() const { chartTime } = chartData const showMax = chartTime !== "1h" && maxToggled const dataKeys: DataKeys[] = useMemo(() => { // [label, key, color, opacity] if (chartName === "CPU Usage") { return [[chartName, "cpu", 1, 0.4]] } else if (chartName === "dio") { return [ ["Write", "dw", 3, 0.3], ["Read", "dr", 1, 0.3], ] } else if (chartName === "bw") { return [ ["Sent", "ns", 5, 0.2], ["Received", "nr", 2, 0.2], ] } else if (chartName.startsWith("efs")) { return [ ["Write", `${chartName}.w`, 3, 0.3], ["Read", `${chartName}.r`, 1, 0.3], ] } return [] }, []) // console.log('Rendered at', new Date()) return (