UNPKG

antd

Version:

An enterprise-class UI design language and React components implementation

225 lines (224 loc) 7.98 kB
"use strict"; "use client"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.Option = void 0; var React = _interopRequireWildcard(require("react")); var _mentions = _interopRequireDefault(require("@rc-component/mentions")); var _ref = require("@rc-component/util/lib/ref"); var _clsx = require("clsx"); var _getAllowClear = _interopRequireDefault(require("../_util/getAllowClear")); var _hooks = require("../_util/hooks"); var _PurePanel = _interopRequireDefault(require("../_util/PurePanel")); var _statusUtils = require("../_util/statusUtils"); var _toList = _interopRequireDefault(require("../_util/toList")); var _warning = require("../_util/warning"); var _configProvider = require("../config-provider"); var _context = require("../config-provider/context"); var _defaultRenderEmpty = _interopRequireDefault(require("../config-provider/defaultRenderEmpty")); var _DisabledContext = _interopRequireDefault(require("../config-provider/DisabledContext")); var _useCSSVarCls = _interopRequireDefault(require("../config-provider/hooks/useCSSVarCls")); var _useSize = _interopRequireDefault(require("../config-provider/hooks/useSize")); var _context2 = require("../form/context"); var _useVariants = _interopRequireDefault(require("../form/hooks/useVariants")); var _spin = _interopRequireDefault(require("../spin")); var _style = _interopRequireDefault(require("./style")); const { Option } = _mentions.default; exports.Option = Option; function loadingFilterOption() { return true; } const InternalMentions = /*#__PURE__*/React.forwardRef((props, ref) => { const { prefixCls: customizePrefixCls, className, rootClassName, disabled: customDisabled, loading, filterOption, children, notFoundContent, options, status: customStatus, allowClear = false, popupClassName, style, variant: customVariant, classNames, styles, size: customSize, ...restProps } = props; const [focused, setFocused] = React.useState(false); const innerRef = React.useRef(null); const mergedRef = (0, _ref.composeRef)(ref, innerRef); // ===================== Size ===================== const mergedSize = (0, _useSize.default)(ctx => customSize ?? ctx); // =================== Warning ===================== if (process.env.NODE_ENV !== 'production') { const warning = (0, _warning.devUseWarning)('Mentions'); warning.deprecated(!children, 'Mentions.Option', 'options'); } const { getPrefixCls, direction, className: contextClassName, style: contextStyle, classNames: contextClassNames, styles: contextStyles } = (0, _context.useComponentConfig)('mentions'); const { renderEmpty } = React.useContext(_configProvider.ConfigContext); const { status: contextStatus, hasFeedback, feedbackIcon } = React.useContext(_context2.FormItemInputContext); const mergedStatus = (0, _statusUtils.getMergedStatus)(contextStatus, customStatus); // ===================== Disabled ===================== const contextDisabled = React.useContext(_DisabledContext.default); const mergedDisabled = customDisabled ?? contextDisabled; const prefixCls = getPrefixCls('mentions', customizePrefixCls); // =========== Merged Props for Semantic =========== const mergedProps = { ...props, disabled: mergedDisabled, status: mergedStatus, loading, options, variant: customVariant }; const [mergedClassNames, mergedStyles] = (0, _hooks.useMergeSemantic)([contextClassNames, classNames], [contextStyles, styles], { props: mergedProps }); const onFocus = (...args) => { if (restProps.onFocus) { restProps.onFocus.apply(restProps, args); } setFocused(true); }; const onBlur = (...args) => { if (restProps.onBlur) { restProps.onBlur.apply(restProps, args); } setFocused(false); }; const notFoundContentEle = React.useMemo(() => { if (notFoundContent !== undefined) { return notFoundContent; } return renderEmpty?.('Select') || /*#__PURE__*/React.createElement(_defaultRenderEmpty.default, { componentName: "Select" }); }, [notFoundContent, renderEmpty]); const mentionOptions = React.useMemo(() => { if (loading) { return /*#__PURE__*/React.createElement(Option, { value: "ANTD_SEARCHING", disabled: true }, /*#__PURE__*/React.createElement(_spin.default, { size: "small" })); } return children; }, [loading, children]); const mergedOptions = loading ? [{ value: 'ANTD_SEARCHING', disabled: true, label: /*#__PURE__*/React.createElement(_spin.default, { size: "small" }) }] : options; const mentionsfilterOption = loading ? loadingFilterOption : filterOption; const mergedAllowClear = (0, _getAllowClear.default)(allowClear); // Style const rootCls = (0, _useCSSVarCls.default)(prefixCls); const [hashId, cssVarCls] = (0, _style.default)(prefixCls, rootCls); const [variant, enableVariantCls] = (0, _useVariants.default)('mentions', customVariant); const suffixNode = hasFeedback && /*#__PURE__*/React.createElement(React.Fragment, null, feedbackIcon); const mergedClassName = (0, _clsx.clsx)(contextClassName, className, rootClassName, cssVarCls, rootCls, mergedClassNames.root, { [`${prefixCls}-sm`]: mergedSize === 'small', [`${prefixCls}-lg`]: mergedSize === 'large' }); return /*#__PURE__*/React.createElement(_mentions.default, { silent: loading, prefixCls: prefixCls, notFoundContent: notFoundContentEle, className: mergedClassName, disabled: mergedDisabled, allowClear: mergedAllowClear, direction: direction, style: { ...mergedStyles.root, ...contextStyle, ...style }, ...restProps, filterOption: mentionsfilterOption, onFocus: onFocus, onBlur: onBlur, ref: mergedRef, options: mergedOptions, suffix: suffixNode, styles: { textarea: mergedStyles.textarea, popup: mergedStyles.popup, suffix: mergedStyles.suffix }, classNames: { textarea: (0, _clsx.clsx)(mergedClassNames.textarea), popup: (0, _clsx.clsx)(mergedClassNames.popup, popupClassName, rootClassName, hashId, cssVarCls, rootCls), suffix: mergedClassNames.suffix, mentions: (0, _clsx.clsx)({ [`${prefixCls}-disabled`]: mergedDisabled, [`${prefixCls}-focused`]: focused, [`${prefixCls}-rtl`]: direction === 'rtl' }, hashId), variant: (0, _clsx.clsx)({ [`${prefixCls}-${variant}`]: enableVariantCls }, (0, _statusUtils.getStatusClassNames)(prefixCls, mergedStatus)), affixWrapper: hashId } }, mentionOptions); }); const Mentions = InternalMentions; if (process.env.NODE_ENV !== 'production') { Mentions.displayName = 'Mentions'; } Mentions.Option = Option; // We don't care debug panel /* istanbul ignore next */ const PurePanel = (0, _PurePanel.default)(Mentions, undefined, undefined, 'mentions'); Mentions._InternalPanelDoNotUseOrYouWillBeFired = PurePanel; Mentions.getMentions = (value = '', config = {}) => { const { prefix = '@', split = ' ' } = config; const prefixList = (0, _toList.default)(prefix); return value.split(split).map((str = '') => { let hitPrefix = null; prefixList.some(prefixStr => { const startStr = str.slice(0, prefixStr.length); if (startStr === prefixStr) { hitPrefix = prefixStr; return true; } return false; }); if (hitPrefix !== null) { return { prefix: hitPrefix, value: str.slice(hitPrefix.length) }; } return null; }).filter(entity => !!entity && !!entity.value); }; var _default = exports.default = Mentions;