import { Icon } from '@/components/Icon'; import { Divider } from 'antd'; import { isValidStr, loginWithEmail, t, useAsyncFn } from 'tailchat-shared'; import React, { 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'; import { useSearchParam } from '@/hooks/useSearchParam'; import { useNavToView } from './utils'; /** * TODO: * 第三方登录 */ const OAuthLoginView: React.FC = React.memo(() => { return ( <> {t('或')}
); }); OAuthLoginView.displayName = 'OAuthLoginView'; /** * 登录视图 */ export const LoginView: React.FC = React.memo(() => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const history = useHistory(); const navRedirect = useSearchParam('redirect'); const [{ loading, error }, handleLogin] = useAsyncFn(async () => { await string() .email(t('邮箱格式不正确')) .required(t('邮箱不能为空')) .validate(email); await string() .min(6, t('密码不能低于6位')) .required(t('密码不能为空')) .validate(password); const data = await loginWithEmail(email, password); setGlobalUserLoginInfo(data); await setUserJWT(data.token); if (isValidStr(navRedirect)) { history.push(decodeURIComponent(navRedirect)); } else { history.push('/main'); } }, [email, password, history, navRedirect]); const navToView = useNavToView(); return (
{t('登录 Tail Chat')}
{t('邮箱')}
setEmail(e.target.value)} />
{t('密码')}
setPassword(e.target.value)} />
{error &&

{error.message}

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