39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
|
import { Bet } from 'common/bet'
|
||
|
import { Comment } from 'common/comment'
|
||
|
import { User } from 'common/user'
|
||
|
import { GENERAL_COMMENTS_OUTCOME_ID } from 'web/components/feed/activity-items'
|
||
|
|
||
|
// TODO: move feed commment and comment thread in here when sinclair confirms they're not working on them rn
|
||
|
export function getMostRecentCommentableBet(
|
||
|
betsByCurrentUser: Bet[],
|
||
|
comments: Comment[],
|
||
|
user?: User | null,
|
||
|
answerOutcome?: string
|
||
|
) {
|
||
|
return betsByCurrentUser
|
||
|
.filter((bet) => {
|
||
|
if (
|
||
|
canCommentOnBet(bet, user) &&
|
||
|
// The bet doesn't already have a comment
|
||
|
!comments.some((comment) => comment.betId == bet.id)
|
||
|
) {
|
||
|
if (!answerOutcome) return true
|
||
|
// If we're in free response, don't allow commenting on ante bet
|
||
|
return (
|
||
|
bet.outcome !== GENERAL_COMMENTS_OUTCOME_ID &&
|
||
|
answerOutcome === bet.outcome
|
||
|
)
|
||
|
}
|
||
|
return false
|
||
|
})
|
||
|
.sort((b1, b2) => b1.createdTime - b2.createdTime)
|
||
|
.pop()
|
||
|
}
|
||
|
|
||
|
function canCommentOnBet(bet: Bet, user?: User | null) {
|
||
|
const { userId, createdTime, isRedemption } = bet
|
||
|
const isSelf = user?.id === userId
|
||
|
// You can comment if your bet was posted in the last hour
|
||
|
return !isRedemption && isSelf && Date.now() - createdTime < 60 * 60 * 1000
|
||
|
}
|