"use client"; import { format } from "date-fns"; import { fr } from "date-fns/locale"; import { Edit, MoreHorizontal, Trash2 } from "lucide-react"; import { useCallback, useEffect, useState } from "react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Skeleton } from "@/components/ui/skeleton"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { UserService } from "@/services/user.service"; import type { User } from "@/types/user"; import { UserEditDialog } from "./user-edit-dialog"; export default function AdminUsersPage() { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [totalCount, setTotalCount] = useState(0); const [selectedUser, setSelectedUser] = useState(null); const [dialogOpen, setDialogOpen] = useState(false); const fetchUsers = useCallback(() => { setLoading(true); UserService.getUsersAdmin() .then((res) => { setUsers(res.data); setTotalCount(res.totalCount); }) .catch((err) => { console.error(err); }) .finally(() => setLoading(false)); }, []); useEffect(() => { fetchUsers(); }, [fetchUsers]); const handleDelete = async (uuid: string) => { if ( !confirm( "Êtes-vous sûr de vouloir supprimer cet utilisateur ? Cette action est irréversible.", ) ) return; try { await UserService.removeUserAdmin(uuid); setUsers(users.filter((u) => u.uuid !== uuid)); setTotalCount((prev) => prev - 1); } catch (error) { console.error(error); } }; const handleEdit = (user: User) => { setSelectedUser(user); setDialogOpen(true); }; return (

Utilisateurs ({totalCount})

Utilisateur Email Rôle Status Date d'inscription {loading ? ( Array.from({ length: 5 }).map((_, i) => ( /* biome-ignore lint/suspicious/noArrayIndexKey: skeleton items don't have unique IDs */ )) ) : users.length === 0 ? ( Aucun utilisateur trouvé. ) : ( users.map((user) => ( {user.displayName || user.username}
@{user.username}
{user.email} {user.role} {user.status} {format(new Date(user.createdAt), "PPP", { locale: fr })} Actions handleEdit(user)}> Modifier handleDelete(user.uuid)} className="text-destructive focus:text-destructive" > Supprimer
)) )}
); }