import * as _ from 'lodash'; import * as React from 'react'; import styled from 'styled-components'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; import { AddressTableRow } from 'ts/pages/governance/address_table_row'; import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; interface AddressTableProps { networkId: number; userAddresses: string[]; addressBalances: BigNumber[]; onSelectAddress?: (addressIndex: number) => void; } interface AddressTableState { selectedAddressIndex?: number; } export class AddressTable extends React.Component { constructor(props: AddressTableProps) { super(props); this.state = { selectedAddressIndex: 0, }; } public render(): React.ReactNode { return ( {this._renderAddressTableRows()}
); } private _renderAddressTableRows(): React.ReactNode { const { userAddresses, addressBalances } = this.props; const { selectedAddressIndex } = this.state; const rows = _.map(userAddresses, (userAddress: string, i: number) => { const balanceInZrxBaseUnits = addressBalances[i]; const addressRowId = `address-${userAddress}`; const balanceInZrx = Web3Wrapper.toUnitAmount(balanceInZrxBaseUnits, constants.DECIMAL_PLACES_ETH); const balanceString = `${balanceInZrx.toFixed(configs.AMOUNT_DISPLAY_PRECSION)} ZRX`; return ( ); }); return rows; } private _onSelectAddress(e: React.ChangeEvent): void { const selectedAddressIndex = _.parseInt(e.currentTarget.value); this.setState({ selectedAddressIndex }); if (this.props.onSelectAddress) { this.props.onSelectAddress(selectedAddressIndex); } } } const Wrapper = styled.div<{ marginBottom?: string }>` background-color: #fff; border-radius: 4px; margin-bottom: ${props => props.marginBottom || '25px'}; padding: 10px 30px; height: 230px; overflow-y: auto; `; const Table = styled.table` border-collapse: collapse; width: 100%; `;