From 585e96583ef19ae1f99ab3de2c214678ccf6957d Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Sat, 18 Jan 2025 18:16:29 +0000 Subject: [PATCH] end card --- src/components/Lists.tsx | 12 +++-- src/screens/VideoFeed/index.tsx | 80 ++++++++++++++++++++++++++++----- 2 files changed, 78 insertions(+), 14 deletions(-) diff --git a/src/components/Lists.tsx b/src/components/Lists.tsx index 2d7b13b25c..5c602249ba 100644 --- a/src/components/Lists.tsx +++ b/src/components/Lists.tsx @@ -20,6 +20,7 @@ export function ListFooter({ style, showEndMessage = false, endMessageText, + renderEndMessage, }: { isFetchingNextPage?: boolean hasNextPage?: boolean @@ -29,6 +30,7 @@ export function ListFooter({ style?: StyleProp showEndMessage?: boolean endMessageText?: string + renderEndMessage?: () => React.ReactNode }) { const t = useTheme() @@ -48,9 +50,13 @@ export function ListFooter({ ) : error ? ( ) : !hasNextPage && showEndMessage ? ( - - {endMessageText ?? You have reached the end} - + renderEndMessage ? ( + renderEndMessage() + ) : ( + + {endMessageText ?? You have reached the end} + + ) ) : null} ) diff --git a/src/screens/VideoFeed/index.tsx b/src/screens/VideoFeed/index.tsx index 0d495ebd7c..09cae56ccf 100644 --- a/src/screens/VideoFeed/index.tsx +++ b/src/screens/VideoFeed/index.tsx @@ -47,6 +47,7 @@ import {HITSLOP_20} from '#/lib/constants' import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' import {CommonNavigatorParams, NavigationProp} from '#/lib/routes/types' import {sanitizeDisplayName} from '#/lib/strings/display-names' +import {cleanError} from '#/lib/strings/errors' import {sanitizeHandle} from '#/lib/strings/handles' import {isAndroid} from '#/platform/detection' import {POST_TOMBSTONE, Shadow, usePostShadow} from '#/state/cache/post-shadow' @@ -73,6 +74,7 @@ import {Header} from '#/screens/VideoFeed/components/Header' import {atoms as a, platform, ThemeProvider, useTheme} from '#/alf' import {setNavigationBar} from '#/alf/util/navigationBar' import {Button, ButtonIcon, ButtonText} from '#/components/Button' +import {ArrowLeft_Stroke2_Corner0_Rounded as ArrowLeftIcon} from '#/components/icons/Arrow' import {Check_Stroke2_Corner0_Rounded as CheckIcon} from '#/components/icons/Check' import * as Layout from '#/components/Layout' import {Link} from '#/components/Link' @@ -146,6 +148,8 @@ function Feed() { const {params} = useRoute>() const isFocused = useIsFocused() const {hasSession} = useSession() + const {height} = useSafeAreaFrame() + const feedDesc = useMemo(() => { switch (params.type) { case 'feedgen': @@ -159,14 +163,9 @@ function Feed() { } }, [params]) const feedFeedback = useFeedFeedback(feedDesc, hasSession) - const { - data, - isFetching, - refetch, - hasNextPage, - isFetchingNextPage, - fetchNextPage, - } = usePostFeedQuery(feedDesc) + const {data, error, hasNextPage, isFetchingNextPage, fetchNextPage} = + usePostFeedQuery(feedDesc) + const videos = React.useMemo(() => { let vids = data?.pages @@ -343,6 +342,8 @@ function Feed() { [updateVideoState], ) + const renderEndMessage = useCallback(() => , []) + return ( @@ -351,13 +352,16 @@ function Feed() { renderItem={renderItem} keyExtractor={keyExtractor} pagingEnabled={true} - refreshing={isFetching} - onRefresh={refetch} ListFooterComponent={ } onEndReached={() => { @@ -762,6 +766,60 @@ function PlayPauseTapArea({ ) } +function EndMessage() { + const navigation = useNavigation() + const {_} = useLingui() + const t = useTheme() + return ( + + + + That's everything! + + + + You've run out of videos to watch. Maybe it's a good time to take a + break? + + + + + + ) +} + /* * If the video is taller than 9:16 */