index.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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 = exports.Option = void 0;
  9. var React = _interopRequireWildcard(require("react"));
  10. var _classnames = _interopRequireDefault(require("classnames"));
  11. var _rcMentions = _interopRequireDefault(require("rc-mentions"));
  12. var _ref = require("rc-util/lib/ref");
  13. var _getAllowClear = _interopRequireDefault(require("../_util/getAllowClear"));
  14. var _PurePanel = _interopRequireDefault(require("../_util/PurePanel"));
  15. var _statusUtils = require("../_util/statusUtils");
  16. var _toList = _interopRequireDefault(require("../_util/toList"));
  17. var _warning = require("../_util/warning");
  18. var _configProvider = require("../config-provider");
  19. var _defaultRenderEmpty = _interopRequireDefault(require("../config-provider/defaultRenderEmpty"));
  20. var _useCSSVarCls = _interopRequireDefault(require("../config-provider/hooks/useCSSVarCls"));
  21. var _context = require("../form/context");
  22. var _useVariants = _interopRequireDefault(require("../form/hooks/useVariants"));
  23. var _spin = _interopRequireDefault(require("../spin"));
  24. var _style = _interopRequireDefault(require("./style"));
  25. var __rest = void 0 && (void 0).__rest || function (s, e) {
  26. var t = {};
  27. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
  28. if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
  29. if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
  30. }
  31. return t;
  32. };
  33. const {
  34. Option
  35. } = _rcMentions.default;
  36. exports.Option = Option;
  37. function loadingFilterOption() {
  38. return true;
  39. }
  40. const InternalMentions = /*#__PURE__*/React.forwardRef((props, ref) => {
  41. const {
  42. prefixCls: customizePrefixCls,
  43. className,
  44. rootClassName,
  45. disabled,
  46. loading,
  47. filterOption,
  48. children,
  49. notFoundContent,
  50. options,
  51. status: customStatus,
  52. allowClear = false,
  53. popupClassName,
  54. style,
  55. variant: customVariant
  56. } = props,
  57. restProps = __rest(props, ["prefixCls", "className", "rootClassName", "disabled", "loading", "filterOption", "children", "notFoundContent", "options", "status", "allowClear", "popupClassName", "style", "variant"]);
  58. const [focused, setFocused] = React.useState(false);
  59. const innerRef = React.useRef(null);
  60. const mergedRef = (0, _ref.composeRef)(ref, innerRef);
  61. // =================== Warning =====================
  62. if (process.env.NODE_ENV !== 'production') {
  63. const warning = (0, _warning.devUseWarning)('Mentions');
  64. warning.deprecated(!children, 'Mentions.Option', 'options');
  65. }
  66. const {
  67. getPrefixCls,
  68. renderEmpty,
  69. direction,
  70. mentions: contextMentions
  71. } = React.useContext(_configProvider.ConfigContext);
  72. const {
  73. status: contextStatus,
  74. hasFeedback,
  75. feedbackIcon
  76. } = React.useContext(_context.FormItemInputContext);
  77. const mergedStatus = (0, _statusUtils.getMergedStatus)(contextStatus, customStatus);
  78. const onFocus = (...args) => {
  79. if (restProps.onFocus) {
  80. restProps.onFocus.apply(restProps, args);
  81. }
  82. setFocused(true);
  83. };
  84. const onBlur = (...args) => {
  85. if (restProps.onBlur) {
  86. restProps.onBlur.apply(restProps, args);
  87. }
  88. setFocused(false);
  89. };
  90. const notFoundContentEle = React.useMemo(() => {
  91. if (notFoundContent !== undefined) {
  92. return notFoundContent;
  93. }
  94. return (renderEmpty === null || renderEmpty === void 0 ? void 0 : renderEmpty('Select')) || /*#__PURE__*/React.createElement(_defaultRenderEmpty.default, {
  95. componentName: "Select"
  96. });
  97. }, [notFoundContent, renderEmpty]);
  98. const mentionOptions = React.useMemo(() => {
  99. if (loading) {
  100. return /*#__PURE__*/React.createElement(Option, {
  101. value: "ANTD_SEARCHING",
  102. disabled: true
  103. }, /*#__PURE__*/React.createElement(_spin.default, {
  104. size: "small"
  105. }));
  106. }
  107. return children;
  108. }, [loading, children]);
  109. const mergedOptions = loading ? [{
  110. value: 'ANTD_SEARCHING',
  111. disabled: true,
  112. label: /*#__PURE__*/React.createElement(_spin.default, {
  113. size: "small"
  114. })
  115. }] : options;
  116. const mentionsfilterOption = loading ? loadingFilterOption : filterOption;
  117. const prefixCls = getPrefixCls('mentions', customizePrefixCls);
  118. const mergedAllowClear = (0, _getAllowClear.default)(allowClear);
  119. // Style
  120. const rootCls = (0, _useCSSVarCls.default)(prefixCls);
  121. const [wrapCSSVar, hashId, cssVarCls] = (0, _style.default)(prefixCls, rootCls);
  122. const [variant, enableVariantCls] = (0, _useVariants.default)('mentions', customVariant);
  123. const suffixNode = hasFeedback && /*#__PURE__*/React.createElement(React.Fragment, null, feedbackIcon);
  124. const mergedClassName = (0, _classnames.default)(contextMentions === null || contextMentions === void 0 ? void 0 : contextMentions.className, className, rootClassName, cssVarCls, rootCls);
  125. const mentions = /*#__PURE__*/React.createElement(_rcMentions.default, Object.assign({
  126. silent: loading,
  127. prefixCls: prefixCls,
  128. notFoundContent: notFoundContentEle,
  129. className: mergedClassName,
  130. disabled: disabled,
  131. allowClear: mergedAllowClear,
  132. direction: direction,
  133. style: Object.assign(Object.assign({}, contextMentions === null || contextMentions === void 0 ? void 0 : contextMentions.style), style)
  134. }, restProps, {
  135. filterOption: mentionsfilterOption,
  136. onFocus: onFocus,
  137. onBlur: onBlur,
  138. dropdownClassName: (0, _classnames.default)(popupClassName, rootClassName, hashId, cssVarCls, rootCls),
  139. ref: mergedRef,
  140. options: mergedOptions,
  141. suffix: suffixNode,
  142. classNames: {
  143. mentions: (0, _classnames.default)({
  144. [`${prefixCls}-disabled`]: disabled,
  145. [`${prefixCls}-focused`]: focused,
  146. [`${prefixCls}-rtl`]: direction === 'rtl'
  147. }, hashId),
  148. variant: (0, _classnames.default)({
  149. [`${prefixCls}-${variant}`]: enableVariantCls
  150. }, (0, _statusUtils.getStatusClassNames)(prefixCls, mergedStatus)),
  151. affixWrapper: hashId
  152. }
  153. }), mentionOptions);
  154. return wrapCSSVar(mentions);
  155. });
  156. const Mentions = InternalMentions;
  157. if (process.env.NODE_ENV !== 'production') {
  158. Mentions.displayName = 'Mentions';
  159. }
  160. Mentions.Option = Option;
  161. // We don't care debug panel
  162. /* istanbul ignore next */
  163. const PurePanel = (0, _PurePanel.default)(Mentions, undefined, undefined, 'mentions');
  164. Mentions._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;
  165. Mentions.getMentions = (value = '', config = {}) => {
  166. const {
  167. prefix = '@',
  168. split = ' '
  169. } = config;
  170. const prefixList = (0, _toList.default)(prefix);
  171. return value.split(split).map((str = '') => {
  172. let hitPrefix = null;
  173. prefixList.some(prefixStr => {
  174. const startStr = str.slice(0, prefixStr.length);
  175. if (startStr === prefixStr) {
  176. hitPrefix = prefixStr;
  177. return true;
  178. }
  179. return false;
  180. });
  181. if (hitPrefix !== null) {
  182. return {
  183. prefix: hitPrefix,
  184. value: str.slice(hitPrefix.length)
  185. };
  186. }
  187. return null;
  188. }).filter(entity => !!entity && !!entity.value);
  189. };
  190. var _default = exports.default = Mentions;