added all feeds for admin

This commit is contained in:
SlimusMinus
2026-10-02 01:50:42 +03:00
parent 510bfc06f2
commit 841bf091d4
11 changed files with 778 additions and 141 deletions

View File

@@ -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;