'use client'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Cell } from 'recharts'; import { SprintVelocity } from '@/lib/types'; interface VelocityChartProps { sprintHistory: SprintVelocity[]; className?: string; onSprintClick?: (sprint: SprintVelocity) => void; } export function VelocityChart({ sprintHistory, className, onSprintClick }: VelocityChartProps) { // Préparer les données pour le graphique const chartData = sprintHistory.map(sprint => ({ name: sprint.sprintName, completed: sprint.completedPoints, planned: sprint.plannedPoints, completionRate: sprint.completionRate, sprintData: sprint // Garder la référence au sprint original })); const handleBarClick = (data: unknown) => { if (onSprintClick && data && typeof data === 'object' && data !== null && 'sprintData' in data) { const typedData = data as { sprintData: SprintVelocity }; onSprintClick(typedData.sprintData); } }; const CustomTooltip = ({ active, payload, label }: { active?: boolean; payload?: Array<{ payload: { completed: number; planned: number; completionRate: number } }>; label?: string }) => { if (active && payload && payload.length) { const data = payload[0].payload; return (

{label}

Complétés: {data.completed} pts
Planifiés: {data.planned} pts
Taux de réussite: {data.completionRate}%
{onSprintClick && (

🖱️ Cliquez pour voir les détails

)}
); } return null; }; return (
} /> {chartData.map((entry, index) => ( = 80 ? 'hsl(142, 76%, 36%)' : entry.completionRate >= 60 ? 'hsl(45, 93%, 47%)' : 'hsl(0, 84%, 60%)'} style={{ cursor: onSprintClick ? 'pointer' : 'default' }} /> ))}
); }