added functional my favorites posts

This commit is contained in:
SlimusMinus
2026-08-24 00:46:00 +03:00
parent d4f12e98d4
commit 1f0cbc50bf
8 changed files with 78 additions and 11 deletions

View File

@@ -36,7 +36,7 @@ export default function MainFeed() {
const location = useLocation();
const { user, token, isAuthenticated } = useAuthContext();
const { cities } = useCities();
const { loadFavorites } = useFavorites();
const { loadFavorites, loadFavoritePosts, error: favoritesError } = useFavorites();
const { t } = useTranslation();
const modals = useModals();
@@ -47,6 +47,8 @@ export default function MainFeed() {
const [searchQuery, setSearchQuery] = useState("");
const [liked, setLiked] = useState(new Set());
const [likeCountAdj, setLikeCountAdj] = useState({});
const [favoritePosts, setFavoritePosts] = useState([]);
const [favoritesLoading, setFavoritesLoading] = useState(false);
const feedRef = useRef(null);
@@ -144,6 +146,20 @@ export default function MainFeed() {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [activeNav, isAuthenticated, user?.id]);
// Загрузка избранных постов при переходе во вкладку «Избранное»
useEffect(() => {
if (activeNav !== "favorites") return;
if (!isAuthenticated || !token) return;
let cancelled = false;
setFavoritesLoading(true);
loadFavoritePosts().then(posts => {
if (cancelled) return;
setFavoritePosts(posts);
setFavoritesLoading(false);
});
return () => { cancelled = true; };
}, [activeNav, isAuthenticated, token, loadFavoritePosts]);
const sentinelRef = useInfiniteScroll(
() => feed.loadFeed(feed.page + 1, searchQuery, true),
activeNav === "home" && selectedCities.length === 0 && feed.hasMore && !feed.loading && !feed.loadingMore
@@ -194,6 +210,8 @@ export default function MainFeed() {
let result;
if (activeNav === "myads") {
result = myPosts.myAds;
} else if (activeNav === "favorites") {
result = favoritePosts;
} else if (selectedCities.length > 0) {
result = cityFeed.cityAds;
} else {
@@ -210,10 +228,18 @@ export default function MainFeed() {
result = result.filter(ad => ad.type === typeFilter);
}
return result;
}, [activeNav, myPosts.myAds, cityFeed.cityAds, feed.ads, selectedCities, typeFilter]);
}, [activeNav, myPosts.myAds, favoritePosts, cityFeed.cityAds, feed.ads, selectedCities, typeFilter]);
const listLoading = activeNav === "myads" ? myPosts.loading : feed.loading;
const listError = activeNav === "myads" ? myPosts.error : feed.error;
const listLoading = activeNav === "myads"
? myPosts.loading
: activeNav === "favorites"
? favoritesLoading
: feed.loading;
const listError = activeNav === "myads"
? myPosts.error
: activeNav === "favorites"
? favoritesError
: feed.error;
return (
<div className={`f-app${isSearchView ? " f-search-view" : ""}${isMapView ? " f-map-view" : ""}`}>