aboutsummaryrefslogtreecommitdiffstats
path: root/packages/instant/src/util
diff options
context:
space:
mode:
authorSteve Klebanoff <steve.klebanoff@gmail.com>2018-12-08 03:14:55 +0800
committerSteve Klebanoff <steve.klebanoff@gmail.com>2018-12-12 06:37:45 +0800
commit5cbe04acab982ead39f7794547de0f045952a1b7 (patch)
tree5847cfb56df0c357997d5b1dfeb7811394a5da98 /packages/instant/src/util
parentd37680610b772d7bb585203047bef0af0439df0a (diff)
downloaddexon-sol-tools-5cbe04acab982ead39f7794547de0f045952a1b7.tar
dexon-sol-tools-5cbe04acab982ead39f7794547de0f045952a1b7.tar.gz
dexon-sol-tools-5cbe04acab982ead39f7794547de0f045952a1b7.tar.bz2
dexon-sol-tools-5cbe04acab982ead39f7794547de0f045952a1b7.tar.lz
dexon-sol-tools-5cbe04acab982ead39f7794547de0f045952a1b7.tar.xz
dexon-sol-tools-5cbe04acab982ead39f7794547de0f045952a1b7.tar.zst
dexon-sol-tools-5cbe04acab982ead39f7794547de0f045952a1b7.zip
feat(instant): ETH/USD toggle
Diffstat (limited to 'packages/instant/src/util')
-rw-r--r--packages/instant/src/util/buy_quote.ts71
1 files changed, 71 insertions, 0 deletions
diff --git a/packages/instant/src/util/buy_quote.ts b/packages/instant/src/util/buy_quote.ts
new file mode 100644
index 000000000..acd4d389c
--- /dev/null
+++ b/packages/instant/src/util/buy_quote.ts
@@ -0,0 +1,71 @@
+import { BuyQuoteInfo } from '@0x/asset-buyer';
+import { BigNumber } from '@0x/utils';
+import * as _ from 'lodash';
+import { oc } from 'ts-optchain';
+
+import { format } from '../util/format';
+
+import { BIG_NUMBER_ZERO } from '../constants';
+
+export interface DisplayAmounts {
+ pricePerToken: React.ReactNode;
+ assetTotal: React.ReactNode;
+ feeTotal: React.ReactNode;
+ primaryGrandTotal: React.ReactNode;
+ secondaryGrandTotal?: React.ReactNode;
+}
+
+export interface BuyQuoteWeiAmounts {
+ assetTotalInWei: BigNumber | undefined;
+ feeTotalInWei: BigNumber | undefined;
+ grandTotalInWei: BigNumber | undefined;
+ pricePerTokenInWei: BigNumber | undefined;
+}
+
+const ethDisplayFormat = (amountInWei?: BigNumber) => {
+ return format.ethBaseUnitAmount(amountInWei, 4, '');
+};
+const usdDisplayFormat = (amountInWei?: BigNumber, ethUsdPrice?: BigNumber) => {
+ return format.ethBaseUnitAmountInUsd(amountInWei, ethUsdPrice, 2, '');
+};
+
+export const buyQuoteUtil = {
+ getWeiAmounts: (
+ selectedAssetUnitAmount: BigNumber | undefined,
+ buyQuoteInfo: BuyQuoteInfo | undefined,
+ ): BuyQuoteWeiAmounts => {
+ const buyQuoteAccessor = oc(buyQuoteInfo);
+ const assetTotalInWei = buyQuoteAccessor.assetEthAmount();
+ const pricePerTokenInWei =
+ !_.isUndefined(assetTotalInWei) &&
+ !_.isUndefined(selectedAssetUnitAmount) &&
+ !selectedAssetUnitAmount.eq(BIG_NUMBER_ZERO)
+ ? assetTotalInWei.div(selectedAssetUnitAmount).ceil()
+ : undefined;
+
+ return {
+ assetTotalInWei,
+ feeTotalInWei: buyQuoteAccessor.feeEthAmount(),
+ grandTotalInWei: buyQuoteAccessor.totalEthAmount(),
+ pricePerTokenInWei,
+ };
+ },
+ displayAmountsEth: (weiAmounts: BuyQuoteWeiAmounts, ethUsdPrice?: BigNumber): DisplayAmounts => {
+ return {
+ pricePerToken: ethDisplayFormat(weiAmounts.pricePerTokenInWei),
+ assetTotal: ethDisplayFormat(weiAmounts.assetTotalInWei),
+ feeTotal: ethDisplayFormat(weiAmounts.feeTotalInWei),
+ primaryGrandTotal: ethDisplayFormat(weiAmounts.grandTotalInWei),
+ secondaryGrandTotal: usdDisplayFormat(weiAmounts.grandTotalInWei, ethUsdPrice),
+ };
+ },
+ displayAmountsUsd: (weiAmounts: BuyQuoteWeiAmounts, ethUsdPrice?: BigNumber): DisplayAmounts => {
+ return {
+ pricePerToken: usdDisplayFormat(weiAmounts.pricePerTokenInWei, ethUsdPrice),
+ assetTotal: usdDisplayFormat(weiAmounts.assetTotalInWei, ethUsdPrice),
+ feeTotal: usdDisplayFormat(weiAmounts.feeTotalInWei, ethUsdPrice),
+ primaryGrandTotal: usdDisplayFormat(weiAmounts.grandTotalInWei, ethUsdPrice),
+ secondaryGrandTotal: ethDisplayFormat(weiAmounts.grandTotalInWei),
+ };
+ },
+};