473 lines
23 KiB
JavaScript
473 lines
23 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.BaseMenu = void 0;
|
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
var _icons = require("@ant-design/icons");
|
|
var _proProvider = require("@ant-design/pro-provider");
|
|
var _proUtils = require("@ant-design/pro-utils");
|
|
var _antd = require("antd");
|
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
var _react = _interopRequireWildcard(require("react"));
|
|
var _defaultSettings = require("../../defaultSettings");
|
|
var _utils = require("../../utils/utils");
|
|
var _menu = require("./style/menu");
|
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
// todo
|
|
|
|
var MenuItemTooltip = function MenuItemTooltip(props) {
|
|
var _useState = (0, _react.useState)(props.collapsed),
|
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
collapsed = _useState2[0],
|
|
setCollapsed = _useState2[1];
|
|
var _useState3 = (0, _react.useState)(false),
|
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
open = _useState4[0],
|
|
setOpen = _useState4[1];
|
|
(0, _react.useEffect)(function () {
|
|
setOpen(false);
|
|
setTimeout(function () {
|
|
setCollapsed(props.collapsed);
|
|
}, 400);
|
|
}, [props.collapsed]);
|
|
if (props.disable) {
|
|
return props.children;
|
|
}
|
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Tooltip, {
|
|
title: props.title,
|
|
open: collapsed && props.collapsed ? open : false,
|
|
placement: "right",
|
|
onOpenChange: setOpen,
|
|
children: props.children
|
|
});
|
|
};
|
|
var IconFont = (0, _icons.createFromIconfontCN)({
|
|
scriptUrl: _defaultSettings.defaultSettings.iconfontUrl
|
|
});
|
|
|
|
// Allow menu.js config icon as string or ReactNode
|
|
// icon: 'setting',
|
|
// icon: 'icon-geren' #For Iconfont ,
|
|
// icon: 'http://demo.com/icon.png',
|
|
// icon: '/favicon.png',
|
|
// icon: <Icon type="setting" />,
|
|
var getIcon = function getIcon(icon) {
|
|
var iconPrefixes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'icon-';
|
|
var className = arguments.length > 2 ? arguments[2] : undefined;
|
|
if (typeof icon === 'string' && icon !== '') {
|
|
if ((0, _proUtils.isUrl)(icon) || (0, _proUtils.isImg)(icon)) {
|
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
width: 16,
|
|
src: icon,
|
|
alt: "icon",
|
|
className: className
|
|
}, icon);
|
|
}
|
|
if (icon.startsWith(iconPrefixes)) {
|
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(IconFont, {
|
|
type: icon
|
|
});
|
|
}
|
|
}
|
|
return icon;
|
|
};
|
|
var getMenuTitleSymbol = function getMenuTitleSymbol(title) {
|
|
if (title && typeof title === 'string') {
|
|
var symbol = title.substring(0, 1).toUpperCase();
|
|
return symbol;
|
|
}
|
|
return null;
|
|
};
|
|
var MenuUtil = /*#__PURE__*/(0, _createClass2.default)(function MenuUtil(props) {
|
|
var _this = this;
|
|
(0, _classCallCheck2.default)(this, MenuUtil);
|
|
(0, _defineProperty2.default)(this, "props", void 0);
|
|
(0, _defineProperty2.default)(this, "getNavMenuItems", function () {
|
|
var menusData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
var level = arguments.length > 1 ? arguments[1] : undefined;
|
|
var noGroupLevel = arguments.length > 2 ? arguments[2] : undefined;
|
|
return menusData.map(function (item) {
|
|
return _this.getSubMenuOrItem(item, level, noGroupLevel);
|
|
}).filter(function (item) {
|
|
return item;
|
|
}).flat(1);
|
|
});
|
|
/** Get SubMenu or Item */
|
|
(0, _defineProperty2.default)(this, "getSubMenuOrItem", function (item, level, noGroupLevel) {
|
|
var _this$props = _this.props,
|
|
subMenuItemRender = _this$props.subMenuItemRender,
|
|
baseClassName = _this$props.baseClassName,
|
|
prefixCls = _this$props.prefixCls,
|
|
collapsed = _this$props.collapsed,
|
|
menu = _this$props.menu,
|
|
iconPrefixes = _this$props.iconPrefixes,
|
|
layout = _this$props.layout;
|
|
var isGroup = (menu === null || menu === void 0 ? void 0 : menu.type) === 'group' && layout !== 'top';
|
|
var designToken = _this.props.token;
|
|
var name = _this.getIntlName(item);
|
|
var children = (item === null || item === void 0 ? void 0 : item.children) || (item === null || item === void 0 ? void 0 : item.routes);
|
|
var menuType = isGroup && level === 0 ? 'group' : undefined;
|
|
if (Array.isArray(children) && children.length > 0) {
|
|
var _this$props2, _this$props3, _this$props4, _this$props5, _designToken$layout;
|
|
/** Menu 第一级可以有icon,或者 isGroup 时第二级别也要有 */
|
|
var shouldHasIcon = level === 0 || isGroup && level === 1;
|
|
|
|
// get defaultTitle by menuItemRender
|
|
var iconDom = getIcon(item.icon, iconPrefixes, "".concat(baseClassName, "-icon ").concat((_this$props2 = _this.props) === null || _this$props2 === void 0 ? void 0 : _this$props2.hashId));
|
|
/**
|
|
* 如果没有icon在收起的时候用首字母代替
|
|
*/
|
|
var defaultIcon = collapsed && shouldHasIcon ? getMenuTitleSymbol(name) : null;
|
|
var defaultTitle = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
className: (0, _classnames.default)("".concat(baseClassName, "-item-title"), (_this$props3 = _this.props) === null || _this$props3 === void 0 ? void 0 : _this$props3.hashId, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(baseClassName, "-item-title-collapsed"), collapsed), "".concat(baseClassName, "-item-title-collapsed-level-").concat(noGroupLevel), collapsed), "".concat(baseClassName, "-group-item-title"), menuType === 'group'), "".concat(baseClassName, "-item-collapsed-show-title"), (menu === null || menu === void 0 ? void 0 : menu.collapsedShowTitle) && collapsed)),
|
|
children: [menuType === 'group' && collapsed ? null : shouldHasIcon && iconDom ? /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
className: "".concat(baseClassName, "-item-icon ").concat((_this$props4 = _this.props) === null || _this$props4 === void 0 ? void 0 : _this$props4.hashId).trim(),
|
|
children: iconDom
|
|
}) : defaultIcon, /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
className: (0, _classnames.default)("".concat(baseClassName, "-item-text"), (_this$props5 = _this.props) === null || _this$props5 === void 0 ? void 0 : _this$props5.hashId, (0, _defineProperty2.default)({}, "".concat(baseClassName, "-item-text-has-icon"), menuType !== 'group' && shouldHasIcon && (iconDom || defaultIcon))),
|
|
children: name
|
|
})]
|
|
});
|
|
|
|
// subMenu only title render
|
|
var title = subMenuItemRender ? subMenuItemRender((0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
|
|
isUrl: false
|
|
}), defaultTitle, _this.props) : defaultTitle;
|
|
|
|
// 如果收起来,没有子菜单了,就不需要展示 group,所以 level 不增加
|
|
if (isGroup && level === 0 && _this.props.collapsed && !menu.collapsedShowGroupTitle) {
|
|
return _this.getNavMenuItems(children, level + 1, level);
|
|
}
|
|
var childrenList = _this.getNavMenuItems(children, level + 1, isGroup && level === 0 && _this.props.collapsed ? level : level + 1);
|
|
return [{
|
|
type: menuType,
|
|
key: item.key || item.path,
|
|
label: title,
|
|
onClick: isGroup ? undefined : item.onTitleClick,
|
|
children: childrenList,
|
|
className: (0, _classnames.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(baseClassName, "-group"), menuType === 'group'), "".concat(baseClassName, "-submenu"), menuType !== 'group'), "".concat(baseClassName, "-submenu-has-icon"), menuType !== 'group' && shouldHasIcon && iconDom))
|
|
}, isGroup && level === 0 ? {
|
|
type: 'divider',
|
|
prefixCls: prefixCls,
|
|
className: "".concat(baseClassName, "-divider"),
|
|
key: (item.key || item.path) + '-group-divider',
|
|
style: {
|
|
padding: 0,
|
|
borderBlockEnd: 0,
|
|
margin: _this.props.collapsed ? '4px' : '6px 16px',
|
|
marginBlockStart: _this.props.collapsed ? 4 : 8,
|
|
borderColor: designToken === null || designToken === void 0 || (_designToken$layout = designToken.layout) === null || _designToken$layout === void 0 || (_designToken$layout = _designToken$layout.sider) === null || _designToken$layout === void 0 ? void 0 : _designToken$layout.colorMenuItemDivider
|
|
}
|
|
} : undefined].filter(Boolean);
|
|
}
|
|
return {
|
|
className: "".concat(baseClassName, "-menu-item"),
|
|
disabled: item.disabled,
|
|
key: item.key || item.path,
|
|
onClick: item.onTitleClick,
|
|
// eslint-disable-next-line react/no-is-mounted
|
|
label: _this.getMenuItemPath(item, level, noGroupLevel)
|
|
};
|
|
});
|
|
(0, _defineProperty2.default)(this, "getIntlName", function (item) {
|
|
var name = item.name,
|
|
locale = item.locale;
|
|
var _this$props6 = _this.props,
|
|
menu = _this$props6.menu,
|
|
formatMessage = _this$props6.formatMessage;
|
|
var finalName = name;
|
|
if (locale && (menu === null || menu === void 0 ? void 0 : menu.locale) !== false) {
|
|
finalName = formatMessage === null || formatMessage === void 0 ? void 0 : formatMessage({
|
|
id: locale,
|
|
defaultMessage: name
|
|
});
|
|
}
|
|
if (_this.props.menuTextRender) {
|
|
return _this.props.menuTextRender(item, finalName, _this.props);
|
|
}
|
|
return finalName;
|
|
});
|
|
/**
|
|
* 判断是否是http链接.返回 Link 或 a Judge whether it is http link.return a or Link
|
|
*
|
|
* @memberof SiderMenu
|
|
*/
|
|
(0, _defineProperty2.default)(this, "getMenuItemPath", function (item, level, noGroupLevel) {
|
|
var _this$props9, _this$props10, _this$props11, _this$props12;
|
|
var itemPath = _this.conversionPath(item.path || '/');
|
|
var _this$props7 = _this.props,
|
|
_this$props7$location = _this$props7.location,
|
|
location = _this$props7$location === void 0 ? {
|
|
pathname: '/'
|
|
} : _this$props7$location,
|
|
isMobile = _this$props7.isMobile,
|
|
onCollapse = _this$props7.onCollapse,
|
|
menuItemRender = _this$props7.menuItemRender,
|
|
iconPrefixes = _this$props7.iconPrefixes;
|
|
|
|
// if local is true formatMessage all name。
|
|
var menuItemTitle = _this.getIntlName(item);
|
|
var _this$props8 = _this.props,
|
|
baseClassName = _this$props8.baseClassName,
|
|
menu = _this$props8.menu,
|
|
collapsed = _this$props8.collapsed;
|
|
var isGroup = (menu === null || menu === void 0 ? void 0 : menu.type) === 'group';
|
|
/** Menu 第一级可以有icon,或者 isGroup 时第二级别也要有 */
|
|
var hasIcon = level === 0 || isGroup && level === 1;
|
|
var icon = !hasIcon ? null : getIcon(item.icon, iconPrefixes, "".concat(baseClassName, "-icon ").concat((_this$props9 = _this.props) === null || _this$props9 === void 0 ? void 0 : _this$props9.hashId));
|
|
|
|
// 如果没有 icon 在收起的时候用首字母代替
|
|
var defaultIcon = collapsed && hasIcon ? getMenuTitleSymbol(menuItemTitle) : null;
|
|
var defaultItem = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
className: (0, _classnames.default)("".concat(baseClassName, "-item-title"), (_this$props10 = _this.props) === null || _this$props10 === void 0 ? void 0 : _this$props10.hashId, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(baseClassName, "-item-title-collapsed"), collapsed), "".concat(baseClassName, "-item-title-collapsed-level-").concat(noGroupLevel), collapsed), "".concat(baseClassName, "-item-collapsed-show-title"), (menu === null || menu === void 0 ? void 0 : menu.collapsedShowTitle) && collapsed)),
|
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
className: "".concat(baseClassName, "-item-icon ").concat((_this$props11 = _this.props) === null || _this$props11 === void 0 ? void 0 : _this$props11.hashId).trim(),
|
|
style: {
|
|
display: defaultIcon === null && !icon ? 'none' : ''
|
|
},
|
|
children: icon || /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
className: "anticon",
|
|
children: defaultIcon
|
|
})
|
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
className: (0, _classnames.default)("".concat(baseClassName, "-item-text"), (_this$props12 = _this.props) === null || _this$props12 === void 0 ? void 0 : _this$props12.hashId, (0, _defineProperty2.default)({}, "".concat(baseClassName, "-item-text-has-icon"), hasIcon && (icon || defaultIcon))),
|
|
children: menuItemTitle
|
|
})]
|
|
}, itemPath);
|
|
var isHttpUrl = (0, _proUtils.isUrl)(itemPath);
|
|
|
|
// Is it a http link
|
|
if (isHttpUrl) {
|
|
var _this$props13, _this$props14, _this$props15;
|
|
defaultItem = /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
|
|
onClick: function onClick() {
|
|
var _window, _window$open;
|
|
(_window = window) === null || _window === void 0 || (_window$open = _window.open) === null || _window$open === void 0 || _window$open.call(_window, itemPath, '_blank');
|
|
},
|
|
className: (0, _classnames.default)("".concat(baseClassName, "-item-title"), (_this$props13 = _this.props) === null || _this$props13 === void 0 ? void 0 : _this$props13.hashId, (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(baseClassName, "-item-title-collapsed"), collapsed), "".concat(baseClassName, "-item-title-collapsed-level-").concat(noGroupLevel), collapsed), "".concat(baseClassName, "-item-link"), true), "".concat(baseClassName, "-item-collapsed-show-title"), (menu === null || menu === void 0 ? void 0 : menu.collapsedShowTitle) && collapsed)),
|
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
className: "".concat(baseClassName, "-item-icon ").concat((_this$props14 = _this.props) === null || _this$props14 === void 0 ? void 0 : _this$props14.hashId).trim(),
|
|
style: {
|
|
display: defaultIcon === null && !icon ? 'none' : ''
|
|
},
|
|
children: icon || /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
className: "anticon",
|
|
children: defaultIcon
|
|
})
|
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
className: (0, _classnames.default)("".concat(baseClassName, "-item-text"), (_this$props15 = _this.props) === null || _this$props15 === void 0 ? void 0 : _this$props15.hashId, (0, _defineProperty2.default)({}, "".concat(baseClassName, "-item-text-has-icon"), hasIcon && (icon || defaultIcon))),
|
|
children: menuItemTitle
|
|
})]
|
|
}, itemPath);
|
|
}
|
|
if (menuItemRender) {
|
|
var renderItemProps = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
|
|
isUrl: isHttpUrl,
|
|
itemPath: itemPath,
|
|
isMobile: isMobile,
|
|
replace: itemPath === location.pathname,
|
|
onClick: function onClick() {
|
|
return onCollapse && onCollapse(true);
|
|
},
|
|
children: undefined
|
|
});
|
|
return level === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(MenuItemTooltip, {
|
|
collapsed: collapsed,
|
|
title: menuItemTitle,
|
|
disable: item.disabledTooltip,
|
|
children: menuItemRender(renderItemProps, defaultItem, _this.props)
|
|
}) : menuItemRender(renderItemProps, defaultItem, _this.props);
|
|
}
|
|
return level === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(MenuItemTooltip, {
|
|
collapsed: collapsed,
|
|
title: menuItemTitle,
|
|
disable: item.disabledTooltip,
|
|
children: defaultItem
|
|
}) : defaultItem;
|
|
});
|
|
(0, _defineProperty2.default)(this, "conversionPath", function (path) {
|
|
if (path && path.indexOf('http') === 0) {
|
|
return path;
|
|
}
|
|
return "/".concat(path || '').replace(/\/+/g, '/');
|
|
});
|
|
this.props = props;
|
|
});
|
|
/**
|
|
* 生成openKeys 的对象,因为设置了openKeys 就会变成受控,所以需要一个空对象
|
|
*
|
|
* @param BaseMenuProps
|
|
*/
|
|
var getOpenKeysProps = function getOpenKeysProps(openKeys, _ref) {
|
|
var layout = _ref.layout,
|
|
collapsed = _ref.collapsed;
|
|
var openKeysProps = {};
|
|
if (openKeys && !collapsed && ['side', 'mix'].includes(layout || 'mix')) {
|
|
openKeysProps = {
|
|
openKeys: openKeys
|
|
};
|
|
}
|
|
return openKeysProps;
|
|
};
|
|
var BaseMenu = exports.BaseMenu = function BaseMenu(props) {
|
|
var mode = props.mode,
|
|
className = props.className,
|
|
handleOpenChange = props.handleOpenChange,
|
|
style = props.style,
|
|
menuData = props.menuData,
|
|
prefixCls = props.prefixCls,
|
|
menu = props.menu,
|
|
matchMenuKeys = props.matchMenuKeys,
|
|
iconfontUrl = props.iconfontUrl,
|
|
propsSelectedKeys = props.selectedKeys,
|
|
onSelect = props.onSelect,
|
|
menuRenderType = props.menuRenderType,
|
|
propsOpenKeys = props.openKeys;
|
|
var _useContext = (0, _react.useContext)(_proProvider.ProProvider),
|
|
dark = _useContext.dark,
|
|
designToken = _useContext.token;
|
|
var baseClassName = "".concat(prefixCls, "-base-menu-").concat(mode);
|
|
// 用于减少 defaultOpenKeys 计算的组件
|
|
var defaultOpenKeysRef = (0, _react.useRef)([]);
|
|
var _useMountMergeState = (0, _proUtils.useMountMergeState)(menu === null || menu === void 0 ? void 0 : menu.defaultOpenAll),
|
|
_useMountMergeState2 = (0, _slicedToArray2.default)(_useMountMergeState, 2),
|
|
defaultOpenAll = _useMountMergeState2[0],
|
|
setDefaultOpenAll = _useMountMergeState2[1];
|
|
var _useMountMergeState3 = (0, _proUtils.useMountMergeState)(function () {
|
|
if (menu !== null && menu !== void 0 && menu.defaultOpenAll) {
|
|
return (0, _utils.getOpenKeysFromMenuData)(menuData) || [];
|
|
}
|
|
if (propsOpenKeys === false) {
|
|
return false;
|
|
}
|
|
return [];
|
|
}, {
|
|
value: propsOpenKeys === false ? undefined : propsOpenKeys,
|
|
onChange: handleOpenChange
|
|
}),
|
|
_useMountMergeState4 = (0, _slicedToArray2.default)(_useMountMergeState3, 2),
|
|
openKeys = _useMountMergeState4[0],
|
|
setOpenKeys = _useMountMergeState4[1];
|
|
var _useMountMergeState5 = (0, _proUtils.useMountMergeState)([], {
|
|
value: propsSelectedKeys,
|
|
onChange: onSelect ? function (keys) {
|
|
if (onSelect && keys) {
|
|
onSelect(keys);
|
|
}
|
|
} : undefined
|
|
}),
|
|
_useMountMergeState6 = (0, _slicedToArray2.default)(_useMountMergeState5, 2),
|
|
selectedKeys = _useMountMergeState6[0],
|
|
setSelectedKeys = _useMountMergeState6[1];
|
|
(0, _react.useEffect)(function () {
|
|
if (menu !== null && menu !== void 0 && menu.defaultOpenAll || propsOpenKeys === false) {
|
|
return;
|
|
}
|
|
if (matchMenuKeys) {
|
|
setOpenKeys(matchMenuKeys);
|
|
setSelectedKeys(matchMenuKeys);
|
|
}
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [matchMenuKeys.join('-')]);
|
|
(0, _react.useEffect)(function () {
|
|
// reset IconFont
|
|
if (iconfontUrl) {
|
|
IconFont = (0, _icons.createFromIconfontCN)({
|
|
scriptUrl: iconfontUrl
|
|
});
|
|
}
|
|
}, [iconfontUrl]);
|
|
(0, _react.useEffect)(function () {
|
|
// if pathname can't match, use the nearest parent's key
|
|
if (matchMenuKeys.join('-') !== (selectedKeys || []).join('-')) {
|
|
setSelectedKeys(matchMenuKeys);
|
|
}
|
|
if (!defaultOpenAll && propsOpenKeys !== false && matchMenuKeys.join('-') !== (openKeys || []).join('-')) {
|
|
var newKeys = matchMenuKeys;
|
|
// 如果不自动关闭,我需要把 openKeys 放进去
|
|
if ((menu === null || menu === void 0 ? void 0 : menu.autoClose) === false) {
|
|
newKeys = Array.from(new Set([].concat((0, _toConsumableArray2.default)(matchMenuKeys), (0, _toConsumableArray2.default)(openKeys || []))));
|
|
}
|
|
setOpenKeys(newKeys);
|
|
} else if (menu !== null && menu !== void 0 && menu.ignoreFlatMenu && defaultOpenAll) {
|
|
// 忽略用户手动折叠过的菜单状态,折叠按钮切换之后也可实现默认展开所有菜单
|
|
setOpenKeys((0, _utils.getOpenKeysFromMenuData)(menuData));
|
|
} else {
|
|
setDefaultOpenAll(false);
|
|
}
|
|
},
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
[matchMenuKeys.join('-')]);
|
|
var openKeysProps = (0, _react.useMemo)(function () {
|
|
return getOpenKeysProps(openKeys, props);
|
|
},
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
[openKeys && openKeys.join(','), props.layout, props.collapsed]);
|
|
var _useStyle = (0, _menu.useStyle)(baseClassName, mode),
|
|
wrapSSR = _useStyle.wrapSSR,
|
|
hashId = _useStyle.hashId;
|
|
var menuUtils = (0, _react.useMemo)(function () {
|
|
return new MenuUtil((0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
token: designToken,
|
|
menuRenderType: menuRenderType,
|
|
baseClassName: baseClassName,
|
|
hashId: hashId
|
|
}));
|
|
}, [props, designToken, menuRenderType, baseClassName, hashId]);
|
|
if (menu !== null && menu !== void 0 && menu.loading) {
|
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
style: mode !== null && mode !== void 0 && mode.includes('inline') ? {
|
|
padding: 24
|
|
} : {
|
|
marginBlockStart: 16
|
|
},
|
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Skeleton, {
|
|
active: true,
|
|
title: false,
|
|
paragraph: {
|
|
rows: mode !== null && mode !== void 0 && mode.includes('inline') ? 6 : 1
|
|
}
|
|
})
|
|
});
|
|
}
|
|
|
|
// 这次 openKeys === false 的时候的情况,这种情况下帮用户选中一次
|
|
// 第二此不会使用,所以用了 defaultOpenKeys
|
|
// 这里返回 null,是为了让 defaultOpenKeys 生效
|
|
if (props.openKeys === false && !props.handleOpenChange) {
|
|
defaultOpenKeysRef.current = matchMenuKeys;
|
|
}
|
|
var finallyData = props.postMenuData ? props.postMenuData(menuData) : menuData;
|
|
if (finallyData && (finallyData === null || finallyData === void 0 ? void 0 : finallyData.length) < 1) {
|
|
return null;
|
|
}
|
|
return wrapSSR( /*#__PURE__*/(0, _react.createElement)(_antd.Menu, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, openKeysProps), {}, {
|
|
_internalDisableMenuItemTitleTooltip: true,
|
|
key: "Menu",
|
|
mode: mode,
|
|
inlineIndent: 16,
|
|
defaultOpenKeys: defaultOpenKeysRef.current,
|
|
theme: dark ? 'dark' : 'light',
|
|
selectedKeys: selectedKeys,
|
|
style: (0, _objectSpread2.default)({
|
|
backgroundColor: 'transparent',
|
|
border: 'none'
|
|
}, style),
|
|
className: (0, _classnames.default)(className, hashId, baseClassName, (0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(baseClassName, "-horizontal"), mode === 'horizontal'), "".concat(baseClassName, "-collapsed"), props.collapsed)),
|
|
items: menuUtils.getNavMenuItems(finallyData, 0, 0),
|
|
onOpenChange: function onOpenChange(_openKeys) {
|
|
if (!props.collapsed) {
|
|
setOpenKeys(_openKeys);
|
|
}
|
|
}
|
|
}, props.menuProps)));
|
|
}; |