diff options
Diffstat (limited to 'src/state/queries/actor-search.ts')
-rw-r--r-- | src/state/queries/actor-search.ts | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/src/state/queries/actor-search.ts b/src/state/queries/actor-search.ts index 1e301a1ba..479fc1a9f 100644 --- a/src/state/queries/actor-search.ts +++ b/src/state/queries/actor-search.ts @@ -1,5 +1,11 @@ -import {AppBskyActorDefs} from '@atproto/api' -import {QueryClient, useQuery} from '@tanstack/react-query' +import {AppBskyActorDefs, AppBskyActorSearchActors} from '@atproto/api' +import { + InfiniteData, + QueryClient, + QueryKey, + useInfiniteQuery, + useQuery, +} from '@tanstack/react-query' import {STALE} from '#/state/queries' import {useAgent} from '#/state/session' @@ -7,6 +13,11 @@ import {useAgent} from '#/state/session' const RQKEY_ROOT = 'actor-search' export const RQKEY = (query: string) => [RQKEY_ROOT, query] +export const RQKEY_PAGINATED = (query: string) => [ + `${RQKEY_ROOT}_paginated`, + query, +] + export function useActorSearch({ query, enabled, @@ -28,6 +39,37 @@ export function useActorSearch({ }) } +export function useActorSearchPaginated({ + query, + enabled, +}: { + query: string + enabled?: boolean +}) { + const agent = useAgent() + return useInfiniteQuery< + AppBskyActorSearchActors.OutputSchema, + Error, + InfiniteData<AppBskyActorSearchActors.OutputSchema>, + QueryKey, + string | undefined + >({ + staleTime: STALE.MINUTES.FIVE, + queryKey: RQKEY_PAGINATED(query), + queryFn: async ({pageParam}) => { + const res = await agent.searchActors({ + q: query, + limit: 25, + cursor: pageParam, + }) + return res.data + }, + enabled: enabled && !!query, + initialPageParam: undefined, + getNextPageParam: lastPage => lastPage.cursor, + }) +} + export function* findAllProfilesInQueryData( queryClient: QueryClient, did: string, |