From ab7291b8fe78bc03375bb64e3b458488fa8ce96a Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Sun, 18 Sep 2016 12:51:09 +0200
Subject: [PATCH] Add ancestors/descendants during normalization in timeline
 reducer This way replies will appear in the detailed view live if they are
 from statuses that would be delivered to the user normally

---
 .../components/reducers/timelines.jsx         | 20 +++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/app/assets/javascripts/components/reducers/timelines.jsx b/app/assets/javascripts/components/reducers/timelines.jsx
index 462c10733..522d6be39 100644
--- a/app/assets/javascripts/components/reducers/timelines.jsx
+++ b/app/assets/javascripts/components/reducers/timelines.jsx
@@ -28,7 +28,23 @@ function statusToMaps(state, status) {
     state  = statusToMaps(state, reblog);
   }
 
+  // Replies
+  if (status.get('in_reply_to_id')) {
+    state = state.updateIn(['descendants', status.get('in_reply_to_id')], set => {
+      if (!Immutable.OrderedSet.isOrderedSet(set)) {
+        return Immutable.OrderedSet([status.get('id')]);
+      } else {
+        return set.add(status.get('id'));
+      }
+    });
+  }
+
   return state.withMutations(map => {
+    if (status.get('in_reply_to_id')) {
+      map.updateIn(['descendants', status.get('in_reply_to_id')], Immutable.OrderedSet(), set => set.add(status.get('id')));
+      map.updateIn(['ancestors', status.get('id')], Immutable.OrderedSet(), set => set.add(status.get('in_reply_to_id')));
+    }
+
     map.setIn(['accounts', account.get('id')], account);
     map.setIn(['statuses', status.get('id')], status);
   });
@@ -68,12 +84,12 @@ function contextToMaps(state, status, ancestors, descendants) {
   let ancestorsIds = ancestors.map(ancestor => {
     state = statusToMaps(state, ancestor);
     return ancestor.get('id');
-  });
+  }).toOrderedSet();
 
   let descendantsIds = descendants.map(descendant => {
     state = statusToMaps(state, descendant);
     return descendant.get('id');
-  });
+  }).toOrderedSet();
 
   return state.withMutations(map => {
     map.setIn(['ancestors', status.get('id')], ancestorsIds);