Don't setState after unmounting a component

Fix a warning which happens if a LinkPreviewWidget is unmounted before the
preview request completes.

Also add missing .done to promise chain
This commit is contained in:
Richard van der Hoff 2016-04-18 14:51:17 +01:00
parent 8e1b0ee0a9
commit 7b405d0d9c

View file

@ -45,14 +45,18 @@ module.exports = React.createClass({
}, },
componentWillMount: function() { componentWillMount: function() {
this.unmounted = false;
MatrixClientPeg.get().getUrlPreview(this.props.link, this.props.mxEvent.getTs()).then((res)=>{ MatrixClientPeg.get().getUrlPreview(this.props.link, this.props.mxEvent.getTs()).then((res)=>{
if (this.unmounted) {
return;
}
this.setState( this.setState(
{ preview: res }, { preview: res },
this.props.onWidgetLoad this.props.onWidgetLoad
); );
}, (error)=>{ }, (error)=>{
console.error("Failed to get preview for " + this.props.link + " " + error); console.error("Failed to get preview for " + this.props.link + " " + error);
}); }).done();
}, },
componentDidMount: function() { componentDidMount: function() {
@ -65,6 +69,10 @@ module.exports = React.createClass({
linkifyElement(this.refs.description, linkifyMatrix.options); linkifyElement(this.refs.description, linkifyMatrix.options);
}, },
componentWillUnmount: function() {
this.unmounted = true;
},
onImageClick: function(ev) { onImageClick: function(ev) {
var p = this.state.preview; var p = this.state.preview;
if (ev.button != 0 || ev.metaKey) return; if (ev.button != 0 || ev.metaKey) return;