import { CPMMContract } from 'common/contract' import { formatMoney } from 'common/util/format' import { useState } from 'react' import { useUser } from 'web/hooks/use-user' import { addSubsidy } from 'web/lib/firebase/api' import { track } from 'web/lib/service/analytics' import { AmountInput } from '../amount-input' import { Button } from '../button' import { InfoTooltip } from '../info-tooltip' import { Col } from '../layout/col' import { Modal } from '../layout/modal' import { Row } from '../layout/row' import { Title } from '../title' export function LiquidityModal(props: { contract: CPMMContract isOpen: boolean setOpen: (open: boolean) => void }) { const { contract, isOpen, setOpen } = props const { totalLiquidity } = contract return ( <div>Total liquidity subsidies: {formatMoney(totalLiquidity)}</div> <AddLiquidityPanel contract={contract as CPMMContract} /> </Col> </Modal> ) } function AddLiquidityPanel(props: { contract: CPMMContract }) { const { contract } = props const { id: contractId, slug } = contract const user = useUser() const [amount, setAmount] = useState<number | undefined>(undefined) const [error, setError] = useState<string | undefined>(undefined) const [isSuccess, setIsSuccess] = useState(false) const [isLoading, setIsLoading] = useState(false) const onAmountChange = (amount: number | undefined) => { setIsSuccess(false) setAmount(amount) // Check for errors. if (amount !== undefined) { if (user && user.balance < amount) { setError('Insufficient balance') } else if (amount < 1) { setError('Minimum amount: ' + formatMoney(1)) } else { setError(undefined) } } } const submit = () => { if (!amount) return setIsLoading(true) setIsSuccess(false) addSubsidy({ amount, contractId }) .then((_) => { setIsSuccess(true) setError(undefined) setIsLoading(false) }) .catch((_) => setError('Server error')) track('add liquidity', { amount, contractId, slug }) } return ( <> <div className="mb-4 text-gray-500"> Contribute your M$ to make this market more accurate by subsidizing trading.{' '} <InfoTooltip text="Liquidity is how much money traders can make if they're right. The more traders can earn, the greater the incentive to find the correct probability." /> </div> <Row> <AmountInput amount={amount} onChange={onAmountChange} label="M$" error={error} disabled={isLoading} inputClassName="w-28 mr-4" /> <Button size="md" color="blue" onClick={submit} disabled={isLoading}> Add </Button> </Row> {isSuccess && amount && ( <div>Success! Added {formatMoney(amount)} in liquidity.</div> )} {isLoading && <div>Processing...</div>} </> ) }