fixed post create response

This commit is contained in:
SlimusMinus
2026-07-29 00:59:15 +03:00
parent eb1c444c94
commit 0b169633d2
4 changed files with 124 additions and 13 deletions

View File

@@ -11,11 +11,10 @@ import { API_URL } from "../config/authConstants";
*
* Автоматически добавляет заголовок Authorization с JWT-токеном.
*
* @returns {{
* save: (id: string|null, data: FormData) => Promise<object|null>,
* loading: boolean,
* error: string,
* }}
* save() возвращает:
* { data } — успешный ответ сервера
* { blocked: true } — контент заблокирован модерацией
* null — серверная ошибка (свойство error содержит текст)
*/
export function usePostMutation() {
const [loading, setLoading] = useState(false);
@@ -24,7 +23,7 @@ export function usePostMutation() {
/**
* @param {string|null} id — id объявления при обновлении, null при создании
* @param {FormData} data — данные формы
* @returns {object|null} — ответ сервера или null при ошибке
* @returns {Promise<{data:object}|{blocked:boolean, reason:string}|null>}
*/
const save = async (id, data) => {
setLoading(true);
@@ -45,8 +44,18 @@ export function usePostMutation() {
throw new Error("Требуется авторизация. Войдите в аккаунт.");
}
if (!res.ok) throw new Error(`Ошибка сервера: ${res.status}`);
return await res.json();
if (!res.ok) {
let body;
try { body = await res.json(); } catch { body = null; }
if (body?.error === "CONTENT_BLOCKED") {
return { blocked: true, reason: body.reason || "" };
}
throw new Error(body?.message || `Ошибка сервера: ${res.status}`);
}
return { data: await res.json() };
} catch (e) {
setError(e.message || "Неизвестная ошибка");
return null;