/* @flow */ import styled from 'styled-components'; import coins from 'constants/coins'; import PropTypes from 'prop-types'; import React, { PureComponent } from 'react'; import { Link, colors, icons as ICONS } from 'trezor-ui-components'; import { NavLink } from 'react-router-dom'; import { FormattedMessage } from 'react-intl'; import l10nCommonMessages from 'views/common.messages'; import Divider from '../Divider'; import RowCoin from '../RowCoin'; import l10nMessages from './index.messages'; import type { Props } from '../common'; const Wrapper = styled.div``; const ExternalWallet = styled.div` cursor: pointer; `; const StyledLink = styled(Link)` &:hover { text-decoration: none; } `; const Empty = styled.span` display: flex; justify-content: center; align-items: center; min-height: 50px; `; const StyledLinkEmpty = styled(Link)` padding: 0; `; const Gray = styled.span` color: ${colors.TEXT_SECONDARY}; `; class CoinMenu extends PureComponent { getBaseUrl() { const { selectedDevice } = this.props.wallet; let baseUrl = ''; if (selectedDevice && selectedDevice.id) { baseUrl = `/device/${selectedDevice.id}`; if (selectedDevice.instance) { baseUrl += `:${selectedDevice.instance}`; } } return baseUrl; } getOtherCoins() { const { hiddenCoinsExternal } = this.props.wallet; return coins .sort((a, b) => a.order - b.order) .filter(item => !item.isHidden) // hide coins globally in config .filter(item => !hiddenCoinsExternal.includes(item.id)) .map(coin => { const row = ( ); if (coin.external) return ( this.props.gotoExternalWallet(coin.id, coin.url)} > {row} ); return ( {row} ); }); } getEmptyContent() { return ( ), }} />{' '} ); } isTopMenuEmpty() { const numberOfVisibleNetworks = this.props.localStorage.config.networks .filter(item => !item.isHidden) // hide coins globally in config .filter(item => !this.props.wallet.hiddenCoins.includes(item.shortcut)); return numberOfVisibleNetworks.length <= 0; } isBottomMenuEmpty() { const { hiddenCoinsExternal } = this.props.wallet; const numberOfVisibleNetworks = coins .filter(item => !item.isHidden) .filter(item => !hiddenCoinsExternal.includes(item.id)); return numberOfVisibleNetworks.length <= 0; } isMenuEmpty() { return this.isTopMenuEmpty() && this.isBottomMenuEmpty(); } render() { const { hiddenCoins } = this.props.wallet; const { config } = this.props.localStorage; return ( {this.isMenuEmpty() || (this.isTopMenuEmpty() && this.getEmptyContent())} {config.networks .filter(item => !item.isHidden) // hide coins globally in config .filter(item => !hiddenCoins.includes(item.shortcut)) // hide coins by user settings .sort((a, b) => a.order - b.order) .map(item => ( ))} {!this.isMenuEmpty() && ( } hasBorder /> )} {this.isBottomMenuEmpty() && this.getEmptyContent()} {!this.isBottomMenuEmpty() && this.getOtherCoins()} ); } } CoinMenu.propTypes = { localStorage: PropTypes.object.isRequired, wallet: PropTypes.object.isRequired, gotoExternalWallet: PropTypes.func.isRequired, }; export default CoinMenu;