From 91f8a23fbca5585490bb0f2064cdec8dd4b47cc9 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 10 Nov 2023 19:54:33 +0000 Subject: Scroll sync in the pager without jumps (#1863) --- src/view/screens/ProfileFeed.tsx | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'src/view/screens/ProfileFeed.tsx') diff --git a/src/view/screens/ProfileFeed.tsx b/src/view/screens/ProfileFeed.tsx index c1496e4ad..e1cc0e938 100644 --- a/src/view/screens/ProfileFeed.tsx +++ b/src/view/screens/ProfileFeed.tsx @@ -1,5 +1,11 @@ import React, {useMemo, useCallback} from 'react' -import {FlatList, StyleSheet, View, ActivityIndicator} from 'react-native' +import { + Dimensions, + StyleSheet, + View, + ActivityIndicator, + FlatList, +} from 'react-native' import {NativeStackScreenProps} from '@react-navigation/native-stack' import {useNavigation} from '@react-navigation/native' import {usePalette} from 'lib/hooks/usePalette' @@ -343,16 +349,19 @@ export const ProfileFeedScreenInner = observer( isHeaderReady={feedInfo?.hasLoaded ?? false} renderHeader={renderHeader} onCurrentPageSelected={onCurrentPageSelected}> - {({onScroll, headerHeight, isScrolledDown}) => ( + {({onScroll, headerHeight, isScrolledDown, scrollElRef}) => ( | null> + } /> )} - {({onScroll, headerHeight}) => ( + {({onScroll, headerHeight, scrollElRef}) => ( + } /> )} @@ -387,14 +399,14 @@ interface FeedSectionProps { onScroll: OnScrollHandler headerHeight: number isScrolledDown: boolean + scrollElRef: React.MutableRefObject | null> } const FeedSection = React.forwardRef( function FeedSectionImpl( - {feed, onScroll, headerHeight, isScrolledDown}, + {feed, onScroll, headerHeight, isScrolledDown, scrollElRef}, ref, ) { const hasNew = feed.hasNewLatest && !feed.isRefreshing - const scrollElRef = React.useRef(null) const onScrollToTop = useCallback(() => { scrollElRef.current?.scrollToOffset({offset: -headerHeight}) @@ -438,6 +450,7 @@ const AboutSection = observer(function AboutPageImpl({ headerHeight, onToggleLiked, onScroll, + scrollElRef, }: { feedOwnerDid: string feedRkey: string @@ -445,6 +458,7 @@ const AboutSection = observer(function AboutPageImpl({ headerHeight: number onToggleLiked: () => void onScroll: OnScrollHandler + scrollElRef: React.MutableRefObject }) { const pal = usePalette('default') const {_} = useLingui() @@ -456,8 +470,12 @@ const AboutSection = observer(function AboutPageImpl({ return (