import React from 'react'; import translate from 'translations'; import { TokenBalance } from 'selectors/wallet'; import AddCustomTokenForm from './AddCustomTokenForm'; import TokenRow from './TokenRow'; import { Token } from 'types/network'; interface Props { allTokens: Token[]; tokenBalances: TokenBalance[]; hasSavedWalletTokens: boolean; scanWalletForTokens(): any; setWalletTokens(tokens: string[]): any; onAddCustomToken(token: Token): any; onRemoveCustomToken(symbol: string): any; } interface TrackedTokens { [symbol: string]: boolean; } interface State { trackedTokens: { [symbol: string]: boolean }; showCustomTokenForm: boolean; } export default class TokenBalances extends React.PureComponent { public state: State = { trackedTokens: {}, showCustomTokenForm: false }; public componentWillReceiveProps(nextProps: Props) { if (nextProps.tokenBalances !== this.props.tokenBalances) { const trackedTokens = nextProps.tokenBalances.reduce((prev, t) => { prev[t.symbol] = !t.balance.isZero(); return prev; }, {}); this.setState({ trackedTokens }); } } public render() { const { allTokens, tokenBalances, hasSavedWalletTokens } = this.props; const { showCustomTokenForm, trackedTokens } = this.state; let bottom; let help; if (tokenBalances.length && !hasSavedWalletTokens) { help = 'Select which tokens you would like to keep track of'; bottom = (

{translate('Missing tokens? You can add custom tokens next.')}

); } else if (showCustomTokenForm) { bottom = (
); } else { bottom = (
{' '}
); } return (
{help &&

{help}

} {tokenBalances.length ? ( {tokenBalances.map( token => token ? ( ) : null )}
) : (
No tokens found
)} {bottom}
); } private toggleTrack = (symbol: string) => { this.setState({ trackedTokens: { ...this.state.trackedTokens, [symbol]: !this.state.trackedTokens[symbol] } }); }; private toggleShowCustomTokenForm = () => { this.setState({ showCustomTokenForm: !this.state.showCustomTokenForm }); }; private addCustomToken = (token: Token) => { this.props.onAddCustomToken(token); this.setState({ showCustomTokenForm: false }); }; private handleSetWalletTokens = () => { const { trackedTokens } = this.state; const desiredTokens = Object.keys(trackedTokens).filter(t => trackedTokens[t]); this.props.setWalletTokens(desiredTokens); }; }