forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {useMemo} from 'react'
2
3import {useInterestsDisplayNames} from '#/lib/interests'
4import {useActorSearch} from '#/state/queries/actor-search'
5import {useGetSuggestedUsersQuery} from '#/state/queries/trending/useGetSuggestedUsersQuery'
6
7/**
8 * Conditional hook, used in case a user is a non-english speaker, in which
9 * case we fall back to searching for users instead of our more curated set.
10 */
11export function useSuggestedUsers({
12 category = null,
13 search = false,
14}: {
15 category?: string | null
16 /**
17 * If true, we'll search for users using the translated value of `category`,
18 * based on the user's app language setting
19 */
20 search?: boolean
21}) {
22 const interestsDisplayNames = useInterestsDisplayNames()
23 const curated = useGetSuggestedUsersQuery({
24 enabled: !search,
25 category,
26 })
27 const searched = useActorSearch({
28 enabled: !!search,
29 // use user's app language translation for this value
30 query: category ? interestsDisplayNames[category] : '',
31 limit: 10,
32 })
33
34 return useMemo(() => {
35 if (search) {
36 return {
37 // we're not paginating right now
38 data: searched?.data
39 ? {
40 actors: searched.data.pages.flatMap(p => p.actors) ?? [],
41 recId: undefined,
42 }
43 : undefined,
44 isLoading: searched.isLoading,
45 error: searched.error,
46 isRefetching: searched.isRefetching,
47 refetch: searched.refetch,
48 }
49 } else {
50 return {
51 data: curated.data,
52 isLoading: curated.isLoading,
53 error: curated.error,
54 isRefetching: curated.isRefetching,
55 refetch: curated.refetch,
56 }
57 }
58 }, [curated, searched, search])
59}