"use client"; import { useState, useEffect } from "react"; import { Search } from "lucide-react"; import { Input } from "@/components/ui/input"; import Link from "next/link"; import { Button } from "@/components/ui/button"; import { useToast } from "@/components/ui/use-toast"; // Define Mission interface interface User { id: string; email: string; } interface MissionUser { id: string; role: string; user: User; } interface Mission { id: string; name: string; logo?: string; oddScope: string[]; niveau: string; missionType: string; projection: string; createdAt: string; creator: User; missionUsers: MissionUser[]; } export default function MissionsPage() { const [searchTerm, setSearchTerm] = useState(""); const [missions, setMissions] = useState([]); const [loading, setLoading] = useState(true); const { toast } = useToast(); // Fetch missions from API useEffect(() => { const fetchMissions = async () => { try { setLoading(true); const response = await fetch('/api/missions'); if (!response.ok) { throw new Error('Failed to fetch missions'); } const data = await response.json(); setMissions(data.missions || []); } catch (error) { console.error('Error fetching missions:', error); toast({ title: "Erreur", description: "Impossible de charger les missions", variant: "destructive", }); } finally { setLoading(false); } }; fetchMissions(); }, []); // Filter missions based on search term const filteredMissions = missions.filter(mission => mission.name.toLowerCase().includes(searchTerm.toLowerCase()) || mission.niveau.toLowerCase().includes(searchTerm.toLowerCase()) || mission.missionType.toLowerCase().includes(searchTerm.toLowerCase()) || mission.oddScope.some(scope => scope.toLowerCase().includes(searchTerm.toLowerCase())) ); // Function to format date const formatDate = (dateString: string) => { const date = new Date(dateString); return date.toLocaleDateString('fr-FR', { day: '2-digit', month: '2-digit', year: 'numeric' }); }; // Function to get mission category const getCategory = (mission: Mission) => { return mission.oddScope && mission.oddScope.length > 0 ? mission.oddScope[0].replace('odd-', 'ODD ') : "Non catégorisé"; }; // Function to get mission duration const getDuration = (projection: string) => { switch(projection) { case 'short': return '< 1 mois'; case 'medium': return '1-3 mois'; case 'long': return '> 3 mois'; default: return projection; } }; return (

Gérez vos missions et opportunités de bénévolat

setSearchTerm(e.target.value)} />
{loading ? (
) : filteredMissions.length > 0 ? (
{filteredMissions.map((mission) => (
{getCategory(mission)} {getDuration(mission.projection)}

{mission.name}

Type: {mission.missionType}

{mission.missionUsers.slice(0, 3).map(missionUser => ( {missionUser.role === 'gardien-temps' ? 'Gardien du Temps' : missionUser.role === 'gardien-parole' ? 'Gardien de la Parole' : missionUser.role === 'gardien-memoire' ? 'Gardien de la Mémoire' : 'Volontaire'} ))}
Créée le {formatDate(mission.createdAt)}
))}
) : (

Aucune mission trouvée

)}
); }