import React, { useState, useEffect } from 'react'; import { userApi } from '../api/users'; const AdminUsersPage = () => { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [inviteLink, setInviteLink] = useState(''); const [isCopied, setIsCopied] = useState(false); const generateInviteLink = async () => { try { setError(''); const invitation = await userApi.createInvitation(); const newInviteLink = `${window.location.origin}/register?invite=${invitation.token}`; setInviteLink(newInviteLink); setIsCopied(false); } catch (error) { setError('Erreur lors de la génération du lien d\'invitation'); console.error(error); } }; const copyToClipboard = () => { if (inviteLink) { navigator.clipboard.writeText(inviteLink).then(() => { setIsCopied(true); setTimeout(() => setIsCopied(false), 2000); }).catch((error) => { setError('Impossible de copier le lien.'); console.error(error); }); } }; useEffect(() => { const loadUsers = async () => { try { setLoading(true); const users = await userApi.getUsers(); setUsers(users); } catch (requestError) { setError('Erreur lors du chargement des utilisateurs'); console.error(requestError); } finally { setLoading(false); } }; loadUsers(); }, []); const handleDeleteUser = async (userId) => { if (!window.confirm('Êtes-vous sûr de vouloir supprimer cet utilisateur ?')) { return; } try { await userApi.deleteUser(userId); setUsers(users.filter(user => user.id !== userId)); } catch (err) { setError('Erreur lors de la suppression de l\'utilisateur'); console.error(err); } }; const handleMakeAdmin = async (userId) => { if (!window.confirm('Êtes-vous sûr de vouloir promouvoir cet utilisateur ?')) { return; } try { await userApi.promoteUser(userId); setUsers(users.map(user => user.id === userId ? { ...user, is_admin: true } : user )); } catch (err) { setError('Erreur lors de la promotion de l\'utilisateur'); console.error(err); } }; if (loading) { return (
Chargement des utilisateurs...
| Nom d'utilisateur | Rôle | Inscrit le | Actions |
|---|---|---|---|
| {user.username} | {user.is_admin ? ( Administrateur ) : ( Utilisateur )} | {new Date(user.date_joined).toLocaleDateString('fr-FR')} |
{!user.is_admin && (
)}
|