From 7b497b0e339eb69e4e4fbf2d54aa2a186c5b8112 Mon Sep 17 00:00:00 2001 From: Ian Philips Date: Fri, 22 Apr 2022 16:48:39 -0600 Subject: [PATCH] Just for playing with, bad code --- functions/.gitignore | 1 + web/components/feed/activity-items.ts | 133 ++++++++++++++++++++++--- web/components/feed/feed-items.tsx | 134 ++++++++++++++++++++------ 3 files changed, 222 insertions(+), 46 deletions(-) diff --git a/functions/.gitignore b/functions/.gitignore index f6db6f5f..ae5b26ef 100644 --- a/functions/.gitignore +++ b/functions/.gitignore @@ -15,3 +15,4 @@ node_modules/ package-lock.json ui-debug.log firebase-debug.log +firestore_export/ diff --git a/web/components/feed/activity-items.ts b/web/components/feed/activity-items.ts index ceb9fe58..09d435d9 100644 --- a/web/components/feed/activity-items.ts +++ b/web/components/feed/activity-items.ts @@ -23,6 +23,7 @@ export type ActivityItem = | CloseItem | ResolveItem | CommentInputItem + | AnswerItem type BaseActivityItem = { id: string @@ -73,6 +74,11 @@ export type AnswerGroupItem = BaseActivityItem & { items: ActivityItem[] } +export type AnswerItem = BaseActivityItem & { + type: 'answer' + answer: Answer +} + export type CloseItem = BaseActivityItem & { type: 'close' } @@ -233,13 +239,14 @@ function getAnswerGroups( (answer) => answer.id === outcome ) as Answer - let items = groupBets(answerBets, answerComments, contract, user?.id, { - hideOutcome: true, - abbreviated, - smallAvatar: true, - reversed, - }) - + // let items = groupBets(answerBets, answerComments, contract, user?.id, { + // hideOutcome: true, + // abbreviated, + // smallAvatar: true, + // reversed, + // }) + // + let items: ActivityItem[] = [] if (abbreviated) items = items.slice(-2) return { @@ -255,6 +262,81 @@ function getAnswerGroups( return answerGroups } +function getAnswers( + contract: FullContract, + bets: Bet[], + comments: Comment[], + user: User | undefined | null, + options: { + sortByProb: boolean + abbreviated: boolean + reversed: boolean + } +) { + const { sortByProb, abbreviated, reversed } = options + + let outcomes = _.uniq(bets.map((bet) => bet.outcome)).filter( + (outcome) => getOutcomeProbability(contract, outcome) > 0.0001 + ) + if (abbreviated) { + const lastComment = _.last(comments) + const lastCommentOutcome = bets.find( + (bet) => bet.id === lastComment?.betId + )?.outcome + const lastBetOutcome = _.last(bets)?.outcome + if (lastCommentOutcome && lastBetOutcome) { + outcomes = _.uniq([ + ...outcomes.filter( + (outcome) => + outcome !== lastCommentOutcome && outcome !== lastBetOutcome + ), + lastCommentOutcome, + lastBetOutcome, + ]) + } + outcomes = outcomes.slice(-2) + } + if (sortByProb) { + outcomes = _.sortBy(outcomes, (outcome) => + getOutcomeProbability(contract, outcome) + ) + } else { + // Sort by recent bet. + outcomes = _.sortBy(outcomes, (outcome) => + _.findLastIndex(bets, (bet) => bet.outcome === outcome) + ) + } + + const answerGroups = outcomes + .map((outcome) => { + const answerBets = bets.filter((bet) => bet.outcome === outcome) + const answerComments = comments.filter((comment) => + answerBets.some((bet) => bet.id === comment.betId) + ) + const answer = contract.answers?.find( + (answer) => answer.id === outcome + ) as Answer + + // let items = groupBets(answerBets, answerComments, contract, user?.id, { + // hideOutcome: true, + // abbreviated, + // smallAvatar: true, + // reversed, + // }) + // + + return { + id: outcome, + type: 'answer' as const, + contract, + answer, + user, + } + }) + .filter((group) => group.answer) + + return answerGroups +} function groupBetsAndComments( bets: Bet[], @@ -329,7 +411,24 @@ export function getAllContractActivityItems( if (outcomeType === 'FREE_RESPONSE') { items.push( - ...getAnswerGroups( + ...groupBetsAndComments(bets, comments, contract, user?.id, { + hideOutcome: false, + abbreviated, + smallAvatar: false, + reversed, + }) + ) + const commentsByBetId = mapCommentsByBetId(comments) + items.push({ + type: 'commentInput', + id: 'commentInput', + bets, + commentsByBetId, + contract, + }) + + items.push( + ...getAnswers( contract as FullContract, bets, comments, @@ -359,14 +458,16 @@ export function getAllContractActivityItems( items.push({ type: 'resolve', id: `${contract.resolutionTime}`, contract }) } - const commentsByBetId = mapCommentsByBetId(comments) - items.push({ - type: 'commentInput', - id: 'commentInput', - bets, - commentsByBetId, - contract, - }) + if (outcomeType === 'BINARY') { + const commentsByBetId = mapCommentsByBetId(comments) + items.push({ + type: 'commentInput', + id: 'commentInput', + bets, + commentsByBetId, + contract, + }) + } if (reversed) items.reverse() diff --git a/web/components/feed/feed-items.tsx b/web/components/feed/feed-items.tsx index c865b617..0b20fd33 100644 --- a/web/components/feed/feed-items.tsx +++ b/web/components/feed/feed-items.tsx @@ -67,7 +67,12 @@ export function FeedItems(props: {
{items.map((item, activityItemIdx) => ( -
+
{activityItemIdx !== items.length - 1 || item.type === 'answergroup' ? ( case 'answergroup': return + case 'answer': + return case 'close': return case 'resolve': @@ -195,9 +202,9 @@ export function CommentInput(props: { const user = useUser() const [comment, setComment] = useState('') - if (outcomeType === 'FREE_RESPONSE') { - return
- } + // if (outcomeType === 'FREE_RESPONSE') { + // return
+ // } let canCommentOnABet = false bets.some((bet) => { @@ -224,34 +231,36 @@ export function CommentInput(props: { return ( <> -
- -
-
-
-
-