Ungate
This commit is contained in:
@@ -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'
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user