import React, { forwardRef, useImperativeHandle, useState } from 'react'
import { Input, Form } from 'antd'
import { FormInstance } from 'antd/lib/form'
import { UserOutlined, LockOutlined } from '@ant-design/icons'
import {
getDeviceName,
getRequiredRules,
getUserRegisterParams,
VALIDATE_PATTERN,
} from '../../../../utils'
import { useGuardContext } from '../../../../context/global/context'
import { EmailRegisterFormProps } from '../../types'
import { RegisterFormFooter } from '../RegisterFormFooter'
import { useTranslation } from 'react-i18next'
export const EmailRegisterForm = forwardRef<
FormInstance,
EmailRegisterFormProps
>(({ onSuccess, onFail, onValidateFail }, ref) => {
const { t } = useTranslation()
const {
state: { authClient },
} = useGuardContext()
const [rawForm] = Form.useForm()
const [loading, setLoading] = useState(false)
const onFinishFailed = (errorInfo: any) => {
setLoading(false)
onValidateFail && onValidateFail(errorInfo)
}
const onFinish = async (values: any) => {
try {
await rawForm.validateFields()
const { email, password } = values
// Register and get status
const user = await authClient.registerByEmail(
email,
password,
{
browser:
typeof navigator !== 'undefined' ? navigator.userAgent : null,
device: getDeviceName(),
},
{
generateToken: true,
params: getUserRegisterParams(),
}
)
onSuccess && onSuccess(user)
} catch (error) {
onFail && onFail(error)
} finally {
setLoading(false)
}
}
useImperativeHandle(ref, () => rawForm)
const formItems = [
{
component: (
}
/>
),
name: 'email',
rules: getRequiredRules(t('common.emailNotNull')).concat({
pattern: VALIDATE_PATTERN.email,
message: t('login.emailError'),
}),
},
{
component: (