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

Add custom hd path option (#9367)

* Add custom hd path option

* Update selectPathHelp locale message

Co-authored-by: Erik Marks <rekmarks@protonmail.com>
This commit is contained in:
Patryk Łucka 2020-11-07 01:17:16 +01:00 committed by GitHub
parent 128efc5b52
commit f30d261e69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 77 additions and 14 deletions

View File

@ -1425,7 +1425,7 @@
"message": "Select Locale"
},
"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": {
"message": "Select Type"

View File

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

View File

@ -196,6 +196,17 @@
margin: 0 auto 20px;
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 {