Moved answers

This commit is contained in:
Ian Philips 2022-04-26 09:11:12 -06:00
parent 9fbd521732
commit 0ce2b146ec
2 changed files with 54 additions and 36 deletions

View File

@ -11,6 +11,13 @@ import { AnswerItem } from './answer-item'
import { CreateAnswerPanel } from './create-answer-panel' import { CreateAnswerPanel } from './create-answer-panel'
import { AnswerResolvePanel } from './answer-resolve-panel' import { AnswerResolvePanel } from './answer-resolve-panel'
import { Spacer } from '../layout/spacer' import { Spacer } from '../layout/spacer'
import { FeedItems } from '../feed/feed-items'
import { ActivityItem } from '../feed/activity-items'
import { useBets } from '../../hooks/use-bets'
import { Bet } from '../../../common/bet'
import { User } from '../../../common/user'
import { getOutcomeProbability } from '../../../common/calculate'
import { Answer } from '../../../common/answer'
export function AnswersPanel(props: { export function AnswersPanel(props: {
contract: FullContract<DPM, FreeResponse> contract: FullContract<DPM, FreeResponse>
@ -47,6 +54,12 @@ export function AnswersPanel(props: {
const chosenTotal = _.sum(Object.values(chosenAnswers)) const chosenTotal = _.sum(Object.values(chosenAnswers))
const answerItems = getAnswers(
contract as FullContract<DPM, FreeResponse>,
useBets(contract.id) || ([] as Bet[]),
user
).reverse()
const onChoose = (answerId: string, prob: number) => { const onChoose = (answerId: string, prob: number) => {
if (resolveOption === 'CHOOSE') { if (resolveOption === 'CHOOSE') {
setChosenAnswers({ [answerId]: prob }) setChosenAnswers({ [answerId]: prob })
@ -102,6 +115,15 @@ export function AnswersPanel(props: {
<div className="pb-4 text-gray-500">No answers yet...</div> <div className="pb-4 text-gray-500">No answers yet...</div>
)} )}
{!resolveOption && sortedAnswers.length > 0 && (
<FeedItems
contract={contract}
items={answerItems}
className={''}
betRowClassName={''}
/>
)}
{tradingAllowed(contract) && {tradingAllowed(contract) &&
(!resolveOption || resolveOption === 'CANCEL') && ( (!resolveOption || resolveOption === 'CANCEL') && (
<CreateAnswerPanel contract={contract} /> <CreateAnswerPanel contract={contract} />
@ -121,3 +143,35 @@ export function AnswersPanel(props: {
</Col> </Col>
) )
} }
function getAnswers(
contract: FullContract<DPM, FreeResponse>,
bets: Bet[],
user: User | undefined | null
) {
let outcomes = _.uniq(bets.map((bet) => bet.outcome)).filter(
(outcome) => getOutcomeProbability(contract, outcome) > 0.0001
)
outcomes = _.sortBy(outcomes, (outcome) =>
getOutcomeProbability(contract, outcome)
)
const answers = outcomes
.map((outcome) => {
const answer = contract.answers?.find(
(answer) => answer.id === outcome
) as Answer
return {
id: outcome,
type: 'answer' as const,
contract,
answer,
items: [] as ActivityItem[],
user,
}
})
.filter((group) => group.answer)
return answers
}

View File

@ -256,38 +256,6 @@ function getAnswerGroups(
return answerGroups return answerGroups
} }
function getAnswers(
contract: FullContract<DPM, FreeResponse>,
bets: Bet[],
user: User | undefined | null
) {
let outcomes = _.uniq(bets.map((bet) => bet.outcome)).filter(
(outcome) => getOutcomeProbability(contract, outcome) > 0.0001
)
outcomes = _.sortBy(outcomes, (outcome) =>
getOutcomeProbability(contract, outcome)
)
const answerGroups = outcomes
.map((outcome) => {
const answer = contract.answers?.find(
(answer) => answer.id === outcome
) as Answer
return {
id: outcome,
type: 'answer' as const,
contract,
answer,
items: [] as ActivityItem[],
user,
}
})
.filter((group) => group.answer)
return answerGroups
}
function groupBetsAndComments( function groupBetsAndComments(
bets: Bet[], bets: Bet[],
comments: Comment[], comments: Comment[],
@ -387,10 +355,6 @@ export function getAllContractActivityItems(
commentsByBetId, commentsByBetId,
contract, contract,
}) })
items.push(
...getAnswers(contract as FullContract<DPM, FreeResponse>, bets, user)
)
} else { } else {
items.push( items.push(
...groupBetsAndComments(bets, comments, contract, user?.id, { ...groupBetsAndComments(bets, comments, contract, user?.id, {