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 { Bet } from 'common/bet'
|
||||||
import { FreeResponseContract } from 'common/contract'
|
import { FreeResponseContract } from 'common/contract'
|
||||||
import { getOutcomeProbability } from 'common/calculate'
|
import { getOutcomeProbability } from 'common/calculate'
|
||||||
import { useBets } from 'web/hooks/use-bets'
|
|
||||||
import { useWindowSize } from 'web/hooks/use-window-size'
|
import { useWindowSize } from 'web/hooks/use-window-size'
|
||||||
|
|
||||||
const NUM_LINES = 6
|
const NUM_LINES = 6
|
||||||
|
@ -17,11 +16,9 @@ export const AnswersGraph = memo(function AnswersGraph(props: {
|
||||||
bets: Bet[]
|
bets: Bet[]
|
||||||
height?: number
|
height?: number
|
||||||
}) {
|
}) {
|
||||||
const { contract, height } = props
|
const { contract, bets, height } = props
|
||||||
const { createdTime, resolutionTime, closeTime, answers } = contract
|
const { createdTime, resolutionTime, closeTime, answers } = contract
|
||||||
|
|
||||||
const bets = useBets(contract.id) ?? props.bets
|
|
||||||
|
|
||||||
const { probsByOutcome, sortedOutcomes } = computeProbsByOutcome(
|
const { probsByOutcome, sortedOutcomes } = computeProbsByOutcome(
|
||||||
bets,
|
bets,
|
||||||
contract
|
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 formatTime = (dt: number) => dayjs(dt).format('MMM DD, YYYY hh:mm a z')
|
||||||
|
|
||||||
const { createdTime, closeTime, resolutionTime } = contract
|
const { createdTime, closeTime, resolutionTime } = contract
|
||||||
const tradersCount = uniqBy(bets, 'userId').length
|
const tradersCount = uniqBy(
|
||||||
|
bets.filter((bet) => !bet.isAnte),
|
||||||
|
'userId'
|
||||||
|
).length
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|
|
@ -5,7 +5,6 @@ import { memo } from 'react'
|
||||||
import { Bet } from 'common/bet'
|
import { Bet } from 'common/bet'
|
||||||
import { getInitialProbability } from 'common/calculate'
|
import { getInitialProbability } from 'common/calculate'
|
||||||
import { BinaryContract } from 'common/contract'
|
import { BinaryContract } from 'common/contract'
|
||||||
import { useBetsWithoutAntes } from 'web/hooks/use-bets'
|
|
||||||
import { useWindowSize } from 'web/hooks/use-window-size'
|
import { useWindowSize } from 'web/hooks/use-window-size'
|
||||||
|
|
||||||
export const ContractProbGraph = memo(function ContractProbGraph(props: {
|
export const ContractProbGraph = memo(function ContractProbGraph(props: {
|
||||||
|
@ -16,9 +15,7 @@ export const ContractProbGraph = memo(function ContractProbGraph(props: {
|
||||||
const { contract, height } = props
|
const { contract, height } = props
|
||||||
const { resolutionTime, closeTime } = contract
|
const { resolutionTime, closeTime } = contract
|
||||||
|
|
||||||
const bets = useBetsWithoutAntes(contract, props.bets).filter(
|
const bets = props.bets.filter((bet) => !bet.isAnte && !bet.isRedemption)
|
||||||
(b) => !b.isRedemption
|
|
||||||
)
|
|
||||||
|
|
||||||
const startProb = getInitialProbability(contract)
|
const startProb = getInitialProbability(contract)
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ import { Bet } from 'common/bet'
|
||||||
import { Contract } from 'common/contract'
|
import { Contract } from 'common/contract'
|
||||||
import { Comment } from 'web/lib/firebase/comments'
|
import { Comment } from 'web/lib/firebase/comments'
|
||||||
import { User } from 'common/user'
|
import { User } from 'common/user'
|
||||||
import { useBets } from 'web/hooks/use-bets'
|
|
||||||
import { ContractActivity } from '../feed/contract-activity'
|
import { ContractActivity } from '../feed/contract-activity'
|
||||||
import { ContractBetsTable, BetsSummary } from '../bets-list'
|
import { ContractBetsTable, BetsSummary } from '../bets-list'
|
||||||
import { Spacer } from '../layout/spacer'
|
import { Spacer } from '../layout/spacer'
|
||||||
|
@ -15,12 +14,9 @@ export function ContractTabs(props: {
|
||||||
bets: Bet[]
|
bets: Bet[]
|
||||||
comments: Comment[]
|
comments: Comment[]
|
||||||
}) {
|
}) {
|
||||||
const { contract, user, comments } = props
|
const { contract, user, bets, comments } = props
|
||||||
const { outcomeType } = contract
|
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 userBets = user && bets.filter((bet) => bet.userId === user.id)
|
||||||
|
|
||||||
const betActivity = (
|
const betActivity = (
|
||||||
|
|
|
@ -38,6 +38,7 @@ import { FeedComment } from 'web/components/feed/feed-comments'
|
||||||
import { FeedBet } from 'web/components/feed/feed-bets'
|
import { FeedBet } from 'web/components/feed/feed-bets'
|
||||||
import { useIsIframe } from 'web/hooks/use-is-iframe'
|
import { useIsIframe } from 'web/hooks/use-is-iframe'
|
||||||
import ContractEmbedPage from '../embed/[username]/[contractSlug]'
|
import ContractEmbedPage from '../embed/[username]/[contractSlug]'
|
||||||
|
import { useBets } from 'web/hooks/use-bets'
|
||||||
|
|
||||||
export const getStaticProps = fromPropz(getStaticPropz)
|
export const getStaticProps = fromPropz(getStaticPropz)
|
||||||
export async function getStaticPropz(props: {
|
export async function getStaticPropz(props: {
|
||||||
|
@ -84,42 +85,44 @@ export default function ContractPage(props: {
|
||||||
bets: [],
|
bets: [],
|
||||||
slug: '',
|
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 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()
|
const inIframe = useIsIframe()
|
||||||
if (inIframe) {
|
if (inIframe) {
|
||||||
return <ContractEmbedPage {...props} />
|
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) {
|
if (!contract) {
|
||||||
return <Custom404 />
|
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 { creatorId, isResolved, question, outcomeType } = contract
|
||||||
|
|
||||||
const isCreator = user?.id === creatorId
|
const isCreator = user?.id === creatorId
|
||||||
|
@ -181,7 +184,7 @@ export function ContractPageContent(props: Parameters<typeof ContractPage>[0]) {
|
||||||
|
|
||||||
<ContractOverview
|
<ContractOverview
|
||||||
contract={contract}
|
contract={contract}
|
||||||
bets={bets ?? []}
|
bets={bets}
|
||||||
comments={comments ?? []}
|
comments={comments ?? []}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ export default function ContractEmbedPage(props: {
|
||||||
|
|
||||||
function ContractEmbed(props: { contract: Contract; bets: Bet[] }) {
|
function ContractEmbed(props: { contract: Contract; bets: Bet[] }) {
|
||||||
const { contract, bets } = props
|
const { contract, bets } = props
|
||||||
const { question, resolution, outcomeType } = contract
|
const { question, outcomeType } = contract
|
||||||
|
|
||||||
const isBinary = outcomeType === 'BINARY'
|
const isBinary = outcomeType === 'BINARY'
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user