Handle free response outcomes for yes/no shares (#338)
This commit is contained in:
parent
1334840ee0
commit
0c3fa9f065
|
@ -38,16 +38,20 @@ export function QuickBet(props: { contract: Contract }) {
|
||||||
|
|
||||||
const user = useUser()
|
const user = useUser()
|
||||||
const userBets = useUserContractBets(user?.id, contract.id)
|
const userBets = useUserContractBets(user?.id, contract.id)
|
||||||
|
const topAnswer =
|
||||||
|
contract.outcomeType === 'FREE_RESPONSE'
|
||||||
|
? getTopAnswer(contract as FreeResponseContract)
|
||||||
|
: undefined
|
||||||
|
|
||||||
|
// TODO: yes/no from useSaveShares doesn't work on numeric contracts
|
||||||
const { yesFloorShares, noFloorShares } = useSaveShares(
|
const { yesFloorShares, noFloorShares } = useSaveShares(
|
||||||
contract as FullContract<CPMM | DPM, Binary>,
|
contract as FullContract<DPM | CPMM, Binary | FreeResponseContract>,
|
||||||
userBets
|
userBets,
|
||||||
|
topAnswer?.number.toString() || undefined
|
||||||
)
|
)
|
||||||
// TODO: This relies on a hack in useSaveShares, where noFloorShares includes
|
const hasUpShares = yesFloorShares || contract.outcomeType === 'NUMERIC'
|
||||||
// all non-YES shares. Ideally, useSaveShares should group by all outcomes
|
|
||||||
const hasUpShares =
|
|
||||||
contract.outcomeType === 'BINARY' ? yesFloorShares : noFloorShares
|
|
||||||
const hasDownShares =
|
const hasDownShares =
|
||||||
contract.outcomeType === 'BINARY' ? noFloorShares : yesFloorShares
|
noFloorShares && yesFloorShares <= 0 && contract.outcomeType !== 'NUMERIC'
|
||||||
|
|
||||||
const [upHover, setUpHover] = useState(false)
|
const [upHover, setUpHover] = useState(false)
|
||||||
const [downHover, setDownHover] = useState(false)
|
const [downHover, setDownHover] = useState(false)
|
||||||
|
|
|
@ -1,11 +1,18 @@
|
||||||
import { Binary, CPMM, DPM, FullContract } from 'common/contract'
|
import {
|
||||||
|
Binary,
|
||||||
|
CPMM,
|
||||||
|
DPM,
|
||||||
|
FreeResponseContract,
|
||||||
|
FullContract,
|
||||||
|
} from 'common/contract'
|
||||||
import { Bet } from 'common/bet'
|
import { Bet } from 'common/bet'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { partition, sumBy } from 'lodash'
|
import { partition, sumBy } from 'lodash'
|
||||||
|
|
||||||
export const useSaveShares = (
|
export const useSaveShares = (
|
||||||
contract: FullContract<CPMM | DPM, Binary>,
|
contract: FullContract<CPMM | DPM, Binary | FreeResponseContract>,
|
||||||
userBets: Bet[] | undefined
|
userBets: Bet[] | undefined,
|
||||||
|
freeResponseAnswerOutcome?: string
|
||||||
) => {
|
) => {
|
||||||
const [savedShares, setSavedShares] = useState<
|
const [savedShares, setSavedShares] = useState<
|
||||||
| {
|
| {
|
||||||
|
@ -17,9 +24,11 @@ export const useSaveShares = (
|
||||||
| undefined
|
| undefined
|
||||||
>()
|
>()
|
||||||
|
|
||||||
const [yesBets, noBets] = partition(
|
// TODO: How do we handle numeric yes / no bets? - maybe bet amounts above vs below the highest peak
|
||||||
userBets ?? [],
|
const [yesBets, noBets] = partition(userBets ?? [], (bet) =>
|
||||||
(bet) => bet.outcome === 'YES'
|
freeResponseAnswerOutcome
|
||||||
|
? bet.outcome === freeResponseAnswerOutcome
|
||||||
|
: bet.outcome === 'YES'
|
||||||
)
|
)
|
||||||
const [yesShares, noShares] = [
|
const [yesShares, noShares] = [
|
||||||
sumBy(yesBets, (bet) => bet.shares),
|
sumBy(yesBets, (bet) => bet.shares),
|
||||||
|
|
Loading…
Reference in New Issue
Block a user