← back to Wine Finder

public/js/login.js

59 lines

document.addEventListener('DOMContentLoaded', () => {
  const loginForm = document.getElementById('loginForm');
  const errorMessage = document.getElementById('errorMessage');
  const buttonText = document.getElementById('buttonText');
  const buttonLoader = document.getElementById('buttonLoader');
  const loginButton = loginForm.querySelector('button[type="submit"]');

  loginForm.addEventListener('submit', async (e) => {
    e.preventDefault();

    const username = document.getElementById('username').value;
    const password = document.getElementById('password').value;

    // Clear previous errors
    errorMessage.classList.remove('show');
    errorMessage.textContent = '';

    // Show loader
    buttonText.style.display = 'none';
    buttonLoader.style.display = 'inline-block';
    loginButton.disabled = true;

    try {
      const response = await fetch('/auth/login', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({ username, password })
      });

      const data = await response.json();

      if (data.success) {
        // Redirect to main app
        window.location.href = '/';
      } else {
        // Show error
        errorMessage.textContent = data.error || 'Authentication failed';
        errorMessage.classList.add('show');

        // Reset button
        buttonText.style.display = 'inline';
        buttonLoader.style.display = 'none';
        loginButton.disabled = false;
      }
    } catch (error) {
      console.error('Login error:', error);
      errorMessage.textContent = 'Connection error. Please try again.';
      errorMessage.classList.add('show');

      // Reset button
      buttonText.style.display = 'inline';
      buttonLoader.style.display = 'none';
      loginButton.disabled = false;
    }
  });
});