2017-07-20 22:32:17 +00:00
|
|
|
import React from 'react';
|
|
|
|
import Achievement from './Achievement.js';
|
|
|
|
import CompleteAchievement from '../containers/CompleteAchievement.js';
|
2017-07-11 18:09:16 +00:00
|
|
|
|
2017-07-20 22:32:17 +00:00
|
|
|
const AchievementButton = CompleteAchievement(Achievement);
|
2017-07-11 18:09:16 +00:00
|
|
|
|
2017-07-20 22:32:17 +00:00
|
|
|
export default class AchievementList extends React.Component {
|
2017-07-11 18:09:16 +00:00
|
|
|
|
2017-07-20 22:32:17 +00:00
|
|
|
componentWillMount() {
|
|
|
|
this.unsubscribe = this.props.subscribeToAchievements({
|
|
|
|
scoutID: this.props.scoutID,
|
|
|
|
adventureID: this.props.adventureID
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
render() {
|
|
|
|
const {
|
|
|
|
allAchievements,
|
|
|
|
completedAchievements,
|
|
|
|
scoutID
|
|
|
|
} = this.props;
|
|
|
|
|
|
|
|
const completedMap = completedAchievements.reduce((map, ach) => {
|
|
|
|
map[ach.achievement.id] = ach;
|
|
|
|
return map
|
|
|
|
}, {});
|
|
|
|
|
|
|
|
if(!allAchievements || !allAchievements.length) {
|
|
|
|
return <div>Loading...</div>
|
|
|
|
}
|
|
|
|
|
|
|
|
const list = [...allAchievements].sort((a, b) => {
|
|
|
|
if (a.number === b.number)
|
|
|
|
return a.letter > b.letter;
|
|
|
|
return a.number > b.number;
|
|
|
|
}).map(achievement => {
|
|
|
|
const props = {
|
|
|
|
key: achievement.id,
|
|
|
|
completed: completedMap[achievement.id],
|
|
|
|
scoutID,
|
|
|
|
...achievement
|
|
|
|
};
|
|
|
|
return <AchievementButton {...props} />
|
|
|
|
});
|
|
|
|
|
|
|
|
return <div>
|
|
|
|
{list}
|
|
|
|
</div>
|
|
|
|
}
|
|
|
|
|
|
|
|
componentWillUnmount() {
|
|
|
|
this.unsubscribe();
|
|
|
|
}
|
|
|
|
|
2017-07-11 18:09:16 +00:00
|
|
|
}
|