about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/view/screens/Home.tsx40
1 files changed, 37 insertions, 3 deletions
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx
index e5a3035a4..025a0b15e 100644
--- a/src/view/screens/Home.tsx
+++ b/src/view/screens/Home.tsx
@@ -14,13 +14,43 @@ import {usePreferencesQuery} from '#/state/queries/preferences'
 import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
 import {emitSoftReset} from '#/state/events'
 import {useSession} from '#/state/session'
+import {save, load} from '#/lib/storage'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
 
 type Props = NativeStackScreenProps<HomeTabNavigatorParams, 'Home'>
 export function HomeScreen(props: Props) {
   const {data: preferences} = usePreferencesQuery()
+  const {isDesktop} = useWebMediaQueries()
+  const [lastActiveTab, setLastActiveTab] = React.useState<number | undefined>(
+    undefined,
+  )
+
+  React.useEffect(() => {
+    const loadLastActieTab = async () => {
+      try {
+        const savedTab = await load('lastActiveTab')
+        const tabIndex = savedTab ? parseInt(savedTab, 10) : 0
+        setLastActiveTab(tabIndex)
+      } catch {
+        setLastActiveTab(0)
+      }
+    }
+    // Ignoring lastActiveTab for desktop
+    if (isDesktop) {
+      setLastActiveTab(0)
+    } else {
+      loadLastActieTab()
+    }
+  }, [isDesktop])
 
-  if (preferences) {
-    return <HomeScreenReady {...props} preferences={preferences} />
+  if (preferences && lastActiveTab !== undefined) {
+    return (
+      <HomeScreenReady
+        {...props}
+        preferences={preferences}
+        lastActiveTab={lastActiveTab}
+      />
+    )
   } else {
     return (
       <View style={styles.loading}>
@@ -32,13 +62,15 @@ export function HomeScreen(props: Props) {
 
 function HomeScreenReady({
   preferences,
+  lastActiveTab,
 }: Props & {
   preferences: UsePreferencesQueryResponse
+  lastActiveTab: number
 }) {
   const {hasSession} = useSession()
   const setMinimalShellMode = useSetMinimalShellMode()
   const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled()
-  const [selectedPage, setSelectedPage] = React.useState(0)
+  const [selectedPage, setSelectedPage] = React.useState(lastActiveTab)
 
   /**
    * Used to ensure that we re-compute `customFeeds` AND force a re-render of
@@ -80,6 +112,7 @@ function HomeScreenReady({
     (index: number) => {
       setMinimalShellMode(false)
       setSelectedPage(index)
+      save('lastActiveTab', index)
       setDrawerSwipeDisabled(index > 0)
     },
     [setDrawerSwipeDisabled, setSelectedPage, setMinimalShellMode],
@@ -125,6 +158,7 @@ function HomeScreenReady({
     <Pager
       key={pinnedFeedOrderKey}
       testID="homeScreen"
+      initialPage={selectedPage > customFeeds.length ? 0 : selectedPage}
       onPageSelected={onPageSelected}
       onPageScrollStateChanged={onPageScrollStateChanged}
       renderTabBar={renderTabBar}