2022-01-04 07:21:14 +00:00
|
|
|
import { compute, Contract, deleteContract } from '../lib/firebase/contracts'
|
2021-12-10 14:56:17 +00:00
|
|
|
import { Col } from './layout/col'
|
|
|
|
import { Spacer } from './layout/spacer'
|
2021-12-12 22:14:52 +00:00
|
|
|
import { ContractProbGraph } from './contract-prob-graph'
|
2021-12-14 18:51:30 +00:00
|
|
|
import router from 'next/router'
|
|
|
|
import { useUser } from '../hooks/use-user'
|
2021-12-16 10:46:41 +00:00
|
|
|
import { Row } from './layout/row'
|
|
|
|
import dayjs from 'dayjs'
|
2021-12-19 09:24:37 +00:00
|
|
|
import { Linkify } from './linkify'
|
2021-12-20 05:15:18 +00:00
|
|
|
import clsx from 'clsx'
|
2022-01-02 20:53:42 +00:00
|
|
|
import { ContractDetails, ResolutionOrChance } from './contract-card'
|
2022-01-04 07:21:14 +00:00
|
|
|
import { ContractFeed } from './contract-feed'
|
2021-12-16 10:46:41 +00:00
|
|
|
|
2022-01-03 05:21:25 +00:00
|
|
|
function ContractCloseTime(props: { contract: Contract }) {
|
|
|
|
const closeTime = props.contract.closeTime
|
|
|
|
if (!closeTime) {
|
|
|
|
return null
|
|
|
|
}
|
|
|
|
return (
|
|
|
|
<div className="text-gray-500 text-sm">
|
|
|
|
Trading {closeTime > Date.now() ? 'closes' : 'closed'} at{' '}
|
|
|
|
{dayjs(closeTime).format('MMM D, h:mma')}
|
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2021-12-12 22:14:52 +00:00
|
|
|
export const ContractOverview = (props: {
|
|
|
|
contract: Contract
|
|
|
|
className?: string
|
|
|
|
}) => {
|
|
|
|
const { contract, className } = props
|
2021-12-16 10:46:41 +00:00
|
|
|
const { resolution, creatorId } = contract
|
2021-12-24 21:06:01 +00:00
|
|
|
const { probPercent, truePool } = compute(contract)
|
2021-12-10 14:56:17 +00:00
|
|
|
|
2021-12-14 18:51:30 +00:00
|
|
|
const user = useUser()
|
|
|
|
const isCreator = user?.id === creatorId
|
|
|
|
|
2021-12-10 14:56:17 +00:00
|
|
|
return (
|
2021-12-20 05:15:18 +00:00
|
|
|
<Col className={clsx('mb-6', className)}>
|
2022-01-02 19:09:01 +00:00
|
|
|
<Row className="justify-between gap-4">
|
|
|
|
<Col className="gap-4">
|
|
|
|
<div className="text-2xl md:text-3xl text-indigo-700">
|
2021-12-19 09:08:12 +00:00
|
|
|
<Linkify text={contract.question} />
|
2021-12-14 10:23:32 +00:00
|
|
|
</div>
|
|
|
|
|
2022-01-02 19:09:01 +00:00
|
|
|
<ResolutionOrChance
|
|
|
|
className="md:hidden"
|
|
|
|
resolution={resolution}
|
|
|
|
probPercent={probPercent}
|
2022-01-02 20:53:42 +00:00
|
|
|
large
|
2022-01-02 19:09:01 +00:00
|
|
|
/>
|
|
|
|
|
2021-12-14 10:23:32 +00:00
|
|
|
<ContractDetails contract={contract} />
|
2021-12-12 22:51:44 +00:00
|
|
|
</Col>
|
|
|
|
|
2022-01-02 19:09:01 +00:00
|
|
|
<ResolutionOrChance
|
|
|
|
className="hidden md:flex md:items-end"
|
|
|
|
resolution={resolution}
|
|
|
|
probPercent={probPercent}
|
2022-01-02 20:53:42 +00:00
|
|
|
large
|
2022-01-02 19:09:01 +00:00
|
|
|
/>
|
|
|
|
</Row>
|
2021-12-10 14:56:17 +00:00
|
|
|
|
|
|
|
<Spacer h={4} />
|
|
|
|
|
2021-12-12 22:14:52 +00:00
|
|
|
<ContractProbGraph contract={contract} />
|
2021-12-10 14:56:17 +00:00
|
|
|
|
|
|
|
<Spacer h={12} />
|
|
|
|
|
2022-01-03 05:21:25 +00:00
|
|
|
<ContractCloseTime contract={contract} />
|
|
|
|
|
2021-12-14 18:51:30 +00:00
|
|
|
{/* Show a delete button for contracts without any trading */}
|
2021-12-24 21:06:01 +00:00
|
|
|
{isCreator && truePool === 0 && (
|
2021-12-14 18:51:30 +00:00
|
|
|
<>
|
|
|
|
<Spacer h={8} />
|
|
|
|
<button
|
|
|
|
className="btn btn-xs btn-error btn-outline mt-1 max-w-fit self-end"
|
|
|
|
onClick={async (e) => {
|
|
|
|
e.preventDefault()
|
|
|
|
await deleteContract(contract.id)
|
|
|
|
router.push('/markets')
|
|
|
|
}}
|
|
|
|
>
|
|
|
|
Delete
|
|
|
|
</button>
|
|
|
|
</>
|
|
|
|
)}
|
2022-01-04 07:21:14 +00:00
|
|
|
|
|
|
|
<Spacer h={4} />
|
|
|
|
|
|
|
|
<ContractFeed contract={contract} />
|
2021-12-10 14:56:17 +00:00
|
|
|
</Col>
|
|
|
|
)
|
|
|
|
}
|