2017-07-20 22:32:17 +00:00
|
|
|
import React from 'react';
|
2017-07-23 05:35:37 +00:00
|
|
|
import {Div} from 'glamorous';
|
|
|
|
import { compose } from 'react-apollo';
|
2017-07-20 22:32:17 +00:00
|
|
|
import Achievement from './Achievement.js';
|
|
|
|
import CompleteAchievement from '../containers/CompleteAchievement.js';
|
2017-07-23 05:35:37 +00:00
|
|
|
import UncompleteAchievement from '../containers/UncompleteAchievement.js';
|
2017-07-11 18:09:16 +00:00
|
|
|
|
2017-07-23 05:35:37 +00:00
|
|
|
const AchievementButton = compose(
|
|
|
|
CompleteAchievement,
|
|
|
|
UncompleteAchievement
|
|
|
|
)(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) => {
|
2017-07-23 05:35:37 +00:00
|
|
|
if (a.number === b.number) {
|
|
|
|
if(!a.letter) return -1;
|
|
|
|
if(!b.letter) return 1;
|
|
|
|
|
|
|
|
return a.letter.toLowerCase().localeCompare(b.letter.toLowerCase());
|
|
|
|
}
|
|
|
|
return a.number - b.number;
|
2017-07-20 22:32:17 +00:00
|
|
|
}).map(achievement => {
|
|
|
|
const props = {
|
|
|
|
key: achievement.id,
|
|
|
|
completed: completedMap[achievement.id],
|
|
|
|
scoutID,
|
|
|
|
...achievement
|
|
|
|
};
|
|
|
|
return <AchievementButton {...props} />
|
|
|
|
});
|
|
|
|
|
2017-07-22 23:31:14 +00:00
|
|
|
return <Div disply="flex" padding="0.5rem">
|
2017-07-20 22:32:17 +00:00
|
|
|
{list}
|
2017-07-22 23:31:14 +00:00
|
|
|
</Div>
|
2017-07-20 22:32:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
componentWillUnmount() {
|
|
|
|
this.unsubscribe();
|
|
|
|
}
|
|
|
|
|
2017-07-11 18:09:16 +00:00
|
|
|
}
|