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

improve handling of last selected provider (#10093)

This commit is contained in:
Brad Decker 2021-01-06 17:31:11 -06:00 committed by GitHub
parent 76c4ebac26
commit b5fc1f9314
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 33 additions and 38 deletions

View File

@ -51,9 +51,13 @@ export default class NetworkController extends EventEmitter {
this.providerStore = new ObservableStore( this.providerStore = new ObservableStore(
opts.provider || { ...defaultProviderConfig }, opts.provider || { ...defaultProviderConfig },
) )
this.previousProviderStore = new ObservableStore(
this.providerStore.getState(),
)
this.networkStore = new ObservableStore('loading') this.networkStore = new ObservableStore('loading')
this.store = new ComposedStore({ this.store = new ComposedStore({
provider: this.providerStore, provider: this.providerStore,
previousProviderStore: this.previousProviderStore,
network: this.networkStore, network: this.networkStore,
}) })
@ -188,6 +192,13 @@ export default class NetworkController extends EventEmitter {
* Sets the provider config and switches the network. * Sets the provider config and switches the network.
*/ */
setProviderConfig(config) { setProviderConfig(config) {
this.previousProviderStore.updateState(this.getProviderConfig())
this.providerStore.updateState(config)
this._switchNetwork(config)
}
rollbackToPreviousProvider() {
const config = this.previousProviderStore.getState()
this.providerStore.updateState(config) this.providerStore.updateState(config)
this._switchNetwork(config) this._switchNetwork(config)
} }

View File

@ -579,6 +579,10 @@ export default class MetamaskController extends EventEmitter {
networkController.setProviderType, networkController.setProviderType,
networkController, networkController,
), ),
rollbackToPreviousProvider: nodeify(
networkController.rollbackToPreviousProvider,
networkController,
),
setCustomRpc: nodeify(this.setCustomRpc, this), setCustomRpc: nodeify(this.setCustomRpc, this),
updateAndSetCustomRpc: nodeify(this.updateAndSetCustomRpc, this), updateAndSetCustomRpc: nodeify(this.updateAndSetCustomRpc, this),
delCustomRpc: nodeify(this.delCustomRpc, this), delCustomRpc: nodeify(this.delCustomRpc, this),

View File

@ -40,9 +40,6 @@ function mapDispatchToProps(dispatch) {
setProviderType: (type) => { setProviderType: (type) => {
dispatch(actions.setProviderType(type)) dispatch(actions.setProviderType(type))
}, },
setPreviousProvider: (type) => {
dispatch(actions.setPreviousProvider(type))
},
setRpcTarget: (target, chainId, ticker, nickname) => { setRpcTarget: (target, chainId, ticker, nickname) => {
dispatch(actions.setRpcTarget(target, chainId, ticker, nickname)) dispatch(actions.setRpcTarget(target, chainId, ticker, nickname))
}, },
@ -85,7 +82,6 @@ class NetworkDropdown extends Component {
setRpcTarget: PropTypes.func.isRequired, setRpcTarget: PropTypes.func.isRequired,
hideNetworkDropdown: PropTypes.func.isRequired, hideNetworkDropdown: PropTypes.func.isRequired,
setNetworksTabAddMode: PropTypes.func.isRequired, setNetworksTabAddMode: PropTypes.func.isRequired,
setPreviousProvider: PropTypes.func.isRequired,
setSelectedSettingsRpcUrl: PropTypes.func.isRequired, setSelectedSettingsRpcUrl: PropTypes.func.isRequired,
frequentRpcListDetail: PropTypes.array.isRequired, frequentRpcListDetail: PropTypes.array.isRequired,
networkDropdownOpen: PropTypes.bool.isRequired, networkDropdownOpen: PropTypes.bool.isRequired,
@ -116,10 +112,6 @@ class NetworkDropdown extends Component {
} }
renderCustomRpcList(rpcListDetail, provider) { renderCustomRpcList(rpcListDetail, provider) {
const {
provider: { type: providerType },
setPreviousProvider,
} = this.props
const reversedRpcListDetail = rpcListDetail.slice().reverse() const reversedRpcListDetail = rpcListDetail.slice().reverse()
return reversedRpcListDetail.map((entry) => { return reversedRpcListDetail.map((entry) => {
@ -133,7 +125,6 @@ class NetworkDropdown extends Component {
closeMenu={() => this.props.hideNetworkDropdown()} closeMenu={() => this.props.hideNetworkDropdown()}
onClick={() => { onClick={() => {
if (isPrefixedFormattedHexString(chainId)) { if (isPrefixedFormattedHexString(chainId)) {
setPreviousProvider(providerType)
this.props.setRpcTarget(rpcUrl, chainId, ticker, nickname) this.props.setRpcTarget(rpcUrl, chainId, ticker, nickname)
} else { } else {
this.props.displayInvalidCustomNetworkAlert(nickname || rpcUrl) this.props.displayInvalidCustomNetworkAlert(nickname || rpcUrl)

View File

@ -19,11 +19,8 @@ export default class LoadingNetworkScreen extends PureComponent {
providerId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), providerId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
showNetworkDropdown: PropTypes.func, showNetworkDropdown: PropTypes.func,
setProviderArgs: PropTypes.array, setProviderArgs: PropTypes.array,
lastSelectedProvider: PropTypes.oneOfType([
PropTypes.string,
PropTypes.object,
]),
setProviderType: PropTypes.func, setProviderType: PropTypes.func,
rollbackToPreviousProvider: PropTypes.func,
isLoadingNetwork: PropTypes.bool, isLoadingNetwork: PropTypes.bool,
} }
@ -123,14 +120,14 @@ export default class LoadingNetworkScreen extends PureComponent {
} }
render() { render() {
const { lastSelectedProvider, setProviderType } = this.props const { rollbackToPreviousProvider } = this.props
return ( return (
<LoadingScreen <LoadingScreen
header={ header={
<div <div
className="page-container__header-close" className="page-container__header-close"
onClick={() => setProviderType(lastSelectedProvider || 'ropsten')} onClick={rollbackToPreviousProvider}
/> />
} }
showLoadingSpinner={!this.state.showErrorScreen} showLoadingSpinner={!this.state.showErrorScreen}

View File

@ -4,7 +4,7 @@ import { getNetworkIdentifier } from '../../../selectors'
import LoadingNetworkScreen from './loading-network-screen.component' import LoadingNetworkScreen from './loading-network-screen.component'
const mapStateToProps = (state) => { const mapStateToProps = (state) => {
const { loadingMessage, lastSelectedProvider } = state.appState const { loadingMessage } = state.appState
const { provider, network } = state.metamask const { provider, network } = state.metamask
const { rpcUrl, chainId, ticker, nickname, type } = provider const { rpcUrl, chainId, ticker, nickname, type } = provider
@ -14,7 +14,6 @@ const mapStateToProps = (state) => {
return { return {
isLoadingNetwork: network === 'loading', isLoadingNetwork: network === 'loading',
loadingMessage, loadingMessage,
lastSelectedProvider,
setProviderArgs, setProviderArgs,
provider, provider,
providerId: getNetworkIdentifier(state), providerId: getNetworkIdentifier(state),
@ -26,6 +25,8 @@ const mapDispatchToProps = (dispatch) => {
setProviderType: (type) => { setProviderType: (type) => {
dispatch(actions.setProviderType(type)) dispatch(actions.setProviderType(type))
}, },
rollbackToPreviousProvider: () =>
dispatch(actions.rollbackToPreviousProvider()),
showNetworkDropdown: () => dispatch(actions.showNetworkDropdown()), showNetworkDropdown: () => dispatch(actions.showNetworkDropdown()),
} }
} }

View File

@ -42,7 +42,6 @@ export default function reduceApp(state = {}, action) {
trezor: `m/44'/60'/0'/0`, trezor: `m/44'/60'/0'/0`,
ledger: `m/44'/60'/0'/0/0`, ledger: `m/44'/60'/0'/0/0`,
}, },
lastSelectedProvider: null,
networksTabSelectedRpcUrl: '', networksTabSelectedRpcUrl: '',
networksTabIsInAddMode: false, networksTabIsInAddMode: false,
loadingMethodData: false, loadingMethodData: false,
@ -305,15 +304,6 @@ export default function reduceApp(state = {}, action) {
gasIsLoading: false, gasIsLoading: false,
} }
case actionConstants.SET_PREVIOUS_PROVIDER:
if (action.value === 'loading') {
return appState
}
return {
...appState,
lastSelectedProvider: action.value,
}
case actionConstants.SET_SELECTED_SETTINGS_RPC_URL: case actionConstants.SET_SELECTED_SETTINGS_RPC_URL:
return { return {
...appState, ...appState,

View File

@ -63,7 +63,6 @@ export const UPDATE_SEND_ENS_RESOLUTION_ERROR =
// config screen // config screen
export const SET_RPC_TARGET = 'SET_RPC_TARGET' export const SET_RPC_TARGET = 'SET_RPC_TARGET'
export const SET_PROVIDER_TYPE = 'SET_PROVIDER_TYPE' export const SET_PROVIDER_TYPE = 'SET_PROVIDER_TYPE'
export const SET_PREVIOUS_PROVIDER = 'SET_PREVIOUS_PROVIDER'
export const UPDATE_TOKENS = 'UPDATE_TOKENS' export const UPDATE_TOKENS = 'UPDATE_TOKENS'
export const SET_HARDWARE_WALLET_DEFAULT_HD_PATH = export const SET_HARDWARE_WALLET_DEFAULT_HD_PATH =
'SET_HARDWARE_WALLET_DEFAULT_HD_PATH' 'SET_HARDWARE_WALLET_DEFAULT_HD_PATH'

View File

@ -1553,8 +1553,7 @@ export function createRetryTransaction(txId, customGasPrice, customGasLimit) {
// //
export function setProviderType(type) { export function setProviderType(type) {
return async (dispatch, getState) => { return async (dispatch) => {
const { type: currentProviderType } = getState().metamask.provider
log.debug(`background.setProviderType`, type) log.debug(`background.setProviderType`, type)
try { try {
@ -1564,7 +1563,6 @@ export function setProviderType(type) {
dispatch(displayWarning('Had a problem changing networks!')) dispatch(displayWarning('Had a problem changing networks!'))
return return
} }
dispatch(setPreviousProvider(currentProviderType))
dispatch(updateProviderType(type)) dispatch(updateProviderType(type))
} }
} }
@ -1576,13 +1574,6 @@ export function updateProviderType(type) {
} }
} }
export function setPreviousProvider(type) {
return {
type: actionConstants.SET_PREVIOUS_PROVIDER,
value: type,
}
}
export function updateAndSetCustomRpc( export function updateAndSetCustomRpc(
newRpc, newRpc,
chainId, chainId,
@ -1675,6 +1666,17 @@ export function setRpcTarget(newRpc, chainId, ticker = 'ETH', nickname) {
} }
} }
export function rollbackToPreviousProvider() {
return async (dispatch) => {
try {
await promisifiedBackground.rollbackToPreviousProvider()
} catch (error) {
log.error(error)
dispatch(displayWarning('Had a problem changing networks!'))
}
}
}
export function delRpcTarget(oldRpc) { export function delRpcTarget(oldRpc) {
return (dispatch) => { return (dispatch) => {
log.debug(`background.delRpcTarget: ${oldRpc}`) log.debug(`background.delRpcTarget: ${oldRpc}`)