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 ?
: null}
);
}
export default LoginPage;