import { Avatar, Button, Card, Form, Input, Message, } from '@arco-design/web-react'; import { IconLock } from '@arco-design/web-react/icon'; import React, { useEffect, useRef } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router'; import styled from 'styled-components'; import { useCheckAuth } from '../../api/auth'; import useLogin from '../../api/auth/useLogin'; import { useEvent } from '../../hooks/useEvent'; import { useSafeSetState } from '../../hooks/useSafeState'; const Root = styled.div` display: flex; flex-direction: column; min-height: 100vh; height: 1px; align-items: center; justify-content: flex-start; background-repeat: no-repeat; background-size: cover; background-image: radial-gradient( circle at 50% 14em, rgb(49, 50, 100) 0%, rgb(0, 2, 59) 60%, rgb(0, 2, 59) 100% ); .main { min-width: 300px; margin-top: 6em; .header { margin: 1em; display: flex; justify-content: center; } } `; export const LoginPage: React.FC = React.memo(() => { const checkAuth = useCheckAuth(); const navigate = useNavigate(); useEffect(() => { checkAuth({}, false) .then(() => { // already authenticated, redirect to the home page navigate('/'); }) .catch(() => { // not authenticated, stay on the login page }); }, [checkAuth, navigate]); return (
); }); LoginPage.displayName = 'LoginPage'; const StyledForm = styled(Form)``; const LoginForm: React.FC = React.memo(() => { const [loading, setLoading] = useSafeSetState(false); const login = useLogin(); const { t } = useTranslation(); const submit = useEvent(async (values) => { setLoading(true); try { await login(values); setLoading(false); } catch (e) { setLoading(false); Message.error('Login Failed'); console.error(e); } }); return ( ); }); LoginForm.displayName = 'LoginForm';