Add kreditsByContributor collection
Lists contributors along with their confirmed, unconfirmed, and total kredits amounts.
This commit is contained in:
+39
-2
@@ -2,10 +2,11 @@ import ethers from 'npm:ethers';
|
|||||||
import Kredits from 'npm:kredits-contracts';
|
import Kredits from 'npm:kredits-contracts';
|
||||||
import RSVP from 'rsvp';
|
import RSVP from 'rsvp';
|
||||||
|
|
||||||
|
import { A } from '@ember/array';
|
||||||
import Service from '@ember/service';
|
import Service from '@ember/service';
|
||||||
import { computed } from '@ember/object';
|
import { computed, get } from '@ember/object';
|
||||||
import { alias, notEmpty } from '@ember/object/computed';
|
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';
|
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 Proposal from 'kredits-web/models/proposal'
|
||||||
import Contribution from 'kredits-web/models/contribution'
|
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({
|
export default Service.extend({
|
||||||
|
|
||||||
currentBlock: null,
|
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 () {
|
init () {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
this.set('contributors', []);
|
this.set('contributors', []);
|
||||||
|
|||||||
Reference in New Issue
Block a user