Skip to content

Commit 2fa11a1

Browse files
committed
feat: enhance Feed component to include ad items and update FeedItemData type
1 parent eb8b120 commit 2fa11a1

3 files changed

Lines changed: 44 additions & 8 deletions

File tree

src/features/feed/components/Feed.tsx

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { PropagateLoader } from 'react-spinners'
33
import { useGetFeed } from 'src/features/cards'
44
import { trackFeedScroll } from 'src/lib/analytics'
55
import { useUserPreferences } from 'src/stores/preferences'
6+
import { FeedItemData } from 'src/types'
67
import './feed.css'
7-
import { AdvFeedItem } from './feedItems/AdvFeedItem'
88
import { FeedItem } from './feedItems/FeedItem'
99

1010
export const Feed = () => {
@@ -20,9 +20,31 @@ export const Feed = () => {
2020
fetchNextPage,
2121
} = useGetFeed({
2222
tags: userSelectedTags.map((tag) => tag.label.toLocaleLowerCase()),
23+
config: {
24+
select: (data) => {
25+
return {
26+
...data,
27+
pages: data.pages.map((page, pageIndex) => {
28+
const items = page.data
29+
const result: FeedItemData[] = []
30+
items.forEach((item, index) => {
31+
result.push(item)
32+
if (pageIndex == 0 && index === 2) {
33+
result.push({ type: 'ad', id: `ad-${pageIndex}-${index}` })
34+
}
35+
})
36+
37+
return {
38+
...page,
39+
data: result,
40+
}
41+
}),
42+
}
43+
},
44+
},
2345
})
2446

25-
const [infiniteRef, {rootRef}] = useInfiniteScroll({
47+
const [infiniteRef, { rootRef }] = useInfiniteScroll({
2648
loading: isLoading,
2749
hasNextPage: Boolean(hasNextPage),
2850
onLoadMore: () => {
@@ -51,10 +73,6 @@ export const Feed = () => {
5173

5274
return (
5375
<div ref={rootRef} className="feed scrollable" style={{ overflow: 'auto', maxHeight: '100%' }}>
54-
55-
<div key={`adv`} className="feedItem">
56-
<AdvFeedItem />
57-
</div>
5876
{(feed?.pages.flatMap((page) => page.data) || []).map((article, index) => {
5977
return (
6078
<div key={article.id} className="feedItem">

src/features/feed/components/feedItems/FeedItem.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { BaseItemPropsType, FeedItemData } from 'src/types'
2+
import { AdvFeedItem } from './AdvFeedItem'
23
import { ArticleFeedItem } from './ArticleFeedItem'
34
import { ProductFeedItem } from './ProductFeedItem'
45
import { RepoFeedItem } from './RepoFeedItem'
@@ -18,5 +19,9 @@ export const FeedItem = (props: BaseItemPropsType<FeedItemData>) => {
1819
return <ArticleFeedItem item={item} index={index} analyticsTag={analyticsTag} />
1920
}
2021

22+
if (item.type === 'ad') {
23+
return <AdvFeedItem />
24+
}
25+
2126
return null
2227
}

src/types/index.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,16 @@ export type GithubFeedItemData = FeedItem & {
7979
description?: string
8080
}
8181

82-
export type FeedItemData = ArticleFeedItemData | GithubFeedItemData | ProductHuntFeedItemData
82+
export type AdFeedItemData = {
83+
id: string
84+
type: 'ad'
85+
}
86+
87+
export type FeedItemData =
88+
| ArticleFeedItemData
89+
| GithubFeedItemData
90+
| ProductHuntFeedItemData
91+
| AdFeedItemData
8392

8493
export type Repository = BaseEntry & {
8594
programmingLanguage: string
@@ -118,7 +127,11 @@ export type CardPropsType = {
118127
withAds: boolean
119128
}
120129

121-
export type BaseItemPropsType<T extends BaseEntry> = {
130+
export type BaseItemPropsType<
131+
T extends {
132+
id: string
133+
}
134+
> = {
122135
index: number
123136
item: T
124137
analyticsTag: string

0 commit comments

Comments
 (0)