add & delete tokens per account

This commit is contained in:
Esteban MIno 2018-07-25 16:14:10 -04:00
parent 3667f3cb85
commit 2770df80e3
2 changed files with 27 additions and 8 deletions

View File

@ -85,7 +85,7 @@ class DetectTokensController {
set preferences (preferences) { set preferences (preferences) {
if (!preferences) { return } if (!preferences) { return }
this._preferences = preferences this._preferences = preferences
preferences.store.subscribe(({ tokens }) => { this.tokenAddresses = tokens.map((obj) => { return obj.address }) }) preferences.store.subscribe(({ tokens = [] }) => { this.tokenAddresses = tokens.map((obj) => { return obj.address }) })
preferences.store.subscribe(({ selectedAddress }) => { preferences.store.subscribe(({ selectedAddress }) => {
if (this.selectedAddress !== selectedAddress) { if (this.selectedAddress !== selectedAddress) {
this.selectedAddress = selectedAddress this.selectedAddress = selectedAddress

View File

@ -24,6 +24,7 @@ class PreferencesController {
const initState = extend({ const initState = extend({
frequentRpcList: [], frequentRpcList: [],
currentAccountTab: 'history', currentAccountTab: 'history',
addressTokens: {},
tokens: [], tokens: [],
useBlockie: false, useBlockie: false,
featureFlags: {}, featureFlags: {},
@ -35,6 +36,16 @@ class PreferencesController {
this.diagnostics = opts.diagnostics this.diagnostics = opts.diagnostics
this.store = new ObservableStore(initState) this.store = new ObservableStore(initState)
Object.defineProperty(this.store._state, 'tokens', {
get: () => {
const selectedAddress = this.store.getState().selectedAddress
const tokens = this.store.getState().addressTokens
// TODO when create vault
if (!(selectedAddress in tokens)) return []
return tokens[selectedAddress]
},
})
} }
// PUBLIC METHODS // PUBLIC METHODS
@ -117,14 +128,16 @@ class PreferencesController {
*/ */
addAddresses (addresses) { addAddresses (addresses) {
const identities = this.store.getState().identities const identities = this.store.getState().identities
const addressTokens = this.store.getState().addressTokens
addresses.forEach((address) => { addresses.forEach((address) => {
// skip if already exists // skip if already exists
if (identities[address]) return if (identities[address]) return
// add missing identity // add missing identity
const identityCount = Object.keys(identities).length const identityCount = Object.keys(identities).length
if (!(address in addressTokens)) addressTokens[address] = []
identities[address] = { name: `Account ${identityCount + 1}`, address } identities[address] = { name: `Account ${identityCount + 1}`, address }
}) })
this.store.updateState({ identities }) this.store.updateState({ identities, addressTokens })
} }
/* /*
@ -181,7 +194,8 @@ class PreferencesController {
setSelectedAddress (_address) { setSelectedAddress (_address) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const address = normalizeAddress(_address) const address = normalizeAddress(_address)
this.store.updateState({ selectedAddress: address }) const tokens = this.store.getState().addressTokens[_address]
this.store.updateState({ selectedAddress: address, tokens: tokens })
resolve() resolve()
}) })
} }
@ -233,7 +247,10 @@ class PreferencesController {
tokens.push(newEntry) tokens.push(newEntry)
} }
this.store.updateState({ tokens }) const selectedAddress = this.store.getState().selectedAddress
const addressTokens = this.store.getState().addressTokens
addressTokens[selectedAddress] = tokens
this.store.updateState({ addressTokens })
return Promise.resolve(tokens) return Promise.resolve(tokens)
} }
@ -246,11 +263,13 @@ class PreferencesController {
* *
*/ */
removeToken (rawAddress) { removeToken (rawAddress) {
const tokens = this.store.getState().tokens const addressTokens = this.store.getState().addressTokens
const selectedAddress = this.store.getState().selectedAddress
const updatedTokens = tokens.filter(token => token.address !== rawAddress) const updatedTokens = addressTokens[selectedAddress].filter(token => token.address !== rawAddress)
addressTokens[selectedAddress] = updatedTokens
this.store.updateState({ addressTokens, tokens: updatedTokens })
this.store.updateState({ tokens: updatedTokens })
return Promise.resolve(updatedTokens) return Promise.resolve(updatedTokens)
} }