Suggestions: don't show suggestions if Home timeline failed

merge-requests/912/head
Alex Gleason 3 years ago
parent c3766af7bf
commit ef17a483ab
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7

@ -27,6 +27,7 @@ const mapStateToProps = state => {
isPartial: state.getIn(['timelines', 'home', 'isPartial']), isPartial: state.getIn(['timelines', 'home', 'isPartial']),
siteTitle: state.getIn(['instance', 'title']), siteTitle: state.getIn(['instance', 'title']),
isLoading: state.getIn(['timelines', 'home', 'isLoading'], true), isLoading: state.getIn(['timelines', 'home', 'isLoading'], true),
loadingFailed: state.getIn(['timelines', 'home', 'loadingFailed'], false),
isEmpty: state.getIn(['timelines', 'home', 'items'], ImmutableOrderedSet()).isEmpty(), isEmpty: state.getIn(['timelines', 'home', 'items'], ImmutableOrderedSet()).isEmpty(),
features, features,
}; };
@ -43,6 +44,7 @@ class HomeTimeline extends React.PureComponent {
isPartial: PropTypes.bool, isPartial: PropTypes.bool,
siteTitle: PropTypes.string, siteTitle: PropTypes.string,
isLoading: PropTypes.bool, isLoading: PropTypes.bool,
loadingFailed: PropTypes.bool,
isEmpty: PropTypes.bool, isEmpty: PropTypes.bool,
features: PropTypes.object.isRequired, features: PropTypes.object.isRequired,
}; };
@ -99,9 +101,9 @@ class HomeTimeline extends React.PureComponent {
} }
render() { render() {
const { intl, siteTitle, isLoading, isEmpty, features } = this.props; const { intl, siteTitle, isLoading, loadingFailed, isEmpty, features } = this.props;
const { done } = this.state; const { done } = this.state;
const showSuggestions = features.suggestions && isEmpty && !isLoading && !done; const showSuggestions = features.suggestions && isEmpty && !isLoading && !loadingFailed && !done;
return ( return (
<Column label={intl.formatMessage(messages.title)} transparent={!showSuggestions}> <Column label={intl.formatMessage(messages.title)} transparent={!showSuggestions}>

@ -68,11 +68,17 @@ const setLoading = (state, timelineId, loading) => {
return state.update(timelineId, initialTimeline, timeline => timeline.set('isLoading', loading)); return state.update(timelineId, initialTimeline, timeline => timeline.set('isLoading', loading));
}; };
// Keep track of when a timeline failed to load
const setFailed = (state, timelineId, failed) => {
return state.update(timelineId, initialTimeline, timeline => timeline.set('loadingFailed', failed));
};
const expandNormalizedTimeline = (state, timelineId, statuses, next, isPartial, isLoadingRecent) => { const expandNormalizedTimeline = (state, timelineId, statuses, next, isPartial, isLoadingRecent) => {
const newIds = getStatusIds(statuses); const newIds = getStatusIds(statuses);
return state.update(timelineId, initialTimeline, timeline => timeline.withMutations(timeline => { return state.update(timelineId, initialTimeline, timeline => timeline.withMutations(timeline => {
timeline.set('isLoading', false); timeline.set('isLoading', false);
timeline.set('loadingFailed', false);
timeline.set('isPartial', isPartial); timeline.set('isPartial', isPartial);
if (!next && !isLoadingRecent) timeline.set('hasMore', false); if (!next && !isLoadingRecent) timeline.set('hasMore', false);
@ -284,6 +290,13 @@ const importStatus = (state, status, idempotencyKey) => {
}); });
}; };
const handleExpandFail = (state, timelineId) => {
return state.withMutations(state => {
setLoading(state, timelineId, false);
setFailed(state, timelineId, true);
});
};
export default function timelines(state = initialState, action) { export default function timelines(state = initialState, action) {
switch(action.type) { switch(action.type) {
case STATUS_CREATE_REQUEST: case STATUS_CREATE_REQUEST:
@ -293,7 +306,7 @@ export default function timelines(state = initialState, action) {
case TIMELINE_EXPAND_REQUEST: case TIMELINE_EXPAND_REQUEST:
return setLoading(state, action.timeline, true); return setLoading(state, action.timeline, true);
case TIMELINE_EXPAND_FAIL: case TIMELINE_EXPAND_FAIL:
return setLoading(state, action.timeline, false); return handleExpandFail(state, action.timeline);
case TIMELINE_EXPAND_SUCCESS: case TIMELINE_EXPAND_SUCCESS:
return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial, action.isLoadingRecent); return expandNormalizedTimeline(state, action.timeline, fromJS(action.statuses), action.next, action.partial, action.isLoadingRecent);
case TIMELINE_UPDATE: case TIMELINE_UPDATE:

Loading…
Cancel
Save