import React, { useState, useEffect } from 'react'; import ProfilePDP from '../Components/ProfilePDP'; import SessionService from '../services/SessionService'; import AuthService from '../services/AuthService'; /* Style */ import './Profile.css' import Edit from "../res/icon/edit-pen.png" import Coche from '../res/icon/coche.png' import Cancel from '../res/icon/cancel.png' /* Nav */ import { useNavigate } from 'react-router-dom'; /* Context */ import { useAuth } from '../Contexts/AuthContext'; /* Boostrap */ import Button from 'react-bootstrap/Button'; import Alert from 'react-bootstrap/Alert'; import Modal from 'react-bootstrap/Modal'; import Form from 'react-bootstrap/Form'; import ProgressBar from 'react-bootstrap/ProgressBar'; import {basePath} from "../AdressSetup" //@ts-ignore const Profile = () => { const navigate = useNavigate(); const [editingUsername, setEditingUsername] = useState(false); const {isLoggedIn, login, logout, user, setUserData, manager } = useAuth(); const [newUsername, setNewUsername] = useState(user?.pseudo); useEffect(() => { if (user == null){ manager.userService.fetchUserInformation().then(([user, loggedIn]) =>{ if (user!=null){ if (loggedIn){ login() setUserData(user) } } }) } }, [isLoggedIn]); const handleLogout = () => { logout(); navigate(`${basePath}/`); }; // @ts-ignore const onUsernameChange = (newUsername) => { if(user?.pseudo != null){ SessionService.UpdatePseudo(user.pseudo, newUsername) user.pseudo = newUsername; } } const handleUsernameChange = () => { // Maj du pseudo onUsernameChange(newUsername); // Désactiver le mode d'édition setEditingUsername(false); }; //* Gestion de la modification du mot de passe : // Modal de modification du mot de passe const [showPasswordModal, setShowPasswordModal] = useState(false); const [showWrongPassword, setShowWrongPassword] = useState(false); const [showCorrectPassword, setShowCorrectPassword] = useState(false); // Etat du mot de passe const [oldPassword, setOldPassword] = useState(''); const [newPassword, setNewPassword] = useState(''); // Etat de l'étape const [step, setStep] = useState(1); const [DisableNextStep, setDisableNextStep] = useState(true); // Etat du nouveau mot de passe const [confirmNewPassword, setConfirmNewPassword] = useState(''); const [ percent, setpercent] = useState(0); const handleShowPasswordModal = () => { setShowPasswordModal(true); }; const handleClosePasswordModal = () => { setShowPasswordModal(false); }; //* Vérification de l'ancien mot de passe : const handleConfirmedAuth = async () => { // Vérification de l'ancien mot de passe if(user){ try { if (await AuthService.validatePassword(user?.pseudo, oldPassword)) { console.log('Ancien mot de passe correct.'); setShowWrongPassword(false); setShowCorrectPassword(true); setDisableNextStep(false); setpercent(25); } } catch (error) { console.error(error); setShowWrongPassword(true); setShowCorrectPassword(false); setDisableNextStep(true); } } } const handleChangeStep = () => { setShowWrongPassword(false); setShowCorrectPassword(false); setpercent(50); setStep(2) } //* Modification du mot de passe : const handlePasswordChange = async () => { //Effectuer la modification du mot de passe // sinon, affichez une erreur if(user){ if (newPassword === confirmNewPassword) { await AuthService.updatePassword(user.pseudo, newPassword); console.log('Changement de mot de passe'); setpercent(100); setTimeout(async () => { setShowPasswordModal(false); }, 1250); } else { //les mots de passe ne correspondent pas console.error("Les mots de passe ne correspondent pas."); setShowWrongPassword(true); setTimeout(async () => { setShowWrongPassword(false); }, 1250); } } }; //@ts-ignore const handleOldPasswordChange = (e) => { setOldPassword(e.target.value); setpercent(13); }; //@ts-ignore const handleNewPasswordChange = (e) => { setpercent(63); setNewPassword(e.target.value); }; //@ts-ignore const handleConfirmNewPasswordChange = (e) => { setConfirmNewPassword(e.target.value); setpercent(75); }; //* Gestion Modal de suppression : const [showDeleteModal, setShowDeleteModal] = useState(false); const handleShowDeleteModal = () => { setShowDeleteModal(true); }; const handleCloseDeleteModal = () => { setShowDeleteModal(false); }; //* Confirmation avec la phrase : const [confirmationPhrase, setConfirmationPhrase] = useState(''); const [showWrong, setShowWrong] = useState(false); //@ts-ignore const handleConfirmationPhraseChange = (e) => { setConfirmationPhrase(e.target.value); }; const handleDeleteAccount = () => { // Verification de la phrase if (confirmationPhrase.toLowerCase() === 'supprimer mon compte') { console.log('Compte supprimé !'); if(user!= null){ const pseudo = user.pseudo; logout(); AuthService.delAccount(pseudo); } else{ console.error("l'utilisateur ne peut pas être null") } handleCloseDeleteModal(); navigate(`${basePath}/`) } else { console.error('Phrase de confirmation incorrecte.'); setShowWrong(true); setTimeout(async () => { setShowWrong(false); }, 3000); } }; return ( <>

Mon Compte

{editingUsername ? (
setNewUsername(e.target.value)} />
) : (

{user?.pseudo}

) }
{!editingUsername ? ( ) : ( Vous êtes en mode "édition". )} {/* Modal de modification de mdp */} {`Étape ${step}`} {/* */} {step === 1 && ( <>

Entrez votre ancien mot de passe :

)} {step === 2 && ( <>

Entrez votre nouveau mot de passe :


Confirmez votre nouveau mot de passe :

)} {showWrongPassword && ( Ancien mot de passe incorrect. )} {showCorrectPassword && ( Ancien mot de passe correct. )}
{step === 1 && ( )} {step === 2 ? ( ) : ( )}
<> {!editingUsername && ( ) } {/* Modal de suppression */} Confirmation de suppression

Pour confirmer la suppression de votre compte, veuillez entrer la phrase : "supprimer mon compte".

{ showWrong && La phrase de confirmation est incorrecte. }
{/* Bouton de déconnexion */}
); }; export default Profile;