UNPKG

26.8 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4var _typeof = require("@babel/runtime/helpers/typeof");
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.isMultiple = exports.default = void 0;
9var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
14var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15var _classnames = _interopRequireDefault(require("classnames"));
16var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
17var _useMergedState3 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
18var _isMobile = _interopRequireDefault(require("rc-util/lib/isMobile"));
19var _ref2 = require("rc-util/lib/ref");
20var React = _interopRequireWildcard(require("react"));
21var _useAllowClear2 = require("../hooks/useAllowClear");
22var _useBaseProps = require("../hooks/useBaseProps");
23var _useDelayReset3 = _interopRequireDefault(require("../hooks/useDelayReset"));
24var _useLock3 = _interopRequireDefault(require("../hooks/useLock"));
25var _useSelectTriggerControl = _interopRequireDefault(require("../hooks/useSelectTriggerControl"));
26var _Selector = _interopRequireDefault(require("../Selector"));
27var _SelectTrigger = _interopRequireDefault(require("../SelectTrigger"));
28var _TransBtn = _interopRequireDefault(require("../TransBtn"));
29var _valueUtil = require("../utils/valueUtil");
30var _SelectContext = _interopRequireDefault(require("../SelectContext"));
31var _Polite = _interopRequireDefault(require("./Polite"));
32var _excluded = ["id", "prefixCls", "className", "showSearch", "tagRender", "direction", "omitDomProps", "displayValues", "onDisplayValuesChange", "emptyOptions", "notFoundContent", "onClear", "mode", "disabled", "loading", "getInputElement", "getRawInputElement", "open", "defaultOpen", "onDropdownVisibleChange", "activeValue", "onActiveValueChange", "activeDescendantId", "searchValue", "autoClearSearchValue", "onSearch", "onSearchSplit", "tokenSeparators", "allowClear", "prefix", "suffixIcon", "clearIcon", "OptionList", "animation", "transitionName", "dropdownStyle", "dropdownClassName", "dropdownMatchSelectWidth", "dropdownRender", "dropdownAlign", "placement", "builtinPlacements", "getPopupContainer", "showAction", "onFocus", "onBlur", "onKeyUp", "onKeyDown", "onMouseDown"];
33function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
34function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
35var DEFAULT_OMIT_PROPS = ['value', 'onChange', 'removeIcon', 'placeholder', 'autoFocus', 'maxTagCount', 'maxTagTextLength', 'maxTagPlaceholder', 'choiceTransitionName', 'onInputKeyDown', 'onPopupScroll', 'tabIndex'];
36var isMultiple = exports.isMultiple = function isMultiple(mode) {
37 return mode === 'tags' || mode === 'multiple';
38};
39var BaseSelect = /*#__PURE__*/React.forwardRef(function (props, ref) {
40 var _customizeRawInputEle;
41 var id = props.id,
42 prefixCls = props.prefixCls,
43 className = props.className,
44 showSearch = props.showSearch,
45 tagRender = props.tagRender,
46 direction = props.direction,
47 omitDomProps = props.omitDomProps,
48 displayValues = props.displayValues,
49 onDisplayValuesChange = props.onDisplayValuesChange,
50 emptyOptions = props.emptyOptions,
51 _props$notFoundConten = props.notFoundContent,
52 notFoundContent = _props$notFoundConten === void 0 ? 'Not Found' : _props$notFoundConten,
53 onClear = props.onClear,
54 mode = props.mode,
55 disabled = props.disabled,
56 loading = props.loading,
57 getInputElement = props.getInputElement,
58 getRawInputElement = props.getRawInputElement,
59 open = props.open,
60 defaultOpen = props.defaultOpen,
61 onDropdownVisibleChange = props.onDropdownVisibleChange,
62 activeValue = props.activeValue,
63 onActiveValueChange = props.onActiveValueChange,
64 activeDescendantId = props.activeDescendantId,
65 searchValue = props.searchValue,
66 autoClearSearchValue = props.autoClearSearchValue,
67 onSearch = props.onSearch,
68 onSearchSplit = props.onSearchSplit,
69 tokenSeparators = props.tokenSeparators,
70 allowClear = props.allowClear,
71 prefix = props.prefix,
72 suffixIcon = props.suffixIcon,
73 clearIcon = props.clearIcon,
74 OptionList = props.OptionList,
75 animation = props.animation,
76 transitionName = props.transitionName,
77 dropdownStyle = props.dropdownStyle,
78 dropdownClassName = props.dropdownClassName,
79 dropdownMatchSelectWidth = props.dropdownMatchSelectWidth,
80 dropdownRender = props.dropdownRender,
81 dropdownAlign = props.dropdownAlign,
82 placement = props.placement,
83 builtinPlacements = props.builtinPlacements,
84 getPopupContainer = props.getPopupContainer,
85 _props$showAction = props.showAction,
86 showAction = _props$showAction === void 0 ? [] : _props$showAction,
87 onFocus = props.onFocus,
88 onBlur = props.onBlur,
89 onKeyUp = props.onKeyUp,
90 onKeyDown = props.onKeyDown,
91 onMouseDown = props.onMouseDown,
92 restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
93
94 // ============================== MISC ==============================
95 var multiple = isMultiple(mode);
96 var mergedShowSearch = (showSearch !== undefined ? showSearch : multiple) || mode === 'combobox';
97 var domProps = (0, _objectSpread2.default)({}, restProps);
98 DEFAULT_OMIT_PROPS.forEach(function (propName) {
99 delete domProps[propName];
100 });
101 omitDomProps === null || omitDomProps === void 0 || omitDomProps.forEach(function (propName) {
102 delete domProps[propName];
103 });
104
105 // ============================= Mobile =============================
106 var _React$useState = React.useState(false),
107 _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
108 mobile = _React$useState2[0],
109 setMobile = _React$useState2[1];
110 React.useEffect(function () {
111 // Only update on the client side
112 setMobile((0, _isMobile.default)());
113 }, []);
114
115 // ============================== Refs ==============================
116 var containerRef = React.useRef(null);
117 var selectorDomRef = React.useRef(null);
118 var triggerRef = React.useRef(null);
119 var selectorRef = React.useRef(null);
120 var listRef = React.useRef(null);
121 var blurRef = React.useRef(false);
122
123 /** Used for component focused management */
124 var _useDelayReset = (0, _useDelayReset3.default)(),
125 _useDelayReset2 = (0, _slicedToArray2.default)(_useDelayReset, 3),
126 mockFocused = _useDelayReset2[0],
127 setMockFocused = _useDelayReset2[1],
128 cancelSetMockFocused = _useDelayReset2[2];
129
130 // =========================== Imperative ===========================
131 React.useImperativeHandle(ref, function () {
132 var _selectorRef$current, _selectorRef$current2;
133 return {
134 focus: (_selectorRef$current = selectorRef.current) === null || _selectorRef$current === void 0 ? void 0 : _selectorRef$current.focus,
135 blur: (_selectorRef$current2 = selectorRef.current) === null || _selectorRef$current2 === void 0 ? void 0 : _selectorRef$current2.blur,
136 scrollTo: function scrollTo(arg) {
137 var _listRef$current;
138 return (_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : _listRef$current.scrollTo(arg);
139 },
140 nativeElement: containerRef.current || selectorDomRef.current
141 };
142 });
143
144 // ========================== Search Value ==========================
145 var mergedSearchValue = React.useMemo(function () {
146 var _displayValues$;
147 if (mode !== 'combobox') {
148 return searchValue;
149 }
150 var val = (_displayValues$ = displayValues[0]) === null || _displayValues$ === void 0 ? void 0 : _displayValues$.value;
151 return typeof val === 'string' || typeof val === 'number' ? String(val) : '';
152 }, [searchValue, mode, displayValues]);
153
154 // ========================== Custom Input ==========================
155 // Only works in `combobox`
156 var customizeInputElement = mode === 'combobox' && typeof getInputElement === 'function' && getInputElement() || null;
157
158 // Used for customize replacement for `rc-cascader`
159 var customizeRawInputElement = typeof getRawInputElement === 'function' && getRawInputElement();
160 var customizeRawInputRef = (0, _ref2.useComposeRef)(selectorDomRef, customizeRawInputElement === null || customizeRawInputElement === void 0 || (_customizeRawInputEle = customizeRawInputElement.props) === null || _customizeRawInputEle === void 0 ? void 0 : _customizeRawInputEle.ref);
161
162 // ============================== Open ==============================
163 // SSR not support Portal which means we need delay `open` for the first time render
164 var _React$useState3 = React.useState(false),
165 _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
166 rendered = _React$useState4[0],
167 setRendered = _React$useState4[1];
168 (0, _useLayoutEffect.default)(function () {
169 setRendered(true);
170 }, []);
171 var _useMergedState = (0, _useMergedState3.default)(false, {
172 defaultValue: defaultOpen,
173 value: open
174 }),
175 _useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
176 innerOpen = _useMergedState2[0],
177 setInnerOpen = _useMergedState2[1];
178 var mergedOpen = rendered ? innerOpen : false;
179
180 // Not trigger `open` in `combobox` when `notFoundContent` is empty
181 var emptyListContent = !notFoundContent && emptyOptions;
182 if (disabled || emptyListContent && mergedOpen && mode === 'combobox') {
183 mergedOpen = false;
184 }
185 var triggerOpen = emptyListContent ? false : mergedOpen;
186 var onToggleOpen = React.useCallback(function (newOpen) {
187 var nextOpen = newOpen !== undefined ? newOpen : !mergedOpen;
188 if (!disabled) {
189 setInnerOpen(nextOpen);
190 if (mergedOpen !== nextOpen) {
191 onDropdownVisibleChange === null || onDropdownVisibleChange === void 0 || onDropdownVisibleChange(nextOpen);
192 }
193 }
194 }, [disabled, mergedOpen, setInnerOpen, onDropdownVisibleChange]);
195
196 // ============================= Search =============================
197 var tokenWithEnter = React.useMemo(function () {
198 return (tokenSeparators || []).some(function (tokenSeparator) {
199 return ['\n', '\r\n'].includes(tokenSeparator);
200 });
201 }, [tokenSeparators]);
202 var _ref = React.useContext(_SelectContext.default) || {},
203 maxCount = _ref.maxCount,
204 rawValues = _ref.rawValues;
205 var onInternalSearch = function onInternalSearch(searchText, fromTyping, isCompositing) {
206 if (multiple && (0, _valueUtil.isValidCount)(maxCount) && (rawValues === null || rawValues === void 0 ? void 0 : rawValues.size) >= maxCount) {
207 return;
208 }
209 var ret = true;
210 var newSearchText = searchText;
211 onActiveValueChange === null || onActiveValueChange === void 0 || onActiveValueChange(null);
212 var separatedList = (0, _valueUtil.getSeparatedContent)(searchText, tokenSeparators, (0, _valueUtil.isValidCount)(maxCount) ? maxCount - rawValues.size : undefined);
213
214 // Check if match the `tokenSeparators`
215 var patchLabels = isCompositing ? null : separatedList;
216
217 // Ignore combobox since it's not split-able
218 if (mode !== 'combobox' && patchLabels) {
219 newSearchText = '';
220 onSearchSplit === null || onSearchSplit === void 0 || onSearchSplit(patchLabels);
221
222 // Should close when paste finish
223 onToggleOpen(false);
224
225 // Tell Selector that break next actions
226 ret = false;
227 }
228 if (onSearch && mergedSearchValue !== newSearchText) {
229 onSearch(newSearchText, {
230 source: fromTyping ? 'typing' : 'effect'
231 });
232 }
233 return ret;
234 };
235
236 // Only triggered when menu is closed & mode is tags
237 // If menu is open, OptionList will take charge
238 // If mode isn't tags, press enter is not meaningful when you can't see any option
239 var onInternalSearchSubmit = function onInternalSearchSubmit(searchText) {
240 // prevent empty tags from appearing when you click the Enter button
241 if (!searchText || !searchText.trim()) {
242 return;
243 }
244 onSearch(searchText, {
245 source: 'submit'
246 });
247 };
248
249 // Close will clean up single mode search text
250 React.useEffect(function () {
251 if (!mergedOpen && !multiple && mode !== 'combobox') {
252 onInternalSearch('', false, false);
253 }
254 }, [mergedOpen]);
255
256 // ============================ Disabled ============================
257 // Close dropdown & remove focus state when disabled change
258 React.useEffect(function () {
259 if (innerOpen && disabled) {
260 setInnerOpen(false);
261 }
262
263 // After onBlur is triggered, the focused does not need to be reset
264 if (disabled && !blurRef.current) {
265 setMockFocused(false);
266 }
267 }, [disabled]);
268
269 // ============================ Keyboard ============================
270 /**
271 * We record input value here to check if can press to clean up by backspace
272 * - null: Key is not down, this is reset by key up
273 * - true: Search text is empty when first time backspace down
274 * - false: Search text is not empty when first time backspace down
275 */
276 var _useLock = (0, _useLock3.default)(),
277 _useLock2 = (0, _slicedToArray2.default)(_useLock, 2),
278 getClearLock = _useLock2[0],
279 setClearLock = _useLock2[1];
280 var keyLockRef = React.useRef(false);
281
282 // KeyDown
283 var onInternalKeyDown = function onInternalKeyDown(event) {
284 var clearLock = getClearLock();
285 var key = event.key;
286 var isEnterKey = key === 'Enter';
287 if (isEnterKey) {
288 // Do not submit form when type in the input
289 if (mode !== 'combobox') {
290 event.preventDefault();
291 }
292
293 // We only manage open state here, close logic should handle by list component
294 if (!mergedOpen) {
295 onToggleOpen(true);
296 }
297 }
298 setClearLock(!!mergedSearchValue);
299
300 // Remove value by `backspace`
301 if (key === 'Backspace' && !clearLock && multiple && !mergedSearchValue && displayValues.length) {
302 var cloneDisplayValues = (0, _toConsumableArray2.default)(displayValues);
303 var removedDisplayValue = null;
304 for (var i = cloneDisplayValues.length - 1; i >= 0; i -= 1) {
305 var current = cloneDisplayValues[i];
306 if (!current.disabled) {
307 cloneDisplayValues.splice(i, 1);
308 removedDisplayValue = current;
309 break;
310 }
311 }
312 if (removedDisplayValue) {
313 onDisplayValuesChange(cloneDisplayValues, {
314 type: 'remove',
315 values: [removedDisplayValue]
316 });
317 }
318 }
319 for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
320 rest[_key - 1] = arguments[_key];
321 }
322 if (mergedOpen && (!isEnterKey || !keyLockRef.current)) {
323 var _listRef$current2;
324 (_listRef$current2 = listRef.current) === null || _listRef$current2 === void 0 || _listRef$current2.onKeyDown.apply(_listRef$current2, [event].concat(rest));
325 }
326 if (isEnterKey) {
327 keyLockRef.current = true;
328 }
329 onKeyDown === null || onKeyDown === void 0 || onKeyDown.apply(void 0, [event].concat(rest));
330 };
331
332 // KeyUp
333 var onInternalKeyUp = function onInternalKeyUp(event) {
334 for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
335 rest[_key2 - 1] = arguments[_key2];
336 }
337 if (mergedOpen) {
338 var _listRef$current3;
339 (_listRef$current3 = listRef.current) === null || _listRef$current3 === void 0 || _listRef$current3.onKeyUp.apply(_listRef$current3, [event].concat(rest));
340 }
341 if (event.key === 'Enter') {
342 keyLockRef.current = false;
343 }
344 onKeyUp === null || onKeyUp === void 0 || onKeyUp.apply(void 0, [event].concat(rest));
345 };
346
347 // ============================ Selector ============================
348 var onSelectorRemove = function onSelectorRemove(val) {
349 var newValues = displayValues.filter(function (i) {
350 return i !== val;
351 });
352 onDisplayValuesChange(newValues, {
353 type: 'remove',
354 values: [val]
355 });
356 };
357
358 // ========================== Focus / Blur ==========================
359 /** Record real focus status */
360 var focusRef = React.useRef(false);
361 var onContainerFocus = function onContainerFocus() {
362 setMockFocused(true);
363 if (!disabled) {
364 if (onFocus && !focusRef.current) {
365 onFocus.apply(void 0, arguments);
366 }
367
368 // `showAction` should handle `focus` if set
369 if (showAction.includes('focus')) {
370 onToggleOpen(true);
371 }
372 }
373 focusRef.current = true;
374 };
375 var onContainerBlur = function onContainerBlur() {
376 blurRef.current = true;
377 setMockFocused(false, function () {
378 focusRef.current = false;
379 blurRef.current = false;
380 onToggleOpen(false);
381 });
382 if (disabled) {
383 return;
384 }
385 if (mergedSearchValue) {
386 // `tags` mode should move `searchValue` into values
387 if (mode === 'tags') {
388 onSearch(mergedSearchValue, {
389 source: 'submit'
390 });
391 } else if (mode === 'multiple') {
392 // `multiple` mode only clean the search value but not trigger event
393 onSearch('', {
394 source: 'blur'
395 });
396 }
397 }
398 if (onBlur) {
399 onBlur.apply(void 0, arguments);
400 }
401 };
402
403 // Give focus back of Select
404 var activeTimeoutIds = [];
405 React.useEffect(function () {
406 return function () {
407 activeTimeoutIds.forEach(function (timeoutId) {
408 return clearTimeout(timeoutId);
409 });
410 activeTimeoutIds.splice(0, activeTimeoutIds.length);
411 };
412 }, []);
413 var onInternalMouseDown = function onInternalMouseDown(event) {
414 var _triggerRef$current;
415 var target = event.target;
416 var popupElement = (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.getPopupElement();
417
418 // We should give focus back to selector if clicked item is not focusable
419 if (popupElement && popupElement.contains(target)) {
420 var timeoutId = setTimeout(function () {
421 var index = activeTimeoutIds.indexOf(timeoutId);
422 if (index !== -1) {
423 activeTimeoutIds.splice(index, 1);
424 }
425 cancelSetMockFocused();
426 if (!mobile && !popupElement.contains(document.activeElement)) {
427 var _selectorRef$current3;
428 (_selectorRef$current3 = selectorRef.current) === null || _selectorRef$current3 === void 0 || _selectorRef$current3.focus();
429 }
430 });
431 activeTimeoutIds.push(timeoutId);
432 }
433 for (var _len3 = arguments.length, restArgs = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
434 restArgs[_key3 - 1] = arguments[_key3];
435 }
436 onMouseDown === null || onMouseDown === void 0 || onMouseDown.apply(void 0, [event].concat(restArgs));
437 };
438
439 // ============================ Dropdown ============================
440 var _React$useState5 = React.useState({}),
441 _React$useState6 = (0, _slicedToArray2.default)(_React$useState5, 2),
442 forceUpdate = _React$useState6[1];
443 // We need force update here since popup dom is render async
444 function onPopupMouseEnter() {
445 forceUpdate({});
446 }
447
448 // Used for raw custom input trigger
449 var onTriggerVisibleChange;
450 if (customizeRawInputElement) {
451 onTriggerVisibleChange = function onTriggerVisibleChange(newOpen) {
452 onToggleOpen(newOpen);
453 };
454 }
455
456 // Close when click on non-select element
457 (0, _useSelectTriggerControl.default)(function () {
458 var _triggerRef$current2;
459 return [containerRef.current, (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : _triggerRef$current2.getPopupElement()];
460 }, triggerOpen, onToggleOpen, !!customizeRawInputElement);
461
462 // ============================ Context =============================
463 var baseSelectContext = React.useMemo(function () {
464 return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
465 notFoundContent: notFoundContent,
466 open: mergedOpen,
467 triggerOpen: triggerOpen,
468 id: id,
469 showSearch: mergedShowSearch,
470 multiple: multiple,
471 toggleOpen: onToggleOpen
472 });
473 }, [props, notFoundContent, triggerOpen, mergedOpen, id, mergedShowSearch, multiple, onToggleOpen]);
474
475 // ==================================================================
476 // == Render ==
477 // ==================================================================
478
479 // ============================= Arrow ==============================
480 var showSuffixIcon = !!suffixIcon || loading;
481 var arrowNode;
482 if (showSuffixIcon) {
483 arrowNode = /*#__PURE__*/React.createElement(_TransBtn.default, {
484 className: (0, _classnames.default)("".concat(prefixCls, "-arrow"), (0, _defineProperty2.default)({}, "".concat(prefixCls, "-arrow-loading"), loading)),
485 customizeIcon: suffixIcon,
486 customizeIconProps: {
487 loading: loading,
488 searchValue: mergedSearchValue,
489 open: mergedOpen,
490 focused: mockFocused,
491 showSearch: mergedShowSearch
492 }
493 });
494 }
495
496 // ============================= Clear ==============================
497 var onClearMouseDown = function onClearMouseDown() {
498 var _selectorRef$current4;
499 onClear === null || onClear === void 0 || onClear();
500 (_selectorRef$current4 = selectorRef.current) === null || _selectorRef$current4 === void 0 || _selectorRef$current4.focus();
501 onDisplayValuesChange([], {
502 type: 'clear',
503 values: displayValues
504 });
505 onInternalSearch('', false, false);
506 };
507 var _useAllowClear = (0, _useAllowClear2.useAllowClear)(prefixCls, onClearMouseDown, displayValues, allowClear, clearIcon, disabled, mergedSearchValue, mode),
508 mergedAllowClear = _useAllowClear.allowClear,
509 clearNode = _useAllowClear.clearIcon;
510
511 // =========================== OptionList ===========================
512 var optionList = /*#__PURE__*/React.createElement(OptionList, {
513 ref: listRef
514 });
515
516 // ============================= Select =============================
517 var mergedClassName = (0, _classnames.default)(prefixCls, className, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(prefixCls, "-focused"), mockFocused), "".concat(prefixCls, "-multiple"), multiple), "".concat(prefixCls, "-single"), !multiple), "".concat(prefixCls, "-allow-clear"), allowClear), "".concat(prefixCls, "-show-arrow"), showSuffixIcon), "".concat(prefixCls, "-disabled"), disabled), "".concat(prefixCls, "-loading"), loading), "".concat(prefixCls, "-open"), mergedOpen), "".concat(prefixCls, "-customize-input"), customizeInputElement), "".concat(prefixCls, "-show-search"), mergedShowSearch));
518
519 // >>> Selector
520 var selectorNode = /*#__PURE__*/React.createElement(_SelectTrigger.default, {
521 ref: triggerRef,
522 disabled: disabled,
523 prefixCls: prefixCls,
524 visible: triggerOpen,
525 popupElement: optionList,
526 animation: animation,
527 transitionName: transitionName,
528 dropdownStyle: dropdownStyle,
529 dropdownClassName: dropdownClassName,
530 direction: direction,
531 dropdownMatchSelectWidth: dropdownMatchSelectWidth,
532 dropdownRender: dropdownRender,
533 dropdownAlign: dropdownAlign,
534 placement: placement,
535 builtinPlacements: builtinPlacements,
536 getPopupContainer: getPopupContainer,
537 empty: emptyOptions,
538 getTriggerDOMNode: function getTriggerDOMNode(node) {
539 return (
540 // TODO: This is workaround and should be removed in `rc-select`
541 // And use new standard `nativeElement` for ref.
542 // But we should update `rc-resize-observer` first.
543 selectorDomRef.current || node
544 );
545 },
546 onPopupVisibleChange: onTriggerVisibleChange,
547 onPopupMouseEnter: onPopupMouseEnter
548 }, customizeRawInputElement ? ( /*#__PURE__*/React.cloneElement(customizeRawInputElement, {
549 ref: customizeRawInputRef
550 })) : /*#__PURE__*/React.createElement(_Selector.default, (0, _extends2.default)({}, props, {
551 domRef: selectorDomRef,
552 prefixCls: prefixCls,
553 inputElement: customizeInputElement,
554 ref: selectorRef,
555 id: id,
556 prefix: prefix,
557 showSearch: mergedShowSearch,
558 autoClearSearchValue: autoClearSearchValue,
559 mode: mode,
560 activeDescendantId: activeDescendantId,
561 tagRender: tagRender,
562 values: displayValues,
563 open: mergedOpen,
564 onToggleOpen: onToggleOpen,
565 activeValue: activeValue,
566 searchValue: mergedSearchValue,
567 onSearch: onInternalSearch,
568 onSearchSubmit: onInternalSearchSubmit,
569 onRemove: onSelectorRemove,
570 tokenWithEnter: tokenWithEnter
571 })));
572
573 // >>> Render
574 var renderNode;
575
576 // Render raw
577 if (customizeRawInputElement) {
578 renderNode = selectorNode;
579 } else {
580 renderNode = /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
581 className: mergedClassName
582 }, domProps, {
583 ref: containerRef,
584 onMouseDown: onInternalMouseDown,
585 onKeyDown: onInternalKeyDown,
586 onKeyUp: onInternalKeyUp,
587 onFocus: onContainerFocus,
588 onBlur: onContainerBlur
589 }), /*#__PURE__*/React.createElement(_Polite.default, {
590 visible: mockFocused && !mergedOpen,
591 values: displayValues
592 }), selectorNode, arrowNode, mergedAllowClear && clearNode);
593 }
594 return /*#__PURE__*/React.createElement(_useBaseProps.BaseSelectContext.Provider, {
595 value: baseSelectContext
596 }, renderNode);
597});
598
599// Set display name for dev
600if (process.env.NODE_ENV !== 'production') {
601 BaseSelect.displayName = 'BaseSelect';
602}
603var _default = exports.default = BaseSelect;
\No newline at end of file