import React from 'react' import {View} from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {ListRef} from 'view/com/util/List' import {Feed} from 'view/com/posts/Feed' import {EmptyState} from 'view/com/util/EmptyState' import {FeedDescriptor} from '#/state/queries/post-feed' import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed' import {LoadLatestBtn} from 'view/com/util/load-latest/LoadLatestBtn' import {useQueryClient} from '@tanstack/react-query' import {truncateAndInvalidate} from '#/state/queries/util' import {Text} from '#/view/com/util/text/Text' import {usePalette} from 'lib/hooks/usePalette' import {isNative} from '#/platform/detection' import {SectionRef} from './types' interface FeedSectionProps { feed: FeedDescriptor headerHeight: number isFocused: boolean scrollElRef: ListRef ignoreFilterFor?: string } export const ProfileFeedSection = React.forwardRef< SectionRef, FeedSectionProps >(function FeedSectionImpl( {feed, headerHeight, isFocused, scrollElRef, ignoreFilterFor}, ref, ) { const {_} = useLingui() const queryClient = useQueryClient() const [hasNew, setHasNew] = React.useState(false) const [isScrolledDown, setIsScrolledDown] = React.useState(false) const onScrollToTop = React.useCallback(() => { scrollElRef.current?.scrollToOffset({ animated: isNative, offset: -headerHeight, }) truncateAndInvalidate(queryClient, FEED_RQKEY(feed)) setHasNew(false) }, [scrollElRef, headerHeight, queryClient, feed, setHasNew]) React.useImperativeHandle(ref, () => ({ scrollToTop: onScrollToTop, })) const renderPostsEmpty = React.useCallback(() => { return }, [_]) return ( {(isScrolledDown || hasNew) && ( )} ) }) function ProfileEndOfFeed() { const pal = usePalette('default') return ( End of feed ) }