icon.js 911 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import classNames from 'classnames'
  4. function Icon({
  5. type,
  6. spin,
  7. modifier,
  8. classes = {},
  9. accessibilityLabel,
  10. children
  11. }) {
  12. const iconClassName = classNames(
  13. 'fa',
  14. `fa-${type}`,
  15. {
  16. 'fa-spin': spin,
  17. [`fa-${modifier}`]: modifier
  18. },
  19. classes.icon
  20. )
  21. return (
  22. <>
  23. <i className={iconClassName} aria-hidden="true">
  24. {children}
  25. </i>
  26. {accessibilityLabel ? (
  27. <span className="sr-only">{accessibilityLabel}</span>
  28. ) : null}
  29. </>
  30. )
  31. }
  32. Icon.propTypes = {
  33. type: PropTypes.string.isRequired,
  34. spin: PropTypes.bool,
  35. modifier: PropTypes.string,
  36. classes: PropTypes.exact({
  37. icon: PropTypes.string
  38. }),
  39. accessibilityLabel: PropTypes.string,
  40. children: PropTypes.oneOfType([
  41. PropTypes.arrayOf(PropTypes.node),
  42. PropTypes.node
  43. ])
  44. }
  45. export default Icon