Fix crash when nothing is pinned (#7510)
This commit is contained in:
+21
-16
@@ -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}
|
||||||
|
|||||||
Reference in New Issue
Block a user