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 { useToast } from '@/hooks/useToast'; import { useRouter } from 'next/router'; import { postCreateApp } from '@/api/app'; import { appTemplates } from '@/constants/flow/ModuleTemplate'; import { feConfigs } from '@/store/static'; interface Props { loginSuccess: (e: ResLogin) => void; setPageType: Dispatch<`${PageTypeEnum}`>; } interface RegisterType { username: string; password: string; password2: string; code: string; } const RegisterForm = ({ setPageType, loginSuccess }: Props) => { const { inviterId = '' } = useRouter().query as { inviterId: string }; const { toast } = useToast(); const { register, handleSubmit, getValues, trigger, formState: { errors } } = useForm({ mode: 'onBlur' }); const { codeSending, sendCodeText, sendCode, codeCountDown } = useSendCode(); const onclickSendCode = useCallback(async () => { const check = await trigger('username'); if (!check) return; sendCode({ username: getValues('username'), type: 'register' }); }, [getValues, sendCode, trigger]); const [requesting, setRequesting] = useState(false); const onclickRegister = useCallback( async ({ username, password, code }: RegisterType) => { setRequesting(true); try { loginSuccess( await postRegister({ username, code, password, inviterId: inviterId || localStorage.getItem('inviterId') || '' }) ); toast({ title: `注册成功`, status: 'success' }); // aut register a model appTemplates.forEach((template) => { postCreateApp({ avatar: template.avatar, name: template.name, modules: template.modules }); }); } catch (error: any) { toast({ title: error.message || '注册异常', status: 'error' }); } setRequesting(false); }, [inviterId, loginSuccess, toast] ); return ( <> 注册 {feConfigs?.systemTitle} 账号
{!!errors.username && errors.username.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;