aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/controllers/computed-balances.js
diff options
context:
space:
mode:
authorChi Kei Chan <chikeichan@gmail.com>2017-09-28 13:32:07 +0800
committerChi Kei Chan <chikeichan@gmail.com>2017-09-28 13:32:07 +0800
commit5a1d50cd431819874f634679a1ea47fa64f9fbb4 (patch)
treefe76102102c875ee6eaaee8cb57829899936c519 /app/scripts/controllers/computed-balances.js
parentdeee689426f0b6236093128b47be81faf56d6b75 (diff)
parentcdf41c28573822c7c4d50efe7dfa34a062825d7f (diff)
downloadtangerine-wallet-browser-5a1d50cd431819874f634679a1ea47fa64f9fbb4.tar
tangerine-wallet-browser-5a1d50cd431819874f634679a1ea47fa64f9fbb4.tar.gz
tangerine-wallet-browser-5a1d50cd431819874f634679a1ea47fa64f9fbb4.tar.bz2
tangerine-wallet-browser-5a1d50cd431819874f634679a1ea47fa64f9fbb4.tar.lz
tangerine-wallet-browser-5a1d50cd431819874f634679a1ea47fa64f9fbb4.tar.xz
tangerine-wallet-browser-5a1d50cd431819874f634679a1ea47fa64f9fbb4.tar.zst
tangerine-wallet-browser-5a1d50cd431819874f634679a1ea47fa64f9fbb4.zip
Merge branch 'master' into mmn
Diffstat (limited to 'app/scripts/controllers/computed-balances.js')
-rw-r--r--app/scripts/controllers/computed-balances.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/app/scripts/controllers/computed-balances.js b/app/scripts/controllers/computed-balances.js
new file mode 100644
index 000000000..2479e1b3a
--- /dev/null
+++ b/app/scripts/controllers/computed-balances.js
@@ -0,0 +1,66 @@
+const ObservableStore = require('obs-store')
+const extend = require('xtend')
+const BalanceController = require('./balance')
+
+class ComputedbalancesController {
+
+ constructor (opts = {}) {
+ const { accountTracker, txController, blockTracker } = opts
+ this.accountTracker = accountTracker
+ this.txController = txController
+ this.blockTracker = blockTracker
+
+ const initState = extend({
+ computedBalances: {},
+ }, opts.initState)
+ this.store = new ObservableStore(initState)
+ this.balances = {}
+
+ this._initBalanceUpdating()
+ }
+
+ updateAllBalances () {
+ for (let address in this.accountTracker.store.getState().accounts) {
+ this.balances[address].updateBalance()
+ }
+ }
+
+ _initBalanceUpdating () {
+ const store = this.accountTracker.store.getState()
+ this.addAnyAccountsFromStore(store)
+ this.accountTracker.store.subscribe(this.addAnyAccountsFromStore.bind(this))
+ }
+
+ addAnyAccountsFromStore(store) {
+ const balances = store.accounts
+
+ for (let address in balances) {
+ this.trackAddressIfNotAlready(address)
+ }
+ }
+
+ trackAddressIfNotAlready (address) {
+ const state = this.store.getState()
+ if (!(address in state.computedBalances)) {
+ this.trackAddress(address)
+ }
+ }
+
+ trackAddress (address) {
+ let updater = new BalanceController({
+ address,
+ accountTracker: this.accountTracker,
+ txController: this.txController,
+ blockTracker: this.blockTracker,
+ })
+ updater.store.subscribe((accountBalance) => {
+ let newState = this.store.getState()
+ newState.computedBalances[address] = accountBalance
+ this.store.updateState(newState)
+ })
+ this.balances[address] = updater
+ updater.updateBalance()
+ }
+}
+
+module.exports = ComputedbalancesController