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:
parent
76c4ebac26
commit
b5fc1f9314
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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),
|
||||||
|
@ -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)
|
||||||
|
@ -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}
|
||||||
|
@ -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()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
@ -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'
|
||||||
|
@ -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}`)
|
||||||
|
Loading…
Reference in New Issue
Block a user