@ -35,6 +35,7 @@ const Register: Component = () => {
const [ loading , setLoading ] = createSignal ( false ) ;
const [ loading , setLoading ] = createSignal ( false ) ;
const [ error , setError ] = createSignal < string | null > ( null ) ;
const [ error , setError ] = createSignal < string | null > ( null ) ;
const [ resendCooldown , setResendCooldown ] = createSignal ( 0 ) ;
const [ resendCooldown , setResendCooldown ] = createSignal ( 0 ) ;
const [ turnstileResetCount , setTurnstileResetCount ] = createSignal ( 0 ) ;
// Redirect if already authenticated
// Redirect if already authenticated
createEffect ( ( ) = > {
createEffect ( ( ) = > {
@ -85,6 +86,7 @@ const Register: Component = () => {
turnstile_token : turnstileToken ( ) ! ,
turnstile_token : turnstileToken ( ) ! ,
} ) ;
} ) ;
setSubmitted ( true ) ;
setSubmitted ( true ) ;
setTurnstileToken ( null ) ;
setResendCooldown ( 60 ) ;
setResendCooldown ( 60 ) ;
} catch ( err ) {
} catch ( err ) {
if ( isApiError ( err ) ) {
if ( isApiError ( err ) ) {
@ -102,7 +104,7 @@ const Register: Component = () => {
} ;
} ;
const handleResend = async ( ) = > {
const handleResend = async ( ) = > {
if ( resendCooldown ( ) > 0 ) return ;
if ( resendCooldown ( ) > 0 || ! turnstileToken ( ) ) return ;
setLoading ( true ) ;
setLoading ( true ) ;
setError ( null ) ;
setError ( null ) ;
@ -112,6 +114,8 @@ const Register: Component = () => {
display_name : displayName ( ) || undefined ,
display_name : displayName ( ) || undefined ,
turnstile_token : turnstileToken ( ) ! ,
turnstile_token : turnstileToken ( ) ! ,
} ) ;
} ) ;
setTurnstileToken ( null ) ;
setTurnstileResetCount ( ( c ) = > c + 1 ) ;
setResendCooldown ( 60 ) ;
setResendCooldown ( 60 ) ;
} catch ( err ) {
} catch ( err ) {
if ( isApiError ( err ) ) {
if ( isApiError ( err ) ) {
@ -159,9 +163,18 @@ const Register: Component = () => {
< / div >
< / div >
< / Show >
< / Show >
< div class = "mb-4" >
< Turnstile
onToken = { ( token ) = > setTurnstileToken ( token ) }
onExpired = { ( ) = > setTurnstileToken ( null ) }
onError = { ( ) = > setTurnstileToken ( null ) }
resetSignal = { turnstileResetCount }
/ >
< / div >
< button
< button
onClick = { handleResend }
onClick = { handleResend }
disabled = { resendCooldown ( ) > 0 || loading ( ) }
disabled = { resendCooldown ( ) > 0 || loading ( ) || ! turnstileToken ( ) }
class = "text-sm font-medium text-indigo-600 hover:text-indigo-500 disabled:text-gray-400 disabled:cursor-not-allowed"
class = "text-sm font-medium text-indigo-600 hover:text-indigo-500 disabled:text-gray-400 disabled:cursor-not-allowed"
>
>
< Show
< Show