const { Button, IconButton, Input, Select, Checkbox, Badge, Icon } = window.Academia_fb1ae0; const TURNOS = [ { value: '', label: 'Sin preferencia' }, { value: 'manana', label: 'Mañana' }, { value: 'tarde', label: 'Tarde' }, { value: 'noche', label: 'Noche' }, { value: 'sabados', label: 'Sábados' }, ]; const NOTEBOOK = [ { value: '', label: 'Elegí una opción' }, { value: 'si', label: 'Sí, tengo notebook' }, { value: 'no', label: 'No, necesito equipo en el aula' }, ]; function PreinscripcionModal({ abierto, cursoInicial, onClose }) { const t = window.GIO.t; const cursos = window.GIO.cursos; const vacio = { // nombre lleva nombre y apellido juntos. nombre: '', telefono: '', email: '', // La modalidad online está suspendida; se envía siempre presencial. curso_id: '', modalidad: 'presencial', turno: '', notebook: '', novedades: true, }; const [form, setForm] = React.useState(vacio); const [errores, setErrores] = React.useState({}); const [enviando, setEnviando] = React.useState(false); const [enviado, setEnviado] = React.useState(false); const [errorGeneral, setErrorGeneral] = React.useState(''); // Al abrir: reinicia el formulario y preselecciona el curso clickeado. React.useEffect(() => { if (abierto) { setForm({ ...vacio, curso_id: cursoInicial ? String(cursoInicial.id) : '' }); setErrores({}); setEnviado(false); setErrorGeneral(''); } }, [abierto, cursoInicial]); // Cerrar con Escape. React.useEffect(() => { if (!abierto) return undefined; const onKey = ev => { if (ev.key === 'Escape') onClose(); }; document.addEventListener('keydown', onKey); document.body.style.overflow = 'hidden'; return () => { document.removeEventListener('keydown', onKey); document.body.style.overflow = ''; }; }, [abierto, onClose]); if (!abierto) return null; const set = campo => ev => { const valor = ev.target.type === 'checkbox' ? ev.target.checked : ev.target.value; setForm(f => ({ ...f, [campo]: valor })); setErrores(e => ({ ...e, [campo]: null })); }; function validar() { const err = {}; const nombre = form.nombre.trim().replace(/\s+/g, ' '); if (nombre.length < 3 || !nombre.includes(' ')) err.nombre = 'Escribí tu nombre y apellido.'; if (form.telefono.replace(/\D/g, '').length < 8) err.telefono = 'Escribí un teléfono válido.'; if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(form.email.trim())) err.email = 'Escribí un email válido.'; if (!form.curso_id) err.curso_id = 'Elegí el curso que te interesa.'; if (!form.notebook) err.notebook = 'Contanos si tenés notebook.'; setErrores(err); return Object.keys(err).length === 0; } async function enviar(ev) { ev.preventDefault(); if (enviando || !validar()) return; setEnviando(true); setErrorGeneral(''); try { const res = await fetch(window.GIO.apiPreinscripcion, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(form), }); const data = await res.json(); if (data.ok) { setEnviado(true); } else { setErrores(data.errores || {}); setErrorGeneral(data.mensaje || 'No pudimos guardar tu preinscripción. Probá de nuevo.'); } } catch (e) { setErrorGeneral('No pudimos conectar con el servidor. Revisá tu conexión y probá de nuevo.'); } finally { setEnviando(false); } } const cursoElegido = cursos.find(c => String(c.id) === String(form.curso_id)); const opcionesCurso = [{ value: '', label: 'Elegí un curso' }] .concat(cursos.map(c => ({ value: String(c.id), label: c.titulo }))) .concat([{ value: 'asesoramiento', label: 'Todavía no sé — quiero que me asesoren' }]); return (
ev.stopPropagation()} role="dialog" aria-modal="true" aria-label={t.form_titulo} style={{ width: 'min(600px,100%)', maxHeight: '90vh', overflowY: 'auto', background: 'var(--surface-card)', borderRadius: 'var(--radius-xl)', boxShadow: 'var(--shadow-lg)', padding: 'var(--space-8)', display: 'flex', flexDirection: 'column', gap: 'var(--space-5)' }}>
{cursoElegido ? cursoElegido.areaLabel : t.form_titulo}

{enviado ? t.form_gracias_titulo : (cursoElegido ? cursoElegido.titulo : t.form_titulo)}

{enviado ? (
{t.form_gracias_texto}
{window.GIO.contacto.waLink ? ( ) : null}
) : (

{cursoElegido ? cursoElegido.descripcion : t.form_bajada}

{cursoElegido ? (
{cursoElegido.nivel ? {cursoElegido.nivel} : null} {cursoElegido.horas ? {cursoElegido.horas} : null} {cursoElegido.clases ? {cursoElegido.clases} : null}
) : null}