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