@@ -7,6 +7,15 @@ var TimeSince = React.createClass({
7
7
PureRenderMixin
8
8
] ,
9
9
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
+
10
19
propTypes : {
11
20
date : React . PropTypes . any . isRequired ,
12
21
suffix : React . PropTypes . string
@@ -18,35 +27,46 @@ var TimeSince = React.createClass({
18
27
} ;
19
28
} ,
20
29
30
+ getInitialState ( ) {
31
+ return {
32
+ relative : this . getRelativeDate ( )
33
+ } ;
34
+ } ,
35
+
21
36
componentDidMount ( ) {
22
- var delay = 2600 ;
37
+ this . setRelativeDateTicker ( ) ;
38
+ } ,
23
39
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 ) ;
25
54
} ,
26
55
27
56
componentWillUnmount ( ) {
28
57
if ( this . ticker ) {
29
- clearInterval ( this . ticker ) ;
58
+ clearTimeout ( this . ticker ) ;
30
59
this . ticker = null ;
31
60
}
32
61
} ,
33
62
34
- ensureValidity ( ) {
35
- // TODO(dcramer): this should ensure we actually *need* to update the value
36
- this . forceUpdate ( ) ;
37
- } ,
38
-
39
63
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 ) ;
45
65
46
66
return (
47
67
< time
48
68
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 >
50
70
) ;
51
71
}
52
72
} ) ;
0 commit comments