import { Link } from 'react-router-dom'; import { Checkbox } from '@/components/ui/checkbox'; import { AlertCircle, Loader2, Check, X } from 'lucide-react'; import { useTranslation } from '@/hooks/useTranslation'; import { AuthInput } from '../AuthInput'; import { AuthButton } from '../AuthButton'; import { PasswordStrengthIndicator } from '../PasswordStrengthIndicator'; import type { RegisterFormData } from '../../types'; import type { FormErrors } from './useRegisterPage'; interface RegisterPageFormProps { formData: RegisterFormData; errors: FormErrors; acceptedTerms: boolean; onAcceptedTermsChange: (checked: boolean) => void; onErrorsChange: (updater: (prev: FormErrors) => FormErrors) => void; loading: boolean; error: Error | null; usernameAvailable: boolean | null; checkingUsername: boolean; onFieldChange: (field: keyof RegisterFormData, value: string) => void; onFieldBlur: (field: keyof RegisterFormData) => void; onSubmit: (e: React.FormEvent) => void; } export function RegisterPageForm({ formData, errors, acceptedTerms, onAcceptedTermsChange, onErrorsChange, loading, error, usernameAvailable, checkingUsername, onFieldChange, onFieldBlur, onSubmit, }: RegisterPageFormProps) { const { t } = useTranslation(); return (
{error && (

{error.message}

)}
{/* Username */}
onFieldChange('username', e.target.value)} onBlur={() => onFieldBlur('username')} required autoComplete="username" error={errors.username} /> {formData.username.length >= 3 && (
{checkingUsername ? (

{t('auth.register.usernameCheck.checking')}

) : usernameAvailable === true ? (

{t('auth.register.usernameCheck.available')}

) : usernameAvailable === false ? (

{t('auth.register.usernameCheck.unavailable')}

) : null}
)}
{/* Email */} onFieldChange('email', e.target.value)} onBlur={() => onFieldBlur('email')} required autoComplete="email" error={errors.email} /> {/* Password */}
onFieldChange('password', e.target.value)} onBlur={() => onFieldBlur('password')} required autoComplete="new-password" showPasswordToggle error={errors.password} />
{/* Confirm password */} onFieldChange('password_confirm', e.target.value)} onBlur={() => onFieldBlur('password_confirm')} required autoComplete="new-password" showPasswordToggle error={errors.password_confirm} />
{/* Terms */}
{ onAcceptedTermsChange(checked as boolean); if (errors.terms) onErrorsChange((prev) => ({ ...prev, terms: undefined })); }} required aria-invalid={errors.terms ? 'true' : 'false'} aria-describedby={errors.terms ? 'terms-description terms-error' : 'terms-description'} />

{t('auth.register.terms.description')}

{errors.terms && ( )} {loading ? ( <> {t('auth.register.loadingText')} ) : ( t('auth.register.registerButton') )}
); }