"use client"; import { useState, useEffect } from "react"; import Link from "next/link"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "@/components/ui/card"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { PlusCircle, Search, MoreHorizontal, Pencil, Trash2, Users, Eye } from "lucide-react"; // Define the Project type interface Project { id: number; name: string; description: string; date: string; groups: number; persons: number; } export default function ProjectsPage() { const [searchQuery, setSearchQuery] = useState(""); // State for projects data const [projects, setProjects] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); // Fetch projects from API useEffect(() => { const fetchProjects = async () => { setIsLoading(true); try { const data = await import('@/lib/api').then(module => module.projectsAPI.getProjects() ); setProjects(data); setError(null); } catch (err) { console.error("Failed to fetch projects:", err); setError("Impossible de charger les projets. Veuillez réessayer plus tard."); // Fallback to mock data for development setProjects([ { id: 1, name: "Projet Formation Dev Web", description: "Création de groupes pour la formation développement web", date: "2025-05-15", groups: 4, persons: 16, }, { id: 2, name: "Projet Hackathon", description: "Équipes pour le hackathon annuel", date: "2025-05-10", groups: 8, persons: 32, }, { id: 3, name: "Projet Workshop UX/UI", description: "Groupes pour l'atelier UX/UI", date: "2025-05-05", groups: 5, persons: 20, }, ]); } finally { setIsLoading(false); } }; fetchProjects(); }, []); // Filter projects based on search query const filteredProjects = projects.filter( (project) => project.name.toLowerCase().includes(searchQuery.toLowerCase()) || project.description.toLowerCase().includes(searchQuery.toLowerCase()) ); return (

Projets

setSearchQuery(e.target.value)} disabled={isLoading} />
{error && (

{error}

)} {isLoading && (
)} {/* Mobile card view */}
{filteredProjects.length === 0 ? (
Aucun projet trouvé.
) : ( filteredProjects.map((project) => ( {project.name} {project.description}
Date {new Date(project.date).toLocaleDateString("fr-FR")}
Groupes {project.groups}
Personnes {project.persons}
Actions Gérer les groupes Modifier Supprimer
)) )}
{/* Desktop table view */}
Nom Description Date de création Groupes Personnes Actions {filteredProjects.length === 0 ? ( Aucun projet trouvé. ) : ( filteredProjects.map((project) => ( {project.name} {project.description} {new Date(project.date).toLocaleDateString("fr-FR")} {project.groups} {project.persons} Actions Voir Gérer les groupes Modifier Supprimer )) )}
); }