diff options
Diffstat (limited to 'src/state/queries/resolve-uri.ts')
-rw-r--r-- | src/state/queries/resolve-uri.ts | 72 |
1 files changed, 23 insertions, 49 deletions
diff --git a/src/state/queries/resolve-uri.ts b/src/state/queries/resolve-uri.ts index a75998466..95fc867dd 100644 --- a/src/state/queries/resolve-uri.ts +++ b/src/state/queries/resolve-uri.ts @@ -1,9 +1,9 @@ -import {QueryClient, useQuery, UseQueryResult} from '@tanstack/react-query' -import {AtUri, AppBskyActorDefs, AppBskyFeedDefs} from '@atproto/api' +import {useQuery, useQueryClient, UseQueryResult} from '@tanstack/react-query' +import {AtUri, AppBskyActorDefs} from '@atproto/api' +import {profileBasicQueryKey as RQKEY_PROFILE_BASIC} from './profile' import {getAgent} from '#/state/session' import {STALE} from '#/state/queries' -import {ThreadNode} from './post-thread' export const RQKEY = (didOrHandle: string) => ['resolved-did', didOrHandle] @@ -22,55 +22,29 @@ export function useResolveUriQuery(uri: string | undefined): UriUseQueryResult { } export function useResolveDidQuery(didOrHandle: string | undefined) { + const queryClient = useQueryClient() + return useQuery<string, Error>({ staleTime: STALE.HOURS.ONE, - queryKey: RQKEY(didOrHandle || ''), - async queryFn() { - if (!didOrHandle) { - return '' - } - if (!didOrHandle.startsWith('did:')) { - const res = await getAgent().resolveHandle({handle: didOrHandle}) - didOrHandle = res.data.did - } - return didOrHandle + queryKey: RQKEY(didOrHandle ?? ''), + queryFn: async () => { + if (!didOrHandle) return '' + // Just return the did if it's already one + if (didOrHandle.startsWith('did:')) return didOrHandle + + const res = await getAgent().resolveHandle({handle: didOrHandle}) + return res.data.did + }, + initialData: () => { + // Return undefined if no did or handle + if (!didOrHandle) return + + const profile = + queryClient.getQueryData<AppBskyActorDefs.ProfileViewBasic>( + RQKEY_PROFILE_BASIC(didOrHandle), + ) + return profile?.did }, enabled: !!didOrHandle, }) } - -export function precacheProfile( - queryClient: QueryClient, - profile: - | AppBskyActorDefs.ProfileView - | AppBskyActorDefs.ProfileViewBasic - | AppBskyActorDefs.ProfileViewDetailed, -) { - queryClient.setQueryData(RQKEY(profile.handle), profile.did) -} - -export function precacheFeedPosts( - queryClient: QueryClient, - posts: AppBskyFeedDefs.FeedViewPost[], -) { - for (const post of posts) { - precacheProfile(queryClient, post.post.author) - } -} - -export function precacheThreadPosts( - queryClient: QueryClient, - node: ThreadNode, -) { - if (node.type === 'post') { - precacheProfile(queryClient, node.post.author) - if (node.parent) { - precacheThreadPosts(queryClient, node.parent) - } - if (node.replies?.length) { - for (const reply of node.replies) { - precacheThreadPosts(queryClient, reply) - } - } - } -} |