diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-03-17 15:17:28 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2023-03-17 15:17:28 -0500 |
commit | b711a49df9525eb94d30dd16d4c7840177f195ac (patch) | |
tree | b5015b85d437c7bf8446906a604ffda4bb2ed507 /src | |
parent | 201c21df6d2f4851174443584d856e98554ce993 (diff) | |
download | voidsky-b711a49df9525eb94d30dd16d4c7840177f195ac.tar.zst |
Add soft reset on tap selected in tab bar
Diffstat (limited to 'src')
-rw-r--r-- | src/view/com/util/TabBar.tsx | 5 | ||||
-rw-r--r-- | src/view/screens/Home.tsx | 16 |
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(() => { |