Bump SDK, use contentMode to power video feed

This commit is contained in:
Eric Bailey
2025-01-19 12:41:40 -06:00
parent 5c37e87cf1
commit 7bfc5e42d6
6 changed files with 66 additions and 16 deletions
+6
View File
@@ -48,6 +48,7 @@ export type FeedSourceFeedInfo = {
creatorHandle: string
likeCount: number | undefined
likeUri: string | undefined
contentMode: AppBskyFeedDefs.GeneratorView['contentMode']
}
export type FeedSourceListInfo = {
@@ -65,6 +66,7 @@ export type FeedSourceListInfo = {
description: RichText
creatorDid: string
creatorHandle: string
contentMode: undefined
}
export type FeedSourceInfo = FeedSourceFeedInfo | FeedSourceListInfo
@@ -111,6 +113,7 @@ export function hydrateFeedGenerator(
creatorHandle: view.creator.handle,
likeCount: view.likeCount,
likeUri: view.viewer?.like,
contentMode: view.contentMode,
}
}
@@ -141,6 +144,7 @@ export function hydrateList(view: AppBskyGraphDefs.ListView): FeedSourceInfo {
displayName: view.name
? sanitizeDisplayName(view.name)
: `User List by ${sanitizeHandle(view.creator.handle, '@')}`,
contentMode: undefined,
}
}
@@ -399,6 +403,7 @@ const PWI_DISCOVER_FEED_STUB: SavedFeedSourceInfo = {
id: 'pwi-discover',
...DISCOVER_SAVED_FEED,
},
contentMode: undefined,
}
const pinnedFeedInfosQueryKeyRoot = 'pinnedFeedsInfos'
@@ -485,6 +490,7 @@ export function usePinnedFeedsInfos() {
likeCount: 0,
likeUri: '',
savedFeed: pinnedItem,
contentMode: undefined,
})
}
}
+16 -1
View File
@@ -1,20 +1,23 @@
import React from 'react'
import {View} from 'react-native'
import {AppBskyActorDefs} from '@atproto/api'
import {AppBskyActorDefs, AppBskyFeedDefs} from '@atproto/api'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {NavigationProp, useNavigation} from '@react-navigation/native'
import {useQueryClient} from '@tanstack/react-query'
import {VIDEO_FEED_URI} from '#/lib/constants'
import {ComposeIcon2} from '#/lib/icons'
import {getRootNavigation, getTabState, TabState} from '#/lib/routes/helpers'
import {AllNavigatorParams} from '#/lib/routes/types'
import {logEvent} from '#/lib/statsig/statsig'
import {useGate} from '#/lib/statsig/statsig'
import {s} from '#/lib/styles'
import {isNative} from '#/platform/detection'
import {listenSoftReset} from '#/state/events'
import {FeedFeedbackProvider, useFeedFeedback} from '#/state/feed-feedback'
import {useSetHomeBadge} from '#/state/home-badge'
import {SavedFeedSourceInfo} from '#/state/queries/feed'
import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed'
import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed'
import {truncateAndInvalidate} from '#/state/queries/util'
@@ -39,6 +42,7 @@ export function FeedPage({
renderEmptyState,
renderEndOfFeed,
savedFeedConfig,
feedInfo,
}: {
testID?: string
feed: FeedDescriptor
@@ -48,6 +52,7 @@ export function FeedPage({
renderEmptyState: () => JSX.Element
renderEndOfFeed?: () => JSX.Element
savedFeedConfig?: AppBskyActorDefs.SavedFeed
feedInfo: SavedFeedSourceInfo
}) {
const {hasSession} = useSession()
const {_} = useLingui()
@@ -61,6 +66,15 @@ export function FeedPage({
const scrollElRef = React.useRef<ListMethods>(null)
const [hasNew, setHasNew] = React.useState(false)
const setHomeBadge = useSetHomeBadge()
const gate = useGate()
const isVideoFeed = React.useMemo(() => {
const isBskyVideoFeed = [VIDEO_FEED_URI].includes(feedInfo.uri)
const feedIsVideoMode =
feedInfo.contentMode === AppBskyFeedDefs.CONTENTMODEVIDEO
const isFeatureEnabled = gate('yolo')
const _isVideoFeed = isBskyVideoFeed || feedIsVideoMode
return isFeatureEnabled && isNative && _isVideoFeed
}, [gate, feedInfo])
React.useEffect(() => {
if (isPageFocused) {
@@ -134,6 +148,7 @@ export function FeedPage({
renderEndOfFeed={renderEndOfFeed}
headerOffset={headerOffset}
savedFeedConfig={savedFeedConfig}
isVideoFeed={isVideoFeed}
/>
</FeedFeedbackProvider>
</MainScrollProvider>
+5 -7
View File
@@ -17,7 +17,6 @@ import {useQueryClient} from '@tanstack/react-query'
import {
DISCOVER_FEED_URI,
KNOWN_SHUTDOWN_FEEDS,
VIDEO_FEED_URI,
} from '#/lib/constants'
import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender'
import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
@@ -169,6 +168,7 @@ let PostFeed = ({
extraData,
savedFeedConfig,
initialNumToRender: initialNumToRenderOverride,
isVideoFeed = false,
}: {
feed: FeedDescriptor
feedParams?: FeedParams
@@ -190,6 +190,7 @@ let PostFeed = ({
extraData?: any
savedFeedConfig?: AppBskyActorDefs.SavedFeed
initialNumToRender?: number
isVideoFeed?: boolean
}): React.ReactNode => {
const theme = useTheme()
const {_} = useLingui()
@@ -206,9 +207,6 @@ let PostFeed = ({
const areVideoFeedsEnabled = React.useMemo(() => {
return isNative && gate('yolo')
}, [gate])
const isVideoFeedAndIsEnabled = React.useMemo(() => {
return feedUri === VIDEO_FEED_URI && areVideoFeedsEnabled
}, [feedUri, areVideoFeedsEnabled])
const opts = React.useMemo(
() => ({enabled, ignoreFilterFor}),
@@ -349,7 +347,7 @@ let PostFeed = ({
} else if (data) {
let sliceIndex = -1
if (isVideoFeedAndIsEnabled) {
if (isVideoFeed) {
const videos: {
item: FeedPostSliceItem
feedContext: string | undefined
@@ -486,7 +484,7 @@ let PostFeed = ({
})
}
} else {
if (isVideoFeedAndIsEnabled) {
if (isVideoFeed) {
arr.push({
type: 'videoGridRowPlaceholder',
key: 'videoGridRowPlaceholder',
@@ -515,7 +513,7 @@ let PostFeed = ({
trendingVideoDisabled,
gtTablet,
gtMobile,
isVideoFeedAndIsEnabled,
isVideoFeed,
areVideoFeedsEnabled,
])
+2
View File
@@ -234,6 +234,7 @@ function HomeScreenReady({
feedParams={homeFeedParams}
renderEmptyState={renderFollowingEmptyState}
renderEndOfFeed={FollowingEndOfFeed}
feedInfo={feedInfo}
/>
)
}
@@ -247,6 +248,7 @@ function HomeScreenReady({
feed={feed}
renderEmptyState={renderCustomFeedEmptyState}
savedFeedConfig={savedFeedConfig}
feedInfo={feedInfo}
/>
)
})