import { Icon } from '@iconify/react'; import { Divider } from 'antd'; import { loginWithEmail, t, useAsyncFn } from 'tailchat-shared'; import React, { useCallback, useState } from 'react'; import { Spinner } from '../../components/Spinner'; import { string } from 'yup'; import { useHistory } from 'react-router'; import { setUserJWT } from '../../utils/jwt-helper'; import { setGlobalUserLoginInfo } from '../../utils/user-helper'; /** * TODO: * 第三方登录 */ const OAuthLoginView: React.FC = React.memo(() => { return ( <>
); }); OAuthLoginView.displayName = 'OAuthLoginView'; /** * 登录视图 */ export const LoginView: React.FC = React.memo(() => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const history = useHistory(); const [{ loading, error }, handleLogin] = useAsyncFn(async () => { await string() .email('邮箱格式不正确') .required('邮箱不能为空') .validate(email); await string() .min(6, '密码不能低于6位') .required('密码不能为空') .validate(password); const data = await loginWithEmail(email, password); setGlobalUserLoginInfo(data); await setUserJWT(data.token); history.push('/main'); }, [email, password, history]); const toRegisterView = useCallback(() => { history.push('/entry/register'); }, [history]); return (
登录 Tail Chat
{t('邮箱')}
setEmail(e.target.value)} />
密码
setPassword(e.target.value)} />
{error &&

{error.message}

}
); }); LoginView.displayName = 'LoginView';