UNPKG

4.84 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.default = void 0;
11
12var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
14var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
15
16var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
18var React = _interopRequireWildcard(require("react"));
19
20var _rcTrigger = _interopRequireDefault(require("rc-trigger"));
21
22var _classnames = _interopRequireDefault(require("classnames"));
23
24var getBuiltInPlacements = function getBuiltInPlacements(dropdownMatchSelectWidth) {
25 // Enable horizontal overflow auto-adjustment when a custom dropdown width is provided
26 var adjustX = typeof dropdownMatchSelectWidth !== 'number' ? 0 : 1;
27 return {
28 bottomLeft: {
29 points: ['tl', 'bl'],
30 offset: [0, 4],
31 overflow: {
32 adjustX: adjustX,
33 adjustY: 1
34 }
35 },
36 bottomRight: {
37 points: ['tr', 'br'],
38 offset: [0, 4],
39 overflow: {
40 adjustX: adjustX,
41 adjustY: 1
42 }
43 },
44 topLeft: {
45 points: ['bl', 'tl'],
46 offset: [0, -4],
47 overflow: {
48 adjustX: adjustX,
49 adjustY: 1
50 }
51 },
52 topRight: {
53 points: ['br', 'tr'],
54 offset: [0, -4],
55 overflow: {
56 adjustX: adjustX,
57 adjustY: 1
58 }
59 }
60 };
61};
62
63var SelectTrigger = function SelectTrigger(props, ref) {
64 var prefixCls = props.prefixCls,
65 disabled = props.disabled,
66 visible = props.visible,
67 children = props.children,
68 popupElement = props.popupElement,
69 containerWidth = props.containerWidth,
70 animation = props.animation,
71 transitionName = props.transitionName,
72 dropdownStyle = props.dropdownStyle,
73 dropdownClassName = props.dropdownClassName,
74 _props$direction = props.direction,
75 direction = _props$direction === void 0 ? 'ltr' : _props$direction,
76 _props$dropdownMatchS = props.dropdownMatchSelectWidth,
77 dropdownMatchSelectWidth = _props$dropdownMatchS === void 0 ? true : _props$dropdownMatchS,
78 dropdownRender = props.dropdownRender,
79 dropdownAlign = props.dropdownAlign,
80 getPopupContainer = props.getPopupContainer,
81 empty = props.empty,
82 getTriggerDOMNode = props.getTriggerDOMNode,
83 restProps = (0, _objectWithoutProperties2.default)(props, ["prefixCls", "disabled", "visible", "children", "popupElement", "containerWidth", "animation", "transitionName", "dropdownStyle", "dropdownClassName", "direction", "dropdownMatchSelectWidth", "dropdownRender", "dropdownAlign", "getPopupContainer", "empty", "getTriggerDOMNode"]);
84 var dropdownPrefixCls = "".concat(prefixCls, "-dropdown");
85 var popupNode = popupElement;
86
87 if (dropdownRender) {
88 popupNode = dropdownRender(popupElement);
89 }
90
91 var builtInPlacements = React.useMemo(function () {
92 return getBuiltInPlacements(dropdownMatchSelectWidth);
93 }, [dropdownMatchSelectWidth]); // ===================== Motion ======================
94
95 var mergedTransitionName = animation ? "".concat(dropdownPrefixCls, "-").concat(animation) : transitionName; // ======================= Ref =======================
96
97 var popupRef = React.useRef(null);
98 React.useImperativeHandle(ref, function () {
99 return {
100 getPopupElement: function getPopupElement() {
101 return popupRef.current;
102 }
103 };
104 });
105 var popupStyle = (0, _objectSpread2.default)({
106 minWidth: containerWidth
107 }, dropdownStyle);
108
109 if (typeof dropdownMatchSelectWidth === 'number') {
110 popupStyle.width = dropdownMatchSelectWidth;
111 } else if (dropdownMatchSelectWidth) {
112 popupStyle.width = containerWidth;
113 }
114
115 return React.createElement(_rcTrigger.default, Object.assign({}, restProps, {
116 showAction: [],
117 hideAction: [],
118 popupPlacement: direction === 'rtl' ? 'bottomRight' : 'bottomLeft',
119 builtinPlacements: builtInPlacements,
120 prefixCls: dropdownPrefixCls,
121 popupTransitionName: mergedTransitionName,
122 popup: React.createElement("div", {
123 ref: popupRef
124 }, popupNode),
125 popupAlign: dropdownAlign,
126 popupVisible: visible,
127 getPopupContainer: getPopupContainer,
128 popupClassName: (0, _classnames.default)(dropdownClassName, (0, _defineProperty2.default)({}, "".concat(dropdownPrefixCls, "-empty"), empty)),
129 popupStyle: popupStyle,
130 getTriggerDOMNode: getTriggerDOMNode
131 }), children);
132};
133
134var RefSelectTrigger = React.forwardRef(SelectTrigger);
135RefSelectTrigger.displayName = 'SelectTrigger';
136var _default = RefSelectTrigger;
137exports.default = _default;
\No newline at end of file