"use client"; import { z } from "zod"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { toast } from "sonner"; import { authSchema } from "@/lib/zod"; import { useForm } from "react-hook-form"; import { useRouter } from "next/navigation"; import { useTranslations } from "next-intl"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { useState, useTransition } from "react"; import { zodResolver } from "@hookform/resolvers/zod"; import { signUpWithCredentials } from "@/app/actions/auth"; import { EyeIcon, EyeOffIcon, MailIcon } from "lucide-react"; export type CredentialsSignUpFormValues = z.infer; interface CredentialsSignUpFormProps { callbackUrl: string | undefined; } export function CredentialsSignUpForm({ callbackUrl, }: CredentialsSignUpFormProps) { const router = useRouter(); const t = useTranslations("CredentialsSignUpForm"); const [isPending, startTransition] = useTransition(); const [isVisible, setIsVisible] = useState(false); const form = useForm({ resolver: zodResolver(authSchema), defaultValues: { email: "", password: "", }, }); const toggleVisibility = () => setIsVisible((prev) => !prev); const onSubmit = (data: CredentialsSignUpFormValues) => { startTransition(async () => { const result = await signUpWithCredentials(data); if (result?.error) { toast.error(t("signUpFailed"), { description: result.error, }); } else { toast.success(t("signUpSuccess"), { description: t("signUpSuccessDescription"), }); console.log("callbackUrl:", callbackUrl); router.push( `/sign-in?callbackUrl=${encodeURIComponent(callbackUrl || "/")}` ); } }); }; return (
( {t("email")}
)} /> ( {t("password")}
)} /> ); }