about summary refs log tree commit diff
path: root/src/state/queries/actor-search.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/queries/actor-search.ts')
-rw-r--r--src/state/queries/actor-search.ts42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/state/queries/actor-search.ts b/src/state/queries/actor-search.ts
new file mode 100644
index 000000000..f72511548
--- /dev/null
+++ b/src/state/queries/actor-search.ts
@@ -0,0 +1,42 @@
+import {AppBskyActorDefs} from '@atproto/api'
+import {QueryClient, useQuery} from '@tanstack/react-query'
+
+import {getAgent} from '#/state/session'
+import {STALE} from '#/state/queries'
+
+export const RQKEY = (prefix: string) => ['actor-search', prefix]
+
+export function useActorSearch(prefix: string) {
+  return useQuery<AppBskyActorDefs.ProfileView[]>({
+    staleTime: STALE.MINUTES.ONE,
+    queryKey: RQKEY(prefix || ''),
+    async queryFn() {
+      const res = await getAgent().searchActors({
+        term: prefix,
+      })
+      return res.data.actors
+    },
+    enabled: !!prefix,
+  })
+}
+
+export function* findAllProfilesInQueryData(
+  queryClient: QueryClient,
+  did: string,
+) {
+  const queryDatas = queryClient.getQueriesData<AppBskyActorDefs.ProfileView[]>(
+    {
+      queryKey: ['actor-search'],
+    },
+  )
+  for (const [_queryKey, queryData] of queryDatas) {
+    if (!queryData) {
+      continue
+    }
+    for (const actor of queryData) {
+      if (actor.did === did) {
+        yield actor
+      }
+    }
+  }
+}