Skip to content

Commit 2a9018b

Browse files
committed
collapse old calendar events
1 parent 7ba3c0a commit 2a9018b

File tree

2 files changed

+71
-3
lines changed

2 files changed

+71
-3
lines changed

src/ui/CalendarList.js

+54-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,68 @@
1+
const moment = require('moment');
12
const CalendarEventView = require('./CalendarEventView.js');
3+
const CollapsibleContainer = require('./CollapsibleContainer.js');
24

35
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+
417
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) => {
623
return <CalendarEventView key={`cev${i}`} event={event}/>
724
});
825
return (
926
<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}
1230
</div>
1331
)
1432
}
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+
}
1566
}
1667

1768
module.exports = CalendarList;

src/ui/CollapsibleContainer.js

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class CollapsibleContainer extends React.Component {
2+
3+
render() {
4+
let result;
5+
if (this.props.isCollapsed) {
6+
result = (<div onClick={this.props.toggleCollapse}>....</div>);
7+
} else {
8+
result =
9+
(<div onClick={this.props.toggleCollapse}>
10+
{this.props.children}
11+
</div>);
12+
}
13+
return result;
14+
}
15+
}
16+
17+
module.exports = CollapsibleContainer;

0 commit comments

Comments
 (0)