import { BuyQuoteInfo } from '@0x/asset-buyer'; import { BigNumber } from '@0x/utils'; import * as _ from 'lodash'; import * as React from 'react'; import { DEFAULT_UNKOWN_ASSET_NAME } from '../constants'; import { ColorOption } from '../style/theme'; import { BaseCurrency } from '../types'; import { buyQuoteUtil } from '../util/buy_quote'; import { format } from '../util/format'; import { AmountPlaceholder } from './amount_placeholder'; import { Container } from './ui/container'; import { Flex } from './ui/flex'; import { Text, TextProps } from './ui/text'; interface BaseCurryChoiceProps { currencyName: string; onClick: () => void; isSelected: boolean; } const BaseCurrencyChoice: React.StatelessComponent = props => { const textStyle: TextProps = { onClick: props.onClick, fontSize: '12px' }; if (props.isSelected) { textStyle.fontColor = ColorOption.primaryColor; textStyle.fontWeight = 700; } return {props.currencyName}; }; const grandTotalDisplayValue = ( displayPrimaryTotalCost?: React.ReactNode, displaySecondaryTotalCost?: React.ReactNode, ): React.ReactNode => { if (!displayPrimaryTotalCost) { return undefined; } const secondaryText = displaySecondaryTotalCost && ( ({displaySecondaryTotalCost}) ); return ( {secondaryText} {displayPrimaryTotalCost} ); }; const tokenAmountLabel = (displayPricePerToken?: React.ReactNode, assetName?: string, numTokens?: BigNumber) => { // Display as 0 if we have a selected asset const displayNumTokens = assetName && assetName !== DEFAULT_UNKOWN_ASSET_NAME && _.isUndefined(numTokens) ? new BigNumber(0) : numTokens; if (!_.isUndefined(displayNumTokens)) { let numTokensWithSymbol = displayNumTokens.toString(); if (assetName) { numTokensWithSymbol += ` ${assetName}`; } if (displayPricePerToken) { numTokensWithSymbol += ` @ ${displayPricePerToken}`; } return numTokensWithSymbol; } return 'Token Amount'; }; const getDisplayAmount = ( baseCurrency: BaseCurrency, weiAmount?: BigNumber, ethUsdPrice?: BigNumber, ): React.ReactNode => { switch (baseCurrency) { case BaseCurrency.USD: return format.ethBaseUnitAmountInUsd(weiAmount, ethUsdPrice, 2, ''); case BaseCurrency.ETH: return format.ethBaseUnitAmount(weiAmount, 4, ''); } }; export interface OrderDetailsProps { buyQuoteInfo?: BuyQuoteInfo; selectedAssetUnitAmount?: BigNumber; ethUsdPrice?: BigNumber; isLoading: boolean; assetName?: string; baseCurrency: BaseCurrency; onBaseCurrencySwitchEth: () => void; onBaseCurrencySwitchUsd: () => void; } export class OrderDetails extends React.Component { public render(): React.ReactNode { const { baseCurrency, buyQuoteInfo, ethUsdPrice, selectedAssetUnitAmount } = this.props; const weiAmounts = buyQuoteUtil.getWeiAmounts(selectedAssetUnitAmount, buyQuoteInfo); const secondaryCurrency = baseCurrency === BaseCurrency.USD ? BaseCurrency.ETH : BaseCurrency.USD; const grandTotalValue = grandTotalDisplayValue( getDisplayAmount(baseCurrency, weiAmounts.grandTotalInWei, ethUsdPrice), getDisplayAmount(secondaryCurrency, weiAmounts.grandTotalInWei, ethUsdPrice), ); return ( Order Details / ); } } export interface OrderDetailsRowProps { labelText: string; isLabelBold?: boolean; isLoading: boolean; value?: React.ReactNode; } export class OrderDetailsRow extends React.Component { public render(): React.ReactNode { const { labelText, value, isLabelBold, isLoading } = this.props; return ( {labelText} {value || ( )} ); } }