'use client' import { ResponsiveLine } from '@nivo/line' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { nivoTheme, BRAND_DARK_BLUE } from './chart-theme' interface TimelineDataPoint { date: string daily: number cumulative: number } interface EvaluationTimelineProps { data: TimelineDataPoint[] } export function EvaluationTimelineChart({ data }: EvaluationTimelineProps) { const formattedData = data.map((d) => ({ ...d, dateFormatted: new Date(d.date).toLocaleDateString('en-US', { month: 'short', day: 'numeric', }), })) const totalEvaluations = data.length > 0 ? data[data.length - 1].cumulative : 0 const lineData = [ { id: 'Cumulative Evaluations', data: formattedData.map((d) => ({ x: d.dateFormatted, y: d.cumulative, })), }, ] return ( Evaluation Progress Over Time Total: {totalEvaluations} evaluations
{ const point = slice.points[0] const dataItem = formattedData.find( (d) => d.dateFormatted === point.data.xFormatted ) return (
{point.data.xFormatted}
Cumulative: {point.data.yFormatted}
{dataItem &&
Daily: {dataItem.daily}
}
) }} margin={{ top: 20, right: 20, bottom: 50, left: 60 }} axisBottom={{ tickRotation: -45, legend: '', legendOffset: 36, }} axisLeft={{ legend: 'Evaluations', legendOffset: -50, legendPosition: 'middle', }} yScale={{ type: 'linear', min: 0, max: 'auto' }} />
) }