Migrate Feeds screen
This commit is contained in:
+23
-67
@@ -13,7 +13,6 @@ import {useLingui} from '@lingui/react'
|
|||||||
import {useFocusEffect} from '@react-navigation/native'
|
import {useFocusEffect} from '@react-navigation/native'
|
||||||
import debounce from 'lodash.debounce'
|
import debounce from 'lodash.debounce'
|
||||||
|
|
||||||
import {useGate} from '#/lib/statsig/statsig'
|
|
||||||
import {isNative, isWeb} from '#/platform/detection'
|
import {isNative, isWeb} from '#/platform/detection'
|
||||||
import {
|
import {
|
||||||
getAvatarTypeFromUri,
|
getAvatarTypeFromUri,
|
||||||
@@ -151,7 +150,6 @@ export function FeedsScreen(_props: Props) {
|
|||||||
const {hasSession} = useSession()
|
const {hasSession} = useSession()
|
||||||
const listRef = React.useRef<FlatList>(null)
|
const listRef = React.useRef<FlatList>(null)
|
||||||
const searchInputRef = React.useRef<SearchInputRef>(null)
|
const searchInputRef = React.useRef<SearchInputRef>(null)
|
||||||
const gate = useGate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A search query is present. We may not have search results yet.
|
* A search query is present. We may not have search results yet.
|
||||||
@@ -231,57 +229,34 @@ export function FeedsScreen(_props: Props) {
|
|||||||
error: cleanError(preferencesError.toString()),
|
error: cleanError(preferencesError.toString()),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
if (isPreferencesLoading || !preferences?.feeds?.saved) {
|
if (isPreferencesLoading || !preferences?.savedFeeds?.length) {
|
||||||
slices.push({
|
slices.push({
|
||||||
key: 'savedFeedsLoading',
|
key: 'savedFeedsLoading',
|
||||||
type: 'savedFeedsLoading',
|
type: 'savedFeedsLoading',
|
||||||
// pendingItems: this.rootStore.preferences.savedFeeds.length || 3,
|
// pendingItems: this.rootStore.preferences.savedFeeds.length || 3,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const isPrimaryAlgoExperimentEnabled = gate(
|
if (preferences.savedFeeds?.length) {
|
||||||
'reduced_onboarding_and_home_algo',
|
|
||||||
)
|
|
||||||
const primaryAlgo = preferences.primaryAlgorithm
|
|
||||||
|
|
||||||
if (
|
|
||||||
isPrimaryAlgoExperimentEnabled &&
|
|
||||||
primaryAlgo?.enabled &&
|
|
||||||
primaryAlgo?.uri
|
|
||||||
) {
|
|
||||||
slices = slices.concat({
|
|
||||||
key: `savedFeed:${primaryAlgo?.uri}`,
|
|
||||||
type: 'savedFeed',
|
|
||||||
feedUri: primaryAlgo?.uri,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if (preferences?.feeds?.saved.length !== 0) {
|
|
||||||
const {saved, pinned} = preferences.feeds
|
|
||||||
|
|
||||||
slices = slices.concat(
|
slices = slices.concat(
|
||||||
pinned
|
preferences.savedFeeds
|
||||||
.filter(uri => {
|
.filter(f => {
|
||||||
return !(
|
return f.pinned
|
||||||
isPrimaryAlgoExperimentEnabled &&
|
|
||||||
primaryAlgo?.enabled &&
|
|
||||||
primaryAlgo?.uri &&
|
|
||||||
uri === primaryAlgo?.uri
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
.map(uri => ({
|
.map(feed => ({
|
||||||
key: `savedFeed:${uri}`,
|
key: `savedFeed:${feed.value}`,
|
||||||
type: 'savedFeed',
|
type: 'savedFeed',
|
||||||
feedUri: uri,
|
feedUri: feed.value,
|
||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
|
|
||||||
slices = slices.concat(
|
slices = slices.concat(
|
||||||
saved
|
preferences.savedFeeds
|
||||||
.filter(uri => !pinned.includes(uri))
|
.filter(f => {
|
||||||
.map(uri => ({
|
return !f.pinned
|
||||||
key: `savedFeed:${uri}`,
|
})
|
||||||
|
.map(feed => ({
|
||||||
|
key: `savedFeed:${feed.value}`,
|
||||||
type: 'savedFeed',
|
type: 'savedFeed',
|
||||||
feedUri: uri,
|
feedUri: feed.value,
|
||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -351,17 +326,12 @@ export function FeedsScreen(_props: Props) {
|
|||||||
) {
|
) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
const isPrimaryAlgoExperimentEnabled = gate(
|
const alreadySaved = Boolean(
|
||||||
'reduced_onboarding_and_home_algo',
|
preferences?.savedFeeds?.find(f => {
|
||||||
)
|
return f.value === feed.uri
|
||||||
const isPrimaryAlgo =
|
}),
|
||||||
isPrimaryAlgoExperimentEnabled &&
|
|
||||||
preferences?.primaryAlgorithm?.enabled &&
|
|
||||||
preferences?.primaryAlgorithm?.uri === feed.uri
|
|
||||||
return (
|
|
||||||
!preferences?.feeds?.saved.includes(feed.uri) &&
|
|
||||||
!isPrimaryAlgo
|
|
||||||
)
|
)
|
||||||
|
return !alreadySaved
|
||||||
})
|
})
|
||||||
.map(feed => ({
|
.map(feed => ({
|
||||||
key: `popularFeed:${feed.uri}`,
|
key: `popularFeed:${feed.uri}`,
|
||||||
@@ -396,7 +366,6 @@ export function FeedsScreen(_props: Props) {
|
|||||||
isSearchPending,
|
isSearchPending,
|
||||||
searchError,
|
searchError,
|
||||||
isUserSearching,
|
isUserSearching,
|
||||||
gate,
|
|
||||||
])
|
])
|
||||||
|
|
||||||
const renderHeaderBtn = React.useCallback(() => {
|
const renderHeaderBtn = React.useCallback(() => {
|
||||||
@@ -502,7 +471,7 @@ export function FeedsScreen(_props: Props) {
|
|||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
{preferences?.feeds?.saved?.length !== 0 && <FeedsSavedHeader />}
|
{preferences?.savedFeeds?.length !== 0 && <FeedsSavedHeader />}
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
} else if (item.type === 'savedFeedNoResults') {
|
} else if (item.type === 'savedFeedNoResults') {
|
||||||
@@ -518,18 +487,7 @@ export function FeedsScreen(_props: Props) {
|
|||||||
</View>
|
</View>
|
||||||
)
|
)
|
||||||
} else if (item.type === 'savedFeed') {
|
} else if (item.type === 'savedFeed') {
|
||||||
const isPrimaryAlgoExperimentEnabled = gate(
|
return <SavedFeed feedUri={item.feedUri} />
|
||||||
'reduced_onboarding_and_home_algo',
|
|
||||||
)
|
|
||||||
const primaryAlgo = preferences?.primaryAlgorithm
|
|
||||||
const isPrimaryAlgo =
|
|
||||||
isPrimaryAlgoExperimentEnabled &&
|
|
||||||
primaryAlgo?.enabled &&
|
|
||||||
primaryAlgo?.uri === item.feedUri
|
|
||||||
|
|
||||||
return (
|
|
||||||
<SavedFeed feedUri={item.feedUri} isPrimaryAlgo={isPrimaryAlgo} />
|
|
||||||
)
|
|
||||||
} else if (item.type === 'popularFeedsHeader') {
|
} else if (item.type === 'popularFeedsHeader') {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -582,15 +540,13 @@ export function FeedsScreen(_props: Props) {
|
|||||||
pal.icon,
|
pal.icon,
|
||||||
pal.textLight,
|
pal.textLight,
|
||||||
_,
|
_,
|
||||||
preferences?.primaryAlgorithm,
|
preferences?.savedFeeds?.length,
|
||||||
preferences?.feeds?.saved?.length,
|
|
||||||
query,
|
query,
|
||||||
onChangeQuery,
|
onChangeQuery,
|
||||||
onPressCancelSearch,
|
onPressCancelSearch,
|
||||||
onSubmitQuery,
|
onSubmitQuery,
|
||||||
onChangeSearchFocus,
|
onChangeSearchFocus,
|
||||||
hasSession,
|
hasSession,
|
||||||
gate,
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user