import { useState } from 'react'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Legend } from 'recharts'; import { Metrics } from '../types'; interface MetricsChartProps { data: Metrics | null; metric: 'cpu' | 'memory'; loading?: boolean; } export function MetricsChart({ data, metric, loading }: MetricsChartProps) { const [visible, setVisible] = useState({ avg: true, max: true, min: true }); const chartData = data?.timestamps.map((ts, i) => ({ time: new Date(ts).toLocaleTimeString(), avg: data[metric].avg[i] ?? 0, max: data[metric].max[i] ?? 0, min: data[metric].min[i] ?? 0, })) || []; const colors = { avg: '#60a5fa', max: '#f87171', min: '#4ade80', }; const label = metric === 'cpu' ? 'CPU %' : 'Memory %'; if (loading) { return (
); } return (

{label}

{(['avg', 'max', 'min'] as const).map((key) => ( ))}
{visible.avg && ( )} {visible.max && ( )} {visible.min && ( )}
{chartData.length === 0 && (
No data available
)}
); }