Avoid breaking /sync with uncaught exceptions
For reasons I don't fully understand, it appears that sometimes the ReadReceiptMarker has no offsetParent. Rather than dying with an uncaught exception when that happens (and taking out half of React as well as the /sync handler), log a warning and suppress the animation.
This commit is contained in:
parent
5e98aa4850
commit
b9e047f0ff
1 changed files with 15 additions and 4 deletions
|
@ -123,7 +123,19 @@ module.exports = React.createClass({
|
||||||
}
|
}
|
||||||
|
|
||||||
var newElement = ReactDOM.findDOMNode(this);
|
var newElement = ReactDOM.findDOMNode(this);
|
||||||
var startTopOffset = oldTop - newElement.offsetParent.getBoundingClientRect().top;
|
let startTopOffset;
|
||||||
|
if (!newElement.offsetParent) {
|
||||||
|
// this seems to happen sometimes for reasons I don't understand
|
||||||
|
// the docs for `offsetParent` say it may be null if `display` is
|
||||||
|
// `none`, but I can't see why that would happen.
|
||||||
|
console.warn(
|
||||||
|
`ReadReceiptMarker for ${this.props.member.userId} in ` +
|
||||||
|
`${this.props.member.roomId} has no offsetParent`,
|
||||||
|
);
|
||||||
|
startTopOffset = 0;
|
||||||
|
} else {
|
||||||
|
startTopOffset = oldTop - newElement.offsetParent.getBoundingClientRect().top;
|
||||||
|
}
|
||||||
|
|
||||||
var startStyles = [];
|
var startStyles = [];
|
||||||
var enterTransitionOpts = [];
|
var enterTransitionOpts = [];
|
||||||
|
@ -131,13 +143,12 @@ module.exports = React.createClass({
|
||||||
if (oldInfo && oldInfo.left) {
|
if (oldInfo && oldInfo.left) {
|
||||||
// start at the old height and in the old h pos
|
// start at the old height and in the old h pos
|
||||||
|
|
||||||
var leftOffset = oldInfo.left;
|
|
||||||
startStyles.push({ top: startTopOffset+"px",
|
startStyles.push({ top: startTopOffset+"px",
|
||||||
left: oldInfo.left+"px" });
|
left: oldInfo.left+"px" });
|
||||||
|
|
||||||
var reorderTransitionOpts = {
|
var reorderTransitionOpts = {
|
||||||
duration: 100,
|
duration: 100,
|
||||||
easing: 'easeOut'
|
easing: 'easeOut',
|
||||||
};
|
};
|
||||||
|
|
||||||
enterTransitionOpts.push(reorderTransitionOpts);
|
enterTransitionOpts.push(reorderTransitionOpts);
|
||||||
|
@ -175,7 +186,7 @@ module.exports = React.createClass({
|
||||||
if (this.props.timestamp) {
|
if (this.props.timestamp) {
|
||||||
title = _t(
|
title = _t(
|
||||||
"Seen by %(userName)s at %(dateTime)s",
|
"Seen by %(userName)s at %(dateTime)s",
|
||||||
{userName: this.props.member.userId, dateTime: DateUtils.formatDate(new Date(this.props.timestamp), this.props.showTwelveHour)}
|
{userName: this.props.member.userId, dateTime: DateUtils.formatDate(new Date(this.props.timestamp), this.props.showTwelveHour)},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue