[Experiment] Turn off interval polling for Discover (#3431)
* Include feed URL in feed events * [Experiment] Turn off polling interval for Discover
This commit is contained in:
parent
1150007d37
commit
8188f61e7d
3 changed files with 65 additions and 45 deletions
|
@ -45,10 +45,12 @@ export type LogEvents = {
|
||||||
'onboarding:moderation:nextPressed': {}
|
'onboarding:moderation:nextPressed': {}
|
||||||
'onboarding:finished:nextPressed': {}
|
'onboarding:finished:nextPressed': {}
|
||||||
'feed:endReached': {
|
'feed:endReached': {
|
||||||
|
feedUrl: string
|
||||||
feedType: string
|
feedType: string
|
||||||
itemCount: number
|
itemCount: number
|
||||||
}
|
}
|
||||||
'feed:refresh': {
|
'feed:refresh': {
|
||||||
|
feedUrl: string
|
||||||
feedType: string
|
feedType: string
|
||||||
reason: 'pull-to-refresh' | 'soft-reset' | 'load-latest'
|
reason: 'pull-to-refresh' | 'soft-reset' | 'load-latest'
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +1,29 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useWindowDimensions, View} from 'react-native'
|
||||||
import {useAnalytics} from 'lib/analytics/analytics'
|
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
|
||||||
import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed'
|
|
||||||
import {MainScrollProvider} from '../util/MainScrollProvider'
|
|
||||||
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
|
|
||||||
import {useSetMinimalShellMode} from '#/state/shell'
|
|
||||||
import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed'
|
|
||||||
import {ComposeIcon2} from 'lib/icons'
|
|
||||||
import {s} from 'lib/styles'
|
|
||||||
import {View, useWindowDimensions} from 'react-native'
|
|
||||||
import {ListMethods} from '../util/List'
|
|
||||||
import {Feed} from '../posts/Feed'
|
|
||||||
import {FAB} from '../util/fab/FAB'
|
|
||||||
import {LoadLatestBtn} from '../util/load-latest/LoadLatestBtn'
|
|
||||||
import {msg} from '@lingui/macro'
|
import {msg} from '@lingui/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {useSession} from '#/state/session'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
import {useComposerControls} from '#/state/shell/composer'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
import {listenSoftReset} from '#/state/events'
|
|
||||||
import {truncateAndInvalidate} from '#/state/queries/util'
|
import {getRootNavigation, getTabState, TabState} from '#/lib/routes/helpers'
|
||||||
import {TabState, getTabState, getRootNavigation} from '#/lib/routes/helpers'
|
import {logEvent, useGate} from '#/lib/statsig/statsig'
|
||||||
import {isNative} from '#/platform/detection'
|
import {isNative} from '#/platform/detection'
|
||||||
import {logEvent} from '#/lib/statsig/statsig'
|
import {listenSoftReset} from '#/state/events'
|
||||||
|
import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed'
|
||||||
|
import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed'
|
||||||
|
import {truncateAndInvalidate} from '#/state/queries/util'
|
||||||
|
import {useSession} from '#/state/session'
|
||||||
|
import {useSetMinimalShellMode} from '#/state/shell'
|
||||||
|
import {useComposerControls} from '#/state/shell/composer'
|
||||||
|
import {useAnalytics} from 'lib/analytics/analytics'
|
||||||
|
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
|
||||||
|
import {ComposeIcon2} from 'lib/icons'
|
||||||
|
import {s} from 'lib/styles'
|
||||||
|
import {Feed} from '../posts/Feed'
|
||||||
|
import {FAB} from '../util/fab/FAB'
|
||||||
|
import {ListMethods} from '../util/List'
|
||||||
|
import {LoadLatestBtn} from '../util/load-latest/LoadLatestBtn'
|
||||||
|
import {MainScrollProvider} from '../util/MainScrollProvider'
|
||||||
|
|
||||||
const POLL_FREQ = 60e3 // 60sec
|
const POLL_FREQ = 60e3 // 60sec
|
||||||
|
|
||||||
|
@ -71,6 +72,7 @@ export function FeedPage({
|
||||||
setHasNew(false)
|
setHasNew(false)
|
||||||
logEvent('feed:refresh', {
|
logEvent('feed:refresh', {
|
||||||
feedType: feed.split('|')[0],
|
feedType: feed.split('|')[0],
|
||||||
|
feedUrl: feed,
|
||||||
reason: 'soft-reset',
|
reason: 'soft-reset',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -96,10 +98,22 @@ export function FeedPage({
|
||||||
setHasNew(false)
|
setHasNew(false)
|
||||||
logEvent('feed:refresh', {
|
logEvent('feed:refresh', {
|
||||||
feedType: feed.split('|')[0],
|
feedType: feed.split('|')[0],
|
||||||
|
feedUrl: feed,
|
||||||
reason: 'load-latest',
|
reason: 'load-latest',
|
||||||
})
|
})
|
||||||
}, [scrollToTop, feed, queryClient, setHasNew])
|
}, [scrollToTop, feed, queryClient, setHasNew])
|
||||||
|
|
||||||
|
let feedPollInterval
|
||||||
|
if (
|
||||||
|
useGate('disable_poll_on_discover') &&
|
||||||
|
feed === // Discover
|
||||||
|
'feedgen|at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot'
|
||||||
|
) {
|
||||||
|
feedPollInterval = undefined
|
||||||
|
} else {
|
||||||
|
feedPollInterval = POLL_FREQ
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View testID={testID} style={s.h100pct}>
|
<View testID={testID} style={s.h100pct}>
|
||||||
<MainScrollProvider>
|
<MainScrollProvider>
|
||||||
|
@ -108,7 +122,7 @@ export function FeedPage({
|
||||||
enabled={isPageFocused}
|
enabled={isPageFocused}
|
||||||
feed={feed}
|
feed={feed}
|
||||||
feedParams={feedParams}
|
feedParams={feedParams}
|
||||||
pollInterval={POLL_FREQ}
|
pollInterval={feedPollInterval}
|
||||||
disablePoll={hasNew}
|
disablePoll={hasNew}
|
||||||
scrollElRef={scrollElRef}
|
scrollElRef={scrollElRef}
|
||||||
onScrolledDownChange={setIsScrolledDown}
|
onScrolledDownChange={setIsScrolledDown}
|
||||||
|
|
|
@ -8,32 +8,33 @@ import {
|
||||||
View,
|
View,
|
||||||
ViewStyle,
|
ViewStyle,
|
||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
|
||||||
import {List, ListRef} from '../util/List'
|
|
||||||
import {PostFeedLoadingPlaceholder} from '../util/LoadingPlaceholder'
|
|
||||||
import {FeedErrorMessage} from './FeedErrorMessage'
|
|
||||||
import {FeedSlice} from './FeedSlice'
|
|
||||||
import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
|
|
||||||
import {useAnalytics} from 'lib/analytics/analytics'
|
|
||||||
import {useTheme} from 'lib/ThemeContext'
|
|
||||||
import {logger} from '#/logger'
|
|
||||||
import {
|
|
||||||
RQKEY,
|
|
||||||
FeedDescriptor,
|
|
||||||
FeedParams,
|
|
||||||
usePostFeedQuery,
|
|
||||||
pollLatest,
|
|
||||||
} from '#/state/queries/post-feed'
|
|
||||||
import {isWeb} from '#/platform/detection'
|
|
||||||
import {listenPostCreated} from '#/state/events'
|
|
||||||
import {useSession} from '#/state/session'
|
|
||||||
import {STALE} from '#/state/queries'
|
|
||||||
import {msg} from '@lingui/macro'
|
import {msg} from '@lingui/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {DiscoverFallbackHeader} from './DiscoverFallbackHeader'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
|
|
||||||
import {FALLBACK_MARKER_POST} from '#/lib/api/feed/home'
|
import {FALLBACK_MARKER_POST} from '#/lib/api/feed/home'
|
||||||
import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
|
|
||||||
import {logEvent} from '#/lib/statsig/statsig'
|
import {logEvent} from '#/lib/statsig/statsig'
|
||||||
|
import {logger} from '#/logger'
|
||||||
|
import {isWeb} from '#/platform/detection'
|
||||||
|
import {listenPostCreated} from '#/state/events'
|
||||||
|
import {STALE} from '#/state/queries'
|
||||||
|
import {
|
||||||
|
FeedDescriptor,
|
||||||
|
FeedParams,
|
||||||
|
pollLatest,
|
||||||
|
RQKEY,
|
||||||
|
usePostFeedQuery,
|
||||||
|
} from '#/state/queries/post-feed'
|
||||||
|
import {useSession} from '#/state/session'
|
||||||
|
import {useAnalytics} from 'lib/analytics/analytics'
|
||||||
|
import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
|
||||||
|
import {useTheme} from 'lib/ThemeContext'
|
||||||
|
import {List, ListRef} from '../util/List'
|
||||||
|
import {PostFeedLoadingPlaceholder} from '../util/LoadingPlaceholder'
|
||||||
|
import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
|
||||||
|
import {DiscoverFallbackHeader} from './DiscoverFallbackHeader'
|
||||||
|
import {FeedErrorMessage} from './FeedErrorMessage'
|
||||||
|
import {FeedSlice} from './FeedSlice'
|
||||||
|
|
||||||
const LOADING_ITEM = {_reactKey: '__loading__'}
|
const LOADING_ITEM = {_reactKey: '__loading__'}
|
||||||
const EMPTY_FEED_ITEM = {_reactKey: '__empty__'}
|
const EMPTY_FEED_ITEM = {_reactKey: '__empty__'}
|
||||||
|
@ -217,6 +218,7 @@ let Feed = ({
|
||||||
track('Feed:onRefresh')
|
track('Feed:onRefresh')
|
||||||
logEvent('feed:refresh', {
|
logEvent('feed:refresh', {
|
||||||
feedType: feedType,
|
feedType: feedType,
|
||||||
|
feedUrl: feed,
|
||||||
reason: 'pull-to-refresh',
|
reason: 'pull-to-refresh',
|
||||||
})
|
})
|
||||||
setIsPTRing(true)
|
setIsPTRing(true)
|
||||||
|
@ -227,13 +229,14 @@ let Feed = ({
|
||||||
logger.error('Failed to refresh posts feed', {message: err})
|
logger.error('Failed to refresh posts feed', {message: err})
|
||||||
}
|
}
|
||||||
setIsPTRing(false)
|
setIsPTRing(false)
|
||||||
}, [refetch, track, setIsPTRing, onHasNew, feedType])
|
}, [refetch, track, setIsPTRing, onHasNew, feed, feedType])
|
||||||
|
|
||||||
const onEndReached = React.useCallback(async () => {
|
const onEndReached = React.useCallback(async () => {
|
||||||
if (isFetching || !hasNextPage || isError) return
|
if (isFetching || !hasNextPage || isError) return
|
||||||
|
|
||||||
logEvent('feed:endReached', {
|
logEvent('feed:endReached', {
|
||||||
feedType: feedType,
|
feedType: feedType,
|
||||||
|
feedUrl: feed,
|
||||||
itemCount: feedItems.length,
|
itemCount: feedItems.length,
|
||||||
})
|
})
|
||||||
track('Feed:onEndReached')
|
track('Feed:onEndReached')
|
||||||
|
@ -248,6 +251,7 @@ let Feed = ({
|
||||||
isError,
|
isError,
|
||||||
fetchNextPage,
|
fetchNextPage,
|
||||||
track,
|
track,
|
||||||
|
feed,
|
||||||
feedType,
|
feedType,
|
||||||
feedItems.length,
|
feedItems.length,
|
||||||
])
|
])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue