AutoComplete.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. "use strict";
  2. "use client";
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  4. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  5. Object.defineProperty(exports, "__esModule", {
  6. value: true
  7. });
  8. exports.default = void 0;
  9. var React = _interopRequireWildcard(require("react"));
  10. var _classnames = _interopRequireDefault(require("classnames"));
  11. var _toArray = _interopRequireDefault(require("rc-util/lib/Children/toArray"));
  12. var _omit = _interopRequireDefault(require("rc-util/lib/omit"));
  13. var _useZIndex = require("../_util/hooks/useZIndex");
  14. var _warning = require("../_util/warning");
  15. var _configProvider = require("../config-provider");
  16. var _select = _interopRequireDefault(require("../select"));
  17. const {
  18. Option
  19. } = _select.default;
  20. function isSelectOptionOrSelectOptGroup(child) {
  21. return (child === null || child === void 0 ? void 0 : child.type) && (child.type.isSelectOption || child.type.isSelectOptGroup);
  22. }
  23. const AutoComplete = (props, ref) => {
  24. var _a, _b;
  25. const {
  26. prefixCls: customizePrefixCls,
  27. className,
  28. popupClassName,
  29. dropdownClassName,
  30. children,
  31. dataSource,
  32. dropdownStyle,
  33. dropdownRender,
  34. popupRender,
  35. onDropdownVisibleChange,
  36. onOpenChange,
  37. styles,
  38. classNames
  39. } = props;
  40. const childNodes = (0, _toArray.default)(children);
  41. const mergedPopupStyle = ((_a = styles === null || styles === void 0 ? void 0 : styles.popup) === null || _a === void 0 ? void 0 : _a.root) || dropdownStyle;
  42. const mergedPopupClassName = ((_b = classNames === null || classNames === void 0 ? void 0 : classNames.popup) === null || _b === void 0 ? void 0 : _b.root) || popupClassName || dropdownClassName;
  43. const mergedPopupRender = popupRender || dropdownRender;
  44. const mergedOnOpenChange = onOpenChange || onDropdownVisibleChange;
  45. // ============================= Input =============================
  46. let customizeInput;
  47. if (childNodes.length === 1 && /*#__PURE__*/React.isValidElement(childNodes[0]) && !isSelectOptionOrSelectOptGroup(childNodes[0])) {
  48. [customizeInput] = childNodes;
  49. }
  50. const getInputElement = customizeInput ? () => customizeInput : undefined;
  51. // ============================ Options ============================
  52. let optionChildren;
  53. // [Legacy] convert `children` or `dataSource` into option children
  54. if (childNodes.length && isSelectOptionOrSelectOptGroup(childNodes[0])) {
  55. optionChildren = children;
  56. } else {
  57. optionChildren = dataSource ? dataSource.map(item => {
  58. if (/*#__PURE__*/React.isValidElement(item)) {
  59. return item;
  60. }
  61. switch (typeof item) {
  62. case 'string':
  63. return /*#__PURE__*/React.createElement(Option, {
  64. key: item,
  65. value: item
  66. }, item);
  67. case 'object':
  68. {
  69. const {
  70. value: optionValue
  71. } = item;
  72. return /*#__PURE__*/React.createElement(Option, {
  73. key: optionValue,
  74. value: optionValue
  75. }, item.text);
  76. }
  77. default:
  78. return undefined;
  79. }
  80. }) : [];
  81. }
  82. if (process.env.NODE_ENV !== 'production') {
  83. const warning = (0, _warning.devUseWarning)('AutoComplete');
  84. process.env.NODE_ENV !== "production" ? warning(!customizeInput || !('size' in props), 'usage', 'You need to control style self instead of setting `size` when using customize input.') : void 0;
  85. const deprecatedProps = {
  86. dropdownMatchSelectWidth: 'popupMatchSelectWidth',
  87. dropdownStyle: 'styles.popup.root',
  88. dropdownClassName: 'classNames.popup.root',
  89. popupClassName: 'classNames.popup.root',
  90. dropdownRender: 'popupRender',
  91. onDropdownVisibleChange: 'onOpenChange',
  92. dataSource: 'options'
  93. };
  94. Object.entries(deprecatedProps).forEach(([oldProp, newProp]) => {
  95. warning.deprecated(!(oldProp in props), oldProp, newProp);
  96. });
  97. }
  98. const {
  99. getPrefixCls
  100. } = React.useContext(_configProvider.ConfigContext);
  101. const prefixCls = getPrefixCls('select', customizePrefixCls);
  102. // ============================ zIndex ============================
  103. const [zIndex] = (0, _useZIndex.useZIndex)('SelectLike', mergedPopupStyle === null || mergedPopupStyle === void 0 ? void 0 : mergedPopupStyle.zIndex);
  104. return /*#__PURE__*/React.createElement(_select.default, Object.assign({
  105. ref: ref,
  106. suffixIcon: null
  107. }, (0, _omit.default)(props, ['dataSource', 'dropdownClassName', 'popupClassName']), {
  108. prefixCls: prefixCls,
  109. classNames: {
  110. popup: {
  111. root: mergedPopupClassName
  112. },
  113. root: classNames === null || classNames === void 0 ? void 0 : classNames.root
  114. },
  115. styles: {
  116. popup: {
  117. root: Object.assign(Object.assign({}, mergedPopupStyle), {
  118. zIndex
  119. })
  120. },
  121. root: styles === null || styles === void 0 ? void 0 : styles.root
  122. },
  123. className: (0, _classnames.default)(`${prefixCls}-auto-complete`, className),
  124. mode: _select.default.SECRET_COMBOBOX_MODE_DO_NOT_USE,
  125. popupRender: mergedPopupRender,
  126. onOpenChange: mergedOnOpenChange,
  127. // Internal api
  128. getInputElement
  129. }), optionChildren);
  130. };
  131. const RefAutoComplete = /*#__PURE__*/React.forwardRef(AutoComplete);
  132. if (process.env.NODE_ENV !== 'production') {
  133. RefAutoComplete.displayName = 'AutoComplete';
  134. }
  135. var _default = exports.default = RefAutoComplete;