mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-22 17:33:23 +01:00
Enables remove token and ensures add/remove update the list without need for refresh.
This commit is contained in:
parent
45dbd017e6
commit
ac4868170f
@ -42,7 +42,18 @@ class PreferencesController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.store.updateState({ tokens })
|
this.store.updateState({ tokens })
|
||||||
return Promise.resolve()
|
return Promise.resolve(tokens)
|
||||||
|
}
|
||||||
|
|
||||||
|
removeToken (rawAddress) {
|
||||||
|
const address = normalizeAddress(rawAddress)
|
||||||
|
|
||||||
|
const tokens = this.store.getState().tokens
|
||||||
|
|
||||||
|
const updatedTokens = tokens.filter(token => token.address !== rawAddress)
|
||||||
|
|
||||||
|
this.store.updateState({ tokens: updatedTokens })
|
||||||
|
return Promise.resolve(updatedTokens)
|
||||||
}
|
}
|
||||||
|
|
||||||
getTokens () {
|
getTokens () {
|
||||||
|
@ -327,6 +327,7 @@ module.exports = class MetamaskController extends EventEmitter {
|
|||||||
// PreferencesController
|
// PreferencesController
|
||||||
setSelectedAddress: nodeify(preferencesController.setSelectedAddress, preferencesController),
|
setSelectedAddress: nodeify(preferencesController.setSelectedAddress, preferencesController),
|
||||||
addToken: nodeify(preferencesController.addToken, preferencesController),
|
addToken: nodeify(preferencesController.addToken, preferencesController),
|
||||||
|
removeToken: nodeify(preferencesController.removeToken, preferencesController),
|
||||||
setCurrentAccountTab: nodeify(preferencesController.setCurrentAccountTab, preferencesController),
|
setCurrentAccountTab: nodeify(preferencesController.setCurrentAccountTab, preferencesController),
|
||||||
setDefaultRpc: nodeify(this.setDefaultRpc, this),
|
setDefaultRpc: nodeify(this.setDefaultRpc, this),
|
||||||
setCustomRpc: nodeify(this.setCustomRpc, this),
|
setCustomRpc: nodeify(this.setCustomRpc, this),
|
||||||
|
@ -152,6 +152,9 @@ var actions = {
|
|||||||
showAddTokenPage,
|
showAddTokenPage,
|
||||||
addToken,
|
addToken,
|
||||||
addTokens,
|
addTokens,
|
||||||
|
removeToken,
|
||||||
|
updateTokens,
|
||||||
|
UPDATE_TOKENS: 'UPDATE_TOKENS',
|
||||||
setRpcTarget: setRpcTarget,
|
setRpcTarget: setRpcTarget,
|
||||||
setDefaultRpcTarget: setDefaultRpcTarget,
|
setDefaultRpcTarget: setDefaultRpcTarget,
|
||||||
setProviderType: setProviderType,
|
setProviderType: setProviderType,
|
||||||
@ -753,16 +756,31 @@ function addToken (address, symbol, decimals) {
|
|||||||
return (dispatch) => {
|
return (dispatch) => {
|
||||||
dispatch(actions.showLoadingIndication())
|
dispatch(actions.showLoadingIndication())
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
background.addToken(address, symbol, decimals, (err) => {
|
background.addToken(address, symbol, decimals, (err, tokens) => {
|
||||||
dispatch(actions.hideLoadingIndication())
|
dispatch(actions.hideLoadingIndication())
|
||||||
if (err) {
|
if (err) {
|
||||||
dispatch(actions.displayWarning(err.message))
|
dispatch(actions.displayWarning(err.message))
|
||||||
reject(err)
|
reject(err)
|
||||||
}
|
}
|
||||||
resolve()
|
dispatch(actions.updateTokens(tokens))
|
||||||
// setTimeout(() => {
|
resolve(tokens)
|
||||||
// dispatch(actions.goHome())
|
})
|
||||||
// }, 250)
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeToken (address) {
|
||||||
|
return (dispatch) => {
|
||||||
|
dispatch(actions.showLoadingIndication())
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
background.removeToken(address, (err, tokens) => {
|
||||||
|
dispatch(actions.hideLoadingIndication())
|
||||||
|
if (err) {
|
||||||
|
dispatch(actions.displayWarning(err.message))
|
||||||
|
reject(err)
|
||||||
|
}
|
||||||
|
dispatch(actions.updateTokens(tokens))
|
||||||
|
resolve(tokens)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -786,6 +804,13 @@ function addTokens (tokens) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateTokens(newTokens) {
|
||||||
|
return {
|
||||||
|
type: actions.UPDATE_TOKENS,
|
||||||
|
newTokens
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function goBackToInitView () {
|
function goBackToInitView () {
|
||||||
return {
|
return {
|
||||||
type: actions.BACK_TO_INIT_MENU,
|
type: actions.BACK_TO_INIT_MENU,
|
||||||
|
@ -41,6 +41,7 @@ TokenMenuDropdown.prototype.render = function () {
|
|||||||
onClick: (e) => {
|
onClick: (e) => {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
showHideTokenConfirmationModal(this.props.token)
|
showHideTokenConfirmationModal(this.props.token)
|
||||||
|
this.props.onClose()
|
||||||
},
|
},
|
||||||
}, 'Hide Token')
|
}, 'Hide Token')
|
||||||
|
|
||||||
|
@ -13,7 +13,15 @@ function mapStateToProps (state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function mapDispatchToProps (dispatch) {
|
function mapDispatchToProps (dispatch) {
|
||||||
return {}
|
return {
|
||||||
|
hideModal: () => dispatch(actions.hideModal()),
|
||||||
|
hideToken: address => {
|
||||||
|
dispatch(actions.removeToken(address))
|
||||||
|
.then(() => {
|
||||||
|
dispatch(actions.hideModal())
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inherits(HideTokenConfirmationModal, Component)
|
inherits(HideTokenConfirmationModal, Component)
|
||||||
@ -26,7 +34,7 @@ function HideTokenConfirmationModal () {
|
|||||||
module.exports = connect(mapStateToProps, mapDispatchToProps)(HideTokenConfirmationModal)
|
module.exports = connect(mapStateToProps, mapDispatchToProps)(HideTokenConfirmationModal)
|
||||||
|
|
||||||
HideTokenConfirmationModal.prototype.render = function () {
|
HideTokenConfirmationModal.prototype.render = function () {
|
||||||
const { token, network } = this.props
|
const { token, network, hideToken, hideModal } = this.props
|
||||||
const { symbol, address } = token
|
const { symbol, address } = token
|
||||||
|
|
||||||
return h('div.hide-token-confirmation', {}, [
|
return h('div.hide-token-confirmation', {}, [
|
||||||
@ -51,12 +59,12 @@ HideTokenConfirmationModal.prototype.render = function () {
|
|||||||
|
|
||||||
h('div.hide-token-confirmation__buttons', {}, [
|
h('div.hide-token-confirmation__buttons', {}, [
|
||||||
h('button.btn-clear', {
|
h('button.btn-clear', {
|
||||||
onClick: () => {},
|
onClick: () => hideModal(),
|
||||||
}, [
|
}, [
|
||||||
'CANCEL',
|
'CANCEL',
|
||||||
]),
|
]),
|
||||||
h('button.btn-clear', {
|
h('button.btn-clear', {
|
||||||
onClick: () => {},
|
onClick: () => hideToken(address),
|
||||||
}, [
|
}, [
|
||||||
'HIDE',
|
'HIDE',
|
||||||
]),
|
]),
|
||||||
|
@ -27,7 +27,6 @@ for (const address in contracts) {
|
|||||||
|
|
||||||
module.exports = connect(mapStateToProps)(TokenList)
|
module.exports = connect(mapStateToProps)(TokenList)
|
||||||
|
|
||||||
|
|
||||||
inherits(TokenList, Component)
|
inherits(TokenList, Component)
|
||||||
function TokenList () {
|
function TokenList () {
|
||||||
this.state = {
|
this.state = {
|
||||||
@ -129,15 +128,22 @@ TokenList.prototype.componentDidUpdate = function (nextProps) {
|
|||||||
const {
|
const {
|
||||||
network: oldNet,
|
network: oldNet,
|
||||||
userAddress: oldAddress,
|
userAddress: oldAddress,
|
||||||
|
tokens,
|
||||||
} = this.props
|
} = this.props
|
||||||
const {
|
const {
|
||||||
network: newNet,
|
network: newNet,
|
||||||
userAddress: newAddress,
|
userAddress: newAddress,
|
||||||
|
tokens: newTokens,
|
||||||
} = nextProps
|
} = nextProps
|
||||||
|
|
||||||
if (newNet === 'loading') return
|
const isLoading = newNet === 'loading'
|
||||||
if (!oldNet || !newNet || !oldAddress || !newAddress) return
|
const missingInfo = !oldNet || !newNet || !oldAddress || !newAddress
|
||||||
if (oldAddress === newAddress && oldNet === newNet) return
|
const sameUserAndNetwork = oldAddress === newAddress && oldNet === newNet
|
||||||
|
const shouldUpdateTokens = isLoading || missingInfo || sameUserAndNetwork
|
||||||
|
|
||||||
|
const tokensLengthUnchanged = tokens.length === newTokens.length
|
||||||
|
|
||||||
|
if (tokensLengthUnchanged && shouldUpdateTokens) return
|
||||||
|
|
||||||
this.setState({ isLoading: true })
|
this.setState({ isLoading: true })
|
||||||
this.createFreshTokenTracker()
|
this.createFreshTokenTracker()
|
||||||
|
@ -19,6 +19,7 @@ function reduceMetamask (state, action) {
|
|||||||
addressBook: [],
|
addressBook: [],
|
||||||
selectedTokenAddress: null,
|
selectedTokenAddress: null,
|
||||||
tokenExchangeRates: {},
|
tokenExchangeRates: {},
|
||||||
|
tokens: [],
|
||||||
}, state.metamask)
|
}, state.metamask)
|
||||||
|
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
@ -146,6 +147,11 @@ function reduceMetamask (state, action) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
case actions.UPDATE_TOKENS:
|
||||||
|
return extend(metamaskState, {
|
||||||
|
tokens: action.newTokens,
|
||||||
|
})
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return metamaskState
|
return metamaskState
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user