about summary refs log tree commit diff
path: root/src/state/queries/resolve-uri.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/queries/resolve-uri.ts')
-rw-r--r--src/state/queries/resolve-uri.ts72
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)
-      }
-    }
-  }
-}