f48ae0170b
* sell bet * dev mode * single-pot no-refund payoff; bet selling * Increase default fetch size 25 -> 99 * Fix about page numbering * Don't flash no markets when loading on tag page. * Change Title to use body font * Make a bunch of predictions at once (#9) * Set up a page to make bulk predictions * Integrate preview into the same card * List created predictions * Make changes per James's comments * Increase the starting balance (#11) * Remove references to paying for our Mantic Dollars * Update simulator to use new calculations * Change simulator random to be evenly random again * Sell bet UI * Migrate contracts and bets script * Add comment to script * bets => trades; exclude sold bets * change sale formula * Change current value to uncapped sell value. * Disable sell button while selling * Update some 'bet' to 'trade' Co-authored-by: Austin Chen <akrolsmir@gmail.com> Co-authored-by: jahooma <jahooma@gmail.com>
64 lines
1.4 KiB
TypeScript
64 lines
1.4 KiB
TypeScript
import {
|
|
collection,
|
|
collectionGroup,
|
|
query,
|
|
onSnapshot,
|
|
where,
|
|
} from 'firebase/firestore'
|
|
import { db } from './init'
|
|
|
|
export type Bet = {
|
|
id: string
|
|
userId: string
|
|
contractId: string
|
|
|
|
amount: number // bet size; negative if SELL bet
|
|
outcome: 'YES' | 'NO'
|
|
shares: number // dynamic parimutuel pool weight; negative if SELL bet
|
|
|
|
probBefore: number
|
|
probAfter: number
|
|
|
|
sale?: {
|
|
amount: number // amount user makes from sale
|
|
betId: string // id of bet being sold
|
|
}
|
|
|
|
isSold?: boolean // true if this BUY bet has been sold
|
|
|
|
createdTime: number
|
|
}
|
|
|
|
function getBetsCollection(contractId: string) {
|
|
return collection(db, 'contracts', contractId, 'bets')
|
|
}
|
|
|
|
export function listenForBets(
|
|
contractId: string,
|
|
setBets: (bets: Bet[]) => void
|
|
) {
|
|
return onSnapshot(getBetsCollection(contractId), (snap) => {
|
|
const bets = snap.docs.map((doc) => doc.data() as Bet)
|
|
|
|
bets.sort((bet1, bet2) => bet1.createdTime - bet2.createdTime)
|
|
|
|
setBets(bets)
|
|
})
|
|
}
|
|
|
|
export function listenForUserBets(
|
|
userId: string,
|
|
setBets: (bets: Bet[]) => void
|
|
) {
|
|
const userQuery = query(
|
|
collectionGroup(db, 'bets'),
|
|
where('userId', '==', userId)
|
|
)
|
|
|
|
return onSnapshot(userQuery, (snap) => {
|
|
const bets = snap.docs.map((doc) => doc.data() as Bet)
|
|
bets.sort((bet1, bet2) => bet1.createdTime - bet2.createdTime)
|
|
setBets(bets)
|
|
})
|
|
}
|