Sha256: c37661e50c651bb4e99dfd662c1556d1ad0a12c221c685879edd0e2bcacdbaf2

Contents?: true

Size: 1.93 KB

Versions: 53

Compression:

Stored size: 1.93 KB

Contents

/* @flow */

import React from 'react'
import classnames from 'classnames'

import {
  buildAriaProps,
  buildDataProps,
} from '../utilities/props'

import {
  Icon,
} from '../'

type StarRatingProps = {
  aria?: object,
  className?: String,
  data?: object,
  fixedWidth?: Boolean,
  hideRating: Boolean,
  icon?: String,
  id?: String,
  rating: Numeric,
}

const StarRating = ({
  aria = {},
  className,
  data = {},
  hideRating = false,
  id,
  rating = 0,
}: StarRatingProps) => {
  const ariaProps = buildAriaProps(aria)
  const dataProps = buildDataProps(data)
  const css = classnames([
    'pb_star_rating_kit', className,
  ])

  const starCount = () => (
    [...Array(parseInt(rating))]
  )

  const hasHalfStar = () => (
    parseFloat(rating) % 1 !== 0
  )

  return (
    <div
        {...ariaProps}
        {...dataProps}
        className={css}
        id={id}
    >
      <div className="pb_star_rating_number">
        <If condition={!hideRating}>
          {rating}
        </If>
      </div>

      <div className="pb_star_rating_wrapper">
        <div className="pb_star_rating_highlight">
          {starCount().map((_, index) => (
            <Icon
                fixedWidth
                icon="star"
                key={index}
            />
          ))}

          <If condition={hasHalfStar()}>
            <Icon
                fixedWidth
                icon="star-half"
            />
          </If>
        </div>

        <div className="pb_star_rating_base">
          <Icon
              fixedWidth
              icon="star"
          />
          <Icon
              fixedWidth
              icon="star"
          />
          <Icon
              fixedWidth
              icon="star"
          />
          <Icon
              fixedWidth
              icon="star"
          />
          <Icon
              fixedWidth
              icon="star"
          />
        </div>
      </div>
    </div>
  )
}

export default StarRating

Version data entries

53 entries across 53 versions & 1 rubygems

Version Path
playbook_ui-6.1.0.pre.alpha5 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.1.0.pre.alpha4 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.1.0.pre.alpha3 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.1.0.pre.alpha2 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.1.0.pre.alpha1 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.1.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.0.1.pre.alpha6 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.0.1.pre.alpha5 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.0.1.pre.alpha4 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.0.1.pre.alpha3 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.0.1.pre.alpha2 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-5.2.0.pre.alpha15 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-5.2.0.pre.alpha14 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-5.2.0.pre.alpha13 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.0.1 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-5.2.0.pre.alpha12 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-6.0.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-5.2.0.pre.alpha11 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-5.5.1.pre.alpha4 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-5.5.1.pre.alpha3 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx