Remove unused bets (redemptions, antes) and sort by desc in query (#264)
* Remove unused bets and sort in query * remove console * Explicitly ignore or include redemptions * Pass options from parent function * Fix let=>const
This commit is contained in:
parent
8013862f15
commit
7d8ccb78a4
|
@ -45,8 +45,7 @@ type BetFilter = 'open' | 'closed' | 'resolved' | 'all'
|
||||||
|
|
||||||
export function BetsList(props: { user: User }) {
|
export function BetsList(props: { user: User }) {
|
||||||
const { user } = props
|
const { user } = props
|
||||||
const bets = useUserBets(user.id)
|
const bets = useUserBets(user.id, { includeRedemptions: true })
|
||||||
|
|
||||||
const [contracts, setContracts] = useState<Contract[] | undefined>()
|
const [contracts, setContracts] = useState<Contract[] | undefined>()
|
||||||
|
|
||||||
const [sort, setSort] = useState<BetSort>('newest')
|
const [sort, setSort] = useState<BetSort>('newest')
|
||||||
|
|
|
@ -66,7 +66,7 @@ export function UserPage(props: {
|
||||||
if (!user) return
|
if (!user) return
|
||||||
getUsersComments(user.id).then(setUsersComments)
|
getUsersComments(user.id).then(setUsersComments)
|
||||||
listContracts(user.id).then(setUsersContracts)
|
listContracts(user.id).then(setUsersContracts)
|
||||||
getUserBets(user.id).then(setUsersBets)
|
getUserBets(user.id, { includeRedemptions: false }).then(setUsersBets)
|
||||||
}, [user])
|
}, [user])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
@ -6,11 +6,14 @@ import {
|
||||||
listenForUserContractBets,
|
listenForUserContractBets,
|
||||||
} from 'web/lib/firebase/bets'
|
} from 'web/lib/firebase/bets'
|
||||||
|
|
||||||
export const useUserBets = (userId: string | undefined) => {
|
export const useUserBets = (
|
||||||
|
userId: string | undefined,
|
||||||
|
options: { includeRedemptions: boolean }
|
||||||
|
) => {
|
||||||
const [bets, setBets] = useState<Bet[] | undefined>(undefined)
|
const [bets, setBets] = useState<Bet[] | undefined>(undefined)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (userId) return listenForUserBets(userId, setBets)
|
if (userId) return listenForUserBets(userId, setBets, options)
|
||||||
}, [userId])
|
}, [userId])
|
||||||
|
|
||||||
return bets
|
return bets
|
||||||
|
@ -30,7 +33,10 @@ export const useUserContractBets = (
|
||||||
return bets
|
return bets
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useUserBetContracts = (userId: string | undefined) => {
|
export const useUserBetContracts = (
|
||||||
|
userId: string | undefined,
|
||||||
|
options: { includeRedemptions: boolean }
|
||||||
|
) => {
|
||||||
const [contractIds, setContractIds] = useState<string[] | undefined>()
|
const [contractIds, setContractIds] = useState<string[] | undefined>()
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -42,11 +48,15 @@ export const useUserBetContracts = (userId: string | undefined) => {
|
||||||
setContractIds(JSON.parse(userBetContractJson))
|
setContractIds(JSON.parse(userBetContractJson))
|
||||||
}
|
}
|
||||||
|
|
||||||
return listenForUserBets(userId, (bets) => {
|
return listenForUserBets(
|
||||||
const contractIds = _.uniq(bets.map((bet) => bet.contractId))
|
userId,
|
||||||
setContractIds(contractIds)
|
(bets) => {
|
||||||
localStorage.setItem(key, JSON.stringify(contractIds))
|
const contractIds = _.uniq(bets.map((bet) => bet.contractId))
|
||||||
})
|
setContractIds(contractIds)
|
||||||
|
localStorage.setItem(key, JSON.stringify(contractIds))
|
||||||
|
},
|
||||||
|
options
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}, [userId])
|
}, [userId])
|
||||||
|
|
||||||
|
|
|
@ -60,23 +60,39 @@ export function listenForBets(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getUserBets(userId: string) {
|
export async function getUserBets(
|
||||||
|
userId: string,
|
||||||
|
options: { includeRedemptions: boolean }
|
||||||
|
) {
|
||||||
|
const { includeRedemptions } = options
|
||||||
return getValues<Bet>(
|
return getValues<Bet>(
|
||||||
query(collectionGroup(db, 'bets'), where('userId', '==', userId))
|
query(collectionGroup(db, 'bets'), where('userId', '==', userId))
|
||||||
)
|
)
|
||||||
|
.then((bets) =>
|
||||||
|
bets.filter(
|
||||||
|
(bet) => (includeRedemptions || !bet.isRedemption) && !bet.isAnte
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.catch((reason) => reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function listenForUserBets(
|
export function listenForUserBets(
|
||||||
userId: string,
|
userId: string,
|
||||||
setBets: (bets: Bet[]) => void
|
setBets: (bets: Bet[]) => void,
|
||||||
|
options: { includeRedemptions: boolean }
|
||||||
) {
|
) {
|
||||||
|
const { includeRedemptions } = options
|
||||||
const userQuery = query(
|
const userQuery = query(
|
||||||
collectionGroup(db, 'bets'),
|
collectionGroup(db, 'bets'),
|
||||||
where('userId', '==', userId)
|
where('userId', '==', userId),
|
||||||
|
orderBy('createdTime', 'desc')
|
||||||
)
|
)
|
||||||
return listenForValues<Bet>(userQuery, (bets) => {
|
return listenForValues<Bet>(userQuery, (bets) => {
|
||||||
bets.sort((bet1, bet2) => bet1.createdTime - bet2.createdTime)
|
setBets(
|
||||||
setBets(bets)
|
bets.filter(
|
||||||
|
(bet) => (includeRedemptions || !bet.isRedemption) && !bet.isAnte
|
||||||
|
)
|
||||||
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user