UNPKG

@ccs-design/rc-pro

Version:

ccs design basic react component

337 lines (259 loc) 14.3 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _antd = require("antd"); var _umi = require("umi"); var icons = _interopRequireWildcard(require("@ant-design/icons")); var _classnames = _interopRequireDefault(require("classnames")); var _ = require("."); var _utils = require("../utils"); var _customIcon = _interopRequireDefault(require("./custom-icon")); var _ahooks = require("ahooks"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } var SubMenu = _antd.Menu.SubMenu; // // Media // const [isMobile] = useMedia({ // id: '_authorized', // query: '(max-width: 900px)', // }); var renderIcon = function renderIcon(key) { if (key === '') return ''; if (icons[key]) { var DynamicIcon = icons[key]; return /*#__PURE__*/_react.default.createElement(DynamicIcon, null); } (0, _utils.showLogWarning)("icon key ".concat(key, " \u4E0D\u5B58\u5728\u3002")); return ''; }; var getIcon = function getIcon(icon) { if (typeof icon === 'string' && icon.indexOf('http') === 0) { return /*#__PURE__*/_react.default.createElement("img", { src: icon, alt: "icon", className: "".concat(_.classPrefix, "-icon") }); } if (typeof icon === 'string' && icon !== '') { var customIcon = _customIcon.default.icons.find(function (i) { return i.name === icon; }); if (customIcon) return /*#__PURE__*/_react.default.createElement("span", { className: "anticon" }, customIcon.node); return renderIcon(icon); } return icon; }; var LayoutMenu = function LayoutMenu(_ref) { var mode = _ref.mode, theme = _ref.theme, menus = _ref.menus, menuData = _ref.menuData, collapsed = _ref.collapsed, location = _ref.location, layoutConfig = _ref.layoutConfig, renderChildrenMenu = _ref.renderChildrenMenu; var _ref2 = location || {}, pathname = _ref2.pathname; var _ref3 = layoutConfig || {}, MenuExpandMode = _ref3.MenuExpandMode, BrandPrimary = _ref3.BrandPrimary, IsDark = _ref3.IsDark; function initKey() { var _menu$parents; var menu = menus.find(function (m) { var menuUrl = m.nodeData.menuUrl; // 带参数路由 if (menuUrl.includes('?')) { return menuUrl.split('?')[0] === pathname; } return menuUrl === pathname; }); var keys = (menu === null || menu === void 0 ? void 0 : (_menu$parents = menu.parents) === null || _menu$parents === void 0 ? void 0 : _menu$parents.map(function (e) { return e.key; })) || []; return { openKeys: collapsed || mode === 'horizontal' || MenuExpandMode === 'all' ? [] : keys, selectKeys: [].concat(_toConsumableArray(keys), [(menu === null || menu === void 0 ? void 0 : menu.nodeId) || '']) }; } var _useState = (0, _react.useState)(initKey), _useState2 = _slicedToArray(_useState, 2), keys = _useState2[0], setKeys = _useState2[1]; // 获取展开的菜单 (0, _ahooks.useUpdateEffect)(function () { var _menu$parents2; var menu = menus.find(function (m) { var menuUrl = m.nodeData.menuUrl; // 带参数路由 if (menuUrl.includes('?')) { return menuUrl.split('?')[0] === pathname; } return menuUrl === pathname; }); var menuKeys = (menu === null || menu === void 0 ? void 0 : (_menu$parents2 = menu.parents) === null || _menu$parents2 === void 0 ? void 0 : _menu$parents2.map(function (e) { return e.key; })) || []; // 选中的菜单 if (collapsed || mode === 'horizontal' || MenuExpandMode === 'all') { setKeys(function (e) { return _objectSpread(_objectSpread({}, e), {}, { selectKeys: [].concat(_toConsumableArray(menuKeys), [(menu === null || menu === void 0 ? void 0 : menu.nodeId) || '']) }); }); } else { setKeys({ selectKeys: [].concat(_toConsumableArray(menuKeys), [(menu === null || menu === void 0 ? void 0 : menu.nodeId) || '']), openKeys: menuKeys }); } }, [pathname]); var conversionPath = function conversionPath(path) { if (path && path.indexOf('http') === 0) { return path; } return "/".concat(path || '').replace(/\/+/g, '/'); }; // 判断是否为顶级菜单 var isMainMenu = function isMainMenu(key) { return menuData.some(function (item) { if (key) { return item.nodeId === key || item.nodeData.menuUrl === key; } return false; }); }; /** * 判断是否是http链接.返回 Link 或 a * Judge whether it is http link.return a or Link * @memberof LayoutMenu */ var getMenuItemPath = function getMenuItemPath(item) { var nodeName = item.nodeName, menuUrl = item.nodeData.menuUrl; var itemPath = conversionPath(menuUrl); var icon = getIcon(item.icon); // Is it a http link if (/^https?:\/\//.test(itemPath)) { return /*#__PURE__*/_react.default.createElement("a", { href: itemPath }, icon, /*#__PURE__*/_react.default.createElement("span", null, nodeName)); } return /*#__PURE__*/_react.default.createElement(_umi.Link, { title: item.nodeName, to: process.env.isDumi ? '#none' : itemPath, replace: itemPath === pathname }, icon, /*#__PURE__*/_react.default.createElement("span", null, nodeName)); }; /** * get SubMenu or Item */ var getSubMenuOrItem = function getSubMenuOrItem(item) { // doc: add hideChildrenInMenu if (item.children && !item.nodeData.menuType && item.children.some(function (child) { return child.nodeName; })) { var nodeName = item.nodeName; return /*#__PURE__*/_react.default.createElement(SubMenu, { title: item.icon ? /*#__PURE__*/_react.default.createElement("span", null, getIcon(item.icon), /*#__PURE__*/_react.default.createElement("span", null, nodeName)) : nodeName, key: item.nodeId }, getNavMenuItems(item.children)); } return /*#__PURE__*/_react.default.createElement(_antd.Menu.Item, { key: item.nodeId }, getMenuItemPath(item)); }; // render title var renderTitle = function renderTitle(item) { var style = {}; if (MenuExpandMode === 'all' && keys.selectKeys.includes(item.nodeId)) { if (theme === 'light') { style.color = BrandPrimary; } else { style.color = '#fff'; } } return item.icon ? /*#__PURE__*/_react.default.createElement("span", { style: style }, getIcon(item.icon), /*#__PURE__*/_react.default.createElement("span", null, item.nodeName)) : /*#__PURE__*/_react.default.createElement("span", { style: style }, item.nodeName); }; /** 递归展开所有菜单 */ var renderAllMenuItem = (0, _react.useCallback)(function (item, index) { if (item.children && !item.nodeData.menuType && item.children.length) { if (renderChildrenMenu) { return renderChildrenMenu(item.children, keys.selectKeys, keys.selectKeys); } return item.children.map(function (i) { var _i$children; return !i.nodeData.menuType && ((_i$children = i.children) === null || _i$children === void 0 ? void 0 : _i$children.length) ? /*#__PURE__*/_react.default.createElement(_antd.Menu.ItemGroup, { key: i.nodeId, title: renderTitle(i), className: (0, _classnames.default)("".concat(_.classPrefix, "-menu-flex"), _defineProperty({}, "".concat(_.classPrefix, "-padding-left"), index)) }, renderAllMenuItem(i, 1)) : renderAllMenuItem(i, 1); }); } return /*#__PURE__*/_react.default.createElement(_antd.Menu.Item, { key: item.nodeId }, getMenuItemPath(item)); }, []); /** 一次性展开所有下级菜单 */ var getSubMenuAllItem = function getSubMenuAllItem(item) { var _item$children; return !item.nodeData.menuType && ((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) ? /*#__PURE__*/_react.default.createElement(SubMenu, { title: renderTitle(item), key: item.nodeId }, renderAllMenuItem(item, 0)) : /*#__PURE__*/_react.default.createElement(_antd.Menu.Item, { key: item.nodeId }, getMenuItemPath(item)); }; /** * 获得菜单子节点 * @memberof LayoutMenu */ var getNavMenuItems = function getNavMenuItems(menusData) { if (!menusData) { return []; } return menusData.filter(function (item) { return item.nodeName; }).map(function (item) { return MenuExpandMode === 'default' ? getSubMenuOrItem(item) : getSubMenuAllItem(item); }).filter(function (item) { return item; }); }; var handleOpenChange = function handleOpenChange(oks) { var moreThanOne = oks.filter(function (key) { return isMainMenu(key); }).length > 1; var s = moreThanOne ? [oks.pop()] : _toConsumableArray(oks); setKeys(function (e) { return _objectSpread(_objectSpread({}, e), {}, { openKeys: s }); }); }; return /*#__PURE__*/_react.default.createElement(_antd.Menu, { mode: MenuExpandMode === 'all' && mode === 'inline' ? 'vertical' : mode, theme: IsDark ? 'dark' : theme, openKeys: keys.openKeys, selectedKeys: keys.selectKeys, onOpenChange: handleOpenChange }, getNavMenuItems(menuData)); }; var _default = LayoutMenu; exports.default = _default;