Add custom hd path option (#9367)

* Add custom hd path option

* Update selectPathHelp locale message

Co-authored-by: Erik Marks <rekmarks@protonmail.com>
feature/default_network_editable
Patryk Łucka 4 years ago committed by GitHub
parent 128efc5b52
commit f30d261e69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      app/_locales/en/messages.json
  2. 78
      ui/app/pages/create-account/connect-hardware/account-list.js
  3. 11
      ui/app/pages/create-account/connect-hardware/index.scss

@ -1425,7 +1425,7 @@
"message": "Select Locale" "message": "Select Locale"
}, },
"selectPathHelp": { "selectPathHelp": {
"message": "If you don't see your existing Ledger accounts below, try switching paths to \"Legacy (MEW / MyCrypto)\"" "message": "If you don't see your existing Ledger accounts below, try a different HD path."
}, },
"selectType": { "selectType": {
"message": "Select Type" "message": "Select Type"

@ -5,6 +5,13 @@ import getAccountLink from '../../../../lib/account-link'
import Button from '../../../components/ui/button' import Button from '../../../components/ui/button'
class AccountList extends Component { class AccountList extends Component {
state = {
showCustomInput: false,
customPathSelected: false,
}
inputRef = React.createRef()
getHdPaths() { getHdPaths() {
return [ return [
{ {
@ -15,6 +22,10 @@ class AccountList extends Component {
label: `Legacy (MEW / MyCrypto)`, label: `Legacy (MEW / MyCrypto)`,
value: `m/44'/60'/0'`, value: `m/44'/60'/0'`,
}, },
{
label: `Custom`,
value: `custom`,
},
] ]
} }
@ -32,6 +43,7 @@ class AccountList extends Component {
} }
renderHdPathSelector() { renderHdPathSelector() {
const { showCustomInput } = this.state
const { onPathChange, selectedPath } = this.props const { onPathChange, selectedPath } = this.props
const options = this.getHdPaths() const options = this.getHdPaths()
@ -46,13 +58,19 @@ class AccountList extends Component {
className="hw-connect__hdPath__select" className="hw-connect__hdPath__select"
name="hd-path-select" name="hd-path-select"
clearable={false} clearable={false}
value={selectedPath} value={showCustomInput ? 'custom' : selectedPath}
options={options} options={options}
onChange={(opt) => { onChange={(opt) => {
onPathChange(opt.value) if (opt.value === 'custom') {
this.setState({ showCustomInput: true })
} else {
this.setState({ showCustomInput: false })
onPathChange(opt.value)
}
}} }}
/> />
</div> </div>
{showCustomInput && this.renderCustomInput()}
</div> </div>
) )
} }
@ -61,6 +79,22 @@ class AccountList extends Component {
return device.slice(0, 1).toUpperCase() + device.slice(1) return device.slice(0, 1).toUpperCase() + device.slice(1)
} }
renderCustomInput() {
const hdPaths = this.getHdPaths()
return (
<input
className="hw-connect__custom-input"
type="text"
defaultValue={hdPaths[0].value}
onChange={() => {
this.setState({ customPathSelected: false })
}}
ref={this.inputRef}
autoFocus
/>
)
}
renderHeader() { renderHeader() {
const { device } = this.props const { device } = this.props
return ( return (
@ -143,6 +177,9 @@ class AccountList extends Component {
} }
renderButtons() { renderButtons() {
const { showCustomInput, customPathSelected } = this.state
const { onPathChange } = this.props
const showSelectButton = showCustomInput && !customPathSelected
const disabled = this.props.selectedAccount === null const disabled = this.props.selectedAccount === null
const buttonProps = {} const buttonProps = {}
if (disabled) { if (disabled) {
@ -159,15 +196,29 @@ class AccountList extends Component {
> >
{this.context.t('cancel')} {this.context.t('cancel')}
</Button> </Button>
<Button {showSelectButton ? (
type="primary" <Button
large type="primary"
className="new-external-account-form__button unlock" large
disabled={disabled} className="new-external-account-form__button unlock"
onClick={this.props.onUnlockAccount.bind(this, this.props.device)} onClick={() => {
> onPathChange(this.inputRef.current.value)
{this.context.t('unlock')} this.setState({ customPathSelected: true })
</Button> }}
>
{this.context.t('selectHdPath')}
</Button>
) : (
<Button
type="primary"
large
className="new-external-account-form__button unlock"
disabled={disabled}
onClick={this.props.onUnlockAccount.bind(this, this.props.device)}
>
{this.context.t('unlock')}
</Button>
)}
</div> </div>
) )
} }
@ -183,11 +234,12 @@ class AccountList extends Component {
} }
render() { render() {
const { showCustomInput, customPathSelected } = this.state
return ( return (
<div className="new-external-account-form account-list"> <div className="new-external-account-form account-list">
{this.renderHeader()} {this.renderHeader()}
{this.renderAccounts()} {(!showCustomInput || customPathSelected) && this.renderAccounts()}
{this.renderPagination()} {(!showCustomInput || customPathSelected) && this.renderPagination()}
{this.renderButtons()} {this.renderButtons()}
{this.renderForgetDevice()} {this.renderForgetDevice()}
</div> </div>

@ -196,6 +196,17 @@
margin: 0 auto 20px; margin: 0 auto 20px;
display: flex; display: flex;
} }
&__custom-input {
height: 54px;
width: 335px;
border: 1px solid $geyser;
border-radius: 4px;
background-color: $white;
color: $scorpion;
font-size: 16px;
padding: 0 20px;
}
} }
.hw-account-list { .hw-account-list {

Loading…
Cancel
Save