124 lines
2.9 KiB
JavaScript
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
|
|
}
|