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

Tighten up loading indication logic (#10103)

Ensures that `hideLoadingIndication` is always called in all actions that call `showLoadingIndication`. It's unclear how many of these actions were failing to hide the loading indication, because other actions superset `hideLoadingIndication`. 

At the very least, `updateTransaction` was probably failing to hide the loading indication in the error case.

This PR also refactors a lot of actions to call `hideLoadingIndication` once in `finally` blocks as opposed to multiple times across `try` and `catch` blocks. We avoided making changes to functions using `Promise` methods, because `Promise.finally` is not supported by Waterfox, and it's not properly transpiled by Babel.
This commit is contained in:
Erik Marks 2020-12-17 21:34:43 -08:00 committed by Mark Stacey
parent 8dd8bfd690
commit 11d176fde6
2 changed files with 142 additions and 109 deletions

View File

@ -218,8 +218,8 @@ describe('Actions', function () {
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
submitPasswordSpy = sinon.stub(background, 'verifySeedPhrase') submitPasswordSpy = sinon.stub(background, 'verifySeedPhrase')
@ -368,8 +368,8 @@ describe('Actions', function () {
type: 'SHOW_LOADING_INDICATION', type: 'SHOW_LOADING_INDICATION',
value: 'This may take a while, please be patient.', value: 'This may take a while, please be patient.',
}, },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
importAccountWithStrategySpy = sinon.stub( importAccountWithStrategySpy = sinon.stub(
@ -428,6 +428,7 @@ describe('Actions', function () {
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
try { try {
@ -465,6 +466,7 @@ describe('Actions', function () {
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
try { try {
@ -507,6 +509,7 @@ describe('Actions', function () {
value: 'Looking for your Ledger...', value: 'Looking for your Ledger...',
}, },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
try { try {
@ -545,6 +548,7 @@ describe('Actions', function () {
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
] ]
@ -581,8 +585,8 @@ describe('Actions', function () {
const store = mockStore() const store = mockStore()
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
await store.dispatch(actions.setCurrentCurrency()) await store.dispatch(actions.setCurrentCurrency())
@ -623,8 +627,8 @@ describe('Actions', function () {
const store = mockStore() const store = mockStore()
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
signMessageSpy = sinon.stub(background, 'signMessage') signMessageSpy = sinon.stub(background, 'signMessage')
@ -675,8 +679,8 @@ describe('Actions', function () {
const store = mockStore() const store = mockStore()
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
signPersonalMessageSpy = sinon.stub(background, 'signPersonalMessage') signPersonalMessageSpy = sinon.stub(background, 'signPersonalMessage')
@ -765,8 +769,8 @@ describe('Actions', function () {
const store = mockStore() const store = mockStore()
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
try { try {
@ -1005,8 +1009,8 @@ describe('Actions', function () {
const store = mockStore() const store = mockStore()
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
await store.dispatch(actions.setSelectedAddress()) await store.dispatch(actions.setSelectedAddress())
@ -1044,8 +1048,8 @@ describe('Actions', function () {
}) })
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
await store.dispatch(actions.showAccountDetail()) await store.dispatch(actions.showAccountDetail())
@ -1426,8 +1430,8 @@ describe('Actions', function () {
const store = mockStore() const store = mockStore()
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
] ]
setCurrentLocaleSpy = sinon.stub(background, 'setCurrentLocale') setCurrentLocaleSpy = sinon.stub(background, 'setCurrentLocale')
setCurrentLocaleSpy.callsFake((_, callback) => { setCurrentLocaleSpy.callsFake((_, callback) => {

View File

@ -121,12 +121,12 @@ export function createNewVaultAndGetSeedPhrase(password) {
try { try {
await createNewVault(password) await createNewVault(password)
const seedWords = await verifySeedPhrase() const seedWords = await verifySeedPhrase()
dispatch(hideLoadingIndication())
return seedWords return seedWords
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw new Error(error.message) throw new Error(error.message)
} finally {
dispatch(hideLoadingIndication())
} }
} }
} }
@ -139,12 +139,12 @@ export function unlockAndGetSeedPhrase(password) {
await submitPassword(password) await submitPassword(password)
const seedWords = await verifySeedPhrase() const seedWords = await verifySeedPhrase()
await forceUpdateMetamaskState(dispatch) await forceUpdateMetamaskState(dispatch)
dispatch(hideLoadingIndication())
return seedWords return seedWords
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw new Error(error.message) throw new Error(error.message)
} finally {
dispatch(hideLoadingIndication())
} }
} }
} }
@ -209,12 +209,12 @@ export function requestRevealSeedWords(password) {
try { try {
await verifyPassword(password) await verifyPassword(password)
const seedWords = await verifySeedPhrase() const seedWords = await verifySeedPhrase()
dispatch(hideLoadingIndication())
return seedWords return seedWords
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw new Error(error.message) throw new Error(error.message)
} finally {
dispatch(hideLoadingIndication())
} }
} }
} }
@ -306,11 +306,12 @@ export function importNewAccount(strategy, args) {
log.debug(`background.getState`) log.debug(`background.getState`)
newState = await promisifiedBackground.getState() newState = await promisifiedBackground.getState()
} catch (err) { } catch (err) {
dispatch(hideLoadingIndication())
dispatch(displayWarning(err.message)) dispatch(displayWarning(err.message))
throw err throw err
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
}
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
if (newState.selectedAddress) { if (newState.selectedAddress) {
dispatch({ dispatch({
@ -335,11 +336,13 @@ export function addNewAccount() {
} catch (error) { } catch (error) {
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw error throw error
} finally {
dispatch(hideLoadingIndication())
} }
const newAccountAddress = Object.keys(newIdentities).find( const newAccountAddress = Object.keys(newIdentities).find(
(address) => !oldIdentities[address], (address) => !oldIdentities[address],
) )
dispatch(hideLoadingIndication())
await forceUpdateMetamaskState(dispatch) await forceUpdateMetamaskState(dispatch)
return newAccountAddress return newAccountAddress
} }
@ -360,9 +363,10 @@ export function checkHardwareStatus(deviceName, hdPath) {
log.error(error) log.error(error)
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw error throw error
} finally {
dispatch(hideLoadingIndication())
} }
dispatch(hideLoadingIndication())
await forceUpdateMetamaskState(dispatch) await forceUpdateMetamaskState(dispatch)
return unlocked return unlocked
} }
@ -378,9 +382,10 @@ export function forgetDevice(deviceName) {
log.error(error) log.error(error)
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw error throw error
} finally {
dispatch(hideLoadingIndication())
} }
dispatch(hideLoadingIndication())
await forceUpdateMetamaskState(dispatch) await forceUpdateMetamaskState(dispatch)
} }
} }
@ -403,10 +408,11 @@ export function connectHardware(deviceName, page, hdPath) {
log.error(error) log.error(error)
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw error throw error
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
await forceUpdateMetamaskState(dispatch) }
await forceUpdateMetamaskState(dispatch)
return accounts return accounts
} }
} }
@ -421,6 +427,7 @@ export function unlockHardwareWalletAccount(index, deviceName, hdPath) {
deviceName, deviceName,
hdPath, hdPath,
(err) => { (err) => {
dispatch(hideLoadingIndication())
if (err) { if (err) {
log.error(err) log.error(err)
dispatch(displayWarning(err.message)) dispatch(displayWarning(err.message))
@ -428,7 +435,6 @@ export function unlockHardwareWalletAccount(index, deviceName, hdPath) {
return return
} }
dispatch(hideLoadingIndication())
resolve() resolve()
}, },
) )
@ -454,12 +460,13 @@ export function setCurrentCurrency(currencyCode) {
try { try {
data = await promisifiedBackground.setCurrentCurrency(currencyCode) data = await promisifiedBackground.setCurrentCurrency(currencyCode)
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
log.error(error.stack) log.error(error.stack)
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
return return
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
}
dispatch({ dispatch({
type: actionConstants.SET_CURRENT_FIAT, type: actionConstants.SET_CURRENT_FIAT,
value: { value: {
@ -480,12 +487,13 @@ export function signMsg(msgData) {
try { try {
newState = await promisifiedBackground.signMessage(msgData) newState = await promisifiedBackground.signMessage(msgData)
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
log.error(error) log.error(error)
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw error throw error
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
}
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(msgData.metamaskId)) dispatch(completedTx(msgData.metamaskId))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -503,12 +511,13 @@ export function signPersonalMsg(msgData) {
try { try {
newState = await promisifiedBackground.signPersonalMessage(msgData) newState = await promisifiedBackground.signPersonalMessage(msgData)
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
log.error(error) log.error(error)
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw error throw error
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
}
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(msgData.metamaskId)) dispatch(completedTx(msgData.metamaskId))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -547,12 +556,13 @@ export function decryptMsg(decryptedMsgData) {
try { try {
newState = await promisifiedBackground.decryptMessage(decryptedMsgData) newState = await promisifiedBackground.decryptMessage(decryptedMsgData)
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
log.error(error) log.error(error)
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw error throw error
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
}
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(decryptedMsgData.metamaskId)) dispatch(completedTx(decryptedMsgData.metamaskId))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -570,12 +580,13 @@ export function encryptionPublicKeyMsg(msgData) {
try { try {
newState = await promisifiedBackground.encryptionPublicKey(msgData) newState = await promisifiedBackground.encryptionPublicKey(msgData)
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
log.error(error) log.error(error)
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw error throw error
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
}
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(msgData.metamaskId)) dispatch(completedTx(msgData.metamaskId))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -593,12 +604,13 @@ export function signTypedMsg(msgData) {
try { try {
newState = await promisifiedBackground.signTypedMessage(msgData) newState = await promisifiedBackground.signTypedMessage(msgData)
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
log.error(error) log.error(error)
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
throw error throw error
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
}
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(msgData.metamaskId)) dispatch(completedTx(msgData.metamaskId))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -788,14 +800,19 @@ export function updateSendEnsResolutionError(errorMessage) {
} }
export function signTokenTx(tokenAddress, toAddress, amount, txData) { export function signTokenTx(tokenAddress, toAddress, amount, txData) {
return (dispatch) => { return async (dispatch) => {
dispatch(showLoadingIndication()) dispatch(showLoadingIndication())
try {
const token = global.eth.contract(abi).at(tokenAddress) const token = global.eth.contract(abi).at(tokenAddress)
token.transfer(toAddress, addHexPrefix(amount), txData).catch((err) => { const txPromise = token.transfer(toAddress, addHexPrefix(amount), txData)
dispatch(hideLoadingIndication())
dispatch(displayWarning(err.message))
})
dispatch(showConfTxPage()) dispatch(showConfTxPage())
dispatch(hideLoadingIndication())
await txPromise
} catch (error) {
dispatch(hideLoadingIndication())
dispatch(displayWarning(error.message))
}
} }
} }
@ -815,30 +832,29 @@ const updateMetamaskStateFromBackground = () => {
} }
export function updateTransaction(txData, dontShowLoadingIndicator) { export function updateTransaction(txData, dontShowLoadingIndicator) {
return (dispatch) => { return async (dispatch) => {
!dontShowLoadingIndicator && dispatch(showLoadingIndication()) !dontShowLoadingIndicator && dispatch(showLoadingIndication())
return new Promise((resolve, reject) => { try {
background.updateTransaction(txData, (err) => { await promisifiedBackground.updateTransaction(txData)
} catch (error) {
dispatch(updateTransactionParams(txData.id, txData.txParams)) dispatch(updateTransactionParams(txData.id, txData.txParams))
if (err) { dispatch(hideLoadingIndication())
dispatch(txError(err)) dispatch(txError(error))
dispatch(goHome()) dispatch(goHome())
log.error(err.message) log.error(error.message)
reject(err) throw error
return
} }
resolve(txData) try {
}) dispatch(updateTransactionParams(txData.id, txData.txParams))
}) const newState = await updateMetamaskStateFromBackground()
.then(() => updateMetamaskStateFromBackground()) dispatch(updateMetamaskState(newState))
.then((newState) => dispatch(updateMetamaskState(newState)))
.then(() => {
dispatch(showConfTxPage({ id: txData.id })) dispatch(showConfTxPage({ id: txData.id }))
dispatch(hideLoadingIndication())
return txData return txData
}) } finally {
dispatch(hideLoadingIndication())
}
} }
} }
@ -950,6 +966,7 @@ export function cancelMsg(msgData) {
} finally { } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
} }
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(msgData.id)) dispatch(completedTx(msgData.id))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -967,6 +984,7 @@ export function cancelPersonalMsg(msgData) {
} finally { } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
} }
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(msgData.id)) dispatch(completedTx(msgData.id))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -984,6 +1002,7 @@ export function cancelDecryptMsg(msgData) {
} finally { } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
} }
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(msgData.id)) dispatch(completedTx(msgData.id))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -1003,6 +1022,7 @@ export function cancelEncryptionPublicKeyMsg(msgData) {
} finally { } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
} }
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(msgData.id)) dispatch(completedTx(msgData.id))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -1020,6 +1040,7 @@ export function cancelTypedMsg(msgData) {
} finally { } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
} }
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(completedTx(msgData.id)) dispatch(completedTx(msgData.id))
dispatch(closeCurrentNotificationWindow()) dispatch(closeCurrentNotificationWindow())
@ -1031,9 +1052,9 @@ export function cancelTx(txData) {
return (dispatch) => { return (dispatch) => {
dispatch(showLoadingIndication()) dispatch(showLoadingIndication())
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
background.cancelTransaction(txData.id, (err) => { background.cancelTransaction(txData.id, (error) => {
if (err) { if (error) {
reject(err) reject(error)
return return
} }
@ -1050,6 +1071,10 @@ export function cancelTx(txData) {
return txData return txData
}) })
.catch((error) => {
dispatch(hideLoadingIndication())
throw error
})
} }
} }
@ -1061,6 +1086,8 @@ export function cancelTx(txData) {
export function cancelTxs(txDataList) { export function cancelTxs(txDataList) {
return async (dispatch) => { return async (dispatch) => {
dispatch(showLoadingIndication()) dispatch(showLoadingIndication())
try {
const txIds = txDataList.map(({ id }) => id) const txIds = txDataList.map(({ id }) => id)
const cancellations = txIds.map( const cancellations = txIds.map(
(id) => (id) =>
@ -1077,6 +1104,7 @@ export function cancelTxs(txDataList) {
) )
await Promise.all(cancellations) await Promise.all(cancellations)
const newState = await updateMetamaskStateFromBackground() const newState = await updateMetamaskStateFromBackground()
dispatch(updateMetamaskState(newState)) dispatch(updateMetamaskState(newState))
dispatch(clearSend()) dispatch(clearSend())
@ -1084,11 +1112,12 @@ export function cancelTxs(txDataList) {
txIds.forEach((id) => { txIds.forEach((id) => {
dispatch(completedTx(id)) dispatch(completedTx(id))
}) })
} finally {
dispatch(hideLoadingIndication())
if (getEnvironmentType() === ENVIRONMENT_TYPE_NOTIFICATION) { if (getEnvironmentType() === ENVIRONMENT_TYPE_NOTIFICATION) {
global.platform.closeCurrentWindow() global.platform.closeCurrentWindow()
} else {
dispatch(hideLoadingIndication())
}
} }
} }
} }
@ -1235,13 +1264,13 @@ export function setSelectedAddress(address) {
try { try {
await _setSelectedAddress(dispatch, address) await _setSelectedAddress(dispatch, address)
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
return return
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
} }
} }
}
export function showAccountDetail(address) { export function showAccountDetail(address) {
return async (dispatch, getState) => { return async (dispatch, getState) => {
@ -1270,11 +1299,12 @@ export function showAccountDetail(address) {
try { try {
await _setSelectedAddress(dispatch, address) await _setSelectedAddress(dispatch, address)
} catch (error) { } catch (error) {
dispatch(hideLoadingIndication())
dispatch(displayWarning(error.message)) dispatch(displayWarning(error.message))
return return
} } finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
}
dispatch({ dispatch({
type: actionConstants.SHOW_ACCOUNT_DETAIL, type: actionConstants.SHOW_ACCOUNT_DETAIL,
value: address, value: address,
@ -2024,15 +2054,15 @@ export function setCompletedOnboarding() {
try { try {
await promisifiedBackground.completeOnboarding() await promisifiedBackground.completeOnboarding()
dispatch(completeOnboarding())
} catch (err) { } catch (err) {
dispatch(displayWarning(err.message)) dispatch(displayWarning(err.message))
throw err throw err
} } finally {
dispatch(completeOnboarding())
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
} }
} }
}
export function completeOnboarding() { export function completeOnboarding() {
return { return {
@ -2179,20 +2209,19 @@ export function setIpfsGateway(val) {
export function updateCurrentLocale(key) { export function updateCurrentLocale(key) {
return async (dispatch) => { return async (dispatch) => {
dispatch(showLoadingIndication()) dispatch(showLoadingIndication())
try {
await loadRelativeTimeFormatLocaleData(key) await loadRelativeTimeFormatLocaleData(key)
return fetchLocale(key).then((localeMessages) => { const localeMessages = await fetchLocale(key)
log.debug(`background.setCurrentLocale`) const textDirection = await promisifiedBackground.setCurrentLocale(key)
background.setCurrentLocale(key, (err, textDirection) => { await switchDirection(textDirection)
if (err) {
dispatch(hideLoadingIndication())
dispatch(displayWarning(err.message))
return
}
switchDirection(textDirection)
dispatch(setCurrentLocale(key, localeMessages)) dispatch(setCurrentLocale(key, localeMessages))
} catch (error) {
dispatch(displayWarning(error.message))
return
} finally {
dispatch(hideLoadingIndication()) dispatch(hideLoadingIndication())
}) }
})
} }
} }