added working pages animal and thing

This commit is contained in:
SlimusMinus
2026-06-11 00:50:48 +03:00
parent 63ce7765df
commit 36179ed4bb
3 changed files with 23 additions and 7 deletions

View File

@@ -26,7 +26,7 @@ export default function CreateUpdatePost({ onClose, onSuccess, initialData }) {
const [form, setForm] = useState( const [form, setForm] = useState(
isEdit isEdit
? { ? {
type: initialData.type || "loss", type: (initialData.type || "loss").toLowerCase(),
title: initialData.title || "", title: initialData.title || "",
description: initialData.description || "", description: initialData.description || "",
category: initialData.category || "", category: initialData.category || "",
@@ -100,7 +100,7 @@ export default function CreateUpdatePost({ onClose, onSuccess, initialData }) {
} }
const data = new FormData(); const data = new FormData();
data.append("type", form.type); data.append("type", form.type.toUpperCase()); // "loss" → "LOSS", "found" → "FOUND" для enum на бэкенде
data.append("title", form.title.trim()); data.append("title", form.title.trim());
data.append("description", form.description.trim()); data.append("description", form.description.trim());
data.append("category", form.category); data.append("category", form.category);

View File

@@ -38,7 +38,13 @@ export default function MainFeed() {
if (!res.ok) throw new Error(`Ошибка ${res.status}`); if (!res.ok) throw new Error(`Ошибка ${res.status}`);
const data = await res.json(); const data = await res.json();
// API может вернуть массив напрямую или объект { items: [] } // API может вернуть массив напрямую или объект { items: [] }
setAds(Array.isArray(data) ? data : (data.items ?? [])); const ads = Array.isArray(data) ? data : (data.items ?? []);
// Нормализуем type: enum LOSS/FOUND → "loss"/"found"
const normalizedAds = ads.map(ad => ({
...ad,
type: ad.type ? ad.type.toLowerCase() : "loss"
}));
setAds(normalizedAds);
} catch (err) { } catch (err) {
setError(err.message || "Не удалось загрузить объявления"); setError(err.message || "Не удалось загрузить объявления");
} finally { } finally {
@@ -66,6 +72,17 @@ export default function MainFeed() {
const handleNewAd = useCallback(() => loadFeed(), [loadFeed]); const handleNewAd = useCallback(() => loadFeed(), [loadFeed]);
const handleEditSave = useCallback(() => loadFeed(), [loadFeed]); const handleEditSave = useCallback(() => loadFeed(), [loadFeed]);
// Фильтруем объявления в зависимости от выбранной вкладки
const filteredAds = activeNav === "Главная"
? ads
: ads.filter(ad =>
activeNav === "Вещи"
? ["Вещь", "Другое"].includes(ad.category)
: activeNav === "Питомцы"
? ad.category === "Питомец"
: false
);
/** /**
* Рендерит содержимое ленты в зависимости от текущего состояния: * Рендерит содержимое ленты в зависимости от текущего состояния:
* — спиннер во время загрузки * — спиннер во время загрузки
@@ -93,7 +110,7 @@ export default function MainFeed() {
</div> </div>
); );
} }
if (!ads.length) { if (!filteredAds.length) {
return ( return (
<div className="f-center"> <div className="f-center">
<div className="f-center-icon">🔍</div> <div className="f-center-icon">🔍</div>
@@ -104,7 +121,7 @@ export default function MainFeed() {
</div> </div>
); );
} }
return ads.map(ad => ( return filteredAds.map(ad => (
<PostOnFeed <PostOnFeed
key={ad.id} key={ad.id}
ad={ad} ad={ad}

View File

@@ -13,8 +13,7 @@ export const NAV_BOTTOM = [
]; ];
export const CATEGORIES = [ export const CATEGORIES = [
"Документы", "Электроника", "Животные", "Вещь", "Питомец", "Другое",
"Ключи", "Одежда", "Украшения", "Другое",
]; ];
// ─── EMPTY FORM ─────────────────────────────────────────────────────────────── // ─── EMPTY FORM ───────────────────────────────────────────────────────────────