Refactor to load bets once on market page
This commit is contained in:
parent
e28dfaaa80
commit
a68e943d0b
|
@ -7,7 +7,6 @@ import { memo } from 'react'
|
|||
import { Bet } from 'common/bet'
|
||||
import { FreeResponseContract } from 'common/contract'
|
||||
import { getOutcomeProbability } from 'common/calculate'
|
||||
import { useBets } from 'web/hooks/use-bets'
|
||||
import { useWindowSize } from 'web/hooks/use-window-size'
|
||||
|
||||
const NUM_LINES = 6
|
||||
|
@ -17,11 +16,9 @@ export const AnswersGraph = memo(function AnswersGraph(props: {
|
|||
bets: Bet[]
|
||||
height?: number
|
||||
}) {
|
||||
const { contract, height } = props
|
||||
const { contract, bets, height } = props
|
||||
const { createdTime, resolutionTime, closeTime, answers } = contract
|
||||
|
||||
const bets = useBets(contract.id) ?? props.bets
|
||||
|
||||
const { probsByOutcome, sortedOutcomes } = computeProbsByOutcome(
|
||||
bets,
|
||||
contract
|
||||
|
|
|
@ -30,7 +30,10 @@ export function ContractInfoDialog(props: { contract: Contract; bets: Bet[] }) {
|
|||
const formatTime = (dt: number) => dayjs(dt).format('MMM DD, YYYY hh:mm a z')
|
||||
|
||||
const { createdTime, closeTime, resolutionTime } = contract
|
||||
const tradersCount = uniqBy(bets, 'userId').length
|
||||
const tradersCount = uniqBy(
|
||||
bets.filter((bet) => !bet.isAnte),
|
||||
'userId'
|
||||
).length
|
||||
|
||||
return (
|
||||
<>
|
||||
|
|
|
@ -5,7 +5,6 @@ import { memo } from 'react'
|
|||
import { Bet } from 'common/bet'
|
||||
import { getInitialProbability } from 'common/calculate'
|
||||
import { BinaryContract } from 'common/contract'
|
||||
import { useBetsWithoutAntes } from 'web/hooks/use-bets'
|
||||
import { useWindowSize } from 'web/hooks/use-window-size'
|
||||
|
||||
export const ContractProbGraph = memo(function ContractProbGraph(props: {
|
||||
|
@ -16,9 +15,7 @@ export const ContractProbGraph = memo(function ContractProbGraph(props: {
|
|||
const { contract, height } = props
|
||||
const { resolutionTime, closeTime } = contract
|
||||
|
||||
const bets = useBetsWithoutAntes(contract, props.bets).filter(
|
||||
(b) => !b.isRedemption
|
||||
)
|
||||
const bets = props.bets.filter((bet) => !bet.isAnte && !bet.isRedemption)
|
||||
|
||||
const startProb = getInitialProbability(contract)
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ import { Bet } from 'common/bet'
|
|||
import { Contract } from 'common/contract'
|
||||
import { Comment } from 'web/lib/firebase/comments'
|
||||
import { User } from 'common/user'
|
||||
import { useBets } from 'web/hooks/use-bets'
|
||||
import { ContractActivity } from '../feed/contract-activity'
|
||||
import { ContractBetsTable, BetsSummary } from '../bets-list'
|
||||
import { Spacer } from '../layout/spacer'
|
||||
|
@ -15,12 +14,9 @@ export function ContractTabs(props: {
|
|||
bets: Bet[]
|
||||
comments: Comment[]
|
||||
}) {
|
||||
const { contract, user, comments } = props
|
||||
const { contract, user, bets, comments } = props
|
||||
const { outcomeType } = contract
|
||||
|
||||
const bets = useBets(contract.id) ?? props.bets
|
||||
// Decending creation time.
|
||||
bets.sort((bet1, bet2) => bet2.createdTime - bet1.createdTime)
|
||||
const userBets = user && bets.filter((bet) => bet.userId === user.id)
|
||||
|
||||
const betActivity = (
|
||||
|
|
|
@ -38,6 +38,7 @@ import { FeedComment } from 'web/components/feed/feed-comments'
|
|||
import { FeedBet } from 'web/components/feed/feed-bets'
|
||||
import { useIsIframe } from 'web/hooks/use-is-iframe'
|
||||
import ContractEmbedPage from '../embed/[username]/[contractSlug]'
|
||||
import { useBets } from 'web/hooks/use-bets'
|
||||
|
||||
export const getStaticProps = fromPropz(getStaticPropz)
|
||||
export async function getStaticPropz(props: {
|
||||
|
@ -84,42 +85,44 @@ export default function ContractPage(props: {
|
|||
bets: [],
|
||||
slug: '',
|
||||
}
|
||||
return <ContractPageContent {...props} />
|
||||
}
|
||||
|
||||
export function ContractPageContent(props: Parameters<typeof ContractPage>[0]) {
|
||||
const { backToHome } = props
|
||||
|
||||
const user = useUser()
|
||||
const { width, height } = useWindowSize()
|
||||
|
||||
const contract = useContractWithPreload(props.contract)
|
||||
const { bets, comments } = props
|
||||
const [showConfetti, setShowConfetti] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
const shouldSeeConfetti = !!(
|
||||
user &&
|
||||
contract &&
|
||||
contract.creatorId === user.id &&
|
||||
Date.now() - contract.createdTime < 10 * 1000
|
||||
)
|
||||
setShowConfetti(shouldSeeConfetti)
|
||||
}, [contract, user])
|
||||
|
||||
const inIframe = useIsIframe()
|
||||
if (inIframe) {
|
||||
return <ContractEmbedPage {...props} />
|
||||
}
|
||||
|
||||
// Sort for now to see if bug is fixed.
|
||||
comments.sort((c1, c2) => c1.createdTime - c2.createdTime)
|
||||
bets.sort((bet1, bet2) => bet1.createdTime - bet2.createdTime)
|
||||
|
||||
if (!contract) {
|
||||
return <Custom404 />
|
||||
}
|
||||
|
||||
return <ContractPageContent {...{ ...props, contract }} />
|
||||
}
|
||||
|
||||
export function ContractPageContent(
|
||||
props: Parameters<typeof ContractPage>[0] & { contract: Contract }
|
||||
) {
|
||||
const { contract, backToHome, comments } = props
|
||||
|
||||
const bets = useBets(contract.id) ?? props.bets
|
||||
// Sort for now to see if bug is fixed.
|
||||
comments.sort((c1, c2) => c1.createdTime - c2.createdTime)
|
||||
|
||||
const user = useUser()
|
||||
const { width, height } = useWindowSize()
|
||||
|
||||
const [showConfetti, setShowConfetti] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
const shouldSeeConfetti = !!(
|
||||
user &&
|
||||
contract.creatorId === user.id &&
|
||||
Date.now() - contract.createdTime < 10 * 1000
|
||||
)
|
||||
setShowConfetti(shouldSeeConfetti)
|
||||
}, [contract, user])
|
||||
|
||||
const { creatorId, isResolved, question, outcomeType } = contract
|
||||
|
||||
const isCreator = user?.id === creatorId
|
||||
|
@ -181,7 +184,7 @@ export function ContractPageContent(props: Parameters<typeof ContractPage>[0]) {
|
|||
|
||||
<ContractOverview
|
||||
contract={contract}
|
||||
bets={bets ?? []}
|
||||
bets={bets}
|
||||
comments={comments ?? []}
|
||||
/>
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ export default function ContractEmbedPage(props: {
|
|||
|
||||
function ContractEmbed(props: { contract: Contract; bets: Bet[] }) {
|
||||
const { contract, bets } = props
|
||||
const { question, resolution, outcomeType } = contract
|
||||
const { question, outcomeType } = contract
|
||||
|
||||
const isBinary = outcomeType === 'BINARY'
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user