'use client'; import { useState, useEffect, useCallback } from 'react'; import { Card, CardHeader, CardContent } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { DailyCheckbox, DailyCheckboxType } from '@/lib/types'; import { dailyClient } from '@/clients/daily-client'; import { formatDateShort, getDaysAgo } from '@/lib/date-utils'; interface PendingTasksSectionProps { onToggleCheckbox: (checkboxId: string) => Promise; onDeleteCheckbox: (checkboxId: string) => Promise; refreshTrigger?: number; // Pour forcer le refresh depuis le parent } export function PendingTasksSection({ onToggleCheckbox, onDeleteCheckbox, refreshTrigger }: PendingTasksSectionProps) { const [isCollapsed, setIsCollapsed] = useState(true); const [pendingTasks, setPendingTasks] = useState([]); const [loading, setLoading] = useState(false); const [filters, setFilters] = useState({ maxDays: 7, type: 'all' as 'all' | DailyCheckboxType, limit: 50 }); // Charger les tâches en attente const loadPendingTasks = useCallback(async () => { setLoading(true); try { const tasks = await dailyClient.getPendingCheckboxes({ maxDays: filters.maxDays, excludeToday: true, type: filters.type === 'all' ? undefined : filters.type, limit: filters.limit }); setPendingTasks(tasks); } catch (error) { console.error('Erreur lors du chargement des tâches en attente:', error); } finally { setLoading(false); } }, [filters]); // Charger au montage et quand les filtres changent useEffect(() => { if (!isCollapsed) { loadPendingTasks(); } }, [isCollapsed, filters, refreshTrigger, loadPendingTasks]); // Gérer l'archivage d'une tâche const handleArchiveTask = async (checkboxId: string) => { try { await dailyClient.archiveCheckbox(checkboxId); await loadPendingTasks(); // Recharger la liste } catch (error) { console.error('Erreur lors de l\'archivage:', error); } }; // Gérer le cochage d'une tâche const handleToggleTask = async (checkboxId: string) => { await onToggleCheckbox(checkboxId); await loadPendingTasks(); // Recharger la liste }; // Gérer la suppression d'une tâche const handleDeleteTask = async (checkboxId: string) => { await onDeleteCheckbox(checkboxId); await loadPendingTasks(); // Recharger la liste }; // Obtenir la couleur selon l'ancienneté const getAgeColor = (date: Date) => { const days = getDaysAgo(date); if (days <= 1) return 'text-green-600'; if (days <= 3) return 'text-yellow-600'; if (days <= 7) return 'text-orange-600'; return 'text-red-600'; }; // Obtenir l'icône selon le type const getTypeIcon = (type: DailyCheckboxType) => { return type === 'meeting' ? '🤝' : '📋'; }; const pendingCount = pendingTasks.length; return (
{!isCollapsed && (
{/* Filtres rapides */}
)}
{!isCollapsed && ( {loading ? (
Chargement des tâches en attente...
) : pendingTasks.length === 0 ? (
🎉 Aucune tâche en attente ! Excellent travail.
) : (
{pendingTasks.map((task) => { const daysAgo = getDaysAgo(task.date); const isArchived = task.text.includes('[ARCHIVÉ]'); return (
{/* Checkbox */} {/* Contenu */}
{getTypeIcon(task.type)} {task.text}
{formatDateShort(task.date)} {daysAgo === 0 ? 'Aujourd\'hui' : daysAgo === 1 ? 'Hier' : `Il y a ${daysAgo} jours`} {task.task && ( 🔗 {task.task.title} )}
{/* Actions */}
{!isArchived && ( )}
); })}
)}
)}
); }