import { Button } from '@/components/ui/button' import { Drawer, DrawerContent, DrawerOverlay } from '@/components/ui/drawer' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { getSharableEventId } from '@/lib/event' import { toNjump } from '@/lib/link' import { pubkeyToNpub } from '@/lib/pubkey' import { useMuteList } from '@/providers/MuteListProvider' import { useNostr } from '@/providers/NostrProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider' import { Bell, BellOff, Code, Copy, Ellipsis, Link } from 'lucide-react' import { Event } from 'nostr-tools' import { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import RawEventDialog from './RawEventDialog' export default function NoteOptions({ event, className }: { event: Event; className?: string }) { const { t } = useTranslation() const { isSmallScreen } = useScreenSize() const { pubkey } = useNostr() const [isRawEventDialogOpen, setIsRawEventDialogOpen] = useState(false) const [isDrawerOpen, setIsDrawerOpen] = useState(false) const { mutePubkeyPublicly, mutePubkeyPrivately, unmutePubkey, mutePubkeys } = useMuteList() const isMuted = useMemo(() => mutePubkeys.includes(event.pubkey), [mutePubkeys, event]) const trigger = ( ) const rawEventDialog = ( setIsRawEventDialogOpen(false)} /> ) if (isSmallScreen) { return (
e.stopPropagation()}> {trigger} setIsDrawerOpen(false)} />
{pubkey && (isMuted ? ( ) : ( <> ))}
{rawEventDialog}
) } return (
e.stopPropagation()}> {trigger} navigator.clipboard.writeText(getSharableEventId(event))} > {t('Copy event ID')} navigator.clipboard.writeText(pubkeyToNpub(event.pubkey) ?? '')} > {t('Copy user ID')} navigator.clipboard.writeText(toNjump(getSharableEventId(event)))} > {t('Copy share link')} setIsRawEventDialogOpen(true)}> {t('View raw event')} {pubkey && ( <> {isMuted ? ( unmutePubkey(event.pubkey)} className="text-destructive focus:text-destructive" > {t('Unmute user')} ) : ( <> mutePubkeyPrivately(event.pubkey)} className="text-destructive focus:text-destructive" > {t('Mute user privately')} mutePubkeyPublicly(event.pubkey)} className="text-destructive focus:text-destructive" > {t('Mute user publicly')} )} )} {rawEventDialog}
) }