Added Confirmation Modal for Delete Network (#6776)

feature/default_network_editable
Akshit Kr Nagpal 5 years ago committed by Whymarrh Whitby
parent 9fd8a3d46e
commit 687984a938
  1. 6
      app/_locales/en/messages.json
  2. 9
      test/e2e/beta/metamask-beta-ui.spec.js
  3. 43
      ui/app/components/app/modals/confirm-delete-network/confirm-delete-network.component.js
  4. 16
      ui/app/components/app/modals/confirm-delete-network/confirm-delete-network.container.js
  5. 1
      ui/app/components/app/modals/confirm-delete-network/index.js
  6. 14
      ui/app/components/app/modals/modal.js
  7. 14
      ui/app/pages/settings/networks-tab/network-form/network-form.component.js
  8. 6
      ui/app/pages/settings/networks-tab/networks-tab.component.js
  9. 6
      ui/app/pages/settings/networks-tab/networks-tab.container.js
  10. 16
      ui/app/store/actions.js

@ -1208,6 +1208,12 @@
"resetAccountDescription": { "resetAccountDescription": {
"message": "Resetting your account will clear your transaction history." "message": "Resetting your account will clear your transaction history."
}, },
"deleteNetwork": {
"message": "Delete Network?"
},
"deleteNetworkDescription": {
"message": "Are you sure you want to delete this network?"
},
"restoreFromSeed": { "restoreFromSeed": {
"message": "Restore account?" "message": "Restore account?"
}, },

@ -1522,6 +1522,15 @@ describe('MetaMask', function () {
const deleteButton = await findElement(driver, By.css('.btn-danger')) const deleteButton = await findElement(driver, By.css('.btn-danger'))
await deleteButton.click() await deleteButton.click()
await delay(regularDelayMs) await delay(regularDelayMs)
const confirmDeleteNetworkModal = await findElement(driver, By.css('span .modal'))
const byConfirmDeleteNetworkButton = By.css('.button.btn-danger.modal-container__footer-button')
const confirmDeleteNetworkButton = await driver.wait(until.elementLocated(byConfirmDeleteNetworkButton))
await confirmDeleteNetworkButton.click()
await driver.wait(until.stalenessOf(confirmDeleteNetworkModal))
const newNetworkListItems = await findElements(driver, By.css('.networks-tab__networks-list-name')) const newNetworkListItems = await findElements(driver, By.css('.networks-tab__networks-list-name'))
assert.equal(networkListItems.length - 1, newNetworkListItems.length) assert.equal(networkListItems.length - 1, newNetworkListItems.length)

@ -0,0 +1,43 @@
import React, { PureComponent } from 'react'
import PropTypes from 'prop-types'
import Modal, { ModalContent } from '../../modal'
export default class ConfirmDeleteNetwork extends PureComponent {
static propTypes = {
hideModal: PropTypes.func.isRequired,
delRpcTarget: PropTypes.func.isRequired,
onConfirm: PropTypes.func.isRequired,
target: PropTypes.string.isRequired,
}
static contextTypes = {
t: PropTypes.func,
}
handleDelete = () => {
this.props.delRpcTarget(this.props.target)
.then(() => {
this.props.onConfirm()
this.props.hideModal()
})
}
render () {
const { t } = this.context
return (
<Modal
onSubmit={this.handleDelete}
onCancel={() => this.props.hideModal()}
submitText={t('delete')}
cancelText={t('cancel')}
submitType="danger"
>
<ModalContent
title={t('deleteNetwork')}
description={t('deleteNetworkDescription')}
/>
</Modal>
)
}
}

@ -0,0 +1,16 @@
import { connect } from 'react-redux'
import { compose } from 'recompose'
import withModalProps from '../../../../helpers/higher-order-components/with-modal-props'
import ConfirmDeleteNetwork from './confirm-delete-network.component'
import { delRpcTarget } from '../../../../store/actions'
const mapDispatchToProps = dispatch => {
return {
delRpcTarget: (target) => dispatch(delRpcTarget(target)),
}
}
export default compose(
withModalProps,
connect(null, mapDispatchToProps)
)(ConfirmDeleteNetwork)

@ -0,0 +1 @@
export { default } from './confirm-delete-network.container'

@ -29,6 +29,7 @@ import MetaMetricsOptInModal from './metametrics-opt-in-modal'
import RejectTransactions from './reject-transactions' import RejectTransactions from './reject-transactions'
import ClearApprovedOrigins from './clear-approved-origins' import ClearApprovedOrigins from './clear-approved-origins'
import ConfirmCustomizeGasModal from '../gas-customization/gas-modal-page-container' import ConfirmCustomizeGasModal from '../gas-customization/gas-modal-page-container'
import ConfirmDeleteNetwork from './confirm-delete-network'
const modalContainerBaseStyle = { const modalContainerBaseStyle = {
transform: 'translate3d(-50%, 0, 0px)', transform: 'translate3d(-50%, 0, 0px)',
@ -301,6 +302,19 @@ const MODALS = {
}, },
}, },
CONFIRM_DELETE_NETWORK: {
contents: h(ConfirmDeleteNetwork),
mobileModalStyle: {
...modalContainerMobileStyle,
},
laptopModalStyle: {
...modalContainerLaptopStyle,
},
contentStyle: {
borderRadius: '8px',
},
},
NEW_ACCOUNT: { NEW_ACCOUNT: {
contents: [ contents: [
h(NewAccountModal, {}, []), h(NewAccountModal, {}, []),

@ -12,7 +12,7 @@ export default class NetworkForm extends PureComponent {
static propTypes = { static propTypes = {
editRpc: PropTypes.func.isRequired, editRpc: PropTypes.func.isRequired,
delRpcTarget: PropTypes.func.isRequired, showConfirmDeleteNetworkModal: PropTypes.func.isRequired,
rpcUrl: PropTypes.string, rpcUrl: PropTypes.string,
chainId: PropTypes.string, chainId: PropTypes.string,
ticker: PropTypes.string, ticker: PropTypes.string,
@ -131,10 +131,14 @@ export default class NetworkForm extends PureComponent {
} }
onDelete = () => { onDelete = () => {
const { delRpcTarget, rpcUrl, onClear } = this.props const { showConfirmDeleteNetworkModal, rpcUrl, onClear } = this.props
delRpcTarget(rpcUrl) showConfirmDeleteNetworkModal({
this.resetForm() target: rpcUrl,
onClear() onConfirm: () => {
this.resetForm()
onClear()
},
})
} }
stateIsUnchanged () { stateIsUnchanged () {

@ -25,7 +25,7 @@ export default class NetworksTab extends PureComponent {
setNetworksTabAddMode: PropTypes.func.isRequired, setNetworksTabAddMode: PropTypes.func.isRequired,
setRpcTarget: PropTypes.func.isRequired, setRpcTarget: PropTypes.func.isRequired,
setSelectedSettingsRpcUrl: PropTypes.func.isRequired, setSelectedSettingsRpcUrl: PropTypes.func.isRequired,
delRpcTarget: PropTypes.func.isRequired, showConfirmDeleteNetworkModal: PropTypes.func.isRequired,
providerUrl: PropTypes.string, providerUrl: PropTypes.string,
providerType: PropTypes.string, providerType: PropTypes.string,
networkDefaultedToProvider: PropTypes.bool, networkDefaultedToProvider: PropTypes.bool,
@ -160,7 +160,7 @@ export default class NetworksTab extends PureComponent {
const { t } = this.context const { t } = this.context
const { const {
setRpcTarget, setRpcTarget,
delRpcTarget, showConfirmDeleteNetworkModal,
setSelectedSettingsRpcUrl, setSelectedSettingsRpcUrl,
setNetworksTabAddMode, setNetworksTabAddMode,
selectedNetwork: { selectedNetwork: {
@ -199,7 +199,7 @@ export default class NetworksTab extends PureComponent {
setNetworksTabAddMode(false) setNetworksTabAddMode(false)
setSelectedSettingsRpcUrl(null) setSelectedSettingsRpcUrl(null)
}} }}
delRpcTarget={delRpcTarget} showConfirmDeleteNetworkModal={showConfirmDeleteNetworkModal}
viewOnly={viewOnly} viewOnly={viewOnly}
isCurrentRpcTarget={providerUrl === rpcUrl} isCurrentRpcTarget={providerUrl === rpcUrl}
networksTabIsInAddMode={networksTabIsInAddMode} networksTabIsInAddMode={networksTabIsInAddMode}

@ -8,7 +8,7 @@ import {
displayWarning, displayWarning,
setNetworksTabAddMode, setNetworksTabAddMode,
editRpc, editRpc,
delRpcTarget, showModal,
} from '../../../store/actions' } from '../../../store/actions'
import { defaultNetworksData } from './networks-tab.constants' import { defaultNetworksData } from './networks-tab.constants'
const defaultNetworks = defaultNetworksData.map(network => ({ ...network, viewOnly: true })) const defaultNetworks = defaultNetworksData.map(network => ({ ...network, viewOnly: true }))
@ -64,8 +64,8 @@ const mapDispatchToProps = dispatch => {
setRpcTarget: (newRpc, chainId, ticker, nickname, rpcPrefs) => { setRpcTarget: (newRpc, chainId, ticker, nickname, rpcPrefs) => {
dispatch(updateAndSetCustomRpc(newRpc, chainId, ticker, nickname, rpcPrefs)) dispatch(updateAndSetCustomRpc(newRpc, chainId, ticker, nickname, rpcPrefs))
}, },
delRpcTarget: (target) => { showConfirmDeleteNetworkModal: ({ target, onConfirm }) => {
dispatch(delRpcTarget(target)) return dispatch(showModal({ name: 'CONFIRM_DELETE_NETWORK', target, onConfirm }))
}, },
displayWarning: warning => dispatch(displayWarning(warning)), displayWarning: warning => dispatch(displayWarning(warning)),
setNetworksTabAddMode: isInAddMode => dispatch(setNetworksTabAddMode(isInAddMode)), setNetworksTabAddMode: isInAddMode => dispatch(setNetworksTabAddMode(isInAddMode)),

@ -2037,12 +2037,16 @@ function setRpcTarget (newRpc, chainId, ticker = 'ETH', nickname) {
function delRpcTarget (oldRpc) { function delRpcTarget (oldRpc) {
return (dispatch) => { return (dispatch) => {
log.debug(`background.delRpcTarget: ${oldRpc}`) log.debug(`background.delRpcTarget: ${oldRpc}`)
background.delCustomRpc(oldRpc, (err) => { return new Promise((resolve, reject) => {
if (err) { background.delCustomRpc(oldRpc, (err) => {
log.error(err) if (err) {
return dispatch(self.displayWarning('Had a problem removing network!')) log.error(err)
} dispatch(self.displayWarning('Had a problem removing network!'))
dispatch(actions.setSelectedToken()) return reject(err)
}
dispatch(actions.setSelectedToken())
resolve()
})
}) })
} }
} }

Loading…
Cancel
Save