diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx
index 52cf4352f1..995792d234 100644
--- a/src/view/screens/Home.tsx
+++ b/src/view/screens/Home.tsx
@@ -36,6 +36,12 @@ export const HomeScreen = withAuthRequired((_opts: Props) => {
const store = useStores()
const [selectedPage, setSelectedPage] = React.useState(0)
+ const algoFeed = React.useMemo(() => {
+ const feed = new FeedModel(store, 'goodstuff', {})
+ feed.setup()
+ return feed
+ }, [store])
+
useFocusEffect(
React.useCallback(() => {
store.shell.setIsDrawerSwipeDisabled(selectedPage > 0)
@@ -62,10 +68,12 @@ export const HomeScreen = withAuthRequired((_opts: Props) => {
onPageSelected={onPageSelected}
renderTabBar={renderTabBar}
tabBarPosition="bottom">
-
-
-
-
+
+
)
})
@@ -110,194 +118,103 @@ const FloatingTabBar = observer((props: TabBarProps) => {
)
})
-const AlgoView = observer(() => {
- const store = useStores()
- const onMainScroll = useOnMainScroll(store)
- const {screen, track} = useAnalytics()
- const scrollElRef = React.useRef(null)
- const {appState} = useAppState({
- onForeground: () => doPoll(true),
- })
- const isFocused = useIsFocused()
- const winDim = useWindowDimensions()
- const containerStyle = React.useMemo(
- () => ({height: winDim.height - TAB_BAR_HEIGHT}),
- [winDim],
- )
- const algoFeed = React.useMemo(() => {
- const feed = new FeedModel(store, 'goodstuff', {})
- feed.setup()
- return feed
- }, [store])
+const FeedPage = observer(
+ ({isPageFocused, feed}: {feed: FeedModel; isPageFocused: boolean}) => {
+ const store = useStores()
+ const onMainScroll = useOnMainScroll(store)
+ const {screen, track} = useAnalytics()
+ const scrollElRef = React.useRef(null)
+ const {appState} = useAppState({
+ onForeground: () => doPoll(true),
+ })
+ const isScreenFocused = useIsFocused()
+ const winDim = useWindowDimensions()
+ const containerStyle = React.useMemo(
+ () => ({height: winDim.height - TAB_BAR_HEIGHT}),
+ [winDim],
+ )
- const doPoll = React.useCallback(
- (knownActive = false) => {
- if ((!knownActive && appState !== 'active') || !isFocused) {
- return
- }
- if (algoFeed.isLoading) {
- return
- }
- store.log.debug('HomeScreen: Polling for new posts')
- algoFeed.checkForLatest()
- },
- [appState, isFocused, store, algoFeed],
- )
+ const doPoll = React.useCallback(
+ (knownActive = false) => {
+ if (
+ (!knownActive && appState !== 'active') ||
+ !isScreenFocused ||
+ !isPageFocused
+ ) {
+ return
+ }
+ if (feed.isLoading) {
+ return
+ }
+ store.log.debug('HomeScreen: Polling for new posts')
+ feed.checkForLatest()
+ },
+ [appState, isScreenFocused, isPageFocused, store, feed],
+ )
- const scrollToTop = React.useCallback(() => {
- scrollElRef.current?.scrollToOffset({offset: 0})
- }, [scrollElRef])
+ const scrollToTop = React.useCallback(() => {
+ scrollElRef.current?.scrollToOffset({offset: 0})
+ }, [scrollElRef])
- useFocusEffect(
- React.useCallback(() => {
- const softResetSub = store.onScreenSoftReset(scrollToTop)
- const feedCleanup = algoFeed.registerListeners()
- const pollInterval = setInterval(doPoll, 15e3)
+ useFocusEffect(
+ React.useCallback(() => {
+ const softResetSub = store.onScreenSoftReset(scrollToTop)
+ const feedCleanup = feed.registerListeners()
+ const pollInterval = setInterval(doPoll, 15e3)
- screen('Feed')
- store.log.debug('HomeScreen: Updating feed')
- if (algoFeed.hasContent) {
- algoFeed.update()
- }
+ screen('Feed')
+ store.log.debug('HomeScreen: Updating feed')
+ if (feed.hasContent) {
+ feed.update()
+ }
- return () => {
- clearInterval(pollInterval)
- softResetSub.remove()
- feedCleanup()
- }
- }, [store, doPoll, scrollToTop, screen, algoFeed]),
- )
+ return () => {
+ clearInterval(pollInterval)
+ softResetSub.remove()
+ feedCleanup()
+ }
+ }, [store, doPoll, scrollToTop, screen, feed]),
+ )
- const onPressCompose = React.useCallback(() => {
- track('HomeScreen:PressCompose')
- store.shell.openComposer({})
- }, [store, track])
+ const onPressCompose = React.useCallback(() => {
+ track('HomeScreen:PressCompose')
+ store.shell.openComposer({})
+ }, [store, track])
- const onPressTryAgain = React.useCallback(() => {
- algoFeed.refresh()
- }, [algoFeed])
+ const onPressTryAgain = React.useCallback(() => {
+ feed.refresh()
+ }, [feed])
- const onPressLoadLatest = React.useCallback(() => {
- algoFeed.refresh()
- scrollToTop()
- }, [algoFeed, scrollToTop])
+ const onPressLoadLatest = React.useCallback(() => {
+ feed.refresh()
+ scrollToTop()
+ }, [feed, scrollToTop])
- return (
-
- {store.shell.isOnboarding && }
-
- {algoFeed.hasNewLatest && !algoFeed.isRefreshing && (
-
- )}
- }
- />
-
- )
-})
-
-const FollowingView = observer(() => {
- const store = useStores()
- const onMainScroll = useOnMainScroll(store)
- const {screen, track} = useAnalytics()
- const scrollElRef = React.useRef(null)
- const {appState} = useAppState({
- onForeground: () => doPoll(true),
- })
- const isFocused = useIsFocused()
- const winDim = useWindowDimensions()
- const containerStyle = React.useMemo(
- () => ({height: winDim.height - TAB_BAR_HEIGHT}),
- [winDim],
- )
-
- const doPoll = React.useCallback(
- (knownActive = false) => {
- if ((!knownActive && appState !== 'active') || !isFocused) {
- return
- }
- if (store.me.mainFeed.isLoading) {
- return
- }
- store.log.debug('HomeScreen: Polling for new posts')
- store.me.mainFeed.checkForLatest()
- },
- [appState, isFocused, store],
- )
-
- const scrollToTop = React.useCallback(() => {
- scrollElRef.current?.scrollToOffset({offset: 0})
- }, [scrollElRef])
-
- useFocusEffect(
- React.useCallback(() => {
- const softResetSub = store.onScreenSoftReset(scrollToTop)
- const feedCleanup = store.me.mainFeed.registerListeners()
- const pollInterval = setInterval(doPoll, 15e3)
-
- screen('Feed')
- store.log.debug('HomeScreen: Updating feed')
- if (store.me.mainFeed.hasContent) {
- store.me.mainFeed.update()
- }
-
- return () => {
- clearInterval(pollInterval)
- softResetSub.remove()
- feedCleanup()
- }
- }, [store, doPoll, scrollToTop, screen]),
- )
-
- const onPressCompose = React.useCallback(() => {
- track('HomeScreen:PressCompose')
- store.shell.openComposer({})
- }, [store, track])
-
- const onPressTryAgain = React.useCallback(() => {
- store.me.mainFeed.refresh()
- }, [store])
-
- const onPressLoadLatest = React.useCallback(() => {
- store.me.mainFeed.refresh()
- scrollToTop()
- }, [store, scrollToTop])
-
- return (
-
- {store.shell.isOnboarding && }
-
- {store.me.mainFeed.hasNewLatest && !store.me.mainFeed.isRefreshing && (
-
- )}
- }
- />
-
- )
-})
+ return (
+
+ {store.shell.isOnboarding && }
+
+ {feed.hasNewLatest && !feed.isRefreshing && (
+
+ )}
+ }
+ />
+
+ )
+ },
+)
const styles = StyleSheet.create({
tabBar: {