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
This commit is contained in:
David Baker 2019-10-31 19:42:41 +00:00
parent 41792a23a6
commit 7d6643664e

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);
}, },