diff options
Diffstat (limited to 'src/screens')
-rw-r--r-- | src/screens/Search/Explore.tsx | 129 | ||||
-rw-r--r-- | src/screens/Search/modules/ExploreSuggestedAccounts.tsx | 2 |
2 files changed, 30 insertions, 101 deletions
diff --git a/src/screens/Search/Explore.tsx b/src/screens/Search/Explore.tsx index 088bc5724..8c41a507a 100644 --- a/src/screens/Search/Explore.tsx +++ b/src/screens/Search/Explore.tsx @@ -15,7 +15,6 @@ import {sanitizeHandle} from '#/lib/strings/handles' import {logger} from '#/logger' import {type MetricEvents} from '#/logger/metrics' import {useModerationOpts} from '#/state/preferences/moderation-opts' -import {useActorSearchPaginated} from '#/state/queries/actor-search' import { type FeedPreviewItem, useFeedPreviews, @@ -23,8 +22,8 @@ import { import {useGetPopularFeedsQuery} from '#/state/queries/feed' import {Nux, useNux} from '#/state/queries/nuxs' import {usePreferencesQuery} from '#/state/queries/preferences' -import {useSuggestedFollowsQuery} from '#/state/queries/suggested-follows' import {useGetSuggestedFeedsQuery} from '#/state/queries/trending/useGetSuggestedFeedsQuery' +import {useGetSuggestedUsersQuery} from '#/state/queries/trending/useGetSuggestedUsersQuery' import {useSuggestedStarterPacksQuery} from '#/state/queries/useSuggestedStarterPacksQuery' import {useProgressGuide} from '#/state/shell/progress-guide' import {isThreadChildAt, isThreadParentAt} from '#/view/com/posts/PostFeed' @@ -57,7 +56,6 @@ import * as ModuleHeader from './components/ModuleHeader' import { SuggestedAccountsTabBar, SuggestedProfileCard, - useLoadEnoughProfiles, } from './modules/ExploreSuggestedAccounts' function LoadMore({item}: {item: ExploreScreenItems & {type: 'loadMore'}}) { @@ -144,7 +142,7 @@ type ExploreScreenItems = | { type: 'profile' key: string - profile: AppBskyActorDefs.ProfileView + profile: AppBskyActorDefs.ProfileViewBasic recId?: number } | { @@ -203,33 +201,13 @@ export function Explore({ const gate = useGate() const guide = useProgressGuide('follow-10') const [selectedInterest, setSelectedInterest] = useState<string | null>(null) + // TODO always get at least 10 back const { - data: suggestedProfiles, - hasNextPage: hasNextSuggestedProfilesPage, - isLoading: isLoadingSuggestedProfiles, - isFetchingNextPage: isFetchingNextSuggestedProfilesPage, - error: suggestedProfilesError, - fetchNextPage: fetchNextSuggestedProfilesPage, - } = useSuggestedFollowsQuery({limit: 3, subsequentPageLimit: 10}) - const { - data: interestProfiles, - hasNextPage: hasNextInterestProfilesPage, - isLoading: isLoadingInterestProfiles, - isFetchingNextPage: isFetchingNextInterestProfilesPage, - error: interestProfilesError, - fetchNextPage: fetchNextInterestProfilesPage, - } = useActorSearchPaginated({ - query: selectedInterest || '', - enabled: !!selectedInterest, - limit: 10, - }) - const {isReady: canShowSuggestedProfiles} = useLoadEnoughProfiles({ - interest: selectedInterest, - data: interestProfiles, - isLoading: isLoadingInterestProfiles, - isFetchingNextPage: isFetchingNextInterestProfilesPage, - hasNextPage: hasNextInterestProfilesPage, - fetchNextPage: fetchNextInterestProfilesPage, + data: suggestedUsers, + isLoading: suggestedUsersIsLoading, + error: suggestedUsersError, + } = useGetSuggestedUsersQuery({ + category: selectedInterest, }) const { data: feeds, @@ -243,39 +221,6 @@ export function Explore({ const showInterestsNux = interestsNux.status === 'ready' && !interestsNux.nux?.completed - const profiles: typeof suggestedProfiles & typeof interestProfiles = - !selectedInterest ? suggestedProfiles : interestProfiles - const hasNextProfilesPage = !selectedInterest - ? hasNextSuggestedProfilesPage - : hasNextInterestProfilesPage - const isLoadingProfiles = !selectedInterest - ? isLoadingSuggestedProfiles - : !canShowSuggestedProfiles - const isFetchingNextProfilesPage = !selectedInterest - ? isFetchingNextSuggestedProfilesPage - : !canShowSuggestedProfiles - const profilesError = !selectedInterest - ? suggestedProfilesError - : interestProfilesError - const fetchNextProfilesPage = !selectedInterest - ? fetchNextSuggestedProfilesPage - : fetchNextInterestProfilesPage - - const isLoadingMoreProfiles = isFetchingNextProfilesPage && !isLoadingProfiles - const onLoadMoreProfiles = useCallback(async () => { - if (isFetchingNextProfilesPage || !hasNextProfilesPage || profilesError) - return - try { - await fetchNextProfilesPage() - } catch (err) { - logger.error('Failed to load more suggested follows', {message: err}) - } - }, [ - isFetchingNextProfilesPage, - hasNextProfilesPage, - profilesError, - fetchNextProfilesPage, - ]) const { data: suggestedSPs, isLoading: isLoadingSuggestedSPs, @@ -358,55 +303,42 @@ export function Explore({ }, }) - if (!canShowSuggestedProfiles) { + if (suggestedUsersIsLoading) { i.push({type: 'profilePlaceholder', key: 'profilePlaceholder'}) - } else if (profilesError) { + } else if (suggestedUsersError) { i.push({ type: 'error', - key: 'profilesError', + key: 'suggestedUsersError', message: _(msg`Failed to load suggested follows`), - error: cleanError(profilesError), + error: cleanError(suggestedUsersError), }) } else { - if (profiles !== undefined) { - if (profiles.pages.length > 0 && moderationOpts) { + if (suggestedUsers !== undefined) { + if (suggestedUsers.actors.length > 0 && moderationOpts) { // Currently the responses contain duplicate items. // Needs to be fixed on backend, but let's dedupe to be safe. let seen = new Set() const profileItems: ExploreScreenItems[] = [] - for (const page of profiles.pages) { - for (const actor of page.actors) { - if (!seen.has(actor.did) && !actor.viewer?.following) { - seen.add(actor.did) - profileItems.push({ - type: 'profile', - key: actor.did, - profile: actor, - recId: page.recId, - }) - } + for (const actor of suggestedUsers.actors) { + if (!seen.has(actor.did) && !actor.viewer?.following) { + seen.add(actor.did) + profileItems.push({ + type: 'profile', + key: actor.did, + profile: actor, + }) } } if (profileItems.length === 0) { - if (!hasNextProfilesPage) { - // no items! remove the header - i.pop() - } + // no items! remove the header + i.pop() } else { i.push(...profileItems) } - if (hasNextProfilesPage) { - i.push({ - type: 'loadMore', - key: 'loadMoreProfiles', - message: _(msg`Load more suggested accounts`), - isLoadingMore: isLoadingMoreProfiles, - onLoadMore: onLoadMoreProfiles, - }) - } } else { - console.log('no pages') + // no items! remove the header + i.pop() } } else { i.push({type: 'profilePlaceholder', key: 'profilePlaceholder'}) @@ -414,14 +346,11 @@ export function Explore({ } return i }, [ - profiles, _, - canShowSuggestedProfiles, - hasNextProfilesPage, - isLoadingMoreProfiles, moderationOpts, - onLoadMoreProfiles, - profilesError, + suggestedUsers, + suggestedUsersIsLoading, + suggestedUsersError, ]) const suggestedFeedsModule = useMemo(() => { const i: ExploreScreenItems[] = [] diff --git a/src/screens/Search/modules/ExploreSuggestedAccounts.tsx b/src/screens/Search/modules/ExploreSuggestedAccounts.tsx index 070d75910..71210823e 100644 --- a/src/screens/Search/modules/ExploreSuggestedAccounts.tsx +++ b/src/screens/Search/modules/ExploreSuggestedAccounts.tsx @@ -83,7 +83,7 @@ export function SuggestedAccountsTabBar({ }} hasSearchText={false} interestsDisplayNames={{ - all: _(msg`All`), + all: _(msg`For You`), ...interestsDisplayNames, }} TabComponent={Tab} |