diff options
author | dan <dan.abramov@gmail.com> | 2023-12-14 02:48:20 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-13 18:48:20 -0800 |
commit | 7fd79702371e3d7829be2188c2212c090bf76670 (patch) | |
tree | dd2e7543284a5a0d43e2c371feefe465fabf3d1c /src/view/com/lists/ListMembers.tsx | |
parent | fa3ccafa8028933f11802eace3dca6f6dc7c4dba (diff) | |
download | voidsky-7fd79702371e3d7829be2188c2212c090bf76670.tar.zst |
Make scroll handling contextual (#2200)
* Add an intermediate List component * Fix type * Add onScrolledDownChange * Port pager to use onScrolledDownChange * Fix on mobile * Don't pass down onScroll (replacement TBD) * Remove resetMainScroll * Replace onMainScroll with MainScrollProvider * Hook ScrollProvider to pager * Fix the remaining special case * Optimize a bit * Enforce that onScroll cannot be passed * Keep value updated even if no handler * Also memo it
Diffstat (limited to 'src/view/com/lists/ListMembers.tsx')
-rw-r--r-- | src/view/com/lists/ListMembers.tsx | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/src/view/com/lists/ListMembers.tsx b/src/view/com/lists/ListMembers.tsx index 160b4b3e5..a31ca4793 100644 --- a/src/view/com/lists/ListMembers.tsx +++ b/src/view/com/lists/ListMembers.tsx @@ -1,4 +1,4 @@ -import React, {MutableRefObject} from 'react' +import React from 'react' import { ActivityIndicator, Dimensions, @@ -8,7 +8,7 @@ import { ViewStyle, } from 'react-native' import {AppBskyActorDefs, AppBskyGraphDefs} from '@atproto/api' -import {FlatList} from '../util/Views' +import {List, ListRef} from '../util/List' import {ProfileCardFeedLoadingPlaceholder} from '../util/LoadingPlaceholder' import {ErrorMessage} from '../util/error/ErrorMessage' import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn' @@ -18,10 +18,8 @@ import {useAnalytics} from 'lib/analytics/analytics' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {useListMembersQuery} from '#/state/queries/list-members' -import {OnScrollHandler} from 'lib/hooks/useOnMainScroll' import {logger} from '#/logger' import {useModalControls} from '#/state/modals' -import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED' import {useSession} from '#/state/session' import {cleanError} from '#/lib/strings/errors' @@ -34,24 +32,22 @@ export function ListMembers({ list, style, scrollElRef, - onScroll, + onScrolledDownChange, onPressTryAgain, renderHeader, renderEmptyState, testID, - scrollEventThrottle, headerOffset = 0, desktopFixedHeightOffset, }: { list: string style?: StyleProp<ViewStyle> - scrollElRef?: MutableRefObject<FlatList<any> | null> - onScroll: OnScrollHandler + scrollElRef?: ListRef + onScrolledDownChange: (isScrolledDown: boolean) => void onPressTryAgain?: () => void renderHeader: () => JSX.Element renderEmptyState: () => JSX.Element testID?: string - scrollEventThrottle?: number headerOffset?: number desktopFixedHeightOffset?: number }) { @@ -209,10 +205,9 @@ export function ListMembers({ [isFetching], ) - const scrollHandler = useAnimatedScrollHandler(onScroll) return ( <View testID={testID} style={style}> - <FlatList + <List testID={testID ? `${testID}-flatlist` : undefined} ref={scrollElRef} data={items} @@ -233,10 +228,9 @@ export function ListMembers({ minHeight: Dimensions.get('window').height * 1.5, }} style={{paddingTop: headerOffset}} - onScroll={scrollHandler} + onScrolledDownChange={onScrolledDownChange} onEndReached={onEndReached} onEndReachedThreshold={0.6} - scrollEventThrottle={scrollEventThrottle} removeClippedSubviews={true} contentOffset={{x: 0, y: headerOffset * -1}} // @ts-ignore our .web version only -prf |