Make it such that users can switch between Ledger accounts without first switching back to an injected provider

This commit is contained in:
Fabio Berger
2018-01-29 12:10:49 +01:00
parent 45fdfc2d3d
commit af08177f79
3 changed files with 12 additions and 9 deletions

View File

@@ -190,8 +190,10 @@ export class Blockchain {
}
// Cache injected provider so that we can switch the user back to it easily
this._cachedProvider = this._web3Wrapper.getProviderObj();
this._cachedProviderNetworkId = this.networkId;
if (_.isUndefined(this._cachedProvider)) {
this._cachedProvider = this._web3Wrapper.getProviderObj();
this._cachedProviderNetworkId = this.networkId;
}
this._userAddress = '';
this._dispatcher.updateUserAddress(''); // Clear old userAddress

View File

@@ -265,7 +265,10 @@ export class LedgerConfigDialog extends React.Component<LedgerConfigDialogProps,
return false;
}
if (this.props.providerType !== ProviderType.Ledger) {
if (
this.props.providerType !== ProviderType.Ledger ||
(this.props.providerType === ProviderType.Ledger && this.props.networkId !== this.state.preferredNetworkId)
) {
await this.props.blockchain.updateProviderToLedgerAsync(this.state.preferredNetworkId);
}

View File

@@ -37,17 +37,15 @@ export class ProviderPicker extends React.Component<ProviderPickerProps, Provide
// Show dropdown with two options
return (
<div style={{ width: 225, overflow: 'hidden' }}>
<RadioButtonGroup
name="provider"
defaultSelected={this.props.providerType}
onChange={this._onProviderRadioChanged.bind(this)}
>
<RadioButtonGroup name="provider" defaultSelected={this.props.providerType}>
<RadioButton
onClick={this._onProviderRadioChanged.bind(this, ProviderType.Injected)}
style={{ ...menuStyle, backgroundColor: !isLedgerSelected && colors.grey50 }}
value={ProviderType.Injected}
label={this._renderLabel(this.props.injectedProviderName, !isLedgerSelected)}
/>
<RadioButton
onClick={this._onProviderRadioChanged.bind(this, ProviderType.Ledger)}
style={{ ...menuStyle, backgroundColor: isLedgerSelected && colors.grey50 }}
value={ProviderType.Ledger}
label={this._renderLabel('Ledger Nano S', isLedgerSelected)}
@@ -80,7 +78,7 @@ export class ProviderPicker extends React.Component<ProviderPickerProps, Provide
</div>
);
}
private _onProviderRadioChanged(e: any, value: string) {
private _onProviderRadioChanged(value: string) {
if (value === ProviderType.Ledger) {
this.props.onToggleLedgerDialog();
} else {