From 7dc82e2e7ac6ef94eb85c2199e6385c2da91d889 Mon Sep 17 00:00:00 2001
From: Luke Barnard <luke@matrix.org>
Date: Fri, 16 Mar 2018 17:55:29 +0000
Subject: [PATCH] Force update RoomSubList after reading a room

so that the notification count is updated.

Previously we relied on a force update from RoomList, which was
removed as part of the optimisations in
  https://github.com/matrix-org/matrix-react-sdk/pull/1801
---
 src/components/structures/RoomSubList.js | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js
index 70e5b185..ed092d94 100644
--- a/src/components/structures/RoomSubList.js
+++ b/src/components/structures/RoomSubList.js
@@ -88,6 +88,11 @@ var RoomSubList = React.createClass({
         this.setState({
             sortedList: this.applySearchFilter(this.props.list, this.props.searchFilter),
         });
+        this.dispatcherRef = dis.register(this.onAction);
+    },
+
+    componentWillUnmount: function() {
+        dis.unregister(this.dispatcherRef);
     },
 
     componentWillReceiveProps: function(newProps) {
@@ -116,6 +121,21 @@ var RoomSubList = React.createClass({
         }
     },
 
+    onAction: function(payload) {
+        // XXX: Previously RoomList would forceUpdate whenever on_room_read is dispatched,
+        // but this is no longer true, so we must do it here (and can apply the small
+        // optimisation of checking that we care about the room being read).
+        //
+        // Ultimately we need to transition to a state pushing flow where something
+        // explicitly notifies the components concerned that the notif count for a room
+        // has change (e.g. a Flux store).
+        if (payload.action === 'on_room_read' &&
+            this.props.list.some((r) => r.roomId === payload.roomId)
+        ) {
+            this.forceUpdate();
+        }
+    },
+
     onClick: function(ev) {
         if (this.isCollapsableOnClick()) {
             // The header isCollapsable, so the click is to be interpreted as collapse and truncation logic