import { Button } from '@/components/ui/button' import { Drawer, DrawerContent, DrawerTrigger } from '@/components/ui/drawer' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { useMuteList } from '@/providers/MuteListProvider' import { useNostr } from '@/providers/NostrProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider' import { BellOff, Loader } from 'lucide-react' import { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import { toast } from 'sonner' export default function MuteButton({ pubkey }: { pubkey: string }) { const { t } = useTranslation() const { isSmallScreen } = useScreenSize() const { pubkey: accountPubkey, checkLogin } = useNostr() const { mutePubkeySet, changing, mutePubkeyPrivately, mutePubkeyPublicly, unmutePubkey } = useMuteList() const [updating, setUpdating] = useState(false) const isMuted = useMemo(() => mutePubkeySet.has(pubkey), [mutePubkeySet, pubkey]) if (!accountPubkey || (pubkey && pubkey === accountPubkey)) return null const handleMute = async (e: React.MouseEvent, isPrivate = true) => { e.stopPropagation() checkLogin(async () => { if (isMuted) return setUpdating(true) try { if (isPrivate) { await mutePubkeyPrivately(pubkey) } else { await mutePubkeyPublicly(pubkey) } } catch (error) { toast.error(`${t('Mute failed')}: ${(error as Error).message}`) } finally { setUpdating(false) } }) } const handleUnmute = async (e: React.MouseEvent) => { e.stopPropagation() checkLogin(async () => { if (!isMuted) return setUpdating(true) try { await unmutePubkey(pubkey) } catch (error) { toast.error(`${t('Unmute failed')}: ${(error as Error).message}`) } finally { setUpdating(false) } }) } if (isMuted) { return ( ) } const trigger = ( ) if (isSmallScreen) { return ( {trigger}
) } return ( {trigger} handleMute(e, true)} className="text-destructive focus:text-destructive" > {t('Mute user privately')} handleMute(e, false)} className="text-destructive focus:text-destructive" > {t('Mute user publicly')} ) }