mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Convert NetworkDropdown component to use JSX (#7562)
This commit is contained in:
parent
f0e5ab6c12
commit
baa5313d21
@ -1,6 +1,5 @@
|
|||||||
const Component = require('react').Component
|
import PropTypes from 'prop-types'
|
||||||
const PropTypes = require('prop-types')
|
import React, {Component} from 'react'
|
||||||
const h = require('react-hyperscript')
|
|
||||||
const inherits = require('util').inherits
|
const inherits = require('util').inherits
|
||||||
const connect = require('react-redux').connect
|
const connect = require('react-redux').connect
|
||||||
const { withRouter } = require('react-router-dom')
|
const { withRouter } = require('react-router-dom')
|
||||||
@ -67,10 +66,9 @@ module.exports = compose(
|
|||||||
|
|
||||||
|
|
||||||
// TODO: specify default props and proptypes
|
// TODO: specify default props and proptypes
|
||||||
NetworkDropdown.prototype.render = function () {
|
NetworkDropdown.prototype.render = function NetworkDropdown () {
|
||||||
const props = this.props
|
const { provider: { type: providerType, rpcTarget: activeNetwork }, setNetworksTabAddMode } = this.props
|
||||||
const { provider: { type: providerType, rpcTarget: activeNetwork }, setNetworksTabAddMode } = props
|
const rpcListDetail = this.props.frequentRpcListDetail
|
||||||
const rpcListDetail = props.frequentRpcListDetail
|
|
||||||
const isOpen = this.props.networkDropdownOpen
|
const isOpen = this.props.networkDropdownOpen
|
||||||
const dropdownMenuItemStyle = {
|
const dropdownMenuItemStyle = {
|
||||||
fontSize: '16px',
|
fontSize: '16px',
|
||||||
@ -78,201 +76,206 @@ NetworkDropdown.prototype.render = function () {
|
|||||||
padding: '12px 0',
|
padding: '12px 0',
|
||||||
}
|
}
|
||||||
|
|
||||||
return h(Dropdown, {
|
return (
|
||||||
isOpen,
|
<Dropdown
|
||||||
onClickOutside: (event) => {
|
isOpen={isOpen}
|
||||||
const { classList } = event.target
|
onClickOutside={(event) => {
|
||||||
const isInClassList = className => classList.contains(className)
|
const { classList } = event.target
|
||||||
const notToggleElementIndex = R.findIndex(isInClassList)(notToggleElementClassnames)
|
const isInClassList = className => classList.contains(className)
|
||||||
|
const notToggleElementIndex = R.findIndex(isInClassList)(notToggleElementClassnames)
|
||||||
|
|
||||||
if (notToggleElementIndex === -1) {
|
if (notToggleElementIndex === -1) {
|
||||||
this.props.hideNetworkDropdown()
|
this.props.hideNetworkDropdown()
|
||||||
}
|
}
|
||||||
},
|
}}
|
||||||
containerClassName: 'network-droppo',
|
containerClassName="network-droppo"
|
||||||
zIndex: 55,
|
zIndex={55}
|
||||||
style: {
|
style={{
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
top: '58px',
|
top: '58px',
|
||||||
width: '309px',
|
width: '309px',
|
||||||
zIndex: '55px',
|
zIndex: '55px',
|
||||||
},
|
}}
|
||||||
innerStyle: {
|
innerStyle={{
|
||||||
padding: '18px 8px',
|
padding: '18px 8px',
|
||||||
},
|
}}
|
||||||
}, [
|
>
|
||||||
|
<div className="network-dropdown-header">
|
||||||
h('div.network-dropdown-header', {}, [
|
<div className="network-dropdown-title">
|
||||||
h('div.network-dropdown-title', {}, this.context.t('networks')),
|
{this.context.t('networks')}
|
||||||
|
</div>
|
||||||
h('div.network-dropdown-divider'),
|
<div className="network-dropdown-divider" />
|
||||||
|
<div className="network-dropdown-content">
|
||||||
h('div.network-dropdown-content',
|
{this.context.t('defaultNetwork')}
|
||||||
{},
|
</div>
|
||||||
this.context.t('defaultNetwork')
|
</div>
|
||||||
),
|
<DropdownMenuItem
|
||||||
]),
|
key="main"
|
||||||
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
h(
|
onClick={() => this.handleClick('mainnet')}
|
||||||
DropdownMenuItem,
|
style={{ ...dropdownMenuItemStyle, borderColor: '#038789' }}
|
||||||
{
|
>
|
||||||
key: 'main',
|
{
|
||||||
closeMenu: () => this.props.hideNetworkDropdown(),
|
providerType === 'mainnet'
|
||||||
onClick: () => this.handleClick('mainnet'),
|
? <i className="fa fa-check" />
|
||||||
style: { ...dropdownMenuItemStyle, borderColor: '#038789' },
|
: <div className="network-check__transparent">✓</div>
|
||||||
},
|
}
|
||||||
[
|
<NetworkDropdownIcon backgroundColor="#29B6AF" isSelected={providerType === 'mainnet'} />
|
||||||
providerType === 'mainnet' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'),
|
<span
|
||||||
h(NetworkDropdownIcon, {
|
className="network-name-item"
|
||||||
backgroundColor: '#29B6AF', // $java
|
style={{
|
||||||
isSelected: providerType === 'mainnet',
|
color: providerType === 'mainnet'
|
||||||
}),
|
? '#ffffff'
|
||||||
h('span.network-name-item', {
|
: '#9b9b9b',
|
||||||
style: {
|
}}
|
||||||
color: providerType === 'mainnet' ? '#ffffff' : '#9b9b9b',
|
>
|
||||||
},
|
{this.context.t('mainnet')}
|
||||||
}, this.context.t('mainnet')),
|
</span>
|
||||||
]
|
</DropdownMenuItem>
|
||||||
),
|
<DropdownMenuItem
|
||||||
|
key="ropsten"
|
||||||
h(
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
DropdownMenuItem,
|
onClick={() => this.handleClick('ropsten')}
|
||||||
{
|
style={dropdownMenuItemStyle}
|
||||||
key: 'ropsten',
|
>
|
||||||
closeMenu: () => this.props.hideNetworkDropdown(),
|
{
|
||||||
onClick: () => this.handleClick('ropsten'),
|
providerType === 'ropsten'
|
||||||
style: dropdownMenuItemStyle,
|
? <i className="fa fa-check" />
|
||||||
},
|
: <div className="network-check__transparent">✓</div>
|
||||||
[
|
}
|
||||||
providerType === 'ropsten' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'),
|
<NetworkDropdownIcon backgroundColor="#ff4a8d" isSelected={providerType === 'ropsten'} />
|
||||||
h(NetworkDropdownIcon, {
|
<span
|
||||||
backgroundColor: '#ff4a8d', // $wild-strawberry
|
className="network-name-item"
|
||||||
isSelected: providerType === 'ropsten',
|
style={{
|
||||||
}),
|
color: providerType === 'ropsten'
|
||||||
h('span.network-name-item', {
|
? '#ffffff'
|
||||||
style: {
|
: '#9b9b9b',
|
||||||
color: providerType === 'ropsten' ? '#ffffff' : '#9b9b9b',
|
}}
|
||||||
},
|
>
|
||||||
}, this.context.t('ropsten')),
|
{this.context.t('ropsten')}
|
||||||
]
|
</span>
|
||||||
),
|
</DropdownMenuItem>
|
||||||
|
<DropdownMenuItem
|
||||||
h(
|
key="kovan"
|
||||||
DropdownMenuItem,
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
{
|
onClick={() => this.handleClick('kovan')}
|
||||||
key: 'kovan',
|
style={dropdownMenuItemStyle}
|
||||||
closeMenu: () => this.props.hideNetworkDropdown(),
|
>
|
||||||
onClick: () => this.handleClick('kovan'),
|
{
|
||||||
style: dropdownMenuItemStyle,
|
providerType === 'kovan'
|
||||||
},
|
? <i className="fa fa-check" />
|
||||||
[
|
: <div className="network-check__transparent">✓</div>
|
||||||
providerType === 'kovan' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'),
|
}
|
||||||
h(NetworkDropdownIcon, {
|
<NetworkDropdownIcon backgroundColor="#7057ff" isSelected={providerType === 'kovan'} />
|
||||||
backgroundColor: '#7057ff', // $cornflower-blue
|
<span
|
||||||
isSelected: providerType === 'kovan',
|
className="network-name-item"
|
||||||
}),
|
style={{
|
||||||
h('span.network-name-item', {
|
color: providerType === 'kovan'
|
||||||
style: {
|
? '#ffffff'
|
||||||
color: providerType === 'kovan' ? '#ffffff' : '#9b9b9b',
|
: '#9b9b9b',
|
||||||
},
|
}}
|
||||||
}, this.context.t('kovan')),
|
>
|
||||||
]
|
{this.context.t('kovan')}
|
||||||
),
|
</span>
|
||||||
|
</DropdownMenuItem>
|
||||||
h(
|
<DropdownMenuItem
|
||||||
DropdownMenuItem,
|
key="rinkeby"
|
||||||
{
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
key: 'rinkeby',
|
onClick={() => this.handleClick('rinkeby')}
|
||||||
closeMenu: () => this.props.hideNetworkDropdown(),
|
style={dropdownMenuItemStyle}
|
||||||
onClick: () => this.handleClick('rinkeby'),
|
>
|
||||||
style: dropdownMenuItemStyle,
|
{
|
||||||
},
|
providerType === 'rinkeby'
|
||||||
[
|
? <i className="fa fa-check" />
|
||||||
providerType === 'rinkeby' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'),
|
: <div className="network-check__transparent">✓</div>
|
||||||
h(NetworkDropdownIcon, {
|
}
|
||||||
backgroundColor: '#f6c343', // $saffron
|
<NetworkDropdownIcon backgroundColor="#f6c343" isSelected={providerType === 'rinkeby'} />
|
||||||
isSelected: providerType === 'rinkeby',
|
<span
|
||||||
}),
|
className="network-name-item"
|
||||||
h('span.network-name-item', {
|
style={{
|
||||||
style: {
|
color: providerType === 'rinkeby'
|
||||||
color: providerType === 'rinkeby' ? '#ffffff' : '#9b9b9b',
|
? '#ffffff'
|
||||||
},
|
: '#9b9b9b',
|
||||||
}, this.context.t('rinkeby')),
|
}}
|
||||||
]
|
>
|
||||||
),
|
{this.context.t('rinkeby')}
|
||||||
|
</span>
|
||||||
h(
|
</DropdownMenuItem>
|
||||||
DropdownMenuItem,
|
<DropdownMenuItem
|
||||||
{
|
key="goerli"
|
||||||
key: 'goerli',
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
closeMenu: () => this.props.hideNetworkDropdown(),
|
onClick={() => this.handleClick('goerli')}
|
||||||
onClick: () => this.handleClick('goerli'),
|
style={dropdownMenuItemStyle}
|
||||||
style: dropdownMenuItemStyle,
|
>
|
||||||
},
|
{
|
||||||
[
|
providerType === 'goerli'
|
||||||
providerType === 'goerli' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'),
|
? <i className="fa fa-check" />
|
||||||
h(NetworkDropdownIcon, {
|
: <div className="network-check__transparent">✓</div>
|
||||||
backgroundColor: '#3099f2', // $dodger-blue
|
}
|
||||||
isSelected: providerType === 'goerli',
|
<NetworkDropdownIcon backgroundColor="#3099f2" isSelected={providerType === 'goerli'} />
|
||||||
}),
|
<span
|
||||||
h('span.network-name-item', {
|
className="network-name-item"
|
||||||
style: {
|
style={{
|
||||||
color: providerType === 'goerli' ? '#ffffff' : '#9b9b9b',
|
color: providerType === 'goerli'
|
||||||
},
|
? '#ffffff'
|
||||||
}, this.context.t('goerli')),
|
: '#9b9b9b',
|
||||||
]
|
}}
|
||||||
),
|
>
|
||||||
|
{this.context.t('goerli')}
|
||||||
h(
|
</span>
|
||||||
DropdownMenuItem,
|
</DropdownMenuItem>
|
||||||
{
|
<DropdownMenuItem
|
||||||
key: 'default',
|
key="default"
|
||||||
closeMenu: () => this.props.hideNetworkDropdown(),
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
onClick: () => this.handleClick('localhost'),
|
onClick={() => this.handleClick('localhost')}
|
||||||
style: dropdownMenuItemStyle,
|
style={dropdownMenuItemStyle}
|
||||||
},
|
>
|
||||||
[
|
{
|
||||||
providerType === 'localhost' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'),
|
providerType === 'localhost'
|
||||||
h(NetworkDropdownIcon, {
|
? <i className="fa fa-check" />
|
||||||
isSelected: providerType === 'localhost',
|
: <div className="network-check__transparent">✓</div>
|
||||||
innerBorder: '1px solid #9b9b9b',
|
}
|
||||||
}),
|
<NetworkDropdownIcon isSelected={providerType === 'localhost'} innerBorder="1px solid #9b9b9b" />
|
||||||
h('span.network-name-item', {
|
<span
|
||||||
style: {
|
className="network-name-item"
|
||||||
color: providerType === 'localhost' ? '#ffffff' : '#9b9b9b',
|
style={{
|
||||||
},
|
color: providerType === 'localhost'
|
||||||
}, this.context.t('localhost')),
|
? '#ffffff'
|
||||||
]
|
: '#9b9b9b',
|
||||||
),
|
}}
|
||||||
|
>
|
||||||
this.renderCustomOption(props.provider),
|
{this.context.t('localhost')}
|
||||||
this.renderCommonRpc(rpcListDetail, props.provider),
|
</span>
|
||||||
|
</DropdownMenuItem>
|
||||||
h(
|
{this.renderCustomOption(this.props.provider)}
|
||||||
DropdownMenuItem,
|
{this.renderCommonRpc(rpcListDetail, this.props.provider)}
|
||||||
{
|
<DropdownMenuItem
|
||||||
closeMenu: () => this.props.hideNetworkDropdown(),
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
onClick: () => {
|
onClick={() => {
|
||||||
setNetworksTabAddMode(true)
|
setNetworksTabAddMode(true)
|
||||||
this.props.history.push(NETWORKS_ROUTE)
|
this.props.history.push(NETWORKS_ROUTE)
|
||||||
},
|
}}
|
||||||
style: dropdownMenuItemStyle,
|
style={dropdownMenuItemStyle}
|
||||||
},
|
>
|
||||||
[
|
{
|
||||||
activeNetwork === 'custom' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'),
|
activeNetwork === 'custom'
|
||||||
h(NetworkDropdownIcon, {
|
? <i className="fa fa-check" />
|
||||||
isSelected: activeNetwork === 'custom',
|
: <div className="network-check__transparent">✓</div>
|
||||||
innerBorder: '1px solid #9b9b9b',
|
}
|
||||||
}),
|
<NetworkDropdownIcon isSelected={activeNetwork === 'custom'} innerBorder="1px solid #9b9b9b" />
|
||||||
h('span.network-name-item', {
|
<span
|
||||||
style: {
|
className="network-name-item"
|
||||||
color: activeNetwork === 'custom' ? '#ffffff' : '#9b9b9b',
|
style={{
|
||||||
},
|
color: activeNetwork === 'custom'
|
||||||
}, this.context.t('customRPC')),
|
? '#ffffff'
|
||||||
]
|
: '#9b9b9b',
|
||||||
),
|
}}
|
||||||
|
>
|
||||||
])
|
{this.context.t('customRPC')}
|
||||||
|
</span>
|
||||||
|
</DropdownMenuItem>
|
||||||
|
</Dropdown>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkDropdown.prototype.handleClick = function (newProviderType) {
|
NetworkDropdown.prototype.handleClick = function (newProviderType) {
|
||||||
@ -332,43 +335,52 @@ NetworkDropdown.prototype.renderCommonRpc = function (rpcListDetail, provider) {
|
|||||||
return null
|
return null
|
||||||
} else {
|
} else {
|
||||||
const chainId = entry.chainId
|
const chainId = entry.chainId
|
||||||
return h(
|
return (
|
||||||
DropdownMenuItem,
|
<DropdownMenuItem
|
||||||
{
|
key={`common${rpc}`}
|
||||||
key: `common${rpc}`,
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
closeMenu: () => this.props.hideNetworkDropdown(),
|
onClick={() => props.setRpcTarget(rpc, chainId, ticker, nickname)}
|
||||||
onClick: () => props.setRpcTarget(rpc, chainId, ticker, nickname),
|
style={{
|
||||||
style: {
|
|
||||||
fontSize: '16px',
|
fontSize: '16px',
|
||||||
lineHeight: '20px',
|
lineHeight: '20px',
|
||||||
padding: '12px 0',
|
padding: '12px 0',
|
||||||
},
|
}}
|
||||||
},
|
>
|
||||||
[
|
{
|
||||||
currentRpcTarget ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'),
|
currentRpcTarget
|
||||||
h('i.fa.fa-question-circle.fa-med.menu-icon-circle'),
|
? <i className="fa fa-check" />
|
||||||
h('span.network-name-item', {
|
: <div className="network-check__transparent">✓</div>
|
||||||
style: {
|
}
|
||||||
color: currentRpcTarget ? '#ffffff' : '#9b9b9b',
|
<i className="fa fa-question-circle fa-med menu-icon-circle" />
|
||||||
},
|
<span
|
||||||
}, nickname || rpc),
|
className="network-name-item"
|
||||||
h('i.fa.fa-times.delete',
|
style={{
|
||||||
{
|
color: currentRpcTarget
|
||||||
onClick: (e) => {
|
? '#ffffff'
|
||||||
e.stopPropagation()
|
: '#9b9b9b',
|
||||||
props.delRpcTarget(rpc)
|
}}
|
||||||
},
|
>
|
||||||
}),
|
{nickname || rpc}
|
||||||
]
|
</span>
|
||||||
|
<i
|
||||||
|
className="fa fa-times delete"
|
||||||
|
onClick={(e) => {
|
||||||
|
e.stopPropagation()
|
||||||
|
props.delRpcTarget(rpc)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</DropdownMenuItem>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkDropdown.prototype.renderCustomOption = function (provider) {
|
/**
|
||||||
|
* @return {Component|null}
|
||||||
|
*/
|
||||||
|
NetworkDropdown.prototype.renderCustomOption = function NetworkDropdown (provider) {
|
||||||
const { rpcTarget, type, ticker, nickname } = provider
|
const { rpcTarget, type, ticker, nickname } = provider
|
||||||
const props = this.props
|
const network = this.props.network
|
||||||
const network = props.network
|
|
||||||
|
|
||||||
if (type !== 'rpc') {
|
if (type !== 'rpc') {
|
||||||
return null
|
return null
|
||||||
@ -380,27 +392,28 @@ NetworkDropdown.prototype.renderCustomOption = function (provider) {
|
|||||||
return null
|
return null
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return h(
|
return (
|
||||||
DropdownMenuItem,
|
<DropdownMenuItem
|
||||||
{
|
key={rpcTarget}
|
||||||
key: rpcTarget,
|
onClick={() => this.props.setRpcTarget(rpcTarget, network, ticker, nickname)}
|
||||||
onClick: () => props.setRpcTarget(rpcTarget, network, ticker, nickname),
|
closeMenu={() => this.props.hideNetworkDropdown()}
|
||||||
closeMenu: () => this.props.hideNetworkDropdown(),
|
style={{
|
||||||
style: {
|
|
||||||
fontSize: '16px',
|
fontSize: '16px',
|
||||||
lineHeight: '20px',
|
lineHeight: '20px',
|
||||||
padding: '12px 0',
|
padding: '12px 0',
|
||||||
},
|
}}
|
||||||
},
|
>
|
||||||
[
|
<i className="fa fa-check" />
|
||||||
h('i.fa.fa-check'),
|
<i className="fa fa-question-circle fa-med menu-icon-circle" />
|
||||||
h('i.fa.fa-question-circle.fa-med.menu-icon-circle'),
|
<span
|
||||||
h('span.network-name-item', {
|
className="network-name-item"
|
||||||
style: {
|
style={{
|
||||||
color: '#ffffff',
|
color: '#ffffff',
|
||||||
},
|
}}
|
||||||
}, nickname || rpcTarget),
|
>
|
||||||
]
|
{nickname || rpcTarget}
|
||||||
|
</span>
|
||||||
|
</DropdownMenuItem>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user