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 (
<>
Привет, {user}! Добро пожаловать в личный кабинет.
Информация об учётной записи
{user}
{userName}
Изменить пароль
Текущий логин: {userName}
Текущее отображаемое имя: {user}
Вы действительно хотите удалить аккаунта?