Collapse sets of achievements in achievements list

This commit is contained in:
Nick Winter 2015-11-28 08:39:05 -08:00
parent a6f980dab1
commit 46e738a737
2 changed files with 16 additions and 1 deletions

View file

@ -19,7 +19,7 @@ MongoFindQuerySchema =
title: 'Query'
type: 'object'
patternProperties:
'^[-a-zA-Z0-9.]*$':
'^[-a-zA-Z0-9._]*$':
anyOf: [
{$ref: '#/definitions/mongoQueryOperator'},
{type: 'string'}

View file

@ -74,6 +74,7 @@ module.exports = class PlayAchievementsModal extends ModalView
onEverythingLoaded: =>
@achievements.set(@achievements.filter((m) -> m.get('collection') isnt 'level.sessions' or m.get('query')?.team))
achievementsByDescription = earned: {}, unearned: {}
for achievement in @achievements.models
if earned = @earnedMap[achievement.id]
achievement.earned = earned
@ -82,6 +83,20 @@ module.exports = class PlayAchievementsModal extends ModalView
achievement.earnedGems = Math.round (achievement.get('rewards')?.gems or 0) * expFunction earned.get('achievedAmount')
achievement.earnedPoints = Math.round (achievement.get('worth', true) or 0) * expFunction earned.get('achievedAmount')
achievement.earnedDate ?= ''
for achievement in @achievements.models
if achievement.earned
holder = achievementsByDescription.earned
else
holder = achievementsByDescription.unearned
nextInSet = holder[achievement.get('description')]
[a, b] = [achievement.get('worth', true), nextInSet?.get('worth', true) ? 0]
if achievement.earned
shouldKeep = not nextInSet or a > b
else
shouldKeep = not nextInSet or a < b
if shouldKeep
holder[achievement.get('description')] = achievement
@achievements.set _.values(achievementsByDescription.earned).concat(_.values(achievementsByDescription.unearned))
@achievements.comparator = (m) -> m.earnedDate
@achievements.sort()
@achievements.set(@achievements.models.reverse())