mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Convert account import components to ES6 classes (#7791)
Co-authored-by: Mark Stacey <markjstacey@gmail.com>
This commit is contained in:
parent
f850a17f63
commit
b9757f5563
@ -1,5 +1,4 @@
|
||||
import React, { Component } from 'react'
|
||||
import { inherits } from 'util'
|
||||
import PropTypes from 'prop-types'
|
||||
import Select from 'react-select'
|
||||
|
||||
@ -8,86 +7,79 @@ import JsonImportView from './json.js'
|
||||
|
||||
import PrivateKeyImportView from './private-key.js'
|
||||
|
||||
export default class AccountImportSubview extends Component {
|
||||
static contextTypes = {
|
||||
t: PropTypes.func,
|
||||
}
|
||||
|
||||
AccountImportSubview.contextTypes = {
|
||||
t: PropTypes.func,
|
||||
}
|
||||
state = {}
|
||||
|
||||
export default AccountImportSubview
|
||||
getMenuItemTexts () {
|
||||
return [
|
||||
this.context.t('privateKey'),
|
||||
this.context.t('jsonFile'),
|
||||
]
|
||||
}
|
||||
|
||||
renderImportView () {
|
||||
const { type } = this.state
|
||||
const menuItems = this.getMenuItemTexts()
|
||||
const current = type || menuItems[0]
|
||||
|
||||
inherits(AccountImportSubview, Component)
|
||||
function AccountImportSubview () {
|
||||
Component.call(this)
|
||||
}
|
||||
switch (current) {
|
||||
case this.context.t('privateKey'):
|
||||
return <PrivateKeyImportView />
|
||||
case this.context.t('jsonFile'):
|
||||
return <JsonImportView />
|
||||
default:
|
||||
return <JsonImportView />
|
||||
}
|
||||
}
|
||||
|
||||
AccountImportSubview.prototype.getMenuItemTexts = function () {
|
||||
return [
|
||||
this.context.t('privateKey'),
|
||||
this.context.t('jsonFile'),
|
||||
]
|
||||
}
|
||||
render () {
|
||||
const menuItems = this.getMenuItemTexts()
|
||||
const { type } = this.state
|
||||
|
||||
AccountImportSubview.prototype.render = function () {
|
||||
const state = this.state || {}
|
||||
const menuItems = this.getMenuItemTexts()
|
||||
const { type } = state
|
||||
|
||||
return (
|
||||
<div className="new-account-import-form">
|
||||
<div className="new-account-import-disclaimer">
|
||||
<span>{this.context.t('importAccountMsg')}</span>
|
||||
<span
|
||||
style={{
|
||||
cursor: 'pointer',
|
||||
textDecoration: 'underline',
|
||||
}}
|
||||
onClick={() => {
|
||||
global.platform.openWindow({
|
||||
url: 'https://metamask.zendesk.com/hc/en-us/articles/360015289932',
|
||||
})
|
||||
}}
|
||||
>
|
||||
{this.context.t('here')}
|
||||
</span>
|
||||
</div>
|
||||
<div className="new-account-import-form__select-section">
|
||||
<div className="new-account-import-form__select-label">
|
||||
{this.context.t('selectType')}
|
||||
return (
|
||||
<div className="new-account-import-form">
|
||||
<div className="new-account-import-disclaimer">
|
||||
<span>{this.context.t('importAccountMsg')}</span>
|
||||
<span
|
||||
style={{
|
||||
cursor: 'pointer',
|
||||
textDecoration: 'underline',
|
||||
}}
|
||||
onClick={() => {
|
||||
global.platform.openWindow({
|
||||
url: 'https://metamask.zendesk.com/hc/en-us/articles/360015289932',
|
||||
})
|
||||
}}
|
||||
>
|
||||
{this.context.t('here')}
|
||||
</span>
|
||||
</div>
|
||||
<Select
|
||||
className="new-account-import-form__select"
|
||||
name="import-type-select"
|
||||
clearable={false}
|
||||
value={type || menuItems[0]}
|
||||
options={menuItems.map((type) => {
|
||||
return {
|
||||
value: type,
|
||||
label: type,
|
||||
}
|
||||
})}
|
||||
onChange={(opt) => {
|
||||
this.setState({ type: opt.value })
|
||||
}}
|
||||
/>
|
||||
<div className="new-account-import-form__select-section">
|
||||
<div className="new-account-import-form__select-label">
|
||||
{this.context.t('selectType')}
|
||||
</div>
|
||||
<Select
|
||||
className="new-account-import-form__select"
|
||||
name="import-type-select"
|
||||
clearable={false}
|
||||
value={type || menuItems[0]}
|
||||
options={menuItems.map((type) => {
|
||||
return {
|
||||
value: type,
|
||||
label: type,
|
||||
}
|
||||
})}
|
||||
onChange={(opt) => {
|
||||
this.setState({ type: opt.value })
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
{this.renderImportView()}
|
||||
</div>
|
||||
{this.renderImportView()}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
AccountImportSubview.prototype.renderImportView = function () {
|
||||
const state = this.state || {}
|
||||
const { type } = state
|
||||
const menuItems = this.getMenuItemTexts()
|
||||
const current = type || menuItems[0]
|
||||
|
||||
switch (current) {
|
||||
case this.context.t('privateKey'):
|
||||
return <PrivateKeyImportView />
|
||||
case this.context.t('jsonFile'):
|
||||
return <JsonImportView />
|
||||
default:
|
||||
return <JsonImportView />
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import React, { Component } from 'react'
|
||||
import { inherits } from 'util'
|
||||
import { withRouter } from 'react-router-dom'
|
||||
import { compose } from 'recompose'
|
||||
import PropTypes from 'prop-types'
|
||||
@ -9,9 +8,106 @@ import { DEFAULT_ROUTE } from '../../../helpers/constants/routes'
|
||||
import { getMetaMaskAccounts } from '../../../selectors/selectors'
|
||||
import Button from '../../../components/ui/button'
|
||||
|
||||
PrivateKeyImportView.contextTypes = {
|
||||
t: PropTypes.func,
|
||||
metricsEvent: PropTypes.func,
|
||||
class PrivateKeyImportView extends Component {
|
||||
static contextTypes = {
|
||||
t: PropTypes.func,
|
||||
metricsEvent: PropTypes.func,
|
||||
}
|
||||
|
||||
static propTypes = {
|
||||
importNewAccount: PropTypes.func.isRequired,
|
||||
history: PropTypes.object.isRequired,
|
||||
displayWarning: PropTypes.func.isRequired,
|
||||
setSelectedAddress: PropTypes.func.isRequired,
|
||||
firstAddress: PropTypes.string.isRequired,
|
||||
error: PropTypes.node,
|
||||
}
|
||||
|
||||
|
||||
createNewKeychain () {
|
||||
const input = document.getElementById('private-key-box')
|
||||
const privateKey = input.value
|
||||
const { importNewAccount, history, displayWarning, setSelectedAddress, firstAddress } = this.props
|
||||
|
||||
importNewAccount('Private Key', [ privateKey ])
|
||||
.then(({ selectedAddress }) => {
|
||||
if (selectedAddress) {
|
||||
this.context.metricsEvent({
|
||||
eventOpts: {
|
||||
category: 'Accounts',
|
||||
action: 'Import Account',
|
||||
name: 'Imported Account with Private Key',
|
||||
},
|
||||
})
|
||||
history.push(DEFAULT_ROUTE)
|
||||
displayWarning(null)
|
||||
} else {
|
||||
displayWarning('Error importing account.')
|
||||
this.context.metricsEvent({
|
||||
eventOpts: {
|
||||
category: 'Accounts',
|
||||
action: 'Import Account',
|
||||
name: 'Error importing with Private Key',
|
||||
},
|
||||
})
|
||||
setSelectedAddress(firstAddress)
|
||||
}
|
||||
})
|
||||
.catch(err => err && displayWarning(err.message || err))
|
||||
}
|
||||
|
||||
createKeyringOnEnter = (event) => {
|
||||
if (event.key === 'Enter') {
|
||||
event.preventDefault()
|
||||
this.createNewKeychain()
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
const { error, displayWarning } = this.props
|
||||
|
||||
return (
|
||||
<div className="new-account-import-form__private-key">
|
||||
<span className="new-account-create-form__instruction">
|
||||
{this.context.t('pastePrivateKey')}
|
||||
</span>
|
||||
<div className="new-account-import-form__private-key-password-container">
|
||||
<input
|
||||
className="new-account-import-form__input-password"
|
||||
type="password"
|
||||
id="private-key-box"
|
||||
onKeyPress={e => this.createKeyringOnEnter(e)}
|
||||
/>
|
||||
</div>
|
||||
<div className="new-account-import-form__buttons">
|
||||
<Button
|
||||
type="default"
|
||||
large
|
||||
className="new-account-create-form__button"
|
||||
onClick={() => {
|
||||
displayWarning(null)
|
||||
this.props.history.push(DEFAULT_ROUTE)
|
||||
}}
|
||||
>
|
||||
{this.context.t('cancel')}
|
||||
</Button>
|
||||
<Button
|
||||
type="secondary"
|
||||
large
|
||||
className="new-account-create-form__button"
|
||||
onClick={() => this.createNewKeychain()}
|
||||
>
|
||||
{this.context.t('import')}
|
||||
</Button>
|
||||
</div>
|
||||
{
|
||||
error
|
||||
? <span className="error">{error}</span>
|
||||
: null
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default compose(
|
||||
@ -36,94 +132,3 @@ function mapDispatchToProps (dispatch) {
|
||||
setSelectedAddress: (address) => dispatch(actions.setSelectedAddress(address)),
|
||||
}
|
||||
}
|
||||
|
||||
inherits(PrivateKeyImportView, Component)
|
||||
function PrivateKeyImportView () {
|
||||
this.createKeyringOnEnter = this.createKeyringOnEnter.bind(this)
|
||||
Component.call(this)
|
||||
}
|
||||
|
||||
PrivateKeyImportView.prototype.render = function PrivateKeyImportView () {
|
||||
const { error, displayWarning } = this.props
|
||||
|
||||
return (
|
||||
<div className="new-account-import-form__private-key">
|
||||
<span className="new-account-create-form__instruction">
|
||||
{this.context.t('pastePrivateKey')}
|
||||
</span>
|
||||
<div className="new-account-import-form__private-key-password-container">
|
||||
<input
|
||||
className="new-account-import-form__input-password"
|
||||
type="password"
|
||||
id="private-key-box"
|
||||
onKeyPress={e => this.createKeyringOnEnter(e)}
|
||||
/>
|
||||
</div>
|
||||
<div className="new-account-import-form__buttons">
|
||||
<Button
|
||||
type="default"
|
||||
large
|
||||
className="new-account-create-form__button"
|
||||
onClick={() => {
|
||||
displayWarning(null)
|
||||
this.props.history.push(DEFAULT_ROUTE)
|
||||
}}
|
||||
>
|
||||
{this.context.t('cancel')}
|
||||
</Button>
|
||||
<Button
|
||||
type="secondary"
|
||||
large
|
||||
className="new-account-create-form__button"
|
||||
onClick={() => this.createNewKeychain()}
|
||||
>
|
||||
{this.context.t('import')}
|
||||
</Button>
|
||||
</div>
|
||||
{
|
||||
error
|
||||
? <span className="error">{error}</span>
|
||||
: null
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
PrivateKeyImportView.prototype.createKeyringOnEnter = function (event) {
|
||||
if (event.key === 'Enter') {
|
||||
event.preventDefault()
|
||||
this.createNewKeychain()
|
||||
}
|
||||
}
|
||||
|
||||
PrivateKeyImportView.prototype.createNewKeychain = function () {
|
||||
const input = document.getElementById('private-key-box')
|
||||
const privateKey = input.value
|
||||
const { importNewAccount, history, displayWarning, setSelectedAddress, firstAddress } = this.props
|
||||
|
||||
importNewAccount('Private Key', [ privateKey ])
|
||||
.then(({ selectedAddress }) => {
|
||||
if (selectedAddress) {
|
||||
this.context.metricsEvent({
|
||||
eventOpts: {
|
||||
category: 'Accounts',
|
||||
action: 'Import Account',
|
||||
name: 'Imported Account with Private Key',
|
||||
},
|
||||
})
|
||||
history.push(DEFAULT_ROUTE)
|
||||
displayWarning(null)
|
||||
} else {
|
||||
displayWarning('Error importing account.')
|
||||
this.context.metricsEvent({
|
||||
eventOpts: {
|
||||
category: 'Accounts',
|
||||
action: 'Import Account',
|
||||
name: 'Error importing with Private Key',
|
||||
},
|
||||
})
|
||||
setSelectedAddress(firstAddress)
|
||||
}
|
||||
})
|
||||
.catch(err => err && displayWarning(err.message || err))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user