import useGlobalStore from '@/config/use-global'; import { zodResolver } from '@hookform/resolvers/zod'; import { Button } from '@workspace/ui/components/button'; import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ui/components/form'; import { Input } from '@workspace/ui/components/input'; import { Icon } from '@workspace/ui/custom-components/icon'; import { Markdown } from '@workspace/ui/custom-components/markdown'; import { useTranslations } from 'next-intl'; import { Dispatch, SetStateAction } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import SendCode from '../send-code'; import CloudFlareTurnstile from '../turnstile'; export default function RegisterForm({ loading, onSubmit, initialValues, setInitialValues, onSwitchForm, }: { loading?: boolean; onSubmit: (data: any) => void; initialValues: any; setInitialValues: Dispatch>; onSwitchForm: Dispatch>; }) { const t = useTranslations('auth.register'); const { common } = useGlobalStore(); const { verify, auth, invite } = common; const handleCheckUser = async (email: string) => { try { const domain = email.split('@')[1]; const isValid = !auth.email.enable_verify || auth.email?.domain_suffix_list.split('\n').includes(domain || ''); return !isValid; } catch (error) { console.log('Error checking user:', error); return false; } }; const formSchema = z .object({ email: z .string() .email(t('email')) .refine(handleCheckUser, { message: t('whitelist'), }), password: z.string(), repeat_password: z.string(), code: auth.email.enable_verify ? z.string() : z.string().nullish(), invite: invite.forced_invite ? z.string().min(1) : z.string().nullish(), cf_token: verify.enable_register_verify && verify.turnstile_site_key ? z.string() : z.string().nullish(), }) .superRefine(({ password, repeat_password }, ctx) => { if (password !== repeat_password) { ctx.addIssue({ code: z.ZodIssueCode.custom, message: t('passwordMismatch'), path: ['repeat_password'], }); } }); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { ...initialValues, invite: localStorage.getItem('invite') || '', }, }); return ( <> {auth.register.stop_register ? ( {t('message')} ) : (
( )} /> ( )} /> ( )} /> {auth.email.enable_verify && ( (
)} /> )} ( )} /> {verify.enable_register_verify && ( ( )} /> )} )}
{t('existingAccount')} 
); }