import { OnboardingData } from "@/pages/Onboarding"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { ArrowLeft, ArrowRight } from "lucide-react"; import { useAuth } from "@/contexts/AuthContext"; import { useState } from "react"; interface PersonalInfoProps { data: OnboardingData; updateData: (data: Partial) => void; nextStep: () => void; prevStep: () => void; } export default function PersonalInfo({ data, updateData, nextStep, prevStep, }: PersonalInfoProps) { const { user, signUp } = useAuth(); const [submitting, setSubmitting] = useState(false); const handleInputChange = (field: string, value: string) => { updateData({ personalInfo: { ...data.personalInfo, [field]: value, }, }); }; const passwordsValid = () => { if (user) return true; const pwd = data.personalInfo.password?.trim() || ""; const confirm = data.personalInfo.confirmPassword?.trim() || ""; return pwd.length >= 8 && pwd === confirm; }; const isValid = data.personalInfo.firstName && data.personalInfo.lastName && data.personalInfo.email && passwordsValid(); const getUserTypeLabel = () => { switch (data.userType) { case "game-developer": return "Game Development"; case "client": return "Consulting"; case "member": return "Community"; case "customer": return "Get Started"; default: return "User"; } }; const handleContinue = async () => { if (!isValid) return; if (!user) { try { setSubmitting(true); const fullName = `${data.personalInfo.firstName} ${data.personalInfo.lastName}`.trim(); const userTypeMap: Record = { "game-developer": "game_developer", client: "client", member: "community_member", customer: "customer", }; await signUp( data.personalInfo.email, data.personalInfo.password || "", { full_name: fullName, user_type: userTypeMap[data.userType || "member"] as any, username: data.personalInfo.firstName.replace(/\s+/g, "_") || "user", } as any, ); } catch (e) { setSubmitting(false); return; // error toast handled by AuthContext } } setSubmitting(false); nextStep(); }; return (

Tell us a bit about yourself, {getUserTypeLabel().toLowerCase()}

handleInputChange("firstName", e.target.value)} placeholder="Enter your first name" className="bg-background/50 border-border/50 focus:border-aethex-400" />
handleInputChange("lastName", e.target.value)} placeholder="Enter your last name" className="bg-background/50 border-border/50 focus:border-aethex-400" />
handleInputChange("email", e.target.value)} placeholder="Enter your email address" className="bg-background/50 border-border/50 focus:border-aethex-400" />
{!user && ( <>
handleInputChange("password", e.target.value)} placeholder="Create a password" className="bg-background/50 border-border/50 focus:border-aethex-400" />
handleInputChange("confirmPassword", e.target.value) } placeholder="Re-enter password" className="bg-background/50 border-border/50 focus:border-aethex-400" />
)} {(data.userType === "client" || data.userType === "game-developer") && (
handleInputChange("company", e.target.value)} placeholder={ data.userType === "client" ? "Enter your company name" : "Enter your company/organization (optional)" } className="bg-background/50 border-border/50 focus:border-aethex-400" />
)}

* Required fields

); }