added all feeds for admin
This commit is contained in:
@@ -11,15 +11,22 @@ import { apiFetch } from "../api/apiClient";
|
||||
* id передан → PUT /api/v1/posts/:id (обновление)
|
||||
* id не передан → POST /api/v1/posts (создание)
|
||||
*
|
||||
* В режиме adminMode (правка чужого объявления из админ-панели) используется
|
||||
* PUT /api/v1/admin/posts/:id. Создание через админку не поддерживается:
|
||||
* приходит без id — падаем обратно на пользовательский POST.
|
||||
*
|
||||
* Авторизация (Authorization header + авто-обновление токена при истечении)
|
||||
* обрабатывается внутри apiFetch.
|
||||
*
|
||||
* save() возвращает:
|
||||
* { data } — успешный ответ сервера
|
||||
* { blocked: true } — контент заблокирован модерацией
|
||||
* null — серверная ошибка (свойство error содержит текст)
|
||||
* { ok: true, data } — успешный ответ сервера (data может быть null,
|
||||
* если бэкенд ответил без тела)
|
||||
* { blocked: true } — контент заблокирован модерацией
|
||||
* null — серверная ошибка (свойство error содержит текст)
|
||||
*
|
||||
* @param {{adminMode?: boolean}} [options]
|
||||
*/
|
||||
export function usePostMutation() {
|
||||
export function usePostMutation({ adminMode = false } = {}) {
|
||||
const { t } = useTranslation();
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState("");
|
||||
@@ -27,13 +34,16 @@ export function usePostMutation() {
|
||||
/**
|
||||
* @param {string|null} id — id объявления при обновлении, null при создании
|
||||
* @param {FormData} data — данные формы
|
||||
* @returns {Promise<{data:object}|{blocked:boolean, reason:string}|null>}
|
||||
* @returns {Promise<{ok:true,data:object|null}|{blocked:boolean, reason:string}|null>}
|
||||
*/
|
||||
const save = async (id, data) => {
|
||||
setLoading(true);
|
||||
setError("");
|
||||
try {
|
||||
const url = id ? `${API_URL}/api/v1/posts/${id}` : `${API_URL}/api/v1/posts`;
|
||||
const isAdminEdit = adminMode && !!id;
|
||||
const url = isAdminEdit
|
||||
? `${API_URL}/api/v1/admin/posts/${id}`
|
||||
: (id ? `${API_URL}/api/v1/posts/${id}` : `${API_URL}/api/v1/posts`);
|
||||
const method = id ? "PUT" : "POST";
|
||||
const res = await apiFetch(url, {
|
||||
method,
|
||||
@@ -51,7 +61,9 @@ export function usePostMutation() {
|
||||
throw new Error(body?.message || t('post.serverError', { status: res.status }));
|
||||
}
|
||||
|
||||
return { data: await res.json() };
|
||||
let payload = null;
|
||||
try { payload = await res.json(); } catch { payload = null; }
|
||||
return { ok: true, data: payload };
|
||||
} catch (e) {
|
||||
setError(e.message || t('post.unknownError'));
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user