import { Contract, FreeResponseContract } from 'common/contract' import { ContractComment } from 'common/comment' import { Answer } from 'common/answer' import { Bet } from 'common/bet' import { getOutcomeProbability } from 'common/calculate' import { FeedBet } from './feed-bets' import { FeedLiquidity } from './feed-liquidity' import { FeedAnswerCommentGroup } from './feed-answer-comment-group' import { FeedCommentThread, CommentInput } 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, uniq } from 'lodash' import { Col } from 'web/components/layout/col' export function ContractBetsActivity(props: { contract: Contract bets: Bet[] liquidityProvisions: LiquidityProvision[] }) { const { contract, bets, liquidityProvisions } = props const items = [ ...bets.map((bet) => ({ type: 'bet' as const, id: bet.id + '-' + bet.isSold, bet, })), ...liquidityProvisions.map((liquidity) => ({ type: 'liquidity' as const, id: liquidity.id, liquidity, })), ] const sortedItems = sortBy(items, (item) => item.type === 'bet' ? -item.bet.createdTime : item.type === 'liquidity' ? -item.liquidity.createdTime : undefined ) return ( {sortedItems.map((item) => item.type === 'bet' ? ( ) : ( ) )} ) } export function ContractCommentsActivity(props: { contract: Contract bets: Bet[] comments: ContractComment[] tips: CommentTipMap user: User | null | undefined }) { const { bets, contract, comments, user, tips } = props const betsByUserId = groupBy(bets, (bet) => bet.userId) 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, idx) => (
{idx !== topLevelComments.length - 1 ? (
))}
) } export function FreeResponseContractCommentsActivity(props: { contract: FreeResponseContract bets: Bet[] comments: ContractComment[] tips: CommentTipMap user: User | null | undefined }) { const { bets, contract, comments, user, tips } = props let outcomes = uniq(bets.map((bet) => bet.outcome)) outcomes = sortBy(outcomes, (outcome) => getOutcomeProbability(contract, outcome) ) const answers = outcomes .map((outcome) => { return contract.answers.find((answer) => answer.id === outcome) as Answer }) .filter((answer) => answer != null) const betsByUserId = groupBy(bets, (bet) => bet.userId) const commentsByUserId = groupBy(comments, (c) => c.userId) const commentsByOutcome = groupBy(comments, (c) => c.answerOutcome ?? '_') return (
{answers.map((answer) => (
))}
) }