import { sumBy } from 'lodash' import clsx from 'clsx' import { Bet } from 'web/lib/firebase/bets' import { formatMoney, formatWithCommas, } from 'common/util/format' import { Col } from './layout/col' import { Contract, } from 'web/lib/firebase/contracts' import { Row } from './layout/row' import { YesLabel, NoLabel } from './outcome-label' import { calculatePayout, getContractBetMetrics, getProbability, } from 'common/calculate' import { floatingEqual } from 'common/util/math' import { InfoTooltip } from './info-tooltip' import { ProfitBadge } from './profit-badge' export function BetsSummary(props: { contract: Contract bets: Bet[] isYourBets: boolean className?: string }) { const { contract, className } = props const { resolution, outcomeType } = contract const isBinary = outcomeType === 'BINARY' const bets = props.bets.filter((b) => !b.isAnte) const { profitPercent, payout, profit, totalShares } = getContractBetMetrics( contract, bets ) const excludeSales = bets.filter((b) => !b.isSold && !b.sale) const yesWinnings = sumBy(excludeSales, (bet) => calculatePayout(contract, bet, 'YES') ) const noWinnings = sumBy(excludeSales, (bet) => calculatePayout(contract, bet, 'NO') ) const prob = isBinary ? getProbability(contract) : 0 const expectation = prob * yesWinnings + (1 - prob) * noWinnings if ( isBinary && floatingEqual(totalShares.YES ?? 0, 0) && floatingEqual(totalShares.NO ?? 0, 0) ) return <> return ( {resolution ? (
Payout
{formatMoney(payout)}{' '}
) : isBinary ? (
Position{' '}
{yesWinnings > 0 ? ( <> {formatWithCommas(yesWinnings)} ) : ( <> {formatWithCommas(noWinnings)} )}
) : (
Expected value {''}
{formatMoney(payout)}
)} {isBinary && (
Expected value{' '}
{formatMoney(expectation)}
)}
Profit{' '}
{formatMoney(profit)}
) }