diff options
Diffstat (limited to 'src/state/queries/trending/useGetSuggestedUsersQuery.ts')
-rw-r--r-- | src/state/queries/trending/useGetSuggestedUsersQuery.ts | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/state/queries/trending/useGetSuggestedUsersQuery.ts b/src/state/queries/trending/useGetSuggestedUsersQuery.ts new file mode 100644 index 000000000..eb97ad666 --- /dev/null +++ b/src/state/queries/trending/useGetSuggestedUsersQuery.ts @@ -0,0 +1,71 @@ +import { + type AppBskyActorDefs, + type AppBskyUnspeccedGetSuggestedUsers, +} from '@atproto/api' +import {type QueryClient, useQuery} from '@tanstack/react-query' + +import { + aggregateUserInterests, + createBskyTopicsHeader, +} from '#/lib/api/feed/utils' +import {getContentLanguages} from '#/state/preferences/languages' +import {STALE} from '#/state/queries' +import {usePreferencesQuery} from '#/state/queries/preferences' +import {useAgent} from '#/state/session' + +export type QueryProps = {category?: string | null} + +export const getSuggestedUsersQueryKeyRoot = 'unspecced-suggested-users' +export const createGetSuggestedUsersQueryKey = (props: QueryProps) => [ + getSuggestedUsersQueryKeyRoot, + ...Object.values(props), +] + +export function useGetSuggestedUsersQuery(props: QueryProps) { + const agent = useAgent() + const {data: preferences} = usePreferencesQuery() + + return useQuery({ + enabled: !!preferences, + refetchOnWindowFocus: true, + staleTime: STALE.MINUTES.ONE, + queryKey: createGetSuggestedUsersQueryKey(props), + queryFn: async () => { + const contentLangs = getContentLanguages().join(',') + const {data} = await agent.app.bsky.unspecced.getSuggestedUsers( + { + category: props.category ?? undefined, + }, + { + headers: { + ...createBskyTopicsHeader(aggregateUserInterests(preferences)), + 'Accept-Language': contentLangs, + }, + }, + ) + + return data + }, + }) +} + +export function* findAllProfilesInQueryData( + queryClient: QueryClient, + did: string, +): Generator<AppBskyActorDefs.ProfileViewBasic, void> { + const responses = + queryClient.getQueriesData<AppBskyUnspeccedGetSuggestedUsers.OutputSchema>({ + queryKey: [getSuggestedUsersQueryKeyRoot], + }) + for (const [_, response] of responses) { + if (!response) { + continue + } + + for (const actor of response.actors) { + if (actor.did === did) { + yield actor + } + } + } +} |