'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import AlertModal from './AlertModal'; interface UserProfile { id: string; email: string; name: string | null; photoUrl: string | null; role: { id: string; name: string; description: string | null; } | null; } export default function ModifierCompteContent() { const router = useRouter(); const [loading, setLoading] = useState(false); const [loadingProfile, setLoadingProfile] = useState(true); const [alertModal, setAlertModal] = useState<{ show: boolean; type: 'success' | 'error' | 'info' | 'warning'; title: string; message: string; } | null>(null); const [formData, setFormData] = useState({ name: '', email: '', currentPassword: '', newPassword: '', confirmPassword: '', }); const [profile, setProfile] = useState(null); useEffect(() => { fetchProfile(); }, []); const fetchProfile = async () => { try { const response = await fetch('/api/user/profile'); if (response.ok) { const data = await response.json(); setProfile(data); setFormData({ name: data.name || '', email: data.email || '', currentPassword: '', newPassword: '', confirmPassword: '', }); } } catch (error) { console.error('Erreur lors du chargement du profil:', error); setAlertModal({ show: true, type: 'error', title: 'Erreur', message: 'Erreur lors du chargement du profil', }); } finally { setLoadingProfile(false); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); // Vérifier que les mots de passe correspondent si un nouveau mot de passe est fourni if (formData.newPassword && formData.newPassword !== formData.confirmPassword) { setAlertModal({ show: true, type: 'error', title: 'Erreur', message: 'Les mots de passe ne correspondent pas', }); setLoading(false); return; } try { const updateData: any = { name: formData.name, email: formData.email, }; // Ajouter le changement de mot de passe si fourni if (formData.newPassword) { updateData.currentPassword = formData.currentPassword; updateData.newPassword = formData.newPassword; } const response = await fetch('/api/user/profile', { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(updateData), }); if (response.ok) { setAlertModal({ show: true, type: 'success', title: 'Succès', message: 'Votre profil a été mis à jour avec succès', }); // Réinitialiser les champs de mot de passe setFormData({ ...formData, currentPassword: '', newPassword: '', confirmPassword: '', }); // Recharger le profil fetchProfile(); } else { const error = await response.json(); setAlertModal({ show: true, type: 'error', title: 'Erreur', message: error.error || 'Une erreur est survenue', }); } } catch (error) { console.error('Erreur:', error); setAlertModal({ show: true, type: 'error', title: 'Erreur', message: 'Une erreur est survenue', }); } finally { setLoading(false); } }; if (loadingProfile) { return (
Chargement...
); } return (

Modifier mon compte

Gérez vos informations personnelles et votre mot de passe

{/* Nom */}
setFormData({ ...formData, name: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" placeholder="Votre nom" />
{/* Email */}
setFormData({ ...formData, email: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" placeholder="votre@email.com" />
{/* Rôle (lecture seule) */} {profile?.role && (
{profile.role.name}
)} {/* Séparateur */}

Changer le mot de passe

Laissez ces champs vides si vous ne souhaitez pas changer votre mot de passe

{/* Mot de passe actuel */}
setFormData({ ...formData, currentPassword: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" placeholder="Entrez votre mot de passe actuel" />
{/* Nouveau mot de passe */}
setFormData({ ...formData, newPassword: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" placeholder="Entrez votre nouveau mot de passe" />
{/* Confirmer le mot de passe */}
setFormData({ ...formData, confirmPassword: e.target.value })} className="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-gray-900 focus:outline-none focus:ring-2 focus:ring-lblue focus:border-transparent" placeholder="Confirmez votre nouveau mot de passe" />
{/* Boutons */}
{/* Modal d'alerte */} {alertModal && ( setAlertModal(null)} /> )}
); }