985cdd2537
* Loan backend: Add loanAmount field to Bet, manage loans up to max loan amount per market -- buy, sell, and resolve. * Loan frontend: show your loan amount in bet panel, answer bet panel * Resolve emails include full payout not subtracting loan * Exclude sold bets from current loan amount * Handle bets table for loans. Sell dialog explains how you will repay your loan. * Floor remaining balance * Fix layout of create answer bet info * Clean up Sell popup UI * Fix bug where listen query was not updating data. * Reword loan copy * Adjust bet panel width * Fix loan calc on front end * Add comment for includeMetadataChanges. Co-authored-by: Austin Chen <akrolsmir@gmail.com>
55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
import _ from 'lodash'
|
|
import { useEffect, useState } from 'react'
|
|
import {
|
|
Bet,
|
|
listenForUserBets,
|
|
listenForUserContractBets,
|
|
} from '../lib/firebase/bets'
|
|
|
|
export const useUserBets = (userId: string | undefined) => {
|
|
const [bets, setBets] = useState<Bet[] | undefined>(undefined)
|
|
|
|
useEffect(() => {
|
|
if (userId) return listenForUserBets(userId, setBets)
|
|
}, [userId])
|
|
|
|
return bets
|
|
}
|
|
|
|
export const useUserContractBets = (
|
|
userId: string | undefined,
|
|
contractId: string | undefined
|
|
) => {
|
|
const [bets, setBets] = useState<Bet[] | undefined>(undefined)
|
|
|
|
useEffect(() => {
|
|
if (userId && contractId)
|
|
return listenForUserContractBets(userId, contractId, setBets)
|
|
}, [userId, contractId])
|
|
|
|
return bets
|
|
}
|
|
|
|
export const useUserBetContracts = (userId: string | undefined) => {
|
|
const [contractIds, setContractIds] = useState<string[] | undefined>()
|
|
|
|
useEffect(() => {
|
|
if (userId) {
|
|
const key = `user-bet-contractIds-${userId}`
|
|
|
|
const userBetContractJson = localStorage.getItem(key)
|
|
if (userBetContractJson) {
|
|
setContractIds(JSON.parse(userBetContractJson))
|
|
}
|
|
|
|
return listenForUserBets(userId, (bets) => {
|
|
const contractIds = _.uniq(bets.map((bet) => bet.contractId))
|
|
setContractIds(contractIds)
|
|
localStorage.setItem(key, JSON.stringify(contractIds))
|
|
})
|
|
}
|
|
}, [userId])
|
|
|
|
return contractIds
|
|
}
|