import React, { useState, useEffect } from 'react'; import axios from 'axios'; import { useNavigate } from 'react-router-dom'; import Header from './Header'; const Profile = () => { const [user, setUser] = useState(null); const [userName, setUserName] = useState(null); const [error, setError] = useState(''); const [showConfirm, setShowConfirm] = useState(false); // Состояние для поп-апа const [ShowConfirmUserName, setShowConfirmUserName] = useState(false); const [new_username, setnew_username] = useState(''); const [ShowConfirmName, setShowConfirmName] = useState(false); //const [display_name, setdisplay_name] = useState(''); const [new_display_name, setnew_display_name] = useState(''); const navigate = useNavigate(); const [showChangePassword, setShowChangePassword] = useState(false); const [old_password, setold_password] = useState(''); const [new_password, setnew_password] = useState(''); const [new_password_confirm, setnew_password_confirm] = useState(''); const [passwordError, setPasswordError] = useState(''); useEffect(() => { const checkSession = async () => { try { const response = await axios.get('/api/users/me'); setUser(response.data.display_name); setUserName(response.data.username) } catch (err) { // Если нет сессии - редирект на логин setError('Вы не авторизованы'); setTimeout(() => { window.location.href = '/login'; }, 1500); } }; checkSession(); }, []); const handleLogout = async () => { try { await axios.post('/api/users/logout'); setUser(null); window.location.href = '/login'; // Редирект после выхода } catch (err) { setError('Ошибка'); } }; const NewDisplayName = async (e) => { e.preventDefault(); setError(''); try { await axios.put('api/users/change_display_name', {new_display_name}, { withCredentials: true /*headers: { 'Content-Type': 'application/json' }*/ } ); setShowConfirmName(false); try { const response = await axios.get('/api/users/me'); setUser(response.data.display_name); setUserName(response.data.username); } catch (err) { // Если нет сессии - редирект на логин setError('Вы не авторизованы'); setTimeout(() => { window.location.href = '/login'; }, 1500); } } catch (err) { setError(err.response.data.detail || 'Ошибка входа'); } }; const NewUserName = async (e) => { e.preventDefault(); setError(''); try { await axios.put('api/users/change_username', {new_username}, { withCredentials: true /*headers: { 'Content-Type': 'application/json' }*/ } ); setShowConfirmUserName(false); try { const response = await axios.get('/api/users/me'); setUserName(response.data.username); setUser(response.data.display_name); } catch (err) { // Если нет сессии - редирект на логин setError('Вы не авторизованы'); } } catch (err) { setError(err.response.data.detail || 'Ошибка входа'); } }; const changePassword = async (e) => { e.preventDefault(); setPasswordError(''); try { const NewPassword = {old_password, new_password, new_password_confirm} await axios.put('/api/users/change_password', NewPassword , { withCredentials: true }); alert('Пароль успешно изменён!'); setShowChangePassword(false); setold_password(''); setnew_password(''); setnew_password_confirm(''); } catch (err) { setPasswordError( err.response?.data?.detail || 'Ошибка при смене пароля' ); } }; const OpenWindowDelete = () => { setShowConfirm(true); // Показываем окно подтверждения }; const closeWindowDelete = () => { setShowConfirm(false); }; const OpenWindowName = () => { setShowConfirmName(true); // Показываем окно подтверждения }; const closeWindowName = () => { setShowConfirmName(false); }; const OpenWindowUserName = () => { setShowConfirmUserName(true); // Показываем окно подтверждения }; const closeWindowUserName = () => { setShowConfirmUserName(false); // Показываем окно подтверждения }; const deleteAccount = async () => { try { await axios.delete('/api/users/me', { withCredentials: true }); setUser(null); window.location.href = '/login'; setShowConfirm(false); // Закрываем окно после удаления } catch (err) { setError('Ошибка удаления'); setShowConfirm(false); // Закрываем окно при ошибке } }; return ( <>
{ error &&
{error}
} {user && (

Привет, {user}! Добро пожаловать в личный кабинет.

Здесь ты сможешь управлять данными своей учётной записи.

Информация об учётной записи

Отображаемое имя

{user}

Логин

{userName}

Изменить пароль

В целях безопасности мы рекомендуем выбрать пароль, который ещё не использовался вами в других учётных записях.
)} {ShowConfirmUserName && (

Обновите логин

Текущий логин: {userName}

Новый логин
setnew_username(e.target.value)} required />
)} {ShowConfirmName && (

Обновите отображаемое имя

Текущее отображаемое имя: {user}

Новое отображаемое имя
setnew_display_name(e.target.value)} required />
)} {showChangePassword && (

Изменить пароль

{passwordError && (
{passwordError}
)}
setold_password(e.target.value)} required />
setnew_password(e.target.value)} required />
setnew_password_confirm(e.target.value)} required />
)} {/* Всплывающее окно подтверждения */} {showConfirm && (

Вы действительно хотите удалить аккаунта?

)}
); }; export default Profile;