diff --git a/web/lib/service/create-contract.ts b/web/lib/service/create-contract.ts index 966115b0..7c7a59df 100644 --- a/web/lib/service/create-contract.ts +++ b/web/lib/service/create-contract.ts @@ -12,7 +12,8 @@ export async function createContract( question: string, description: string, initialProb: number, - creator: User + creator: User, + closeTime?: number ) { const proposedSlug = slugify(question).substring(0, 35) @@ -45,6 +46,9 @@ export async function createContract( createdTime: Date.now(), lastUpdatedTime: Date.now(), } + if (closeTime) { + contract.closeTime = closeTime + } return await pushNewContract(contract) } diff --git a/web/pages/create.tsx b/web/pages/create.tsx index 9e228c14..ca14f285 100644 --- a/web/pages/create.tsx +++ b/web/pages/create.tsx @@ -10,6 +10,7 @@ import { createContract } from '../lib/service/create-contract' import { Page } from '../components/page' import { Row } from '../components/layout/row' import clsx from 'clsx' +import dayjs from 'dayjs' // Allow user to create a new contract export default function NewContract() { @@ -22,9 +23,23 @@ export default function NewContract() { const [initialProb, setInitialProb] = useState(50) const [question, setQuestion] = useState('') const [description, setDescription] = useState('') + const [closeDate, setCloseDate] = useState('') const [isSubmitting, setIsSubmitting] = useState(false) const [collapsed, setCollapsed] = useState(true) + // Given a date string like '2022-04-02', + // return the time just before midnight on that date (in the user's local time), as millis since epoch + function dateToMillis(date: string) { + return dayjs(date) + .set('hour', 23) + .set('minute', 59) + .set('second', 59) + .valueOf() + } + const closeTime = dateToMillis(closeDate) + // We'd like this to look like "Apr 2, 2022, 23:59:59 PM PT" but timezones are hard with dayjs + const formattedCloseTime = new Date(closeTime).toString() + async function submit() { // TODO: add more rigorous error handling for question if (!creator || !question) return @@ -35,7 +50,8 @@ export default function NewContract() { question, description, initialProb, - creator + creator, + closeTime ) await router.push(path(contract)) } @@ -78,6 +94,7 @@ export default function NewContract() { className="input input-bordered input-md" min={1} max={99} + // TODO: validate that this is a number between 1 and 99 onChange={(e) => setInitialProb(parseInt(e.target.value))} /> % @@ -121,19 +138,23 @@ export default function NewContract() {
e.stopPropagation()} - value="2012-07-22" - min="2022-01-01" - max="2022-12-31" + onChange={(e) => setCloseDate(e.target.value || '')} + value={closeDate} />
+