"use client"; import { useState, useEffect } from "react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Button } from "@/components/ui/button"; import { useSession } from "next-auth/react"; import { AddUserButton } from "./add-user-button"; interface User { id: string; username: string; firstName: string; lastName: string; email: string; createdTimestamp: number; roles: string[]; } interface UsersTableProps { userRole: string[]; } export function UsersTable({ userRole }: UsersTableProps) { const { data: session } = useSession(); const [users, setUsers] = useState([]); const handleAddUser = (newUser: User) => { console.log("Nouvel utilisateur:", newUser); console.log("Utilisateurs actuels:", users); setUsers((prevUsers) => [...prevUsers, newUser]); }; useEffect(() => { fetchUsers(); }, []); const fetchUsers = async () => { try { const response = await fetch("/api/users"); const data = await response.json(); setUsers(data); } catch (error) { console.error("Erreur lors de la récupération des utilisateurs:", error); } }; const canDelete = (targetUserRole: string[]) => { if (userRole.includes("admin")) return true; if (userRole.includes("TEACHERS")) { return targetUserRole.includes("STUDENTS"); } return false; }; const handleDelete = async (userId: string) => { try { await fetch(`/api/users/${userId}`, { method: "DELETE" }); fetchUsers(); } catch (error) { console.error("Erreur lors de la suppression:", error); } }; const filterUsers = (users: User[]) => { if (userRole.includes("admin")) return users; if (userRole.includes("TEACHERS")) { return users.filter( (user) => user.roles.includes("TEACHERS") || user.roles.includes("STUDENTS") ); } return users.filter((user) => user.roles.includes("STUDENTS")); }; if (!session) return null; return ( <>

Gestion des utilisateurs

{(session.user.role.includes("admin") || session.user.role.includes("TEACHERS")) && ( )}
{users.length === 0 ? (
Chargement...
) : ( Nom d'utilisateur Prénom Nom Email Date d'inscription Roles Actions {filterUsers(users).map((user) => ( {user.username} {user.firstName} {user.lastName} {user.email} {user.createdTimestamp} {user.roles.join(", ")} {canDelete(user.roles) && ( )} ))}
)} ); }