Reserva online
Reserva tu mesa
Formulario con validación de aforo por local. Reserva rápida, confirmación automatizada.
// ===== RIVAMAR Group — Formulario de Reservas Inteligente (v1.1) ===== const { useState, useEffect } = React; function Field({ label, children, hint, required }) { return ( ); } const inputCls = "w-full min-h-[44px] px-3.5 rounded-md bg-carbon border border-white/10 text-gray-100 text-sm placeholder-gray-600 focus:border-gold focus:ring-1 focus:ring-gold outline-none transition-colors"; function ReservaForm({ prefill, onSubmit }) { const [local, setLocal] = useState(prefill.local || ''); const [form, setForm] = useState({ nombre: '', empresa: '', correo: '', telefono: '', fecha: '', hora: '', comentarios: '' }); const [pax, setPax] = useState(2); const [exponorChecked, setExponorChecked] = useState(!!prefill.exponor); const [credencial, setCredencial] = useState(''); const [submitting, setSubmitting] = useState(false); const set = (k) => (e) => setForm({ ...form, [k]: e.target.value }); const localObj = local ? LOCAL_MAP[local] : null; const maxPax = local ? CAPACIDAD[local] : 20; const minPax = local ? MINIMO[local] : 1; const overCapacity = local && pax > maxPax; const underMin = local && pax < minPax; const credValida = credencial.trim().length >= 5; const exponorAplicado = exponorChecked && credValida; useEffect(() => { if (!local) return; setPax((p) => Math.min(Math.max(p, MINIMO[local]), CAPACIDAD[local])); }, [local]); const valid = local && form.nombre && form.correo && form.telefono && form.fecha && form.hora && !overCapacity && !underMin && (!exponorChecked || credValida); const handleSubmit = (e) => { e.preventDefault(); if (!valid || submitting) return; setSubmitting(true); // El folio se pide al servidor (correlativo central y atómico). Si no hay // servidor, nextReservaIdAsync entrega un folio provisional único. const pedirId = window.nextReservaIdAsync ? window.nextReservaIdAsync() : Promise.resolve({ id: nextReservaId(), source: 'local' }); pedirId.then((res) => { onSubmit({ ...form, local, pax, exponor: exponorAplicado, credencial: exponorAplicado ? credencial.trim() : '', id: res.id, _idSource: res.source, estado: 'pendiente', }); setSubmitting(false); }); }; return (
); } function SummaryRow({ label, value }) { return (Gracias, {data.nombre}. Tu solicitud {data.id} fue registrada correctamente.
Guardamos tu reserva {data.id}, pero no pudimos confirmar su llegada al panel en este momento (sin conexión con el servidor). Por favor actívala ahora por WhatsApp o correo para asegurar que el local la reciba.
! Activa tu reserva ahora
Para confirmarla de inmediato, envíanosla por WhatsApp o correo. El local te responde para validar la disponibilidad.
También quedó registrada en nuestro panel. El local validará tu reserva a la brevedad.
)}Reserva online
Formulario con validación de aforo por local. Reserva rápida, confirmación automatizada.