mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import {AppBskyActorDefs} from '@atproto/api'
2import {QueryClient, useQuery} from '@tanstack/react-query'
3
4import {STALE} from '#/state/queries'
5import {useAgent} from '#/state/session'
6
7const RQKEY_ROOT = 'actor-search'
8export const RQKEY = (query: string) => [RQKEY_ROOT, query]
9
10export function useActorSearch({
11 query,
12 enabled,
13}: {
14 query: string
15 enabled?: boolean
16}) {
17 const {getAgent} = useAgent()
18 return useQuery<AppBskyActorDefs.ProfileView[]>({
19 staleTime: STALE.MINUTES.ONE,
20 queryKey: RQKEY(query || ''),
21 async queryFn() {
22 const res = await getAgent().searchActors({
23 q: query,
24 })
25 return res.data.actors
26 },
27 enabled: enabled && !!query,
28 })
29}
30
31export function* findAllProfilesInQueryData(
32 queryClient: QueryClient,
33 did: string,
34) {
35 const queryDatas = queryClient.getQueriesData<AppBskyActorDefs.ProfileView[]>(
36 {
37 queryKey: [RQKEY_ROOT],
38 },
39 )
40 for (const [_queryKey, queryData] of queryDatas) {
41 if (!queryData) {
42 continue
43 }
44 for (const actor of queryData) {
45 if (actor.did === did) {
46 yield actor
47 }
48 }
49 }
50}