From 43941cd21202f7aeaaf408249e8246f504c5d475 Mon Sep 17 00:00:00 2001 From: jahooma Date: Tue, 14 Dec 2021 00:12:25 -0600 Subject: [PATCH] Simple market resolved panel --- functions/src/types/contract.ts | 2 +- web/components/resolved-panel.tsx | 57 +++++++++++++++++++++++++++++ web/lib/firebase/contracts.ts | 2 +- web/pages/contract/[contractId].tsx | 19 ++++++++-- 4 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 web/components/resolved-panel.tsx diff --git a/functions/src/types/contract.ts b/functions/src/types/contract.ts index 68e74186..15f256fd 100644 --- a/functions/src/types/contract.ts +++ b/functions/src/types/contract.ts @@ -16,7 +16,7 @@ export type Contract = { lastUpdatedTime: number // If the question or description was changed closeTime?: number // When no more trading is allowed - // isResolved: boolean + isResolved: boolean resolutionTime?: 10293849 // When the contract creator resolved the market; 0 if unresolved resolution?: 'YES' | 'NO' | 'CANCEL' // Chosen by creator; must be one of outcomes } \ No newline at end of file diff --git a/web/components/resolved-panel.tsx b/web/components/resolved-panel.tsx new file mode 100644 index 00000000..223476fc --- /dev/null +++ b/web/components/resolved-panel.tsx @@ -0,0 +1,57 @@ +import clsx from 'clsx' +import dayjs from 'dayjs' +import React from 'react' + +import { Contract } from '../lib/firebase/contracts' +import { formatMoney } from '../lib/util/format' +import { Col } from './layout/col' +import { Spacer } from './layout/spacer' + +export function ResolvedPanel(props: { + contract: Contract + className?: string +}) { + const { contract, className } = props + + const { resolution, resolutionTime, pot, seedAmounts } = contract + + const total = pot.YES + pot.NO - seedAmounts.YES - seedAmounts.NO + + const color = + resolution === 'YES' + ? 'text-primary' + : resolution === 'NO' + ? 'text-red-400' + : resolution === 'CANCEL' + ? 'text-yellow-400' + : 'text-gray-500' + + return ( + +
+ Resolved: {resolution} +
+ + +
+ {dayjs(resolutionTime).format('MMM D, HH:mma')} +
+ + +
+ {resolution === 'YES' ? ( + <>Yes bettors have collectively won {formatMoney(total)}. + ) : resolution === 'NO' ? ( + <>No bettors have collectively won {formatMoney(total)}. + ) : ( + <>All bets have been returned. + )} +
+ + ) +} diff --git a/web/lib/firebase/contracts.ts b/web/lib/firebase/contracts.ts index b5b5ea4e..07313abb 100644 --- a/web/lib/firebase/contracts.ts +++ b/web/lib/firebase/contracts.ts @@ -30,7 +30,7 @@ export type Contract = { lastUpdatedTime: number // If the question or description was changed closeTime?: number // When no more trading is allowed - // isResolved: boolean + isResolved: boolean resolutionTime?: 10293849 // When the contract creator resolved the market; 0 if unresolved resolution?: 'YES' | 'NO' | 'CANCEL' // Chosen by creator; must be one of outcomes } diff --git a/web/pages/contract/[contractId].tsx b/web/pages/contract/[contractId].tsx index 83f696a5..248cf6b5 100644 --- a/web/pages/contract/[contractId].tsx +++ b/web/pages/contract/[contractId].tsx @@ -7,6 +7,7 @@ import { BetPanel } from '../../components/bet-panel' import { Col } from '../../components/layout/col' import { useUser } from '../../hooks/use-user' import { ResolutionPanel } from '../../components/resolution-panel' +import { ResolvedPanel } from '../../components/resolved-panel' export default function ContractPage() { const user = useUser() @@ -24,19 +25,29 @@ export default function ContractPage() { return
Contract not found...
} - const isCreator = user?.id === contract.creatorId + const { creatorId, isResolved } = contract + const isCreator = user?.id === creatorId return (
- +
- {isCreator ? ( - + {isResolved ? ( + + ) : isCreator ? ( + ) : ( )}