import { useEffect, useMemo, useState } from 'react'; import { api } from '../../lib/api.js'; import { CredentialsModal } from './AccessControls.jsx'; const STATUS = { nouvelle: { label: 'Nouvelle', className: 'badge-red' }, contactee: { label: 'Contact pris', className: 'badge-amber' }, validee: { label: 'Membre validé', className: 'badge-green' }, }; const formatDate = (value) => new Date(value).toLocaleDateString('fr-FR', { day: '2-digit', month: 'short', year: 'numeric', }); export function RequestsTab() { const [requests, setRequests] = useState([]); const [filter, setFilter] = useState('pending'); const [busyId, setBusyId] = useState(null); const [error, setError] = useState(''); const [credentials, setCredentials] = useState(null); const reload = () => api.get('/api/admin/demandes') .then((data) => setRequests(data.demandes)) .catch((err) => setError(err.message)); useEffect(() => { reload(); }, []); const visible = useMemo(() => requests.filter((request) => ( filter === 'completed' ? request.statut === 'validee' : request.statut !== 'validee' )), [filter, requests]); const pendingCount = requests.filter((request) => request.statut !== 'validee').length; const newCount = requests.filter((request) => request.statut === 'nouvelle').length; const run = async (request, action) => { setBusyId(request.id); setError(''); try { const result = await api.post(`/api/admin/demandes/${request.id}/${action}`); if (result.tempPassword) { setCredentials({ recipient: result.email, tempPassword: result.tempPassword }); } else if (result.accessError) { setError(`Membre validé, mais accès non créé : ${result.accessError}`); } await reload(); } catch (err) { setError(err.message); } finally { setBusyId(null); } }; return (
À traiter{pendingCount}
Nouvelles{newCount}
Validées{requests.length - pendingCount}

Demandes d’adhésion

Contactez chaque personne avant validation membre.

{error &&

{error}

}
{visible.map((request) => { const status = STATUS[request.statut] || STATUS.nouvelle; const busy = busyId === request.id; return (
Reçue{formatDate(request.created_at)}

{request.nom}

{status.label}

{request.fonction || 'Fonction non précisée'} · {request.entreprise}

{request.email} {request.tel && {request.tel}}
{request.statut === 'nouvelle' && ( )} {request.statut === 'contactee' && ( )} {request.statut === 'validee' && ( Membre : {request.membre_nom || request.entreprise} )}
); })} {visible.length === 0 && (
✓

Aucune demande {filter === 'pending' ? 'en cours' : 'terminée'}

Les nouvelles demandes apparaîtront ici.

)}
{credentials && ( setCredentials(null)} /> )}
); }