import { useEffect, useState } from 'react' import { Comment } from 'common/comment' import { groupConsecutive } from 'common/util/array' import { getUsersComments } from 'web/lib/firebase/comments' import { SiteLink } from './site-link' import { Row } from './layout/row' import { Avatar } from './avatar' import { RelativeTimestamp } from './relative-timestamp' import { UserLink } from './user-page' import { User } from 'common/user' import { Col } from './layout/col' import { Content } from './editor' import { Pagination } from './pagination' import { LoadingIndicator } from './loading-indicator' const COMMENTS_PER_PAGE = 50 type ContractComment = Comment & { contractId: string contractSlug: string contractQuestion: string } function contractPath(slug: string) { // by convention this includes the contract creator username, but we don't // have that handy, so we just put /market/ return `/market/${slug}` } export function UserCommentsList(props: { user: User }) { const { user } = props const [comments, setComments] = useState() const [page, setPage] = useState(0) const start = page * COMMENTS_PER_PAGE const end = start + COMMENTS_PER_PAGE useEffect(() => { getUsersComments(user.id).then((cs) => { // we don't show comments in groups here atm, just comments on contracts setComments(cs.filter((c) => c.contractId) as ContractComment[]) }) }, [user.id]) if (comments == null) { return } const pageComments = groupConsecutive(comments.slice(start, end), (c) => { return { question: c.contractQuestion, slug: c.contractSlug } }) return ( {pageComments.map(({ key, items }, i) => { return (
{key.question} {items.map((comment) => ( ))}
) })} ) } function ProfileComment(props: { comment: Comment; className?: string }) { const { comment, className } = props const { text, content, userUsername, userName, userAvatarUrl, createdTime } = comment // TODO: find and attach relevant bets by comment betId at some point return (

{' '}

) }