index.tsx raw

   1  import { ExtendedKind } from '@/constants'
   2  import { useStuff } from '@/hooks/useStuff'
   3  import { getReplaceableCoordinateFromEvent, isReplaceableEvent } from '@/lib/event'
   4  import client from '@/services/client.service'
   5  import { TFeedSubRequest } from '@/types'
   6  import { Event, Filter, kinds } from 'nostr-tools'
   7  import { useEffect, useState } from 'react'
   8  import NoteList from '../NoteList'
   9  
  10  export default function QuoteList({ stuff }: { stuff: Event | string }) {
  11    const { event, externalContent } = useStuff(stuff)
  12    const [subRequests, setSubRequests] = useState<TFeedSubRequest[]>([])
  13  
  14    useEffect(() => {
  15      async function init() {
  16        const relaySet = new Set(client.currentRelays)
  17        const filters: Filter[] = []
  18        if (event) {
  19          const relayList = await client.fetchRelayList(event.pubkey)
  20          relayList.read.slice(0, 5).forEach((url) => relaySet.add(url))
  21          const seenOn = client.getSeenEventRelayUrls(event.id)
  22          seenOn.forEach((url) => relaySet.add(url))
  23  
  24          const isReplaceable = isReplaceableEvent(event.kind)
  25          const key = isReplaceable ? getReplaceableCoordinateFromEvent(event) : event.id
  26          filters.push({
  27            '#q': [key],
  28            kinds: [
  29              kinds.ShortTextNote,
  30              kinds.LongFormArticle,
  31              ExtendedKind.COMMENT,
  32              ExtendedKind.POLL
  33            ]
  34          })
  35          if (isReplaceable) {
  36            filters.push({
  37              '#a': [key],
  38              kinds: [kinds.Highlights]
  39            })
  40          } else {
  41            filters.push({
  42              '#e': [key],
  43              kinds: [kinds.Highlights]
  44            })
  45          }
  46        }
  47        if (externalContent) {
  48          filters.push({
  49            '#r': [externalContent],
  50            kinds: [kinds.Highlights]
  51          })
  52        }
  53        const urls = Array.from(relaySet)
  54        setSubRequests(filters.map((filter) => ({ urls, filter })))
  55      }
  56  
  57      init()
  58    }, [event])
  59  
  60    return <NoteList subRequests={subRequests} />
  61  }
  62