about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-12-24 10:00:29 -0800
committerGitHub <noreply@github.com>2023-12-24 10:00:29 -0800
commitfe0a35cbea7ff8430f9538d6a641e41ab74ed0a0 (patch)
tree1cefeb7e1437c1e0611862d888bb10d90425e6d2
parent64bad57eb39269c025c80748966f9ac219daf8ce (diff)
downloadvoidsky-fe0a35cbea7ff8430f9538d6a641e41ab74ed0a0.tar.zst
Fix blank home screen (close #2281) (#2291)
-rw-r--r--src/state/queries/feed.ts5
-rw-r--r--src/view/screens/Home.tsx13
2 files changed, 14 insertions, 4 deletions
diff --git a/src/state/queries/feed.ts b/src/state/queries/feed.ts
index c87e95f03..7a55b4e18 100644
--- a/src/state/queries/feed.ts
+++ b/src/state/queries/feed.ts
@@ -218,11 +218,13 @@ const FOLLOWING_FEED_STUB: FeedSourceInfo = {
 export function usePinnedFeedsInfos(): {
   feeds: FeedSourceInfo[]
   hasPinnedCustom: boolean
+  isLoading: boolean
 } {
   const queryClient = useQueryClient()
   const [tabs, setTabs] = React.useState<FeedSourceInfo[]>([
     FOLLOWING_FEED_STUB,
   ])
+  const [isLoading, setLoading] = React.useState(true)
   const {data: preferences} = usePreferencesQuery()
 
   const hasPinnedCustom = React.useMemo<boolean>(() => {
@@ -284,10 +286,11 @@ export function usePinnedFeedsInfos(): {
       ) as FeedSourceInfo[]
 
       setTabs([FOLLOWING_FEED_STUB].concat(views))
+      setLoading(false)
     }
 
     fetchFeedInfo()
   }, [queryClient, setTabs, preferences?.feeds?.pinned])
 
-  return {feeds: tabs, hasPinnedCustom}
+  return {feeds: tabs, hasPinnedCustom, isLoading}
 }
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx
index 82dd1365c..b8033f0b4 100644
--- a/src/view/screens/Home.tsx
+++ b/src/view/screens/Home.tsx
@@ -18,11 +18,13 @@ import {emitSoftReset} from '#/state/events'
 import {useSession} from '#/state/session'
 import {loadString, saveString} from '#/lib/storage'
 import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {clamp} from '#/lib/numbers'
 
 type Props = NativeStackScreenProps<HomeTabNavigatorParams, 'Home'>
 export function HomeScreen(props: Props) {
   const {data: preferences} = usePreferencesQuery()
-  const {feeds: pinnedFeeds} = usePinnedFeedsInfos()
+  const {feeds: pinnedFeeds, isLoading: isPinnedFeedsLoading} =
+    usePinnedFeedsInfos()
   const {isDesktop} = useWebMediaQueries()
   const [initialPage, setInitialPage] = React.useState<string | undefined>(
     undefined,
@@ -41,7 +43,12 @@ export function HomeScreen(props: Props) {
     loadLastActivePage()
   }, [])
 
-  if (preferences && pinnedFeeds && initialPage !== undefined) {
+  if (
+    preferences &&
+    pinnedFeeds &&
+    initialPage !== undefined &&
+    !isPinnedFeedsLoading
+  ) {
     return (
       <HomeScreenReady
         {...props}
@@ -172,7 +179,7 @@ function HomeScreenReady({
     <Pager
       key={pinnedFeedOrderKey}
       testID="homeScreen"
-      initialPage={selectedPageIndex}
+      initialPage={clamp(selectedPageIndex, 0, customFeeds.length)}
       onPageSelected={onPageSelected}
       onPageScrollStateChanged={onPageScrollStateChanged}
       renderTabBar={renderTabBar}