'use client'; import { zodResolver } from '@hookform/resolvers/zod'; import { useMutation } from '@tanstack/react-query'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { useSupabase } from '@kit/supabase/hooks/use-supabase'; import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert'; import { Button } from '@kit/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, } from '@kit/ui/form'; import { Input } from '@kit/ui/input'; import { Trans } from '@kit/ui/trans'; import { useCaptchaToken } from '../captcha/client'; export function ResendAuthLinkForm(props: { redirectPath?: string }) { const resendLink = useResendLink(); const form = useForm({ resolver: zodResolver(z.object({ email: z.string().email() })), defaultValues: { email: '', }, }); if (resendLink.data && !resendLink.isPending) { return ( ); } return (
{ return resendLink.mutate({ email: data.email, redirectPath: props.redirectPath, }); })} > { return ( ); }} name={'email'} /> ); } function useResendLink() { const supabase = useSupabase(); const { captchaToken } = useCaptchaToken(); const mutationFn = async (props: { email: string; redirectPath?: string; }) => { const response = await supabase.auth.resend({ email: props.email, type: 'signup', options: { emailRedirectTo: props.redirectPath, captchaToken, }, }); if (response.error) { throw response.error; } return response.data; }; return useMutation({ mutationFn, }); }