import React, { Component } from 'react'; import { MapStateToProps, connect } from 'react-redux'; import { Link } from 'react-router-dom'; import classnames from 'classnames'; import { ANNOUNCEMENT_MESSAGE, ANNOUNCEMENT_TYPE, languages } from 'config'; import { NetworkConfig } from 'types/network'; import { getKeyByValue } from 'utils/helpers'; import logo from 'assets/images/logo-mycrypto.svg'; import { OldDropDown } from 'components/ui'; import { AddCustomNodeAction, TAddCustomNetwork, TAddCustomNode, TChangeLanguage, TChangeNodeRequestedOneTime, TRemoveCustomNode, getLanguageSelection, getNetworkConfig, getOffline, isNodeChanging, isStaticNodeId, changeLanguage, changeNodeRequestedOneTime, addCustomNode, removeCustomNode, addCustomNetwork } from 'features/config'; import { AppState } from 'features/reducers'; import { transactionFieldsActions } from 'features/transaction'; import CustomNodeModal from 'components/CustomNodeModal'; import NetworkDropdown from './components/NetworkDropdown'; import Navigation from './components/Navigation'; import OnlineStatus from './components/OnlineStatus'; import './index.scss'; interface OwnProps { networkParam: string | null; } interface DispatchProps { changeLanguage: TChangeLanguage; changeNodeRequestedOneTime: TChangeNodeRequestedOneTime; setGasPriceField: transactionFieldsActions.TSetGasPriceField; addCustomNode: TAddCustomNode; removeCustomNode: TRemoveCustomNode; addCustomNetwork: TAddCustomNetwork; } interface StateProps { shouldSetNodeFromQS: boolean; network: NetworkConfig; languageSelection: ReturnType; isChangingNode: ReturnType; isOffline: ReturnType; } interface State { isAddingCustomNode: boolean; } type Props = OwnProps & StateProps & DispatchProps; class Header extends Component { public state = { isAddingCustomNode: false }; public componentDidMount() { this.attemptSetNodeFromQueryParameter(); } public render() { const { languageSelection, isChangingNode, isOffline, network } = this.props; const { isAddingCustomNode } = this.state; const selectedLanguage = languageSelection; const LanguageDropDown = OldDropDown as new () => OldDropDown; return (
{ANNOUNCEMENT_MESSAGE && (
{ANNOUNCEMENT_MESSAGE}
)}
MyCrypto logo
); } 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 = (payload: AddCustomNodeAction['payload']) => { this.setState({ isAddingCustomNode: false }); this.props.addCustomNode(payload); }; private attemptSetNodeFromQueryParameter() { const { shouldSetNodeFromQS, networkParam } = this.props; if (shouldSetNodeFromQS) { this.props.changeNodeRequestedOneTime(networkParam!); } } } const mapStateToProps: MapStateToProps = ( state, { networkParam } ): StateProps => ({ shouldSetNodeFromQS: !!(networkParam && isStaticNodeId(state, networkParam)), isOffline: getOffline(state), isChangingNode: isNodeChanging(state), languageSelection: getLanguageSelection(state), network: getNetworkConfig(state) }); const mapDispatchToProps: DispatchProps = { setGasPriceField: transactionFieldsActions.setGasPriceField, changeLanguage, changeNodeRequestedOneTime, addCustomNode, removeCustomNode, addCustomNetwork }; export default connect(mapStateToProps, mapDispatchToProps)(Header);