WarningConfirmationButton for bets
This commit is contained in:
parent
0dbb42aa69
commit
cd1d8ecd8a
|
@ -26,7 +26,7 @@ import { Bet } from 'common/bet'
|
||||||
import { track } from 'web/lib/service/analytics'
|
import { track } from 'web/lib/service/analytics'
|
||||||
import { BetSignUpPrompt } from '../sign-up-prompt'
|
import { BetSignUpPrompt } from '../sign-up-prompt'
|
||||||
import { isIOS } from 'web/lib/util/device'
|
import { isIOS } from 'web/lib/util/device'
|
||||||
import { AlertBox } from '../alert-box'
|
import { WarningConfirmationButton } from '../warning-confirmation-button'
|
||||||
|
|
||||||
export function AnswerBetPanel(props: {
|
export function AnswerBetPanel(props: {
|
||||||
answer: Answer
|
answer: Answer
|
||||||
|
@ -116,6 +116,15 @@ export function AnswerBetPanel(props: {
|
||||||
|
|
||||||
const bankrollFraction = (betAmount ?? 0) / (user?.balance ?? 1e9)
|
const bankrollFraction = (betAmount ?? 0) / (user?.balance ?? 1e9)
|
||||||
|
|
||||||
|
const warning =
|
||||||
|
(betAmount ?? 0) > 10 && bankrollFraction >= 0.5 && bankrollFraction <= 1
|
||||||
|
? `You might not want to spend ${formatPercent(
|
||||||
|
bankrollFraction
|
||||||
|
)} of your balance on a single bet. \n\nCurrent balance: ${formatMoney(
|
||||||
|
user?.balance ?? 0
|
||||||
|
)}`
|
||||||
|
: undefined
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Col className={clsx('px-2 pb-2 pt-4 sm:pt-0', className)}>
|
<Col className={clsx('px-2 pb-2 pt-4 sm:pt-0', className)}>
|
||||||
<Row className="items-center justify-between self-stretch">
|
<Row className="items-center justify-between self-stretch">
|
||||||
|
@ -148,21 +157,6 @@ export function AnswerBetPanel(props: {
|
||||||
showSliderOnMobile
|
showSliderOnMobile
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{(betAmount ?? 0) > 10 &&
|
|
||||||
bankrollFraction >= 0.5 &&
|
|
||||||
bankrollFraction <= 1 ? (
|
|
||||||
<AlertBox
|
|
||||||
title="Whoa, there!"
|
|
||||||
text={`You might not want to spend ${formatPercent(
|
|
||||||
bankrollFraction
|
|
||||||
)} of your balance on a single bet. \n\nCurrent balance: ${formatMoney(
|
|
||||||
user?.balance ?? 0
|
|
||||||
)}`}
|
|
||||||
/>
|
|
||||||
) : (
|
|
||||||
''
|
|
||||||
)}
|
|
||||||
|
|
||||||
<Col className="mt-3 w-full gap-3">
|
<Col className="mt-3 w-full gap-3">
|
||||||
<Row className="items-center justify-between text-sm">
|
<Row className="items-center justify-between text-sm">
|
||||||
<div className="text-gray-500">Probability</div>
|
<div className="text-gray-500">Probability</div>
|
||||||
|
@ -198,16 +192,17 @@ export function AnswerBetPanel(props: {
|
||||||
<Spacer h={6} />
|
<Spacer h={6} />
|
||||||
|
|
||||||
{user ? (
|
{user ? (
|
||||||
<button
|
<WarningConfirmationButton
|
||||||
className={clsx(
|
warning={warning}
|
||||||
|
onSubmit={submitBet}
|
||||||
|
isSubmitting={isSubmitting}
|
||||||
|
disabled={!!betDisabled}
|
||||||
|
openModalButtonClass={clsx(
|
||||||
'btn self-stretch',
|
'btn self-stretch',
|
||||||
betDisabled ? 'btn-disabled' : 'btn-primary',
|
betDisabled ? 'btn-disabled' : 'btn-primary',
|
||||||
isSubmitting ? 'loading' : ''
|
isSubmitting ? 'loading' : ''
|
||||||
)}
|
)}
|
||||||
onClick={betDisabled ? undefined : submitBet}
|
/>
|
||||||
>
|
|
||||||
{isSubmitting ? 'Submitting...' : 'Submit'}
|
|
||||||
</button>
|
|
||||||
) : (
|
) : (
|
||||||
<BetSignUpPrompt />
|
<BetSignUpPrompt />
|
||||||
)}
|
)}
|
||||||
|
|
|
@ -40,8 +40,8 @@ import { LimitBets } from './limit-bets'
|
||||||
import { PillButton } from './buttons/pill-button'
|
import { PillButton } from './buttons/pill-button'
|
||||||
import { YesNoSelector } from './yes-no-selector'
|
import { YesNoSelector } from './yes-no-selector'
|
||||||
import { PlayMoneyDisclaimer } from './play-money-disclaimer'
|
import { PlayMoneyDisclaimer } from './play-money-disclaimer'
|
||||||
import { AlertBox } from './alert-box'
|
|
||||||
import { isAndroid, isIOS } from 'web/lib/util/device'
|
import { isAndroid, isIOS } from 'web/lib/util/device'
|
||||||
|
import { WarningConfirmationButton } from './warning-confirmation-button'
|
||||||
|
|
||||||
export function BetPanel(props: {
|
export function BetPanel(props: {
|
||||||
contract: CPMMBinaryContract | PseudoNumericContract
|
contract: CPMMBinaryContract | PseudoNumericContract
|
||||||
|
@ -271,25 +271,15 @@ function BuyPanel(props: {
|
||||||
const bankrollFraction = (betAmount ?? 0) / (user?.balance ?? 1e9)
|
const bankrollFraction = (betAmount ?? 0) / (user?.balance ?? 1e9)
|
||||||
|
|
||||||
const warning =
|
const warning =
|
||||||
(betAmount ?? 0) > 10 &&
|
(betAmount ?? 0) > 10 && bankrollFraction >= 0.5 && bankrollFraction <= 1
|
||||||
bankrollFraction >= 0.5 &&
|
? `You might not want to spend ${formatPercent(
|
||||||
bankrollFraction <= 1 ? (
|
|
||||||
<AlertBox
|
|
||||||
title="Whoa, there!"
|
|
||||||
text={`You might not want to spend ${formatPercent(
|
|
||||||
bankrollFraction
|
bankrollFraction
|
||||||
)} of your balance on a single trade. \n\nCurrent balance: ${formatMoney(
|
)} of your balance on a single trade. \n\nCurrent balance: ${formatMoney(
|
||||||
user?.balance ?? 0
|
user?.balance ?? 0
|
||||||
)}`}
|
)}`
|
||||||
/>
|
: (betAmount ?? 0) > 10 && probChange >= 0.3 && bankrollFraction <= 1
|
||||||
) : (betAmount ?? 0) > 10 && probChange >= 0.3 && bankrollFraction <= 1 ? (
|
? `Are you sure you want to move the market by ${displayedDifference}?`
|
||||||
<AlertBox
|
: undefined
|
||||||
title="Whoa, there!"
|
|
||||||
text={`Are you sure you want to move the market by ${displayedDifference}?`}
|
|
||||||
/>
|
|
||||||
) : (
|
|
||||||
<></>
|
|
||||||
)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Col className={hidden ? 'hidden' : ''}>
|
<Col className={hidden ? 'hidden' : ''}>
|
||||||
|
@ -322,8 +312,6 @@ function BuyPanel(props: {
|
||||||
showSliderOnMobile
|
showSliderOnMobile
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{warning}
|
|
||||||
|
|
||||||
<Col className="mt-3 w-full gap-3">
|
<Col className="mt-3 w-full gap-3">
|
||||||
<Row className="items-center justify-between text-sm">
|
<Row className="items-center justify-between text-sm">
|
||||||
<div className="text-gray-500">
|
<div className="text-gray-500">
|
||||||
|
@ -364,20 +352,20 @@ function BuyPanel(props: {
|
||||||
<Spacer h={8} />
|
<Spacer h={8} />
|
||||||
|
|
||||||
{user && (
|
{user && (
|
||||||
<button
|
<WarningConfirmationButton
|
||||||
className={clsx(
|
warning={warning}
|
||||||
|
onSubmit={submitBet}
|
||||||
|
isSubmitting={isSubmitting}
|
||||||
|
disabled={!!betDisabled}
|
||||||
|
openModalButtonClass={clsx(
|
||||||
'btn mb-2 flex-1',
|
'btn mb-2 flex-1',
|
||||||
betDisabled
|
betDisabled
|
||||||
? 'btn-disabled'
|
? 'btn-disabled'
|
||||||
: outcome === 'YES'
|
: outcome === 'YES'
|
||||||
? 'btn-primary'
|
? 'btn-primary'
|
||||||
: 'border-none bg-red-400 hover:bg-red-500',
|
: 'border-none bg-red-400 hover:bg-red-500'
|
||||||
isSubmitting ? 'loading' : ''
|
|
||||||
)}
|
)}
|
||||||
onClick={betDisabled ? undefined : submitBet}
|
/>
|
||||||
>
|
|
||||||
{isSubmitting ? 'Submitting...' : 'Submit'}
|
|
||||||
</button>
|
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{wasSubmitted && <div className="mt-4">Trade submitted!</div>}
|
{wasSubmitted && <div className="mt-4">Trade submitted!</div>}
|
||||||
|
|
|
@ -47,13 +47,13 @@ export function ConfirmationButton(props: {
|
||||||
{children}
|
{children}
|
||||||
<Row className="gap-4">
|
<Row className="gap-4">
|
||||||
<div
|
<div
|
||||||
className={clsx('btn normal-case', cancelBtn?.className)}
|
className={clsx('btn', cancelBtn?.className)}
|
||||||
onClick={() => updateOpen(false)}
|
onClick={() => updateOpen(false)}
|
||||||
>
|
>
|
||||||
{cancelBtn?.label ?? 'Cancel'}
|
{cancelBtn?.label ?? 'Cancel'}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className={clsx('btn normal-case', submitBtn?.className)}
|
className={clsx('btn', submitBtn?.className)}
|
||||||
onClick={
|
onClick={
|
||||||
onSubmitWithSuccess
|
onSubmitWithSuccess
|
||||||
? () =>
|
? () =>
|
||||||
|
@ -69,7 +69,7 @@ export function ConfirmationButton(props: {
|
||||||
</Col>
|
</Col>
|
||||||
</Modal>
|
</Modal>
|
||||||
<div
|
<div
|
||||||
className={clsx('btn normal-case', openModalBtn.className)}
|
className={clsx('btn', openModalBtn.className)}
|
||||||
onClick={() => updateOpen(true)}
|
onClick={() => updateOpen(true)}
|
||||||
>
|
>
|
||||||
{openModalBtn.icon}
|
{openModalBtn.icon}
|
||||||
|
|
74
web/components/warning-confirmation-button.tsx
Normal file
74
web/components/warning-confirmation-button.tsx
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
import clsx from 'clsx'
|
||||||
|
import React from 'react'
|
||||||
|
|
||||||
|
import { Row } from './layout/row'
|
||||||
|
import { ConfirmationButton } from './confirmation-button'
|
||||||
|
import { ExclamationIcon } from '@heroicons/react/solid'
|
||||||
|
|
||||||
|
export function WarningConfirmationButton(props: {
|
||||||
|
warning?: string
|
||||||
|
onSubmit: () => void
|
||||||
|
disabled?: boolean
|
||||||
|
isSubmitting: boolean
|
||||||
|
openModalButtonClass?: string
|
||||||
|
submitButtonClassName?: string
|
||||||
|
}) {
|
||||||
|
const {
|
||||||
|
onSubmit,
|
||||||
|
warning,
|
||||||
|
disabled,
|
||||||
|
isSubmitting,
|
||||||
|
openModalButtonClass,
|
||||||
|
submitButtonClassName,
|
||||||
|
} = props
|
||||||
|
|
||||||
|
if (!warning) {
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
className={clsx(
|
||||||
|
openModalButtonClass,
|
||||||
|
isSubmitting ? 'loading' : '',
|
||||||
|
disabled && 'btn-disabled'
|
||||||
|
)}
|
||||||
|
onClick={onSubmit}
|
||||||
|
disabled={disabled}
|
||||||
|
>
|
||||||
|
{isSubmitting ? 'Submitting...' : 'Submit'}
|
||||||
|
</button>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ConfirmationButton
|
||||||
|
openModalBtn={{
|
||||||
|
className: clsx(
|
||||||
|
openModalButtonClass,
|
||||||
|
isSubmitting && 'btn-disabled loading'
|
||||||
|
),
|
||||||
|
label: 'Submit',
|
||||||
|
}}
|
||||||
|
cancelBtn={{
|
||||||
|
label: 'Cancel',
|
||||||
|
className: 'btn-warning',
|
||||||
|
}}
|
||||||
|
submitBtn={{
|
||||||
|
label: 'Submit',
|
||||||
|
className: clsx(
|
||||||
|
'border-none btn-sm btn-ghost self-center',
|
||||||
|
submitButtonClassName
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
onSubmit={onSubmit}
|
||||||
|
>
|
||||||
|
<Row className="items-center text-xl">
|
||||||
|
<ExclamationIcon
|
||||||
|
className="h-16 w-16 text-yellow-400"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
Whoa, there!
|
||||||
|
</Row>
|
||||||
|
|
||||||
|
<p>{warning}</p>
|
||||||
|
</ConfirmationButton>
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user