Add FeedFeedbackProvider

This commit is contained in:
Dan Abramov
2025-01-18 03:12:25 +00:00
parent 49ad3bcdfd
commit faae363b80
+32 -24
View File
@@ -55,6 +55,8 @@ import {sanitizeHandle} from '#/lib/strings/handles'
import {isAndroid} from '#/platform/detection' import {isAndroid} from '#/platform/detection'
import {POST_TOMBSTONE, Shadow, usePostShadow} from '#/state/cache/post-shadow' import {POST_TOMBSTONE, Shadow, usePostShadow} from '#/state/cache/post-shadow'
import {useProfileShadow} from '#/state/cache/profile-shadow' import {useProfileShadow} from '#/state/cache/profile-shadow'
import {FeedFeedbackProvider} from '#/state/feed-feedback'
import {useFeedFeedback} from '#/state/feed-feedback'
import {usePostLikeMutationQueue} from '#/state/queries/post' import {usePostLikeMutationQueue} from '#/state/queries/post'
import { import {
AuthorFilter, AuthorFilter,
@@ -62,6 +64,7 @@ import {
usePostFeedQuery, usePostFeedQuery,
} from '#/state/queries/post-feed' } from '#/state/queries/post-feed'
import {useProfileFollowMutationQueue} from '#/state/queries/profile' import {useProfileFollowMutationQueue} from '#/state/queries/profile'
import {useSession} from '#/state/session'
import {useSetMinimalShellMode} from '#/state/shell' import {useSetMinimalShellMode} from '#/state/shell'
import {useSetLightStatusBar} from '#/state/shell/light-status-bar' import {useSetLightStatusBar} from '#/state/shell/light-status-bar'
import {List} from '#/view/com/util/List' import {List} from '#/view/com/util/List'
@@ -154,6 +157,7 @@ function Inner() {
throw new Error(`Invalid video feed params ${JSON.stringify(params)}`) throw new Error(`Invalid video feed params ${JSON.stringify(params)}`)
} }
}, [params]) }, [params])
const { const {
data, data,
isFetching, isFetching,
@@ -162,6 +166,8 @@ function Inner() {
isFetchingNextPage, isFetchingNextPage,
fetchNextPage, fetchNextPage,
} = usePostFeedQuery(feedDesc) } = usePostFeedQuery(feedDesc)
const {hasSession} = useSession()
const feedFeedback = useFeedFeedback(feedDesc, hasSession)
let videos = data?.pages.flatMap(page => let videos = data?.pages.flatMap(page =>
page.slices.flatMap(slice => slice.items), page.slices.flatMap(slice => slice.items),
@@ -336,31 +342,33 @@ function Inner() {
) )
return ( return (
<GestureDetector gesture={scrollGesture}> <FeedFeedbackProvider value={feedFeedback}>
<List <GestureDetector gesture={scrollGesture}>
data={videos} <List
renderItem={renderItem} data={videos}
keyExtractor={keyExtractor} renderItem={renderItem}
pagingEnabled={true} keyExtractor={keyExtractor}
refreshing={isFetching} pagingEnabled={true}
onRefresh={refetch} refreshing={isFetching}
ListFooterComponent={ onRefresh={refetch}
<ListFooter ListFooterComponent={
hasNextPage={hasNextPage} <ListFooter
isFetchingNextPage={isFetchingNextPage} hasNextPage={hasNextPage}
onRetry={refetch} isFetchingNextPage={isFetchingNextPage}
/> onRetry={refetch}
} />
onEndReached={() => {
if (hasNextPage && !isFetchingNextPage) {
fetchNextPage()
} }
}} onEndReached={() => {
showsVerticalScrollIndicator={false} if (hasNextPage && !isFetchingNextPage) {
onViewableItemsChanged={onViewableItemsChanged} fetchNextPage()
viewabilityConfig={{itemVisiblePercentThreshold: 100}} }
/> }}
</GestureDetector> showsVerticalScrollIndicator={false}
onViewableItemsChanged={onViewableItemsChanged}
viewabilityConfig={{itemVisiblePercentThreshold: 100}}
/>
</GestureDetector>
</FeedFeedbackProvider>
) )
} }