import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { User, Mail, Lock, LogOut, ArrowLeft, Eye, EyeOff } from 'lucide-react'; import Alert from '../components/Alert'; import './ProfilePage.css'; export default function ProfilePage({ voter, onLogout }) { const navigate = useNavigate(); const [showPassword, setShowPassword] = useState(false); const [showNewPassword, setShowNewPassword] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(''); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ nom: voter?.nom || '', email: voter?.email || '', currentPassword: '', newPassword: '', confirmPassword: '', }); const handleChange = (e) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleUpdateProfile = async (e) => { e.preventDefault(); setError(''); setSuccess(''); setLoading(true); try { const token = localStorage.getItem('token'); const response = await fetch('http://localhost:8000/auth/profile', { method: 'PUT', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}`, }, body: JSON.stringify({ nom: formData.nom, email: formData.email, }), }); if (!response.ok) throw new Error('Erreur lors de la mise à jour'); const data = await response.json(); localStorage.setItem('voter', JSON.stringify(data.voter)); setSuccess('Profil mis à jour avec succès'); } catch (err) { setError(err.message); } finally { setLoading(false); } }; const handleChangePassword = async (e) => { e.preventDefault(); setError(''); setSuccess(''); if (formData.newPassword !== formData.confirmPassword) { setError('Les mots de passe ne correspondent pas'); return; } if (formData.newPassword.length < 8) { setError('Le mot de passe doit contenir au moins 8 caractères'); return; } setLoading(true); try { const token = localStorage.getItem('token'); const response = await fetch('http://localhost:8000/auth/change-password', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}`, }, body: JSON.stringify({ current_password: formData.currentPassword, new_password: formData.newPassword, }), }); if (!response.ok) throw new Error('Mot de passe actuel incorrect'); setSuccess('Mot de passe changé avec succès'); setFormData(prev => ({ ...prev, currentPassword: '', newPassword: '', confirmPassword: '', })); } catch (err) { setError(err.message); } finally { setLoading(false); } }; const handleLogout = () => { localStorage.removeItem('voter'); localStorage.removeItem('token'); onLogout(); navigate('/'); }; return (
{voter?.email}
Attention: Ces actions sont irréversibles.