You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

43 lines
1.3 KiB

import { getReplaceableCoordinateFromEvent, isReplaceableEvent } from '@/lib/event'
import { NostrEvent } from 'nostr-tools'
import { createContext, useCallback, useContext, useState } from 'react'
type TDeletedEventContext = {
addDeletedEvent: (event: NostrEvent) => void
isEventDeleted: (event: NostrEvent) => boolean
}
const DeletedEventContext = createContext<TDeletedEventContext | undefined>(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<Set<string>>(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)))
}
return (
<DeletedEventContext.Provider value={{ addDeletedEvent, isEventDeleted }}>
{children}
</DeletedEventContext.Provider>
)
}
function getKey(event: NostrEvent) {
return isReplaceableEvent(event.kind) ? getReplaceableCoordinateFromEvent(event) : event.id
}