import { useState } from 'react' import { Contract, FreeResponseContract } from 'common/contract' import { ContractComment } from 'common/comment' import { Bet } from 'common/bet' import { getOutcomeProbability } from 'common/calculate' import { Pagination } from 'web/components/pagination' import { FeedBet } from './feed-bets' import { FeedLiquidity } from './feed-liquidity' import { FeedAnswerCommentGroup } from './feed-answer-comment-group' import { FeedCommentThread, ContractCommentInput } from './feed-comments' import { User } from 'common/user' import { CommentTipMap } from 'web/hooks/use-tip-txns' import { LiquidityProvision } from 'common/liquidity-provision' import { groupBy, sortBy } from 'lodash' import { Col } from 'web/components/layout/col' export function ContractBetsActivity(props: { contract: Contract bets: Bet[] lps: LiquidityProvision[] }) { const { contract, bets, lps } = props const [page, setPage] = useState(0) const ITEMS_PER_PAGE = 50 const start = page * ITEMS_PER_PAGE const end = start + ITEMS_PER_PAGE const items = [ ...bets.map((bet) => ({ type: 'bet' as const, id: bet.id + '-' + bet.isSold, bet, })), ...lps.map((lp) => ({ type: 'liquidity' as const, id: lp.id, lp, })), ] const pageItems = sortBy(items, (item) => item.type === 'bet' ? -item.bet.createdTime : item.type === 'liquidity' ? -item.lp.createdTime : undefined ).slice(start, end) return ( <> {pageItems.map((item) => item.type === 'bet' ? ( ) : ( ) )} ) } export function ContractCommentsActivity(props: { contract: Contract betsByCurrentUser: Bet[] comments: ContractComment[] tips: CommentTipMap user: User | null | undefined }) { const { betsByCurrentUser, contract, comments, user, tips } = props const commentsByUserId = groupBy(comments, (c) => c.userId) const commentsByParentId = groupBy(comments, (c) => c.replyToCommentId ?? '_') const topLevelComments = sortBy( commentsByParentId['_'] ?? [], (c) => -c.createdTime ) return ( <> {topLevelComments.map((parent) => ( c.createdTime )} tips={tips} betsByCurrentUser={betsByCurrentUser} commentsByUserId={commentsByUserId} /> ))} ) } export function FreeResponseContractCommentsActivity(props: { contract: FreeResponseContract betsByCurrentUser: Bet[] comments: ContractComment[] tips: CommentTipMap user: User | null | undefined }) { const { betsByCurrentUser, contract, comments, user, tips } = props const sortedAnswers = sortBy( contract.answers, (answer) => -getOutcomeProbability(contract, answer.number.toString()) ) const commentsByUserId = groupBy(comments, (c) => c.userId) const commentsByOutcome = groupBy( comments, (c) => c.answerOutcome ?? c.betOutcome ?? '_' ) return ( <> {sortedAnswers.map((answer) => (
))} ) }