import {useState} from "react"; import {API_URL} from "../config/authConstants"; import {apiFetch} from "../api/apiClient"; /** * useUpdateProfile — хук для обновления профиля пользователя. * Отправляет PUT /api/v1/users/{id} с FormData (поддерживает загрузку аватара). */ export function useUpdateProfile() { const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const updateProfile = async (userId, profileData) => { setLoading(true); setError(""); try { // Используем FormData — чтобы отправить файл аватара вместе с текстовыми полями const formData = new FormData(); formData.append("id", userId); formData.append("firstName", profileData.firstName || ""); formData.append("lastName", profileData.lastName || ""); formData.append("login", profileData.login || ""); formData.append("phone", profileData.phone || ""); formData.append("email", profileData.email || ""); // Если avatar — это File (новый файл), отправляем как часть FormData if (profileData.avatar instanceof File) { formData.append("avatar", profileData.avatar); } const res = await apiFetch(`${API_URL}/api/v1/users/${userId}`, { method: "PUT", body: formData, }); if (!res.ok) { const data = await res.json().catch(() => ({})); throw new Error(data.message || `Ошибка ${res.status}`); } return await res.json(); } catch (err) { setError(err.message || "Failed to save profile"); return null; } finally { setLoading(false); } }; return { updateProfile, loading, error }; }