import app from '../app.js'; const api = app.getAPI(); const logger = app.getLogger(); export class LoginView extends HTMLElement { constructor() { super(); this.render(); this.attachListeners(); } render() { this.innerHTML = `

MyWebdav

Self-hosted cloud storage

`; this.querySelector('#login-error').style.display = 'none'; this.querySelector('#register-error').style.display = 'none'; } attachListeners() { const tabs = this.querySelectorAll('.auth-tab'); tabs.forEach(tab => { tab.addEventListener('click', () => this.switchTab(tab.dataset.tab)); }); this.querySelector('#login-form').addEventListener('submit', (e) => this.handleLogin(e)); this.querySelector('#register-form').addEventListener('submit', (e) => this.handleRegister(e)); } switchTab(tab) { const tabs = this.querySelectorAll('.auth-tab'); tabs.forEach(t => t.classList.remove('active')); this.querySelector(`[data-tab="${tab}"]`).classList.add('active'); const loginForm = this.querySelector('#login-form'); const registerForm = this.querySelector('#register-form'); if (tab === 'login') { loginForm.style.display = 'block'; registerForm.style.display = 'none'; } else { loginForm.style.display = 'none'; registerForm.style.display = 'block'; } } async handleLogin(e) { e.preventDefault(); const form = e.target; const formData = new FormData(form); const username = formData.get('username'); const password = formData.get('password'); const errorDiv = this.querySelector('#login-error'); errorDiv.style.display = 'none'; errorDiv.textContent = ''; try { logger.info('Login attempt started', { action: 'USER_LOGIN_ATTEMPT', username }); await api.login(username, password); logger.info('Login successful', { action: 'USER_LOGIN_SUCCESS', username }); this.dispatchEvent(new CustomEvent('auth-success')); } catch (error) { logger.error('Login failed', { action: 'USER_LOGIN_FAILURE', username, error: error.message }); errorDiv.textContent = error.message; errorDiv.style.display = 'block'; } } async handleRegister(e) { e.preventDefault(); const form = e.target; const formData = new FormData(form); const username = formData.get('username'); const email = formData.get('email'); const password = formData.get('password'); const errorDiv = this.querySelector('#register-error'); errorDiv.style.display = 'none'; errorDiv.textContent = ''; try { logger.info('Registration attempt started', { action: 'USER_REGISTER_ATTEMPT', username, email }); await api.register(username, email, password); logger.info('Registration successful', { action: 'USER_REGISTER_SUCCESS', username, email }); this.dispatchEvent(new CustomEvent('auth-success')); } catch (error) { logger.error('Registration failed', { action: 'USER_REGISTER_FAILURE', username, email, error: error.message }); errorDiv.textContent = error.message; errorDiv.style.display = 'block'; } } } customElements.define('login-view', LoginView);