import { useEffect, useState } from 'react' import api from '../api' import toast from 'react-hot-toast' function Modal({ title, onClose, children }) { return (

{title}

{children}
) } const emptyForm = { type: 'physique', first_name: '', last_name: '', company_name: '', siret: '', address: '', zip_code: '', city: '', email: '', phone: '', } export function ownerLabel(o) { if (!o) return '—' return o.type === 'morale' ? o.company_name || '—' : `${o.first_name || ''} ${o.last_name || ''}`.trim() || '—' } export default function Owners() { const [owners, setOwners] = useState([]) const [showModal, setShowModal] = useState(false) const [form, setForm] = useState(emptyForm) const [editing, setEditing] = useState(null) const [loading, setLoading] = useState(false) const load = () => api.get('/owners').then(r => setOwners(r.data)) useEffect(() => { load() }, []) const openAdd = () => { setForm(emptyForm); setEditing(null); setShowModal(true) } const openEdit = o => { setForm({ type: o.type || 'physique', first_name: o.first_name || '', last_name: o.last_name || '', company_name: o.company_name || '', siret: o.siret || '', address: o.address || '', zip_code: o.zip_code || '', city: o.city || '', email: o.email || '', phone: o.phone || '', }) setEditing(o.id); setShowModal(true) } const handleSubmit = async e => { e.preventDefault(); setLoading(true) try { if (editing) await api.put(`/owners/${editing}`, form) else await api.post('/owners', form) toast.success(editing ? 'Propriétaire modifié !' : 'Propriétaire ajouté !') setShowModal(false); load() } catch (err) { toast.error(err.response?.data?.error || 'Erreur') } finally { setLoading(false) } } const handleDelete = async id => { if (!confirm('Supprimer ce propriétaire ?')) return try { await api.delete(`/owners/${id}`); toast.success('Propriétaire supprimé'); load() } catch (err) { toast.error(err.response?.data?.error || 'Erreur') } } const set = field => e => setForm(f => ({ ...f, [field]: e.target.value })) return (

🏢 Propriétaires

{owners.length} propriétaire(s) enregistré(s)

{owners.length === 0 ? (
🏢

Aucun propriétaire enregistré.

) : (
{/* Desktop table */}
{owners.map(o => ( ))}
Identité Type Email Téléphone Adresse
{ownerLabel(o)} {o.siret && SIRET {o.siret}} {o.type === 'morale' ? 'Personne morale' : 'Personne physique'} {o.email || '—'} {o.phone || '—'} {o.address ? `${o.address}${o.zip_code ? ', ' + o.zip_code : ''}${o.city ? ' ' + o.city : ''}` : '—'}
{/* Mobile cards */}
{owners.map(o => (

{ownerLabel(o)}

{o.type === 'morale' ? 'Morale' : 'Physique'}
{o.siret &&

SIRET {o.siret}

} {o.email &&

✉️ {o.email}

} {o.phone &&

📞 {o.phone}

} {o.address &&

{o.address}{o.zip_code ? `, ${o.zip_code}` : ''}{o.city ? ` ${o.city}` : ''}

}
))}
)} {showModal && ( setShowModal(false)}>
{/* Type */}
{['physique', 'morale'].map(t => ( ))}
{/* Identité selon type */} {form.type === 'physique' ? (
) : (
)} {/* Coordonnées communes */}
)}
) }