'use client'; import { DeadlineTask } from '@/services/analytics/deadline-analytics'; import { Card } from '@/components/ui/Card'; import { TaskCard } from '@/components/ui/TaskCard'; import { useTasksContext } from '@/contexts/TasksContext'; interface CriticalDeadlinesCardProps { overdue: DeadlineTask[]; critical: DeadlineTask[]; warning: DeadlineTask[]; disableHover?: boolean; } export function CriticalDeadlinesCard({ overdue, critical, warning, disableHover = false, }: CriticalDeadlinesCardProps) { const { tags: availableTags } = useTasksContext(); // Combiner toutes les tâches urgentes et trier par urgence const urgentTasks = [...overdue, ...critical, ...warning].sort((a, b) => { // En retard d'abord, puis critique, puis attention const urgencyOrder: Record = { overdue: 0, critical: 1, warning: 2, }; if (urgencyOrder[a.urgencyLevel] !== urgencyOrder[b.urgencyLevel]) { return urgencyOrder[a.urgencyLevel] - urgencyOrder[b.urgencyLevel]; } // Si même urgence, trier par jours restants return a.daysRemaining - b.daysRemaining; }); const getUrgencyStyle = (task: DeadlineTask) => { if (task.urgencyLevel === 'overdue') { return { icon: '🔴', text: task.daysRemaining === -1 ? 'En retard de 1 jour' : `En retard de ${Math.abs(task.daysRemaining)} jours`, style: 'border-[var(--destructive)]/60', }; } else if (task.urgencyLevel === 'critical') { return { icon: '🟠', text: task.daysRemaining === 0 ? "Échéance aujourd'hui" : task.daysRemaining === 1 ? 'Échéance demain' : `Dans ${task.daysRemaining} jours`, style: 'border-[var(--accent)]/60', }; } else { return { icon: '🟡', text: `Dans ${task.daysRemaining} jours`, style: 'border-[var(--yellow)]/60', }; } }; if (urgentTasks.length === 0) { return (

Tâches Urgentes

🎉

Excellent !

Aucune tâche urgente ou critique

); } return (

Tâches Urgentes

{urgentTasks.length} tâche{urgentTasks.length > 1 ? 's' : ''}
{urgentTasks.map((task) => { const urgencyStyle = getUrgencyStyle(task); const getCardClassName = (urgencyLevel: string) => { let baseClass = ''; if (urgencyLevel === 'overdue') { baseClass = 'border-[var(--destructive)]/60 shadow-[var(--destructive)]/20'; } else if (urgencyLevel === 'critical') { baseClass = 'border-[var(--accent)]/60 shadow-[var(--accent)]/20'; } else { baseClass = 'border-[var(--yellow)]/60 shadow-[var(--yellow)]/20'; } if (disableHover) { baseClass += ' hover:scale-100 hover:shadow-none hover:border-current hover:-translate-y-0'; } return baseClass; }; return ( ); })}
{urgentTasks.length > 0 && (
{overdue.length > 0 && ( {overdue.length} en retard )} {critical.length > 0 && ( {critical.length} critique{critical.length > 1 ? 's' : ''} )} {warning.length > 0 && ( {warning.length} attention )}
)}
); }