diff options
author | Brandon Millman <brandon@0xproject.com> | 2018-05-02 01:09:04 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-02 01:09:04 +0800 |
commit | 1fbdc147344bfe2afa0ba955b668fc6598deb009 (patch) | |
tree | cdea7acd8d43a922002759b360276872db5e2620 /packages/website/ts/components | |
parent | 3e683162e9e894dc5c309d26feb866eb6d98b154 (diff) | |
parent | 3a1f9d01e8cdb40fbb293de10046fa654434dde4 (diff) | |
download | dexon-sol-tools-1fbdc147344bfe2afa0ba955b668fc6598deb009.tar dexon-sol-tools-1fbdc147344bfe2afa0ba955b668fc6598deb009.tar.gz dexon-sol-tools-1fbdc147344bfe2afa0ba955b668fc6598deb009.tar.bz2 dexon-sol-tools-1fbdc147344bfe2afa0ba955b668fc6598deb009.tar.lz dexon-sol-tools-1fbdc147344bfe2afa0ba955b668fc6598deb009.tar.xz dexon-sol-tools-1fbdc147344bfe2afa0ba955b668fc6598deb009.tar.zst dexon-sol-tools-1fbdc147344bfe2afa0ba955b668fc6598deb009.zip |
Merge pull request #550 from 0xProject/feature/website/crypto-compare-prices
Grab wallet price information by token symbol
Diffstat (limited to 'packages/website/ts/components')
-rw-r--r-- | packages/website/ts/components/wallet/wallet.tsx | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/packages/website/ts/components/wallet/wallet.tsx b/packages/website/ts/components/wallet/wallet.tsx index d1ae38550..057c712e5 100644 --- a/packages/website/ts/components/wallet/wallet.tsx +++ b/packages/website/ts/components/wallet/wallet.tsx @@ -461,16 +461,16 @@ export class Wallet extends React.Component<WalletProps, WalletState> { ); balanceAndAllowanceTupleByAddress[tokenAddress] = balanceAndAllowanceTuple; } - const pricesByAddress = await this._getPricesByAddressAsync(tokenAddresses); + const priceByAddress = await this._getPriceByAddressAsync(tokenAddresses); const trackedTokenStateByAddress = _.reduce( tokenAddresses, (acc, address) => { const [balance, allowance] = balanceAndAllowanceTupleByAddress[address]; - const price = pricesByAddress[address]; + const priceIfExists = _.get(priceByAddress, address); acc[address] = { balance, allowance, - price, + price: priceIfExists, isLoaded: true, }; return acc; @@ -487,16 +487,29 @@ export class Wallet extends React.Component<WalletProps, WalletState> { private async _refetchTokenStateAsync(tokenAddress: string) { await this._fetchBalancesAndAllowancesAsync([tokenAddress]); } - private async _getPricesByAddressAsync(tokenAddresses: string[]): Promise<ItemByAddress<BigNumber>> { + private async _getPriceByAddressAsync(tokenAddresses: string[]): Promise<ItemByAddress<BigNumber>> { if (_.isEmpty(tokenAddresses)) { return {}; } + // 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: { [symbol: string]: string } = {}; + _.each(tokenAddresses, address => { + const tokenIfExists = _.get(this.props.tokenByAddress, address); + if (!_.isUndefined(tokenIfExists)) { + const symbol = tokenIfExists.symbol; + tokenAddressBySymbol[symbol] = address; + } + }); + const tokenSymbols = _.keys(tokenAddressBySymbol); 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; + const priceBySymbol = await backendClient.getPriceInfoAsync(tokenSymbols); + const priceByAddress = _.mapKeys(priceBySymbol, (value, symbol) => _.get(tokenAddressBySymbol, symbol)); + const result = _.mapValues(priceByAddress, price => { + const priceBigNumber = new BigNumber(price); + return priceBigNumber; + }); + return result; } catch (err) { return {}; } |