'use client' import {useContext, useState} from 'react'; import {Mail, Lock, User, KeyRound, ArrowLeft} from 'lucide-react'; import {useTranslations} from "@/lib/i18n"; import {AlertContext} from "@/context/AlertContext"; import {LangContext, LangContextProps} from "@/context/LangContext"; import {verifyInput} from "@/lib/utils/validation"; import {apiPostPublic} from "@/lib/api/client"; import {Link} from "@/lib/navigation"; import Button from "@/components/ui/Button"; import InputField from "@/components/form/InputField"; import TextInput from "@/components/form/TextInput"; export default function Register() { const t = useTranslations(); const {errorMessage, successMessage} = useContext(AlertContext); const {lang} = useContext(LangContext); const [step, setStep] = useState(1); const [username, setUsername] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [repeatPassword, setRepeatPassword] = useState(''); const [verifyCode, setVerifyCode] = useState(''); const [isConfirmed, setIsConfirmed] = useState(false); async function handleStepOne(): Promise { if (!username || !password || !repeatPassword || !email) { errorMessage(t('registerStepOne.error.requiredFields')); return; } if (username.length < 3 || username.length > 50) { errorMessage(t('registerStepOne.error.usernameLength')); return; } if (verifyInput(username) || verifyInput(password) || verifyInput(repeatPassword) || verifyInput(email)) { errorMessage(t('registerStepOne.error.invalidInput')); return; } if (password !== repeatPassword) { errorMessage(t('registerStepOne.error.passwordMismatch')); return; } try { const response: string = await apiPostPublic('register/pre', { username, email, password, retypePass: repeatPassword }, lang); if (!response) { errorMessage(t('registerStepOne.error.preRegister')); return; } successMessage(t('registerStepOne.success.preRegister')); setStep(2); } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } else { errorMessage(t('registerStepOne.error.unknown')); } } } async function handleVerifyCode(): Promise { if (verifyCode === '') { errorMessage(t('registerStepTwo.error.codeIncorrect')); return; } try { const response: boolean = await apiPostPublic('register/verify-code', { verifyCode, email, }, lang); if (!response) { errorMessage(t('registerStepTwo.error.codeIncorrect')); return; } setIsConfirmed(true); successMessage(t('registerStepTwo.success.verified')); } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } else { errorMessage(t('registerStepTwo.error.unknown')); } } } return (
ERitors

{t('registerPage.title')}

{t('registerPage.subtitle')}

{step === 1 && !isConfirmed && ( <>
= 1 ? 'bg-primary' : 'bg-secondary'}`}>
= 2 ? 'bg-primary' : 'bg-secondary'}`}>
setUsername(e.target.value)} placeholder={t('registerStepOne.fields.username.placeholder')}/> }/>

{t('registerStepOne.fields.username.note')}

setEmail(e.target.value)} placeholder={t('registerStepOne.fields.email.placeholder')}/> }/>

{t('registerStepOne.fields.password.label')}

setPassword(e.target.value)} required/>

{t('registerStepOne.fields.repeatPassword.label')}

setRepeatPassword(e.target.value)} required/>
)} {step === 2 && !isConfirmed && ( <>

{t('registerStepTwo.instructions.sent')}

{t('registerStepTwo.instructions.checkInbox')}

setVerifyCode(e.target.value)} placeholder={t('registerStepTwo.fields.code.placeholder')}/> }/>
)} {isConfirmed && ( <>

{t('registerStepTwo.confirmed')}

)}
); }