"use client"; import { useState } from "react"; import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { register } from "@/lib/auth"; import { useAuth } from "@/context/AuthContext"; import BackgroundWrapper from "@/components/BackgroundWrapper"; import FormField from "@/components/FormField"; import DestructibleAlert from "@/components/DestructibleAlert"; import { RegisterForm } from "@/types/auth"; interface ValidationErrorItem { type: string; loc: string[]; msg: string; input?: unknown; ctx?: Record; } interface CustomError extends Error { response?: { detail?: string | ValidationErrorItem; }; } export default function RegisterPage() { const { setToken } = useAuth(); const router = useRouter(); const [form, setForm] = useState({ full_name: "", username: "", email: "", password: "", phone_number: "", ssc_roll: 0, ssc_board: "", hsc_roll: 0, hsc_board: "", college: "", preparation_unit: "", }); const [error, setError] = useState(null); function formatError(error: unknown): string { if (error && typeof error === "object" && "response" in (error as any)) { const customError = error as CustomError; const detail = customError.response?.detail; if (typeof detail === "string") { return detail; // plain backend error string } if (Array.isArray(detail)) { // Pick the first validation error, or join them if multiple return detail.map((d) => d.msg).join("; "); } } if (error instanceof Error) { return error.message; } return "An unexpected error occurred."; } const validateForm = () => { const { ssc_roll, hsc_roll, password } = form; if (ssc_roll === hsc_roll) { return "SSC Roll and HSC Roll must be unique."; } const passwordRegex = /^(?=.*[A-Z])(?=.*[!@#$%^&*(),.?":{}|<>])[A-Za-z\d!@#$%^&*(),.?":{}|<>]{8,16}$/; if (!passwordRegex.test(password)) { return "Password must be 8-16 characters long, include at least one uppercase letter and one special character."; } return null; }; const createUser = async () => { const validationError = validateForm(); if (validationError) { setError(validationError); return; } try { await register(form, setToken); router.push("/login"); } catch (err: unknown) { setError(formatError(err)); console.error("User creation error: ", err); } }; return (
logo

Personal Info

setForm({ ...form, full_name: value }) } /> setForm({ ...form, username: value }) } /> setForm({ ...form, phone_number: value }) } /> setForm({ ...form, email: value })} /> setForm({ ...form, password: value }) } placeholder={undefined} />

Educational Background

setForm({ ...form, college: value }) } /> setForm({ ...form, preparation_unit: value }) } />
setForm({ ...form, ssc_board: value }) } /> setForm({ ...form, ssc_roll: Number(value) }) } className="max-w-26" />
setForm({ ...form, hsc_board: value }) } /> setForm({ ...form, hsc_roll: Number(value) }) } className="max-w-26" />
{error && }

Already have an account? Login here

); }