From dd3229d9005dc9c10aac839bf48de8cb11ead3c7 Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 29 Jan 2024 16:48:49 -0800 Subject: check if we are blocked when opening a profile, reset posts cache if we are --- src/state/queries/profile.ts | 19 ++++++++++++++++++- src/view/screens/Profile.tsx | 12 +++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) (limited to 'src') 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 ( -- cgit 1.4.1 From 65e349ee96d74e1792da7a336506f72278eed231 Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 29 Jan 2024 18:37:15 -0800 Subject: use `isLoading` for whether to show no profile header --- src/view/com/modals/ProfilePreview.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/view/com/modals/ProfilePreview.tsx b/src/view/com/modals/ProfilePreview.tsx index 77e68db70..3de1db446 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, } = useProfileQuery({ did: did, }) - if (isFetchingProfile || !moderationOpts) { + if (isLoading || !moderationOpts) { return ( Date: Mon, 29 Jan 2024 18:37:41 -0800 Subject: configurable stale time for profile queries --- src/state/queries/profile.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/state/queries/profile.ts b/src/state/queries/profile.ts index cdfbf2007..7bdef68ae 100644 --- a/src/state/queries/profile.ts +++ b/src/state/queries/profile.ts @@ -27,16 +27,19 @@ import {queryClient} from '#/lib/react-query' 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, + dontInvalidate, +}: { + did: string | undefined + dontInvalidate?: boolean +}) { 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: dontInvalidate ? STALE.INFINITY : STALE.SECONDS.FIFTEEN, refetchOnWindowFocus: true, queryKey: RQKEY(did || ''), queryFn: async () => { -- cgit 1.4.1 From 30b06c1d9ec45fb17c55840dafe8d3132fb3dc8b Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 29 Jan 2024 18:38:04 -0800 Subject: dont invalidate profile queries if they are only for display name resolution --- src/view/com/util/UserInfoText.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/view/com/util/UserInfoText.tsx b/src/view/com/util/UserInfoText.tsx index e5d2ceb03..1b75159a1 100644 --- a/src/view/com/util/UserInfoText.tsx +++ b/src/view/com/util/UserInfoText.tsx @@ -29,7 +29,7 @@ export function UserInfoText({ attr = attr || 'handle' failed = failed || 'user' - const {data: profile, isError} = useProfileQuery({did}) + const {data: profile, isError} = useProfileQuery({did, dontInvalidate: true}) let inner if (isError) { -- cgit 1.4.1 From c5c3f6dbe5c96bc3df3d2530a30bc0bfd576cef7 Mon Sep 17 00:00:00 2001 From: Hailey Date: Mon, 29 Jan 2024 18:44:19 -0800 Subject: naming --- src/view/com/modals/ProfilePreview.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/view/com/modals/ProfilePreview.tsx b/src/view/com/modals/ProfilePreview.tsx index 3de1db446..88b0df71d 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, - isLoading, + isLoading: isLoadingProfile, } = useProfileQuery({ did: did, }) - if (isLoading || !moderationOpts) { + if (isLoadingProfile || !moderationOpts) { return ( Date: Mon, 29 Jan 2024 18:51:54 -0800 Subject: update deprecated --- src/view/screens/Profile.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx index a0c8239f0..b70c6354c 100644 --- a/src/view/screens/Profile.tsx +++ b/src/view/screens/Profile.tsx @@ -58,13 +58,13 @@ export function ProfileScreen({route}: Props) { data: resolvedDid, error: resolveError, refetch: refetchDid, - isInitialLoading: isInitialLoadingDid, + isLoading: isLoadingDid, } = useResolveDidQuery(name) const { data: profile, error: profileError, refetch: refetchProfile, - isInitialLoading: isInitialLoadingProfile, + isLoading: isLoadingProfile, } = useProfileQuery({ did: resolvedDid, }) @@ -84,7 +84,7 @@ export function ProfileScreen({route}: Props) { } }, [profile?.viewer?.blockedBy, resolvedDid]) - if (isInitialLoadingDid || isInitialLoadingProfile || !moderationOpts) { + if (isLoadingDid || isLoadingProfile || !moderationOpts) { return ( Date: Mon, 29 Jan 2024 19:48:50 -0800 Subject: better naming --- src/state/queries/profile.ts | 6 +++--- src/view/com/util/UserInfoText.tsx | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/state/queries/profile.ts b/src/state/queries/profile.ts index 7bdef68ae..3aa01f90c 100644 --- a/src/state/queries/profile.ts +++ b/src/state/queries/profile.ts @@ -29,17 +29,17 @@ export const profilesQueryKey = (handles: string[]) => ['profiles', handles] export function useProfileQuery({ did, - dontInvalidate, + staleTime = STALE.SECONDS.FIFTEEN, }: { did: string | undefined - dontInvalidate?: boolean + staleTime?: number }) { return useQuery({ // WARNING // this staleTime is load-bearing // if you remove it, the UI infinite-loops // -prf - staleTime: dontInvalidate ? STALE.INFINITY : STALE.SECONDS.FIFTEEN, + staleTime, refetchOnWindowFocus: true, queryKey: RQKEY(did || ''), queryFn: async () => { diff --git a/src/view/com/util/UserInfoText.tsx b/src/view/com/util/UserInfoText.tsx index 1b75159a1..9cb9997f6 100644 --- a/src/view/com/util/UserInfoText.tsx +++ b/src/view/com/util/UserInfoText.tsx @@ -9,6 +9,7 @@ import {sanitizeDisplayName} from 'lib/strings/display-names' import {sanitizeHandle} from 'lib/strings/handles' import {makeProfileLink} from 'lib/routes/links' import {useProfileQuery} from '#/state/queries/profile' +import {STALE} from '#/state/queries' export function UserInfoText({ type = 'md', @@ -29,7 +30,10 @@ export function UserInfoText({ attr = attr || 'handle' failed = failed || 'user' - const {data: profile, isError} = useProfileQuery({did, dontInvalidate: true}) + const {data: profile, isError} = useProfileQuery({ + did, + staleTime: STALE.INFINITY, + }) let inner if (isError) { -- cgit 1.4.1 From 159df136c116b9943dfcbabff1da8b6efebf5954 Mon Sep 17 00:00:00 2001 From: Hailey Date: Tue, 30 Jan 2024 10:27:18 -0800 Subject: move to correct file --- src/state/queries/post-feed.ts | 13 +++++++++++++ src/state/queries/profile.ts | 14 +------------- 2 files changed, 14 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index 82acf3974..b422fa8fe 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 3aa01f90c..affb8295c 100644 --- a/src/state/queries/profile.ts +++ b/src/state/queries/profile.ts @@ -17,12 +17,12 @@ 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' 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] @@ -434,15 +434,3 @@ 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) -} -- cgit 1.4.1 From 05f48860a0be8f9209a2cc353641ca79e7dd78c4 Mon Sep 17 00:00:00 2001 From: Hailey Date: Tue, 30 Jan 2024 10:31:24 -0800 Subject: ts --- src/view/screens/Profile.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx index b70c6354c..6d0f15d81 100644 --- a/src/view/screens/Profile.tsx +++ b/src/view/screens/Profile.tsx @@ -21,12 +21,12 @@ import {useAnalytics} from 'lib/analytics/analytics' import {ComposeIcon2} from 'lib/icons' 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 { + FeedDescriptor, resetProfilePostsQueries, - useProfileQuery, -} from '#/state/queries/profile' +} from '#/state/queries/post-feed' +import {useResolveDidQuery} from '#/state/queries/resolve-uri' +import {useProfileQuery} from '#/state/queries/profile' import {useProfileShadow} from '#/state/cache/profile-shadow' import {useSession} from '#/state/session' import {useModerationOpts} from '#/state/queries/preferences' -- cgit 1.4.1