'use client'; import { Card, CardHeader, CardContent } from '@/components/ui/Card'; import { Badge } from '@/components/ui/Badge'; import { SprintDetails } from '../SprintDetailModal'; import { formatDateForDisplay } from '@/lib/date-utils'; interface SprintOverviewProps { sprintDetails: SprintDetails; } export function SprintOverview({ sprintDetails }: SprintOverviewProps) { const { sprint, metrics, assigneeDistribution, statusDistribution } = sprintDetails; const getVelocityTrendIcon = (trend: string) => { switch (trend) { case 'up': return '📈'; case 'down': return '📉'; case 'stable': return '➡️'; default: return '📊'; } }; return (
{/* Informations générales */}

📋 Informations générales

Nom du sprint

{sprint.sprintName}

Vélocité

{sprint.velocity || sprint.completedPoints} points {getVelocityTrendIcon(metrics.velocityTrend)}

Période

{formatDateForDisplay(new Date(sprint.startDate))} - {formatDateForDisplay(new Date(sprint.endDate))}

Cycle time moyen

{metrics.averageCycleTime.toFixed(1)} jours

{/* Métriques clés */}

📊 Métriques clés

{metrics.totalIssues}
Total issues
{metrics.completedIssues}
Terminées
{metrics.inProgressIssues}
En cours
{metrics.blockedIssues}
Bloquées
{/* Répartition par assigné */}

👥 Répartition par assigné

{assigneeDistribution.map((assignee, index) => (
{assignee.assignee || 'Non assigné'} {assignee.count || assignee.totalIssues} issues
))}
{/* Répartition par statut */}

📈 Répartition par statut

{statusDistribution.map((status, index) => (
{status.status} {status.count} issues
))}
); }