'use client'; import { useState, useEffect } from 'react'; import { useNotification } from './NotificationProvider'; import ConfirmModal from './ConfirmModal'; import { getParticipationRef } from '@/lib/participation-ref'; interface Trajet { id: string; date: string; adresseDepart: string; adresseArrivee: string; commentaire?: string | null; statut: string; archived: boolean; participations?: { id: string }[]; adherent: { id: string; nom: string; prenom: string; telephone: string; email: string; }; chauffeur?: { id: string; nom: string; prenom: string; telephone: string; } | null; } export default function ArchivesTrajets() { const { showNotification } = useNotification(); const [trajets, setTrajets] = useState([]); const [loading, setLoading] = useState(true); const [searchTerm, setSearchTerm] = useState(''); const [showRestoreConfirm, setShowRestoreConfirm] = useState(false); const [trajetToRestore, setTrajetToRestore] = useState(null); useEffect(() => { fetchTrajets(); }, []); const fetchTrajets = async () => { setLoading(true); try { const response = await fetch('/api/trajets/archives'); if (response.ok) { const data = await response.json(); setTrajets(data); } } catch (error) { console.error('Erreur lors du chargement des archives:', error); showNotification('error', 'Erreur lors du chargement des archives'); } finally { setLoading(false); } }; const handleRestoreClick = (trajetId: string) => { setTrajetToRestore(trajetId); setShowRestoreConfirm(true); }; const handleRestore = async () => { if (!trajetToRestore) return; setShowRestoreConfirm(false); try { const response = await fetch(`/api/trajets/${trajetToRestore}/archive`, { method: 'DELETE', }); if (response.ok) { showNotification('success', 'Trajet restauré avec succès'); fetchTrajets(); } else { const error = await response.json(); showNotification('error', error.error || 'Erreur lors de la restauration du trajet'); } } catch (error) { console.error('Erreur lors de la restauration:', error); showNotification('error', 'Erreur lors de la restauration du trajet'); } finally { setTrajetToRestore(null); } }; const formatDate = (dateString: string) => { const date = new Date(dateString); return date.toLocaleDateString('fr-FR', { day: '2-digit', month: '2-digit', year: 'numeric', }); }; const formatTime = (dateString: string) => { const date = new Date(dateString); return date.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' }); }; const getStatutColor = (statut: string) => { switch (statut) { case 'Validé': return 'bg-purple-100 text-purple-700 border-purple-200'; case 'Terminé': return 'bg-green-100 text-green-700 border-green-200'; case 'En cours': return 'bg-blue-100 text-blue-700 border-blue-200'; case 'Annulé': return 'bg-red-100 text-red-700 border-red-200'; default: return 'bg-gray-100 text-gray-700 border-gray-200'; } }; const getInitials = (nom: string, prenom: string) => { return `${prenom.charAt(0)}${nom.charAt(0)}`.toUpperCase(); }; const participationRef = (t: Trajet) => { const p = t.participations?.[0]; return p ? getParticipationRef(p.id) : null; }; const filteredTrajets = trajets.filter((trajet) => { const ref = participationRef(trajet); const searchLower = searchTerm.toLowerCase(); return ( trajet.adherent.nom.toLowerCase().includes(searchLower) || trajet.adherent.prenom.toLowerCase().includes(searchLower) || trajet.adresseDepart.toLowerCase().includes(searchLower) || trajet.adresseArrivee.toLowerCase().includes(searchLower) || (trajet.chauffeur && `${trajet.chauffeur.prenom} ${trajet.chauffeur.nom}`.toLowerCase().includes(searchLower)) || (ref && ref.toLowerCase().includes(searchLower)) ); }); if (loading) { return (
Chargement des archives...
); } return (
{/* Barre de recherche */}
setSearchTerm(e.target.value)} className="w-full px-3 md:px-4 py-2 md:py-2.5 pl-9 md:pl-10 text-sm md:text-base border border-gray-300 rounded-lg focus:ring-2 focus:ring-lblue focus:border-transparent" />
{/* Liste des trajets archivés */}
{filteredTrajets.length === 0 ? (
{searchTerm ? 'Aucun trajet trouvé' : 'Aucun trajet archivé'}
) : (
{filteredTrajets.map((trajet) => (
{getInitials(trajet.adherent.nom, trajet.adherent.prenom)}
{trajet.adherent.prenom} {trajet.adherent.nom}
{formatDate(trajet.date)} à {formatTime(trajet.date)}
{participationRef(trajet) && ( {participationRef(trajet)} )} {trajet.statut}
A
Départ
{trajet.adresseDepart}
B
Arrivée
{trajet.adresseArrivee}
{trajet.chauffeur && (
Chauffeur: {trajet.chauffeur.prenom} {trajet.chauffeur.nom}
)}
))}
)}
{ setShowRestoreConfirm(false); setTrajetToRestore(null); }} />
); }