diff options
Diffstat (limited to 'src/state/queries/actor-search.ts')
-rw-r--r-- | src/state/queries/actor-search.ts | 42 |
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 + } + } + } +} |