import { useState } from 'react' import clsx from 'clsx' import { BetPanel, BuyPanel, SimpleBetPanel } from './bet-panel' import { CPMMBinaryContract, PseudoNumericContract } from 'common/contract' import { getBinaryBetStats, getBinaryCpmmBetInfo } from 'common/new-bet' import { Modal } from './layout/modal' import { useUser } from 'web/hooks/use-user' import { useUserContractBets } from 'web/hooks/use-user-bets' import { useSaveBinaryShares } from './use-save-binary-shares' import { Col } from './layout/col' import { Button } from 'web/components/button' import { BetSignUpPrompt } from './sign-up-prompt' import { PRESENT_BET } from 'common/user' import { Contract } from 'web/lib/firebase/contracts' import { contractDetailsButtonClassName } from './contract/contract-info-dialog' import { User } from 'web/lib/firebase/users' import { SellRow } from './sell-row' import { PlayMoneyDisclaimer } from './play-money-disclaimer' import { Row } from './layout/row' import { useUnfilledBets } from 'web/hooks/use-bets' import { Bet } from 'common/bet' import { getProbability } from 'common/calculate' import { useFocus } from 'web/hooks/use-focus' import { isAndroid, isIOS } from 'web/lib/util/device' import { APIError, placeBet } from 'web/lib/firebase/api' import { track } from '@amplitude/analytics-browser' /** Button that opens BetPanel in a new modal */ export default function BetButton(props: { contract: CPMMBinaryContract | PseudoNumericContract className?: string btnClassName?: string betPanelClassName?: string }) { const { className, btnClassName, betPanelClassName, contract } = props const [open, setOpen] = useState(false) const user = useUser() const userBets = useUserContractBets(user?.id, contract.id) const { yesShares, noShares, hasYesShares, hasNoShares } = useSaveBinaryShares(contract, userBets) const { outcomeType } = contract const isPseudoNumeric = outcomeType === 'PSEUDO_NUMERIC' return ( <> {user ? ( ) : ( )} {user && (
{hasYesShares ? `(${Math.floor(yesShares)} ${ isPseudoNumeric ? 'HIGHER' : 'YES' })` : hasNoShares ? `(${Math.floor(noShares)} ${isPseudoNumeric ? 'LOWER' : 'NO'})` : ''}
)} setOpen(false)} hasShares={hasYesShares || hasNoShares} /> ) } export function BinaryMobileBetting(props: { contract: CPMMBinaryContract className?: string }) { const { contract, className } = props const user = useUser() if (user) { return ( <> ) } else { return ( <> ) } } export function SignedInBinaryMobileBetting(props: { contract: CPMMBinaryContract user: User }) { const { contract, user } = props const [betChoice, setBetChoice] = useState<'YES' | 'NO' | undefined>( undefined ) const unfilledBets = useUnfilledBets(contract.id) ?? [] return ( <> {/* */} {/* */}