"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import Link from "next/link"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { registerAction } from "@/features/auth/actions/register"; import { registerSchema, type RegisterInput } from "@/features/auth/schemas"; export function RegisterForm() { const [formError, setFormError] = useState(null); const { register, handleSubmit, setError, formState: { errors, isSubmitting }, } = useForm({ resolver: zodResolver(registerSchema), }); const onSubmit = async (data: RegisterInput) => { setFormError(null); const formData = new FormData(); Object.entries(data).forEach(([key, value]) => formData.set(key, value ?? "")); const result = await registerAction(formData); // A successful call redirects server-side and never resolves here with // success: true in practice, but we still handle it for completeness. if (!result.success) { setFormError(result.error ?? "Something went wrong. Please try again."); if (result.fieldErrors) { for (const [field, messages] of Object.entries(result.fieldErrors)) { if (messages?.[0]) { setError(field as keyof RegisterInput, { message: messages[0] }); } } } } }; return (
{formError && (

{formError}

)}

By creating an account, you agree to our{" "} Terms of Service {" "} and{" "} Privacy Policy .

Already have an account?{" "} Log in

); }