import axios from 'axios'; import { useEffect, useState } from 'react'; import { useLocation } from 'react-router-dom'; import BackendError, { ErrorInfo } from '../components/BackendError'; import Form from '../components/Common/Form'; import SubmitButton from '../components/Common/SubmitButton'; import TextInput from '../components/Common/TextInput'; import TextURL from '../components/Common/TextURL'; import { useAuth } from '../context/AuthContext'; import { useConceptNavigation } from '../context/NagivationContext'; import { useConceptTheme } from '../context/ThemeContext'; import { IUserLoginData } from '../models/library'; function ProcessError({error}: {error: ErrorInfo}): React.ReactElement { if (axios.isAxiosError(error) && error.response && error.response.status === 400) { return (
На Портале отсутствует такое сочетание имени пользователя и пароля
); } else { return ( ); } } function LoginPage() { const {mainHeight} = useConceptTheme(); const location = useLocation(); const { navigateTo, navigateHistory } = useConceptNavigation(); const search = useLocation().search; const { user, login, logout, loading, error, setError } = useAuth(); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); useEffect(() => { const name = new URLSearchParams(search).get('username'); setUsername(name ?? ''); setPassword(''); }, [search]); useEffect(() => { setError(undefined); }, [username, password, setError]); function handleSubmit(event: React.FormEvent) { event.preventDefault(); if (!loading) { const data: IUserLoginData = { username: username, password: password }; login(data, () => { if (location.key !== 'default') { navigateHistory(-1); } else { navigateTo('/library'); } }); } } function logoutAndRedirect() { logout(() => navigateTo('/login/')); } return (
{user ?

{`Вы вошли в систему как ${user.username}`}

| | | Выйти

: null} {!user ?
Концепт Портал setUsername(event.target.value)} /> setPassword(event.target.value)} />
{error ? : null} : null}
); } export default LoginPage;