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