diff options
Diffstat (limited to 'src/view/com/Feed.tsx')
-rw-r--r-- | src/view/com/Feed.tsx | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/view/com/Feed.tsx b/src/view/com/Feed.tsx index 2cba0610a..507f0edde 100644 --- a/src/view/com/Feed.tsx +++ b/src/view/com/Feed.tsx @@ -1,16 +1,32 @@ import React from 'react' -import {observer} from 'mobx-react-lite' -import {Text, View} from 'react-native' -import {FeedViewModel} from '../../state/models/feed-view' +import {observer, Observer} from 'mobx-react-lite' +import {Text, View, FlatList} from 'react-native' +import {FeedViewModel, FeedViewItemModel} from '../../state/models/feed-view' import {FeedItem} from './FeedItem' export const Feed = observer(function Feed({feed}: {feed: FeedViewModel}) { + const renderItem = ({item}: {item: FeedViewItemModel}) => ( + <Observer>{() => <FeedItem item={item} />}</Observer> + ) + const onRefresh = () => { + feed.refresh().catch(err => console.error('Failed to refresh', err)) + } + const onEndReached = () => { + feed.loadMore().catch(err => console.error('Failed to load more', err)) + } return ( <View> - {feed.isLoading && <Text>Loading...</Text>} + {feed.isLoading && !feed.isRefreshing && <Text>Loading...</Text>} {feed.hasError && <Text>{feed.error}</Text>} - {feed.hasContent && - feed.feed.map(item => <FeedItem key={item.key} item={item} />)} + {feed.hasContent && ( + <FlatList + data={feed.feed} + renderItem={renderItem} + refreshing={feed.isRefreshing} + onRefresh={onRefresh} + onEndReached={onEndReached} + /> + )} {feed.isEmpty && <Text>This feed is empty!</Text>} </View> ) |