import React, {useEffect} from 'react' import {observer} from 'mobx-react-lite' import {ActivityIndicator, StyleSheet, View} from 'react-native' import { UserFollowersViewModel, FollowerItem, } from 'state/models/user-followers-view' import {CenteredView, FlatList} from '../util/Views' import {ErrorMessage} from '../util/error/ErrorMessage' import {ProfileCardWithFollowBtn} from './ProfileCard' import {useStores} from 'state/index' export const ProfileFollowers = observer(function ProfileFollowers({ name, }: { name: string }) { const store = useStores() const view = React.useMemo( () => new UserFollowersViewModel(store, {user: name}), [store, name], ) useEffect(() => { view .loadMore() .catch(err => store.log.error('Failed to fetch user followers', err)) }, [view, store.log]) const onRefresh = () => { view.refresh() } const onEndReached = () => { view .loadMore() .catch(err => view?.rootStore.log.error('Failed to load more followers', err), ) } if (!view.hasLoaded) { return ( ) } // error // = if (view.hasError) { return ( ) } // loaded // = const renderItem = ({item}: {item: FollowerItem}) => ( ) return ( item.did} refreshing={view.isRefreshing} onRefresh={onRefresh} onEndReached={onEndReached} renderItem={renderItem} initialNumToRender={15} ListFooterComponent={() => ( {view.isLoading && } )} extraData={view.isLoading} /> ) }) const styles = StyleSheet.create({ footer: { height: 200, paddingTop: 20, }, })