Skip to content

Commit 9013e61

Browse files
committed
only show available participants #33
1 parent 324ce50 commit 9013e61

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

client/components/MissionForm.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export default React.createClass({
117117
<VolunteerGroupSelect
118118
key={assignment.volunteer}
119119
assignment={assignment}
120+
mission={this.state.mission}
120121
onChange={onChange(assignment.volunteer)}
121122
onRemove={onRemove(assignment.volunteer)}
122123
/>

client/components/VolunteerGroupSelect.js

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export default React.createClass({
1616

1717
propTypes: {
1818
assignment: React.PropTypes.object.isRequired,
19+
mission: React.PropTypes.object.isRequired,
1920
onChange: React.PropTypes.func,
2021
onRemove: React.PropTypes.func,
2122
},
@@ -35,17 +36,39 @@ export default React.createClass({
3536

3637
getInitialState() {
3738
const group = (this.context.volunteers[this.props.assignment.volunteer] || {}).group;
38-
const volunteers = this.getVolunteersByGroup(group);
39-
return { group, volunteers };
39+
return { group };
4040
},
4141

42-
getVolunteersByGroup(group) {
43-
return _.filter(this.context.volunteers, volunteer => group === volunteer.group);
42+
componentDidMount() {
43+
this.setSuitableVolunteers();
44+
},
45+
46+
componentWillReceiveProps(nextProps) {
47+
this.setSuitableVolunteers(nextProps.mission);
48+
},
49+
50+
setSuitableVolunteers(mission = this.props.mission) {
51+
const group = this.state.group;
52+
const now = new Date();
53+
const start = new Date(mission.start);
54+
const end = new Date(mission.end);
55+
56+
const isAvailable = av => (
57+
new Date(av.confirmationTill) >= now &&
58+
new Date(av.from) <= start &&
59+
new Date(av.till) >= end
60+
);
61+
62+
const volunteers = _.filter(this.context.volunteers, volunteer =>
63+
group === volunteer.group &&
64+
volunteer.availabilities.length &&
65+
volunteer.availabilities.find(isAvailable));
66+
67+
this.setState({ volunteers });
4468
},
4569

4670
changeGroup({ value }) {
47-
const volunteers = this.getVolunteersByGroup(value);
48-
this.setState({ group: value, volunteers });
71+
this.setState({ group: value }, this.setSuitableVolunteers);
4972
},
5073

5174
changeName({ value }) {

0 commit comments

Comments
 (0)