1
+ const moment = require ( 'moment' ) ;
1
2
const CalendarEventView = require ( './CalendarEventView.js' ) ;
3
+ const CollapsibleContainer = require ( './CollapsibleContainer.js' ) ;
2
4
3
5
class CalendarList extends React . Component {
6
+
7
+ constructor ( props ) {
8
+ super ( props ) ;
9
+ this . state = { shouldHideOld : true } ;
10
+ this . bindFuncs ( ) ;
11
+ }
12
+
13
+ bindFuncs ( ) {
14
+ this . toggleCollapse = this . toggleCollapse . bind ( this ) ;
15
+ }
16
+
4
17
render ( ) {
5
- const events = this . props . events . map ( ( event , i ) => {
18
+ const events = this . splitEventsBeforeAndAfterNow ( ) ;
19
+ const oldEvents = events . before . map ( ( event , i ) => {
20
+ return < CalendarEventView key = { `cev${ i } ` } event = { event } />
21
+ } ) ;
22
+ const futureEvents = events . after . map ( ( event , i ) => {
6
23
return < CalendarEventView key = { `cev${ i } ` } event = { event } />
7
24
} ) ;
8
25
return (
9
26
< div className = "cal" >
10
- < div > Calendar ({ this . props . events . length } )</ div >
11
- { events }
27
+ < div > Calendar ({ futureEvents . length } )</ div >
28
+ { this . renderOldEvents ( oldEvents ) }
29
+ { futureEvents }
12
30
</ div >
13
31
)
14
32
}
33
+
34
+ renderOldEvents ( oldEvents ) {
35
+ let result ;
36
+ if ( oldEvents . length > 0 ) {
37
+ result =
38
+ ( < CollapsibleContainer isCollapsed = { this . state . shouldHideOld } toggleCollapse = { this . toggleCollapse } >
39
+ { oldEvents }
40
+ </ CollapsibleContainer > ) ;
41
+ }
42
+ return result ;
43
+ }
44
+
45
+ toggleCollapse ( ) {
46
+ this . setState ( { shouldHideOld : ! this . state . shouldHideOld } )
47
+ }
48
+
49
+ splitEventsBeforeAndAfterNow ( ) {
50
+ const before = [ ] ;
51
+ const after = [ ] ;
52
+ const now = moment ( ) ;
53
+ this . props . events . forEach ( ( event ) => {
54
+ let eventEnd = moment ( event . end . dateTime ) ;
55
+ if ( eventEnd . isBefore ( now ) ) {
56
+ before . push ( event ) ;
57
+ } else {
58
+ after . push ( event ) ;
59
+ }
60
+ } ) ;
61
+ return {
62
+ before : before ,
63
+ after : after
64
+ } ;
65
+ }
15
66
}
16
67
17
68
module . exports = CalendarList ;
0 commit comments