'use client'; import { useState } from 'react'; import { useWeeklyMetrics, useVelocityTrends } from '@/hooks/use-metrics'; import { getToday } from '@/lib/date-utils'; import { Card, CardContent } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { MetricsOverview } from './charts/MetricsOverview'; import { MetricsMainCharts } from './charts/MetricsMainCharts'; import { MetricsDistributionCharts } from './charts/MetricsDistributionCharts'; import { MetricsVelocitySection } from './charts/MetricsVelocitySection'; import { MetricsProductivitySection } from './charts/MetricsProductivitySection'; import { format } from 'date-fns'; import { fr } from 'date-fns/locale'; interface MetricsTabProps { className?: string; } export function MetricsTab({ className }: MetricsTabProps) { const [selectedDate] = useState(getToday()); const [weeksBack, setWeeksBack] = useState(4); const { metrics, loading: metricsLoading, error: metricsError, refetch: refetchMetrics } = useWeeklyMetrics(selectedDate); const { trends, loading: trendsLoading, error: trendsError, refetch: refetchTrends } = useVelocityTrends(weeksBack); const handleRefresh = () => { refetchMetrics(); refetchTrends(); }; const formatPeriod = () => { if (!metrics) return ''; return `Semaine du ${format(metrics.period.start, 'dd MMM', { locale: fr })} au ${format(metrics.period.end, 'dd MMM yyyy', { locale: fr })}`; }; if (metricsError || trendsError) { return (

❌ Erreur lors du chargement des métriques

{metricsError || trendsError}

); } return (
{/* Header avec période et contrôles */}

📊 Métriques & Analytics

{formatPeriod()}

{metricsLoading ? (

Chargement des métriques...

) : metrics ? (
{/* Vue d'ensemble rapide */} {/* Graphiques principaux */} {/* Distribution et priorités */} {/* Tendances de vélocité */} {/* Analyses de productivité */}
) : null}
); }