Bluesky app fork with some witchin' additions 馃挮
at main 103 lines 3.0 kB view raw
1import { 2 type AppBskyActorDefs, 3 type AppBskyUnspeccedGetSuggestedOnboardingUsers, 4} from '@atproto/api' 5import {type QueryClient, useQuery} from '@tanstack/react-query' 6 7import {createBskyTopicsHeader} from '#/lib/api/feed/utils' 8import {logger} from '#/logger' 9import {getContentLanguages} from '#/state/preferences/languages' 10import {STALE} from '#/state/queries' 11import {usePreferencesQuery} from '#/state/queries/preferences' 12import {useAgent} from '#/state/session' 13 14export type QueryProps = { 15 category?: string | null 16 limit?: number 17 enabled?: boolean 18 overrideInterests: string[] 19} 20 21export const getSuggestedOnboardingUsersQueryKeyRoot = 22 'unspecced-suggested-onboarding-users' 23export const createGetSuggestedOnboardingUsersQueryKey = ( 24 props: QueryProps, 25) => [ 26 getSuggestedOnboardingUsersQueryKeyRoot, 27 props.category, 28 props.limit, 29 props.overrideInterests.join(','), 30] 31 32export function useGetSuggestedOnboardingUsersQuery(props: QueryProps) { 33 const agent = useAgent() 34 const {data: preferences} = usePreferencesQuery() 35 36 return useQuery({ 37 enabled: !!preferences && props.enabled !== false, 38 staleTime: STALE.MINUTES.THREE, 39 queryKey: createGetSuggestedOnboardingUsersQueryKey(props), 40 queryFn: async () => { 41 const contentLangs = getContentLanguages().join(',') 42 43 const overrideInterests = props.overrideInterests.join(',') 44 45 const {data} = await agent.app.bsky.unspecced.getSuggestedOnboardingUsers( 46 { 47 category: props.category ?? undefined, 48 limit: props.limit || 10, 49 }, 50 { 51 headers: { 52 ...createBskyTopicsHeader(overrideInterests), 53 'Accept-Language': contentLangs, 54 }, 55 }, 56 ) 57 // FALLBACK: if no results for 'all', try again with no interests specified 58 if (!props.category && data.actors.length === 0) { 59 logger.error( 60 `Did not get any suggested onboarding users, falling back - interests: ${overrideInterests}`, 61 ) 62 const {data: fallbackData} = 63 await agent.app.bsky.unspecced.getSuggestedOnboardingUsers( 64 { 65 category: props.category ?? undefined, 66 limit: props.limit || 10, 67 }, 68 { 69 headers: { 70 'Accept-Language': contentLangs, 71 }, 72 }, 73 ) 74 return fallbackData 75 } 76 77 return data 78 }, 79 }) 80} 81 82export function* findAllProfilesInQueryData( 83 queryClient: QueryClient, 84 did: string, 85): Generator<AppBskyActorDefs.ProfileView, void> { 86 const responses = 87 queryClient.getQueriesData<AppBskyUnspeccedGetSuggestedOnboardingUsers.OutputSchema>( 88 { 89 queryKey: [getSuggestedOnboardingUsersQueryKeyRoot], 90 }, 91 ) 92 for (const [_key, response] of responses) { 93 if (!response) { 94 continue 95 } 96 97 for (const actor of response.actors) { 98 if (actor.did === did) { 99 yield actor 100 } 101 } 102 } 103}