fix
This commit is contained in:
@@ -1,76 +1,50 @@
|
||||
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx
|
||||
index e058e2883..1d6bc4f45 100644
|
||||
index e058e2883..03d7dc990 100644
|
||||
--- a/src/view/screens/Home.tsx
|
||||
+++ b/src/view/screens/Home.tsx
|
||||
@@ -1,342 +1,139 @@
|
||||
@@ -1,23 +1,16 @@
|
||||
import React from 'react'
|
||||
-import {ActivityIndicator, StyleSheet} from 'react-native'
|
||||
-import {useFocusEffect} from '@react-navigation/native'
|
||||
import {ActivityIndicator, StyleSheet} from 'react-native'
|
||||
import {useFocusEffect} from '@react-navigation/native'
|
||||
-
|
||||
-import {PROD_DEFAULT_FEED} from '#/lib/constants'
|
||||
-import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
|
||||
-import {useOTAUpdates} from '#/lib/hooks/useOTAUpdates'
|
||||
-import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
||||
-import {useRequestNotificationsPermission} from '#/lib/notifications/notifications'
|
||||
import {PROD_DEFAULT_FEED} from '#/lib/constants'
|
||||
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
|
||||
import {useOTAUpdates} from '#/lib/hooks/useOTAUpdates'
|
||||
import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
||||
import {useRequestNotificationsPermission} from '#/lib/notifications/notifications'
|
||||
-import {
|
||||
- type HomeTabNavigatorParams,
|
||||
- type NativeStackScreenProps,
|
||||
-} from '#/lib/routes/types'
|
||||
-import {logEvent} from '#/lib/statsig/statsig'
|
||||
-import {isWeb} from '#/platform/detection'
|
||||
-import {emitSoftReset} from '#/state/events'
|
||||
+import {type HomeTabNavigatorParams, type NativeStackScreenProps} from '#/lib/routes/types'
|
||||
import {logEvent} from '#/lib/statsig/statsig'
|
||||
import {isWeb} from '#/platform/detection'
|
||||
import {emitSoftReset} from '#/state/events'
|
||||
-import {
|
||||
- type SavedFeedSourceInfo,
|
||||
- usePinnedFeedsInfos,
|
||||
-} from '#/state/queries/feed'
|
||||
-import {type FeedDescriptor, type FeedParams} from '#/state/queries/post-feed'
|
||||
-import {usePreferencesQuery} from '#/state/queries/preferences'
|
||||
-import {type UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
|
||||
-import {useSession} from '#/state/session'
|
||||
-import {useSetMinimalShellMode} from '#/state/shell'
|
||||
-import {useLoggedOutViewControls} from '#/state/shell/logged-out'
|
||||
-import {useSelectedFeed, useSetSelectedFeed} from '#/state/shell/selected-feed'
|
||||
-import {FeedPage} from '#/view/com/feeds/FeedPage'
|
||||
-import {HomeHeader} from '#/view/com/home/HomeHeader'
|
||||
+import {type SavedFeedSourceInfo, usePinnedFeedsInfos} from '#/state/queries/feed'
|
||||
import {type FeedDescriptor, type FeedParams} from '#/state/queries/post-feed'
|
||||
import {usePreferencesQuery} from '#/state/queries/preferences'
|
||||
import {type UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
|
||||
@@ -27,11 +20,7 @@ import {useLoggedOutViewControls} from '#/state/shell/logged-out'
|
||||
import {useSelectedFeed, useSetSelectedFeed} from '#/state/shell/selected-feed'
|
||||
import {FeedPage} from '#/view/com/feeds/FeedPage'
|
||||
import {HomeHeader} from '#/view/com/home/HomeHeader'
|
||||
-import {
|
||||
- Pager,
|
||||
- type PagerRef,
|
||||
- type RenderTabBarFnProps,
|
||||
-} from '#/view/com/pager/Pager'
|
||||
-import {CustomFeedEmptyState} from '#/view/com/posts/CustomFeedEmptyState'
|
||||
-import {FollowingEmptyState} from '#/view/com/posts/FollowingEmptyState'
|
||||
-import {FollowingEndOfFeed} from '#/view/com/posts/FollowingEndOfFeed'
|
||||
-import {NoFeedsPinned} from '#/screens/Home/NoFeedsPinned'
|
||||
+import { ActivityIndicator, StyleSheet } from 'react-native'
|
||||
+import { useFocusEffect } from '@react-navigation/native'
|
||||
+import { PROD_DEFAULT_FEED } from '#/lib/constants'
|
||||
+import { useNonReactiveCallback } from '#/lib/hooks/useNonReactiveCallback'
|
||||
+import { useOTAUpdates } from '#/lib/hooks/useOTAUpdates'
|
||||
+import { useSetTitle } from '#/lib/hooks/useSetTitle'
|
||||
+import { useRequestNotificationsPermission } from '#/lib/notifications/notifications'
|
||||
+import { type HomeTabNavigatorParams, type NativeStackScreenProps } from '#/lib/routes/types'
|
||||
+import { logEvent } from '#/lib/statsig/statsig'
|
||||
+import { isWeb } from '#/platform/detection'
|
||||
+import { emitSoftReset } from '#/state/events'
|
||||
+import { type SavedFeedSourceInfo, usePinnedFeedsInfos } from '#/state/queries/feed'
|
||||
+import { type FeedDescriptor, type FeedParams } from '#/state/queries/post-feed'
|
||||
+import { usePreferencesQuery } from '#/state/queries/preferences'
|
||||
+import { type UsePreferencesQueryResponse } from '#/state/queries/preferences/types'
|
||||
+import { useSession } from '#/state/session'
|
||||
+import { useSetMinimalShellMode } from '#/state/shell'
|
||||
+import { useLoggedOutViewControls } from '#/state/shell/logged-out'
|
||||
+import { useSelectedFeed, useSetSelectedFeed } from '#/state/shell/selected-feed'
|
||||
+import { FeedPage } from '#/view/com/feeds/FeedPage'
|
||||
+import { HomeHeader } from '#/view/com/home/HomeHeader'
|
||||
+import { Pager, type PagerRef, type RenderTabBarFnProps } from '#/view/com/pager/Pager'
|
||||
+import { CustomFeedEmptyState } from '#/view/com/posts/CustomFeedEmptyState'
|
||||
+import { FollowingEmptyState } from '#/view/com/posts/FollowingEmptyState'
|
||||
+import { FollowingEndOfFeed } from '#/view/com/posts/FollowingEndOfFeed'
|
||||
+import { NoFeedsPinned } from '#/screens/Home/NoFeedsPinned'
|
||||
+import {Pager, type PagerRef, type RenderTabBarFnProps} from '#/view/com/pager/Pager'
|
||||
import {CustomFeedEmptyState} from '#/view/com/posts/CustomFeedEmptyState'
|
||||
import {FollowingEmptyState} from '#/view/com/posts/FollowingEmptyState'
|
||||
import {FollowingEndOfFeed} from '#/view/com/posts/FollowingEndOfFeed'
|
||||
@@ -39,97 +28,67 @@ import {NoFeedsPinned} from '#/screens/Home/NoFeedsPinned'
|
||||
import * as Layout from '#/components/Layout'
|
||||
-import {useDemoMode} from '#/storage/hooks/demo-mode'
|
||||
+import { useDemoMode } from '#/storage/hooks/demo-mode'
|
||||
+
|
||||
import {useDemoMode} from '#/storage/hooks/demo-mode'
|
||||
|
||||
+const DEFAULT_PINNED_FEEDS = [{
|
||||
+ feedDescriptor: 'following',
|
||||
+ displayName: 'Following',
|
||||
@@ -79,28 +53,25 @@ index e058e2883..1d6bc4f45 100644
|
||||
+ savedFeed: undefined,
|
||||
+ pinned: true,
|
||||
+}]
|
||||
|
||||
+
|
||||
type Props = NativeStackScreenProps<HomeTabNavigatorParams, 'Home' | 'Start'>
|
||||
export function HomeScreen(props: Props) {
|
||||
- const {setShowLoggedOut} = useLoggedOutViewControls()
|
||||
- const {data: preferences} = usePreferencesQuery()
|
||||
- const {currentAccount} = useSession()
|
||||
const {setShowLoggedOut} = useLoggedOutViewControls()
|
||||
const {data: preferences} = usePreferencesQuery()
|
||||
const {currentAccount} = useSession()
|
||||
- const {data: pinnedFeedInfos, isLoading: isPinnedFeedsLoading} =
|
||||
- usePinnedFeedsInfos()
|
||||
+ const { setShowLoggedOut } = useLoggedOutViewControls()
|
||||
+ const { data: preferences } = usePreferencesQuery()
|
||||
+ const { currentAccount } = useSession()
|
||||
+ const { data: pinnedFeedInfos } = usePinnedFeedsInfos()
|
||||
+ const {data: pinnedFeedInfos} = usePinnedFeedsInfos()
|
||||
+
|
||||
+ const safePreferences = preferences || { feedViewPrefs: { lab_mergeFeedEnabled: false }, savedFeeds: [] } as any
|
||||
+ const safePinnedFeedInfos = [{
|
||||
+ feedDescriptor: 'following',
|
||||
+ displayName: 'Following',
|
||||
+ id: 'following',
|
||||
+ type: 'feed',
|
||||
+ savedFeed: undefined,
|
||||
+ pinned: true,
|
||||
+ }]
|
||||
+ const safePinnedFeedInfos = [{
|
||||
+ feedDescriptor: 'following',
|
||||
+ displayName: 'Following',
|
||||
+ id: 'following',
|
||||
+ type: 'feed',
|
||||
+ savedFeed: undefined,
|
||||
+ pinned: true,
|
||||
+ }]
|
||||
|
||||
React.useEffect(() => {
|
||||
if (isWeb && !currentAccount) {
|
||||
@@ -175,7 +146,7 @@ index e058e2883..1d6bc4f45 100644
|
||||
- )
|
||||
- const maybeRawSelectedFeed: FeedDescriptor | undefined =
|
||||
- useSelectedFeed() ?? allFeeds[0]
|
||||
+function HomeScreenReady({ preferences, pinnedFeedInfos }: any) {
|
||||
+function HomeScreenReady({preferences, pinnedFeedInfos}: any) {
|
||||
+ const allFeeds = React.useMemo(() => pinnedFeedInfos.map(f => f.feedDescriptor), [pinnedFeedInfos])
|
||||
+ const maybeRawSelectedFeed = useSelectedFeed() ?? allFeeds[0]
|
||||
const setSelectedFeed = useSetSelectedFeed()
|
||||
@@ -184,7 +155,8 @@ index e058e2883..1d6bc4f45 100644
|
||||
- const maybeSelectedFeed: FeedDescriptor | undefined = allFeeds[selectedIndex]
|
||||
+ const maybeSelectedFeed = allFeeds[selectedIndex]
|
||||
const requestNotificationsPermission = useRequestNotificationsPermission()
|
||||
|
||||
-
|
||||
+
|
||||
useSetTitle(pinnedFeedInfos[selectedIndex]?.displayName)
|
||||
useOTAUpdates()
|
||||
-
|
||||
@@ -202,11 +174,9 @@ index e058e2883..1d6bc4f45 100644
|
||||
if (selectedIndex !== lastPagerReportedIndexRef.current) {
|
||||
lastPagerReportedIndexRef.current = selectedIndex
|
||||
pagerRef.current?.setPage(selectedIndex)
|
||||
}
|
||||
}, [selectedIndex])
|
||||
@@ -138,205 +97,43 @@ function HomeScreenReady({
|
||||
|
||||
- const {hasSession} = useSession()
|
||||
+ const { hasSession } = useSession()
|
||||
const {hasSession} = useSession()
|
||||
const setMinimalShellMode = useSetMinimalShellMode()
|
||||
- useFocusEffect(
|
||||
- React.useCallback(() => {
|
||||
@@ -226,8 +196,7 @@ index e058e2883..1d6bc4f45 100644
|
||||
- }
|
||||
- }),
|
||||
- )
|
||||
+ useFocusEffect(React.useCallback(() => { setMinimalShellMode(false) }, [setMinimalShellMode]))
|
||||
|
||||
-
|
||||
- const onPageSelected = React.useCallback(
|
||||
- (index: number) => {
|
||||
- setMinimalShellMode(false)
|
||||
@@ -248,13 +217,7 @@ index e058e2883..1d6bc4f45 100644
|
||||
- },
|
||||
- [setSelectedFeed, setMinimalShellMode, allFeeds],
|
||||
- )
|
||||
+ const onPageSelected = React.useCallback((index) => {
|
||||
+ setMinimalShellMode(false)
|
||||
+ const maybeFeed = allFeeds[index]
|
||||
+ lastPagerReportedIndexRef.current = index
|
||||
+ setSelectedFeed(maybeFeed)
|
||||
+ }, [setSelectedFeed, setMinimalShellMode, allFeeds])
|
||||
|
||||
-
|
||||
- const onPressSelected = React.useCallback(() => {
|
||||
- emitSoftReset()
|
||||
- }, [])
|
||||
@@ -268,6 +231,15 @@ index e058e2883..1d6bc4f45 100644
|
||||
- },
|
||||
- [setMinimalShellMode],
|
||||
- )
|
||||
+ useFocusEffect(React.useCallback(() => { setMinimalShellMode(false) }, [setMinimalShellMode]))
|
||||
+
|
||||
+ const onPageSelected = React.useCallback((index) => {
|
||||
+ setMinimalShellMode(false)
|
||||
+ const maybeFeed = allFeeds[index]
|
||||
+ lastPagerReportedIndexRef.current = index
|
||||
+ setSelectedFeed(maybeFeed)
|
||||
+ }, [setSelectedFeed, setMinimalShellMode, allFeeds])
|
||||
+
|
||||
+ const onPressSelected = React.useCallback(() => { emitSoftReset() }, [])
|
||||
+ const onPageScrollStateChanged = React.useCallback((state) => {
|
||||
+ 'worklet'
|
||||
@@ -362,8 +334,22 @@ index e058e2883..1d6bc4f45 100644
|
||||
- renderTabBar={renderTabBar}>
|
||||
- {pinnedFeedInfos.length ? (
|
||||
- pinnedFeedInfos.map((feedInfo, index) => {
|
||||
- const feed = feedInfo.feedDescriptor
|
||||
- if (feed === 'following') {
|
||||
+ const renderTabBar = React.useCallback((props) => {
|
||||
+ return <HomeHeader key="FEEDS_TAB_BAR" {...props} testID="homeScreenFeedTabs" onPressSelected={onPressSelected} feeds={pinnedFeedInfos} />
|
||||
+ }, [onPressSelected, pinnedFeedInfos])
|
||||
+
|
||||
+ const renderFollowingEmptyState = React.useCallback(() => <FollowingEmptyState />, [])
|
||||
+ const renderCustomFeedEmptyState = React.useCallback(() => <CustomFeedEmptyState />, [])
|
||||
+
|
||||
+ const homeFeedParams = React.useMemo(() => ({
|
||||
+ mergeFeedEnabled: false, mergeFeedSources: []
|
||||
+ }), [preferences])
|
||||
+
|
||||
+ return (
|
||||
+ <Pager ref={pagerRef} testID="homeScreen" initialPage={selectedIndex} onPageSelected={onPageSelected} onPageScrollStateChanged={onPageScrollStateChanged} renderTabBar={renderTabBar}>
|
||||
+ {pinnedFeedInfos.map((feedInfo, index) => {
|
||||
const feed = feedInfo.feedDescriptor
|
||||
if (feed === 'following') {
|
||||
- return (
|
||||
- <FeedPage
|
||||
- key={feed}
|
||||
@@ -377,7 +363,8 @@ index e058e2883..1d6bc4f45 100644
|
||||
- feedInfo={feedInfo}
|
||||
- />
|
||||
- )
|
||||
- }
|
||||
+ return <FeedPage key={feed} testID="followingFeedPage" isPageFocused={maybeSelectedFeed === feed} isPageAdjacent={Math.abs(selectedIndex - index) === 1} feed={feed} feedParams={homeFeedParams} renderEmptyState={renderFollowingEmptyState} renderEndOfFeed={FollowingEndOfFeed} feedInfo={feedInfo} />
|
||||
}
|
||||
- const savedFeedConfig = feedInfo.savedFeed
|
||||
- return (
|
||||
- <FeedPage
|
||||
@@ -410,25 +397,7 @@ index e058e2883..1d6bc4f45 100644
|
||||
- renderEmptyState={renderCustomFeedEmptyState}
|
||||
- feedInfo={pinnedFeedInfos[0]}
|
||||
- />
|
||||
+ const renderTabBar = React.useCallback((props) => {
|
||||
+ return <HomeHeader key="FEEDS_TAB_BAR" {...props} testID="homeScreenFeedTabs" onPressSelected={onPressSelected} feeds={pinnedFeedInfos} />
|
||||
+ }, [onPressSelected, pinnedFeedInfos])
|
||||
+
|
||||
+ const renderFollowingEmptyState = React.useCallback(() => <FollowingEmptyState />, [])
|
||||
+ const renderCustomFeedEmptyState = React.useCallback(() => <CustomFeedEmptyState />, [])
|
||||
+
|
||||
+ const homeFeedParams = React.useMemo(() => ({
|
||||
+ mergeFeedEnabled: false, mergeFeedSources: []
|
||||
+ }), [preferences])
|
||||
+
|
||||
+ return (
|
||||
+ <Pager ref={pagerRef} testID="homeScreen" initialPage={selectedIndex} onPageSelected={onPageSelected} onPageScrollStateChanged={onPageScrollStateChanged} renderTabBar={renderTabBar}>
|
||||
+ {pinnedFeedInfos.map((feedInfo, index) => {
|
||||
+ const feed = feedInfo.feedDescriptor
|
||||
+ if (feed === 'following') {
|
||||
+ return <FeedPage key={feed} testID="followingFeedPage" isPageFocused={maybeSelectedFeed === feed} isPageAdjacent={Math.abs(selectedIndex - index) === 1} feed={feed} feedParams={homeFeedParams} renderEmptyState={renderFollowingEmptyState} renderEndOfFeed={FollowingEndOfFeed} feedInfo={feedInfo} />
|
||||
+ }
|
||||
+ return <FeedPage key={feed} testID="customFeedPage" isPageFocused={maybeSelectedFeed === feed} isPageAdjacent={Math.abs(selectedIndex - index) === 1} feed={feed} renderEmptyState={renderCustomFeedEmptyState} savedFeedConfig={feedInfo.savedFeed} feedInfo={feedInfo} />
|
||||
+ return <FeedPage key={feed} testID="customFeedPage" isPageFocused={maybeSelectedFeed === feed} isPageAdjacent={Math.abs(selectedIndex - index) === 1} feed={feed} renderEmptyState={renderCustomFeedEmptyState} savedFeedConfig={feedInfo.savedFeed} feedInfo={feedInfo} />
|
||||
+ })}
|
||||
</Pager>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user