'use client'; import { useState } from 'react'; import { Card, Input, Button, PasswordStrengthIndicator } from '@zen/core/shared/components'; import AuthPageHeader from '../components/AuthPageHeader.js'; export default function SetupAccountPage({ onSubmit, onNavigate, email, token }) { const [error, setError] = useState(''); const [isLoading, setIsLoading] = useState(false); const [success, setSuccess] = useState(''); const [formData, setFormData] = useState({ newPassword: '', confirmPassword: '' }); const validatePassword = (password) => { const errors = []; if (password.length < 8) errors.push('Le mot de passe doit contenir au moins 8 caractères'); if (password.length > 128) errors.push('Le mot de passe doit contenir 128 caractères ou moins'); if (!/[A-Z]/.test(password)) errors.push('Le mot de passe doit contenir au moins une majuscule'); if (!/[a-z]/.test(password)) errors.push('Le mot de passe doit contenir au moins une minuscule'); if (!/\d/.test(password)) errors.push('Le mot de passe doit contenir au moins un chiffre'); return errors; }; const isFormValid = () => { return validatePassword(formData.newPassword).length === 0 && formData.newPassword === formData.confirmPassword && formData.newPassword.length > 0; }; async function handleSubmit(e) { e.preventDefault(); setError(''); setSuccess(''); setIsLoading(true); const passwordErrors = validatePassword(formData.newPassword); if (passwordErrors.length > 0) { setError(passwordErrors[0]); setIsLoading(false); return; } if (formData.newPassword !== formData.confirmPassword) { setError('Les mots de passe ne correspondent pas'); setIsLoading(false); return; } const submitData = new FormData(); submitData.append('newPassword', formData.newPassword); submitData.append('confirmPassword', formData.confirmPassword); submitData.append('email', email); submitData.append('token', token); try { const result = await onSubmit(submitData); if (result.success) { setSuccess(result.message); setIsLoading(false); setTimeout(() => onNavigate('login'), 2000); } else { setError(result.error || 'Impossible de créer le mot de passe'); setIsLoading(false); } } catch (err) { console.error('Setup account error:', err); setError('Une erreur inattendue s\'est produite'); setIsLoading(false); } } return ( {error && !success && (
{error}
)} {success && (
{success}
)}
setFormData(prev => ({ ...prev, newPassword: value }))} placeholder="••••••••" disabled={!!success} minLength="8" maxLength="128" autoComplete="new-password" required />
setFormData(prev => ({ ...prev, confirmPassword: value }))} placeholder="••••••••" disabled={!!success} minLength="8" maxLength="128" autoComplete="new-password" required />
); }