From f4da2f444281c8b8f693833d727fc7c7bc85f8ae Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Mon, 24 Apr 2023 19:41:27 -0500 Subject: [PATCH] Tune feed loading behavior (#528) * Never autoload home feed on focus * On web, just check for new notifications on focus * Switching tab in the home feed now checks for latest --- src/view/screens/Home.tsx | 27 +++++++++++++-------------- src/view/screens/Notifications.tsx | 11 ++++++++--- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index d1677e54..53bef813 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -149,6 +149,8 @@ const FeedPage = observer( } }, [isPageFocused, scrollToTop, feed]) + // fires when screen is activated/deactivated + // - set up polls/listeners, update content useFocusEffect( React.useCallback(() => { const softResetSub = store.onScreenSoftReset(onSoftReset) @@ -168,30 +170,27 @@ const FeedPage = observer( } }, [store, doPoll, onSoftReset, screen, feed]), ) + // fires when tab is actived/deactivated + // - check for latest useTabFocusEffect( 'Home', React.useCallback( isInside => { - if (!isPageFocused) { + if (!isPageFocused || !isInside) { return } - // on mobile: - // fires with `isInside=true` when the user navigates to the root tab - // but not when the user goes back to the screen by pressing back - // on web: - // essentially equivalent to useFocusEffect because we dont used tabbed - // navigation - if (isInside) { - if (feed.hasNewLatest) { - feed.refresh() - } else { - feed.checkForLatest() - } - } + feed.checkForLatest() }, [isPageFocused, feed], ), ) + // fires when page within screen is activated/deactivated + // - check for latest + React.useEffect(() => { + if (isPageFocused && isScreenFocused) { + feed.checkForLatest() + } + }, [isPageFocused, isScreenFocused, feed]) const onPressCompose = React.useCallback(() => { track('HomeScreen:PressCompose') diff --git a/src/view/screens/Notifications.tsx b/src/view/screens/Notifications.tsx index d93666aa..8d6f7c83 100644 --- a/src/view/screens/Notifications.tsx +++ b/src/view/screens/Notifications.tsx @@ -16,6 +16,7 @@ import {useOnMainScroll} from 'lib/hooks/useOnMainScroll' import {useTabFocusEffect} from 'lib/hooks/useTabFocusEffect' import {s} from 'lib/styles' import {useAnalytics} from 'lib/analytics' +import {isWeb} from 'platform/detection' type Props = NativeStackScreenProps< NotificationsTabNavigatorParams, @@ -70,10 +71,14 @@ export const NotificationsScreen = withAuthRequired( // essentially equivalent to useFocusEffect because we dont used tabbed // navigation if (isInside) { - if (store.me.notifications.unreadCount > 0) { - store.me.notifications.refresh() - } else { + if (isWeb) { store.me.notifications.syncQueue() + } else { + if (store.me.notifications.unreadCount > 0) { + store.me.notifications.refresh() + } else { + store.me.notifications.syncQueue() + } } } },