/* MIPIEL Taller — JS del configurador (solicitud sin pago) */ (function () { 'use strict'; document.addEventListener('DOMContentLoaded', function () { var raiz = document.querySelector('[data-mt-config]'); if (!raiz) { return; } var cfg = window.mipielTaller || {}; var gracias = document.querySelector('[data-mt-gracias]'); var boton = raiz.querySelector('[data-mt-enviar]'); var error = raiz.querySelector('[data-mt-error]'); var enviando = false; function elegido(nombre) { return raiz.querySelector('input[name="' + nombre + '"]:checked'); } function valorDe(el, attr) { return el ? (el.getAttribute(attr) || '') : ''; } function texto(el) { return el ? (el.value || '').trim() : ''; } function campo(nombre) { return raiz.querySelector('[name="' + nombre + '"]'); } function capitalizar(s) { return s.charAt(0).toUpperCase() + s.slice(1); } function lineas() { var l = []; var modelo = elegido('mt_modelo'); var piel = elegido('mt_piel'); var color = elegido('mt_color'); if (modelo) { l.push('Modelo: ' + valorDe(modelo, 'data-nombre')); } if (piel) { l.push('Piel: ' + valorDe(piel, 'data-nombre')); } if (color) { l.push('Color: ' + valorDe(color, 'data-nombre')); } ['hilo', 'herraje', 'cierre'].forEach(function (campoNombre) { var el = elegido('mt_' + campoNombre); if (el) { l.push(capitalizar(campoNombre) + ': ' + valorDe(el, 'data-nombre')); } }); var grabado = raiz.querySelector('input[name="mt_grabado"]'); if (grabado && grabado.value.trim()) { l.push('Grabado: "' + grabado.value.trim() + '"'); } var medidas = raiz.querySelector('input[name="mt_medidas"]'); if (medidas && medidas.value.trim()) { l.push('Medidas: ' + medidas.value.trim()); } var codigo = raiz.querySelector('input[name="mt_codigo"]'); if (codigo && codigo.value.trim()) { l.push('Código de muestreador: ' + codigo.value.trim().toUpperCase()); } return l; } function config() { var datos = {}; ['modelo', 'piel', 'color', 'hilo', 'herraje', 'cierre'].forEach(function (campoNombre) { datos[campoNombre] = valorDe(elegido('mt_' + campoNombre), 'value'); }); datos.grabado = texto(raiz.querySelector('input[name="mt_grabado"]')); datos.medidas = texto(raiz.querySelector('input[name="mt_medidas"]')); datos.codigo = texto(raiz.querySelector('input[name="mt_codigo"]')).toUpperCase(); return datos; } function pintar() { var l = lineas(); var lista = raiz.querySelector('[data-mt-lista]'); var titulo = raiz.querySelector('[data-mt-titulo]'); var modelo = elegido('mt_modelo'); if (l.length) { lista.innerHTML = ''; l.forEach(function (item) { var li = document.createElement('li'); li.textContent = item; lista.appendChild(li); }); } else { lista.innerHTML = '
  • Aún no has elegido nada.
  • '; } titulo.textContent = modelo ? 'Tu ' + valorDe(modelo, 'data-nombre') : 'Elige un modelo'; if (boton) { boton.disabled = !(elegido('mt_modelo') && elegido('mt_piel') && elegido('mt_color')); } } raiz.addEventListener('change', pintar); raiz.addEventListener('input', function (e) { if (!e.target.matches('input[type="radio"], input[type="checkbox"]')) { pintar(); } }); pintar(); function emailValido(valor) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(valor); } function mostrarError(mensaje) { if (!error) { return; } error.textContent = mensaje; error.scrollIntoView({ behavior: 'smooth', block: 'center' }); } function validar() { var nombre = texto(campo('mt_nombre')); var correo = texto(campo('mt_correo')); var consentimiento = campo('mt_consentimiento') && campo('mt_consentimiento').checked; if (!nombre) { mostrarError('Escribe tu nombre para continuar.'); return null; } if (!emailValido(correo)) { mostrarError('Revisa tu correo: no parece válido.'); return null; } if (!consentimiento) { mostrarError('Necesitamos tu consentimiento para contactarte.'); return null; } return { nombre: nombre, correo: correo, whatsapp: texto(campo('mt_whatsapp')), ciudad: texto(campo('mt_ciudad')), notas: texto(campo('mt_notas')), consentimiento: consentimiento, alternativas: campo('mt_alternativas') && campo('mt_alternativas').checked, web: campo('mt_web') ? campo('mt_web').value : '' }; } if (boton) { boton.addEventListener('click', function () { if (enviando) { return; } if (error) { error.textContent = ''; } if (!(elegido('mt_modelo') && elegido('mt_piel') && elegido('mt_color'))) { mostrarError('Elige modelo, piel y color para continuar.'); return; } var datosContacto = validar(); if (!datosContacto) { return; } enviando = true; boton.disabled = true; boton.textContent = 'Enviando…'; var datos = new FormData(); datos.append('action', 'mipiel_enviar_solicitud'); datos.append('nonce', cfg.nonce); datos.append('config', JSON.stringify(config())); datos.append('mt_nombre', datosContacto.nombre); datos.append('mt_correo', datosContacto.correo); datos.append('mt_whatsapp', datosContacto.whatsapp); datos.append('mt_ciudad', datosContacto.ciudad); datos.append('mt_notas', datosContacto.notas); datos.append('mt_consentimiento', datosContacto.consentimiento ? '1' : ''); datos.append('mt_alternativas', datosContacto.alternativas ? '1' : ''); datos.append('mt_web', datosContacto.web); fetch(cfg.ajaxUrl, { method: 'POST', body: datos, credentials: 'same-origin' }) .then(function (r) { return r.json(); }) .then(function (res) { if (!res || !res.success) { enviando = false; boton.disabled = false; boton.textContent = 'Enviar mi diseño al taller'; mostrarError((res && res.data && res.data.mensaje) ? res.data.mensaje : 'Algo salió mal. Intenta de nuevo.'); return; } mostrarGracias(res.data, datosContacto); }) .catch(function () { enviando = false; boton.disabled = false; boton.textContent = 'Enviar mi diseño al taller'; mostrarError('No pudimos conectar. Revisa tu internet e inténtalo de nuevo.'); }); }); } function mostrarGracias(datos, contacto) { if (!gracias) { return; } raiz.setAttribute('hidden', 'hidden'); var nombreEl = gracias.querySelector('[data-mt-gracias-nombre]'); var idEl = gracias.querySelector('[data-mt-gracias-id]'); var lista = gracias.querySelector('[data-mt-gracias-lista]'); var correoEl = gracias.querySelector('[data-mt-gracias-correo]'); if (nombreEl) { nombreEl.textContent = contacto.nombre.split(' ')[0]; } if (idEl) { idEl.textContent = datos.codigo; } if (lista) { lista.innerHTML = ''; (datos.resumen || []).forEach(function (item) { var li = document.createElement('li'); li.textContent = item; lista.appendChild(li); }); } if (correoEl) { if (datos.correos_activos && datos.correo_enviado) { correoEl.textContent = 'También te enviamos una copia a ' + datos.correo + '.'; } else { correoEl.textContent = 'Guardamos tu correo para contactarte.'; } } gracias.removeAttribute('hidden'); gracias.scrollIntoView({ behavior: 'smooth', block: 'start' }); var copiar = gracias.querySelector('[data-mt-copiar]'); if (copiar) { copiar.addEventListener('click', function () { var resumen = 'Solicitud ' + datos.codigo + '\n\n' + (datos.resumen || []).join('\n') + '\n\nSin pago ahora. Te contactamos en 1 a 2 días hábiles.'; if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(resumen).then(function () { avisoCopiado(copiar); }); } else { var ta = document.createElement('textarea'); ta.value = resumen; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); ta.remove(); avisoCopiado(copiar); } }); } } function avisoCopiado(botonCopiar) { var original = botonCopiar.textContent; botonCopiar.textContent = 'Copiado'; setTimeout(function () { botonCopiar.textContent = original; }, 1800); } }); })();