From a05c5dcf6589802b05ade4fbaf436d08c25747b2 Mon Sep 17 00:00:00 2001 From: James Grugett Date: Wed, 16 Feb 2022 16:26:52 -0600 Subject: [PATCH] None option converted to none of the above label at bottom of list. Button to resolve none. --- web/components/answers-panel.tsx | 30 +++++++++++++++++++++++------- web/components/contract-card.tsx | 2 ++ web/components/outcome-label.tsx | 2 ++ web/components/yes-no-selector.tsx | 14 +++++++++++--- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/web/components/answers-panel.tsx b/web/components/answers-panel.tsx index 277e9ccd..740626ef 100644 --- a/web/components/answers-panel.tsx +++ b/web/components/answers-panel.tsx @@ -14,7 +14,7 @@ import { Avatar } from './avatar' import { SiteLink } from './site-link' import { DateTimeTooltip } from './datetime-tooltip' import dayjs from 'dayjs' -import { BuyButton, ChooseCancelSelector } from './yes-no-selector' +import { BuyButton, ChooseNoneCancelSelector } from './yes-no-selector' import { Spacer } from './layout/spacer' import { formatMoney, @@ -44,7 +44,7 @@ export function AnswersPanel(props: { const answers = useAnswers(contract.id) ?? props.answers const [chosenAnswer, otherAnswers] = _.partition( - answers, + answers.filter((answer) => answer.id !== '0'), (answer) => answer.id === resolution ) const sortedAnswers = [ @@ -58,7 +58,7 @@ export function AnswersPanel(props: { const user = useUser() const [resolveOption, setResolveOption] = useState< - 'CHOOSE' | 'CANCEL' | undefined + 'CHOOSE' | 'NONE' | 'CANCEL' | undefined >() const [answerChoice, setAnswerChoice] = useState() @@ -75,6 +75,15 @@ export function AnswersPanel(props: { /> ))} + {sortedAnswers.length === 0 && ( +
No answers yet...
+ )} + +
+ None of the above:{' '} + {formatPercent(getOutcomeProbability(contract.totalShares, '0'))} +
+ {tradingAllowed(contract) && } {user?.id === creatorId && !resolution && ( @@ -418,8 +427,8 @@ function CreateAnswerInput(props: { contract: Contract<'MULTI'> }) { function AnswerResolvePanel(props: { contract: Contract<'MULTI'> - resolveOption: 'CHOOSE' | 'CANCEL' | undefined - setResolveOption: (option: 'CHOOSE' | 'CANCEL' | undefined) => void + resolveOption: 'CHOOSE' | 'NONE' | 'CANCEL' | undefined + setResolveOption: (option: 'CHOOSE' | 'NONE' | 'CANCEL' | undefined) => void answer: string | undefined clearAnswerChoice: () => void }) { @@ -440,7 +449,12 @@ function AnswerResolvePanel(props: { setIsSubmitting(true) const result = await resolveMarket({ - outcome: resolveOption === 'CHOOSE' ? (answer as string) : 'CANCEL', + outcome: + resolveOption === 'CHOOSE' + ? (answer as string) + : resolveOption === 'NONE' + ? '0' + : 'CANCEL', contractId: contract.id, }).then((r) => r.data as any) @@ -455,6 +469,8 @@ function AnswerResolvePanel(props: { const resolutionButtonClass = resolveOption === 'CANCEL' ? 'bg-yellow-400 hover:bg-yellow-500' + : resolveOption === 'NONE' + ? 'bg-red-400 hover:bg-red-500' : resolveOption === 'CHOOSE' && answer ? 'btn-primary' : 'btn-disabled' @@ -463,7 +479,7 @@ function AnswerResolvePanel(props: {
Resolve your market
- NONE + return #{props.number} } diff --git a/web/components/yes-no-selector.tsx b/web/components/yes-no-selector.tsx index ebc0ab7b..70f91e6a 100644 --- a/web/components/yes-no-selector.tsx +++ b/web/components/yes-no-selector.tsx @@ -90,9 +90,9 @@ export function YesNoCancelSelector(props: { ) } -export function ChooseCancelSelector(props: { - selected: 'CHOOSE' | 'CANCEL' | undefined - onSelect: (selected: 'CHOOSE' | 'CANCEL') => void +export function ChooseNoneCancelSelector(props: { + selected: 'CHOOSE' | 'NONE' | 'CANCEL' | undefined + onSelect: (selected: 'CHOOSE' | 'NONE' | 'CANCEL') => void className?: string btnClassName?: string }) { @@ -110,6 +110,14 @@ export function ChooseCancelSelector(props: { Choose an answer + +