added advertising

This commit is contained in:
SlimusMinus
2026-09-23 23:38:54 +03:00
parent 3661985a6a
commit 4e20315998
33 changed files with 3351 additions and 18 deletions

View File

@@ -1,4 +1,9 @@
import { useMemo } from "react";
import PostOnFeed from "../../pages/PostOnFeed";
import AdSlot from "../AdSlot";
import { withAds } from "../../utils/withAds";
const AD_EVERY = 10;
export default function FeedContent({
loading,
@@ -17,8 +22,16 @@ export default function FeedContent({
onImageClick,
onLocationClick,
onAuthRequired,
showAds = false,
t,
}) {
// Реклама вставляется только на главной ленте (showAds). useMemo — чтобы
// при ре-рендерах (виждет-обновления, лайки и т.п.) позиции слотов не
// пересчитывались и уже загруженные объявления не терялись.
const feedItems = useMemo(
() => withAds(filteredAds, showAds ? AD_EVERY : 0),
[filteredAds, showAds]
);
if (loading || (citySearchActive && cityLoading)) {
return (
<div className="f-center">
@@ -68,20 +81,28 @@ export default function FeedContent({
);
}
return filteredAds.map(ad => (
<PostOnFeed
key={ad.id}
ad={ad}
liked={liked.has(ad.id)}
likeCountAdj={likeCountAdj[ad.id] || 0}
onLike={onLike}
onEdit={activeNav === "myads" ? onEdit : undefined}
onDelete={activeNav === "myads" ? onDelete : undefined}
onMarkFound={activeNav === "myads" ? onMarkFound : undefined}
isOwner={activeNav === "myads"}
onImageClick={onImageClick}
onLocationClick={onLocationClick}
onAuthRequired={onAuthRequired}
/>
));
return (
<>
{feedItems.map((item) =>
item.kind === "ad" ? (
<AdSlot key={item.key} />
) : (
<PostOnFeed
key={item.data.id}
ad={item.data}
liked={liked.has(item.data.id)}
likeCountAdj={likeCountAdj[item.data.id] || 0}
onLike={onLike}
onEdit={activeNav === "myads" ? onEdit : undefined}
onDelete={activeNav === "myads" ? onDelete : undefined}
onMarkFound={activeNav === "myads" ? onMarkFound : undefined}
isOwner={activeNav === "myads"}
onImageClick={onImageClick}
onLocationClick={onLocationClick}
onAuthRequired={onAuthRequired}
/>
)
)}
</>
);
}