Fix condition for recalculating active tokens

This commit is contained in:
Mikhail Mikheev 2019-09-10 17:31:02 +04:00
parent 4ed4fa56e0
commit e4217ebbaf
2 changed files with 26 additions and 21 deletions

View File

@ -56,7 +56,7 @@ export const removeTokenFromStorage = async (safeAddress: string, token: Token)
export const removeFromActiveTokens = async (safeAddress: string, token: Token) => { export const removeFromActiveTokens = async (safeAddress: string, token: Token) => {
const activeTokens = await getActiveTokens() 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) { if (index !== -1) {
await saveActiveTokens(safeAddress, activeTokens.delete(index)) await saveActiveTokens(safeAddress, activeTokens.delete(index))

View File

@ -1,5 +1,6 @@
// @flow // @flow
import type { Store, AnyAction } from 'redux' import type { Store, AnyAction } from 'redux'
import { List } from 'immutable'
import { ADD_SAFE } from '~/routes/safe/store/actions/addSafe' import { ADD_SAFE } from '~/routes/safe/store/actions/addSafe'
import { UPDATE_SAFE } from '~/routes/safe/store/actions/updateSafe' import { UPDATE_SAFE } from '~/routes/safe/store/actions/updateSafe'
import { REMOVE_SAFE } from '~/routes/safe/store/actions/removeSafe' import { REMOVE_SAFE } from '~/routes/safe/store/actions/removeSafe'
@ -28,6 +29,21 @@ const watchedActions = [
ACTIVATE_TOKEN_FOR_ALL_SAFES, ACTIVATE_TOKEN_FOR_ALL_SAFES,
] ]
const recalculateActiveTokens = (state: GlobalState): void => {
const tokens = tokensSelector(state)
const activeTokenAddresses = getActiveTokensAddressesForAllSafes(state)
const activeTokens: List<Token> = tokens.withMutations((map) => {
map.forEach((token: Token) => {
if (!activeTokenAddresses.has(token.address)) {
map.remove(token.address)
}
})
})
saveActiveTokens(activeTokens)
}
const safeStorageMware = (store: Store<GlobalState>) => (next: Function) => async (action: AnyAction) => { const safeStorageMware = (store: Store<GlobalState>) => (next: Function) => async (action: AnyAction) => {
const handledAction = next(action) const handledAction = next(action)
@ -38,21 +54,7 @@ const safeStorageMware = (store: Store<GlobalState>) => (next: Function) => asyn
switch (action.type) { switch (action.type) {
case ACTIVATE_TOKEN_FOR_ALL_SAFES: { case ACTIVATE_TOKEN_FOR_ALL_SAFES: {
let { activeTokens } = action.payload recalculateActiveTokens(state)
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)
}
break break
} }
case ADD_SAFE: { case ADD_SAFE: {
@ -61,10 +63,13 @@ const safeStorageMware = (store: Store<GlobalState>) => (next: Function) => asyn
break break
} }
case UPDATE_SAFE: { case UPDATE_SAFE: {
const { safeAddress, owners } = action.payload const { safeAddress, owners, activeTokens } = action.payload
if (safeAddress && owners) { if (safeAddress && owners) {
setOwners(safeAddress, owners) setOwners(safeAddress, owners)
} }
if (activeTokens) {
recalculateActiveTokens(state)
}
break break
} }
case REMOVE_SAFE: { case REMOVE_SAFE: {
@ -81,7 +86,7 @@ const safeStorageMware = (store: Store<GlobalState>) => (next: Function) => asyn
case REMOVE_SAFE_OWNER: { case REMOVE_SAFE_OWNER: {
const { safeAddress, ownerAddress } = action.payload const { safeAddress, ownerAddress } = action.payload
const { owners } = safes.get(safeAddress) 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 break
} }
case REPLACE_SAFE_OWNER: { case REPLACE_SAFE_OWNER: {
@ -92,7 +97,7 @@ const safeStorageMware = (store: Store<GlobalState>) => (next: Function) => asyn
setOwners( setOwners(
safeAddress, safeAddress,
owners owners
.filter(o => o.address.toLowerCase() !== oldOwnerAddress.toLowerCase()) .filter((o) => o.address.toLowerCase() !== oldOwnerAddress.toLowerCase())
.push(makeOwner({ address: ownerAddress, name: ownerName })), .push(makeOwner({ address: ownerAddress, name: ownerName })),
) )
break break
@ -100,8 +105,8 @@ const safeStorageMware = (store: Store<GlobalState>) => (next: Function) => asyn
case EDIT_SAFE_OWNER: { case EDIT_SAFE_OWNER: {
const { safeAddress, ownerAddress, ownerName } = action.payload const { safeAddress, ownerAddress, ownerName } = action.payload
const { owners } = safes.get(safeAddress) const { owners } = safes.get(safeAddress)
const ownerToUpdateIndex = owners.findIndex(o => o.address.toLowerCase() === ownerAddress.toLowerCase()) const ownerToUpdateIndex = owners.findIndex((o) => o.address.toLowerCase() === ownerAddress.toLowerCase())
setOwners(safeAddress, owners.update(ownerToUpdateIndex, owner => owner.set('name', ownerName))) setOwners(safeAddress, owners.update(ownerToUpdateIndex, (owner) => owner.set('name', ownerName)))
break break
} }
default: default: