import { getReplaceableCoordinateFromEvent, isReplaceableEvent } from '@/lib/event' import { NostrEvent } from 'nostr-tools' import { createContext, useCallback, useContext, useState } from 'react' type TDeletedEventContext = { addDeletedEvent: (event: NostrEvent) => void addDeletedEventId: (eventId: string) => void isEventDeleted: (event: NostrEvent) => boolean } const DeletedEventContext = createContext(undefined) export const useDeletedEvent = () => { const context = useContext(DeletedEventContext) if (!context) { throw new Error('useDeletedEvent must be used within a DeletedEventProvider') } return context } export function DeletedEventProvider({ children }: { children: React.ReactNode }) { const [deletedEventKeys, setDeletedEventKeys] = useState>(new Set()) const isEventDeleted = useCallback( (event: NostrEvent) => { return deletedEventKeys.has(getKey(event)) }, [deletedEventKeys] ) const addDeletedEvent = (event: NostrEvent) => { setDeletedEventKeys((prev) => new Set(prev).add(getKey(event))) } const addDeletedEventId = (eventId: string) => { setDeletedEventKeys((prev) => new Set(prev).add(eventId)) } return ( {children} ) } function getKey(event: NostrEvent) { return isReplaceableEvent(event.kind) ? getReplaceableCoordinateFromEvent(event) : event.id }