feat: add try-delete post option
This commit is contained in:
parent
905ef99e0e
commit
13527a3ca7
21 changed files with 241 additions and 97 deletions
43
src/providers/DeletedEventProvider.tsx
Normal file
43
src/providers/DeletedEventProvider.tsx
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue