UNPKG

2.89 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = void 0;
9var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10var _classnames = _interopRequireDefault(require("classnames"));
11var _rcMenu = require("rc-menu");
12var _omit = _interopRequireDefault(require("rc-util/lib/omit"));
13var React = _interopRequireWildcard(require("react"));
14var _reactNode = require("../_util/reactNode");
15var _MenuContext = _interopRequireDefault(require("./MenuContext"));
16function SubMenu(props) {
17 var _a;
18 var popupClassName = props.popupClassName,
19 icon = props.icon,
20 title = props.title,
21 customTheme = props.theme;
22 var context = React.useContext(_MenuContext["default"]);
23 var prefixCls = context.prefixCls,
24 inlineCollapsed = context.inlineCollapsed,
25 contextTheme = context.theme,
26 mode = context.mode;
27 var parentPath = (0, _rcMenu.useFullPath)();
28 var titleNode;
29 if (!icon) {
30 titleNode = inlineCollapsed && !parentPath.length && title && typeof title === 'string' ? /*#__PURE__*/React.createElement("div", {
31 className: prefixCls + "-inline-collapsed-noicon"
32 }, title.charAt(0)) : /*#__PURE__*/React.createElement("span", {
33 className: prefixCls + "-title-content"
34 }, title);
35 } else {
36 // inline-collapsed.md demo 依赖 span 来隐藏文字,有 icon 属性,则内部包裹一个 span
37 // ref: https://github.com/ant-design/ant-design/pull/23456
38 var titleIsSpan = (0, _reactNode.isValidElement)(title) && title.type === 'span';
39 titleNode = /*#__PURE__*/React.createElement(React.Fragment, null, (0, _reactNode.cloneElement)(icon, {
40 className: (0, _classnames["default"])((0, _reactNode.isValidElement)(icon) ? (_a = icon.props) === null || _a === void 0 ? void 0 : _a.className : '', prefixCls + "-item-icon")
41 }), titleIsSpan ? title : /*#__PURE__*/React.createElement("span", {
42 className: prefixCls + "-title-content"
43 }, title));
44 }
45 var contextValue = React.useMemo(function () {
46 return (0, _extends2["default"])((0, _extends2["default"])({}, context), {
47 firstLevel: false
48 });
49 }, [context]);
50 var popupOffset = mode === 'horizontal' ? [0, 8] : [10, 0];
51 return /*#__PURE__*/React.createElement(_MenuContext["default"].Provider, {
52 value: contextValue
53 }, /*#__PURE__*/React.createElement(_rcMenu.SubMenu, (0, _extends2["default"])({
54 popupOffset: popupOffset
55 }, (0, _omit["default"])(props, ['icon']), {
56 title: titleNode,
57 popupClassName: (0, _classnames["default"])(prefixCls, popupClassName, prefixCls + "-" + (customTheme || contextTheme))
58 })));
59}
60var _default = SubMenu;
61exports["default"] = _default;
\No newline at end of file