From 71aa9946f5392ecac3a92f62bbf5ae09dd6703d9 Mon Sep 17 00:00:00 2001 From: Henry Dollman Date: Thu, 17 Oct 2024 16:05:20 -0400 Subject: [PATCH] use one x axis component for all charts --- .../site/src/components/charts/area-chart.tsx | 18 +++---------- .../src/components/charts/container-chart.tsx | 19 +++----------- .../site/src/components/charts/disk-chart.tsx | 20 +++----------- .../site/src/components/charts/mem-chart.tsx | 18 +++---------- .../site/src/components/charts/swap-chart.tsx | 18 +++---------- .../components/charts/temperature-chart.tsx | 17 +++--------- beszel/site/src/components/routes/system.tsx | 2 +- beszel/site/src/components/ui/chart.tsx | 26 ++++++++++++++++++- 8 files changed, 45 insertions(+), 93 deletions(-) diff --git a/beszel/site/src/components/charts/area-chart.tsx b/beszel/site/src/components/charts/area-chart.tsx index 5e78f5e..09bcb1c 100644 --- a/beszel/site/src/components/charts/area-chart.tsx +++ b/beszel/site/src/components/charts/area-chart.tsx @@ -1,9 +1,8 @@ -import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts' +import { Area, AreaChart, CartesianGrid, YAxis } from 'recharts' -import { ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart' +import { ChartContainer, ChartTooltip, ChartTooltipContent, xAxis } from '@/components/ui/chart' import { useYAxisWidth, - chartTimeData, cn, formatShortDate, toFixedWithoutTrailingZeros, @@ -88,18 +87,7 @@ export default memo(function AreaChartDefault({ tickLine={false} axisLine={false} /> - + {xAxis(chartData)} - + {xAxis(chartData)} - + {xAxis(chartData)} )} - + {xAxis(chartData)} updateYAxisWidth(value + ' GB')} /> - + {xAxis(chartData)} - + {xAxis(chartData)}
{} - {isIntersecting && {children}} + {isIntersecting && children}
) diff --git a/beszel/site/src/components/ui/chart.tsx b/beszel/site/src/components/ui/chart.tsx index 334458f..18ac377 100644 --- a/beszel/site/src/components/ui/chart.tsx +++ b/beszel/site/src/components/ui/chart.tsx @@ -1,7 +1,8 @@ import * as React from 'react' import * as RechartsPrimitive from 'recharts' -import { cn } from '@/lib/utils' +import { chartTimeData, cn } from '@/lib/utils' +import { ChartData } from '@/types' // Format: { THEME_NAME: CSS_SELECTOR } const THEMES = { light: '', dark: '.dark' } as const @@ -331,11 +332,34 @@ function getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: return configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config] } +let cachedAxis: JSX.Element +const xAxis = function ({ domain, ticks, chartTime }: ChartData) { + if (cachedAxis && domain[0] === cachedAxis.props.domain[0]) { + return cachedAxis + } + cachedAxis = ( + + ) + return cachedAxis +} + export { ChartContainer, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, + xAxis, // ChartStyle, }