import { zodResolver } from "@hookform/resolvers/zod"; import { InfoIcon } from "@phosphor-icons/react"; import axios from "axios"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { useNavigate } from "react-router-dom"; import { z } from "zod"; import authApiClient from "../api/apiClient"; import Logo from "../components/Logo"; import FormField from "../components/ui/FormField"; // validation logic const registerSchema = z .object({ full_name: z.string().min(2, "Name must be at least 2 characters"), email: z.email("Please enter a valid email"), password: z.string().min(8, "Password must be at least 8 characters"), confirm_password: z.string(), }) .refine((data) => data.password === data.confirm_password, { message: "Passwords don't match", path: ["confirm_password"], }); type RegisterInputs = z.infer; export default function Register() { const navigate = useNavigate(); const [isLoading, setIsLoading] = useState(false); const [apiError, setApiError] = useState(null); const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(registerSchema), }); const onSubmit = async (data: RegisterInputs) => { setIsLoading(true); setApiError(null); try { await authApiClient.post("/register/", { full_name: data.full_name, email: data.email, password: data.password, }); navigate("/verify-email"); } catch (err) { console.error("Registration error:", err); let message = "Registration failed. Please try again."; if (axios.isAxiosError(err)) { message = err.response?.data?.message || message; } setApiError(message); } finally { setIsLoading(false); } }; return (

Create a Account

{apiError && (
{apiError}
)} {/* Warning */}

Choose a password you won't forget.
There is no reset.{" "} If you lose it, your letters cannot be recovered.

); }