"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({ name: "", institution: "", sscRoll: "", hscRoll: "", email: "", phone: "", password: "", }); 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 { sscRoll, hscRoll, password } = form; if (sscRoll === hscRoll) { 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
setForm({ ...form, name: value })} /> setForm({ ...form, institution: value }) } /> setForm({ ...form, sscRoll: value }) } /> setForm({ ...form, hscRoll: value }) } /> setForm({ ...form, email: value })} /> setForm({ ...form, phone: value })} /> setForm({ ...form, password: value }) } placeholder={undefined} />
{error && }

Already have an account? Login here

); }