1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

refactor to accountTokens

This commit is contained in:
Esteban MIno 2018-07-27 16:05:12 -04:00
parent f5107fa12e
commit 5b9725d1f1
2 changed files with 48 additions and 54 deletions

View File

@ -13,6 +13,7 @@ class PreferencesController {
* @property {array} store.frequentRpcList A list of custom rpcs to provide the user * @property {array} store.frequentRpcList A list of custom rpcs to provide the user
* @property {string} store.currentAccountTab Indicates the selected tab in the ui * @property {string} store.currentAccountTab Indicates the selected tab in the ui
* @property {array} store.tokens The tokens the user wants display in their token lists * @property {array} store.tokens The tokens the user wants display in their token lists
* @property {object} store.accountTokens The tokens stored per account and then per network type
* @property {boolean} store.useBlockie The users preference for blockie identicons within the UI * @property {boolean} store.useBlockie The users preference for blockie identicons within the UI
* @property {object} store.featureFlags A key-boolean map, where keys refer to features and booleans to whether the * @property {object} store.featureFlags A key-boolean map, where keys refer to features and booleans to whether the
* user wishes to see that feature * user wishes to see that feature
@ -24,7 +25,7 @@ class PreferencesController {
const initState = extend({ const initState = extend({
frequentRpcList: [], frequentRpcList: [],
currentAccountTab: 'history', currentAccountTab: 'history',
addressTokens: {}, accountTokens: {},
tokens: [], tokens: [],
useBlockie: false, useBlockie: false,
featureFlags: {}, featureFlags: {},
@ -36,16 +37,8 @@ class PreferencesController {
this.diagnostics = opts.diagnostics this.diagnostics = opts.diagnostics
this.network = opts.network this.network = opts.network
this.store = new ObservableStore(initState) this.store = new ObservableStore(initState)
this._defineTokensGetter(this.store._state) this._defineTokens()
this.network.providerStore.subscribe(({ type }) => { this._subscribeProviderType()
const selectedAddress = this.store.getState().selectedAddress
const addressTokens = this.store.getState().addressTokens
if (!(type in addressTokens)) addressTokens[type] = {}
if (!(selectedAddress in addressTokens[type])) addressTokens[type][selectedAddress] = []
const tokens = addressTokens[type][selectedAddress]
this.store.updateState({ tokens })
})
} }
// PUBLIC METHODS // PUBLIC METHODS
@ -88,18 +81,17 @@ class PreferencesController {
*/ */
setAddresses (addresses) { setAddresses (addresses) {
const oldIdentities = this.store.getState().identities const oldIdentities = this.store.getState().identities
const addressTokens = this.store.getState().addressTokens const accountTokens = this.store.getState().accountTokens
const providerType = this.network.providerStore.getState().type
const identities = addresses.reduce((ids, address, index) => { const identities = addresses.reduce((ids, address, index) => {
const oldId = oldIdentities[address] || {} const oldId = oldIdentities[address] || {}
ids[address] = {name: `Account ${index + 1}`, address, ...oldId} ids[address] = {name: `Account ${index + 1}`, address, ...oldId}
return ids return ids
}, {}) }, {})
for (const address in identities) { for (const address in identities) {
if (!(providerType in addressTokens)) addressTokens[providerType] = {} if (!(address in accountTokens)) accountTokens[address] = {}
if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = []
} }
this.store.updateState({ identities, addressTokens }) this.store.updateState({ identities, accountTokens })
} }
/** /**
@ -110,13 +102,13 @@ class PreferencesController {
*/ */
removeAddress (address) { removeAddress (address) {
const identities = this.store.getState().identities const identities = this.store.getState().identities
const addressTokens = this.store.getState().addressTokens const accountTokens = this.store.getState().accountTokens
if (!identities[address]) { if (!identities[address]) {
throw new Error(`${address} can't be deleted cause it was not found`) throw new Error(`${address} can't be deleted cause it was not found`)
} }
delete identities[address] delete identities[address]
delete addressTokens[address] delete accountTokens[address]
this.store.updateState({ identities, addressTokens }) this.store.updateState({ identities, accountTokens })
// If the selected account is no longer valid, // If the selected account is no longer valid,
// select an arbitrary other account: // select an arbitrary other account:
@ -136,20 +128,17 @@ class PreferencesController {
*/ */
addAddresses (addresses) { addAddresses (addresses) {
const identities = this.store.getState().identities const identities = this.store.getState().identities
const addressTokens = this.store.getState().addressTokens const accountTokens = this.store.getState().accountTokens
const providerType = this.network.providerStore.getState().type
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 (!(providerType in addressTokens)) addressTokens[providerType] = {} if (!(address in accountTokens)) accountTokens[address] = {}
if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = []
identities[address] = { name: `Account ${identityCount + 1}`, address } identities[address] = { name: `Account ${identityCount + 1}`, address }
}) })
this.store.updateState({ identities, addressTokens }) this.store.updateState({ identities, accountTokens })
} }
/* /*
@ -205,16 +194,14 @@ class PreferencesController {
*/ */
setSelectedAddress (_address) { setSelectedAddress (_address) {
const address = normalizeAddress(_address) const address = normalizeAddress(_address)
const addressTokens = this.store.getState().addressTokens const accountTokens = this.store.getState().accountTokens
const providerType = this.network.providerStore.getState().type const providerType = this.network.providerStore.getState().type
if (!(providerType in addressTokens)) addressTokens[providerType] = {} if (!(address in accountTokens)) accountTokens[address] = {}
if (!(providerType in accountTokens[address])) accountTokens[address][providerType] = []
if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = [] const tokens = accountTokens[address][providerType]
const tokens = addressTokens[providerType][address]
this.store.updateState({ selectedAddress: address, tokens }) this.store.updateState({ selectedAddress: address, tokens })
return Promise.resolve(tokens) return Promise.resolve(tokens)
} }
@ -266,12 +253,10 @@ class PreferencesController {
} }
const selectedAddress = this.store.getState().selectedAddress const selectedAddress = this.store.getState().selectedAddress
const addressTokens = this.store.getState().addressTokens const accountTokens = this.store.getState().accountTokens
const providerType = this.network.providerStore.getState().type const providerType = this.network.providerStore.getState().type
accountTokens[selectedAddress][providerType] = tokens
if (!(providerType in addressTokens)) addressTokens[providerType] = {} this.store.updateState({ accountTokens, tokens })
addressTokens[providerType][selectedAddress] = tokens
this.store.updateState({ addressTokens })
return Promise.resolve(tokens) return Promise.resolve(tokens)
} }
@ -284,12 +269,12 @@ class PreferencesController {
* *
*/ */
removeToken (rawAddress) { removeToken (rawAddress) {
const addressTokens = this.store.getState().addressTokens const accountTokens = this.store.getState().accountTokens
const selectedAddress = this.store.getState().selectedAddress const selectedAddress = this.store.getState().selectedAddress
const providerType = this.network.providerStore.getState().type const providerType = this.network.providerStore.getState().type
const updatedTokens = addressTokens[providerType][selectedAddress].filter(token => token.address !== rawAddress) const updatedTokens = accountTokens[selectedAddress][providerType].filter(token => token.address !== rawAddress)
addressTokens[providerType][selectedAddress] = updatedTokens accountTokens[selectedAddress][providerType] = updatedTokens
this.store.updateState({ addressTokens, tokens: updatedTokens }) this.store.updateState({ accountTokens, tokens: updatedTokens })
return Promise.resolve(updatedTokens) return Promise.resolve(updatedTokens)
} }
@ -418,22 +403,31 @@ class PreferencesController {
// //
/** /**
* Getter definition for the `tokens` property of store * Getter definition for the `tokens` property of store when controller is initialized
* *
* @param {object} object Store state
* *
*/ */
_defineTokens () {
_defineTokensGetter (object) {
Object.defineProperty(object, 'tokens', {
get: () => {
const selectedAddress = this.store.getState().selectedAddress const selectedAddress = this.store.getState().selectedAddress
const addressTokens = this.store.getState().addressTokens const accountTokens = this.store.getState().accountTokens
const providerType = this.network.providerStore.getState().type const providerType = this.network.providerStore.getState().type
if (!(providerType in addressTokens)) addressTokens[providerType] = {} if (!(selectedAddress in accountTokens)) accountTokens[selectedAddress] = {}
if (!(selectedAddress in addressTokens[providerType])) return [] if (!(providerType in accountTokens[selectedAddress])) return []
return addressTokens[providerType][selectedAddress] this.tokens = accountTokens[selectedAddress][providerType]
}, }
/**
* Subscription to network provider type
*
*
*/
_subscribeProviderType () {
this.network.providerStore.subscribe(({ type }) => {
const selectedAddress = this.store.getState().selectedAddress
const accountTokens = this.store.getState().accountTokens
if (!(type in accountTokens[selectedAddress])) accountTokens[selectedAddress][type] = []
const tokens = accountTokens[selectedAddress][type]
this.store.updateState({ tokens })
}) })
} }
} }

View File

@ -29,7 +29,7 @@ function transformState (state) {
const tokens = newState.TransactionController.tokens const tokens = newState.TransactionController.tokens
const selectedAddress = newState.PreferencesController.selectedAddress const selectedAddress = newState.PreferencesController.selectedAddress
newState.PreferencesController.tokens = [] newState.PreferencesController.tokens = []
newState.PreferencesController.addressTokens = {'mainnet': {selectedAddress: tokens}} newState.PreferencesController.accountTokens = {selectedAddress: {'mainnet': tokens}}
} }
} }