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

{title}

{children}
) } const emptyForm = { property_id: '', tenant_id: '', start_date: '', end_date: '', rent_amount: '', charges_amount: '', deposit_amount: '', payment_day: '1' } export default function Leases() { const [leases, setLeases] = useState([]) const [properties, setProperties] = useState([]) const [tenants, setTenants] = useState([]) const [showModal, setShowModal] = useState(false) const [form, setForm] = useState(emptyForm) const [loading, setLoading] = useState(false) const load = () => { api.get('/leases').then(r => setLeases(r.data)) api.get('/properties').then(r => setProperties(r.data)) api.get('/tenants').then(r => setTenants(r.data)) } useEffect(() => { load() }, []) const handleSubmit = async e => { e.preventDefault(); setLoading(true) try { await api.post('/leases', { ...form, property_id: Number(form.property_id), tenant_id: Number(form.tenant_id) }) toast.success('Bail créé !') setShowModal(false); load() } catch (err) { toast.error(err.response?.data?.error || 'Erreur') } finally { setLoading(false) } } const handleToggle = async lease => { try { await api.put(`/leases/${lease.id}`, { end_date: lease.end_date, rent_amount: lease.rent_amount, charges_amount: lease.charges_amount, deposit_amount: lease.deposit_amount, payment_day: lease.payment_day, active: lease.active ? 0 : 1 }) toast.success(lease.active ? 'Bail clôturé' : 'Bail réactivé'); load() } catch { toast.error('Erreur') } } const fmt = v => `${Number(v).toFixed(2)} €` const fmtDate = d => d ? new Date(d).toLocaleDateString('fr-FR') : '—' return (

📋 Baux

{leases.filter(l => l.active).length} bail(s) actif(s)

{leases.length === 0 ? (
📋

Aucun bail. Commencez par ajouter vos biens et locataires.

) : (
{leases.map(l => (

{l.tenant_first_name} {l.tenant_last_name}

{l.active ? 'Actif' : 'Clôturé'}

{l.property_name} · {l.property_address}, {l.property_city}

Du {fmtDate(l.start_date)}{l.end_date ? ` au ${fmtDate(l.end_date)}` : ''}

{fmt(l.rent_amount + l.charges_amount)}/mois

Loyer {fmt(l.rent_amount)} + Charges {fmt(l.charges_amount)}

Détail
))}
)} {showModal && ( setShowModal(false)}>
setForm(f => ({ ...f, start_date: e.target.value }))} />
setForm(f => ({ ...f, end_date: e.target.value }))} />
setForm(f => ({ ...f, rent_amount: e.target.value }))} placeholder="800" />
setForm(f => ({ ...f, charges_amount: e.target.value }))} placeholder="80" />
setForm(f => ({ ...f, deposit_amount: e.target.value }))} placeholder="1600" />
setForm(f => ({ ...f, payment_day: e.target.value }))} placeholder="1" />
)}
) }