import { SignupData } from "@vertesia/common"; import { Button, Input, RadioGroup, SelectBox } from "@vertesia/ui/core"; import { User } from "firebase/auth"; import { useEffect, useState } from "react"; import { getFirebaseAuth } from "@vertesia/ui/session"; import { useUITranslation } from '../../i18n/index.js'; interface CompanySizeOption { id: number; label: string; } interface SignupFormProps { onSignup: (data: SignupData, fbToken: string) => void; goBack: () => void; } export default function SignupForm({ onSignup, goBack }: SignupFormProps) { const { t } = useUITranslation(); const [accountType, setAccountType] = useState(undefined); const [companySize, setCompanySize] = useState(undefined); const [companyName, setCompanyName] = useState(undefined); const [companyWebsite, setCompanyWebsite] = useState(undefined); const [projectMaturity, setProjectMaturity] = useState(undefined); const [fbUser, setFbUser] = useState(undefined); const [error, setError] = useState(undefined); const isCompany = accountType === "company"; const companySizeOptions: CompanySizeOption[] = [ { id: 1, label: t('signup.size1to10') }, { id: 11, label: t('signup.size11to100') }, { id: 101, label: t('signup.size101to1000') }, { id: 1001, label: t('signup.size1001to5000') }, { id: 5001, label: t('signup.size5000plus') }, ]; const accountTypeOptions = [ { id: "personal", label: t('signup.personal'), description: t('signup.personalDescription'), }, { id: "company", label: t('signup.company'), description: t('signup.companyDescription'), }, ]; const projectMaturityOptions = [ { id: "testing", label: t('signup.justTesting') }, { id: "exploring", label: t('signup.activelyExploring') }, { id: "using", label: t('signup.alreadyUsing') }, { id: "migrating", label: t('signup.migratingLLMs') }, { id: "other", label: t('signup.other') }, ]; useEffect(() => { const user = getFirebaseAuth().currentUser; if (!user) { console.error('No user found'); return; } setFbUser(user); }, [fbUser]); const isValid = () => { if (!accountType) { setError(t('signup.pleaseSelectAccountType')); return false; } if (isCompany && !companyName) { setError(t('signup.pleaseEnterOrgName')); return false; } if (isCompany && !companySize) { setError(t('signup.pleaseSelectCompanySize')); return false; } return true } const onSubmit = async () => { if (!isValid()) return; if (!accountType) return; const signupData = { accountType: accountType, companyName: companyName, companySize: companySize?.id, companyWebsite: companyWebsite, maturity: projectMaturity, }; window.localStorage.setItem("composableSignupData", JSON.stringify(signupData)); const fbToken = await getFirebaseAuth().currentUser?.getIdToken(); console.log('Got firebase token', getFirebaseAuth(), fbToken); if (!fbToken) { console.error('No firebase token found'); return; } onSignup(signupData, fbToken); } return (

{t('signup.welcomeMessage', { name: fbUser?.displayName, email: fbUser?.email })}

{error &&
{error}
}
option.id === accountType)} onSelect={(option) => setAccountType(option.id)} /> {isCompany && <> option?.label} placeholder={t('signup.selectCompanySize')} /> } option.id === projectMaturity)} optionLabel={(option) => option?.label} placeholder={t('signup.selectProjectMaturity')} onChange={(option) => setProjectMaturity(option?.id)} />
); } function FormItem({ label, children }: { label: string, children: React.ReactNode }) { return (
{label}
{children}
) }