Fix bug where rooms would not appear when filtering

We need to reset the scroll offset otherwise the component may be
scrolled past the only content it has (Chrome just corrected the
scroll offset but Firefox scrolled it anyway).

NB. Introducing the new deriveStateFromProps method seems to
means that react no longer calls componentWillMount so I've
had to change it to componentDidMount (which it should have
been anyway).

Fixes https://github.com/vector-im/riot-web/issues/11263
pull/21833/head
David Baker 2019-10-31 19:42:41 +00:00
parent 60731dabf4
commit 6aa96ef82f
1 changed files with 13 additions and 1 deletions

View File

@ -67,6 +67,9 @@ const RoomSubList = createReactClass({
// some values to get LazyRenderList starting // some values to get LazyRenderList starting
scrollerHeight: 800, scrollerHeight: 800,
scrollTop: 0, scrollTop: 0,
// React 16's getDerivedStateFromProps(props, state) doesn't give the previous props so
// we have to store the length of the list here so we can see if it's changed or not...
listLength: null,
}; };
}, },
@ -79,11 +82,20 @@ const RoomSubList = createReactClass({
}; };
}, },
componentWillMount: function() { componentDidMount: function() {
this._headerButton = createRef(); this._headerButton = createRef();
this.dispatcherRef = dis.register(this.onAction); this.dispatcherRef = dis.register(this.onAction);
}, },
statics: {
getDerivedStateFromProps: function(props, state) {
return {
listLength: props.list.length,
scrollTop: props.list.length === state.listLength ? state.scrollTop : 0,
};
},
},
componentWillUnmount: function() { componentWillUnmount: function() {
dis.unregister(this.dispatcherRef); dis.unregister(this.dispatcherRef);
}, },