dropdown.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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 _vue = require("vue");
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  10. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  11. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  12. var _vcDropdown = _interopRequireDefault(require("../vc-dropdown"));
  13. var _dropdownButton = _interopRequireDefault(require("./dropdown-button"));
  14. var _vnode = require("../_util/vnode");
  15. var _classNames3 = _interopRequireDefault(require("../_util/classNames"));
  16. var _propsUtil = require("../_util/props-util");
  17. var _props = require("./props");
  18. var _RightOutlined = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/RightOutlined"));
  19. var _useConfigInject2 = _interopRequireDefault(require("../_util/hooks/useConfigInject"));
  20. var _devWarning = _interopRequireDefault(require("../vc-util/devWarning"));
  21. var _omit = _interopRequireDefault(require("../_util/omit"));
  22. var _placements = _interopRequireDefault(require("../tooltip/placements"));
  23. var Dropdown = (0, _vue.defineComponent)({
  24. compatConfig: {
  25. MODE: 3
  26. },
  27. name: 'ADropdown',
  28. inheritAttrs: false,
  29. props: (0, _propsUtil.initDefaultProps)((0, _props.dropdownProps)(), {
  30. mouseEnterDelay: 0.15,
  31. mouseLeaveDelay: 0.1,
  32. placement: 'bottomLeft',
  33. trigger: 'hover'
  34. }),
  35. // emits: ['visibleChange', 'update:visible'],
  36. slots: ['overlay'],
  37. setup: function setup(props, _ref) {
  38. var slots = _ref.slots,
  39. attrs = _ref.attrs,
  40. emit = _ref.emit;
  41. var _useConfigInject = (0, _useConfigInject2.default)('dropdown', props),
  42. prefixCls = _useConfigInject.prefixCls,
  43. rootPrefixCls = _useConfigInject.rootPrefixCls,
  44. direction = _useConfigInject.direction,
  45. getPopupContainer = _useConfigInject.getPopupContainer;
  46. var transitionName = (0, _vue.computed)(function () {
  47. var _props$placement = props.placement,
  48. placement = _props$placement === void 0 ? '' : _props$placement,
  49. transitionName = props.transitionName;
  50. if (transitionName !== undefined) {
  51. return transitionName;
  52. }
  53. if (placement.indexOf('top') >= 0) {
  54. return "".concat(rootPrefixCls.value, "-slide-down");
  55. }
  56. return "".concat(rootPrefixCls.value, "-slide-up");
  57. });
  58. var renderOverlay = function renderOverlay() {
  59. var _slots$overlay, _overlayNode$children, _overlayNode$children2;
  60. // rc-dropdown already can process the function of overlay, but we have check logic here.
  61. // So we need render the element to check and pass back to rc-dropdown.
  62. var overlay = props.overlay || ((_slots$overlay = slots.overlay) === null || _slots$overlay === void 0 ? void 0 : _slots$overlay.call(slots));
  63. var overlayNode = Array.isArray(overlay) ? overlay[0] : overlay;
  64. if (!overlayNode) return null;
  65. var overlayProps = overlayNode.props || {};
  66. // Warning if use other mode
  67. (0, _devWarning.default)(!overlayProps.mode || overlayProps.mode === 'vertical', 'Dropdown', "mode=\"".concat(overlayProps.mode, "\" is not supported for Dropdown's Menu."));
  68. // menu cannot be selectable in dropdown defaultly
  69. var _overlayProps$selecta = overlayProps.selectable,
  70. selectable = _overlayProps$selecta === void 0 ? false : _overlayProps$selecta,
  71. _overlayProps$expandI = overlayProps.expandIcon,
  72. expandIcon = _overlayProps$expandI === void 0 ? (_overlayNode$children = overlayNode.children) === null || _overlayNode$children === void 0 ? void 0 : (_overlayNode$children2 = _overlayNode$children.expandIcon) === null || _overlayNode$children2 === void 0 ? void 0 : _overlayNode$children2.call(_overlayNode$children) : _overlayProps$expandI;
  73. var overlayNodeExpandIcon = typeof expandIcon !== 'undefined' && (0, _propsUtil.isValidElement)(expandIcon) ? expandIcon : (0, _vue.createVNode)("span", {
  74. "class": "".concat(prefixCls.value, "-menu-submenu-arrow")
  75. }, [(0, _vue.createVNode)(_RightOutlined.default, {
  76. "class": "".concat(prefixCls.value, "-menu-submenu-arrow-icon")
  77. }, null)]);
  78. var fixedModeOverlay = (0, _propsUtil.isValidElement)(overlayNode) ? (0, _vnode.cloneElement)(overlayNode, {
  79. mode: 'vertical',
  80. selectable: selectable,
  81. expandIcon: function expandIcon() {
  82. return overlayNodeExpandIcon;
  83. }
  84. }) : overlayNode;
  85. return fixedModeOverlay;
  86. };
  87. var placement = (0, _vue.computed)(function () {
  88. var placement = props.placement;
  89. if (!placement) {
  90. return direction.value === 'rtl' ? 'bottomRight' : 'bottomLeft';
  91. }
  92. if (placement.includes('Center')) {
  93. var newPlacement = placement.slice(0, placement.indexOf('Center'));
  94. (0, _devWarning.default)(!placement.includes('Center'), 'Dropdown', "You are using '".concat(placement, "' placement in Dropdown, which is deprecated. Try to use '").concat(newPlacement, "' instead."));
  95. return newPlacement;
  96. }
  97. return placement;
  98. });
  99. var handleVisibleChange = function handleVisibleChange(val) {
  100. emit('update:visible', val);
  101. emit('visibleChange', val);
  102. };
  103. return function () {
  104. var _slots$default, _child$props;
  105. var arrow = props.arrow,
  106. trigger = props.trigger,
  107. disabled = props.disabled,
  108. overlayClassName = props.overlayClassName;
  109. var child = (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)[0];
  110. var dropdownTrigger = (0, _vnode.cloneElement)(child, (0, _extends2.default)({
  111. class: (0, _classNames3.default)(child === null || child === void 0 ? void 0 : (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.class, (0, _defineProperty2.default)({}, "".concat(prefixCls.value, "-rtl"), direction.value === 'rtl'), "".concat(prefixCls.value, "-trigger"))
  112. }, disabled ? {
  113. disabled: disabled
  114. } : {}));
  115. var overlayClassNameCustomized = (0, _classNames3.default)(overlayClassName, (0, _defineProperty2.default)({}, "".concat(prefixCls.value, "-rtl"), direction.value === 'rtl'));
  116. var triggerActions = disabled ? [] : trigger;
  117. var alignPoint;
  118. if (triggerActions && triggerActions.indexOf('contextmenu') !== -1) {
  119. alignPoint = true;
  120. }
  121. var builtinPlacements = (0, _placements.default)({
  122. arrowPointAtCenter: (0, _typeof2.default)(arrow) === 'object' && arrow.pointAtCenter,
  123. autoAdjustOverflow: true
  124. });
  125. var dropdownProps = (0, _omit.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), attrs), {}, {
  126. builtinPlacements: builtinPlacements,
  127. overlayClassName: overlayClassNameCustomized,
  128. arrow: arrow,
  129. alignPoint: alignPoint,
  130. prefixCls: prefixCls.value,
  131. getPopupContainer: getPopupContainer.value,
  132. transitionName: transitionName.value,
  133. trigger: triggerActions,
  134. onVisibleChange: handleVisibleChange,
  135. placement: placement.value
  136. }), ['overlay', 'onUpdate:visible']);
  137. return (0, _vue.createVNode)(_vcDropdown.default, dropdownProps, {
  138. default: function _default() {
  139. return [dropdownTrigger];
  140. },
  141. overlay: renderOverlay
  142. });
  143. };
  144. }
  145. });
  146. Dropdown.Button = _dropdownButton.default;
  147. var _default2 = Dropdown;
  148. exports.default = _default2;