From 8e7430ebb933e234c2fbaabb7f24ce7d9796820a Mon Sep 17 00:00:00 2001 From: Garret Alfert Date: Fri, 20 Sep 2019 18:27:40 +0200 Subject: [PATCH] Make contribution-status helper recompute When any of the depending properties of the contribution changes, the helper recomputes its output. --- app/components/contribution-list/template.hbs | 2 +- app/helpers/contribution-status.js | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/app/components/contribution-list/template.hbs b/app/components/contribution-list/template.hbs index d6495a6..dab6a13 100644 --- a/app/components/contribution-list/template.hbs +++ b/app/components/contribution-list/template.hbs @@ -33,7 +33,7 @@ {{#each contributionsFiltered as |contribution|}}
  • + class="{{contribution-status contribution}}{{if (eq contribution.id selectedContributionId) " selected"}}">

    {{user-avatar contributor=contribution.contributor}} ({{contribution.kind}}) diff --git a/app/helpers/contribution-status.js b/app/helpers/contribution-status.js index 79e4bbb..affdf12 100644 --- a/app/helpers/contribution-status.js +++ b/app/helpers/contribution-status.js @@ -1,6 +1,7 @@ import Helper from '@ember/component/helper'; import { inject as service } from '@ember/service'; import { alias } from '@ember/object/computed'; +import { once } from '@ember/runloop'; export default Helper.extend({ @@ -8,6 +9,8 @@ export default Helper.extend({ currentBlock: alias('kredits.currentBlock'), compute([contribution]) { + this.setupRecompute(contribution); + if (contribution.vetoed) { return 'vetoed'; } else if (contribution.confirmedAt > this.currentBlock) { @@ -15,6 +18,31 @@ export default Helper.extend({ } else { return 'confirmed' } + }, + + destroy () { + if (this.teardown) this.teardown(); + this._super(...arguments); + }, + + setupRecompute (contribution) { + if (this.teardown) this.teardown(); + + contribution.addObserver('vetoed' , this, this.triggerRecompute); + contribution.addObserver('confirmedAt' , this, this.triggerRecompute); + contribution.addObserver('currentBlock' , this, this.triggerRecompute); + + this.teardown = () => { + contribution.removeObserver('vetoed', this, this.triggerRecompute); + contribution.removeObserver('confirmedAt', this, this.triggerRecompute); + contribution.removeObserver('currentBlock', this, this.triggerRecompute); + }; + }, + + triggerRecompute () { + once(this, function () { + this.recompute(); + }); } });