logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
commit: c50256d25c47110119ea3386050040c916f2cf83
parent: 4aa5ebe59142eedbb1aa9dad88c608dda9ad8d6c
Author: Eugen Rochko <eugen@zeonfederated.com>
Date:   Sun, 19 Feb 2017 21:37:04 +0100

Fix infinite scrolling breaking after navigation

Diffstat:

Mapp/assets/javascripts/components/actions/timelines.jsx4++--
Mapp/assets/javascripts/components/reducers/notifications.jsx5++++-
Mapp/assets/javascripts/components/reducers/timelines.jsx6+++++-
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 @@ -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 @@ -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 @@ -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);