(Feature) Remove automatic load addressbook owners (#1406)
* Remove the auto adding owners when the safe loads * Let the user add "invalid names" in the addressbook and also shows them on the addressbook * Fix update name of safe if addressbook updated * Removes unused addSafe action, replaces it with addOrUpdateSafe Co-authored-by: Daniel Sanchez <daniel.sanchez@gnosis.pm>
This commit is contained in:
parent
5a41c3857d
commit
8d82086f0c
|
@ -7,6 +7,9 @@ import { saveAddressBook } from 'src/logic/addressBook/utils'
|
||||||
import { enhanceSnackbarForAction, getNotificationsFromTxType } from 'src/logic/notifications'
|
import { enhanceSnackbarForAction, getNotificationsFromTxType } from 'src/logic/notifications'
|
||||||
import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar'
|
import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar'
|
||||||
import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions'
|
import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions'
|
||||||
|
import { safesListSelector } from 'src/logic/safe/store/selectors'
|
||||||
|
import { sameAddress } from 'src/logic/wallets/ethAddresses'
|
||||||
|
import updateSafe from 'src/logic/safe/store/actions/updateSafe'
|
||||||
|
|
||||||
const watchedActions = [ADD_ENTRY, REMOVE_ENTRY, UPDATE_ENTRY, ADD_OR_UPDATE_ENTRY]
|
const watchedActions = [ADD_ENTRY, REMOVE_ENTRY, UPDATE_ENTRY, ADD_OR_UPDATE_ENTRY]
|
||||||
|
|
||||||
|
@ -17,6 +20,7 @@ const addressBookMiddleware = (store) => (next) => async (action) => {
|
||||||
const state = store.getState()
|
const state = store.getState()
|
||||||
const { dispatch } = store
|
const { dispatch } = store
|
||||||
const addressBook = addressBookSelector(state)
|
const addressBook = addressBookSelector(state)
|
||||||
|
const safes = safesListSelector(state)
|
||||||
if (addressBook.length) {
|
if (addressBook.length) {
|
||||||
await saveAddressBook(addressBook)
|
await saveAddressBook(addressBook)
|
||||||
}
|
}
|
||||||
|
@ -36,8 +40,13 @@ const addressBookMiddleware = (store) => (next) => async (action) => {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
case UPDATE_ENTRY: {
|
case UPDATE_ENTRY: {
|
||||||
|
const { entry } = action.payload
|
||||||
const notification = getNotificationsFromTxType(TX_NOTIFICATION_TYPES.ADDRESSBOOK_EDIT_ENTRY)
|
const notification = getNotificationsFromTxType(TX_NOTIFICATION_TYPES.ADDRESSBOOK_EDIT_ENTRY)
|
||||||
dispatch(enqueueSnackbar(enhanceSnackbarForAction(notification.afterExecution.noMoreConfirmationsNeeded)))
|
dispatch(enqueueSnackbar(enhanceSnackbarForAction(notification.afterExecution.noMoreConfirmationsNeeded)))
|
||||||
|
const safeFound = safes.find((safe) => sameAddress(safe.address, entry.address))
|
||||||
|
if (safeFound) {
|
||||||
|
dispatch(updateSafe({ address: safeFound.address, name: entry.name }))
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -29,9 +29,7 @@ export default handleActions(
|
||||||
|
|
||||||
const entryFound = state.find((oldEntry) => oldEntry.address === entry.address)
|
const entryFound = state.find((oldEntry) => oldEntry.address === entry.address)
|
||||||
|
|
||||||
// Only adds entries with valid names
|
if (!entryFound) {
|
||||||
const validName = getValidAddressBookName(entry.name)
|
|
||||||
if (!entryFound && validName) {
|
|
||||||
state.push(entry)
|
state.push(entry)
|
||||||
}
|
}
|
||||||
return state
|
return state
|
||||||
|
|
|
@ -1,9 +1,18 @@
|
||||||
import { createAction } from 'redux-actions'
|
import { createAction } from 'redux-actions'
|
||||||
|
|
||||||
import { SafeRecordProps } from '../models/safe'
|
import { SafeOwner, SafeRecordProps } from '../models/safe'
|
||||||
|
import { List } from 'immutable'
|
||||||
|
import { makeOwner } from '../models/owner'
|
||||||
|
|
||||||
export const ADD_OR_UPDATE_SAFE = 'ADD_OR_UPDATE_SAFE'
|
export const ADD_OR_UPDATE_SAFE = 'ADD_OR_UPDATE_SAFE'
|
||||||
|
|
||||||
export const addOrUpdateSafe = createAction(ADD_OR_UPDATE_SAFE, (safe: SafeRecordProps) => ({
|
export const buildOwnersFrom = (names: string[], addresses: string[]): List<SafeOwner> => {
|
||||||
|
const owners = names.map((name, index) => makeOwner({ name, address: addresses[index] }))
|
||||||
|
|
||||||
|
return List(owners)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const addOrUpdateSafe = createAction(ADD_OR_UPDATE_SAFE, (safe: SafeRecordProps, loadedFromStorage = false) => ({
|
||||||
safe,
|
safe,
|
||||||
|
loadedFromStorage,
|
||||||
}))
|
}))
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
import { List } from 'immutable'
|
|
||||||
import { createAction } from 'redux-actions'
|
|
||||||
|
|
||||||
import setDefaultSafe from 'src/logic/safe/store/actions/setDefaultSafe'
|
|
||||||
import { makeOwner } from 'src/logic/safe/store/models/owner'
|
|
||||||
|
|
||||||
import { safesListSelector } from 'src/logic/safe/store/selectors'
|
|
||||||
|
|
||||||
import { Dispatch } from 'redux'
|
|
||||||
import { AppReduxState } from 'src/store'
|
|
||||||
import { SafeOwner, SafeRecordProps } from 'src/logic/safe/store/models/safe'
|
|
||||||
|
|
||||||
export const ADD_SAFE = 'ADD_SAFE'
|
|
||||||
|
|
||||||
export const buildOwnersFrom = (names: string[], addresses: string[]): List<SafeOwner> => {
|
|
||||||
const owners = names.map((name, index) => makeOwner({ name, address: addresses[index] }))
|
|
||||||
|
|
||||||
return List(owners)
|
|
||||||
}
|
|
||||||
|
|
||||||
export const addSafe = createAction(ADD_SAFE, (safe: SafeRecordProps, loadedFromStorage = false) => ({
|
|
||||||
safe,
|
|
||||||
loadedFromStorage,
|
|
||||||
}))
|
|
||||||
|
|
||||||
const saveSafe = (safe: SafeRecordProps) => (dispatch: Dispatch, getState: () => AppReduxState): void => {
|
|
||||||
const state = getState()
|
|
||||||
const safeList = safesListSelector(state)
|
|
||||||
|
|
||||||
dispatch(addSafe(safe, true))
|
|
||||||
|
|
||||||
if (safeList.size === 0) {
|
|
||||||
dispatch(setDefaultSafe(safe.address))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default saveSafe
|
|
|
@ -5,7 +5,7 @@ import { SafeRecordProps } from 'src/logic/safe/store/models/safe'
|
||||||
import { buildSafe } from 'src/logic/safe/store/reducer/safe'
|
import { buildSafe } from 'src/logic/safe/store/reducer/safe'
|
||||||
import { loadFromStorage } from 'src/utils/storage'
|
import { loadFromStorage } from 'src/utils/storage'
|
||||||
|
|
||||||
import { addSafe } from './addSafe'
|
import { addOrUpdateSafe } from './addOrUpdateSafe'
|
||||||
|
|
||||||
const loadSafesFromStorage = () => async (dispatch: Dispatch): Promise<void> => {
|
const loadSafesFromStorage = () => async (dispatch: Dispatch): Promise<void> => {
|
||||||
try {
|
try {
|
||||||
|
@ -13,7 +13,7 @@ const loadSafesFromStorage = () => async (dispatch: Dispatch): Promise<void> =>
|
||||||
|
|
||||||
if (safes) {
|
if (safes) {
|
||||||
Object.values(safes).forEach((safeProps) => {
|
Object.values(safes).forEach((safeProps) => {
|
||||||
dispatch(addSafe(buildSafe(safeProps), true))
|
dispatch(addOrUpdateSafe(buildSafe(safeProps), true))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
@ -10,7 +10,6 @@ import { userAccountSelector } from 'src/logic/wallets/store/selectors'
|
||||||
import { getIncomingTxAmount } from 'src/routes/safe/components/Transactions/TxsTable/columns'
|
import { getIncomingTxAmount } from 'src/routes/safe/components/Transactions/TxsTable/columns'
|
||||||
import { grantedSelector } from 'src/routes/safe/container/selector'
|
import { grantedSelector } from 'src/routes/safe/container/selector'
|
||||||
import { ADD_INCOMING_TRANSACTIONS } from 'src/logic/safe/store/actions/addIncomingTransactions'
|
import { ADD_INCOMING_TRANSACTIONS } from 'src/logic/safe/store/actions/addIncomingTransactions'
|
||||||
import { ADD_SAFE } from 'src/logic/safe/store/actions/addSafe'
|
|
||||||
import { ADD_OR_UPDATE_TRANSACTIONS } from 'src/logic/safe/store/actions/transactions/addOrUpdateTransactions'
|
import { ADD_OR_UPDATE_TRANSACTIONS } from 'src/logic/safe/store/actions/transactions/addOrUpdateTransactions'
|
||||||
import updateSafe from 'src/logic/safe/store/actions/updateSafe'
|
import updateSafe from 'src/logic/safe/store/actions/updateSafe'
|
||||||
import {
|
import {
|
||||||
|
@ -20,8 +19,9 @@ import {
|
||||||
} from 'src/logic/safe/store/selectors'
|
} from 'src/logic/safe/store/selectors'
|
||||||
|
|
||||||
import { loadFromStorage, saveToStorage } from 'src/utils/storage'
|
import { loadFromStorage, saveToStorage } from 'src/utils/storage'
|
||||||
|
import { ADD_OR_UPDATE_SAFE } from '../actions/addOrUpdateSafe'
|
||||||
|
|
||||||
const watchedActions = [ADD_OR_UPDATE_TRANSACTIONS, ADD_INCOMING_TRANSACTIONS, ADD_SAFE]
|
const watchedActions = [ADD_OR_UPDATE_TRANSACTIONS, ADD_INCOMING_TRANSACTIONS, ADD_OR_UPDATE_SAFE]
|
||||||
|
|
||||||
const sendAwaitingTransactionNotification = async (
|
const sendAwaitingTransactionNotification = async (
|
||||||
dispatch,
|
dispatch,
|
||||||
|
@ -146,7 +146,7 @@ const notificationsMiddleware = (store) => (next) => async (action) => {
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
case ADD_SAFE: {
|
case ADD_OR_UPDATE_SAFE: {
|
||||||
const state = store.getState()
|
const state = store.getState()
|
||||||
const { safe } = action.payload
|
const { safe } = action.payload
|
||||||
const currentSafeAddress = safeParamAddressFromStateSelector(state) || safe.address
|
const currentSafeAddress = safeParamAddressFromStateSelector(state) || safe.address
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
import { addAddressBookEntry } from 'src/logic/addressBook/store/actions/addAddressBookEntry'
|
|
||||||
import { saveDefaultSafe, saveSafes } from 'src/logic/safe/utils'
|
import { saveDefaultSafe, saveSafes } from 'src/logic/safe/utils'
|
||||||
import { tokensSelector } from 'src/logic/tokens/store/selectors'
|
import { tokensSelector } from 'src/logic/tokens/store/selectors'
|
||||||
import { saveActiveTokens } from 'src/logic/tokens/utils/tokensStorage'
|
import { saveActiveTokens } from 'src/logic/tokens/utils/tokensStorage'
|
||||||
import { ACTIVATE_TOKEN_FOR_ALL_SAFES } from 'src/logic/safe/store/actions/activateTokenForAllSafes'
|
import { ACTIVATE_TOKEN_FOR_ALL_SAFES } from 'src/logic/safe/store/actions/activateTokenForAllSafes'
|
||||||
import { ADD_SAFE } from 'src/logic/safe/store/actions/addSafe'
|
|
||||||
import { ADD_SAFE_OWNER } from 'src/logic/safe/store/actions/addSafeOwner'
|
import { ADD_SAFE_OWNER } from 'src/logic/safe/store/actions/addSafeOwner'
|
||||||
import { EDIT_SAFE_OWNER } from 'src/logic/safe/store/actions/editSafeOwner'
|
import { EDIT_SAFE_OWNER } from 'src/logic/safe/store/actions/editSafeOwner'
|
||||||
import { REMOVE_SAFE } from 'src/logic/safe/store/actions/removeSafe'
|
import { REMOVE_SAFE } from 'src/logic/safe/store/actions/removeSafe'
|
||||||
|
@ -14,17 +12,13 @@ import { UPDATE_SAFE } from 'src/logic/safe/store/actions/updateSafe'
|
||||||
import { UPDATE_TOKENS_LIST } from 'src/logic/safe/store/actions/updateTokensList'
|
import { UPDATE_TOKENS_LIST } from 'src/logic/safe/store/actions/updateTokensList'
|
||||||
import { UPDATE_ASSETS_LIST } from 'src/logic/safe/store/actions/updateAssetsList'
|
import { UPDATE_ASSETS_LIST } from 'src/logic/safe/store/actions/updateAssetsList'
|
||||||
import { getActiveTokensAddressesForAllSafes, safesMapSelector } from 'src/logic/safe/store/selectors'
|
import { getActiveTokensAddressesForAllSafes, safesMapSelector } from 'src/logic/safe/store/selectors'
|
||||||
import { checksumAddress } from 'src/utils/checksumAddress'
|
|
||||||
import { makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook'
|
|
||||||
import { addOrUpdateAddressBookEntry } from 'src/logic/addressBook/store/actions/addOrUpdateAddressBookEntry'
|
|
||||||
import { checkIfEntryWasDeletedFromAddressBook, isValidAddressBookName } from 'src/logic/addressBook/utils'
|
|
||||||
import { addressBookSelector } from 'src/logic/addressBook/store/selectors'
|
|
||||||
import { sameAddress } from 'src/logic/wallets/ethAddresses'
|
|
||||||
import { updateAddressBookEntry } from 'src/logic/addressBook/store/actions/updateAddressBookEntry'
|
|
||||||
import { ADD_OR_UPDATE_SAFE } from 'src/logic/safe/store/actions/addOrUpdateSafe'
|
import { ADD_OR_UPDATE_SAFE } from 'src/logic/safe/store/actions/addOrUpdateSafe'
|
||||||
|
import { makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook'
|
||||||
|
import { checksumAddress } from 'src/utils/checksumAddress'
|
||||||
|
import { isValidAddressBookName } from 'src/logic/addressBook/utils'
|
||||||
|
import { addOrUpdateAddressBookEntry } from 'src/logic/addressBook/store/actions/addOrUpdateAddressBookEntry'
|
||||||
|
|
||||||
const watchedActions = [
|
const watchedActions = [
|
||||||
ADD_SAFE,
|
|
||||||
UPDATE_SAFE,
|
UPDATE_SAFE,
|
||||||
REMOVE_SAFE,
|
REMOVE_SAFE,
|
||||||
ADD_OR_UPDATE_SAFE,
|
ADD_OR_UPDATE_SAFE,
|
||||||
|
@ -60,7 +54,6 @@ const safeStorageMware = (store) => (next) => async (action) => {
|
||||||
const state = store.getState()
|
const state = store.getState()
|
||||||
const { dispatch } = store
|
const { dispatch } = store
|
||||||
const safes = safesMapSelector(state)
|
const safes = safesMapSelector(state)
|
||||||
const addressBook = addressBookSelector(state)
|
|
||||||
await saveSafes(safes.toJSON())
|
await saveSafes(safes.toJSON())
|
||||||
|
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
|
@ -68,43 +61,6 @@ const safeStorageMware = (store) => (next) => async (action) => {
|
||||||
recalculateActiveTokens(state)
|
recalculateActiveTokens(state)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
case ADD_SAFE: {
|
|
||||||
const { safe, loadedFromStorage } = action.payload
|
|
||||||
const safeAlreadyLoaded =
|
|
||||||
loadedFromStorage || safes.find((safeIterator) => sameAddress(safeIterator.address, safe.address))
|
|
||||||
|
|
||||||
safe.owners.forEach((owner) => {
|
|
||||||
const checksumEntry = makeAddressBookEntry({ address: checksumAddress(owner.address), name: owner.name })
|
|
||||||
|
|
||||||
const ownerWasAlreadyInAddressBook = checkIfEntryWasDeletedFromAddressBook(
|
|
||||||
checksumEntry,
|
|
||||||
addressBook,
|
|
||||||
safeAlreadyLoaded,
|
|
||||||
)
|
|
||||||
|
|
||||||
if (!ownerWasAlreadyInAddressBook) {
|
|
||||||
dispatch(addAddressBookEntry(checksumEntry, { notifyEntryUpdate: false }))
|
|
||||||
}
|
|
||||||
const addressAlreadyExists = addressBook.find((entry) => sameAddress(entry.address, checksumEntry.address))
|
|
||||||
if (isValidAddressBookName(checksumEntry.name) && addressAlreadyExists) {
|
|
||||||
dispatch(updateAddressBookEntry(checksumEntry))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const safeWasAlreadyInAddressBook = checkIfEntryWasDeletedFromAddressBook(
|
|
||||||
{ address: safe.address, name: safe.name },
|
|
||||||
addressBook,
|
|
||||||
safeAlreadyLoaded,
|
|
||||||
)
|
|
||||||
|
|
||||||
if (!safeWasAlreadyInAddressBook) {
|
|
||||||
dispatch(
|
|
||||||
addAddressBookEntry(makeAddressBookEntry({ address: safe.address, name: safe.name }), {
|
|
||||||
notifyEntryUpdate: true,
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
case ADD_OR_UPDATE_SAFE: {
|
case ADD_OR_UPDATE_SAFE: {
|
||||||
const { safe } = action.payload
|
const { safe } = action.payload
|
||||||
safe.owners.forEach((owner) => {
|
safe.owners.forEach((owner) => {
|
||||||
|
|
|
@ -2,7 +2,6 @@ import { Map, Set, List } from 'immutable'
|
||||||
import { handleActions } from 'redux-actions'
|
import { handleActions } from 'redux-actions'
|
||||||
|
|
||||||
import { ACTIVATE_TOKEN_FOR_ALL_SAFES } from 'src/logic/safe/store/actions/activateTokenForAllSafes'
|
import { ACTIVATE_TOKEN_FOR_ALL_SAFES } from 'src/logic/safe/store/actions/activateTokenForAllSafes'
|
||||||
import { ADD_SAFE, buildOwnersFrom } from 'src/logic/safe/store/actions/addSafe'
|
|
||||||
import { ADD_SAFE_OWNER } from 'src/logic/safe/store/actions/addSafeOwner'
|
import { ADD_SAFE_OWNER } from 'src/logic/safe/store/actions/addSafeOwner'
|
||||||
import { EDIT_SAFE_OWNER } from 'src/logic/safe/store/actions/editSafeOwner'
|
import { EDIT_SAFE_OWNER } from 'src/logic/safe/store/actions/editSafeOwner'
|
||||||
import { REMOVE_SAFE } from 'src/logic/safe/store/actions/removeSafe'
|
import { REMOVE_SAFE } from 'src/logic/safe/store/actions/removeSafe'
|
||||||
|
@ -17,7 +16,7 @@ import { makeOwner } from 'src/logic/safe/store/models/owner'
|
||||||
import makeSafe, { SafeRecordProps } from 'src/logic/safe/store/models/safe'
|
import makeSafe, { SafeRecordProps } from 'src/logic/safe/store/models/safe'
|
||||||
import { checksumAddress } from 'src/utils/checksumAddress'
|
import { checksumAddress } from 'src/utils/checksumAddress'
|
||||||
import { SafeReducerMap } from 'src/routes/safe/store/reducer/types/safe'
|
import { SafeReducerMap } from 'src/routes/safe/store/reducer/types/safe'
|
||||||
import { ADD_OR_UPDATE_SAFE } from 'src/logic/safe/store/actions/addOrUpdateSafe'
|
import { ADD_OR_UPDATE_SAFE, buildOwnersFrom } from 'src/logic/safe/store/actions/addOrUpdateSafe'
|
||||||
import { sameAddress } from 'src/logic/wallets/ethAddresses'
|
import { sameAddress } from 'src/logic/wallets/ethAddresses'
|
||||||
|
|
||||||
export const SAFE_REDUCER_ID = 'safes'
|
export const SAFE_REDUCER_ID = 'safes'
|
||||||
|
@ -99,19 +98,7 @@ export default handleActions(
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
[ADD_SAFE]: (state: SafeReducerMap, action) => {
|
|
||||||
const { safe } = action.payload
|
|
||||||
|
|
||||||
// if you add a new Safe it needs to be set as a record
|
|
||||||
// in case of update it shouldn't, because a record would be initialized
|
|
||||||
// with initial props and it would overwrite existing ones
|
|
||||||
|
|
||||||
if (state.hasIn(['safes', safe.address])) {
|
|
||||||
return state
|
|
||||||
}
|
|
||||||
|
|
||||||
return state.setIn(['safes', safe.address], makeSafe(safe))
|
|
||||||
},
|
|
||||||
[ADD_OR_UPDATE_SAFE]: (state: SafeReducerMap, action) => {
|
[ADD_OR_UPDATE_SAFE]: (state: SafeReducerMap, action) => {
|
||||||
const { safe } = action.payload
|
const { safe } = action.payload
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,6 @@ import { addressBookQueryParamsSelector, safesListSelector } from 'src/logic/saf
|
||||||
import { checksumAddress } from 'src/utils/checksumAddress'
|
import { checksumAddress } from 'src/utils/checksumAddress'
|
||||||
import { grantedSelector } from 'src/routes/safe/container/selector'
|
import { grantedSelector } from 'src/routes/safe/container/selector'
|
||||||
import { useAnalytics, SAFE_NAVIGATION_EVENT } from 'src/utils/googleAnalytics'
|
import { useAnalytics, SAFE_NAVIGATION_EVENT } from 'src/utils/googleAnalytics'
|
||||||
import { getValidAddressBookName } from 'src/logic/addressBook/utils'
|
|
||||||
|
|
||||||
const useStyles = makeStyles(styles)
|
const useStyles = makeStyles(styles)
|
||||||
|
|
||||||
|
@ -167,7 +166,7 @@ const AddressBookTable = (): React.ReactElement => {
|
||||||
{column.id === AB_ADDRESS_ID ? (
|
{column.id === AB_ADDRESS_ID ? (
|
||||||
<OwnerAddressTableCell address={row[column.id]} showLinks />
|
<OwnerAddressTableCell address={row[column.id]} showLinks />
|
||||||
) : (
|
) : (
|
||||||
getValidAddressBookName(row[column.id])
|
row[column.id]
|
||||||
)}
|
)}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import makeSafe from 'src/logic/safe/store/models/safe'
|
import makeSafe from 'src/logic/safe/store/models/safe'
|
||||||
import { buildOwnersFrom } from 'src/logic/safe/store/actions/addSafe'
|
import { buildOwnersFrom } from 'src/logic/safe/store/actions/addOrUpdateSafe'
|
||||||
import {
|
import {
|
||||||
FIELD_NAME,
|
FIELD_NAME,
|
||||||
FIELD_CONFIRMATIONS,
|
FIELD_CONFIRMATIONS,
|
||||||
|
|
Loading…
Reference in New Issue