index.js 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
  3. import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
  4. import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
  5. var _excluded = ["prefixCls", "className", "checked", "defaultChecked", "disabled", "loadingIcon", "checkedChildren", "unCheckedChildren", "onClick", "onChange", "onKeyDown"];
  6. import * as React from 'react';
  7. import classNames from 'classnames';
  8. import useMergedState from "rc-util/es/hooks/useMergedState";
  9. import KeyCode from "rc-util/es/KeyCode";
  10. var Switch = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
  11. var _classNames;
  12. var _ref$prefixCls = _ref.prefixCls,
  13. prefixCls = _ref$prefixCls === void 0 ? 'rc-switch' : _ref$prefixCls,
  14. className = _ref.className,
  15. checked = _ref.checked,
  16. defaultChecked = _ref.defaultChecked,
  17. disabled = _ref.disabled,
  18. loadingIcon = _ref.loadingIcon,
  19. checkedChildren = _ref.checkedChildren,
  20. unCheckedChildren = _ref.unCheckedChildren,
  21. onClick = _ref.onClick,
  22. onChange = _ref.onChange,
  23. onKeyDown = _ref.onKeyDown,
  24. restProps = _objectWithoutProperties(_ref, _excluded);
  25. var _useMergedState = useMergedState(false, {
  26. value: checked,
  27. defaultValue: defaultChecked
  28. }),
  29. _useMergedState2 = _slicedToArray(_useMergedState, 2),
  30. innerChecked = _useMergedState2[0],
  31. setInnerChecked = _useMergedState2[1];
  32. function triggerChange(newChecked, event) {
  33. var mergedChecked = innerChecked;
  34. if (!disabled) {
  35. mergedChecked = newChecked;
  36. setInnerChecked(mergedChecked);
  37. onChange === null || onChange === void 0 ? void 0 : onChange(mergedChecked, event);
  38. }
  39. return mergedChecked;
  40. }
  41. function onInternalKeyDown(e) {
  42. if (e.which === KeyCode.LEFT) {
  43. triggerChange(false, e);
  44. } else if (e.which === KeyCode.RIGHT) {
  45. triggerChange(true, e);
  46. }
  47. onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
  48. }
  49. function onInternalClick(e) {
  50. var ret = triggerChange(!innerChecked, e);
  51. // [Legacy] trigger onClick with value
  52. onClick === null || onClick === void 0 ? void 0 : onClick(ret, e);
  53. }
  54. var switchClassName = classNames(prefixCls, className, (_classNames = {}, _defineProperty(_classNames, "".concat(prefixCls, "-checked"), innerChecked), _defineProperty(_classNames, "".concat(prefixCls, "-disabled"), disabled), _classNames));
  55. return /*#__PURE__*/React.createElement("button", _extends({}, restProps, {
  56. type: "button",
  57. role: "switch",
  58. "aria-checked": innerChecked,
  59. disabled: disabled,
  60. className: switchClassName,
  61. ref: ref,
  62. onKeyDown: onInternalKeyDown,
  63. onClick: onInternalClick
  64. }), loadingIcon, /*#__PURE__*/React.createElement("span", {
  65. className: "".concat(prefixCls, "-inner")
  66. }, /*#__PURE__*/React.createElement("span", {
  67. className: "".concat(prefixCls, "-inner-checked")
  68. }, checkedChildren), /*#__PURE__*/React.createElement("span", {
  69. className: "".concat(prefixCls, "-inner-unchecked")
  70. }, unCheckedChildren)));
  71. });
  72. Switch.displayName = 'Switch';
  73. export default Switch;