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:
parent
f5107fa12e
commit
5b9725d1f1
@ -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 })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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}}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user