about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2024-05-22 18:14:15 +0100
committerGitHub <noreply@github.com>2024-05-22 18:14:15 +0100
commit3ca41e4efb24809dcc5e5a5c3e678eb561fd7ad6 (patch)
tree58f0db641d57e4b60ea44c16dc10fb75d28a7a76
parentb93737232589c5bf158fb0611e4f253ff8fe1b08 (diff)
downloadvoidsky-3ca41e4efb24809dcc5e5a5c3e678eb561fd7ad6.tar.zst
[🐴] Invalidate list convos query on block (#4171)
* more memoization

* invalidate listconvos query on block
-rw-r--r--src/state/queries/messages/list-converations.ts44
-rw-r--r--src/state/queries/profile.ts2
2 files changed, 25 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 {
diff --git a/src/state/queries/profile.ts b/src/state/queries/profile.ts
index 3e2535916..af8718c5e 100644
--- a/src/state/queries/profile.ts
+++ b/src/state/queries/profile.ts
@@ -25,6 +25,7 @@ import {STALE} from '#/state/queries'
 import {resetProfilePostsQueries} from '#/state/queries/post-feed'
 import {updateProfileShadow} from '../cache/profile-shadow'
 import {useAgent, useSession} from '../session'
+import {RQKEY as RQKEY_LIST_CONVOS} from './messages/list-converations'
 import {RQKEY as RQKEY_MY_BLOCKED} from './my-blocked-accounts'
 import {RQKEY as RQKEY_MY_MUTED} from './my-muted-accounts'
 
@@ -414,6 +415,7 @@ export function useProfileBlockMutationQueue(
       updateProfileShadow(queryClient, did, {
         blockingUri: finalBlockingUri,
       })
+      queryClient.invalidateQueries({queryKey: RQKEY_LIST_CONVOS})
     },
   })