app.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. function showErrorMessage(message) {
  2. const errorMessageElement = document.getElementById('registerErrorMessage');
  3. if (errorMessageElement) {
  4. errorMessageElement.textContent = message;
  5. errorMessageElement.classList.remove('hidden');
  6. }
  7. }
  8. function showRegisterModal() {
  9. document.getElementById('registerModal').classList.remove('hidden');
  10. }
  11. function hideRegisterModal() {
  12. document.getElementById('registerModal').classList.add('hidden');
  13. }
  14. // Formateo automático del RUT mientras se escribe
  15. document.getElementById('rutInput').addEventListener('input', function (e) {
  16. let rut = e.target.value.replace(/[^0-9kK]/g, '');
  17. if (rut.length > 1) {
  18. let body = rut.slice(0, -1);
  19. let dv = rut.slice(-1);
  20. if (body.length > 0) {
  21. // Agregar puntos cada 3 dígitos desde la derecha
  22. body = body.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
  23. rut = body + '-' + dv;
  24. }
  25. }
  26. e.target.value = rut;
  27. });
  28. // Manejo del envío del formulario
  29. document.getElementById('registerForm').addEventListener('submit', function (e) {
  30. e.preventDefault();
  31. showGlobalLoader();
  32. const formData = new FormData(e.target);
  33. const data = {
  34. name: formData.get('name'),
  35. email: formData.get('email'),
  36. rut: formData.get('rut')
  37. };
  38. fetch('/api/users/register', {
  39. method: 'POST',
  40. headers: {
  41. 'Content-Type': 'application/json'
  42. },
  43. body: JSON.stringify(data)
  44. })
  45. .then(async response => {
  46. const responseData = await response.json().catch(() => ({}));
  47. if (!response.ok) {
  48. const errorMsg = responseData.detail || 'Error al registrar el usuario.';
  49. console.error('Error en el registro:', errorMsg);
  50. showErrorMessage(errorMsg);
  51. return null;
  52. }
  53. return responseData;
  54. })
  55. .then(result => {
  56. if (result) {
  57. document.getElementById('successPage').classList.remove('hidden');
  58. hideRegisterModal();
  59. }
  60. })
  61. .catch(error => {
  62. console.error('Error de red o conexión:', error);
  63. showErrorMessage('Error de conexión. Por favor, intenta nuevamente.');
  64. })
  65. .finally(() => {
  66. hideGlobalLoader();
  67. });
  68. });
  69. function createGlobalLoader() {
  70. if (document.getElementById('globalLoader')) return;
  71. globalLoaderElement = document.createElement('div');
  72. globalLoaderElement.id = 'globalLoader';
  73. globalLoaderElement.className = 'fixed inset-0 bg-black bg-opacity-80 flex flex-col items-center justify-center z-[2000] transition-opacity duration-300 ease-in-out pointer-events-none';
  74. globalLoaderElement.style.opacity = '0';
  75. globalLoaderElement.innerHTML = `
  76. <div style="border: 6px solid rgba(255, 255, 255, 0.2); border-radius: 50%; border-top: 6px solidrgb(172, 85, 85); width: 60px; height: 60px; animation: spin 1s linear infinite;"></div>
  77. <p class="text-white text-xl mt-4">Procesando su registro...</p>
  78. `;
  79. document.body.appendChild(globalLoaderElement);
  80. }
  81. function showGlobalLoader() {
  82. if (!globalLoaderElement) createGlobalLoader();
  83. globalLoaderElement.style.display = 'flex';
  84. setTimeout(() => { if (globalLoaderElement) globalLoaderElement.style.opacity = '1'; }, 10);
  85. }
  86. function hideGlobalLoader() {
  87. if (globalLoaderElement) {
  88. globalLoaderElement.style.opacity = '0';
  89. setTimeout(() => { if (globalLoaderElement) globalLoaderElement.style.display = 'none'; }, 300);
  90. }
  91. }
  92. document.addEventListener('DOMContentLoaded', async function () {
  93. const nextIdResponse = await fetch('/api/users/next');
  94. if (nextIdResponse.ok) {
  95. const nextIdData = await nextIdResponse.json();
  96. document.getElementById('successMessage').innerHTML = `Revisa tu correo electronico para establecer tu PIN`;
  97. }
  98. createGlobalLoader();
  99. hideGlobalLoader();
  100. // showRegisterModal();
  101. });