import React, { PureComponent } from 'react' import PropTypes from 'prop-types' import classnames from 'classnames' import { NETWORK_TYPE_RPC } from '../../../../../shared/constants/network' import Button from '../../../components/ui/button' import LockIcon from '../../../components/ui/lock-icon' import { NETWORKS_ROUTE, NETWORKS_FORM_ROUTE, } from '../../../helpers/constants/routes' import ColorIndicator from '../../../components/ui/color-indicator' import { COLORS } from '../../../helpers/constants/design-system' import NetworkForm from './network-form' export default class NetworksTab extends PureComponent { static contextTypes = { t: PropTypes.func.isRequired, metricsEvent: PropTypes.func.isRequired, } static propTypes = { editRpc: PropTypes.func.isRequired, location: PropTypes.object.isRequired, networkIsSelected: PropTypes.bool, networksTabIsInAddMode: PropTypes.bool, networksToRender: PropTypes.arrayOf(PropTypes.object).isRequired, selectedNetwork: PropTypes.object, setNetworksTabAddMode: PropTypes.func.isRequired, setRpcTarget: PropTypes.func.isRequired, setSelectedSettingsRpcUrl: PropTypes.func.isRequired, showConfirmDeleteNetworkModal: PropTypes.func.isRequired, providerUrl: PropTypes.string, providerType: PropTypes.string, networkDefaultedToProvider: PropTypes.bool, history: PropTypes.object.isRequired, shouldRenderNetworkForm: PropTypes.bool.isRequired, isFullScreen: PropTypes.bool.isRequired, } componentWillUnmount() { this.props.setSelectedSettingsRpcUrl('') } isCurrentPath(pathname) { return this.props.location.pathname === pathname } renderSubHeader() { const { setSelectedSettingsRpcUrl, setNetworksTabAddMode } = this.props return (
{this.context.t('networks')}
) } renderNetworkListItem(network, selectRpcUrl) { const { setSelectedSettingsRpcUrl, setNetworksTabAddMode, networkIsSelected, providerUrl, providerType, networksTabIsInAddMode, history, isFullScreen, } = this.props const { label, labelKey, rpcUrl, providerType: currentProviderType, } = network const listItemNetworkIsSelected = selectRpcUrl && selectRpcUrl === rpcUrl const listItemUrlIsProviderUrl = rpcUrl === providerUrl const listItemTypeIsProviderNonRpcType = providerType !== NETWORK_TYPE_RPC && currentProviderType === providerType const listItemNetworkIsCurrentProvider = !networkIsSelected && !networksTabIsInAddMode && (listItemUrlIsProviderUrl || listItemTypeIsProviderNonRpcType) const displayNetworkListItemAsSelected = listItemNetworkIsSelected || listItemNetworkIsCurrentProvider return (
{ setNetworksTabAddMode(false) setSelectedSettingsRpcUrl(rpcUrl) if (!isFullScreen) { history.push(NETWORKS_FORM_ROUTE) } }} >
{label || this.context.t(labelKey)} {currentProviderType !== NETWORK_TYPE_RPC && ( )}
) } renderNetworksList() { const { networksToRender, selectedNetwork, networkIsSelected, networksTabIsInAddMode, networkDefaultedToProvider, } = this.props return (
{networksToRender.map((network) => this.renderNetworkListItem(network, selectedNetwork.rpcUrl), )} {networksTabIsInAddMode && (
{this.context.t('newNetwork')}
)}
) } renderNetworksTabContent() { const { t } = this.context const { setRpcTarget, showConfirmDeleteNetworkModal, setSelectedSettingsRpcUrl, setNetworksTabAddMode, selectedNetwork: { labelKey, label, rpcUrl, chainId, ticker, viewOnly, rpcPrefs, blockExplorerUrl, }, networksTabIsInAddMode, editRpc, providerUrl, networksToRender, history, isFullScreen, shouldRenderNetworkForm, } = this.props return ( <> {this.renderNetworksList()} {shouldRenderNetworkForm ? ( network.rpcUrl)} setRpcTarget={setRpcTarget} editRpc={editRpc} networkName={label || (labelKey && t(labelKey)) || ''} rpcUrl={rpcUrl} chainId={chainId} ticker={ticker} onClear={(shouldUpdateHistory = true) => { setNetworksTabAddMode(false) setSelectedSettingsRpcUrl('') if (shouldUpdateHistory && !isFullScreen) { history.push(NETWORKS_ROUTE) } }} showConfirmDeleteNetworkModal={showConfirmDeleteNetworkModal} viewOnly={viewOnly} isCurrentRpcTarget={providerUrl === rpcUrl} networksTabIsInAddMode={networksTabIsInAddMode} rpcPrefs={rpcPrefs} blockExplorerUrl={blockExplorerUrl} isFullScreen={isFullScreen} /> ) : null} ) } render() { const { setNetworksTabAddMode, setSelectedSettingsRpcUrl, history, isFullScreen, shouldRenderNetworkForm, } = this.props return (
{isFullScreen && this.renderSubHeader()}
{this.renderNetworksTabContent()} {!isFullScreen && !shouldRenderNetworkForm ? (
) : null}
) } }