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:
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);