MenuItem.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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 _toArray = _interopRequireDefault(require("rc-util/lib/Children/toArray"));
  13. var _omit = _interopRequireDefault(require("rc-util/lib/omit"));
  14. var _reactNode = require("../_util/reactNode");
  15. var _Sider = require("../layout/Sider");
  16. var _tooltip = _interopRequireDefault(require("../tooltip"));
  17. var _MenuContext = _interopRequireDefault(require("./MenuContext"));
  18. const MenuItem = props => {
  19. var _a;
  20. const {
  21. className,
  22. children,
  23. icon,
  24. title,
  25. danger,
  26. extra
  27. } = props;
  28. const {
  29. prefixCls,
  30. firstLevel,
  31. direction,
  32. disableMenuItemTitleTooltip,
  33. inlineCollapsed: isInlineCollapsed
  34. } = React.useContext(_MenuContext.default);
  35. const renderItemChildren = inlineCollapsed => {
  36. const label = children === null || children === void 0 ? void 0 : children[0];
  37. const wrapNode = /*#__PURE__*/React.createElement("span", {
  38. className: (0, _classnames.default)(`${prefixCls}-title-content`, {
  39. [`${prefixCls}-title-content-with-extra`]: !!extra || extra === 0
  40. })
  41. }, children);
  42. // inline-collapsed.md demo 依赖 span 来隐藏文字,有 icon 属性,则内部包裹一个 span
  43. // ref: https://github.com/ant-design/ant-design/pull/23456
  44. if (!icon || /*#__PURE__*/React.isValidElement(children) && children.type === 'span') {
  45. if (children && inlineCollapsed && firstLevel && typeof label === 'string') {
  46. return /*#__PURE__*/React.createElement("div", {
  47. className: `${prefixCls}-inline-collapsed-noicon`
  48. }, label.charAt(0));
  49. }
  50. }
  51. return wrapNode;
  52. };
  53. const {
  54. siderCollapsed
  55. } = React.useContext(_Sider.SiderContext);
  56. let tooltipTitle = title;
  57. if (typeof title === 'undefined') {
  58. tooltipTitle = firstLevel ? children : '';
  59. } else if (title === false) {
  60. tooltipTitle = '';
  61. }
  62. const tooltipProps = {
  63. title: tooltipTitle
  64. };
  65. if (!siderCollapsed && !isInlineCollapsed) {
  66. tooltipProps.title = null;
  67. // Reset `open` to fix control mode tooltip display not correct
  68. // ref: https://github.com/ant-design/ant-design/issues/16742
  69. tooltipProps.open = false;
  70. }
  71. const childrenLength = (0, _toArray.default)(children).length;
  72. let returnNode = /*#__PURE__*/React.createElement(_rcMenu.Item, Object.assign({}, (0, _omit.default)(props, ['title', 'icon', 'danger']), {
  73. className: (0, _classnames.default)({
  74. [`${prefixCls}-item-danger`]: danger,
  75. [`${prefixCls}-item-only-child`]: (icon ? childrenLength + 1 : childrenLength) === 1
  76. }, className),
  77. title: typeof title === 'string' ? title : undefined
  78. }), (0, _reactNode.cloneElement)(icon, {
  79. className: (0, _classnames.default)(/*#__PURE__*/React.isValidElement(icon) ? (_a = icon.props) === null || _a === void 0 ? void 0 : _a.className : undefined, `${prefixCls}-item-icon`)
  80. }), renderItemChildren(isInlineCollapsed));
  81. if (!disableMenuItemTitleTooltip) {
  82. returnNode = /*#__PURE__*/React.createElement(_tooltip.default, Object.assign({}, tooltipProps, {
  83. placement: direction === 'rtl' ? 'left' : 'right',
  84. classNames: {
  85. root: `${prefixCls}-inline-collapsed-tooltip`
  86. }
  87. }), returnNode);
  88. }
  89. return returnNode;
  90. };
  91. var _default = exports.default = MenuItem;