Collapse.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  8. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  9. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  10. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  11. var _classnames = _interopRequireDefault(require("classnames"));
  12. var _useMergedState3 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
  13. var _warning = _interopRequireDefault(require("rc-util/lib/warning"));
  14. var _react = _interopRequireDefault(require("react"));
  15. var _useItems = _interopRequireDefault(require("./hooks/useItems"));
  16. var _Panel = _interopRequireDefault(require("./Panel"));
  17. var _pickAttrs = _interopRequireDefault(require("rc-util/lib/pickAttrs"));
  18. function getActiveKeysArray(activeKey) {
  19. var currentActiveKey = activeKey;
  20. if (!Array.isArray(currentActiveKey)) {
  21. var activeKeyType = (0, _typeof2.default)(currentActiveKey);
  22. currentActiveKey = activeKeyType === 'number' || activeKeyType === 'string' ? [currentActiveKey] : [];
  23. }
  24. return currentActiveKey.map(function (key) {
  25. return String(key);
  26. });
  27. }
  28. var Collapse = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
  29. var _props$prefixCls = props.prefixCls,
  30. prefixCls = _props$prefixCls === void 0 ? 'rc-collapse' : _props$prefixCls,
  31. _props$destroyInactiv = props.destroyInactivePanel,
  32. destroyInactivePanel = _props$destroyInactiv === void 0 ? false : _props$destroyInactiv,
  33. style = props.style,
  34. accordion = props.accordion,
  35. className = props.className,
  36. children = props.children,
  37. collapsible = props.collapsible,
  38. openMotion = props.openMotion,
  39. expandIcon = props.expandIcon,
  40. rawActiveKey = props.activeKey,
  41. defaultActiveKey = props.defaultActiveKey,
  42. _onChange = props.onChange,
  43. items = props.items;
  44. var collapseClassName = (0, _classnames.default)(prefixCls, className);
  45. var _useMergedState = (0, _useMergedState3.default)([], {
  46. value: rawActiveKey,
  47. onChange: function onChange(v) {
  48. return _onChange === null || _onChange === void 0 ? void 0 : _onChange(v);
  49. },
  50. defaultValue: defaultActiveKey,
  51. postState: getActiveKeysArray
  52. }),
  53. _useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
  54. activeKey = _useMergedState2[0],
  55. setActiveKey = _useMergedState2[1];
  56. var onItemClick = function onItemClick(key) {
  57. return setActiveKey(function () {
  58. if (accordion) {
  59. return activeKey[0] === key ? [] : [key];
  60. }
  61. var index = activeKey.indexOf(key);
  62. var isActive = index > -1;
  63. if (isActive) {
  64. return activeKey.filter(function (item) {
  65. return item !== key;
  66. });
  67. }
  68. return [].concat((0, _toConsumableArray2.default)(activeKey), [key]);
  69. });
  70. };
  71. // ======================== Children ========================
  72. (0, _warning.default)(!children, '[rc-collapse] `children` will be removed in next major version. Please use `items` instead.');
  73. var mergedChildren = (0, _useItems.default)(items, children, {
  74. prefixCls: prefixCls,
  75. accordion: accordion,
  76. openMotion: openMotion,
  77. expandIcon: expandIcon,
  78. collapsible: collapsible,
  79. destroyInactivePanel: destroyInactivePanel,
  80. onItemClick: onItemClick,
  81. activeKey: activeKey
  82. });
  83. // ======================== Render ========================
  84. return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
  85. ref: ref,
  86. className: collapseClassName,
  87. style: style,
  88. role: accordion ? 'tablist' : undefined
  89. }, (0, _pickAttrs.default)(props, {
  90. aria: true,
  91. data: true
  92. })), mergedChildren);
  93. });
  94. var _default = exports.default = Object.assign(Collapse, {
  95. /**
  96. * @deprecated use `items` instead, will be removed in `v4.0.0`
  97. */
  98. Panel: _Panel.default
  99. });