manifold/web/hooks/use-has-created-contract-today.ts

61 lines
1.7 KiB
TypeScript
Raw Normal View History

import { listContracts } from 'web/lib/firebase/contracts'
import { useEffect, useState } from 'react'
import { User } from 'common/user'
import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'
dayjs.extend(utc)
let sessionCreatedContractToday = true
2022-05-17 15:32:10 +00:00
export function getUtcFreeMarketResetTime(previous: boolean) {
const localTimeNow = new Date()
const utc4pmToday = dayjs()
.utc()
.set('hour', 16)
.set('minute', 0)
.set('second', 0)
.set('millisecond', 0)
// if it's after 4pm UTC today
if (localTimeNow.getTime() > utc4pmToday.valueOf()) {
return previous
? // Return it as it is
utc4pmToday.valueOf()
: // Or add 24 hours to get the next 4pm UTC time:
utc4pmToday.valueOf() + 24 * 60 * 60 * 1000
}
// 4pm UTC today is coming up
return previous
? // Subtract 24 hours to get the previous 4pm UTC time:
utc4pmToday.valueOf() - 24 * 60 * 60 * 1000
: // Return it as it is
utc4pmToday.valueOf()
}
export const useHasCreatedContractToday = (user: User | null | undefined) => {
const [hasCreatedContractToday, setHasCreatedContractToday] = useState<
boolean | 'loading'
>('loading')
useEffect(() => {
setHasCreatedContractToday('loading')
2022-05-23 21:14:44 +00:00
const previousResetTime = getUtcFreeMarketResetTime(true)
async function listUserContractsForToday() {
if (!user) return
const contracts = await listContracts(user.id)
const todayContracts = contracts.filter(
2022-05-23 21:14:44 +00:00
(contract) => contract.createdTime > previousResetTime
)
2022-05-17 15:32:10 +00:00
sessionCreatedContractToday = todayContracts.length > 0
setHasCreatedContractToday(sessionCreatedContractToday)
}
listUserContractsForToday()
}, [user])
return hasCreatedContractToday
}