diff options
author | Brandon Millman <brandon.millman@gmail.com> | 2018-04-23 01:02:47 +0800 |
---|---|---|
committer | Brandon Millman <brandon.millman@gmail.com> | 2018-04-23 01:10:58 +0800 |
commit | e51f9b3593c86c5ab4ec0ecb7e7ea8a9857a7c74 (patch) | |
tree | 8845889c464221a2e02bd36618ba62aadcd98d82 /packages/website/ts/components | |
parent | d08bfbf7054d0d98680daab3d1fdc0ac878dcc16 (diff) | |
download | dexon-sol-tools-e51f9b3593c86c5ab4ec0ecb7e7ea8a9857a7c74.tar dexon-sol-tools-e51f9b3593c86c5ab4ec0ecb7e7ea8a9857a7c74.tar.gz dexon-sol-tools-e51f9b3593c86c5ab4ec0ecb7e7ea8a9857a7c74.tar.bz2 dexon-sol-tools-e51f9b3593c86c5ab4ec0ecb7e7ea8a9857a7c74.tar.lz dexon-sol-tools-e51f9b3593c86c5ab4ec0ecb7e7ea8a9857a7c74.tar.xz dexon-sol-tools-e51f9b3593c86c5ab4ec0ecb7e7ea8a9857a7c74.tar.zst dexon-sol-tools-e51f9b3593c86c5ab4ec0ecb7e7ea8a9857a7c74.zip |
Grab price information from crypto compare api
Diffstat (limited to 'packages/website/ts/components')
-rw-r--r-- | packages/website/ts/components/wallet/wallet.tsx | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/packages/website/ts/components/wallet/wallet.tsx b/packages/website/ts/components/wallet/wallet.tsx index d1ae38550..44bf69455 100644 --- a/packages/website/ts/components/wallet/wallet.tsx +++ b/packages/website/ts/components/wallet/wallet.tsx @@ -6,7 +6,7 @@ import { Styles, utils as sharedUtils, } from '@0xproject/react-shared'; -import { BigNumber } from '@0xproject/utils'; +import { BigNumber, logUtils } from '@0xproject/utils'; import * as _ from 'lodash'; import FlatButton from 'material-ui/FlatButton'; import { List, ListItem } from 'material-ui/List'; @@ -37,7 +37,9 @@ import { TokenStateByAddress, } from 'ts/types'; import { backendClient } from 'ts/utils/backend_client'; +import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; +import { errorReporter } from 'ts/utils/error_reporter'; import { utils } from 'ts/utils/utils'; import { styles as walletItemStyles } from 'ts/utils/wallet_item_styles'; @@ -491,15 +493,42 @@ export class Wallet extends React.Component<WalletProps, WalletState> { if (_.isEmpty(tokenAddresses)) { return {}; } - try { - const websiteBackendPriceInfos = await backendClient.getPriceInfosAsync(tokenAddresses); - const addresses = _.map(websiteBackendPriceInfos, info => info.address); - const prices = _.map(websiteBackendPriceInfos, info => new BigNumber(info.price)); - const pricesByAddress = _.zipObject(addresses, prices); - return pricesByAddress; - } catch (err) { + // for each input token address, search for the corresponding symbol in this.props.tokenByAddress, if it exists + // create a mapping from existing symbols -> address + const tokenAddressBySymbol = _.fromPairs( + _.compact( + _.map(tokenAddresses, address => { + const tokenIfExists = _.get(this.props.tokenByAddress, address); + if (!_.isUndefined(tokenIfExists)) { + const symbol = tokenIfExists.symbol; + // the crypto compare api doesn't understand 'WETH' so we need to replace it with 'ETH' + const key = symbol === ETHER_TOKEN_SYMBOL ? ETHER_SYMBOL : symbol; + return [key, address]; + } else { + return undefined; + } + }), + ), + ); + const joinedTokenSymbols = _.keys(tokenAddressBySymbol).join(','); + const url = `${configs.CRYPTO_COMPARE_BASE_URL}/pricemulti?fsyms=${joinedTokenSymbols}&tsyms=USD`; + const response = await fetch(url); + if (response.status !== 200) { + const errorText = `Error requesting url: ${url}, ${response.status}: ${response.statusText}`; + logUtils.log(errorText); + const error = Error(errorText); + // tslint:disable-next-line:no-floating-promises + errorReporter.reportAsync(error); return {}; } + const priceInfoBySymbol = await response.json(); + const priceInfoByAddress = _.mapKeys(priceInfoBySymbol, (value, symbol) => _.get(tokenAddressBySymbol, symbol)); + const result = _.mapValues(priceInfoByAddress, priceInfo => { + const price = _.get(priceInfo, 'USD'); + const priceBigNumber = new BigNumber(price); + return priceBigNumber; + }); + return result; } private _openWrappedEtherActionRow(wrappedEtherDirection: Side) { this.setState({ |