import { Binary, CPMM, DPM, FullContract } from '../../common/contract' import { User } from '../../common/user' import { Bet } from '../../common/bet' import { useState } from 'react' import { Col } from './layout/col' import { Row } from './layout/row' import { formatWithCommas } from '../../common/util/format' import { OutcomeLabel } from './outcome-label' import { Modal } from './layout/modal' import { Title } from './title' import { SellPanel, useSaveShares } from './bet-panel' import { useUserContractBets } from '../hooks/use-user-bets' import clsx from 'clsx' export function SellRow(props: { contract: FullContract user: User | null | undefined className?: string buttonOnly?: boolean }) { const { className } = props const userBets = useUserContractBets(props.user?.id, props.contract.id) const [showSellModal, setShowSellModal] = useState(false) const { mechanism } = props.contract const { yesFloorShares, noFloorShares } = useSaveShares( props.contract, userBets ) const shares = yesFloorShares || noFloorShares const sharesOutcome = yesFloorShares ? 'YES' : noFloorShares ? 'NO' : undefined if (sharesOutcome && props.user && mechanism === 'cpmm-1') { return (
{props.buttonOnly ? (
{'(' + shares + ' shares)'}
) : (
You have {formatWithCommas(shares)}{' '} {' '} shares
)} {showSellModal && ( } user={props.user} userBets={userBets ?? []} shares={shares} sharesOutcome={sharesOutcome} setOpen={setShowSellModal} /> )}
) } return
} function SellSharesModal(props: { contract: FullContract userBets: Bet[] shares: number sharesOutcome: 'YES' | 'NO' user: User setOpen: (open: boolean) => void }) { const { contract, shares, sharesOutcome, userBets, user, setOpen } = props return ( <div className="mb-6"> You have {formatWithCommas(Math.floor(shares))}{' '} <OutcomeLabel outcome={sharesOutcome} contract={props.contract} truncate={'short'} />{' '} shares </div> <SellPanel contract={contract} shares={shares} sharesOutcome={sharesOutcome} user={user} userBets={userBets ?? []} onSellSuccess={() => setOpen(false)} /> </Col> </Modal> ) }