Handle home algo with backwards compat

This commit is contained in:
Eric Bailey
2024-04-16 20:38:14 -05:00
parent 41b5b5b283
commit e3a4fcc152
8 changed files with 109 additions and 39 deletions
+8 -5
View File
@@ -1,12 +1,13 @@
import React from 'react'
import {RenderTabBarFnProps} from 'view/com/pager/Pager'
import {HomeHeaderLayout} from './HomeHeaderLayout'
import {FeedSourceInfo} from '#/state/queries/feed'
import {useNavigation} from '@react-navigation/native'
import {usePalette} from '#/lib/hooks/usePalette'
import {FeedSourceInfo} from '#/state/queries/feed'
import {NavigationProp} from 'lib/routes/types'
import {isWeb} from 'platform/detection'
import {RenderTabBarFnProps} from 'view/com/pager/Pager'
import {TabBar} from '../pager/TabBar'
import {usePalette} from '#/lib/hooks/usePalette'
import {HomeHeaderLayout} from './HomeHeaderLayout'
export function HomeHeader(
props: RenderTabBarFnProps & {
@@ -20,7 +21,9 @@ export function HomeHeader(
const pal = usePalette('default')
const hasPinnedCustom = React.useMemo<boolean>(() => {
return feeds.some(tab => tab.uri !== '')
return feeds.some(
tab => !['home', 'home-algo', 'following'].includes(tab.uri),
)
}, [feeds])
const items = React.useMemo(() => {
+32 -13
View File
@@ -53,19 +53,34 @@ function HomeScreenReady({
pinnedFeedInfos: FeedSourceInfo[]
}) {
useOTAUpdates()
const isHomeAlgoExperimentEnabled = useGate(
'reduced_onboarding_and_home_algo',
)
const allFeeds = React.useMemo(() => {
const feeds: FeedDescriptor[] = []
feeds.push('home')
for (const {uri} of pinnedFeedInfos) {
if (uri.includes('app.bsky.feed.generator')) {
feeds.push(`feedgen|${uri}`)
} else if (uri.includes('app.bsky.graph.list')) {
feeds.push(`list|${uri}`)
} else if (uri === 'home-algo') {
// TODO can I ever end up here without a feed?
if (
isHomeAlgoExperimentEnabled &&
preferences.homeAlgo.enabled &&
preferences.homeAlgo.uri
) {
feeds.push(`feedgen|${preferences.homeAlgo.uri}`)
}
} else if (uri === 'home') {
feeds.push('home')
} else if (uri === 'following') {
feeds.push('following')
}
}
return feeds
}, [pinnedFeedInfos])
}, [pinnedFeedInfos, isHomeAlgoExperimentEnabled, preferences.homeAlgo])
const rawSelectedFeed = useSelectedFeed()
const setSelectedFeed = useSetSelectedFeed()
@@ -186,7 +201,6 @@ function HomeScreenReady({
return <CustomFeedEmptyState />
}, [])
const [homeFeed, ...customFeeds] = allFeeds
const homeFeedParams = React.useMemo<FeedParams>(() => {
return {
mergeFeedEnabled: Boolean(preferences.feedViewPrefs.lab_mergeFeedEnabled),
@@ -206,16 +220,21 @@ function HomeScreenReady({
onPageSelected={onPageSelected}
onPageScrollStateChanged={onPageScrollStateChanged}
renderTabBar={renderTabBar}>
<FeedPage
key={homeFeed}
testID="followingFeedPage"
isPageFocused={selectedFeed === homeFeed}
feed={homeFeed}
feedParams={homeFeedParams}
renderEmptyState={renderFollowingEmptyState}
renderEndOfFeed={FollowingEndOfFeed}
/>
{customFeeds.map(feed => {
{allFeeds.map(feed => {
if (feed === 'home') {
return (
<FeedPage
key={'home'}
testID="followingFeedPage"
isPageFocused={selectedFeed === 'home'}
feed={'home'}
feedParams={homeFeedParams}
renderEmptyState={renderFollowingEmptyState}
renderEndOfFeed={FollowingEndOfFeed}
/>
)
}
return (
<FeedPage
key={feed}
+14 -11
View File
@@ -1,16 +1,17 @@
import React from 'react'
import {View, StyleSheet} from 'react-native'
import {useNavigationState, useNavigation} from '@react-navigation/native'
import {usePalette} from 'lib/hooks/usePalette'
import {TextLink} from 'view/com/util/Link'
import {getCurrentRoute} from 'lib/routes/helpers'
import {useLingui} from '@lingui/react'
import {StyleSheet, View} from 'react-native'
import {msg} from '@lingui/macro'
import {usePinnedFeedsInfos} from '#/state/queries/feed'
import {useSelectedFeed, useSetSelectedFeed} from '#/state/shell/selected-feed'
import {FeedDescriptor} from '#/state/queries/post-feed'
import {NavigationProp} from 'lib/routes/types'
import {useLingui} from '@lingui/react'
import {useNavigation, useNavigationState} from '@react-navigation/native'
import {emitSoftReset} from '#/state/events'
import {usePinnedFeedsInfos} from '#/state/queries/feed'
import {FeedDescriptor} from '#/state/queries/post-feed'
import {useSelectedFeed, useSetSelectedFeed} from '#/state/shell/selected-feed'
import {usePalette} from 'lib/hooks/usePalette'
import {getCurrentRoute} from 'lib/routes/helpers'
import {NavigationProp} from 'lib/routes/types'
import {TextLink} from 'view/com/util/Link'
export function DesktopFeeds() {
const pal = usePalette('default')
@@ -33,8 +34,10 @@ export function DesktopFeeds() {
{pinnedFeedInfos.map(feedInfo => {
const uri = feedInfo.uri
let feed: FeedDescriptor
if (!uri) {
if (uri === 'home') {
feed = 'home'
} else if (uri === 'home-algo') {
feed = 'home-algo'
} else if (uri.includes('app.bsky.feed.generator')) {
feed = `feedgen|${uri}`
} else if (uri.includes('app.bsky.graph.list')) {