import { useEffect, useRef, useState } from 'react'; import { api, dateParts, seasonLabel, statutLabel } from '../../lib/api.js'; import { copyRichEmail } from '../../lib/emailClipboard.js'; import { downloadOutlookDraft } from '../../lib/outlookDraft.js'; import { useAuth } from '../../lib/AuthContext.jsx'; import Modal from '../Modal.jsx'; import ImageSlot from '../ImageSlot.jsx'; import { AccessCell, CredentialsModal } from './AccessControls.jsx'; import { associationSettings } from '../../lib/siteSettings.js'; /* ---------------- Members ---------------- */ function MemberFormModal({ member, categories, onClose, onSaved }) { const [form, setForm] = useState( member ? { ...member, email: member.email || '', tel: member.tel || '', site: member.site || '', adresse: member.adresse || '', presentation: member.presentation || '' } : { nom: '', secteur: '', categorie_id: categories[0]?.id ?? null, dirigeant: '', email: '', tel: '', site: '', adresse: '', presentation: '' } ); const [error, setError] = useState(''); const onChange = (e) => { const { name, value } = e.target; setForm({ ...form, [name]: name === 'categorie_id' ? (value ? Number(value) : null) : value }); }; const submit = async (e) => { e.preventDefault(); setError(''); const body = { nom: form.nom, secteur: form.secteur, categorie_id: form.categorie_id, dirigeant: form.dirigeant, email: form.email, tel: form.tel, site: form.site, adresse: form.adresse, presentation: form.presentation, }; try { if (member) { await api.put(`/api/admin/members/${member.id}`, body); onSaved(); } else { const result = await api.post('/api/admin/members', body); onSaved({ ...result, email: body.email }); } } catch (err) { setError(err.message); } }; return (