diff options
Diffstat (limited to 'src/view/screens/ProfileList.tsx')
-rw-r--r-- | src/view/screens/ProfileList.tsx | 63 |
1 files changed, 16 insertions, 47 deletions
diff --git a/src/view/screens/ProfileList.tsx b/src/view/screens/ProfileList.tsx index 3dcc7121f..7f922e5b4 100644 --- a/src/view/screens/ProfileList.tsx +++ b/src/view/screens/ProfileList.tsx @@ -1,11 +1,5 @@ import React, {useCallback, useMemo} from 'react' -import { - ActivityIndicator, - FlatList, - Pressable, - StyleSheet, - View, -} from 'react-native' +import {ActivityIndicator, Pressable, StyleSheet, View} from 'react-native' import {useFocusEffect} from '@react-navigation/native' import {NativeStackScreenProps, CommonNavigatorParams} from 'lib/routes/types' import {useNavigation} from '@react-navigation/native' @@ -22,6 +16,7 @@ import {EmptyState} from 'view/com/util/EmptyState' import {RichText} from 'view/com/util/text/RichText' import {Button} from 'view/com/util/forms/Button' import {TextLink} from 'view/com/util/Link' +import {ListRef} from 'view/com/util/List' import * as Toast from 'view/com/util/Toast' import {LoadLatestBtn} from 'view/com/util/load-latest/LoadLatestBtn' import {FAB} from 'view/com/util/fab/FAB' @@ -31,7 +26,6 @@ import {usePalette} from 'lib/hooks/usePalette' import {useSetTitle} from 'lib/hooks/useSetTitle' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed' -import {OnScrollHandler} from 'lib/hooks/useOnMainScroll' import {NavigationProp} from 'lib/routes/types' import {toShareUrl} from 'lib/strings/url-helpers' import {shareUrl} from 'lib/sharing' @@ -165,36 +159,22 @@ function ProfileListScreenLoaded({ isHeaderReady={true} renderHeader={renderHeader} onCurrentPageSelected={onCurrentPageSelected}> - {({ - onScroll, - headerHeight, - isScrolledDown, - scrollElRef, - isFocused, - }) => ( + {({headerHeight, scrollElRef, isFocused}) => ( <FeedSection ref={feedSectionRef} feed={`list|${uri}`} - scrollElRef={ - scrollElRef as React.MutableRefObject<FlatList<any> | null> - } - onScroll={onScroll} + scrollElRef={scrollElRef as ListRef} headerHeight={headerHeight} - isScrolledDown={isScrolledDown} isFocused={isFocused} /> )} - {({onScroll, headerHeight, isScrolledDown, scrollElRef}) => ( + {({headerHeight, scrollElRef}) => ( <AboutSection ref={aboutSectionRef} - scrollElRef={ - scrollElRef as React.MutableRefObject<FlatList<any> | null> - } + scrollElRef={scrollElRef as ListRef} list={list} onPressAddUser={onPressAddUser} - onScroll={onScroll} headerHeight={headerHeight} - isScrolledDown={isScrolledDown} /> )} </PagerWithHeader> @@ -221,16 +201,12 @@ function ProfileListScreenLoaded({ items={SECTION_TITLES_MOD} isHeaderReady={true} renderHeader={renderHeader}> - {({onScroll, headerHeight, isScrolledDown, scrollElRef}) => ( + {({headerHeight, scrollElRef}) => ( <AboutSection list={list} - scrollElRef={ - scrollElRef as React.MutableRefObject<FlatList<any> | null> - } + scrollElRef={scrollElRef as ListRef} onPressAddUser={onPressAddUser} - onScroll={onScroll} headerHeight={headerHeight} - isScrolledDown={isScrolledDown} /> )} </PagerWithHeader> @@ -615,19 +591,15 @@ function Header({rkey, list}: {rkey: string; list: AppBskyGraphDefs.ListView}) { interface FeedSectionProps { feed: FeedDescriptor - onScroll: OnScrollHandler headerHeight: number - isScrolledDown: boolean - scrollElRef: React.MutableRefObject<FlatList<any> | null> + scrollElRef: ListRef isFocused: boolean } const FeedSection = React.forwardRef<SectionRef, FeedSectionProps>( - function FeedSectionImpl( - {feed, scrollElRef, onScroll, headerHeight, isScrolledDown, isFocused}, - ref, - ) { + function FeedSectionImpl({feed, scrollElRef, headerHeight, isFocused}, ref) { const queryClient = useQueryClient() const [hasNew, setHasNew] = React.useState(false) + const [isScrolledDown, setIsScrolledDown] = React.useState(false) const onScrollToTop = useCallback(() => { scrollElRef.current?.scrollToOffset({ @@ -654,8 +626,7 @@ const FeedSection = React.forwardRef<SectionRef, FeedSectionProps>( pollInterval={30e3} scrollElRef={scrollElRef} onHasNew={setHasNew} - onScroll={onScroll} - scrollEventThrottle={1} + onScrolledDownChange={setIsScrolledDown} renderEmptyState={renderPostsEmpty} headerOffset={headerHeight} /> @@ -674,20 +645,19 @@ const FeedSection = React.forwardRef<SectionRef, FeedSectionProps>( interface AboutSectionProps { list: AppBskyGraphDefs.ListView onPressAddUser: () => void - onScroll: OnScrollHandler headerHeight: number - isScrolledDown: boolean - scrollElRef: React.MutableRefObject<FlatList<any> | null> + scrollElRef: ListRef } const AboutSection = React.forwardRef<SectionRef, AboutSectionProps>( function AboutSectionImpl( - {list, onPressAddUser, onScroll, headerHeight, isScrolledDown, scrollElRef}, + {list, onPressAddUser, headerHeight, scrollElRef}, ref, ) { const pal = usePalette('default') const {_} = useLingui() const {isMobile} = useWebMediaQueries() const {currentAccount} = useSession() + const [isScrolledDown, setIsScrolledDown] = React.useState(false) const isCurateList = list.purpose === 'app.bsky.graph.defs#curatelist' const isOwner = list.creator.did === currentAccount?.did @@ -817,8 +787,7 @@ const AboutSection = React.forwardRef<SectionRef, AboutSectionProps>( renderHeader={renderHeader} renderEmptyState={renderEmptyState} headerOffset={headerHeight} - onScroll={onScroll} - scrollEventThrottle={1} + onScrolledDownChange={setIsScrolledDown} /> {isScrolledDown && ( <LoadLatestBtn |