All files / client/components/PageList PageListMeta.tsx

0% Statements 0/25
0% Branches 0/20
0% Functions 0/4
0% Lines 0/25

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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93                                                                                                                                                                                         
import React from 'react'
import Icon from 'components/Common/Icon'
import { Page } from 'client/types/crowi'
 
interface Props {
  page: Page
}
 
export default class PageListMeta extends React.Component<Props> {
  static defaultProps = { page: {} }
 
  isPortalPath(path: string) {
    if (path.match(/.*\/$/)) {
      return true
    }
 
    return false
  }
 
  bookmarkHighlightClass(count: number) {
    if (count > 20) {
      // TODO: dynamic??
      return 'page-list-bookmarkCount-amazing'
    }
    if (count > 10) {
      return 'page-list-bookmarkCount-high'
    }
 
    // else
    return ''
  }
 
  isPublic(page) {
    const GRANT_PUBLIC = 1
    const { grant } = page
 
    return !grant || grant == GRANT_PUBLIC
  }
 
  render() {
    // TODO isPortal()
    const page = this.props.page
 
    // portal check
    let portalLabel
    if (this.isPortalPath(page.path)) {
      portalLabel = <span className="badge badge-info">PORTAL</span>
    }
 
    let commentCount
    if (page.commentCount > 0) {
      commentCount = (
        <span>
          <Icon name="comment" />
          {page.commentCount}
        </span>
      )
    }
 
    let likerCount
    if (page.liker.length > 0) {
      likerCount = (
        <span>
          <Icon name="thumbUp" />
          {page.liker.length}
        </span>
      )
    }
 
    let bookmarkCount
    if (page.bookmarkCount && page.bookmarkCount > 0) {
      const bookmarkHighlightClass = this.bookmarkHighlightClass(page.bookmarkCount)
      bookmarkCount = (
        <span className={`page-list-bookmarkCount ${bookmarkHighlightClass}`}>
          <Icon name="star" />
          {page.bookmarkCount}
        </span>
      )
    }
 
    let lockIcon
    if (!this.isPublic(page)) {
      lockIcon = <Icon name="lock" />
    }
 
    return (
      <span className="page-list-meta">
        {portalLabel} {commentCount} {likerCount} {bookmarkCount} {lockIcon}
      </span>
    )
  }
}