diff options
author | dan <dan.abramov@gmail.com> | 2023-11-16 22:37:48 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-16 14:37:48 -0800 |
commit | 22df70b3cc7ee2aa96aad3a724e885014ae28cd1 (patch) | |
tree | 51a497c488fee6ca526a90ea8958deb037aee5be | |
parent | 8475312422579c2c7d2798fcd0ff58009c366690 (diff) | |
download | voidsky-22df70b3cc7ee2aa96aad3a724e885014ae28cd1.tar.zst |
Fix blank feed (#1935)
* Split feed into two components * Rm unused * Add a spinner
-rw-r--r-- | src/view/screens/Home.tsx | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index 50db7e81f..18a0cbc15 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -1,4 +1,5 @@ import React from 'react' +import {View, ActivityIndicator, StyleSheet} from 'react-native' import {useFocusEffect} from '@react-navigation/native' import {NativeStackScreenProps, HomeTabNavigatorParams} from 'lib/routes/types' import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed' @@ -7,28 +8,41 @@ import {FollowingEmptyState} from 'view/com/posts/FollowingEmptyState' import {FollowingEndOfFeed} from 'view/com/posts/FollowingEndOfFeed' import {CustomFeedEmptyState} from 'view/com/posts/CustomFeedEmptyState' import {FeedsTabBar} from '../com/pager/FeedsTabBar' -import {Pager, PagerRef, RenderTabBarFnProps} from 'view/com/pager/Pager' +import {Pager, RenderTabBarFnProps} from 'view/com/pager/Pager' import {FeedPage} from 'view/com/feeds/FeedPage' import {useSetMinimalShellMode, useSetDrawerSwipeDisabled} from '#/state/shell' import {usePreferencesQuery} from '#/state/queries/preferences' +import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types' import {emitSoftReset} from '#/state/events' type Props = NativeStackScreenProps<HomeTabNavigatorParams, 'Home'> -export const HomeScreen = withAuthRequired(function HomeScreenImpl({}: Props) { +export const HomeScreen = withAuthRequired(function HomeScreenImpl( + props: Props, +) { + const {data: preferences} = usePreferencesQuery() + if (preferences) { + return <HomeScreenReady {...props} preferences={preferences} /> + } else { + return ( + <View style={styles.loading}> + <ActivityIndicator size="large" /> + </View> + ) + } +}) + +function HomeScreenReady({ + preferences, +}: Props & { + preferences: UsePreferencesQueryResponse +}) { const setMinimalShellMode = useSetMinimalShellMode() const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled() - const pagerRef = React.useRef<PagerRef>(null) const [selectedPage, setSelectedPage] = React.useState(0) - const [customFeeds, setCustomFeeds] = React.useState<FeedDescriptor[]>([]) - const {data: preferences} = usePreferencesQuery() - - React.useEffect(() => { - if (!preferences?.feeds?.pinned) return + const customFeeds = React.useMemo(() => { const pinned = preferences.feeds.pinned - const feeds: FeedDescriptor[] = [] - for (const uri of pinned) { if (uri.includes('app.bsky.feed.generator')) { feeds.push(`feedgen|${uri}`) @@ -36,15 +50,10 @@ export const HomeScreen = withAuthRequired(function HomeScreenImpl({}: Props) { feeds.push(`list|${uri}`) } } - - setCustomFeeds(feeds) - - pagerRef.current?.setPage(0) - }, [preferences?.feeds?.pinned, setCustomFeeds, pagerRef]) + return feeds + }, [preferences.feeds.pinned]) const homeFeedParams = React.useMemo<FeedParams>(() => { - if (!preferences) return {} - return { mergeFeedEnabled: Boolean(preferences.feedViewPrefs.lab_mergeFeedEnabled), mergeFeedSources: preferences.feeds.saved, @@ -108,7 +117,6 @@ export const HomeScreen = withAuthRequired(function HomeScreenImpl({}: Props) { return ( <Pager - ref={pagerRef} testID="homeScreen" onPageSelected={onPageSelected} onPageScrollStateChanged={onPageScrollStateChanged} @@ -136,4 +144,13 @@ export const HomeScreen = withAuthRequired(function HomeScreenImpl({}: Props) { })} </Pager> ) +} + +const styles = StyleSheet.create({ + loading: { + height: '100%', + alignContent: 'center', + justifyContent: 'center', + paddingBottom: 100, + }, }) |