Merge pull request #6342 from vector-im/luke/fix-stale-sub-list-notif-count-after-room-read

Force update RoomSubList after reading a room
This commit is contained in:
David Baker 2018-03-16 18:07:54 +00:00 committed by GitHub
commit 8853496b1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 20 additions and 0 deletions

View File

@ -88,6 +88,11 @@ var RoomSubList = React.createClass({
this.setState({ this.setState({
sortedList: this.applySearchFilter(this.props.list, this.props.searchFilter), sortedList: this.applySearchFilter(this.props.list, this.props.searchFilter),
}); });
this.dispatcherRef = dis.register(this.onAction);
},
componentWillUnmount: function() {
dis.unregister(this.dispatcherRef);
}, },
componentWillReceiveProps: function(newProps) { 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) { onClick: function(ev) {
if (this.isCollapsableOnClick()) { if (this.isCollapsableOnClick()) {
// The header isCollapsable, so the click is to be interpreted as collapse and truncation logic // The header isCollapsable, so the click is to be interpreted as collapse and truncation logic