import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts' import { ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart' import { useYAxisWidth, chartTimeData, 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 (