import { useCallback, useEffect, useState } from 'react'; import Modal from '../components/Modal'; import { cabanasApi, lotesApi, rematesApi } from '../api/client'; const emptyForm = () => ({ nombre: '', precio: '', raza: '', prelance: '', puja: '', estado: '', video: '', numLote: 0, visible: true, remateId: '', cabanaId: '', }); function toPayload(form) { const body = { nombre: form.nombre, raza: form.raza || null, estado: form.estado || null, video: form.video || null, numLote: Number(form.numLote) || 0, visible: form.visible, }; if (form.precio !== '') body.precio = Number(form.precio); if (form.prelance !== '') body.prelance = Number(form.prelance); if (form.puja !== '') body.puja = Number(form.puja); if (form.remateId) body.remate = { id: Number(form.remateId) }; if (form.cabanaId) body.cabana = { id: Number(form.cabanaId) }; return body; } export default function Lotes() { const [items, setItems] = useState([]); const [remates, setRemates] = useState([]); const [cabanas, setCabanas] = useState([]); const [error, setError] = useState(''); const [modal, setModal] = useState(null); const [form, setForm] = useState(emptyForm()); const [saving, setSaving] = useState(false); const load = useCallback(() => { Promise.all([lotesApi.list(), rematesApi.list(), cabanasApi.list()]) .then(([l, r, c]) => { setItems(l); setRemates(r); setCabanas(c); }) .catch((e) => setError(e.message)); }, []); useEffect(() => { load(); }, [load]); const openCreate = () => { setForm(emptyForm()); setModal('create'); }; const openEdit = (l) => { setForm({ nombre: l.nombre || '', precio: l.precio ?? '', raza: l.raza || '', prelance: l.prelance ?? '', puja: l.puja ?? '', estado: l.estado || '', video: l.video || '', numLote: l.numLote ?? 0, visible: l.visible !== false, remateId: l.remate?.id ?? '', cabanaId: l.cabana?.id ?? '', }); setModal({ type: 'edit', id: l.id }); }; const guardar = async () => { setSaving(true); setError(''); try { const payload = toPayload(form); if (modal === 'create') await lotesApi.create(payload); else await lotesApi.update(modal.id, payload); setModal(null); load(); } catch (e) { setError(e.message); } finally { setSaving(false); } }; const eliminar = async (id) => { if (!confirm('¿Eliminar lote?')) return; try { await lotesApi.remove(id); load(); } catch (e) { setError(e.message); } }; return ( <>

Lotes

{error &&
{error}
}
{items.map((l) => ( ))}
ID Nombre Precio Remate Estado
{l.id} {l.numLote} {l.nombre} {l.precio} {l.remate?.nombre ?? l.remate?.id ?? '—'} {l.estado}
{modal && ( setModal(null)} onSave={guardar} saving={saving} >
setForm({ ...form, nombre: e.target.value })} />
setForm({ ...form, numLote: e.target.value })} />
setForm({ ...form, precio: e.target.value })} />
setForm({ ...form, puja: e.target.value })} />
setForm({ ...form, raza: e.target.value })} />
setForm({ ...form, prelance: e.target.value })} />
setForm({ ...form, estado: e.target.value })} />
setForm({ ...form, video: e.target.value })} />
)} ); }