import { Alert, AlertDescription } from "~/components/ui/alert"; import { AlertCircleIcon, IdCardIcon, LoaderCircle, LogIn, MailIcon } from "lucide-react"; import { Label } from "~/components/ui/label"; import { Input } from "~/components/ui/input"; import { Button } from "~/components/ui/button"; import { useEffect, useState } from "react"; import { AuthLayout } from "~/layout"; import { useNavigate, useSearchParams } from "react-router"; import { capitalizeFirstLetter } from "~/lib/utils"; import { Combobox } from "~/components/combobox"; import { getClasses, registerUser } from "~/lib/api"; export function meta() { return [ { title: "Khollisé - Inscription" }, { name: "description", content: "Connectez-vous à Khollisé" }, ]; } export default function Register() { const navigate = useNavigate(); const [searchParams] = useSearchParams(); const email = searchParams.get("email")!; const [emailFirst, emailLast] = getNameFromEmail(email); const [firstName, setFirstName] = useState(emailFirst); const [lastName, setLastName] = useState(emailLast); const [className, setClassName] = useState(""); const token = searchParams.get("token"); useEffect(() => { if (!email || !token) { navigate("/login", { replace: true }); return; } }, [email, token]); const [classes, setClasses] = useState<{ value: string; label: string }[]>([]); useEffect(() => { getClasses().then((data) => { setClasses(data); }) }, []); const [error, setError] = useState(null); const [isLoading, setIsLoading] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); // Validate inputs if (!firstName || !lastName) return setError("Veuillez compléter votre prénom et nom."); if (!className) return setError("Veuillez sélectionner votre classe."); setIsLoading(true); await registerUser(firstName, lastName, className, token!) .then(() => { setIsLoading(false); navigate("/", { replace: true, }) }) .catch((err) => { setIsLoading(false); setError(err.message); }); }; return (
setFirstName(capitalizeFirstLetter(e.target.value))} required />
setLastName(e.target.value.toUpperCase())} required />
{error && ( {error} )}
); } function getNameFromEmail(email: string): [string, string] { const parts = email.split("@")[0].split("."); if (parts.length < 2) return ["", ""]; const firstName = capitalizeFirstLetter(parts[0]); const lastName = parts.slice(1).join(" ").toUpperCase(); return [firstName, lastName]; }