diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-05-17 20:46:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-17 14:46:01 -0500 |
commit | f42f7fa0353a45c6b20e65e1a54b64e1c28b0cd5 (patch) | |
tree | 1e1e417dc0985b1d03e6a2a482fafd904539305d /src/state/queries/messages | |
parent | dd0f57e3e3188389bc8ef364e81e4a00405a9a26 (diff) | |
download | voidsky-f42f7fa0353a45c6b20e65e1a54b64e1c28b0cd5.tar.zst |
[🐴] don't include blocked convos in unread count (#4082)
* don't include blocked convos in unread count * Use moderateProfile * Handle blocked state in chat list * Fix logic formatting, add todo --------- Co-authored-by: Eric Bailey <git@esb.lol>
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(() => { |