Send all comments and bets to home page, so feed loads immediately
This commit is contained in:
parent
637a76cf34
commit
31fbd6b900
|
@ -1,4 +1,4 @@
|
||||||
import React, { useEffect, useState } from 'react'
|
import React from 'react'
|
||||||
import Router from 'next/router'
|
import Router from 'next/router'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
|
|
||||||
|
@ -29,9 +29,16 @@ export async function getStaticProps() {
|
||||||
listAllFolds().catch(() => []),
|
listAllFolds().catch(() => []),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
const [contractBets, contractComments] = await Promise.all([
|
||||||
|
Promise.all(contracts.map((contract) => listAllBets(contract.id))),
|
||||||
|
Promise.all(contracts.map((contract) => listAllComments(contract.id))),
|
||||||
|
])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
contracts,
|
contracts,
|
||||||
|
contractBets,
|
||||||
|
contractComments,
|
||||||
folds,
|
folds,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -39,12 +46,20 @@ export async function getStaticProps() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const Home = (props: { contracts: Contract[]; folds: Fold[] }) => {
|
const Home = (props: {
|
||||||
const { folds } = props
|
contracts: Contract[]
|
||||||
|
contractBets: Bet[][]
|
||||||
|
contractComments: Comment[][]
|
||||||
|
folds: Fold[]
|
||||||
|
}) => {
|
||||||
|
const { contractBets, contractComments, folds } = props
|
||||||
|
|
||||||
const user = useUser()
|
const user = useUser()
|
||||||
|
|
||||||
const contracts = useContracts() ?? props.contracts
|
const contracts = useContracts() ?? props.contracts
|
||||||
|
const contractIdToIndex = _.fromPairs(
|
||||||
|
contracts.map((contract, index) => [contract.id, index])
|
||||||
|
)
|
||||||
|
|
||||||
const followedFoldIds = useFollowedFolds(user)
|
const followedFoldIds = useFollowedFolds(user)
|
||||||
const followedFolds = filterDefined(
|
const followedFolds = filterDefined(
|
||||||
|
@ -68,43 +83,27 @@ const Home = (props: { contracts: Contract[]; folds: Fold[] }) => {
|
||||||
)
|
)
|
||||||
: undefined
|
: undefined
|
||||||
|
|
||||||
const feedContractsKey = feedContracts?.map(({ id }) => id).join(',')
|
|
||||||
|
|
||||||
const [feedBets, setFeedBets] = useState<Bet[][] | undefined>()
|
|
||||||
const [feedComments, setFeedComments] = useState<Comment[][] | undefined>()
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (feedContracts) {
|
|
||||||
Promise.all(
|
|
||||||
feedContracts.map((contract) => listAllBets(contract.id))
|
|
||||||
).then(setFeedBets)
|
|
||||||
|
|
||||||
Promise.all(
|
|
||||||
feedContracts.map((contract) => listAllComments(contract.id))
|
|
||||||
).then(setFeedComments)
|
|
||||||
}
|
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, [feedContractsKey])
|
|
||||||
|
|
||||||
const oneDayMS = 24 * 60 * 60 * 1000
|
const oneDayMS = 24 * 60 * 60 * 1000
|
||||||
const recentBets =
|
const recentBets = (feedContracts ?? [])
|
||||||
feedBets &&
|
.map((c) => contractBets[contractIdToIndex[c.id]])
|
||||||
feedBets.flat().filter((bet) => bet.createdTime > Date.now() - oneDayMS)
|
.flat()
|
||||||
|
.filter((bet) => bet.createdTime > Date.now() - oneDayMS)
|
||||||
|
const feedComments = (feedContracts ?? [])
|
||||||
|
.map((c) => contractComments[contractIdToIndex[c.id]])
|
||||||
|
.flat()
|
||||||
|
|
||||||
const activeContracts =
|
const activeContracts =
|
||||||
feedContracts &&
|
feedContracts &&
|
||||||
feedComments &&
|
findActiveContracts(feedContracts, feedComments, recentBets, 365)
|
||||||
recentBets &&
|
|
||||||
findActiveContracts(feedContracts, feedComments.flat(), recentBets, 365)
|
|
||||||
|
|
||||||
const contractBets = activeContracts
|
const activeBets = activeContracts
|
||||||
? activeContracts.map(
|
? activeContracts.map(
|
||||||
(contract) => feedBets[feedContracts.indexOf(contract)]
|
(contract) => contractBets[contractIdToIndex[contract.id]]
|
||||||
)
|
)
|
||||||
: []
|
: []
|
||||||
const contractComments = activeContracts
|
const activeComments = activeContracts
|
||||||
? activeContracts.map(
|
? activeContracts.map(
|
||||||
(contract) => feedComments[feedContracts.indexOf(contract)]
|
(contract) => contractComments[contractIdToIndex[contract.id]]
|
||||||
)
|
)
|
||||||
: []
|
: []
|
||||||
|
|
||||||
|
@ -147,8 +146,8 @@ const Home = (props: { contracts: Contract[]; folds: Fold[] }) => {
|
||||||
{activeContracts ? (
|
{activeContracts ? (
|
||||||
<ActivityFeed
|
<ActivityFeed
|
||||||
contracts={activeContracts}
|
contracts={activeContracts}
|
||||||
contractBets={contractBets}
|
contractBets={activeBets}
|
||||||
contractComments={contractComments}
|
contractComments={activeComments}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<LoadingIndicator className="mt-4" />
|
<LoadingIndicator className="mt-4" />
|
||||||
|
|
Loading…
Reference in New Issue
Block a user