PinnedFeed.tsx raw
1 import NormalFeed from '@/components/NormalFeed'
2 import { useFeed } from '@/providers/FeedProvider'
3 import { useNostr } from '@/providers/NostrProvider'
4 import { usePinnedUsers } from '@/providers/PinnedUsersProvider'
5 import client from '@/services/client.service'
6 import { TFeedSubRequest } from '@/types'
7 import { useEffect, useRef, useState } from 'react'
8
9 export default function PinnedFeed() {
10 const { pubkey } = useNostr()
11 const { pinnedPubkeySet } = usePinnedUsers()
12 const { markFeedLoaded } = useFeed()
13 const [subRequests, setSubRequests] = useState<TFeedSubRequest[]>([])
14 const initializedRef = useRef(false)
15
16 useEffect(() => {
17 if (initializedRef.current) return
18
19 async function init() {
20 if (!pubkey || pinnedPubkeySet.size === 0) {
21 setSubRequests([])
22 return
23 }
24
25 initializedRef.current = true
26 const pinnedPubkeys = Array.from(pinnedPubkeySet)
27 setSubRequests(await client.generateSubRequestsForPubkeys(pinnedPubkeys, pubkey))
28 }
29
30 init()
31 }, [pubkey, pinnedPubkeySet])
32
33 return <NormalFeed subRequests={subRequests} isMainFeed enableSocialGraphFilter onInitialLoad={markFeedLoaded} />
34 }
35