diff --git a/src/components/BookmarkButton/index.tsx b/src/components/BookmarkButton/index.tsx index b051545f..6c536098 100644 --- a/src/components/BookmarkButton/index.tsx +++ b/src/components/BookmarkButton/index.tsx @@ -1,7 +1,7 @@ import { Skeleton } from '@/components/ui/skeleton' import { getReplaceableCoordinateFromEvent, isReplaceableEvent } from '@/lib/event' import { NostrContext } from '@/providers/nostr-context' -import { useBookmarksOptional } from '@/providers/BookmarksProvider' +import { useBookmarksOptional } from '@/providers/bookmarks-context' import { BookmarkIcon } from 'lucide-react' import { Event } from 'nostr-tools' import { useContext, useMemo, useState } from 'react' diff --git a/src/components/ContentPreview/FollowPackPreview.tsx b/src/components/ContentPreview/FollowPackPreview.tsx index c3c560ca..962c9493 100644 --- a/src/components/ContentPreview/FollowPackPreview.tsx +++ b/src/components/ContentPreview/FollowPackPreview.tsx @@ -5,6 +5,7 @@ import logger from '@/lib/logger' import { cn } from '@/lib/utils' import { useFollowListOptional } from '@/providers/FollowListProvider' import { useMuteList } from '@/contexts/mute-list-context' +import { muteSetHas } from '@/lib/mute-set' import { useNostr } from '@/providers/NostrProvider' import { Event } from 'nostr-tools' import { Users } from 'lucide-react' @@ -67,7 +68,7 @@ export default function FollowPackPreview({ const followingSet = useMemo(() => new Set(followings), [followings]) const availablePubkeys = useMemo( - () => packPubkeys.filter((p) => !mutePubkeySet.has(p)), + () => packPubkeys.filter((p) => !muteSetHas(mutePubkeySet, p)), [packPubkeys, mutePubkeySet] ) const alreadyFollowingAll = @@ -83,9 +84,9 @@ export default function FollowPackPreview({ } if (!followList) return const { follow } = followList - const toFollow = packPubkeys.filter((p) => !followingSet.has(p) && !mutePubkeySet.has(p)) + const toFollow = packPubkeys.filter((p) => !followingSet.has(p) && !muteSetHas(mutePubkeySet, p)) if (toFollow.length === 0) { - const mutedCount = packPubkeys.filter((p) => mutePubkeySet.has(p) && !followingSet.has(p)).length + const mutedCount = packPubkeys.filter((p) => muteSetHas(mutePubkeySet, p) && !followingSet.has(p)).length if (mutedCount > 0) { toast.info(t('All available members are already followed or muted')) } else { diff --git a/src/components/ContentPreview/index.tsx b/src/components/ContentPreview/index.tsx index 6c840516..758550ef 100644 --- a/src/components/ContentPreview/index.tsx +++ b/src/components/ContentPreview/index.tsx @@ -12,6 +12,7 @@ import { import { cn } from '@/lib/utils' import { useContentPolicyOptional } from '@/providers/ContentPolicyProvider' import { useMuteListOptional } from '@/contexts/mute-list-context' +import { muteSetHas } from '@/lib/mute-set' import { Event, kinds } from 'nostr-tools' import { useMemo } from 'react' import { useTranslation } from 'react-i18next' @@ -78,7 +79,7 @@ export default function ContentPreview({ const contentPolicy = useContentPolicyOptional() const hideContentMentioningMutedUsers = contentPolicy?.hideContentMentioningMutedUsers ?? false const isMuted = useMemo( - () => (event ? mutePubkeySet.has(event.pubkey) : false), + () => (event ? muteSetHas(mutePubkeySet, event.pubkey) : false), [mutePubkeySet, event] ) const isMentioningMuted = useMemo( diff --git a/src/components/FavoriteRelaysActiveStrip/RelayPulseActiveNpubsSheet.tsx b/src/components/FavoriteRelaysActiveStrip/RelayPulseActiveNpubsSheet.tsx index 20004ffd..3e01f676 100644 --- a/src/components/FavoriteRelaysActiveStrip/RelayPulseActiveNpubsSheet.tsx +++ b/src/components/FavoriteRelaysActiveStrip/RelayPulseActiveNpubsSheet.tsx @@ -15,6 +15,7 @@ import { truncateAbout } from '@/lib/relay-pulse-nip05' import { useMuteList } from '@/contexts/mute-list-context' +import { muteSetHas } from '@/lib/mute-set' import { useFavoriteRelaysActivity } from '@/providers/favorite-relays-activity-context' import { SecondaryPageLink } from '@/PageManager' import type { Event } from 'nostr-tools' @@ -133,14 +134,14 @@ export function RelayPulseActiveNpubsSheet() { const followWithProfile = useMemo( () => followPubkeys.filter( - (pk) => profileKind0ByPubkey[pk] && !mutePubkeySet.has(pk) + (pk) => profileKind0ByPubkey[pk] && !muteSetHas(mutePubkeySet, pk) ), [followPubkeys, profileKind0ByPubkey, mutePubkeySet] ) const othersWithProfile = useMemo( () => otherPubkeys.filter( - (pk) => profileKind0ByPubkey[pk] && !mutePubkeySet.has(pk) + (pk) => profileKind0ByPubkey[pk] && !muteSetHas(mutePubkeySet, pk) ), [otherPubkeys, profileKind0ByPubkey, mutePubkeySet] ) diff --git a/src/components/FavoriteRelaysActiveStrip/index.tsx b/src/components/FavoriteRelaysActiveStrip/index.tsx index c5390c38..b33bbf76 100644 --- a/src/components/FavoriteRelaysActiveStrip/index.tsx +++ b/src/components/FavoriteRelaysActiveStrip/index.tsx @@ -6,6 +6,7 @@ import { cn } from '@/lib/utils' import { useNostr } from '@/providers/NostrProvider' import { usePrimaryPage } from '@/contexts/primary-page-context' import { useMuteList } from '@/contexts/mute-list-context' +import { muteSetHas } from '@/lib/mute-set' import { useFavoriteRelaysActivity } from '@/providers/favorite-relays-activity-context' import { RelayPulseActiveNpubsOpenButton } from './RelayPulseActiveNpubsSheet' import type { TFunction } from 'i18next' @@ -231,14 +232,14 @@ export function FavoriteRelaysActiveStripMobileBar({ className }: { className?: const followPubkeysForAvatars = useMemo( () => followPubkeys.filter( - (pk) => profileKind0ByPubkey[pk] && !mutePubkeySet.has(pk) + (pk) => profileKind0ByPubkey[pk] && !muteSetHas(mutePubkeySet, pk) ), [followPubkeys, profileKind0ByPubkey, mutePubkeySet] ) const otherPubkeysForAvatars = useMemo( () => otherPubkeys.filter( - (pk) => profileKind0ByPubkey[pk] && !mutePubkeySet.has(pk) + (pk) => profileKind0ByPubkey[pk] && !muteSetHas(mutePubkeySet, pk) ), [otherPubkeys, profileKind0ByPubkey, mutePubkeySet] ) @@ -338,14 +339,14 @@ export function FavoriteRelaysActiveStripSidebar({ className }: { className?: st const followPubkeysForAvatars = useMemo( () => followPubkeys.filter( - (pk) => profileKind0ByPubkey[pk] && !mutePubkeySet.has(pk) + (pk) => profileKind0ByPubkey[pk] && !muteSetHas(mutePubkeySet, pk) ), [followPubkeys, profileKind0ByPubkey, mutePubkeySet] ) const otherPubkeysForAvatars = useMemo( () => otherPubkeys.filter( - (pk) => profileKind0ByPubkey[pk] && !mutePubkeySet.has(pk) + (pk) => profileKind0ByPubkey[pk] && !muteSetHas(mutePubkeySet, pk) ), [otherPubkeys, profileKind0ByPubkey, mutePubkeySet] ) diff --git a/src/components/FollowButton/index.tsx b/src/components/FollowButton/index.tsx index be1b228b..295363f3 100644 --- a/src/components/FollowButton/index.tsx +++ b/src/components/FollowButton/index.tsx @@ -13,6 +13,7 @@ import { Button } from '@/components/ui/button' import { Skeleton } from '@/components/ui/skeleton' import { useFollowListOptional } from '@/providers/FollowListProvider' import { useMuteList } from '@/contexts/mute-list-context' +import { muteSetHas } from '@/lib/mute-set' import { useNostr } from '@/providers/NostrProvider' import { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' @@ -28,7 +29,7 @@ export default function FollowButton({ pubkey }: { pubkey: string }) { const followings = followList?.followings ?? [] const isFollowing = useMemo(() => followings.includes(pubkey), [followings, pubkey]) - const isMuted = useMemo(() => mutePubkeySet.has(pubkey), [mutePubkeySet, pubkey]) + const isMuted = useMemo(() => muteSetHas(mutePubkeySet, pubkey), [mutePubkeySet, pubkey]) if (!followList || !accountPubkey || (pubkey && pubkey === accountPubkey)) return null diff --git a/src/components/LatestFromFollowsSection/index.tsx b/src/components/LatestFromFollowsSection/index.tsx index 923337fc..6511535c 100644 --- a/src/components/LatestFromFollowsSection/index.tsx +++ b/src/components/LatestFromFollowsSection/index.tsx @@ -20,6 +20,7 @@ import { useSecondaryPage } from '@/PageManager' import { useDeletedEvent } from '@/providers/DeletedEventProvider' import { useFavoriteRelays } from '@/providers/FavoriteRelaysProvider' import { useMuteList } from '@/contexts/mute-list-context' +import { muteSetHas } from '@/lib/mute-set' import { useNostr } from '@/providers/NostrProvider' import { useUserTrust } from '@/contexts/user-trust-context' import { queryService, replaceableEventService } from '@/services/client.service' @@ -167,7 +168,7 @@ export default function LatestFromFollowsSection({ if (!feedKindSet.has(e.kind)) return false if (isEventDeleted(e)) return false if (shouldFilterEvent(e)) return false - if (mutePubkeySet.has(e.pubkey)) return false + if (muteSetHas(mutePubkeySet, e.pubkey)) return false if (hideUntrustedNotes && !isUserTrusted(e.pubkey)) return false return true }, diff --git a/src/components/MuteButton/index.tsx b/src/components/MuteButton/index.tsx index 2071d9d8..0e1825ce 100644 --- a/src/components/MuteButton/index.tsx +++ b/src/components/MuteButton/index.tsx @@ -8,6 +8,7 @@ import { DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { useMuteList } from '@/contexts/mute-list-context' +import { muteSetHas } from '@/lib/mute-set' import { useNostr } from '@/providers/NostrProvider' import { useScreenSize } from '@/providers/ScreenSizeProvider' import { BellOff } from 'lucide-react' @@ -22,7 +23,7 @@ export default function MuteButton({ pubkey }: { pubkey: string }) { const { mutePubkeySet, changing, mutePubkeyPrivately, mutePubkeyPublicly, unmutePubkey } = useMuteList() const [updating, setUpdating] = useState(false) - const isMuted = useMemo(() => mutePubkeySet.has(pubkey), [mutePubkeySet, pubkey]) + const isMuted = useMemo(() => muteSetHas(mutePubkeySet, pubkey), [mutePubkeySet, pubkey]) if (!accountPubkey || (pubkey && pubkey === accountPubkey)) return null diff --git a/src/components/NormalFeed/index.tsx b/src/components/NormalFeed/index.tsx index 8d24cf5d..c84ba8e4 100644 --- a/src/components/NormalFeed/index.tsx +++ b/src/components/NormalFeed/index.tsx @@ -4,8 +4,10 @@ import Tabs, { TabDefinition } from '@/components/Tabs' import { useKindFilter } from '@/providers/KindFilterProvider' import { useUserTrust } from '@/contexts/user-trust-context' import storage from '@/services/local-storage.service' +import type { TPrimaryPageName } from '@/PageManager' import { TFeedSubRequest, TNoteListMode } from '@/types' -import { forwardRef, useLayoutEffect, useMemo, useRef, useState } from 'react' +import { cn } from '@/lib/utils' +import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react' import KindFilter from '../KindFilter' const NormalFeed = forwardRef