/* contact.jsx — Lead capture form (single column, urgency, BANT inline) */ const { useState: useStateC } = React; function Contact() { const [sent, setSent] = useStateC(false); const [form, setForm] = useStateC({ name: '', email: '', phone: '', services: [], budget: '', timeline: '', message: '', }); const [touched, setTouched] = useStateC({}); // Agregamos el estado para evitar múltiples envíos simultáneos const [isSubmitting, setIsSubmitting] = useStateC(false); const upd = (k, v) => setForm(f => ({ ...f, [k]: v })); const toggle = (v) => setForm(f => ({ ...f, services: f.services.includes(v) ? f.services.filter(x => x !== v) : [...f.services, v], })); const requiredOk = form.name.trim() && /\S+@\S+\.\S+/.test(form.email); const submit = async (e) => { e.preventDefault(); setTouched({ name: true, email: true }); // Si faltan datos o ya se está enviando, no hacer nada if (!requiredOk || isSubmitting) return; setIsSubmitting(true); // Deshabilita el botón y muestra "Enviando..." // Preparamos los datos para enviar.php const datos = { nombre: form.name, email: form.email, telefono: form.phone || 'No especificado', rango: `Presupuesto: ${form.budget || 'No definido'} | Urgencia: ${form.timeline || 'No definido'}`, objetivo: `Servicios: ${form.services.join(', ') || 'Ninguno'} | Desafío: ${form.message || 'Sin mensaje'}` }; try { const response = await fetch('/enviar.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(datos) }); const result = await response.json(); if (result.status === 'success') { setSent(true); // ¡Éxito! Muestra la pantalla de confirmación } else { alert('Hubo un error al enviar: ' + result.message); } } catch (error) { console.error("Error en la petición:", error); alert('Hubo un problema de conexión. Inténtalo de nuevo.'); } finally { setIsSubmitting(false); // Vuelve a habilitar el botón } }; const services = [ 'Paid Media', 'Estrategia', 'Creatividad', 'Data & Analytics', 'Línea de crédito', 'AI / Automation', ]; return (
Conectá tu estrategia comercial con un plan de marketing ejecutable.} sub="Completa el formulario y un partner del equipo se conecta para una primera llamada de 15 minutos sin compromiso." />
{/* Left column — value prop + urgency */} {/* Right column — form */} {sent ? (

Mensaje recibido.

Un partner del equipo se va a contactar a {form.email} para coordinar la primera llamada.

) : (
PASO 01 · DATOS DE CONTACTO
upd('name', e.target.value)} onBlur={() => setTouched(t => ({ ...t, name: true }))} placeholder="Tu nombre" className={touched.name && !form.name.trim() ? 'error' : ''} />
upd('email', e.target.value)} onBlur={() => setTouched(t => ({ ...t, email: true }))} placeholder="vos@empresa.com" className={touched.email && !/\S+@\S+\.\S+/.test(form.email) ? 'error' : ''} />
upd('phone', e.target.value)} placeholder="+54 9 11 ..." />
PASO 02 · CALIFICACIÓN
{services.map(it => ( ))}
{[ { v: 'urgent', l: 'Ya', sub: 'Esta semana' }, { v: 'soon', l: '< 30 días', sub: 'Próximo mes' }, { v: 'planning', l: 'Q3-Q4', sub: 'Estamos planificando' }, { v: 'exploring', l: 'Explorando', sub: 'Sin urgencia' }, ].map(opt => ( ))}