memoize each module individually (#8111)
This commit is contained in:
@@ -325,29 +325,16 @@ export function Explore({
|
|||||||
fetchNextPageFeedPreviews,
|
fetchNextPageFeedPreviews,
|
||||||
])
|
])
|
||||||
|
|
||||||
const items = useMemo<ExploreScreenItems[]>(() => {
|
const topBorder = useMemo(
|
||||||
|
() => ({type: 'topBorder', key: 'top-border'} as const),
|
||||||
|
[],
|
||||||
|
)
|
||||||
|
const trendingTopicsModule = useMemo(
|
||||||
|
() => ({type: 'trendingTopics', key: 'trending-topics'} as const),
|
||||||
|
[],
|
||||||
|
)
|
||||||
|
const suggestedFollowsModule = useMemo(() => {
|
||||||
const i: ExploreScreenItems[] = []
|
const i: ExploreScreenItems[] = []
|
||||||
|
|
||||||
const addTopBorder = () => {
|
|
||||||
i.push({type: 'topBorder', key: 'top-border'})
|
|
||||||
}
|
|
||||||
|
|
||||||
const addTrendingTopicsModule = () => {
|
|
||||||
i.push({
|
|
||||||
type: 'trendingTopics',
|
|
||||||
key: `trending-topics`,
|
|
||||||
})
|
|
||||||
|
|
||||||
// temp - disable trending videos
|
|
||||||
// if (isNative) {
|
|
||||||
// i.push({
|
|
||||||
// type: 'trendingVideos',
|
|
||||||
// key: `trending-videos`,
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
const addSuggestedFollowsModule = () => {
|
|
||||||
i.push({
|
i.push({
|
||||||
type: 'tabbedHeader',
|
type: 'tabbedHeader',
|
||||||
key: 'suggested-accounts-header',
|
key: 'suggested-accounts-header',
|
||||||
@@ -414,9 +401,19 @@ export function Explore({
|
|||||||
i.push({type: 'profilePlaceholder', key: 'profilePlaceholder'})
|
i.push({type: 'profilePlaceholder', key: 'profilePlaceholder'})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return i
|
||||||
|
}, [
|
||||||
const addSuggestedFeedsModule = () => {
|
profiles,
|
||||||
|
_,
|
||||||
|
canShowSuggestedProfiles,
|
||||||
|
hasNextProfilesPage,
|
||||||
|
isLoadingMoreProfiles,
|
||||||
|
moderationOpts,
|
||||||
|
onLoadMoreProfiles,
|
||||||
|
profilesError,
|
||||||
|
])
|
||||||
|
const suggestedFeedsModule = useMemo(() => {
|
||||||
|
const i: ExploreScreenItems[] = []
|
||||||
i.push({
|
i.push({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
key: 'suggested-feeds-header',
|
key: 'suggested-feeds-header',
|
||||||
@@ -505,9 +502,20 @@ export function Explore({
|
|||||||
i.push({type: 'feedPlaceholder', key: 'feedPlaceholder'})
|
i.push({type: 'feedPlaceholder', key: 'feedPlaceholder'})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return i
|
||||||
|
}, [
|
||||||
const addSuggestedStarterPacksModule = () => {
|
feeds,
|
||||||
|
_,
|
||||||
|
feedsError,
|
||||||
|
hasNextFeedsPage,
|
||||||
|
hasPressedLoadMoreFeeds,
|
||||||
|
isLoadingMoreFeeds,
|
||||||
|
onLoadMoreFeeds,
|
||||||
|
preferences,
|
||||||
|
preferencesError,
|
||||||
|
])
|
||||||
|
const suggestedStarterPacksModule = useMemo(() => {
|
||||||
|
const i: ExploreScreenItems[] = []
|
||||||
i.push({
|
i.push({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
key: 'suggested-starterPacks-header',
|
key: 'suggested-starterPacks-header',
|
||||||
@@ -516,7 +524,7 @@ export function Explore({
|
|||||||
})
|
})
|
||||||
|
|
||||||
if (isLoadingSuggestedSPs) {
|
if (isLoadingSuggestedSPs) {
|
||||||
Array.from({length: 3}).forEach((_, index) =>
|
Array.from({length: 3}).forEach((__, index) =>
|
||||||
i.push({
|
i.push({
|
||||||
type: 'starterPackSkeleton',
|
type: 'starterPackSkeleton',
|
||||||
key: `starterPackSkeleton-${index}`,
|
key: `starterPackSkeleton-${index}`,
|
||||||
@@ -534,9 +542,10 @@ export function Explore({
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
return i
|
||||||
|
}, [suggestedSPs, _, isLoadingSuggestedSPs, suggestedSPsError])
|
||||||
const addFeedPreviews = () => {
|
const feedPreviewsModule = useMemo(() => {
|
||||||
|
const i: ExploreScreenItems[] = []
|
||||||
i.push(...feedPreviewSlices)
|
i.push(...feedPreviewSlices)
|
||||||
if (isFetchingNextPageFeedPreviews) {
|
if (isFetchingNextPageFeedPreviews) {
|
||||||
i.push({
|
i.push({
|
||||||
@@ -544,53 +553,40 @@ export function Explore({
|
|||||||
key: 'preview-loading-more',
|
key: 'preview-loading-more',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
return i
|
||||||
|
}, [feedPreviewSlices, isFetchingNextPageFeedPreviews])
|
||||||
|
|
||||||
|
const isNewUser = guide?.guide === 'follow-10' && !guide.isComplete
|
||||||
|
const items = useMemo<ExploreScreenItems[]>(() => {
|
||||||
|
const i: ExploreScreenItems[] = []
|
||||||
|
|
||||||
// Dynamic module ordering
|
// Dynamic module ordering
|
||||||
|
|
||||||
addTopBorder()
|
i.push(topBorder)
|
||||||
|
if (isNewUser) {
|
||||||
if (guide?.guide === 'follow-10' && !guide.isComplete) {
|
i.push(...suggestedFollowsModule)
|
||||||
addSuggestedFollowsModule()
|
i.push(...suggestedStarterPacksModule)
|
||||||
addSuggestedStarterPacksModule()
|
i.push(trendingTopicsModule)
|
||||||
addTrendingTopicsModule()
|
|
||||||
} else {
|
} else {
|
||||||
addTrendingTopicsModule()
|
i.push(trendingTopicsModule)
|
||||||
addSuggestedFollowsModule()
|
i.push(...suggestedFollowsModule)
|
||||||
addSuggestedStarterPacksModule()
|
i.push(...suggestedStarterPacksModule)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gate('explore_show_suggested_feeds')) {
|
if (gate('explore_show_suggested_feeds')) {
|
||||||
addSuggestedFeedsModule()
|
i.push(...suggestedFeedsModule)
|
||||||
}
|
}
|
||||||
|
i.push(...feedPreviewsModule)
|
||||||
addFeedPreviews()
|
|
||||||
|
|
||||||
return i
|
return i
|
||||||
}, [
|
}, [
|
||||||
_,
|
topBorder,
|
||||||
profiles,
|
isNewUser,
|
||||||
feeds,
|
suggestedFollowsModule,
|
||||||
preferences,
|
suggestedStarterPacksModule,
|
||||||
onLoadMoreFeeds,
|
suggestedFeedsModule,
|
||||||
onLoadMoreProfiles,
|
trendingTopicsModule,
|
||||||
isLoadingMoreProfiles,
|
feedPreviewsModule,
|
||||||
isLoadingMoreFeeds,
|
|
||||||
profilesError,
|
|
||||||
feedsError,
|
|
||||||
preferencesError,
|
|
||||||
hasNextProfilesPage,
|
|
||||||
hasNextFeedsPage,
|
|
||||||
guide,
|
|
||||||
gate,
|
gate,
|
||||||
moderationOpts,
|
|
||||||
hasPressedLoadMoreFeeds,
|
|
||||||
suggestedSPs,
|
|
||||||
isLoadingSuggestedSPs,
|
|
||||||
suggestedSPsError,
|
|
||||||
feedPreviewSlices,
|
|
||||||
isFetchingNextPageFeedPreviews,
|
|
||||||
canShowSuggestedProfiles,
|
|
||||||
])
|
])
|
||||||
|
|
||||||
const renderItem = useCallback(
|
const renderItem = useCallback(
|
||||||
@@ -709,7 +705,7 @@ export function Explore({
|
|||||||
case 'profilePlaceholder': {
|
case 'profilePlaceholder': {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{Array.from({length: 3}).map((_, index) => (
|
{Array.from({length: 3}).map((__, i) => (
|
||||||
<View
|
<View
|
||||||
style={[
|
style={[
|
||||||
a.px_lg,
|
a.px_lg,
|
||||||
@@ -717,7 +713,7 @@ export function Explore({
|
|||||||
a.border_t,
|
a.border_t,
|
||||||
t.atoms.border_contrast_low,
|
t.atoms.border_contrast_low,
|
||||||
]}
|
]}
|
||||||
key={index}>
|
key={i}>
|
||||||
<ProfileCard.Outer>
|
<ProfileCard.Outer>
|
||||||
<ProfileCard.Header>
|
<ProfileCard.Header>
|
||||||
<ProfileCard.AvatarPlaceholder />
|
<ProfileCard.AvatarPlaceholder />
|
||||||
|
|||||||
Reference in New Issue
Block a user