about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorHailey <me@haileyok.com>2024-01-29 16:48:49 -0800
committerHailey <me@haileyok.com>2024-01-29 16:48:49 -0800
commitdd3229d9005dc9c10aac839bf48de8cb11ead3c7 (patch)
tree1ebe46bc7c60097c0615626e5950444a9b1f4f38 /src
parent4f2802856986e648052d5c5f04c6fcf50e0a731e (diff)
downloadvoidsky-dd3229d9005dc9c10aac839bf48de8cb11ead3c7.tar.zst
check if we are blocked when opening a profile, reset posts cache if we are
Diffstat (limited to 'src')
-rw-r--r--src/state/queries/profile.ts19
-rw-r--r--src/view/screens/Profile.tsx12
2 files changed, 29 insertions, 2 deletions
diff --git a/src/state/queries/profile.ts b/src/state/queries/profile.ts
index 74be99330..cdfbf2007 100644
--- a/src/state/queries/profile.ts
+++ b/src/state/queries/profile.ts
@@ -22,6 +22,7 @@ import {RQKEY as RQKEY_MY_MUTED} from './my-muted-accounts'
 import {RQKEY as RQKEY_MY_BLOCKED} from './my-blocked-accounts'
 import {STALE} from '#/state/queries'
 import {track} from '#/lib/analytics/analytics'
+import {queryClient} from '#/lib/react-query'
 
 export const RQKEY = (did: string) => ['profile', did]
 export const profilesQueryKey = (handles: string[]) => ['profiles', handles]
@@ -375,8 +376,9 @@ function useProfileBlockMutation() {
         {subject: did, createdAt: new Date().toISOString()},
       )
     },
-    onSuccess() {
+    onSuccess(_, {did}) {
       queryClient.invalidateQueries({queryKey: RQKEY_MY_BLOCKED()})
+      resetProfilePostsQueries(did, 1000)
     },
   })
 }
@@ -394,6 +396,9 @@ function useProfileUnblockMutation() {
         rkey,
       })
     },
+    onSuccess(_, {did}) {
+      resetProfilePostsQueries(did, 1000)
+    },
   })
 }
 
@@ -426,3 +431,15 @@ export function* findAllProfilesInQueryData(
     }
   }
 }
+
+export function resetProfilePostsQueries(did: string, timeout = 0) {
+  setTimeout(() => {
+    queryClient.resetQueries({
+      predicate: query =>
+        !!(
+          query.queryKey[0] === 'post-feed' &&
+          (query.queryKey[1] as string)?.includes(did)
+        ),
+    })
+  }, timeout)
+}
diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx
index 7fc4d7a20..a0c8239f0 100644
--- a/src/view/screens/Profile.tsx
+++ b/src/view/screens/Profile.tsx
@@ -23,7 +23,10 @@ import {useSetTitle} from 'lib/hooks/useSetTitle'
 import {combinedDisplayName} from 'lib/strings/display-names'
 import {FeedDescriptor} from '#/state/queries/post-feed'
 import {useResolveDidQuery} from '#/state/queries/resolve-uri'
-import {useProfileQuery} from '#/state/queries/profile'
+import {
+  resetProfilePostsQueries,
+  useProfileQuery,
+} from '#/state/queries/profile'
 import {useProfileShadow} from '#/state/cache/profile-shadow'
 import {useSession} from '#/state/session'
 import {useModerationOpts} from '#/state/queries/preferences'
@@ -74,6 +77,13 @@ export function ProfileScreen({route}: Props) {
     }
   }, [resolveError, refetchDid, refetchProfile])
 
+  // When we open the profile, we want to reset the posts query if we are blocked.
+  React.useEffect(() => {
+    if (resolvedDid && profile?.viewer?.blockedBy) {
+      resetProfilePostsQueries(resolvedDid)
+    }
+  }, [profile?.viewer?.blockedBy, resolvedDid])
+
   if (isInitialLoadingDid || isInitialLoadingProfile || !moderationOpts) {
     return (
       <CenteredView>