Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix blank feed (#1935)

* Split feed into two components

* Rm unused

* Add a spinner

authored by

dan and committed by
GitHub
22df70b3 84753124

+35 -18
+35 -18
src/view/screens/Home.tsx
··· 1 1 import React from 'react' 2 + import {View, ActivityIndicator, StyleSheet} from 'react-native' 2 3 import {useFocusEffect} from '@react-navigation/native' 3 4 import {NativeStackScreenProps, HomeTabNavigatorParams} from 'lib/routes/types' 4 5 import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed' ··· 7 8 import {FollowingEndOfFeed} from 'view/com/posts/FollowingEndOfFeed' 8 9 import {CustomFeedEmptyState} from 'view/com/posts/CustomFeedEmptyState' 9 10 import {FeedsTabBar} from '../com/pager/FeedsTabBar' 10 - import {Pager, PagerRef, RenderTabBarFnProps} from 'view/com/pager/Pager' 11 + import {Pager, RenderTabBarFnProps} from 'view/com/pager/Pager' 11 12 import {FeedPage} from 'view/com/feeds/FeedPage' 12 13 import {useSetMinimalShellMode, useSetDrawerSwipeDisabled} from '#/state/shell' 13 14 import {usePreferencesQuery} from '#/state/queries/preferences' 15 + import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types' 14 16 import {emitSoftReset} from '#/state/events' 15 17 16 18 type Props = NativeStackScreenProps<HomeTabNavigatorParams, 'Home'> 17 - export const HomeScreen = withAuthRequired(function HomeScreenImpl({}: Props) { 19 + export const HomeScreen = withAuthRequired(function HomeScreenImpl( 20 + props: Props, 21 + ) { 22 + const {data: preferences} = usePreferencesQuery() 23 + if (preferences) { 24 + return <HomeScreenReady {...props} preferences={preferences} /> 25 + } else { 26 + return ( 27 + <View style={styles.loading}> 28 + <ActivityIndicator size="large" /> 29 + </View> 30 + ) 31 + } 32 + }) 33 + 34 + function HomeScreenReady({ 35 + preferences, 36 + }: Props & { 37 + preferences: UsePreferencesQueryResponse 38 + }) { 18 39 const setMinimalShellMode = useSetMinimalShellMode() 19 40 const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled() 20 - const pagerRef = React.useRef<PagerRef>(null) 21 41 const [selectedPage, setSelectedPage] = React.useState(0) 22 - const [customFeeds, setCustomFeeds] = React.useState<FeedDescriptor[]>([]) 23 - const {data: preferences} = usePreferencesQuery() 24 - 25 - React.useEffect(() => { 26 - if (!preferences?.feeds?.pinned) return 27 42 43 + const customFeeds = React.useMemo(() => { 28 44 const pinned = preferences.feeds.pinned 29 - 30 45 const feeds: FeedDescriptor[] = [] 31 - 32 46 for (const uri of pinned) { 33 47 if (uri.includes('app.bsky.feed.generator')) { 34 48 feeds.push(`feedgen|${uri}`) ··· 36 50 feeds.push(`list|${uri}`) 37 51 } 38 52 } 39 - 40 - setCustomFeeds(feeds) 41 - 42 - pagerRef.current?.setPage(0) 43 - }, [preferences?.feeds?.pinned, setCustomFeeds, pagerRef]) 53 + return feeds 54 + }, [preferences.feeds.pinned]) 44 55 45 56 const homeFeedParams = React.useMemo<FeedParams>(() => { 46 - if (!preferences) return {} 47 - 48 57 return { 49 58 mergeFeedEnabled: Boolean(preferences.feedViewPrefs.lab_mergeFeedEnabled), 50 59 mergeFeedSources: preferences.feeds.saved, ··· 108 117 109 118 return ( 110 119 <Pager 111 - ref={pagerRef} 112 120 testID="homeScreen" 113 121 onPageSelected={onPageSelected} 114 122 onPageScrollStateChanged={onPageScrollStateChanged} ··· 136 144 })} 137 145 </Pager> 138 146 ) 147 + } 148 + 149 + const styles = StyleSheet.create({ 150 + loading: { 151 + height: '100%', 152 + alignContent: 'center', 153 + justifyContent: 'center', 154 + paddingBottom: 100, 155 + }, 139 156 })