about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-03-17 15:17:28 -0500
committerPaul Frazee <pfrazee@gmail.com>2023-03-17 15:17:28 -0500
commitb711a49df9525eb94d30dd16d4c7840177f195ac (patch)
treeb5015b85d437c7bf8446906a604ffda4bb2ed507 /src
parent201c21df6d2f4851174443584d856e98554ce993 (diff)
downloadvoidsky-b711a49df9525eb94d30dd16d4c7840177f195ac.tar.zst
Add soft reset on tap selected in tab bar
Diffstat (limited to 'src')
-rw-r--r--src/view/com/util/TabBar.tsx5
-rw-r--r--src/view/screens/Home.tsx16
2 files changed, 18 insertions, 3 deletions
diff --git a/src/view/com/util/TabBar.tsx b/src/view/com/util/TabBar.tsx
index d3fe54830..67c9276c6 100644
--- a/src/view/com/util/TabBar.tsx
+++ b/src/view/com/util/TabBar.tsx
@@ -21,6 +21,7 @@ export function TabBar({
   indicatorPosition = 'bottom',
   indicatorColor,
   onSelect,
+  onPressSelected,
 }: {
   selectedPage: number
   items: string[]
@@ -29,6 +30,7 @@ export function TabBar({
   indicatorPosition?: 'top' | 'bottom'
   indicatorColor?: string
   onSelect?: (index: number) => void
+  onPressSelected?: () => void
 }) {
   const pal = usePalette('default')
   const [itemLayouts, setItemLayouts] = useState<Layout[]>(
@@ -80,6 +82,9 @@ export function TabBar({
 
   const onPressItem = (index: number) => {
     onSelect?.(index)
+    if (index === selectedPage) {
+      onPressSelected?.()
+    }
   }
 
   return (
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx
index 995792d23..f1d03233a 100644
--- a/src/view/screens/Home.tsx
+++ b/src/view/screens/Home.tsx
@@ -59,8 +59,12 @@ export const HomeScreen = withAuthRequired((_opts: Props) => {
     [store],
   )
 
+  const onPressSelected = React.useCallback(() => {
+    store.emitScreenSoftReset()
+  }, [store])
+
   const renderTabBar = React.useCallback((props: TabBarProps) => {
-    return <FloatingTabBar {...props} />
+    return <FloatingTabBar {...props} onPressSelected={onPressSelected} />
   }, [])
 
   return (
@@ -156,9 +160,15 @@ const FeedPage = observer(
       scrollElRef.current?.scrollToOffset({offset: 0})
     }, [scrollElRef])
 
+    const onSoftReset = React.useCallback(() => {
+      if (isPageFocused) {
+        scrollToTop()
+      }
+    }, [isPageFocused, scrollToTop])
+
     useFocusEffect(
       React.useCallback(() => {
-        const softResetSub = store.onScreenSoftReset(scrollToTop)
+        const softResetSub = store.onScreenSoftReset(onSoftReset)
         const feedCleanup = feed.registerListeners()
         const pollInterval = setInterval(doPoll, 15e3)
 
@@ -173,7 +183,7 @@ const FeedPage = observer(
           softResetSub.remove()
           feedCleanup()
         }
-      }, [store, doPoll, scrollToTop, screen, feed]),
+      }, [store, doPoll, onSoftReset, screen, feed]),
     )
 
     const onPressCompose = React.useCallback(() => {