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 (

Gestion des comptes

Chargement des utilisateurs...

); } return (

Gestion des comptes

{error &&
{error}
}
{inviteLink && (
)}
{users.map((user) => ( ))}
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 && ( )}
); }; export default AdminUsersPage;