This commit is contained in:
Dan Abramov
2025-01-19 21:03:55 +00:00
parent 69c035214d
commit 4ce40dd8a3
6 changed files with 27 additions and 51 deletions
-1
View File
@@ -7,4 +7,3 @@ export type Gate =
| 'test_gate_1' | 'test_gate_1'
| 'test_gate_2' | 'test_gate_2'
| 'trending_topics_beta' | 'trending_topics_beta'
| 'yolo'
+2 -5
View File
@@ -14,7 +14,6 @@ import {useSetTitle} from '#/lib/hooks/useSetTitle'
import {ComposeIcon2} from '#/lib/icons' import {ComposeIcon2} from '#/lib/icons'
import {CommonNavigatorParams} from '#/lib/routes/types' import {CommonNavigatorParams} from '#/lib/routes/types'
import {NavigationProp} from '#/lib/routes/types' import {NavigationProp} from '#/lib/routes/types'
import {useGate} from '#/lib/statsig/statsig'
import {makeRecordUri} from '#/lib/strings/url-helpers' import {makeRecordUri} from '#/lib/strings/url-helpers'
import {s} from '#/lib/styles' import {s} from '#/lib/styles'
import {isNative} from '#/platform/detection' import {isNative} from '#/platform/detection'
@@ -190,15 +189,13 @@ export function ProfileFeedScreenInner({
return <EmptyState icon="hashtag" message={_(msg`This feed is empty.`)} /> return <EmptyState icon="hashtag" message={_(msg`This feed is empty.`)} />
}, [_]) }, [_])
const gate = useGate()
const isVideoFeed = React.useMemo(() => { const isVideoFeed = React.useMemo(() => {
const isBskyVideoFeed = VIDEO_FEED_URIS.includes(feedInfo.uri) const isBskyVideoFeed = VIDEO_FEED_URIS.includes(feedInfo.uri)
const feedIsVideoMode = const feedIsVideoMode =
feedInfo.contentMode === AppBskyFeedDefs.CONTENTMODEVIDEO feedInfo.contentMode === AppBskyFeedDefs.CONTENTMODEVIDEO
const isFeatureEnabled = gate('yolo')
const _isVideoFeed = isBskyVideoFeed || feedIsVideoMode const _isVideoFeed = isBskyVideoFeed || feedIsVideoMode
return isFeatureEnabled && isNative && _isVideoFeed return isNative && _isVideoFeed
}, [gate, feedInfo]) }, [feedInfo])
return ( return (
<> <>
@@ -1,11 +1,9 @@
import React from 'react'
import {msg, Trans} from '@lingui/macro' import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
import {NativeStackScreenProps} from '@react-navigation/native-stack' import {NativeStackScreenProps} from '@react-navigation/native-stack'
import {CommonNavigatorParams} from '#/lib/routes/types' import {CommonNavigatorParams} from '#/lib/routes/types'
import {logEvent} from '#/lib/statsig/statsig' import {logEvent} from '#/lib/statsig/statsig'
import {useGate} from '#/lib/statsig/statsig'
import {isNative} from '#/platform/detection' import {isNative} from '#/platform/detection'
import {useAutoplayDisabled, useSetAutoplayDisabled} from '#/state/preferences' import {useAutoplayDisabled, useSetAutoplayDisabled} from '#/state/preferences'
import { import {
@@ -42,10 +40,6 @@ export function ContentAndMediaSettingsScreen({}: Props) {
const {trendingDisabled, trendingVideoDisabled} = useTrendingSettings() const {trendingDisabled, trendingVideoDisabled} = useTrendingSettings()
const {setTrendingDisabled, setTrendingVideoDisabled} = const {setTrendingDisabled, setTrendingVideoDisabled} =
useTrendingSettingsApi() useTrendingSettingsApi()
const gate = useGate()
const areVideoFeedsEnabled = React.useMemo(() => {
return gate('yolo')
}, [gate])
return ( return (
<Layout.Screen> <Layout.Screen>
@@ -145,31 +139,27 @@ export function ContentAndMediaSettingsScreen({}: Props) {
<Toggle.Platform /> <Toggle.Platform />
</SettingsList.Item> </SettingsList.Item>
</Toggle.Item> </Toggle.Item>
{areVideoFeedsEnabled && ( <Toggle.Item
<Toggle.Item name="show_trending_videos"
name="show_trending_videos" label={_(msg`Enable trending videos in your Discover feed.`)}
label={_(msg`Enable trending videos in your Discover feed.`)} value={!trendingVideoDisabled}
value={!trendingVideoDisabled} onChange={value => {
onChange={value => { const hide = Boolean(!value)
const hide = Boolean(!value) if (hide) {
if (hide) { logEvent('trendingVideos:hide', {context: 'settings'})
logEvent('trendingVideos:hide', {context: 'settings'}) } else {
} else { logEvent('trendingVideos:show', {context: 'settings'})
logEvent('trendingVideos:show', {context: 'settings'}) }
} setTrendingVideoDisabled(hide)
setTrendingVideoDisabled(hide) }}>
}}> <SettingsList.Item>
<SettingsList.Item> <SettingsList.ItemIcon icon={Graph} />
<SettingsList.ItemIcon icon={Graph} /> <SettingsList.ItemText>
<SettingsList.ItemText> <Trans>Enable trending videos in your Discover feed</Trans>
<Trans> </SettingsList.ItemText>
Enable trending videos in your Discover feed <Toggle.Platform />
</Trans> </SettingsList.Item>
</SettingsList.ItemText> </Toggle.Item>
<Toggle.Platform />
</SettingsList.Item>
</Toggle.Item>
)}
</> </>
)} )}
</SettingsList.Container> </SettingsList.Container>
+2 -5
View File
@@ -11,7 +11,6 @@ import {ComposeIcon2} from '#/lib/icons'
import {getRootNavigation, getTabState, TabState} from '#/lib/routes/helpers' import {getRootNavigation, getTabState, TabState} from '#/lib/routes/helpers'
import {AllNavigatorParams} from '#/lib/routes/types' import {AllNavigatorParams} from '#/lib/routes/types'
import {logEvent} from '#/lib/statsig/statsig' import {logEvent} from '#/lib/statsig/statsig'
import {useGate} from '#/lib/statsig/statsig'
import {s} from '#/lib/styles' import {s} from '#/lib/styles'
import {isNative} from '#/platform/detection' import {isNative} from '#/platform/detection'
import {listenSoftReset} from '#/state/events' import {listenSoftReset} from '#/state/events'
@@ -66,15 +65,13 @@ export function FeedPage({
const scrollElRef = React.useRef<ListMethods>(null) const scrollElRef = React.useRef<ListMethods>(null)
const [hasNew, setHasNew] = React.useState(false) const [hasNew, setHasNew] = React.useState(false)
const setHomeBadge = useSetHomeBadge() const setHomeBadge = useSetHomeBadge()
const gate = useGate()
const isVideoFeed = React.useMemo(() => { const isVideoFeed = React.useMemo(() => {
const isBskyVideoFeed = VIDEO_FEED_URIS.includes(feedInfo.uri) const isBskyVideoFeed = VIDEO_FEED_URIS.includes(feedInfo.uri)
const feedIsVideoMode = const feedIsVideoMode =
feedInfo.contentMode === AppBskyFeedDefs.CONTENTMODEVIDEO feedInfo.contentMode === AppBskyFeedDefs.CONTENTMODEVIDEO
const isFeatureEnabled = gate('yolo')
const _isVideoFeed = isBskyVideoFeed || feedIsVideoMode const _isVideoFeed = isBskyVideoFeed || feedIsVideoMode
return isFeatureEnabled && isNative && _isVideoFeed return isNative && _isVideoFeed
}, [gate, feedInfo]) }, [feedInfo])
React.useEffect(() => { React.useEffect(() => {
if (isPageFocused) { if (isPageFocused) {
+1 -5
View File
@@ -17,7 +17,6 @@ import {useQueryClient} from '@tanstack/react-query'
import {DISCOVER_FEED_URI, KNOWN_SHUTDOWN_FEEDS} from '#/lib/constants' import {DISCOVER_FEED_URI, KNOWN_SHUTDOWN_FEEDS} from '#/lib/constants'
import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender' import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
import {useGate} from '#/lib/statsig/statsig'
import {logEvent} from '#/lib/statsig/statsig' import {logEvent} from '#/lib/statsig/statsig'
import {useTheme} from '#/lib/ThemeContext' import {useTheme} from '#/lib/ThemeContext'
import {logger} from '#/logger' import {logger} from '#/logger'
@@ -200,10 +199,7 @@ let PostFeed = ({
const lastFetchRef = React.useRef<number>(Date.now()) const lastFetchRef = React.useRef<number>(Date.now())
const [feedType, feedUri, feedTab] = feed.split('|') const [feedType, feedUri, feedTab] = feed.split('|')
const {gtMobile, gtTablet} = useBreakpoints() const {gtMobile, gtTablet} = useBreakpoints()
const gate = useGate() const areVideoFeedsEnabled = isNative
const areVideoFeedsEnabled = React.useMemo(() => {
return isNative && gate('yolo')
}, [gate])
const feedCacheKey = feedParams?.feedCacheKey const feedCacheKey = feedParams?.feedCacheKey
const opts = React.useMemo( const opts = React.useMemo(
+1 -4
View File
@@ -10,7 +10,6 @@ import {
import {msg, Trans} from '@lingui/macro' import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
import {useGate} from '#/lib/statsig/statsig'
import {cleanError} from '#/lib/strings/errors' import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger' import {logger} from '#/logger'
import {isNative, isWeb} from '#/platform/detection' import {isNative, isWeb} from '#/platform/detection'
@@ -309,7 +308,6 @@ export function Explore() {
error: feedsError, error: feedsError,
fetchNextPage: fetchNextFeedsPage, fetchNextPage: fetchNextFeedsPage,
} = useGetPopularFeedsQuery({limit: 10}) } = useGetPopularFeedsQuery({limit: 10})
const gate = useGate()
const isLoadingMoreProfiles = isFetchingNextProfilesPage && !isLoadingProfiles const isLoadingMoreProfiles = isFetchingNextProfilesPage && !isLoadingProfiles
const onLoadMoreProfiles = React.useCallback(async () => { const onLoadMoreProfiles = React.useCallback(async () => {
@@ -350,7 +348,7 @@ export function Explore() {
key: `trending-topics`, key: `trending-topics`,
}) })
if (isNative && gate('yolo')) { if (isNative) {
i.push({ i.push({
type: 'trendingVideos', type: 'trendingVideos',
key: `trending-videos`, key: `trending-videos`,
@@ -510,7 +508,6 @@ export function Explore() {
preferencesError, preferencesError,
hasNextProfilesPage, hasNextProfilesPage,
hasNextFeedsPage, hasNextFeedsPage,
gate,
]) ])
const renderItem = React.useCallback( const renderItem = React.useCallback(