import { useState } from "react"; import DashboardLayout from "@/components/DashboardLayout"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { Switch } from "@/components/ui/switch"; import { trpc } from "@/lib/trpc"; import { UserPlus, Trash2, Users as UsersIcon } from "lucide-react"; import { toast } from "sonner"; export default function Users() { const [dialogOpen, setDialogOpen] = useState(false); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [name, setName] = useState(""); const [role, setRole] = useState<"user" | "admin">("user"); const { data: users, isLoading } = trpc.admin.getAllUsers.useQuery(); const utils = trpc.useUtils(); const createMutation = trpc.admin.createUser.useMutation({ onSuccess: () => { toast.success("Utilisateur créé"); utils.admin.getAllUsers.invalidate(); setDialogOpen(false); setEmail(""); setPassword(""); setName(""); setRole("user"); }, onError: (error) => { toast.error(error.message || "Erreur lors de la création"); }, }); const toggleActiveMutation = trpc.admin.toggleUserActive.useMutation({ onSuccess: () => { toast.success("Statut mis à jour"); utils.admin.getAllUsers.invalidate(); }, onError: (error) => { toast.error(error.message || "Erreur lors de la mise à jour"); }, }); const deleteMutation = trpc.admin.deleteUser.useMutation({ onSuccess: () => { toast.success("Utilisateur supprimé"); utils.admin.getAllUsers.invalidate(); }, onError: (error) => { toast.error(error.message || "Erreur lors de la suppression"); }, }); const handleCreate = () => { createMutation.mutate({ email, password, name, role }); }; const handleToggleActive = (userId: number, isActive: number) => { toggleActiveMutation.mutate({ userId, isActive: isActive === 1 ? 0 : 1 }); }; const handleDelete = (userId: number) => { if (confirm("Êtes-vous sûr de vouloir supprimer cet utilisateur ?")) { deleteMutation.mutate({ userId }); } }; return (

Gestion des utilisateurs

Créez et gérez les comptes utilisateurs

Créer un nouvel utilisateur Créez un compte utilisateur avec authentification locale
setName(e.target.value)} placeholder="Jean Dupont" />
setEmail(e.target.value)} placeholder="jean.dupont@example.com" />
setPassword(e.target.value)} placeholder="••••••••" />
Liste des utilisateurs Gérez les comptes et les permissions {isLoading ? (
Chargement...
) : users && users.length > 0 ? ( Nom Email Méthode Rôle Actif Créé le Actions {users.map((user) => ( {user.name || "-"} {user.email} {user.loginMethod} {user.role === "admin" ? ( Admin ) : ( User )} handleToggleActive(user.id, user.isActive)} disabled={toggleActiveMutation.isPending} /> {new Date(user.createdAt).toLocaleDateString("fr-FR")} ))}
) : (

Aucun utilisateur

)}
); }