Sha256: 8c601b53f5430e10348166c99757c34ce0782fe120baf1c36e9b9fab539ae176

Contents?: true

Size: 1.98 KB

Versions: 85

Compression:

Stored size: 1.98 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: number,
}

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}
    >
      <If condition={!hideRating}>
        <div className="pb_star_rating_number">
          {rating}
        </div>
      </If>

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

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

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

export default StarRating

Version data entries

85 entries across 85 versions & 1 rubygems

Version Path
playbook_ui-9.19.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.19.0.pre.alphafonts app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.18.0.flow.bin.alpha app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.18.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.17.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.17.0.pre.decouple.website2 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.16.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.15.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.15.0.pre.decouple.website1 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.14.1.alpha.radio.alignment app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.14.1.alpha.highcharts9 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.14.1 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.13.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.12.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.12.0.pre.text.addon app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.11.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.10.0 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.10.0.pre.date.time.stacked.1 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.10.0.pre.alpha2 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx
playbook_ui-9.10.0.pre.alpha1 app/pb_kits/playbook/pb_star_rating/_star_rating.jsx