// @flow import 'scss/component/_superchat.scss'; import { formatCredits, formatFullPrice } from 'util/format-credits'; import classnames from 'classnames'; import LbcSymbol from 'component/common/lbc-symbol'; import React from 'react'; type Props = { amount?: number, className?: string, customAmounts?: { amountFiat: number, amountLBC: number }, fee?: boolean, hideTitle?: boolean, isEstimate?: boolean, isFiat?: boolean, noFormat?: boolean, precision: number, showFree: boolean, showFullPrice: boolean, showLBC?: boolean, showPlus: boolean, size?: number, superChat?: boolean, superChatLight?: boolean, }; class CreditAmount extends React.PureComponent { static defaultProps = { noFormat: false, precision: 2, showFree: false, showFullPrice: false, showLBC: true, showPlus: false, }; render() { const { amount, className, customAmounts, fee, hideTitle, isEstimate, isFiat, noFormat, precision, showFree, showFullPrice, showLBC, showPlus, size, superChat, superChatLight, } = this.props; const minimumRenderableAmount = 10 ** (-1 * precision); // return null, otherwise it will try and convert undefined to a string if (amount === undefined && customAmounts === undefined) return null; function getAmountText(amount: number, isFiat?: boolean) { const fullPrice = formatFullPrice(amount, 2); const isFree = parseFloat(amount) === 0; let formattedAmount; if (showFullPrice) { formattedAmount = fullPrice; } else { formattedAmount = amount > 0 && amount < minimumRenderableAmount ? `<${minimumRenderableAmount}` : formatCredits(amount, precision, true); } if (showFree && isFree) { return __('Free'); } else { let amountText = noFormat ? amount : formattedAmount; if (showPlus && amount > 0) { amountText = `+${amountText}`; } if (showLBC && !isFiat) { amountText = ; } else if (showLBC && isFiat) { amountText = (

${isNaN(Number(amountText)) ? amountText : (Math.round(Number(amount) * 100) / 100).toFixed(2)}

); } if (fee) { amountText = __('%amount% fee', { amount: amountText }); } return amountText; } } return ( {customAmounts ? Object.values(customAmounts).map((amount, index) => ( {getAmountText(Number(amount), !index)} )) : amount && {getAmountText(amount, isFiat)}} {isEstimate ? ( * ) : null} ); } } export default CreditAmount;