Handle numeric outcomes in movers

This commit is contained in:
Ian Philips 2022-10-13 08:18:16 -06:00
parent e7ba7e715f
commit fa476c78dd
2 changed files with 17 additions and 6 deletions

View File

@ -35,7 +35,7 @@ import { trackCallback } from 'web/lib/service/analytics'
import { getMappedValue } from 'common/pseudo-numeric'
import { Tooltip } from '../tooltip'
import { SiteLink } from '../site-link'
import { ProbChange } from './prob-change-table'
import { ProbOrNumericChange } from './prob-change-table'
import { Card } from '../card'
import { ProfitBadgeMana } from '../profit-badge'
import { floatingEqual } from 'common/util/math'
@ -396,12 +396,17 @@ export function ContractCardProbChange(props: {
className?: string
}) {
const { noLinkAvatar, showPosition, className } = props
const yesOutcomeLabel =
props.contract.outcomeType === 'PSEUDO_NUMERIC' ? 'HIGHER' : 'YES'
const noOutcomeLabel =
props.contract.outcomeType === 'PSEUDO_NUMERIC' ? 'LOWER' : 'NO'
const contract = useContractWithPreload(props.contract) as CPMMBinaryContract
const user = useUser()
const metrics = useUserContractMetrics(user?.id, contract.id)
const dayMetrics = metrics && metrics.from && metrics.from.day
const outcome =
const binaryOutcome =
metrics && floatingEqual(metrics.totalShares.NO ?? 0, 0) ? 'YES' : 'NO'
return (
@ -418,7 +423,7 @@ export function ContractCardProbChange(props: {
>
<span className="line-clamp-3">{contract.question}</span>
</SiteLink>
<ProbChange className="py-2 pr-4" contract={contract} />
<ProbOrNumericChange className="py-2 pr-4" contract={contract} />
</Row>
{showPosition && metrics && metrics.hasShares && (
<Row
@ -427,7 +432,8 @@ export function ContractCardProbChange(props: {
)}
>
<Row className="gap-1 text-gray-500">
{Math.floor(metrics.totalShares[outcome])} {outcome} shares
{Math.floor(metrics.totalShares[binaryOutcome])}{' '}
{binaryOutcome === 'YES' ? yesOutcomeLabel : noOutcomeLabel} shares
</Row>
{dayMetrics && (

View File

@ -7,6 +7,7 @@ import { formatPercent } from 'common/util/format'
import { Col } from '../layout/col'
import { LoadingIndicator } from '../loading-indicator'
import { ContractCardProbChange } from './contract-card'
import { formatNumericProbability } from 'common/pseudo-numeric'
export function ProfitChangeTable(props: {
contracts: CPMMBinaryContract[]
@ -118,7 +119,7 @@ export function ProbChangeTable(props: {
)
}
export function ProbChange(props: {
export function ProbOrNumericChange(props: {
contract: CPMMContract
className?: string
}) {
@ -127,13 +128,17 @@ export function ProbChange(props: {
prob,
probChanges: { day: change },
} = contract
const number =
contract.outcomeType === 'PSEUDO_NUMERIC'
? formatNumericProbability(prob, contract)
: null
const color = change >= 0 ? 'text-teal-500' : 'text-red-400'
return (
<Col className={clsx('flex flex-col items-end', className)}>
<div className="mb-0.5 mr-0.5 text-2xl">
{formatPercent(Math.round(100 * prob) / 100)}
{number ? number : formatPercent(Math.round(100 * prob) / 100)}
</div>
<div className={clsx('text-base', color)}>
{(change > 0 ? '+' : '') + (change * 100).toFixed(0) + '%'}