import { useMemo } from "react" import { Area, AreaChart, CartesianGrid, YAxis } from "recharts" import { ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, xAxis, } from "@/components/ui/chart" import { chartMargin, cn, formatShortDate } from "@/lib/utils" import type { ChartData, SystemStatsRecord } from "@/types" import { useYAxisWidth } from "./hooks" export type DataPoint = { label: string dataKey: (data: SystemStatsRecord) => number | undefined color: number | string opacity: number } export default function AreaChartDefault({ chartData, max, maxToggled, tickFormatter, contentFormatter, dataPoints, domain, legend, itemSorter, }: // logRender = false, { chartData: ChartData max?: number maxToggled?: boolean tickFormatter: (value: number, index: number) => string contentFormatter: ({ value, payload }: { value: number; payload: SystemStatsRecord }) => string dataPoints?: DataPoint[] domain?: [number, number] legend?: boolean itemSorter?: (a: any, b: any) => number // logRender?: boolean }) { const { yAxisWidth, updateYAxisWidth } = useYAxisWidth() // biome-ignore lint/correctness/useExhaustiveDependencies: ignore return useMemo(() => { if (chartData.systemStats.length === 0) { return null } // if (logRender) { // console.log("Rendered at", new Date()) // } return (
updateYAxisWidth(tickFormatter(value, index))} tickLine={false} axisLine={false} /> {xAxis(chartData)} formatShortDate(data[0].payload.created)} contentFormatter={contentFormatter} /> } /> {dataPoints?.map((dataPoint) => { let { color } = dataPoint if (typeof color === "number") { color = `var(--chart-${color})` } return ( ) })} {legend && } />}
) }, [chartData.systemStats.at(-1), yAxisWidth, maxToggled]) }