From 0e8aa9b2ec85288c9020c899b109c2bfc515c18d Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 19 Feb 2017 21:37:04 +0100 Subject: [PATCH] Fix infinite scrolling breaking after navigation --- app/assets/javascripts/components/actions/timelines.jsx | 4 ++-- .../javascripts/components/reducers/notifications.jsx | 5 ++++- app/assets/javascripts/components/reducers/timelines.jsx | 6 +++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/components/actions/timelines.jsx b/app/assets/javascripts/components/actions/timelines.jsx index f2680177cd..311b080334 100644 --- a/app/assets/javascripts/components/actions/timelines.jsx +++ b/app/assets/javascripts/components/actions/timelines.jsx @@ -70,13 +70,13 @@ export function refreshTimeline(timeline, id = null) { const ids = getState().getIn(['timelines', timeline, 'items'], Immutable.List()); const newestId = ids.size > 0 ? ids.first() : null; - const params = getState().getIn(['timelines', timeline, 'params'], {}); + let params = getState().getIn(['timelines', timeline, 'params'], {}); const path = getState().getIn(['timelines', timeline, 'path'])(id); let skipLoading = false; if (newestId !== null && getState().getIn(['timelines', timeline, 'loaded']) && (id === null || getState().getIn(['timelines', timeline, 'id']) === id)) { - params.since_id = newestId; + params = { ...params, since_id: newestId }; skipLoading = true; } diff --git a/app/assets/javascripts/components/reducers/notifications.jsx b/app/assets/javascripts/components/reducers/notifications.jsx index 4a7af8856d..968eae9f67 100644 --- a/app/assets/javascripts/components/reducers/notifications.jsx +++ b/app/assets/javascripts/components/reducers/notifications.jsx @@ -37,9 +37,12 @@ const normalizeNotifications = (state, notifications, next) => { items = items.set(i, notificationToMap(n)); }); + if (state.get('next') === null) { + state = state.set('next', next); + } + return state .update('items', list => loaded ? list.unshift(...items) : list.push(...items)) - .set('next', next) .set('loaded', true) .set('isLoading', false); }; diff --git a/app/assets/javascripts/components/reducers/timelines.jsx b/app/assets/javascripts/components/reducers/timelines.jsx index 1c71d822d3..2dbced7aef 100644 --- a/app/assets/javascripts/components/reducers/timelines.jsx +++ b/app/assets/javascripts/components/reducers/timelines.jsx @@ -101,7 +101,10 @@ const normalizeTimeline = (state, timeline, statuses, next) => { state = state.setIn([timeline, 'loaded'], true); state = state.setIn([timeline, 'isLoading'], false); - state = state.setIn([timeline, 'next'], next); + + if (state.getIn([timeline, 'next']) === null) { + state = state.setIn([timeline, 'next'], next); + } return state.updateIn([timeline, 'items'], Immutable.List(), list => (loaded ? list.unshift(...ids) : ids)); }; @@ -237,6 +240,7 @@ const resetTimeline = (state, timeline, id) => { .set('id', id) .set('isLoading', true) .set('loaded', false) + .set('next', null) .update('items', list => list.clear())); } else { state = state.setIn([timeline, 'isLoading'], true);