Merge pull request #4351 from tgxworld/allow_non_number_poll_results_to_be_sorted

FEATURE: Allow poll results to be sorted.
This commit is contained in:
Guo Xiang Tan 2016-07-29 10:38:29 +08:00 committed by GitHub
commit 8e30ab31c2
3 changed files with 56 additions and 6 deletions

View File

@ -7,7 +7,9 @@ export default Em.Component.extend({
@computed("poll.voters", "poll.type", "poll.options.[]")
options(voters, type) {
const options = this.get("poll.options");
const options = this.get("poll.options").slice(0).sort((a, b) => {
return a.get("votes") < b.get("votes") ? 1 : 0;
});
let percentages = voters === 0 ?
Array(options.length).fill(0) :
@ -35,5 +37,4 @@ export default Em.Component.extend({
return options;
}
});

View File

@ -40,10 +40,8 @@ export default Ember.Component.extend({
didInsertElement() {
this._super();
Ember.run.schedule("afterRender", () => {
this.set("numOfVotersToShow", Math.round(this.$().width() / 25) * 2);
if (this.get("voterIds").length > 0) this._fetchUsers();
});
this.set("numOfVotersToShow", Math.round(this.$().width() / 25) * 2);
if (this.get("voterIds").length > 0) this._fetchUsers();
},
actions: {

View File

@ -0,0 +1,51 @@
import componentTest from 'helpers/component-test';
moduleForComponent('poll-results-standard', { integration: true });
componentTest('options in descending order', {
template: '{{poll-results-standard poll=poll}}',
setup(store) {
this.set('poll', {
options: [Em.Object.create({ votes: 5 }), Em.Object.create({ votes: 4 })],
voters: 9
});
},
test(assert) {
assert.equal(this.$('.option .percentage:eq(0)').text(), '56%');
assert.equal(this.$('.option .percentage:eq(1)').text(), '44%');
}
});
componentTest('options in ascending order', {
template: '{{poll-results-standard poll=poll sortResults=sortResults}}',
setup() {
this.set('poll', {
options: [Em.Object.create({ votes: 4 }), Em.Object.create({ votes: 5 })],
voters: 9
});
},
test(assert) {
assert.equal(this.$('.option .percentage:eq(0)').text(), '56%');
assert.equal(this.$('.option .percentage:eq(1)').text(), '44%');
}
});
componentTest('multiple options in descending order', {
template: '{{poll-results-standard poll=poll}}',
setup(store) {
this.set('poll', {
type: 'multiple',
options: [Em.Object.create({ votes: 5 }), Em.Object.create({ votes: 4 })],
voters: 9
});
},
test(assert) {
assert.equal(this.$('.option .percentage:eq(0)').text(), '55%');
assert.equal(this.$('.option .percentage:eq(1)').text(), '44%');
}
});