import { TChangeGasPrice, TChangeLanguage, TChangeNodeIntent, TAddCustomNode, TRemoveCustomNode } from 'actions/config'; import logo from 'assets/images/logo-myetherwallet.svg'; import { Dropdown, ColorDropdown } from 'components/ui'; import React, { Component } from 'react'; import classnames from 'classnames'; import { Link } from 'react-router-dom'; import { ANNOUNCEMENT_MESSAGE, ANNOUNCEMENT_TYPE, languages, NETWORKS, NODES, VERSION, NodeConfig, CustomNodeConfig } from '../../config/data'; import GasPriceDropdown from './components/GasPriceDropdown'; import Navigation from './components/Navigation'; import CustomNodeModal from './components/CustomNodeModal'; import { getKeyByValue } from 'utils/helpers'; import { makeCustomNodeId } from 'utils/node'; import './index.scss'; interface Props { languageSelection: string; node: NodeConfig; nodeSelection: string; isChangingNode: boolean; gasPriceGwei: number; customNodes: CustomNodeConfig[]; changeLanguage: TChangeLanguage; changeNodeIntent: TChangeNodeIntent; changeGasPrice: TChangeGasPrice; addCustomNode: TAddCustomNode; removeCustomNode: TRemoveCustomNode; } interface State { isAddingCustomNode: boolean; } export default class Header extends Component { public state = { isAddingCustomNode: false }; public render() { const { languageSelection, changeNodeIntent, node, nodeSelection, isChangingNode, customNodes } = this.props; const { isAddingCustomNode } = this.state; const selectedLanguage = languageSelection; const selectedNetwork = NETWORKS[node.network]; const LanguageDropDown = Dropdown as new () => Dropdown< typeof selectedLanguage >; const nodeOptions = Object.keys(NODES) .map(key => { return { value: key, name: ( {NODES[key].network} ({NODES[key].service}) ), color: NETWORKS[NODES[key].network].color, hidden: NODES[key].hidden }; }) .concat( customNodes.map(customNode => { return { value: makeCustomNodeId(customNode), name: ( {customNode.network} - {customNode.name} (custom) ), color: '#000', hidden: false, onRemove: () => this.props.removeCustomNode(customNode) }; }) ); return (
{ANNOUNCEMENT_MESSAGE && (
)}
{/* TODO - don't hardcode image path*/} MyEtherWallet
v{VERSION}
Disclaimer } onChange={this.changeLanguage} size="smr" color="white" />
Add Custom Node } disabled={nodeSelection === 'web3'} onChange={changeNodeIntent} size="smr" color="white" menuAlign="right" />
{isAddingCustomNode && ( )}
); } public changeLanguage = (value: string) => { const key = getKeyByValue(languages, value); if (key) { this.props.changeLanguage(key); } }; private openCustomNodeModal = () => { this.setState({ isAddingCustomNode: true }); }; private closeCustomNodeModal = () => { this.setState({ isAddingCustomNode: false }); }; private addCustomNode = (node: CustomNodeConfig) => { this.setState({ isAddingCustomNode: false }); this.props.addCustomNode(node); }; }