From 8698cd3281ac1d699c723a151b14f1e2f2e8b07e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 18 Oct 2016 23:06:28 +0200 Subject: Remember scroll position when navigating back, do not needlessly reload entire timelines (only fetch since last known ID). Side effect: account timelines no longer update in real-time --- app/assets/javascripts/components/reducers/timelines.jsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'app/assets/javascripts/components/reducers') diff --git a/app/assets/javascripts/components/reducers/timelines.jsx b/app/assets/javascripts/components/reducers/timelines.jsx index 65bccb44d..06534971d 100644 --- a/app/assets/javascripts/components/reducers/timelines.jsx +++ b/app/assets/javascripts/components/reducers/timelines.jsx @@ -85,7 +85,7 @@ function normalizeTimeline(state, timeline, statuses) { ids = ids.set(i, status.get('id')); }); - return state.set(timeline, ids); + return state.update(timeline, list => list.unshift(...ids)); }; function appendNormalizedTimeline(state, timeline, statuses) { @@ -100,16 +100,14 @@ function appendNormalizedTimeline(state, timeline, statuses) { }; function normalizeAccountTimeline(state, accountId, statuses) { - state = state.updateIn(['accounts_timelines', accountId], Immutable.List([]), list => { - return (list.size > 0) ? list.clear() : list; - }); + let ids = Immutable.List([]); statuses.forEach((status, i) => { state = normalizeStatus(state, status); - state = state.updateIn(['accounts_timelines', accountId], Immutable.List([]), list => list.set(i, status.get('id'))); + ids = ids.set(i, status.get('id')); }); - return state; + return state.updateIn(['accounts_timelines', accountId], Immutable.List([]), list => list.unshift(...ids)); }; function appendNormalizedAccountTimeline(state, accountId, statuses) { @@ -137,7 +135,7 @@ function updateTimeline(state, timeline, status) { return list.unshift(status.get('id')); }); - state = state.updateIn(['accounts_timelines', status.getIn(['account', 'id'])], Immutable.List([]), list => (list.includes(status.get('id')) ? list : list.unshift(status.get('id')))); + //state = state.updateIn(['accounts_timelines', status.getIn(['account', 'id'])], Immutable.List([]), list => (list.includes(status.get('id')) ? list : list.unshift(status.get('id')))); return state; }; -- cgit