comment.tsx
TLDR
This file, located at webapp/src/components/cardDetail/comment.tsx, contains a React component called "Comment" that renders a comment block. The component takes in various props, such as the comment data, user ID, user image URL, and a readonly flag. It displays the avatar, username, guest badge, date, and comment text. If the readonly flag is false, it also displays an options menu with a delete option.
Methods
The file does not contain any methods.
Classes
The file does not contain any additional classes.
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {FC} from 'react'
import {useIntl} from 'react-intl'
import {Block} from '../../blocks/block'
import mutator from '../../mutator'
import {Utils} from '../../utils'
import IconButton from '../../widgets/buttons/iconButton'
import DeleteIcon from '../../widgets/icons/delete'
import OptionsIcon from '../../widgets/icons/options'
import Menu from '../../widgets/menu'
import MenuWrapper from '../../widgets/menuWrapper'
import {getUser} from '../../store/users'
import {useAppSelector} from '../../store/hooks'
import Tooltip from '../../widgets/tooltip'
import GuestBadge from '../../widgets/guestBadge'
import './comment.scss'
type Props = {
comment: Block
userId: string
userImageUrl: string
readonly: boolean
}
const Comment: FC<Props> = (props: Props) => {
const {comment, userId, userImageUrl} = props
const intl = useIntl()
const html = Utils.htmlFromMarkdown(comment.title)
const user = useAppSelector(getUser(userId))
const date = new Date(comment.createAt)
return (
<div
key={comment.id}
className='Comment comment'
>
<div className='comment-header'>
<img
className='comment-avatar'
src={userImageUrl}
/>
<div className='comment-username'>{user?.username}</div>
<GuestBadge show={user?.is_guest}/>
<Tooltip title={Utils.displayDateTime(date, intl)}>
<div className='comment-date'>
{Utils.relativeDisplayDateTime(date, intl)}
</div>
</Tooltip>
{!props.readonly && (
<MenuWrapper>
<IconButton icon={<OptionsIcon/>}/>
<Menu position='left'>
<Menu.Text
icon={<DeleteIcon/>}
id='delete'
name={intl.formatMessage({id: 'Comment.delete', defaultMessage: 'Delete'})}
onClick={() => mutator.deleteBlock(comment)}
/>
</Menu>
</MenuWrapper>
)}
</div>
<div
className='comment-text'
dangerouslySetInnerHTML={{__html: html}}
/>
</div>
)
}
export default Comment