import { Link } from 'react-router-dom'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Checkbox } from '@/components/ui/checkbox'; import { Loader2 } from 'lucide-react'; 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) { return (
{error && (
{error.message}
)}
onFieldChange('username', e.target.value)} onBlur={() => onFieldBlur('username')} required autoComplete="username" aria-invalid={errors.username ? 'true' : 'false'} /> {errors.username && (

{errors.username}

)} {formData.username.length >= 3 && (
{checkingUsername ? (

Vérification en cours Vérification en cours...

) : usernameAvailable === true ? (

Disponible: Ce nom d'utilisateur est disponible

) : usernameAvailable === false ? (

Indisponible: Ce nom d'utilisateur est déjà pris

) : null}
)}
onFieldChange('email', e.target.value)} onBlur={() => onFieldBlur('email')} required autoComplete="email" aria-invalid={errors.email ? 'true' : 'false'} /> {errors.email && (

{errors.email}

)}
onFieldChange('password', e.target.value)} onBlur={() => onFieldBlur('password')} required autoComplete="new-password" aria-invalid={errors.password ? 'true' : 'false'} /> {errors.password && (

{errors.password}

)}
onFieldChange('password_confirm', e.target.value)} onBlur={() => onFieldBlur('password_confirm')} required autoComplete="new-password" aria-invalid={errors.password_confirm ? 'true' : 'false'} /> {errors.password_confirm && (

{errors.password_confirm}

)}
{ onAcceptedTermsChange(checked as boolean); if (errors.terms) onErrorsChange((prev) => ({ ...prev, terms: undefined })); }} required aria-invalid={errors.terms ? 'true' : 'false'} aria-describedby={errors.terms ? 'terms-error' : 'terms-description'} />

Vous devez accepter les conditions d'utilisation et la politique de confidentialité pour créer un compte

{errors.terms && ( )}
); }