import { Task } from '@/lib/types'; import { formatDistanceToNow } from 'date-fns'; import { fr } from 'date-fns/locale'; interface TaskCardProps { task: Task; } export function TaskCard({ task }: TaskCardProps) { // Extraire les emojis du titre pour les afficher comme tags visuels const emojiRegex = /[\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]/gu; const emojis = task.title.match(emojiRegex) || []; const titleWithoutEmojis = task.title.replace(emojiRegex, '').trim(); // Couleur de priorité const priorityColors = { low: 'bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300', medium: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300', high: 'bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300', urgent: 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300' }; // Couleur de source const sourceColors = { reminders: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300', jira: 'bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300' }; return (
{/* En-tête avec emojis */} {emojis.length > 0 && (
{emojis.map((emoji, index) => ( {emoji} ))}
)} {/* Titre */}

{titleWithoutEmojis}

{/* Description si présente */} {task.description && (

{task.description}

)} {/* Tags */}
{/* Priorité */} {task.priority} {/* Source */} {task.source} {/* Tags personnalisés */} {task.tags && task.tags.length > 0 && ( task.tags.slice(0, 2).map((tag, index) => ( #{tag} )) )}
{/* Footer avec dates */}
{task.dueDate && ( 📅 {formatDistanceToNow(new Date(task.dueDate), { addSuffix: true, locale: fr })} )}
{task.completedAt ? ( ✅ {formatDistanceToNow(new Date(task.completedAt), { addSuffix: true, locale: fr })} ) : ( Créé {formatDistanceToNow(new Date(task.createdAt), { addSuffix: true, locale: fr })} )}
); }