From baa5313d212c33e1e6b2766f00a5904a64123f01 Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Wed, 27 Nov 2019 11:36:46 -0330 Subject: [PATCH] Convert NetworkDropdown component to use JSX (#7562) --- .../app/dropdowns/network-dropdown.js | 501 +++++++++--------- 1 file changed, 257 insertions(+), 244 deletions(-) diff --git a/ui/app/components/app/dropdowns/network-dropdown.js b/ui/app/components/app/dropdowns/network-dropdown.js index d36f10d40..cf56919c4 100644 --- a/ui/app/components/app/dropdowns/network-dropdown.js +++ b/ui/app/components/app/dropdowns/network-dropdown.js @@ -1,6 +1,5 @@ -const Component = require('react').Component -const PropTypes = require('prop-types') -const h = require('react-hyperscript') +import PropTypes from 'prop-types' +import React, {Component} from 'react' const inherits = require('util').inherits const connect = require('react-redux').connect const { withRouter } = require('react-router-dom') @@ -67,10 +66,9 @@ module.exports = compose( // TODO: specify default props and proptypes -NetworkDropdown.prototype.render = function () { - const props = this.props - const { provider: { type: providerType, rpcTarget: activeNetwork }, setNetworksTabAddMode } = props - const rpcListDetail = props.frequentRpcListDetail +NetworkDropdown.prototype.render = function NetworkDropdown () { + const { provider: { type: providerType, rpcTarget: activeNetwork }, setNetworksTabAddMode } = this.props + const rpcListDetail = this.props.frequentRpcListDetail const isOpen = this.props.networkDropdownOpen const dropdownMenuItemStyle = { fontSize: '16px', @@ -78,201 +76,206 @@ NetworkDropdown.prototype.render = function () { padding: '12px 0', } - return h(Dropdown, { - isOpen, - onClickOutside: (event) => { - const { classList } = event.target - const isInClassList = className => classList.contains(className) - const notToggleElementIndex = R.findIndex(isInClassList)(notToggleElementClassnames) + return ( + { + const { classList } = event.target + const isInClassList = className => classList.contains(className) + const notToggleElementIndex = R.findIndex(isInClassList)(notToggleElementClassnames) - if (notToggleElementIndex === -1) { - this.props.hideNetworkDropdown() - } - }, - containerClassName: 'network-droppo', - zIndex: 55, - style: { - position: 'absolute', - top: '58px', - width: '309px', - zIndex: '55px', - }, - innerStyle: { - padding: '18px 8px', - }, - }, [ - - h('div.network-dropdown-header', {}, [ - h('div.network-dropdown-title', {}, this.context.t('networks')), - - h('div.network-dropdown-divider'), - - h('div.network-dropdown-content', - {}, - this.context.t('defaultNetwork') - ), - ]), - - h( - DropdownMenuItem, - { - key: 'main', - closeMenu: () => this.props.hideNetworkDropdown(), - onClick: () => this.handleClick('mainnet'), - style: { ...dropdownMenuItemStyle, borderColor: '#038789' }, - }, - [ - providerType === 'mainnet' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'), - h(NetworkDropdownIcon, { - backgroundColor: '#29B6AF', // $java - isSelected: providerType === 'mainnet', - }), - h('span.network-name-item', { - style: { - color: providerType === 'mainnet' ? '#ffffff' : '#9b9b9b', - }, - }, this.context.t('mainnet')), - ] - ), - - h( - DropdownMenuItem, - { - key: 'ropsten', - closeMenu: () => this.props.hideNetworkDropdown(), - onClick: () => this.handleClick('ropsten'), - style: dropdownMenuItemStyle, - }, - [ - providerType === 'ropsten' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'), - h(NetworkDropdownIcon, { - backgroundColor: '#ff4a8d', // $wild-strawberry - isSelected: providerType === 'ropsten', - }), - h('span.network-name-item', { - style: { - color: providerType === 'ropsten' ? '#ffffff' : '#9b9b9b', - }, - }, this.context.t('ropsten')), - ] - ), - - h( - DropdownMenuItem, - { - key: 'kovan', - closeMenu: () => this.props.hideNetworkDropdown(), - onClick: () => this.handleClick('kovan'), - style: dropdownMenuItemStyle, - }, - [ - providerType === 'kovan' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'), - h(NetworkDropdownIcon, { - backgroundColor: '#7057ff', // $cornflower-blue - isSelected: providerType === 'kovan', - }), - h('span.network-name-item', { - style: { - color: providerType === 'kovan' ? '#ffffff' : '#9b9b9b', - }, - }, this.context.t('kovan')), - ] - ), - - h( - DropdownMenuItem, - { - key: 'rinkeby', - closeMenu: () => this.props.hideNetworkDropdown(), - onClick: () => this.handleClick('rinkeby'), - style: dropdownMenuItemStyle, - }, - [ - providerType === 'rinkeby' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'), - h(NetworkDropdownIcon, { - backgroundColor: '#f6c343', // $saffron - isSelected: providerType === 'rinkeby', - }), - h('span.network-name-item', { - style: { - color: providerType === 'rinkeby' ? '#ffffff' : '#9b9b9b', - }, - }, this.context.t('rinkeby')), - ] - ), - - h( - DropdownMenuItem, - { - key: 'goerli', - closeMenu: () => this.props.hideNetworkDropdown(), - onClick: () => this.handleClick('goerli'), - style: dropdownMenuItemStyle, - }, - [ - providerType === 'goerli' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'), - h(NetworkDropdownIcon, { - backgroundColor: '#3099f2', // $dodger-blue - isSelected: providerType === 'goerli', - }), - h('span.network-name-item', { - style: { - color: providerType === 'goerli' ? '#ffffff' : '#9b9b9b', - }, - }, this.context.t('goerli')), - ] - ), - - h( - DropdownMenuItem, - { - key: 'default', - closeMenu: () => this.props.hideNetworkDropdown(), - onClick: () => this.handleClick('localhost'), - style: dropdownMenuItemStyle, - }, - [ - providerType === 'localhost' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'), - h(NetworkDropdownIcon, { - isSelected: providerType === 'localhost', - innerBorder: '1px solid #9b9b9b', - }), - h('span.network-name-item', { - style: { - color: providerType === 'localhost' ? '#ffffff' : '#9b9b9b', - }, - }, this.context.t('localhost')), - ] - ), - - this.renderCustomOption(props.provider), - this.renderCommonRpc(rpcListDetail, props.provider), - - h( - DropdownMenuItem, - { - closeMenu: () => this.props.hideNetworkDropdown(), - onClick: () => { + if (notToggleElementIndex === -1) { + this.props.hideNetworkDropdown() + } + }} + containerClassName="network-droppo" + zIndex={55} + style={{ + position: 'absolute', + top: '58px', + width: '309px', + zIndex: '55px', + }} + innerStyle={{ + padding: '18px 8px', + }} + > +
+
+ {this.context.t('networks')} +
+
+
+ {this.context.t('defaultNetwork')} +
+
+ this.props.hideNetworkDropdown()} + onClick={() => this.handleClick('mainnet')} + style={{ ...dropdownMenuItemStyle, borderColor: '#038789' }} + > + { + providerType === 'mainnet' + ? + :
+ } + + + {this.context.t('mainnet')} + +
+ this.props.hideNetworkDropdown()} + onClick={() => this.handleClick('ropsten')} + style={dropdownMenuItemStyle} + > + { + providerType === 'ropsten' + ? + :
+ } + + + {this.context.t('ropsten')} + +
+ this.props.hideNetworkDropdown()} + onClick={() => this.handleClick('kovan')} + style={dropdownMenuItemStyle} + > + { + providerType === 'kovan' + ? + :
+ } + + + {this.context.t('kovan')} + +
+ this.props.hideNetworkDropdown()} + onClick={() => this.handleClick('rinkeby')} + style={dropdownMenuItemStyle} + > + { + providerType === 'rinkeby' + ? + :
+ } + + + {this.context.t('rinkeby')} + +
+ this.props.hideNetworkDropdown()} + onClick={() => this.handleClick('goerli')} + style={dropdownMenuItemStyle} + > + { + providerType === 'goerli' + ? + :
+ } + + + {this.context.t('goerli')} + +
+ this.props.hideNetworkDropdown()} + onClick={() => this.handleClick('localhost')} + style={dropdownMenuItemStyle} + > + { + providerType === 'localhost' + ? + :
+ } + + + {this.context.t('localhost')} + +
+ {this.renderCustomOption(this.props.provider)} + {this.renderCommonRpc(rpcListDetail, this.props.provider)} + this.props.hideNetworkDropdown()} + onClick={() => { setNetworksTabAddMode(true) this.props.history.push(NETWORKS_ROUTE) - }, - style: dropdownMenuItemStyle, - }, - [ - activeNetwork === 'custom' ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'), - h(NetworkDropdownIcon, { - isSelected: activeNetwork === 'custom', - innerBorder: '1px solid #9b9b9b', - }), - h('span.network-name-item', { - style: { - color: activeNetwork === 'custom' ? '#ffffff' : '#9b9b9b', - }, - }, this.context.t('customRPC')), - ] - ), - - ]) + }} + style={dropdownMenuItemStyle} + > + { + activeNetwork === 'custom' + ? + :
+ } + + + {this.context.t('customRPC')} + +
+ + ) } NetworkDropdown.prototype.handleClick = function (newProviderType) { @@ -332,43 +335,52 @@ NetworkDropdown.prototype.renderCommonRpc = function (rpcListDetail, provider) { return null } else { const chainId = entry.chainId - return h( - DropdownMenuItem, - { - key: `common${rpc}`, - closeMenu: () => this.props.hideNetworkDropdown(), - onClick: () => props.setRpcTarget(rpc, chainId, ticker, nickname), - style: { + return ( + this.props.hideNetworkDropdown()} + onClick={() => props.setRpcTarget(rpc, chainId, ticker, nickname)} + style={{ fontSize: '16px', lineHeight: '20px', padding: '12px 0', - }, - }, - [ - currentRpcTarget ? h('i.fa.fa-check') : h('.network-check__transparent', '✓'), - h('i.fa.fa-question-circle.fa-med.menu-icon-circle'), - h('span.network-name-item', { - style: { - color: currentRpcTarget ? '#ffffff' : '#9b9b9b', - }, - }, nickname || rpc), - h('i.fa.fa-times.delete', - { - onClick: (e) => { - e.stopPropagation() - props.delRpcTarget(rpc) - }, - }), - ] + }} + > + { + currentRpcTarget + ? + :
+ } + + + {nickname || rpc} + + { + e.stopPropagation() + props.delRpcTarget(rpc) + }} + /> +
) } }) } -NetworkDropdown.prototype.renderCustomOption = function (provider) { +/** + * @return {Component|null} + */ +NetworkDropdown.prototype.renderCustomOption = function NetworkDropdown (provider) { const { rpcTarget, type, ticker, nickname } = provider - const props = this.props - const network = props.network + const network = this.props.network if (type !== 'rpc') { return null @@ -380,27 +392,28 @@ NetworkDropdown.prototype.renderCustomOption = function (provider) { return null default: - return h( - DropdownMenuItem, - { - key: rpcTarget, - onClick: () => props.setRpcTarget(rpcTarget, network, ticker, nickname), - closeMenu: () => this.props.hideNetworkDropdown(), - style: { + return ( + this.props.setRpcTarget(rpcTarget, network, ticker, nickname)} + closeMenu={() => this.props.hideNetworkDropdown()} + style={{ fontSize: '16px', lineHeight: '20px', padding: '12px 0', - }, - }, - [ - h('i.fa.fa-check'), - h('i.fa.fa-question-circle.fa-med.menu-icon-circle'), - h('span.network-name-item', { - style: { + }} + > + + + + {nickname || rpcTarget} + + ) } }