useFetchEvent.tsx raw

   1  import { useDeletedEvent } from '@/providers/DeletedEventProvider'
   2  import client from '@/services/client.service'
   3  import { Event } from 'nostr-tools'
   4  import { useEffect, useState } from 'react'
   5  
   6  export function useFetchEvent(eventId?: string) {
   7    const { isEventDeleted } = useDeletedEvent()
   8    const [isFetching, setIsFetching] = useState(true)
   9    const [error, setError] = useState<Error | null>(null)
  10    const [event, setEvent] = useState<Event | undefined>(undefined)
  11  
  12    useEffect(() => {
  13      const fetchEvent = async () => {
  14        setIsFetching(true)
  15        if (!eventId) {
  16          setIsFetching(false)
  17          setError(new Error('No id provided'))
  18          return
  19        }
  20  
  21        const event = await client.fetchEvent(eventId)
  22        if (event && !isEventDeleted(event)) {
  23          setEvent(event)
  24        }
  25      }
  26  
  27      fetchEvent()
  28        .catch((err) => {
  29          console.error('Error fetching event in useFetchEvent:', eventId, err)
  30          setError(err as Error)
  31        })
  32        .finally(() => {
  33          setIsFetching(false)
  34        })
  35    }, [eventId])
  36  
  37    useEffect(() => {
  38      if (event && isEventDeleted(event)) {
  39        setEvent(undefined)
  40      }
  41    }, [isEventDeleted])
  42  
  43    return { isFetching, error, event }
  44  }
  45