All files / client/components/PageAttachment Attachment.tsx

0% Statements 0/11
0% Branches 0/4
0% Functions 0/4
0% Lines 0/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57                                                                                                                 
import React from 'react'
import Icon from 'components/Common/Icon'
import User from 'components/User/User'
import { Attachment as AttachmentType } from 'client/types/crowi'
 
interface Props {
  attachment: AttachmentType
  inUse: boolean
  onAttachmentDeleteClicked: Function
}
 
export default class Attachment extends React.Component<Props> {
  constructor(props: Props) {
    super(props)
 
    this._onAttachmentDeleteClicked = this._onAttachmentDeleteClicked.bind(this)
  }
 
  iconNameByFormat(format: string) {
    if (format.match(/image\/.+/i)) {
      return 'fileImage'
    }
 
    return 'file'
  }
 
  _onAttachmentDeleteClicked(event: React.MouseEvent<HTMLAnchorElement>) {
    this.props.onAttachmentDeleteClicked(this.props.attachment)
  }
 
  render() {
    const attachment = this.props.attachment
    const formatIcon = this.iconNameByFormat(attachment.fileFormat)
 
    const fileInUse = this.props.inUse ? <span className="attachment-in-use badge badge-info">In Use</span> : ''
 
    const fileType = <span className="attachment-filetype badge badge-secondary">{attachment.fileFormat}</span>
 
    return (
      <li>
        <User user={attachment.creator} />
        <Icon name={formatIcon} />
 
        <a href={attachment.url}> {attachment.originalName}</a>
 
        {fileType}
 
        {fileInUse}
 
        <a className="text-danger attachment-delete" onClick={this._onAttachmentDeleteClicked}>
          <Icon name="trashCanOutline" />
        </a>
      </li>
    )
  }
}