From 274951742254c914710fb9c1dffea642ee0bec3e Mon Sep 17 00:00:00 2001 From: Marshall Polaris Date: Tue, 30 Aug 2022 15:08:45 -0700 Subject: [PATCH] Order bets in Firestore instead of on client --- web/components/contract/contract-overview.tsx | 2 +- web/lib/firebase/bets.ts | 30 ++++++++----------- web/pages/embed/[username]/[contractSlug].tsx | 2 -- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/web/components/contract/contract-overview.tsx b/web/components/contract/contract-overview.tsx index 37639d79..78ae1e78 100644 --- a/web/components/contract/contract-overview.tsx +++ b/web/components/contract/contract-overview.tsx @@ -140,7 +140,7 @@ export const ContractOverview = (props: {
{(isBinary || isPseudoNumeric) && ( - + )}{' '} {(outcomeType === 'FREE_RESPONSE' || outcomeType === 'MULTIPLE_CHOICE') && ( diff --git a/web/lib/firebase/bets.ts b/web/lib/firebase/bets.ts index 2a095d32..7f44786a 100644 --- a/web/lib/firebase/bets.ts +++ b/web/lib/firebase/bets.ts @@ -28,9 +28,9 @@ function getBetsCollection(contractId: string) { } export async function listAllBets(contractId: string) { - const bets = await getValues(getBetsCollection(contractId)) - bets.sort((bet1, bet2) => bet1.createdTime - bet2.createdTime) - return bets + return await getValues( + query(getBetsCollection(contractId), orderBy('createdTime', 'desc')) + ) } const DAY_IN_MS = 24 * 60 * 60 * 1000 @@ -64,10 +64,10 @@ export function listenForBets( contractId: string, setBets: (bets: Bet[]) => void ) { - return listenForValues(getBetsCollection(contractId), (bets) => { - bets.sort((bet1, bet2) => bet1.createdTime - bet2.createdTime) - setBets(bets) - }) + return listenForValues( + query(getBetsCollection(contractId), orderBy('createdTime', 'desc')), + setBets + ) } export async function getUserBets( @@ -147,12 +147,10 @@ export function listenForUserContractBets( ) { const betsQuery = query( collection(db, 'contracts', contractId, 'bets'), - where('userId', '==', userId) + where('userId', '==', userId), + orderBy('createdTime', 'desc') ) - return listenForValues(betsQuery, (bets) => { - bets.sort((bet1, bet2) => bet1.createdTime - bet2.createdTime) - setBets(bets) - }) + return listenForValues(betsQuery, setBets) } export function listenForUnfilledBets( @@ -162,12 +160,10 @@ export function listenForUnfilledBets( const betsQuery = query( collection(db, 'contracts', contractId, 'bets'), where('isFilled', '==', false), - where('isCancelled', '==', false) + where('isCancelled', '==', false), + orderBy('createdTime', 'desc') ) - return listenForValues(betsQuery, (bets) => { - bets.sort((bet1, bet2) => bet1.createdTime - bet2.createdTime) - setBets(bets) - }) + return listenForValues(betsQuery, setBets) } export function withoutAnteBets(contract: Contract, bets?: Bet[]) { diff --git a/web/pages/embed/[username]/[contractSlug].tsx b/web/pages/embed/[username]/[contractSlug].tsx index afec84bb..02dbdf36 100644 --- a/web/pages/embed/[username]/[contractSlug].tsx +++ b/web/pages/embed/[username]/[contractSlug].tsx @@ -71,8 +71,6 @@ export default function ContractEmbedPage(props: { const contract = useContractWithPreload(props.contract) const { bets } = props - bets.sort((bet1, bet2) => bet1.createdTime - bet2.createdTime) - if (!contract) { return }