import { EmailScene, User } from 'approw-js-sdk' import React, { FC, useState } from 'react' import { Button, Form } from 'antd' import { VerifyCodeInput } from '../../../../common/VerifyCodeInput' import { useGuardContext } from '../../../../context/global/context' import { EmailMFAVerifyFormProps } from '../../types' import './style.less' import { SendCodeBtn } from '../SendPhoneCode/SendCodeBtn' import { useTranslation } from 'react-i18next' const CODE_LEN = 4 export const VerifyCodeForm: FC = ({ onSuccess, onFail, email, mfaToken, sendCodeRef, }) => { const { state: { authClient }, } = useGuardContext() const { t } = useTranslation() const [rawForm] = Form.useForm() const [MfaCode, setMFACode] = useState(new Array(CODE_LEN).fill('')) const [loading, setLoading] = useState(false) const [sending, setSending] = useState(false) const [sent, setSent] = useState(false) const onFinish = async (values: any) => { try { const user: User = await authClient.mfa.verifyAppEmailMfa({ mfaToken, email: email!, code: MfaCode.join(''), }) onSuccess && onSuccess(user) } catch (e) { onFail?.(e) } finally { setLoading(false) } } const sendVerifyCode = async () => { try { setSending(true) await authClient.sendEmail(email!, EmailScene.MfaVerify) setSent(true) return true } catch (e) { return false } finally { setSending(false) } } return ( <>

{t('login.inputEmailCode')}

{sending ? t('login.sendingVerifyCode') : sent ? `${t('login.verifyCodeSended')} ${email}` : t('login.clickSent')}

setLoading(true)} onFinish={onFinish} onFinishFailed={() => setLoading(false)} > !item)) { return Promise.reject(t('login.inputFullMfaCode')) } return Promise.resolve() }, }, ]} > sendVerifyCode()} /> ) }