SubMenu.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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 _rcMenu = require("rc-menu");
  12. var _omit = _interopRequireDefault(require("rc-util/lib/omit"));
  13. var _useZIndex = require("../_util/hooks/useZIndex");
  14. var _reactNode = require("../_util/reactNode");
  15. var _MenuContext = _interopRequireDefault(require("./MenuContext"));
  16. const SubMenu = props => {
  17. var _a;
  18. const {
  19. popupClassName,
  20. icon,
  21. title,
  22. theme: customTheme
  23. } = props;
  24. const context = React.useContext(_MenuContext.default);
  25. const {
  26. prefixCls,
  27. inlineCollapsed,
  28. theme: contextTheme
  29. } = context;
  30. const parentPath = (0, _rcMenu.useFullPath)();
  31. let titleNode;
  32. if (!icon) {
  33. titleNode = inlineCollapsed && !parentPath.length && title && typeof title === 'string' ? (/*#__PURE__*/React.createElement("div", {
  34. className: `${prefixCls}-inline-collapsed-noicon`
  35. }, title.charAt(0))) : (/*#__PURE__*/React.createElement("span", {
  36. className: `${prefixCls}-title-content`
  37. }, title));
  38. } else {
  39. // inline-collapsed.md demo 依赖 span 来隐藏文字,有 icon 属性,则内部包裹一个 span
  40. // ref: https://github.com/ant-design/ant-design/pull/23456
  41. const titleIsSpan = /*#__PURE__*/React.isValidElement(title) && title.type === 'span';
  42. titleNode = /*#__PURE__*/React.createElement(React.Fragment, null, (0, _reactNode.cloneElement)(icon, {
  43. className: (0, _classnames.default)(/*#__PURE__*/React.isValidElement(icon) ? (_a = icon.props) === null || _a === void 0 ? void 0 : _a.className : undefined, `${prefixCls}-item-icon`)
  44. }), titleIsSpan ? title : /*#__PURE__*/React.createElement("span", {
  45. className: `${prefixCls}-title-content`
  46. }, title));
  47. }
  48. const contextValue = React.useMemo(() => Object.assign(Object.assign({}, context), {
  49. firstLevel: false
  50. }), [context]);
  51. // ============================ zIndex ============================
  52. const [zIndex] = (0, _useZIndex.useZIndex)('Menu');
  53. return /*#__PURE__*/React.createElement(_MenuContext.default.Provider, {
  54. value: contextValue
  55. }, /*#__PURE__*/React.createElement(_rcMenu.SubMenu, Object.assign({}, (0, _omit.default)(props, ['icon']), {
  56. title: titleNode,
  57. popupClassName: (0, _classnames.default)(prefixCls, popupClassName, `${prefixCls}-${customTheme || contextTheme}`),
  58. popupStyle: Object.assign({
  59. zIndex
  60. }, props.popupStyle)
  61. })));
  62. };
  63. var _default = exports.default = SubMenu;