UNPKG

linkmore-design

Version:

🌈 πŸš€lmη»„δ»ΆεΊ“γ€‚πŸš€

164 lines (156 loc) β€’ 6.13 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classnames = _interopRequireDefault(require("classnames")); var _rcSelect = _interopRequireWildcard(require("rc-select")); var _omit = _interopRequireDefault(require("rc-util/lib/omit")); var React = _interopRequireWildcard(require("react")); var _configProvider = require("../config-provider"); var _defaultRenderEmpty = _interopRequireDefault(require("../config-provider/defaultRenderEmpty")); var _DisabledContext = _interopRequireDefault(require("../config-provider/DisabledContext")); var _SizeContext = _interopRequireDefault(require("../config-provider/SizeContext")); var _context = require("../form/context"); var _Compact = require("../space/Compact"); var _motion = require("../_util/motion"); var _statusUtils = require("../_util/statusUtils"); var _warning = _interopRequireDefault(require("../_util/warning")); var _iconUtil = _interopRequireDefault(require("./utils/iconUtil")); // TODO: 4.0 - codemod should help to change `filterOption` to support node props. const SECRET_COMBOBOX_MODE_DO_NOT_USE = 'SECRET_COMBOBOX_MODE_DO_NOT_USE'; const InternalSelect = ({ prefixCls: customizePrefixCls, bordered = true, className, getPopupContainer, dropdownClassName, popupClassName, listHeight = 256, placement, listItemHeight = 24, size: customizeSize, disabled: customDisabled, notFoundContent, status: customStatus, showArrow, ...props }, ref) => { const { getPopupContainer: getContextPopupContainer, getPrefixCls, renderEmpty, direction, virtual, dropdownMatchSelectWidth } = React.useContext(_configProvider.ConfigContext); const size = React.useContext(_SizeContext.default); const prefixCls = getPrefixCls('select', customizePrefixCls); const rootPrefixCls = getPrefixCls(); const { compactSize, compactItemClassnames } = (0, _Compact.useCompactItemContext)(prefixCls, direction); const mode = React.useMemo(() => { const { mode: m } = props; if (m === 'combobox') { return undefined; } if (m === SECRET_COMBOBOX_MODE_DO_NOT_USE) { return 'combobox'; } return m; }, [props.mode]); const isMultiple = mode === 'multiple' || mode === 'tags'; const mergedShowArrow = showArrow !== undefined ? showArrow : props.loading || !(isMultiple || mode === 'combobox'); // =================== Warning ===================== (0, _warning.default)(!dropdownClassName, 'Select', '`dropdownClassName` is deprecated which will be removed in next major version. Please use `popupClassName` instead.'); // ===================== Form Status ===================== const { status: contextStatus, hasFeedback, isFormItemInput, feedbackIcon } = (0, React.useContext)(_context.FormItemInputContext); const mergedStatus = (0, _statusUtils.getMergedStatus)(contextStatus, customStatus); // ===================== Empty ===================== let mergedNotFound; if (notFoundContent !== undefined) { mergedNotFound = notFoundContent; } else if (mode === 'combobox') { mergedNotFound = null; } else { mergedNotFound = (renderEmpty || _defaultRenderEmpty.default)('Select'); } // ===================== Icons ===================== const { suffixIcon, itemIcon, removeIcon, clearIcon } = (0, _iconUtil.default)({ ...props, multiple: isMultiple, hasFeedback, feedbackIcon, showArrow: mergedShowArrow, prefixCls }); const selectProps = (0, _omit.default)(props, ['suffixIcon', 'itemIcon']); const rcSelectRtlDropdownClassName = (0, _classnames.default)(popupClassName || dropdownClassName, { [`${prefixCls}-dropdown-${direction}`]: direction === 'rtl' }); const mergedSize = compactSize || customizeSize || size; // ===================== Disabled ===================== const disabled = React.useContext(_DisabledContext.default); const mergedDisabled = customDisabled ?? disabled; const mergedClassName = (0, _classnames.default)({ [`${prefixCls}-lg`]: mergedSize === 'large', [`${prefixCls}-sm`]: mergedSize === 'small', [`${prefixCls}-rtl`]: direction === 'rtl', [`${prefixCls}-borderless`]: !bordered, [`${prefixCls}-in-form-item`]: isFormItemInput }, (0, _statusUtils.getStatusClassNames)(prefixCls, mergedStatus, hasFeedback), compactItemClassnames, className); // ===================== Placement ===================== const getPlacement = () => { if (placement !== undefined) { return placement; } return direction === 'rtl' ? 'bottomRight' : 'bottomLeft'; }; return /*#__PURE__*/React.createElement(_rcSelect.default, (0, _extends2.default)({ ref: ref, virtual: virtual, dropdownMatchSelectWidth: dropdownMatchSelectWidth }, selectProps, { transitionName: (0, _motion.getTransitionName)(rootPrefixCls, (0, _motion.getTransitionDirection)(placement), props.transitionName), value: !props.loading ? selectProps.value : undefined, listHeight: listHeight, listItemHeight: listItemHeight, mode: mode, prefixCls: prefixCls, placement: getPlacement(), direction: direction, inputIcon: suffixIcon, menuItemSelectedIcon: itemIcon, removeIcon: removeIcon, clearIcon: clearIcon, notFoundContent: mergedNotFound, className: mergedClassName, getPopupContainer: getPopupContainer || getContextPopupContainer, dropdownClassName: rcSelectRtlDropdownClassName, showArrow: hasFeedback || showArrow, disabled: mergedDisabled })); }; const Select = /*#__PURE__*/React.forwardRef(InternalSelect); Select.SECRET_COMBOBOX_MODE_DO_NOT_USE = SECRET_COMBOBOX_MODE_DO_NOT_USE; Select.Option = _rcSelect.Option; Select.OptGroup = _rcSelect.OptGroup; var _default = Select; exports.default = _default;