{dropdownOpen && (
-
-
setDropdownOpen(false)}
- >
- Profile
-
-
- {/* КНОПКА SETTINGS */}
-
setDropdownOpen(false)}
- >
- Settings
-
-
-
-
-
+
+ setDropdownOpen(false)}>Profile
+
)}
@@ -133,16 +107,11 @@ export const Header: React.FC = () => {
setMenuOpen(false)}>Titles
setMenuOpen(false)}>Users
setMenuOpen(false)}>About
-
{username ? (
-
- setMenuOpen(false)}>Profile
-
- {/* SETTINGS (Mobile) */}
- setMenuOpen(false)}>Settings
-
-
-
+ <>
+
setMenuOpen(false)}>Profile
+
+ >
) : (
setMenuOpen(false)}>Login
)}
diff --git a/modules/frontend/src/pages/SettingsPage/SettingsPage.tsx b/modules/frontend/src/pages/SettingsPage/SettingsPage.tsx
index f525baf..16c7e9e 100644
--- a/modules/frontend/src/pages/SettingsPage/SettingsPage.tsx
+++ b/modules/frontend/src/pages/SettingsPage/SettingsPage.tsx
@@ -1,235 +1,154 @@
-import React, { useEffect, useState, useRef } from "react";
-import { updateUser, getUsersId } from "../../api";
-import { useNavigate } from "react-router-dom";
-import { useCookies } from 'react-cookie';
+// import React, { useEffect, useState } from "react";
+// import { updateUser, getUsersId } from "../../api";
+// import { useNavigate } from "react-router-dom";
-export const SettingsPage: React.FC = () => {
- const [cookies] = useCookies(['xsrf_token']);
- const xsrfToken = cookies['xsrf_token'] || null;
+// export const SettingsPage: React.FC = () => {
+// const navigate = useNavigate();
- const navigate = useNavigate();
- const fileInputRef = useRef
(null);
+// const userId = Number(localStorage.getItem("user_id"));
+// const initialNickname = localStorage.getItem("user_name") || "";
+// const [mail, setMail] = useState("");
+// const [nickname, setNickname] = useState(initialNickname);
+// const [dispName, setDispName] = useState("");
+// const [userDesc, setUserDesc] = useState("");
+// const [avatarId, setAvatarId] = useState(null);
- const userId = Number(localStorage.getItem("user_id"));
-
- // Состояния для полей формы
- const [mail, setMail] = useState("");
- const [nickname, setNickname] = useState("");
- const [dispName, setDispName] = useState("");
- const [userDesc, setUserDesc] = useState("");
- const [avatarId, setAvatarId] = useState(null);
- const [avatarUrl, setAvatarUrl] = useState(null);
+// const [loading, setLoading] = useState(false);
+// const [success, setSuccess] = useState(null);
+// const [error, setError] = useState(null);
- const [loading, setLoading] = useState(false);
- const [uploading, setUploading] = useState(false);
- const [success, setSuccess] = useState(null);
- const [error, setError] = useState(null);
+// useEffect(() => {
+// const fetch = async () => {
+// const res = await getUsersId({
+// path: { user_id: String(userId) },
+// });
- // Загружаем текущие данные пользователя при входе
- useEffect(() => {
- const fetchUserData = async () => {
- try {
- const res = await getUsersId({
- path: { user_id: String(userId) },
- });
- if (res.data) {
- setMail(res.data.mail || "");
- setNickname(res.data.nickname || "");
- setDispName(res.data.disp_name || "");
- setUserDesc(res.data.user_desc || "");
- setAvatarId(res.data.image?.id ?? null);
- const path = res.data.image?.image_path;
- setAvatarUrl(path ? (path.startsWith('http') ? path : `/media/${path}`) : null);
- }
- } catch (err) {
- console.error("Failed to fetch user:", err);
- }
- };
- fetchUserData();
- }, [userId]);
+// setProfile(res.data);
+// };
- // Обработка загрузки файла
-const handleFileChange = async (e: React.ChangeEvent) => {
- const file = e.target.files?.[0];
- if (!file) return;
+// fetch();
+// }, [userId]);
- setUploading(true);
- setError(null);
- setSuccess(null);
+// const saveSettings = async (e: React.FormEvent) => {
+// e.preventDefault();
+// setLoading(true);
+// setSuccess(null);
+// setError(null);
- const formData = new FormData();
- formData.append("image", file);
+// try {
+// const res = await updateUser({
+// path: { user_id: userId },
+// body: {
+// ...(mail ? { mail } : {}),
+// ...(nickname ? { nickname } : {}),
+// ...(dispName ? { disp_name: dispName } : {}),
+// ...(userDesc ? { user_desc: userDesc } : {}),
+// ...(avatarId !== undefined ? { avatar_id: avatarId } : {}),
+// }
+// });
- try {
- // 1. Загружаем файл на сервер (POST)
- const uploadRes = await fetch("/api/v1/media/upload", {
- method: "POST",
- body: formData,
- headers: {
- "X-XSRF-TOKEN": xsrfToken || "",
- },
- });
+// // Обновляем локальное отображение username
+// if (nickname) {
+// localStorage.setItem("user_name", nickname);
+// window.dispatchEvent(new Event("storage")); // чтобы Header обновился
+// }
- if (!uploadRes.ok) throw new Error("Failed to upload image to storage");
+// setSuccess("Settings updated!");
+// setTimeout(() => navigate("/profile"), 800);
- const uploadData = await uploadRes.json();
- const newAvatarId = uploadData.id;
+// } catch (err: any) {
+// console.error(err);
+// setError(err?.message || "Failed to update settings");
+// } finally {
+// setLoading(false);
+// }
+// };
- if (newAvatarId) {
- // 2. СРАЗУ отправляем PATCH запрос для обновления профиля пользователя
- await updateUser({
- path: { user_id: userId },
- body: {
- avatar_id: newAvatarId, // Привязываем новый ID к юзеру
- },
- headers: { "X-XSRF-TOKEN": xsrfToken },
- });
+// return (
+//
+//
User Settings
- // 3. Обновляем локальный стейт для отображения
- setAvatarId(newAvatarId);
- const path = uploadData.image_path;
- setAvatarUrl(path ? (path.startsWith("/") ? path : `/media/${path}`) : null);
-
- setSuccess("Avatar updated successfully!");
- }
- } catch (err: any) {
- console.error("Upload & Patch error:", err);
- setError(err.message || "Failed to update avatar");
- } finally {
- setUploading(false);
- }
-};
+// {success &&
{success}
}
+// {error &&
{error}
}
- const saveSettings = async (e: React.FormEvent) => {
- e.preventDefault();
- setLoading(true);
- setSuccess(null);
- setError(null);
+//
+//
+// );
+// };
diff --git a/modules/frontend/src/pages/TitlesPage/TitlesPage.tsx b/modules/frontend/src/pages/TitlesPage/TitlesPage.tsx
index b5fb266..727e072 100644
--- a/modules/frontend/src/pages/TitlesPage/TitlesPage.tsx
+++ b/modules/frontend/src/pages/TitlesPage/TitlesPage.tsx
@@ -9,7 +9,6 @@ import { getTitles, type CursorObj, type Title, type TitleSort } from "../../api
import { LayoutSwitch } from "../../components/LayoutSwitch/LayoutSwitch";
import { Link } from "react-router-dom";
import { type TitlesFilter, TitlesFilterPanel } from "../../components/TitlesFilterPanel/TitlesFilterPanel";
-import { authClient } from "../../api/AuthClient/AuthClient";
const PAGE_SIZE = 10;
@@ -52,12 +51,7 @@ export default function TitlesPage() {
offset: PAGE_SIZE,
fields: "all",
},
- client: authClient,
- },);
-
- if (response.response.status === 403) {
-
- }
+ });
return {
items: response.data?.data ?? [],
diff --git a/modules/frontend/src/pages/UserPage/UserPage.tsx b/modules/frontend/src/pages/UserPage/UserPage.tsx
index 91c263f..1a8ba1e 100644
--- a/modules/frontend/src/pages/UserPage/UserPage.tsx
+++ b/modules/frontend/src/pages/UserPage/UserPage.tsx
@@ -155,7 +155,7 @@ export default function UserPage({ userId }: UserPageProps) {
{errorUser && {errorUser}
}
{user && (
-

+
{user.disp_name || user.nickname}
{user.mail &&
{user.mail}
}
{user.user_desc &&
{user.user_desc}
}