SelectTrigger.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  9. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  10. var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
  11. var _vcTrigger = _interopRequireDefault(require("../vc-trigger"));
  12. var _vueTypes = _interopRequireDefault(require("../_util/vue-types"));
  13. var _classNames2 = _interopRequireDefault(require("../_util/classNames"));
  14. var _excluded = ["empty"];
  15. var getBuiltInPlacements = function getBuiltInPlacements(dropdownMatchSelectWidth) {
  16. // Enable horizontal overflow auto-adjustment when a custom dropdown width is provided
  17. var adjustX = dropdownMatchSelectWidth === true ? 0 : 1;
  18. return {
  19. bottomLeft: {
  20. points: ['tl', 'bl'],
  21. offset: [0, 4],
  22. overflow: {
  23. adjustX: adjustX,
  24. adjustY: 1
  25. }
  26. },
  27. bottomRight: {
  28. points: ['tr', 'br'],
  29. offset: [0, 4],
  30. overflow: {
  31. adjustX: adjustX,
  32. adjustY: 1
  33. }
  34. },
  35. topLeft: {
  36. points: ['bl', 'tl'],
  37. offset: [0, -4],
  38. overflow: {
  39. adjustX: adjustX,
  40. adjustY: 1
  41. }
  42. },
  43. topRight: {
  44. points: ['br', 'tr'],
  45. offset: [0, -4],
  46. overflow: {
  47. adjustX: adjustX,
  48. adjustY: 1
  49. }
  50. }
  51. };
  52. };
  53. var SelectTrigger = (0, _vue.defineComponent)({
  54. name: 'SelectTrigger',
  55. inheritAttrs: false,
  56. props: {
  57. dropdownAlign: Object,
  58. visible: {
  59. type: Boolean,
  60. default: undefined
  61. },
  62. disabled: {
  63. type: Boolean,
  64. default: undefined
  65. },
  66. dropdownClassName: String,
  67. dropdownStyle: _vueTypes.default.object,
  68. placement: String,
  69. empty: {
  70. type: Boolean,
  71. default: undefined
  72. },
  73. prefixCls: String,
  74. popupClassName: String,
  75. animation: String,
  76. transitionName: String,
  77. getPopupContainer: Function,
  78. dropdownRender: Function,
  79. containerWidth: Number,
  80. dropdownMatchSelectWidth: _vueTypes.default.oneOfType([Number, Boolean]).def(true),
  81. popupElement: _vueTypes.default.any,
  82. direction: String,
  83. getTriggerDOMNode: Function,
  84. onPopupVisibleChange: Function,
  85. onPopupMouseEnter: Function
  86. },
  87. setup: function setup(props, _ref) {
  88. var slots = _ref.slots,
  89. attrs = _ref.attrs,
  90. expose = _ref.expose;
  91. var builtInPlacements = (0, _vue.computed)(function () {
  92. var dropdownMatchSelectWidth = props.dropdownMatchSelectWidth;
  93. return getBuiltInPlacements(dropdownMatchSelectWidth);
  94. });
  95. var popupRef = (0, _vue.ref)();
  96. expose({
  97. getPopupElement: function getPopupElement() {
  98. return popupRef.value;
  99. }
  100. });
  101. return function () {
  102. var _props$attrs = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), attrs),
  103. _props$attrs$empty = _props$attrs.empty,
  104. empty = _props$attrs$empty === void 0 ? false : _props$attrs$empty,
  105. restProps = (0, _objectWithoutProperties2.default)(_props$attrs, _excluded);
  106. var visible = restProps.visible,
  107. dropdownAlign = restProps.dropdownAlign,
  108. prefixCls = restProps.prefixCls,
  109. popupElement = restProps.popupElement,
  110. dropdownClassName = restProps.dropdownClassName,
  111. dropdownStyle = restProps.dropdownStyle,
  112. _restProps$direction = restProps.direction,
  113. direction = _restProps$direction === void 0 ? 'ltr' : _restProps$direction,
  114. placement = restProps.placement,
  115. dropdownMatchSelectWidth = restProps.dropdownMatchSelectWidth,
  116. containerWidth = restProps.containerWidth,
  117. dropdownRender = restProps.dropdownRender,
  118. animation = restProps.animation,
  119. transitionName = restProps.transitionName,
  120. getPopupContainer = restProps.getPopupContainer,
  121. getTriggerDOMNode = restProps.getTriggerDOMNode,
  122. onPopupVisibleChange = restProps.onPopupVisibleChange,
  123. onPopupMouseEnter = restProps.onPopupMouseEnter;
  124. var dropdownPrefixCls = "".concat(prefixCls, "-dropdown");
  125. var popupNode = popupElement;
  126. if (dropdownRender) {
  127. popupNode = dropdownRender({
  128. menuNode: popupElement,
  129. props: props
  130. });
  131. }
  132. var mergedTransitionName = animation ? "".concat(dropdownPrefixCls, "-").concat(animation) : transitionName;
  133. var popupStyle = (0, _objectSpread2.default)({
  134. minWidth: "".concat(containerWidth, "px")
  135. }, dropdownStyle);
  136. if (typeof dropdownMatchSelectWidth === 'number') {
  137. popupStyle.width = "".concat(dropdownMatchSelectWidth, "px");
  138. } else if (dropdownMatchSelectWidth) {
  139. popupStyle.width = "".concat(containerWidth, "px");
  140. }
  141. return (0, _vue.createVNode)(_vcTrigger.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
  142. "showAction": onPopupVisibleChange ? ['click'] : [],
  143. "hideAction": onPopupVisibleChange ? ['click'] : [],
  144. "popupPlacement": placement || (direction === 'rtl' ? 'bottomRight' : 'bottomLeft'),
  145. "builtinPlacements": builtInPlacements.value,
  146. "prefixCls": dropdownPrefixCls,
  147. "popupTransitionName": mergedTransitionName,
  148. "popupAlign": dropdownAlign,
  149. "popupVisible": visible,
  150. "getPopupContainer": getPopupContainer,
  151. "popupClassName": (0, _classNames2.default)(dropdownClassName, (0, _defineProperty2.default)({}, "".concat(dropdownPrefixCls, "-empty"), empty)),
  152. "popupStyle": popupStyle,
  153. "getTriggerDOMNode": getTriggerDOMNode,
  154. "onPopupVisibleChange": onPopupVisibleChange
  155. }), {
  156. default: slots.default,
  157. popup: function popup() {
  158. return (0, _vue.createVNode)("div", {
  159. "ref": popupRef,
  160. "onMouseenter": onPopupMouseEnter
  161. }, [popupNode]);
  162. }
  163. });
  164. };
  165. }
  166. });
  167. var _default = SelectTrigger;
  168. exports.default = _default;