Star.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _react = _interopRequireDefault(require("react"));
  8. var _KeyCode = _interopRequireDefault(require("rc-util/lib/KeyCode"));
  9. var _classnames = _interopRequireDefault(require("classnames"));
  10. function Star(props, ref) {
  11. var disabled = props.disabled,
  12. prefixCls = props.prefixCls,
  13. character = props.character,
  14. characterRender = props.characterRender,
  15. index = props.index,
  16. count = props.count,
  17. value = props.value,
  18. allowHalf = props.allowHalf,
  19. focused = props.focused,
  20. onHover = props.onHover,
  21. onClick = props.onClick;
  22. // =========================== Events ===========================
  23. var onInternalHover = function onInternalHover(e) {
  24. onHover(e, index);
  25. };
  26. var onInternalClick = function onInternalClick(e) {
  27. onClick(e, index);
  28. };
  29. var onInternalKeyDown = function onInternalKeyDown(e) {
  30. if (e.keyCode === _KeyCode.default.ENTER) {
  31. onClick(e, index);
  32. }
  33. };
  34. // =========================== Render ===========================
  35. // >>>>> ClassName
  36. var starValue = index + 1;
  37. var classNameList = new Set([prefixCls]);
  38. // TODO: Current we just refactor from CC to FC. This logic seems can be optimized.
  39. if (value === 0 && index === 0 && focused) {
  40. classNameList.add("".concat(prefixCls, "-focused"));
  41. } else if (allowHalf && value + 0.5 >= starValue && value < starValue) {
  42. classNameList.add("".concat(prefixCls, "-half"));
  43. classNameList.add("".concat(prefixCls, "-active"));
  44. if (focused) {
  45. classNameList.add("".concat(prefixCls, "-focused"));
  46. }
  47. } else {
  48. if (starValue <= value) {
  49. classNameList.add("".concat(prefixCls, "-full"));
  50. } else {
  51. classNameList.add("".concat(prefixCls, "-zero"));
  52. }
  53. if (starValue === value && focused) {
  54. classNameList.add("".concat(prefixCls, "-focused"));
  55. }
  56. }
  57. // >>>>> Node
  58. var characterNode = typeof character === 'function' ? character(props) : character;
  59. var start = /*#__PURE__*/_react.default.createElement("li", {
  60. className: (0, _classnames.default)(Array.from(classNameList)),
  61. ref: ref
  62. }, /*#__PURE__*/_react.default.createElement("div", {
  63. onClick: disabled ? null : onInternalClick,
  64. onKeyDown: disabled ? null : onInternalKeyDown,
  65. onMouseMove: disabled ? null : onInternalHover,
  66. role: "radio",
  67. "aria-checked": value > index ? 'true' : 'false',
  68. "aria-posinset": index + 1,
  69. "aria-setsize": count,
  70. tabIndex: disabled ? -1 : 0
  71. }, /*#__PURE__*/_react.default.createElement("div", {
  72. className: "".concat(prefixCls, "-first")
  73. }, characterNode), /*#__PURE__*/_react.default.createElement("div", {
  74. className: "".concat(prefixCls, "-second")
  75. }, characterNode)));
  76. if (characterRender) {
  77. start = characterRender(start, props);
  78. }
  79. return start;
  80. }
  81. var _default = exports.default = /*#__PURE__*/_react.default.forwardRef(Star);