import React, { useEffect, useState } from 'react' import PropTypes from 'prop-types' import { ActivityIndicator, FlatList, Text, View } from 'react-native' import { useSelector, useDispatch } from 'react-redux' import Toot from 'src/components/Toot' import { fetch } from './timelineSlice' // Opening nesting hashtag pages export default function Timeline ({ page, hashtag, list, toot, account, disableRefresh }) { const dispatch = useDispatch() const state = useSelector(state => state.timelines[page]) const [timelineReady, setTimelineReady] = useState(false) useEffect(() => { if (state.status === 'idle') { dispatch(fetch({ page, hashtag, list, toot, account })) setTimelineReady(true) } }, [state, dispatch]) let content if (state.status === 'failed') { content = Error message } else { content = ( <> id} renderItem={({ item, index, separators }) => ( )} {...(state.pointer && { initialScrollIndex: state.pointer })} {...(!disableRefresh && { onRefresh: () => dispatch(fetch({ page, paginationDirection: 'prev' })), refreshing: state.status === 'loading', onEndReached: () => { if (!timelineReady) { dispatch(fetch({ page, paginationDirection: 'next' })) setTimelineReady(true) } }, onEndReachedThreshold: 0.5 })} onMomentumScrollBegin={() => setTimelineReady(false)} /> {state.status === 'loading' && } ) } return {content} } Timeline.propTypes = { page: PropTypes.string.isRequired, hashtag: PropTypes.string, list: PropTypes.string, toot: PropTypes.string, disableRefresh: PropTypes.bool }