87 lines
2 KiB
JavaScript
87 lines
2 KiB
JavaScript
import Ember from 'ember';
|
|
|
|
const { Component, computed, copy, isEmpty } = Ember;
|
|
|
|
export default Component.extend({
|
|
classNames: ['evaluation-summary'],
|
|
|
|
evaluationBestOptions: computed('poll.users.[]', function() {
|
|
// can not evaluate answer type free text
|
|
if (this.get('poll.isFreeText')) {
|
|
return undefined;
|
|
}
|
|
|
|
// can not evaluate a poll without users
|
|
if (isEmpty(this.get('poll.users'))) {
|
|
return undefined;
|
|
}
|
|
|
|
let answers = this.get('poll.answers').reduce((answers, answer) => {
|
|
answers[answer.get('type')] = 0;
|
|
return answers;
|
|
}, {});
|
|
let evaluation = this.get('poll.options').map((option) => {
|
|
return {
|
|
answers: copy(answers),
|
|
option,
|
|
score: 0
|
|
};
|
|
});
|
|
let bestOptions = [];
|
|
|
|
this.get('poll.users').forEach(function(user) {
|
|
user.get('selections').forEach(function(selection, i) {
|
|
evaluation[i].answers[selection.get('type')]++;
|
|
|
|
switch (selection.get('type')) {
|
|
case 'yes':
|
|
evaluation[i].score += 2;
|
|
break;
|
|
|
|
case 'maybe':
|
|
evaluation[i].score += 1;
|
|
break;
|
|
|
|
case 'no':
|
|
evaluation[i].score -= 2;
|
|
break;
|
|
}
|
|
});
|
|
});
|
|
|
|
evaluation.sort(function(a, b) {
|
|
return b.score - a.score;
|
|
});
|
|
|
|
let bestScore = evaluation[0].score;
|
|
for (let i = 0; i < evaluation.length; i++) {
|
|
if (
|
|
bestScore === evaluation[i].score
|
|
) {
|
|
bestOptions.push(
|
|
evaluation[i]
|
|
);
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return bestOptions;
|
|
}),
|
|
|
|
evaluationBestOptionsMultiple: computed('evaluationBestOptions', function() {
|
|
if (this.get('evaluationBestOptions.length') > 1) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}),
|
|
|
|
evaluationLastParticipation: computed('sortedUsers.[]', function() {
|
|
return this.get('sortedUsers.lastObject.creationDate');
|
|
}),
|
|
|
|
evaluationParticipants: computed('poll.users.[]', function() {
|
|
return this.get('poll.users.length');
|
|
})
|
|
});
|