-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkwc-challenge-set-listing.html
executable file
·154 lines (143 loc) · 5.13 KB
/
kwc-challenge-set-listing.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<link rel="import" href="../polymer/polymer.html">
<link rel="import" href="../kwc-challenge-set/kwc-challenge-set.html">
<!--
`kwc-challenge-set-listing`
To display all the step-by-step challenge sets available to the user
@demo demo/index.html
-->
<dom-module id="kwc-challenge-set-listing">
<template>
<style>
:host {
display: block;
}
kano-display-training {
margin: auto;
max-width: 700px;
}
</style>
<template is="dom-repeat" items="[[challengeSets]]" as="challengeSet">
<kwc-challenge-set
complete-icon-url="[[completeIconUrl]]"
locked-icon-url="[[lockedIconUrl]]"
current-icon-url="[[currentIconUrl]]"
label="Challenge Set"
challenge-set="[[challengeSet]]"
progress="[[_computeCategoryProgress(challengeSet.category, completedChallenges)]]"
avatar-url="[[userAvatarUrl]]"
show-medals="[[showMedals]]"
on-disabled-medal-clicked="_onDisabledMedalClicked"
hide-challenge-friend
disabled$="[[_computeDisabled(challengeSet.*, disabledChallengeSets.*)]]">
</kwc-challenge-set>
</template>
</template>
<script>
Polymer({
is: 'kwc-challenge-set-listing',
properties: {
/**
* An array of challenge set objects. A <kwc-challenge-set>
* element is rendered for each set.
* @type {Array}
*/
challengeSets: {
type: Array,
value: () => {
return [];
}
},
/**
* An array of challenge disabled challenge sets.
* @type {Array}
*/
disabledChallengeSets: {
type: Array,
value: () => {
return [];
}
},
/**
* An url for the current user's avatar
* @type {String}
*/
userAvatarUrl: {
type: String,
value: null
},
/**
* A dictionary of challenge categories containing an array of
* challenge ids that have been completed for each category.
* @type {Object}
*/
completedChallenges: {
type: Object,
value: () => {
return {};
}
},
/**
* Flags if, after completing a challenge set, the user
* should see the medal (badges) unlocked in the challenge
* set circle.
* @type {Boolean}
*/
showMedals: {
type: Boolean,
value: false
},
/*
* A url to use for completed challenges in the progess bar
*/
completeIconUrl: {
type: String,
value: null
},
/*
* A url for an icon to use for the current challenge in the progress bar.
*/
currentIconUrl: {
type: String,
value: null
},
/*
* A url for an icon to used for locked challenges on the progress bar.
*/
lockedIconUrl: {
type: String,
value: null
}
},
/**
* TODO: Document `_computeCategoryProgress`
*/
_computeCategoryProgress (category, progress) {
if (!category || !progress) {
return 0;
}
return progress[category];
},
/**
* Compute if challenge set is disabled or not. The rule for
* disabling a challenge set might change so instead of binding it
* straight to the dom, it's being calculated on this method so
* it's easier to manage it.
* @param {Object} challengeSet A "challenge set" data object
* @return {Boolean}
*/
_computeDisabled (challengeSet, disabledChallengeSets) {
return disabledChallengeSets.base.indexOf(challengeSet.base.category) !== -1;
},
/**
* Proxy `disabled-medal-clicked` to parent view
* @param {Event} e Event triggered by clicking on a disabled medal
* of a completed challenge set.
*/
_onDisabledMedalClicked (e) {
this.dispatchEvent(
new CustomEvent('disabled-medal-clicked', e)
);
}
});
</script>
</dom-module>