From e02ea9ee261b5751394585e79b944fae4a0e87a7 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Thu, 18 Apr 2024 10:19:57 -0500 Subject: [PATCH] Clarify primary algo usage --- src/state/queries/post-feed.ts | 6 +++++- src/state/shell/selected-feed.tsx | 9 ++++++--- src/view/com/home/HomeHeader.tsx | 4 +--- src/view/screens/Home.tsx | 4 ++++ src/view/shell/desktop/Feeds.tsx | 2 -- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index d0c221134e..73937d895e 100644 --- a/src/state/queries/post-feed.ts +++ b/src/state/queries/post-feed.ts @@ -43,8 +43,12 @@ type AuthorFilter = | 'posts_with_media' type FeedUri = string type ListUri = string +/** + * Represents a "not found" state, that results in the left-most tab being + * selected on the Home screen. + */ +export const DEFAULT_FEED_DESCRIPTOR = '__default__' export type FeedDescriptor = - | 'primary-algo' | 'home' | 'following' | `author|${ActorDid}|${AuthorFilter}` diff --git a/src/state/shell/selected-feed.tsx b/src/state/shell/selected-feed.tsx index 307de96e6a..a77801a9dd 100644 --- a/src/state/shell/selected-feed.tsx +++ b/src/state/shell/selected-feed.tsx @@ -4,6 +4,7 @@ import {Gate} from '#/lib/statsig/gates' import {useGate} from '#/lib/statsig/statsig' import {isWeb} from '#/platform/detection' import * as persisted from '#/state/persisted' +import {DEFAULT_FEED_DESCRIPTOR} from '#/state/queries/post-feed' type StateContext = string type SetContext = (v: string) => void @@ -15,7 +16,7 @@ function getInitialFeed(gate: (gateName: Gate) => boolean) { const isPrimaryAlgoExperimentEnabled = gate( 'reduced_onboarding_and_home_algo', ) - let feed = isPrimaryAlgoExperimentEnabled ? 'primary-algo' : 'home' + let feed = DEFAULT_FEED_DESCRIPTOR if (isWeb) { if (window.location.pathname === '/') { @@ -40,13 +41,15 @@ function getInitialFeed(gate: (gateName: Gate) => boolean) { } if (isPrimaryAlgoExperimentEnabled) { + // following feed if (feed === 'home') { return 'home' } - return 'primary-algo' + // or left-most tab + return DEFAULT_FEED_DESCRIPTOR } - return 'home' + return DEFAULT_FEED_DESCRIPTOR } export function Provider({children}: React.PropsWithChildren<{}>) { diff --git a/src/view/com/home/HomeHeader.tsx b/src/view/com/home/HomeHeader.tsx index fe37fb2b76..24e9551c91 100644 --- a/src/view/com/home/HomeHeader.tsx +++ b/src/view/com/home/HomeHeader.tsx @@ -24,9 +24,7 @@ export function HomeHeader( const hasPinnedCustom = React.useMemo(() => { if (!hasSession) return false - return feeds.some( - tab => !['home', 'primary-algo', 'following'].includes(tab.uri), - ) + return feeds.some(tab => !['home', 'following'].includes(tab.uri)) }, [feeds, hasSession]) const items = React.useMemo(() => { diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index d97251979e..1ff850526f 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -74,6 +74,10 @@ function HomeScreenReady({ const rawSelectedFeed = useSelectedFeed() const setSelectedFeed = useSetSelectedFeed() const maybeFoundIndex = allFeeds.indexOf(rawSelectedFeed as FeedDescriptor) + /* + * N.B. if DEFAULT_FEED_DESCRIPTOR, maybeFoundIndex will be -1 and we'll fall + * back to 0 + */ const selectedIndex = Math.max(0, maybeFoundIndex) const selectedFeed = allFeeds[selectedIndex] diff --git a/src/view/shell/desktop/Feeds.tsx b/src/view/shell/desktop/Feeds.tsx index 9fe0aec3e7..3e5d36abec 100644 --- a/src/view/shell/desktop/Feeds.tsx +++ b/src/view/shell/desktop/Feeds.tsx @@ -36,8 +36,6 @@ export function DesktopFeeds() { let feed: FeedDescriptor if (uri === 'home') { feed = 'home' - } else if (uri === 'primary-algo') { - feed = 'primary-algo' } else if (uri.includes('app.bsky.feed.generator')) { feed = `feedgen|${uri}` } else if (uri.includes('app.bsky.graph.list')) {