"use client" import * as React from "react" import Link from "next/link" import { useRouter } from "next/navigation" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import { IconLoader } from "@tabler/icons-react" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { PasswordInput } from "@/components/auth/password-input" import { signupSchema, type SignupInput } from "@/lib/validations/auth" export function SignupForm() { const router = useRouter() const [isLoading, setIsLoading] = React.useState(false) const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(signupSchema), }) const onSubmit = async (data: SignupInput) => { setIsLoading(true) try { const response = await fetch("/api/auth/signup", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email: data.email, password: data.password, firstName: data.firstName, lastName: data.lastName, }), }) const result = (await response.json()) as { success: boolean message?: string error?: string userId?: string } if (result.success) { toast.success(result.message || "Account created!") router.push( `/verify-email?email=${encodeURIComponent(data.email)}&userId=${encodeURIComponent(result.userId ?? "")}` ) } else { toast.error(result.error || "Signup failed") } } catch { toast.error("An error occurred. Please try again.") } finally { setIsLoading(false) } } return (
{errors.firstName && (

{errors.firstName.message}

)}
{errors.lastName && (

{errors.lastName.message}

)}
{errors.email && (

{errors.email.message}

)}
{errors.password && (

{errors.password.message}

)}
{errors.confirmPassword && (

{errors.confirmPassword.message}

)}

Already have an account?{" "} Sign in

); }