diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index 82acf397..b422fa8f 100644 --- a/src/state/queries/post-feed.ts +++ b/src/state/queries/post-feed.ts @@ -28,6 +28,7 @@ import {getModerationOpts} from '#/state/queries/preferences/moderation' import {KnownError} from '#/view/com/posts/FeedErrorMessage' import {embedViewRecordToPostView, getEmbeddedPost} from './util' import {useModerationOpts} from './preferences' +import {queryClient} from 'lib/react-query' type ActorDid = string type AuthorFilter = @@ -444,3 +445,15 @@ function assertSomePostsPassModeration(feed: AppBskyFeedDefs.FeedViewPost[]) { throw new Error(KnownError.FeedNSFPublic) } } + +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/state/queries/profile.ts b/src/state/queries/profile.ts index 74be9933..affb8295 100644 --- a/src/state/queries/profile.ts +++ b/src/state/queries/profile.ts @@ -17,6 +17,7 @@ import {updateProfileShadow} from '../cache/profile-shadow' import {uploadBlob} from '#/lib/api' import {until} from '#/lib/async/until' import {Shadow} from '#/state/cache/types' +import {resetProfilePostsQueries} from '#/state/queries/post-feed' import {useToggleMutationQueue} from '#/lib/hooks/useToggleMutationQueue' import {RQKEY as RQKEY_MY_MUTED} from './my-muted-accounts' import {RQKEY as RQKEY_MY_BLOCKED} from './my-blocked-accounts' @@ -26,16 +27,19 @@ import {track} from '#/lib/analytics/analytics' export const RQKEY = (did: string) => ['profile', did] export const profilesQueryKey = (handles: string[]) => ['profiles', handles] -export function useProfileQuery({did}: {did: string | undefined}) { - const {currentAccount} = useSession() - const isCurrentAccount = did === currentAccount?.did - +export function useProfileQuery({ + did, + staleTime = STALE.SECONDS.FIFTEEN, +}: { + did: string | undefined + staleTime?: number +}) { return useQuery({ // WARNING // this staleTime is load-bearing // if you remove it, the UI infinite-loops // -prf - staleTime: isCurrentAccount ? STALE.SECONDS.THIRTY : STALE.MINUTES.FIVE, + staleTime, refetchOnWindowFocus: true, queryKey: RQKEY(did || ''), queryFn: async () => { @@ -375,8 +379,9 @@ function useProfileBlockMutation() { {subject: did, createdAt: new Date().toISOString()}, ) }, - onSuccess() { + onSuccess(_, {did}) { queryClient.invalidateQueries({queryKey: RQKEY_MY_BLOCKED()}) + resetProfilePostsQueries(did, 1000) }, }) } @@ -394,6 +399,9 @@ function useProfileUnblockMutation() { rkey, }) }, + onSuccess(_, {did}) { + resetProfilePostsQueries(did, 1000) + }, }) } diff --git a/src/view/com/modals/ProfilePreview.tsx b/src/view/com/modals/ProfilePreview.tsx index 77e68db7..88b0df71 100644 --- a/src/view/com/modals/ProfilePreview.tsx +++ b/src/view/com/modals/ProfilePreview.tsx @@ -27,12 +27,12 @@ export function Component({did}: {did: string}) { data: profile, error: profileError, refetch: refetchProfile, - isFetching: isFetchingProfile, + isLoading: isLoadingProfile, } = useProfileQuery({ did: did, }) - if (isFetchingProfile || !moderationOpts) { + if (isLoadingProfile || !moderationOpts) { return ( { + if (resolvedDid && profile?.viewer?.blockedBy) { + resetProfilePostsQueries(resolvedDid) + } + }, [profile?.viewer?.blockedBy, resolvedDid]) + + if (isLoadingDid || isLoadingProfile || !moderationOpts) { return (