Add kreditsByContributor collection

Lists contributors along with their confirmed, unconfirmed, and total
kredits amounts.
This commit is contained in:
2019-04-27 17:35:05 +01:00
parent f32a34a702
commit 283ec1d48a
+39 -2
View File
@@ -2,10 +2,11 @@ import ethers from 'npm:ethers';
import Kredits from 'npm:kredits-contracts';
import RSVP from 'rsvp';
import { A } from '@ember/array';
import Service from '@ember/service';
import { computed } from '@ember/object';
import { computed, get } from '@ember/object';
import { alias, notEmpty } from '@ember/object/computed';
import { isEmpty } from '@ember/utils';
import { isEmpty, isPresent } from '@ember/utils';
import formatKredits from 'kredits-web/utils/format-kredits';
@@ -14,6 +15,27 @@ import Contributor from 'kredits-web/models/contributor'
import Proposal from 'kredits-web/models/proposal'
import Contribution from 'kredits-web/models/contribution'
function groupBy (collection, property) {
let groups = A();
let items = collection;
if (items) {
items.forEach(function(item) {
let value = get(item, property);
let group = groups.findBy('value', value);
if (isPresent(group)) {
get(group, 'items').push(item);
} else {
group = { property: property, value: value, items: [item] };
groups.push(group);
}
});
}
return groups;
}
export default Service.extend({
currentBlock: null,
@@ -43,6 +65,21 @@ export default Service.extend({
});
}),
kreditsByContributor: computed('contributionsUnconfirmed.[]', 'contributors', function() {
const contributionsGrouped = groupBy(this.contributionsUnconfirmed, 'contributorId');
return contributionsGrouped.map(c => {
const amountUnconfirmed = c.items.mapBy('amount').reduce((a, b) => a + b);
const contributor = this.contributors.findBy('id', c.value.toString());
return {
contributor: contributor,
amountUnconfirmed: amountUnconfirmed,
amountConfirmed: contributor.totalKreditsEarned,
amountTotal: contributor.totalKreditsEarned + amountUnconfirmed
}
})
}),
init () {
this._super(...arguments);
this.set('contributors', []);