diff options
Diffstat (limited to 'src/state/queries/messages/list-converations.ts')
-rw-r--r-- | src/state/queries/messages/list-converations.ts | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/src/state/queries/messages/list-converations.ts b/src/state/queries/messages/list-converations.ts index 25ac9a16e..493ee0d19 100644 --- a/src/state/queries/messages/list-converations.ts +++ b/src/state/queries/messages/list-converations.ts @@ -46,27 +46,29 @@ export function useUnreadMessageCount() { }) const moderationOpts = useModerationOpts() - const count = - convos.data?.pages - .flatMap(page => page.convos) - .filter(convo => convo.id !== currentConvoId) - .reduce((acc, convo) => { - 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 || - otherMember.did === 'missing.invalid' - const unreadCount = !shouldIgnore && convo.unreadCount > 0 ? 1 : 0 - - return acc + unreadCount - }, 0) ?? 0 + const count = useMemo(() => { + return ( + convos.data?.pages + .flatMap(page => page.convos) + .filter(convo => convo.id !== currentConvoId) + .reduce((acc, convo) => { + const otherMember = convo.members.find( + member => member.did !== currentAccount?.did, + ) + + if (!otherMember || !moderationOpts) return acc + + const moderation = moderateProfile(otherMember, moderationOpts) + const shouldIgnore = + convo.muted || + moderation.blocked || + otherMember.did === 'missing.invalid' + const unreadCount = !shouldIgnore && convo.unreadCount > 0 ? 1 : 0 + + return acc + unreadCount + }, 0) ?? 0 + ) + }, [convos.data, currentAccount?.did, currentConvoId, moderationOpts]) return useMemo(() => { return { |