fixed post create response
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user