diff --git a/app/controllers/index.js b/app/controllers/index.js index 1f5ca43..ab1549d 100644 --- a/app/controllers/index.js +++ b/app/controllers/index.js @@ -15,24 +15,14 @@ export default Controller.extend({ // TODO: transfer on the token contract }, - contributors: alias('model.contributors'), + contributors: alias('kredits.contributors'), contributorsWithKredits: filter('contributors', function(contributor) { return contributor.get('balance') !== 0; }), contributorsSorting: ['balance:desc'], contributorsSorted: sort('contributorsWithKredits', 'contributorsSorting'), - proposals: computed('model.proposals.[]', 'contributors.[]', function() { - return this.get('model.proposals') - .map((proposal) => { - let contributor = this.get('contributors') - .findBy('id', proposal.get('recipientId')); - - proposal.set('contributor', contributor); - - return proposal; - }); - }), + proposals: alias('kredits.proposals'), proposalsOpen: filterBy('proposals', 'isExecuted', false), proposalsClosed: filterBy('proposals', 'isExecuted', true), proposalsSorting: ['id:desc'], diff --git a/app/controllers/proposals/new.js b/app/controllers/proposals/new.js index dbea973..bc1ce67 100644 --- a/app/controllers/proposals/new.js +++ b/app/controllers/proposals/new.js @@ -1,11 +1,11 @@ import Controller from 'ember-controller'; -import { filterBy } from 'ember-computed'; +import { alias, filterBy } from 'ember-computed'; import injectService from 'ember-service/inject'; export default Controller.extend({ kredits: injectService(), - contributors: [], + contributors: alias('kredits.contributors'), minedContributors: filterBy('contributors', 'id'), actions: { diff --git a/app/models/proposal.js b/app/models/proposal.js index 88594e4..7bd376c 100644 --- a/app/models/proposal.js +++ b/app/models/proposal.js @@ -1,8 +1,11 @@ import EmberObject from 'ember-object'; -import { alias } from 'ember-computed'; +import computed, { alias } from 'ember-computed'; +import injectService from 'ember-service/inject'; import bignumber from 'kredits-web/utils/cps/bignumber'; export default EmberObject.extend({ + kredits: injectService(), + // Contract id: bignumber('idRaw', 'toString'), creatorAddress: null, @@ -24,5 +27,8 @@ export default EmberObject.extend({ ipfsData: '', // Relationships - contributor: null, + // TODO: Optimize it. We don't need to find the contributor every time we add a new one + contributor: computed('recipientId', 'kredits.contributors.[]', function() { + return this.get('kredits.contributors').findBy('id', this.get('recipientId')); + }) }); diff --git a/app/routes/application.js b/app/routes/application.js index 9371c64..3119aad 100644 --- a/app/routes/application.js +++ b/app/routes/application.js @@ -15,4 +15,8 @@ export default Route.extend({ } }); }, + + afterModel() { + return this.get('kredits').loadContributorsAndProposals(); + } }); diff --git a/app/routes/index.js b/app/routes/index.js deleted file mode 100644 index 437e4f3..0000000 --- a/app/routes/index.js +++ /dev/null @@ -1,22 +0,0 @@ -import Ember from 'ember'; - -export default Ember.Route.extend({ - - kredits: Ember.inject.service(), - - model() { - let newContributor = Ember.getOwner(this).lookup('model:contributor'); - newContributor.set('kind', 'person'); - - let kredits = this.get('kredits'); - let totalSupply = kredits.get('kredits').Token.functions.totalSupply(); - - return Ember.RSVP.hash({ - contributors: kredits.getContributors(), - proposals: kredits.getProposals(), - totalSupply, - newContributor: newContributor, - }); - } - -}); diff --git a/app/routes/proposals/new.js b/app/routes/proposals/new.js deleted file mode 100644 index 657e6b2..0000000 --- a/app/routes/proposals/new.js +++ /dev/null @@ -1,15 +0,0 @@ -import injectService from 'ember-service/inject'; -import Route from 'ember-route'; - -export default Route.extend({ - kredits: injectService(), - - setupController(controller) { - this._super(...arguments); - - this.get('kredits').getContributors() - .then((contributors) => { - controller.set('contributors', contributors); - }); - } -}); diff --git a/app/services/kredits.js b/app/services/kredits.js index 8f4f477..cc25378 100644 --- a/app/services/kredits.js +++ b/app/services/kredits.js @@ -74,6 +74,23 @@ export default Service.extend({ }); }, + totalSupply: computed(function() { + return this.get('kredits').Token.functions.totalSupply(); + }), + + contributors: [], + proposals: [], + + loadContributorsAndProposals() { + return RSVP.hash({ + contributors: this.getContributors(), + proposals: this.getProposals(), + }).then(({ contributors, proposals }) => { + this.set('contributors', contributors); + this.set('proposals', proposals); + }); + }, + // TODO: Only assign valid attributes buildModel(name, attributes) { debug('[kredits] build', name, attributes); diff --git a/app/templates/index.hbs b/app/templates/index.hbs index 5ad6e8b..2386410 100644 --- a/app/templates/index.hbs +++ b/app/templates/index.hbs @@ -18,7 +18,7 @@ {{contributor-list contributors=contributorsSorted}}
- {{model.totalSupply}} kredits issued and distributed among + {{await kredits.totalSupply}} kredits issued and distributed among {{contributorsWithKredits.length}} contributors.
@@ -69,7 +69,7 @@