"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 CustomError extends Error { response?: { detail?: string; }; } 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); const handleError = (error: { detail: string }) => { if (error?.detail) { const match = error.detail.match(/Key \((.*?)\)=\((.*?)\)/); if (match) { const field = match[1]; return `The ${field} already exists. Please try again.`; } } return "An unexpected error occurred. Please try again."; }; 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("/home"); } catch (error) { // Type guard for built-in Error type if (error instanceof Error) { console.error( "Error:", (error as CustomError).response || error.message ); const response = (error as CustomError).response; if (response?.detail) { const decodedError = handleError({ detail: response.detail }); setError(decodedError); } else { setError(error.message || "An unexpected error occurred."); } } else { // Fallback for non-standard errors console.error("Unexpected error:", error); setError("An unexpected error occurred."); } } }; 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

); }