]> cat aescling's git repositories - mastodon.git/commitdiff
Fix #82 - only show latest reblog of status in UI
authorEugen Rochko <eugen@zeonfederated.com>
Sun, 16 Oct 2016 23:34:16 +0000 (01:34 +0200)
committerEugen Rochko <eugen@zeonfederated.com>
Sun, 16 Oct 2016 23:34:16 +0000 (01:34 +0200)
app/assets/javascripts/components/reducers/timelines.jsx

index d4c6d43b441ed357027ce6bfc0caa5eb2f44bdcc..2059079eb9f8c01fb77e119adaefa6408f4c0793 100644 (file)
@@ -123,7 +123,18 @@ function appendNormalizedAccountTimeline(state, accountId, statuses) {
 
 function updateTimeline(state, timeline, status) {
   state = normalizeStatus(state, status);
-  state = state.update(timeline, list => list.unshift(status.get('id')));
+
+  state = state.update(timeline, list => {
+    const reblogOfId = status.getIn(['reblog', 'id'], null);
+
+    if (reblogOfId !== null) {
+      const otherReblogs = state.get('statuses').filter(item => item.get('reblog') === reblogOfId).map((_, itemId) => itemId);
+      list = list.filterNot(itemId => itemId === reblogOfId || otherReblogs.includes(itemId));
+    }
+
+    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'))));
 
   return state;