Set min and max for contract

This commit is contained in:
James Grugett 2022-05-06 17:00:45 -04:00
parent ca7e9541d7
commit 89ebf344df
2 changed files with 59 additions and 12 deletions

View File

@ -41,6 +41,8 @@ export const createContract = functions
ante: number
closeTime: number
tags?: string[]
min?: number
max?: number
},
context
) => {
@ -50,7 +52,8 @@ export const createContract = functions
const creator = await getUser(userId)
if (!creator) return { status: 'error', message: 'User not found' }
let { question, description, initialProb, closeTime, tags } = data
let { question, description, initialProb, closeTime, tags, min, max } =
data
if (!question || typeof question != 'string')
return { status: 'error', message: 'Missing or invalid question field' }
@ -121,8 +124,8 @@ export const createContract = functions
closeTime,
tags ?? [],
100,
0,
100
min ?? 0,
max ?? 100
)
if (!isFree && ante) await chargeUser(creator.id, ante)

View File

@ -19,6 +19,7 @@ import { Row } from '../components/layout/row'
import { MAX_DESCRIPTION_LENGTH, outcomeType } from '../../common/contract'
import { formatMoney } from '../../common/util/format'
import { useHasCreatedContractToday } from '../hooks/use-has-created-contract-today'
import { removeUndefinedProps } from '../../common/util/object'
export default function Create() {
const [question, setQuestion] = useState('')
@ -66,6 +67,8 @@ export function NewContract(props: { question: string; tag?: string }) {
const [outcomeType, setOutcomeType] = useState<outcomeType>('BINARY')
const [initialProb, setInitialProb] = useState(50)
const [min, setMin] = useState<number | undefined>()
const [max, setMax] = useState<number | undefined>()
const [description, setDescription] = useState('')
const [tagText, setTagText] = useState<string>(tag ?? '')
const tags = parseWordsAsTags(tagText)
@ -110,15 +113,19 @@ export function NewContract(props: { question: string; tag?: string }) {
setIsSubmitting(true)
const result: any = await createContract({
question,
outcomeType,
description,
initialProb,
ante,
closeTime,
tags,
}).then((r) => r.data || {})
const result: any = await createContract(
removeUndefinedProps({
question,
outcomeType,
description,
initialProb,
ante,
closeTime,
tags,
min,
max,
})
).then((r) => r.data || {})
if (result.status !== 'success') {
console.log('error creating contract', result)
@ -191,6 +198,43 @@ export function NewContract(props: { question: string; tag?: string }) {
</div>
)}
{outcomeType === 'NUMERIC' && (
<div className="form-control">
<label className="label">
<span className="mb-1">Value range (min, max)</span>
</label>
<Row className="gap-2">
<input
type="number"
className="input input-bordered"
placeholder="MIN"
onClick={(e) => e.stopPropagation()}
onChange={(e) =>
setMin(isNaN(+e.target.value) ? undefined : +e.target.value)
}
min={0}
max={Number.MAX_SAFE_INTEGER}
disabled={isSubmitting}
value={min}
/>
<input
type="number"
className="input input-bordered"
placeholder="MAX"
onClick={(e) => e.stopPropagation()}
onChange={(e) =>
setMax(isNaN(+e.target.value) ? undefined : +e.target.value)
}
min={0}
max={Number.MAX_SAFE_INTEGER}
disabled={isSubmitting}
value={max}
/>
</Row>
</div>
)}
<Spacer h={4} />
<div className="form-control mb-1 items-start">