diff --git a/web/components/contract/contract-card.tsx b/web/components/contract/contract-card.tsx index 84e2db8f..a98aa18a 100644 --- a/web/components/contract/contract-card.tsx +++ b/web/components/contract/contract-card.tsx @@ -28,6 +28,7 @@ import { AvatarDetails, MiscDetails } from './contract-details' import { getExpectedValue, getValueFromBucket } from 'common/calculate-dpm' import { QuickBet, ProbBar, getColor } from './quick-bet' import { useContractWithPreload } from 'web/hooks/use-contract' +import { useUser } from 'web/hooks/use-user' export function ContractCard(props: { contract: Contract @@ -40,10 +41,16 @@ export function ContractCard(props: { const { question, outcomeType } = contract const { resolution } = contract - const marketClosed = (contract.closeTime || Infinity) < Date.now() + const user = useUser() + + const marketClosed = + (contract.closeTime || Infinity) < Date.now() || !!resolution + const showQuickBet = !( + !user || marketClosed || - (outcomeType === 'FREE_RESPONSE' && getTopAnswer(contract) === undefined) + (outcomeType === 'FREE_RESPONSE' && getTopAnswer(contract) === undefined) || + outcomeType === 'NUMERIC' ) return ( @@ -96,7 +103,7 @@ export function ContractCard(props: { /> {showQuickBet ? ( - + ) : ( {outcomeType === 'BINARY' && ( diff --git a/web/components/contract/contracts-list.tsx b/web/components/contract/contracts-list.tsx index 019d701e..18718673 100644 --- a/web/components/contract/contracts-list.tsx +++ b/web/components/contract/contracts-list.tsx @@ -19,7 +19,7 @@ export function ContractsGrid(props: { const isBottomVisible = useIsVisible(elem) useEffect(() => { - if (isBottomVisible) { + if (isBottomVisible && hasMore) { loadMore() } }, [isBottomVisible, hasMore, loadMore]) diff --git a/web/components/contract/quick-bet.tsx b/web/components/contract/quick-bet.tsx index 03de78ef..77415d97 100644 --- a/web/components/contract/quick-bet.tsx +++ b/web/components/contract/quick-bet.tsx @@ -15,6 +15,7 @@ import { FreeResponseContract, resolution, } from 'common/contract' +import { User } from 'common/user' import { formatLargeNumber, formatMoney, @@ -22,7 +23,6 @@ import { } from 'common/util/format' import { useState } from 'react' import toast from 'react-hot-toast' -import { useUser } from 'web/hooks/use-user' import { useUserContractBets } from 'web/hooks/use-user-bets' import { placeBet } from 'web/lib/firebase/api-call' import { getBinaryProb, getBinaryProbPercent } from 'web/lib/firebase/contracts' @@ -34,11 +34,10 @@ import { useSaveShares } from '../use-save-shares' const BET_SIZE = 10 -export function QuickBet(props: { contract: Contract }) { - const { contract } = props +export function QuickBet(props: { contract: Contract; user: User }) { + const { contract, user } = props - const user = useUser() - const userBets = useUserContractBets(user?.id, contract.id) + const userBets = useUserContractBets(user.id, contract.id) const topAnswer = contract.outcomeType === 'FREE_RESPONSE' ? getTopAnswer(contract as FreeResponseContract) diff --git a/web/components/feed/activity-items.ts b/web/components/feed/activity-items.ts index b8d99598..fce2cdc4 100644 --- a/web/components/feed/activity-items.ts +++ b/web/components/feed/activity-items.ts @@ -479,9 +479,7 @@ export function getRecentContractActivityItems( } ) { const { contractPath } = options - bets = bets - .filter((bet) => !bet.isRedemption) - .sort((b1, b2) => b1.createdTime - b2.createdTime) + bets = bets.sort((b1, b2) => b1.createdTime - b2.createdTime) comments = comments.sort((c1, c2) => c1.createdTime - c2.createdTime) const questionItem: QuestionItem = { diff --git a/web/components/feed/contract-activity.tsx b/web/components/feed/contract-activity.tsx index e061f475..a203bfa9 100644 --- a/web/components/feed/contract-activity.tsx +++ b/web/components/feed/contract-activity.tsx @@ -39,7 +39,7 @@ export function ContractActivity(props: { // eslint-disable-next-line react-hooks/rules-of-hooks const updatedBets = mode === 'only-recent' ? undefined : useBets(contract.id) - const bets = updatedBets ?? props.bets + const bets = (updatedBets ?? props.bets).filter((bet) => !bet.isRedemption) const items = mode === 'only-recent' diff --git a/web/components/nav/sidebar.tsx b/web/components/nav/sidebar.tsx index 962593ed..33a84191 100644 --- a/web/components/nav/sidebar.tsx +++ b/web/components/nav/sidebar.tsx @@ -202,7 +202,7 @@ export default function Sidebar(props: { className?: string }) { {user ? ( ) : (