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 ? (
) : (