import ComponentAccount from '@components/Account' import ComponentSeparator from '@components/Separator' import TimelineEmpty from '@components/Timelines/Timeline/Empty' import TimelineEnd from '@components/Timelines/Timeline/End' import { useNavigation, useScrollToTop } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' import { useRelationshipsQuery } from '@utils/queryHooks/relationships' import React, { useCallback, useMemo, useRef } from 'react' import { RefreshControl, StyleSheet } from 'react-native' import { FlatList } from 'react-native-gesture-handler' export interface Props { id: Mastodon.Account['id'] type: 'following' | 'followers' } const RelationshipsList: React.FC = ({ id, type }) => { const navigation = useNavigation< StackNavigationProp >() const { status, data, isFetching, refetch, hasNextPage, fetchNextPage, isFetchingNextPage } = useRelationshipsQuery({ type, id, options: { getNextPageParam: lastPage => { return lastPage.length ? { direction: 'next', id: lastPage[lastPage.length - 1].id } : undefined } } }) const flattenData = data?.pages ? data.pages.flatMap(d => [...d]) : [] const flRef = useRef>(null) const keyExtractor = useCallback(({ id }) => id, []) const renderItem = useCallback( ({ item }) => , [] ) const flItemEmptyComponent = useMemo( () => , [status] ) const onEndReached = useCallback( () => !isFetchingNextPage && fetchNextPage(), [isFetchingNextPage] ) const ListFooterComponent = useCallback( () => , [hasNextPage] ) const refreshControl = useMemo( () => ( refetch()} /> ), [isFetching] ) useScrollToTop(flRef) return ( ) } const styles = StyleSheet.create({ flatList: { minHeight: '100%' } }) export default RelationshipsList