Fix crash when nothing is pinned (#7510)

This commit is contained in:
dan
2025-01-20 21:00:40 +00:00
committed by GitHub
parent fe9bb792aa
commit 2e8f2d58ec
+21 -16
View File
@@ -15,7 +15,7 @@ import {logEvent} from '#/lib/statsig/statsig'
import {isWeb} from '#/platform/detection' import {isWeb} from '#/platform/detection'
import {emitSoftReset} from '#/state/events' import {emitSoftReset} from '#/state/events'
import {SavedFeedSourceInfo, usePinnedFeedsInfos} from '#/state/queries/feed' import {SavedFeedSourceInfo, usePinnedFeedsInfos} from '#/state/queries/feed'
import {FeedParams} from '#/state/queries/post-feed' import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed'
import {usePreferencesQuery} from '#/state/queries/preferences' import {usePreferencesQuery} from '#/state/queries/preferences'
import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types' import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
import {useSession} from '#/state/session' import {useSession} from '#/state/session'
@@ -99,11 +99,12 @@ function HomeScreenReady({
() => pinnedFeedInfos.map(f => f.feedDescriptor), () => pinnedFeedInfos.map(f => f.feedDescriptor),
[pinnedFeedInfos], [pinnedFeedInfos],
) )
const rawSelectedFeed = useSelectedFeed() ?? allFeeds[0] const maybeRawSelectedFeed: FeedDescriptor | undefined =
useSelectedFeed() ?? allFeeds[0]
const setSelectedFeed = useSetSelectedFeed() const setSelectedFeed = useSetSelectedFeed()
const maybeFoundIndex = allFeeds.indexOf(rawSelectedFeed) const maybeFoundIndex = allFeeds.indexOf(maybeRawSelectedFeed)
const selectedIndex = Math.max(0, maybeFoundIndex) const selectedIndex = Math.max(0, maybeFoundIndex)
const selectedFeed = allFeeds[selectedIndex] const maybeSelectedFeed: FeedDescriptor | undefined = allFeeds[selectedIndex]
const requestNotificationsPermission = useRequestNotificationsPermission() const requestNotificationsPermission = useRequestNotificationsPermission()
useSetTitle(pinnedFeedInfos[selectedIndex]?.displayName) useSetTitle(pinnedFeedInfos[selectedIndex]?.displayName)
@@ -135,11 +136,11 @@ function HomeScreenReady({
useFocusEffect( useFocusEffect(
useNonReactiveCallback(() => { useNonReactiveCallback(() => {
if (selectedFeed) { if (maybeSelectedFeed) {
logEvent('home:feedDisplayed', { logEvent('home:feedDisplayed', {
index: selectedIndex, index: selectedIndex,
feedType: selectedFeed.split('|')[0], feedType: maybeSelectedFeed.split('|')[0],
feedUrl: selectedFeed, feedUrl: maybeSelectedFeed,
reason: 'focus', reason: 'focus',
}) })
} }
@@ -149,16 +150,20 @@ function HomeScreenReady({
const onPageSelected = React.useCallback( const onPageSelected = React.useCallback(
(index: number) => { (index: number) => {
setMinimalShellMode(false) setMinimalShellMode(false)
const feed = allFeeds[index] const maybeFeed = allFeeds[index]
// Mutate the ref before setting state to avoid the imperative syncing effect // Mutate the ref before setting state to avoid the imperative syncing effect
// above from starting a loop on Android when swiping back and forth. // above from starting a loop on Android when swiping back and forth.
lastPagerReportedIndexRef.current = index lastPagerReportedIndexRef.current = index
setSelectedFeed(feed) setSelectedFeed(maybeFeed)
logEvent('home:feedDisplayed', {
index, if (maybeFeed) {
feedType: feed.split('|')[0], logEvent('home:feedDisplayed', {
feedUrl: feed, index,
}) feedType: maybeFeed.split('|')[0],
feedUrl: maybeFeed,
})
}
}, },
[setSelectedFeed, setMinimalShellMode, allFeeds], [setSelectedFeed, setMinimalShellMode, allFeeds],
) )
@@ -228,7 +233,7 @@ function HomeScreenReady({
<FeedPage <FeedPage
key={feed} key={feed}
testID="followingFeedPage" testID="followingFeedPage"
isPageFocused={selectedFeed === feed} isPageFocused={maybeSelectedFeed === feed}
isPageAdjacent={Math.abs(selectedIndex - index) === 1} isPageAdjacent={Math.abs(selectedIndex - index) === 1}
feed={feed} feed={feed}
feedParams={homeFeedParams} feedParams={homeFeedParams}
@@ -243,7 +248,7 @@ function HomeScreenReady({
<FeedPage <FeedPage
key={feed} key={feed}
testID="customFeedPage" testID="customFeedPage"
isPageFocused={selectedFeed === feed} isPageFocused={maybeSelectedFeed === feed}
isPageAdjacent={Math.abs(selectedIndex - index) === 1} isPageAdjacent={Math.abs(selectedIndex - index) === 1}
feed={feed} feed={feed}
renderEmptyState={renderCustomFeedEmptyState} renderEmptyState={renderCustomFeedEmptyState}