import React, { useState, useEffect } from 'react'; import { api } from '../stores/api'; import PageHeader from '../components/PageHeader'; export default function GererMembres() { const [membres, setMembres] = useState([]); const [loading, setLoading] = useState(true); const [detail, setDetail] = useState(null); const [confirmAction, setConfirmAction] = useState(null); const [msg, setMsg] = useState(''); const [code, setCode] = useState(null); const [expiration, setExpiration] = useState(null); const [inviteLoading, setInviteLoading] = useState(false); const [copied, setCopied] = useState(false); const charger = async () => { setLoading(true); try { const data = await api.get('/membres/'); setMembres(data); } catch {} setLoading(false); }; useEffect(() => { charger(); }, []); const genererInvitation = async () => { setInviteLoading(true); try { const data = await api.post('/invitations/'); setCode(data.code); setExpiration(new Date(data.expire_le).toLocaleString('fr-CA')); } catch (e) { alert(e.message); } setInviteLoading(false); }; const copierInvitation = () => { navigator.clipboard.writeText(code).then(() => { setCopied(true); setTimeout(() => setCopied(false), 2000); }); }; const partagerSMS = () => { const texte = `Rejoins le Groupe Méditation sur l'app. Ton code d'invitation : ${code}`; window.open(`sms:?body=${encodeURIComponent(texte)}`); }; const desactiver = async (id) => { try { const res = await api.patch(`/membres/${id}/desactiver`); setMsg(res.message); setConfirmAction(null); setDetail(null); charger(); setTimeout(() => setMsg(''), 3000); } catch (e) { alert(e.message); } }; const droitOubli = async (id) => { try { const res = await api.request('DELETE', `/membres/${id}/oubli`); setMsg(res.message); setConfirmAction(null); setDetail(null); charger(); setTimeout(() => setMsg(''), 3000); } catch (e) { alert(e.message); } }; // Vue détail d'un membre if (detail) { return (
Prénom
{detail.prenom}
Nom
{detail.nom}
Téléphone
{detail.telephone || '—'}
Courriel
{detail.courriel || '—'}
Date d'abstinence
{detail.date_abstinence || '—'}
Statut
{detail.actif ? 'Actif' : 'Inactif'}Désactiver {detail.prenom} ? Le membre ne pourra plus se connecter.
⚠️ Cette action est irréversible. Toutes les données personnelles de {detail.prenom} seront anonymisées.
Code à usage unique, expiration automatique.
Code d'invitation
{code}
Expire le {expiration}
Chargement...
) : ( membres.map((m) => ( )) )}