import * as React from 'react'; import translate from 'translations'; import { State } from 'reducers/rates'; import { rateSymbols, TFetchCCRates } from 'actions/rates'; import { TokenBalance } from 'selectors/wallet'; import { Balance } from 'libs/wallet'; import Spinner from 'components/ui/Spinner'; import UnitDisplay from 'components/ui/UnitDisplay'; import './EquivalentValues.scss'; interface Props { balance?: Balance; tokenBalances?: TokenBalance[]; rates: State['rates']; ratesError?: State['ratesError']; fetchCCRates: TFetchCCRates; } interface CmpState { currency: string; } export default class EquivalentValues extends React.Component { public state = { currency: 'ETH' }; private balanceLookup = {}; public constructor(props) { super(props); this.makeBalanceLookup(props); } public componentDidMount() { this.props.fetchCCRates(this.state.currency); } public componentWillReceiveProps(nextProps) { const { balance, tokenBalances } = this.props; if ( nextProps.balance !== balance || nextProps.tokenBalances !== tokenBalances ) { this.makeBalanceLookup(nextProps); } } public render() { const { tokenBalances, rates, ratesError } = this.props; const { currency } = this.state; const balance = this.balanceLookup[currency]; let values; if (balance && rates && rates[currency]) { values = rateSymbols.map(key => { if (!rates[currency][key] || key === currency) { return null; } return (
  • {key}: {' '} {balance.isPending ? ( ) : ( )}
  • ); }); } else if (ratesError) { values =
    {ratesError}
    ; } else { values = (
    ); } return (
    {translate('sidebar_Equiv')} for{' '}
    ); } private changeCurrency = (ev: React.FormEvent) => { const currency = ev.currentTarget.value; this.setState({ currency }); if (!this.props.rates || !this.props.rates[currency]) { this.props.fetchCCRates(currency); } }; private makeBalanceLookup(props: Props) { const tokenBalances = props.tokenBalances || []; this.balanceLookup = tokenBalances.reduce( (prev, tk) => { return { ...prev, [tk.symbol]: tk.balance }; }, { ETH: props.balance && props.balance.wei } ); } }