import React, { useState, Dispatch, useCallback } from 'react'; import { FormControl, Box, Input, Button, FormErrorMessage, Flex } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; import { PageTypeEnum } from '@/constants/user'; import { postRegister } from '@/api/user'; import { useSendCode } from '@/hooks/useSendCode'; import type { ResLogin } from '@/api/response/user'; import { useScreen } from '@/hooks/useScreen'; import { useToast } from '@/hooks/useToast'; interface Props { loginSuccess: (e: ResLogin) => void; setPageType: Dispatch<`${PageTypeEnum}`>; } interface RegisterType { email: string; password: string; password2: string; code: string; } const RegisterForm = ({ setPageType, loginSuccess }: Props) => { const { toast } = useToast(); const { mediaLgMd } = useScreen(); const { register, handleSubmit, getValues, trigger, formState: { errors } } = useForm({ mode: 'onBlur' }); const { codeSending, sendCodeText, sendCode, codeCountDown } = useSendCode(); const onclickSendCode = useCallback(async () => { const check = await trigger('email'); if (!check) return; sendCode({ email: getValues('email'), type: 'register' }); }, [getValues, sendCode, trigger]); const [requesting, setRequesting] = useState(false); const onclickRegister = useCallback( async ({ email, password, code }: RegisterType) => { setRequesting(true); try { loginSuccess( await postRegister({ email, code, password }) ); toast({ title: `注册成功`, status: 'success' }); } catch (error) { typeof error === 'string' && toast({ title: error, status: 'error', duration: 4000, isClosable: true }); } setRequesting(false); }, [loginSuccess, toast] ); return ( <> 注册 DocGPT 账号
{!!errors.email && errors.email.message} {!!errors.code && errors.code.message} {!!errors.password && errors.password.message} (getValues('password') === val ? true : '两次密码不一致') })} > {!!errors.password2 && errors.password2.message} setPageType('login')} > 已有账号,去登录
); }; export default RegisterForm;