diff --git a/src/config/development.js b/src/config/development.js index f09591a8..97867457 100644 --- a/src/config/development.js +++ b/src/config/development.js @@ -6,7 +6,7 @@ import { } from '~/config/names' const devConfig = { - [TX_SERVICE_HOST]: 'https://safe-transaction-service.staging.gnosisdev.com/api/v1/', + [TX_SERVICE_HOST]: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', [SIGNATURES_VIA_METAMASK]: false, [RELAY_API_URL]: 'https://safe-relay.staging.gnosisdev.com/api/v1/', } diff --git a/src/config/production.js b/src/config/production.js index e1d063d4..5a0eab77 100644 --- a/src/config/production.js +++ b/src/config/production.js @@ -6,7 +6,7 @@ import { } from '~/config/names' const prodConfig = { - [TX_SERVICE_HOST]: 'https://safe-transaction-service.staging.gnosisdev.com/api/v1/', + [TX_SERVICE_HOST]: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', [SIGNATURES_VIA_METAMASK]: false, [RELAY_API_URL]: 'https://safe-relay.staging.gnosisdev.com/api/v1/', } diff --git a/src/logic/tokens/utils/tokensStorage.js b/src/logic/tokens/utils/tokensStorage.js index b2b4a3b0..7cd06968 100644 --- a/src/logic/tokens/utils/tokensStorage.js +++ b/src/logic/tokens/utils/tokensStorage.js @@ -56,7 +56,7 @@ export const removeTokenFromStorage = async (safeAddress: string, token: Token) export const removeFromActiveTokens = async (safeAddress: string, token: Token) => { const activeTokens = await getActiveTokens() - const index = activeTokens.findIndex(activeToken => activeToken.name === token.name) + const index = activeTokens.findIndex((activeToken) => activeToken.name === token.name) if (index !== -1) { await saveActiveTokens(safeAddress, activeTokens.delete(index)) diff --git a/src/routes/safe/components/Settings/ManageOwners/index.jsx b/src/routes/safe/components/Settings/ManageOwners/index.jsx index 5ca2f0b4..21aeaa01 100644 --- a/src/routes/safe/components/Settings/ManageOwners/index.jsx +++ b/src/routes/safe/components/Settings/ManageOwners/index.jsx @@ -133,7 +133,7 @@ class ManageOwners extends React.Component { Add, remove and replace owners or rename existing owners. Owner names are only stored locally and never - shared with Gnosis or any third parties + shared with Gnosis or any third parties. { fetchSafe(safeUrl) fetchTokenBalances(safeUrl, activeTokens) + // fetch tokens there to get symbols for tokens in TXs list fetchTokens() @@ -46,10 +47,11 @@ class SafeView extends React.Component { checkForUpdates() { const { - safeUrl, activeTokens, fetchTokenBalances, + safeUrl, activeTokens, fetchTokenBalances, fetchEtherBalance, } = this.props fetchTokenBalances(safeUrl, activeTokens) + fetchEtherBalance(safeUrl) } render() { diff --git a/src/routes/safe/store/actions/fetchEtherBalance.js b/src/routes/safe/store/actions/fetchEtherBalance.js new file mode 100644 index 00000000..47c4a6d5 --- /dev/null +++ b/src/routes/safe/store/actions/fetchEtherBalance.js @@ -0,0 +1,18 @@ +// @flow +import type { Dispatch as ReduxDispatch } from 'redux' +import { type GlobalState } from '~/store/index' +import updateSafe from '~/routes/safe/store/actions/updateSafe' +import { getBalanceInEtherOf } from '~/logic/wallets/getWeb3' + +const fetchEtherBalance = (safeAddress: string) => async (dispatch: ReduxDispatch) => { + try { + const ethBalance = await getBalanceInEtherOf(safeAddress) + + dispatch(updateSafe({ address: safeAddress, ethBalance })) + } catch (err) { + // eslint-disable-next-line + console.error('Error when fetching Ether balance:', err) + } +} + +export default fetchEtherBalance diff --git a/src/routes/safe/store/actions/fetchTokenBalances.js b/src/routes/safe/store/actions/fetchTokenBalances.js index d9dbcd91..26501fbe 100644 --- a/src/routes/safe/store/actions/fetchTokenBalances.js +++ b/src/routes/safe/store/actions/fetchTokenBalances.js @@ -45,7 +45,7 @@ const fetchTokenBalances = (safeAddress: string, tokens: List) => async ( dispatch(updateSafe({ address: safeAddress, balances: List(withBalances) })) } catch (err) { // eslint-disable-next-line - console.error('Error while loading active tokens from storage:', err) + console.error('Error when fetching token balances:', err) } } diff --git a/src/routes/safe/store/middleware/safeStorage.js b/src/routes/safe/store/middleware/safeStorage.js index c26a8837..3a3e8766 100644 --- a/src/routes/safe/store/middleware/safeStorage.js +++ b/src/routes/safe/store/middleware/safeStorage.js @@ -1,5 +1,6 @@ // @flow import type { Store, AnyAction } from 'redux' +import { List } from 'immutable' import { ADD_SAFE } from '~/routes/safe/store/actions/addSafe' import { UPDATE_SAFE } from '~/routes/safe/store/actions/updateSafe' import { REMOVE_SAFE } from '~/routes/safe/store/actions/removeSafe' @@ -28,6 +29,21 @@ const watchedActions = [ ACTIVATE_TOKEN_FOR_ALL_SAFES, ] +const recalculateActiveTokens = (state: GlobalState): void => { + const tokens = tokensSelector(state) + const activeTokenAddresses = getActiveTokensAddressesForAllSafes(state) + + const activeTokens: List = tokens.withMutations((map) => { + map.forEach((token: Token) => { + if (!activeTokenAddresses.has(token.address)) { + map.remove(token.address) + } + }) + }) + + saveActiveTokens(activeTokens) +} + const safeStorageMware = (store: Store) => (next: Function) => async (action: AnyAction) => { const handledAction = next(action) @@ -38,21 +54,7 @@ const safeStorageMware = (store: Store) => (next: Function) => asyn switch (action.type) { case ACTIVATE_TOKEN_FOR_ALL_SAFES: { - let { activeTokens } = action.payload - if (activeTokens) { - const tokens = tokensSelector(state) - const activeTokenAddresses = getActiveTokensAddressesForAllSafes(state) - - activeTokens = tokens.withMutations((map) => { - map.forEach((token: Token) => { - if (!activeTokenAddresses.has(token.address)) { - map.remove(token.address) - } - }) - }) - - saveActiveTokens(activeTokens) - } + recalculateActiveTokens(state) break } case ADD_SAFE: { @@ -61,10 +63,13 @@ const safeStorageMware = (store: Store) => (next: Function) => asyn break } case UPDATE_SAFE: { - const { safeAddress, owners } = action.payload + const { safeAddress, owners, activeTokens } = action.payload if (safeAddress && owners) { setOwners(safeAddress, owners) } + if (activeTokens) { + recalculateActiveTokens(state) + } break } case REMOVE_SAFE: { @@ -81,7 +86,7 @@ const safeStorageMware = (store: Store) => (next: Function) => asyn case REMOVE_SAFE_OWNER: { const { safeAddress, ownerAddress } = action.payload const { owners } = safes.get(safeAddress) - setOwners(safeAddress, owners.filter(o => o.address.toLowerCase() !== ownerAddress.toLowerCase())) + setOwners(safeAddress, owners.filter((o) => o.address.toLowerCase() !== ownerAddress.toLowerCase())) break } case REPLACE_SAFE_OWNER: { @@ -92,7 +97,7 @@ const safeStorageMware = (store: Store) => (next: Function) => asyn setOwners( safeAddress, owners - .filter(o => o.address.toLowerCase() !== oldOwnerAddress.toLowerCase()) + .filter((o) => o.address.toLowerCase() !== oldOwnerAddress.toLowerCase()) .push(makeOwner({ address: ownerAddress, name: ownerName })), ) break @@ -100,8 +105,8 @@ const safeStorageMware = (store: Store) => (next: Function) => asyn case EDIT_SAFE_OWNER: { const { safeAddress, ownerAddress, ownerName } = action.payload const { owners } = safes.get(safeAddress) - const ownerToUpdateIndex = owners.findIndex(o => o.address.toLowerCase() === ownerAddress.toLowerCase()) - setOwners(safeAddress, owners.update(ownerToUpdateIndex, owner => owner.set('name', ownerName))) + const ownerToUpdateIndex = owners.findIndex((o) => o.address.toLowerCase() === ownerAddress.toLowerCase()) + setOwners(safeAddress, owners.update(ownerToUpdateIndex, (owner) => owner.set('name', ownerName))) break } default: