From 9dec9d72768c6217a3878c80b11cbbd3d9ed0ff9 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Fri, 1 Dec 2023 15:40:50 -0600 Subject: Only poll feed when feed page is focused (#2064) * Do no poll when screen is not focused * Avoid polling unless focused * Handle homepage in background * Fix the intl:check to ignore comments in diffs --------- Co-authored-by: Paul Frazee --- src/view/com/feeds/FeedPage.tsx | 2 +- src/view/com/posts/Feed.tsx | 4 ++-- src/view/screens/Home.tsx | 9 +++++---- src/view/screens/Profile.tsx | 2 +- src/view/screens/ProfileFeed.tsx | 7 +++++-- src/view/screens/ProfileList.tsx | 13 +++++++++++-- 6 files changed, 25 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/view/com/feeds/FeedPage.tsx b/src/view/com/feeds/FeedPage.tsx index f06716fb0..f3f07a8bd 100644 --- a/src/view/com/feeds/FeedPage.tsx +++ b/src/view/com/feeds/FeedPage.tsx @@ -158,9 +158,9 @@ export function FeedPage({ { - if (!data?.pages[0] || isFetching || !onHasNew) { + if (!data?.pages[0] || isFetching || !onHasNew || !enabled) { return } try { @@ -99,7 +99,7 @@ let Feed = ({ } catch (e) { logger.error('Poll latest failed', {feed, error: String(e)}) } - }, [feed, data, isFetching, onHasNew]) + }, [feed, data, isFetching, onHasNew, enabled]) React.useEffect(() => { // we store the interval handler in a ref to avoid needless diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index e5a3035a4..e8001e973 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -1,6 +1,6 @@ import React from 'react' import {View, ActivityIndicator, StyleSheet} from 'react-native' -import {useFocusEffect} from '@react-navigation/native' +import {useFocusEffect, useIsFocused} from '@react-navigation/native' import {NativeStackScreenProps, HomeTabNavigatorParams} from 'lib/routes/types' import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed' import {FollowingEmptyState} from 'view/com/posts/FollowingEmptyState' @@ -39,6 +39,7 @@ function HomeScreenReady({ const setMinimalShellMode = useSetMinimalShellMode() const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled() const [selectedPage, setSelectedPage] = React.useState(0) + const isPageFocused = useIsFocused() /** * Used to ensure that we re-compute `customFeeds` AND force a re-render of @@ -132,7 +133,7 @@ function HomeScreenReady({ @@ -159,7 +160,7 @@ function HomeScreenReady({ tabBarPosition="top"> diff --git a/src/view/screens/Profile.tsx b/src/view/screens/Profile.tsx index d5e378ccb..4af1b650e 100644 --- a/src/view/screens/Profile.tsx +++ b/src/view/screens/Profile.tsx @@ -420,6 +420,7 @@ const FeedSection = React.forwardRef( ( scrollEventThrottle={1} renderEmptyState={renderPostsEmpty} headerOffset={headerHeight} - enabled={isFocused} /> {(isScrolledDown || hasNew) && ( - {({onScroll, headerHeight, isScrolledDown, scrollElRef}) => + {({onScroll, headerHeight, isScrolledDown, scrollElRef, isFocused}) => isPublic ? ( | null> } + isFocused={isFocused} /> ) : ( @@ -492,10 +493,11 @@ interface FeedSectionProps { headerHeight: number isScrolledDown: boolean scrollElRef: React.MutableRefObject | null> + isFocused: boolean } const FeedSection = React.forwardRef( function FeedSectionImpl( - {feed, onScroll, headerHeight, isScrolledDown, scrollElRef}, + {feed, onScroll, headerHeight, isScrolledDown, scrollElRef, isFocused}, ref, ) { const [hasNew, setHasNew] = React.useState(false) @@ -518,6 +520,7 @@ const FeedSection = React.forwardRef( return ( - {({onScroll, headerHeight, isScrolledDown, scrollElRef}) => ( + {({ + onScroll, + headerHeight, + isScrolledDown, + scrollElRef, + isFocused, + }) => ( )} {({onScroll, headerHeight, isScrolledDown, scrollElRef}) => ( @@ -519,10 +526,11 @@ interface FeedSectionProps { headerHeight: number isScrolledDown: boolean scrollElRef: React.MutableRefObject | null> + isFocused: boolean } const FeedSection = React.forwardRef( function FeedSectionImpl( - {feed, scrollElRef, onScroll, headerHeight, isScrolledDown}, + {feed, scrollElRef, onScroll, headerHeight, isScrolledDown, isFocused}, ref, ) { const queryClient = useQueryClient() @@ -545,6 +553,7 @@ const FeedSection = React.forwardRef(