diff options
Diffstat (limited to 'src/state/queries/messages')
-rw-r--r-- | src/state/queries/messages/list-converations.ts | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/state/queries/messages/list-converations.ts b/src/state/queries/messages/list-converations.ts index 4b4d50c49..3939ab8e3 100644 --- a/src/state/queries/messages/list-converations.ts +++ b/src/state/queries/messages/list-converations.ts @@ -1,5 +1,9 @@ import {useCallback, useMemo} from 'react' -import {ChatBskyConvoDefs, ChatBskyConvoListConvos} from '@atproto/api' +import { + ChatBskyConvoDefs, + ChatBskyConvoListConvos, + moderateProfile, +} from '@atproto/api' import { InfiniteData, QueryClient, @@ -8,8 +12,9 @@ import { } from '@tanstack/react-query' import {useCurrentConvoId} from '#/state/messages/current-convo-id' +import {useModerationOpts} from '#/state/preferences/moderation-opts' import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const' -import {useAgent} from '#/state/session' +import {useAgent, useSession} from '#/state/session' import {decrementBadgeCount} from 'lib/notifications/notifications' export const RQKEY = ['convo-list'] @@ -36,16 +41,29 @@ export function useListConvos({refetchInterval}: {refetchInterval: number}) { export function useUnreadMessageCount() { const {currentConvoId} = useCurrentConvoId() + const {currentAccount} = useSession() const convos = useListConvos({ refetchInterval: 30_000, }) + const moderationOpts = useModerationOpts() const count = convos.data?.pages .flatMap(page => page.convos) .filter(convo => convo.id !== currentConvoId) .reduce((acc, convo) => { - return acc + (!convo.muted && convo.unreadCount > 0 ? 1 : 0) + const otherMember = convo.members.find( + member => member.did !== currentAccount?.did, + ) + + if (!otherMember || !moderationOpts) return acc + + // TODO could shadow this outside this hook and get optimistic block state + const moderation = moderateProfile(otherMember, moderationOpts) + const shouldIgnore = convo.muted || moderation.blocked + const unreadCount = !shouldIgnore && convo.unreadCount > 0 ? 1 : 0 + + return acc + unreadCount }, 0) ?? 0 return useMemo(() => { |