diff --git a/apps/admin/app/(auth)/email/login-form.tsx b/apps/admin/app/(auth)/email/login-form.tsx index fd510df..ece2a19 100644 --- a/apps/admin/app/(auth)/email/login-form.tsx +++ b/apps/admin/app/(auth)/email/login-form.tsx @@ -5,10 +5,10 @@ import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ import { Input } from '@workspace/ui/components/input'; import { Icon } from '@workspace/ui/custom-components/icon'; import { useTranslations } from 'next-intl'; -import { Dispatch, SetStateAction } from 'react'; +import { Dispatch, SetStateAction, useRef } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; -import CloudFlareTurnstile from '../turnstile'; +import CloudFlareTurnstile, { TurnstileRef } from '../turnstile'; export default function LoginForm({ loading, @@ -38,10 +38,19 @@ export default function LoginForm({ defaultValues: initialValues, }); + const turnstile = useRef(null); + const handleSubmit = form.handleSubmit((data) => { + try { + onSubmit(data); + } catch (error) { + turnstile.current?.reset(); + } + }); + return ( <>
- + ( - + diff --git a/apps/admin/app/(auth)/email/register-form.tsx b/apps/admin/app/(auth)/email/register-form.tsx index 0c408e5..63204c1 100644 --- a/apps/admin/app/(auth)/email/register-form.tsx +++ b/apps/admin/app/(auth)/email/register-form.tsx @@ -6,11 +6,11 @@ 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 { Dispatch, SetStateAction, useRef } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import SendCode from '../send-code'; -import CloudFlareTurnstile from '../turnstile'; +import CloudFlareTurnstile, { TurnstileRef } from '../turnstile'; export default function RegisterForm({ loading, @@ -31,11 +31,10 @@ export default function RegisterForm({ const handleCheckUser = async (email: string) => { try { + if (!auth.email.enable_verify) return true; const domain = email.split('@')[1]; - const isValid = - !auth.email.enable_verify || - auth.email?.domain_suffix_list.split('\n').includes(domain || ''); - return !isValid; + const isValid = auth.email?.domain_suffix_list.split('\n').includes(domain || ''); + return isValid; } catch (error) { console.log('Error checking user:', error); return false; @@ -53,7 +52,7 @@ export default function RegisterForm({ password: z.string(), repeat_password: z.string(), code: auth.email.enable_verify ? z.string() : z.string().nullish(), - invite: invite.forced_invite ? 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() @@ -77,13 +76,22 @@ export default function RegisterForm({ }, }); + const turnstile = useRef(null); + const handleSubmit = form.handleSubmit((data) => { + try { + onSubmit(data); + } catch (error) { + turnstile.current?.reset(); + } + }); + return ( <> {auth.register.stop_register ? ( {t('message')} ) : ( - + ( - + @@ -129,6 +142,7 @@ export default function RegisterForm({
( - + diff --git a/apps/admin/app/(auth)/email/reset-form.tsx b/apps/admin/app/(auth)/email/reset-form.tsx index 5eadbe5..c5bc9c2 100644 --- a/apps/admin/app/(auth)/email/reset-form.tsx +++ b/apps/admin/app/(auth)/email/reset-form.tsx @@ -5,11 +5,11 @@ import { Form, FormControl, FormField, FormItem, FormMessage } from '@workspace/ import { Input } from '@workspace/ui/components/input'; import { Icon } from '@workspace/ui/custom-components/icon'; import { useTranslations } from 'next-intl'; -import { Dispatch, SetStateAction } from 'react'; +import { Dispatch, SetStateAction, useRef } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import SendCode from '../send-code'; -import CloudFlareTurnstile from '../turnstile'; +import CloudFlareTurnstile, { TurnstileRef } from '../turnstile'; export default function ResetForm({ loading, @@ -43,10 +43,19 @@ export default function ResetForm({ defaultValues: initialValues, }); + const turnstile = useRef(null); + const handleSubmit = form.handleSubmit((data) => { + try { + onSubmit(data); + } catch (error) { + turnstile.current?.reset(); + } + }); + return ( <> - +
( - + @@ -104,7 +114,7 @@ export default function ResetForm({ render={({ field }) => ( - + diff --git a/apps/admin/app/(auth)/turnstile.tsx b/apps/admin/app/(auth)/turnstile.tsx index d4a8d47..7746197 100644 --- a/apps/admin/app/(auth)/turnstile.tsx +++ b/apps/admin/app/(auth)/turnstile.tsx @@ -1,26 +1,38 @@ 'use client'; -import useGlobalStore from '@/config/use-global'; import { useLocale } from 'next-intl'; import { useTheme } from 'next-themes'; -import { useEffect } from 'react'; +import { forwardRef, useEffect, useImperativeHandle } from 'react'; import Turnstile, { useTurnstile } from 'react-turnstile'; -export default function CloudFlareTurnstile({ - id, - value, - onChange, -}: { - id?: string; - value?: null | string; - onChange: (value?: string) => void; -}) { +import useGlobalStore from '@/config/use-global'; + +export type TurnstileRef = { + reset: () => void; +}; + +const CloudFlareTurnstile = forwardRef< + TurnstileRef, + { + id?: string; + value?: null | string; + onChange: (value?: string) => void; + } +>(function CloudFlareTurnstile({ id, value, onChange }, ref) { const { common } = useGlobalStore(); const { verify } = common; const { resolvedTheme } = useTheme(); const locale = useLocale(); const turnstile = useTurnstile(); + useImperativeHandle( + ref, + () => ({ + reset: () => turnstile.reset(), + }), + [turnstile], + ); + useEffect(() => { if (value === '') { turnstile.reset(); @@ -51,4 +63,6 @@ export default function CloudFlareTurnstile({ /> ) ); -} +}); + +export default CloudFlareTurnstile; diff --git a/apps/user/app/auth/email/login-form.tsx b/apps/user/app/auth/email/login-form.tsx index f4f9e8c..ece2a19 100644 --- a/apps/user/app/auth/email/login-form.tsx +++ b/apps/user/app/auth/email/login-form.tsx @@ -40,8 +40,11 @@ export default function LoginForm({ const turnstile = useRef(null); const handleSubmit = form.handleSubmit((data) => { - onSubmit(data); - turnstile.current?.reset(); + try { + onSubmit(data); + } catch (error) { + turnstile.current?.reset(); + } }); return ( diff --git a/apps/user/app/auth/email/register-form.tsx b/apps/user/app/auth/email/register-form.tsx index 6247caa..63204c1 100644 --- a/apps/user/app/auth/email/register-form.tsx +++ b/apps/user/app/auth/email/register-form.tsx @@ -78,8 +78,11 @@ export default function RegisterForm({ const turnstile = useRef(null); const handleSubmit = form.handleSubmit((data) => { - onSubmit(data); - turnstile.current?.reset(); + try { + onSubmit(data); + } catch (error) { + turnstile.current?.reset(); + } }); return ( diff --git a/apps/user/app/auth/email/reset-form.tsx b/apps/user/app/auth/email/reset-form.tsx index 825f405..c5bc9c2 100644 --- a/apps/user/app/auth/email/reset-form.tsx +++ b/apps/user/app/auth/email/reset-form.tsx @@ -45,8 +45,11 @@ export default function ResetForm({ const turnstile = useRef(null); const handleSubmit = form.handleSubmit((data) => { - onSubmit(data); - turnstile.current?.reset(); + try { + onSubmit(data); + } catch (error) { + turnstile.current?.reset(); + } }); return ( diff --git a/apps/user/app/auth/phone/login-form.tsx b/apps/user/app/auth/phone/login-form.tsx index 25665a7..f040c1f 100644 --- a/apps/user/app/auth/phone/login-form.tsx +++ b/apps/user/app/auth/phone/login-form.tsx @@ -47,8 +47,11 @@ export default function LoginForm({ const turnstile = useRef(null); const handleSubmit = form.handleSubmit((data) => { - onSubmit(data); - turnstile.current?.reset(); + try { + onSubmit(data); + } catch (error) { + turnstile.current?.reset(); + } }); return ( diff --git a/apps/user/app/auth/phone/register-form.tsx b/apps/user/app/auth/phone/register-form.tsx index 2852a95..b2d1f75 100644 --- a/apps/user/app/auth/phone/register-form.tsx +++ b/apps/user/app/auth/phone/register-form.tsx @@ -65,8 +65,11 @@ export default function RegisterForm({ const turnstile = useRef(null); const handleSubmit = form.handleSubmit((data) => { - onSubmit(data); - turnstile.current?.reset(); + try { + onSubmit(data); + } catch (error) { + turnstile.current?.reset(); + } }); return ( diff --git a/apps/user/app/auth/phone/reset-form.tsx b/apps/user/app/auth/phone/reset-form.tsx index 863e118..aa95f16 100644 --- a/apps/user/app/auth/phone/reset-form.tsx +++ b/apps/user/app/auth/phone/reset-form.tsx @@ -48,8 +48,11 @@ export default function ResetForm({ const turnstile = useRef(null); const handleSubmit = form.handleSubmit((data) => { - onSubmit(data); - turnstile.current?.reset(); + try { + onSubmit(data); + } catch (error) { + turnstile.current?.reset(); + } }); return (