"use client"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import Link from "next/link"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import * as z from "zod"; import { Label } from "@/components/ui/label"; import { toast } from "@/components/ui/use-toast"; import { signUp } from "./action"; import { useForm, SubmitHandler, FieldValues } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; const signUpSchema = z .object({ username: z.string().min(1, "Username is required"), email: z.string().email("Invalid email address"), accessCode: z .string() .regex(/^\d{20}$/, "Access Code must be exactly 20 numeric characters"), password: z.string().min(8, "Password must be at least 8 characters"), confirmPassword: z.string().min(8, "Please confirm your password"), }) .refine((data) => data.password === data.confirmPassword, { path: ["confirmPassword"], message: "Passwords do not match", }); export default function SignUpForm() { const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(signUpSchema), }); const onSubmit: SubmitHandler = async (data) => { // Convert FieldValues to FormData const formData = new FormData(); for (const [key, value] of Object.entries(data)) { formData.append(key, value); } const { error } = await signUp(formData); if (error) { toast({ title: "Error", description: error, }); } else { toast({ title: "Success", description: "Account created successfully", }); } }; return ( Sign up Enter your info below to create your account
{errors.username?.message && typeof errors.username.message === "string" && (

{errors.username.message}

)}
{errors.email?.message && typeof errors.email.message === "string" && (

{errors.email.message}

)}
{errors.accessCode?.message && typeof errors.accessCode.message === "string" && (

{errors.accessCode.message}

)}
{errors.password?.message && typeof errors.password.message === "string" && (

{errors.password.message}

)}
{errors.confirmPassword?.message && typeof errors.confirmPassword.message === "string" && (

{errors.confirmPassword.message}

)}
Already have an account?{" "} Sign in
); } export { SignUpForm };