diff --git a/app/services/kredits.js b/app/services/kredits.js index 943f83e..7c40cbc 100644 --- a/app/services/kredits.js +++ b/app/services/kredits.js @@ -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', []);