about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-02-19 21:37:04 +0100
committerEugen Rochko <eugen@zeonfederated.com>2017-02-19 21:37:04 +0100
commitc50256d25c47110119ea3386050040c916f2cf83 (patch)
tree5ee106d7c2c03276a7a4b11e5322b0ae7a616dd0
parent4aa5ebe59142eedbb1aa9dad88c608dda9ad8d6c (diff)
Fix infinite scrolling breaking after navigation
-rw-r--r--app/assets/javascripts/components/actions/timelines.jsx4
-rw-r--r--app/assets/javascripts/components/reducers/notifications.jsx5
-rw-r--r--app/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
index f2680177c..311b08033 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 4a7af8856..968eae9f6 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 1c71d822d..2dbced7ae 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);