"use client"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { SignUpResponse } from "@server/routers/auth"; import { api } from "@app/api"; import { useRouter } from "next/navigation"; import { passwordSchema } from "@server/auth/passwordSchema"; import { AxiosResponse } from "axios"; type SignupFormProps = { redirect?: string; }; const formSchema = z .object({ email: z.string().email({ message: "Invalid email address" }), password: passwordSchema, confirmPassword: passwordSchema, }) .refine((data) => data.password === data.confirmPassword, { path: ["confirmPassword"], message: "Passwords do not match", }); export default function SignupForm({ redirect }: SignupFormProps) { const router = useRouter(); const [error, setError] = useState(null); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { email: "", password: "", confirmPassword: "", }, }); async function onSubmit(values: z.infer) { const { email, password } = values; const res = await api .put>("/auth/signup", { email, password, }) .catch((e) => { console.error(e); setError( e.response?.data?.message || "An error occurred while signing up", ); }); if (res && res.status === 200) { setError(null); if (res.data.data.emailVerificationRequired) { router.push("/auth/verify-email"); return; } if (redirect && typeof redirect === "string") { window.location.href = redirect; } router.push("/"); } } return ( Create Account Enter your details to create an account
( Email )} /> ( Password )} /> ( Confirm Password )} /> {error && ( {error} )}
); }