import clsx from 'clsx' import { Answer } from 'common/answer' import { FreeResponseContract, MultipleChoiceContract } from 'common/contract' import { Col } from '../layout/col' import { Row } from '../layout/row' import { Avatar } from '../avatar' import { SiteLink } from '../site-link' import { formatPercent } from 'common/util/format' import { getDpmOutcomeProbability } from 'common/calculate-dpm' import { tradingAllowed } from 'web/lib/firebase/contracts' import { Linkify } from '../linkify' export function AnswerItem(props: { answer: Answer contract: FreeResponseContract | MultipleChoiceContract showChoice: 'radio' | 'checkbox' | undefined chosenProb: number | undefined totalChosenProb?: number onChoose: (answerId: string, prob: number) => void onDeselect: (answerId: string) => void }) { const { answer, contract, showChoice, chosenProb, totalChosenProb, onChoose, onDeselect, } = props const { resolution, resolutions, totalShares } = contract const { username, avatarUrl, name, number, text } = answer const isChosen = chosenProb !== undefined const prob = getDpmOutcomeProbability(totalShares, answer.id) const roundedProb = Math.round(prob * 100) const probPercent = formatPercent(prob) const wasResolvedTo = resolution === answer.id || (resolutions && resolutions[answer.id]) return (
{name}
{/* TODO: Show total pool? */}
{showChoice && '#' + number}
{!wasResolvedTo && (showChoice === 'checkbox' ? ( { const { value } = e.target const numberValue = value ? parseInt(value.replace(/[^\d]/, '')) : 0 if (!isNaN(numberValue)) onChoose(answer.id, numberValue) }} /> ) : (
{probPercent}
))} {showChoice ? (
{showChoice === 'checkbox' && (
{chosenProb && totalChosenProb ? Math.round((100 * chosenProb) / totalChosenProb) : 0} % share
)}
) : ( wasResolvedTo && (
Chosen{' '} {resolutions ? `${Math.round(resolutions[answer.id])}%` : ''}
{probPercent}
) )}
) }