Skip to content

Commit aef692c

Browse files
committed
Drop forceUpdate from TimeSince; use state/props changes instead
1 parent 964d061 commit aef692c

File tree

1 file changed

+34
-14
lines changed

1 file changed

+34
-14
lines changed

src/sentry/static/sentry/app/components/timeSince.jsx

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@ var TimeSince = React.createClass({
77
PureRenderMixin
88
],
99

10+
statics: {
11+
getDateObj(date) {
12+
if (typeof date === "string" || typeof date === "number") {
13+
date = new Date(date);
14+
}
15+
return date;
16+
}
17+
},
18+
1019
propTypes: {
1120
date: React.PropTypes.any.isRequired,
1221
suffix: React.PropTypes.string
@@ -18,35 +27,46 @@ var TimeSince = React.createClass({
1827
};
1928
},
2029

30+
getInitialState() {
31+
return {
32+
relative: this.getRelativeDate()
33+
};
34+
},
35+
2136
componentDidMount() {
22-
var delay = 2600;
37+
this.setRelativeDateTicker();
38+
},
2339

24-
this.ticker = setInterval(this.ensureValidity, delay);
40+
setRelativeDateTicker() {
41+
const ONE_MINUTE_IN_MS = 3600;
42+
43+
this.ticker = setTimeout(() => {
44+
this.setState({
45+
relative: this.getRelativeDate()
46+
});
47+
this.setRelativeDateTicker();
48+
}, ONE_MINUTE_IN_MS);
49+
},
50+
51+
getRelativeDate() {
52+
let date = TimeSince.getDateObj(this.props.date);
53+
return moment(date).fromNow(true);
2554
},
2655

2756
componentWillUnmount() {
2857
if (this.ticker) {
29-
clearInterval(this.ticker);
58+
clearTimeout(this.ticker);
3059
this.ticker = null;
3160
}
3261
},
3362

34-
ensureValidity() {
35-
// TODO(dcramer): this should ensure we actually *need* to update the value
36-
this.forceUpdate();
37-
},
38-
3963
render() {
40-
var date = this.props.date;
41-
42-
if (typeof date === "string" || typeof date === "number") {
43-
date = new Date(date);
44-
}
64+
let date = TimeSince.getDateObj(this.props.date);
4565

4666
return (
4767
<time
4868
dateTime={date.toISOString()}
49-
title={date.toString()}>{moment(date).fromNow(true)} {this.props.suffix || ''}</time>
69+
title={date.toString()}>{this.state.relative} {this.props.suffix || ''}</time>
5070
);
5171
}
5272
});

0 commit comments

Comments
 (0)