"use client"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import axios from "axios"; import { useState } from "react"; import Link from "next/link"; import { CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { toast } from "sonner"; import { useRouter } from "next/navigation"; import Cookies from "js-cookie"; import { registerUser } from "@/actions/user"; export default function CreateAccount() { const [username, setUsername] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [acceptTerms, setAcceptTerms] = useState(false); const [loading, setLoading] = useState(false); const [feedback, setFeedback] = useState< undefined | { kind: "error" | "info"; message: string } >(); const router = useRouter(); const validateInput = (): | { kind: "error" | "info"; message: string } | undefined => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; const usernameRegex = /^[a-zA-Z0-9_]{3,20}$/; if (!emailRegex.test(email)) { return { kind: "error", message: "Invalid email format." }; } if (!usernameRegex.test(username)) { return { kind: "error", message: "Username must be 3-20 characters and only letters, numbers, or underscores.", }; } if (password.length < 6) { return { kind: "error", message: "Password must be at least 6 characters long.", }; } if (password !== confirmPassword) { return { kind: "error", message: "Passwords do not match." }; } if (!acceptTerms) { return { kind: "error", message: "You must accept the terms to sign up.", }; } return; }; const signup = async () => { setFeedback(undefined); const validationError = validateInput(); if (validationError) { setFeedback(validationError); return; } try { setLoading(true); const response = await registerUser(username, email, password); if (response.email_sent) { toast.info( "We sent you a verification email. Please verify to continue." ); setFeedback({ message: "We sent you a verification email. Please verify to continue.", kind: "info", }); Cookies.set("verify_temp_email", email); Cookies.set("verify_temp_password", password); router.push(`/verify`); Cookies.set("servers", ""); localStorage.clear(); } else { setFeedback({ message: response.message, kind: "error" }); } } catch (err: any) { setFeedback({ kind: "error", message: err.response?.data?.message || "Signup failed. Please try again later.", }); } finally { setLoading(false); } }; return ( <> Create an Account Email setEmail(e.target.value)} placeholder="john@example.com" type="email" /> Username setUsername(e.target.value)} placeholder="john_doe" /> Password setPassword(e.target.value)} type="password" /> Confirm Password setConfirmPassword(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") signup(); }} type="password" /> {feedback && (
{feedback.message}
)}
); }