brief-rags-bench/static/js/ui/auth.ui.js

124 lines
2.9 KiB
JavaScript

/**
* Auth UI
*
* UI компонент для экрана авторизации.
*/
import * as authService from '../services/auth.service.js'
import { showElement, hideElement, getInputValue, setInputValue, setElementText } from '../utils/dom.utils.js'
/**
* Показать экран авторизации
*/
export function showLoginScreen() {
const loginScreen = document.getElementById('login-screen')
const app = document.getElementById('app')
if (loginScreen) {
loginScreen.style.display = 'flex'
}
if (app) {
app.style.display = 'none'
}
}
/**
* Скрыть экран авторизации и показать приложение
*/
export function hideLoginScreen() {
const loginScreen = document.getElementById('login-screen')
const app = document.getElementById('app')
if (loginScreen) {
loginScreen.style.display = 'none'
}
if (app) {
app.style.display = 'block'
}
}
/**
* Обработка авторизации
*/
export async function handleLogin() {
const loginInput = document.getElementById('login-input')
const loginError = document.getElementById('login-error')
const loginBtn = document.getElementById('login-submit-btn')
if (!loginInput || !loginError || !loginBtn) {
console.error('Login form elements not found')
return
}
const login = getInputValue(loginInput).trim()
try {
// Скрыть предыдущие ошибки
hideElement(loginError)
// Показать состояние загрузки
loginBtn.disabled = true
loginBtn.textContent = 'Вход...'
// Выполнить вход
await authService.login(login)
console.log('Login successful')
// Скрыть login screen, показать приложение
hideLoginScreen()
setInputValue(loginInput, '')
} catch (error) {
console.error('Login failed:', error)
setElementText(loginError, error.message || 'Ошибка авторизации')
showElement(loginError)
} finally {
loginBtn.disabled = false
loginBtn.textContent = 'Войти'
}
}
/**
* Выход из системы
*/
export function handleLogout() {
if (confirm('Вы уверены, что хотите выйти?')) {
authService.logout()
}
}
/**
* Инициализация обработчиков событий
*/
export function setupListeners() {
const loginBtn = document.getElementById('login-submit-btn')
const loginInput = document.getElementById('login-input')
const logoutBtn = document.getElementById('logout-btn')
if (loginBtn) {
loginBtn.addEventListener('click', handleLogin)
}
if (loginInput) {
loginInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
handleLogin()
}
})
}
if (logoutBtn) {
logoutBtn.addEventListener('click', handleLogout)
}
}
// Export as default object
export default {
showLoginScreen,
hideLoginScreen,
handleLogin,
handleLogout,
setupListeners
}