diff --git a/src/view/com/util/TabBar.tsx b/src/view/com/util/TabBar.tsx index d3fe548303..67c9276c6c 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( @@ -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 995792d234..f1d03233aa 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 + return }, []) 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(() => {