CollapsePanel.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. Object.defineProperty(exports, "collapsePanelProps", {
  7. enumerable: true,
  8. get: function () {
  9. return _commonProps.collapsePanelProps;
  10. }
  11. });
  12. exports.default = void 0;
  13. var _vue = require("vue");
  14. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  15. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  16. var _PanelContent = _interopRequireDefault(require("./PanelContent"));
  17. var _propsUtil = require("../_util/props-util");
  18. var _commonProps = require("./commonProps");
  19. var _transition = _interopRequireDefault(require("../_util/transition"));
  20. var _classNames = _interopRequireDefault(require("../_util/classNames"));
  21. var _devWarning = _interopRequireDefault(require("../vc-util/devWarning"));
  22. var _useConfigInject = _interopRequireDefault(require("../config-provider/hooks/useConfigInject"));
  23. var _default = exports.default = (0, _vue.defineComponent)({
  24. compatConfig: {
  25. MODE: 3
  26. },
  27. name: 'ACollapsePanel',
  28. inheritAttrs: false,
  29. props: (0, _propsUtil.initDefaultProps)((0, _commonProps.collapsePanelProps)(), {
  30. showArrow: true,
  31. isActive: false,
  32. onItemClick() {},
  33. headerClass: '',
  34. forceRender: false
  35. }),
  36. slots: Object,
  37. // emits: ['itemClick'],
  38. setup(props, _ref) {
  39. let {
  40. slots,
  41. emit,
  42. attrs
  43. } = _ref;
  44. (0, _devWarning.default)(props.disabled === undefined, 'Collapse.Panel', '`disabled` is deprecated. Please use `collapsible="disabled"` instead.');
  45. const {
  46. prefixCls
  47. } = (0, _useConfigInject.default)('collapse', props);
  48. const handleItemClick = () => {
  49. emit('itemClick', props.panelKey);
  50. };
  51. const handleKeyPress = e => {
  52. if (e.key === 'Enter' || e.keyCode === 13 || e.which === 13) {
  53. handleItemClick();
  54. }
  55. };
  56. return () => {
  57. var _a, _b;
  58. const {
  59. header = (_a = slots.header) === null || _a === void 0 ? void 0 : _a.call(slots),
  60. headerClass,
  61. isActive,
  62. showArrow,
  63. destroyInactivePanel,
  64. accordion,
  65. forceRender,
  66. openAnimation,
  67. expandIcon = slots.expandIcon,
  68. extra = (_b = slots.extra) === null || _b === void 0 ? void 0 : _b.call(slots),
  69. collapsible
  70. } = props;
  71. const disabled = collapsible === 'disabled';
  72. const prefixClsValue = prefixCls.value;
  73. const headerCls = (0, _classNames.default)(`${prefixClsValue}-header`, {
  74. [headerClass]: headerClass,
  75. [`${prefixClsValue}-header-collapsible-only`]: collapsible === 'header',
  76. [`${prefixClsValue}-icon-collapsible-only`]: collapsible === 'icon'
  77. });
  78. const itemCls = (0, _classNames.default)({
  79. [`${prefixClsValue}-item`]: true,
  80. [`${prefixClsValue}-item-active`]: isActive,
  81. [`${prefixClsValue}-item-disabled`]: disabled,
  82. [`${prefixClsValue}-no-arrow`]: !showArrow,
  83. [`${attrs.class}`]: !!attrs.class
  84. });
  85. let icon = (0, _vue.createVNode)("i", {
  86. "class": "arrow"
  87. }, null);
  88. if (showArrow && typeof expandIcon === 'function') {
  89. icon = expandIcon(props);
  90. }
  91. const panelContent = (0, _vue.withDirectives)((0, _vue.createVNode)(_PanelContent.default, {
  92. "prefixCls": prefixClsValue,
  93. "isActive": isActive,
  94. "forceRender": forceRender,
  95. "role": accordion ? 'tabpanel' : null
  96. }, {
  97. default: slots.default
  98. }), [[_vue.vShow, isActive]]);
  99. const transitionProps = (0, _extends2.default)({
  100. appear: false,
  101. css: false
  102. }, openAnimation);
  103. return (0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, attrs), {}, {
  104. "class": itemCls
  105. }), [(0, _vue.createVNode)("div", {
  106. "class": headerCls,
  107. "onClick": () => !['header', 'icon'].includes(collapsible) && handleItemClick(),
  108. "role": accordion ? 'tab' : 'button',
  109. "tabindex": disabled ? -1 : 0,
  110. "aria-expanded": isActive,
  111. "onKeypress": handleKeyPress
  112. }, [showArrow && icon, (0, _vue.createVNode)("span", {
  113. "onClick": () => collapsible === 'header' && handleItemClick(),
  114. "class": `${prefixClsValue}-header-text`
  115. }, [header]), extra && (0, _vue.createVNode)("div", {
  116. "class": `${prefixClsValue}-extra`
  117. }, [extra])]), (0, _vue.createVNode)(_transition.default, transitionProps, {
  118. default: () => [!destroyInactivePanel || isActive ? panelContent : null]
  119. })]);
  120. };
  121. }
  122. });