UNPKG

@choerodon/master

Version:
681 lines (584 loc) 26.7 kB
import "choerodon-ui/lib/tooltip/style"; import _Tooltip from "choerodon-ui/lib/tooltip"; import "choerodon-ui/lib/icon/style"; import _Icon from "choerodon-ui/lib/icon"; import "choerodon-ui/lib/menu/style"; import _Menu from "choerodon-ui/lib/menu"; var _dec, _class; 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; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } import React, { Component } from 'react'; import _ from 'lodash'; import { Link, withRouter } from 'react-router-dom'; import { inject, observer } from 'mobx-react'; import classNames from 'classnames'; import MenuSideIcon from "./MenuSideIcon"; import { defaultThemeColor } from "../../../../../constants"; import folding from "../../../../../assets/images/folding.svg"; import unfold from "../../../../../assets/images/unfold.svg"; import bg from "../header/style/icons/bg.svg"; import "./RequireSvgResources"; import findFirstLeafMenu from "../../util/findFirstLeafMenu"; import { historyPushMenu } from "../../util"; import "./index.less"; var SubMenu = _Menu.SubMenu, Item = _Menu.Item, ItemGroup = _Menu.ItemGroup; var iconMap = { // 协作 'choerodon.code.project.cooperation': 'xiezuo', // 部署 'choerodon.code.project.deploy': 'bushu', // 开发 'choerodon.code.project.develop': 'kaifa', // 测试 'choerodon.code.project.test': 'ceshi', 'choerodon.code.project.demand': 'xuqiu', 'choerodon.code.site.infra': 'jichu', 'choerodon.code.project.doc': 'wendang', // 设置 'choerodon.code.project.setting': 'shezhi', // 组织层管理 'choerodon.code.organization.manager': 'guanli', // 组织层设置 'choerodon.code.organization.setting': 'shezhi', // 平台层管理 'choerodon.code.site.manager': 'guanli', // 平台层设置 'choerodon.code.site.setting': 'shezhi', // 平台层市场 'choerodon.code.site.market': 'shichang', // 平台层hzero 'choerodon.code.site.hzero.manager': 'hzero', // 用户层 个人 'choerodon.code.person.setting': 'shezhi' }; var defaultBlackList = ['/projects', '/applications', '/iam/app-market', '/knowledge/organization', '/workbench', '/market/app-market', '/iam/enterprise', '/agile/work-calendar']; export { defaultBlackList }; var CommonMenu = (_dec = inject('AppState', 'MenuStore'), withRouter(_class = _dec(_class = observer(_class = /*#__PURE__*/function (_Component) { _inherits(CommonMenu, _Component); var _super = _createSuper(CommonMenu); function CommonMenu() { var _this; _classCallCheck(this, CommonMenu); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _this.savedOpenKeys = []; _this.handleClick = function (e) { var _this$props = _this.props, MenuStore = _this$props.MenuStore, AppState = _this$props.AppState; var child = MenuStore.getMenuData; var selected = _this.findSelectedMenuByCode(child, e.key); var paths = e.keyPath && e.keyPath.reverse()[0]; // 去掉boot的 var selectedRoot = paths ? child.find(function (_ref) { var code = _ref.code; return code === paths; }) : selected; MenuStore.click(e.key, AppState.menuType.type, e.domEvent.currentTarget.innerText); if (selected) { var history = _this.props.history; MenuStore.treeReduce(selectedRoot, function (menu, parents, index) { if (index === 0 && !menu.subMenus) { MenuStore.setActiveMenu(selected); MenuStore.setSelected(selectedRoot); MenuStore.setOpenKeys([selected].concat(_toConsumableArray(parents)).map(function (_ref2) { var code = _ref2.code; return code; })); return true; } return false; }); var _findFirstLeafMenu = findFirstLeafMenu(selected), route = _findFirstLeafMenu.route, domian = _findFirstLeafMenu.domian; var link = _this.getMenuLink(route); historyPushMenu(history, link, domian); } _this.collapseMenu(); }; _this.handleOpenChange = function (openKeys) { var rest; if (openKeys.length < _this.props.MenuStore.openKeys.length) { rest = _.difference(JSON.parse(JSON.stringify(_this.props.MenuStore.openKeys)), openKeys); _this.props.MenuStore.setClosedKeys(rest); } else { rest = _.difference(openKeys, JSON.parse(JSON.stringify(_this.props.MenuStore.openKeys))); _this.props.MenuStore.setClosedKeys(rest, true); } _this.props.MenuStore.setOpenKeys(openKeys); }; _this.handleLeftOpenChange = function (leftOpenKeys) { _this.props.MenuStore.setLeftOpenKeys(leftOpenKeys); }; _this.collapseMenu = function () { var _this$props2 = _this.props, AppState = _this$props2.AppState, MenuStore = _this$props2.MenuStore; MenuStore.setLeftOpenKeys([]); AppState.setMenuExpanded(false); }; _this.toggleRightMenu = function () { var MenuStore = _this.props.MenuStore; var collapsed = MenuStore.collapsed, openKeys = MenuStore.openKeys; if (collapsed) { MenuStore.setCollapsed(false); MenuStore.setOpenKeys(_this.savedOpenKeys); } else { _this.savedOpenKeys = openKeys; MenuStore.setCollapsed(true); MenuStore.setOpenKeys([]); } }; _this.shouldHiddenMenu = function (pathname) { if (pathname.startsWith('/buzz/cooperate') && !pathname.startsWith('/buzz/cooperate-pro')) return true; if (defaultBlackList.some(function (pname) { return pathname.startsWith(pname); })) { return true; } // eslint-disable-next-line no-underscore-dangle var blackListString = window._env_.hiddenMenuList; if (!blackListString) return false; var blackListArray = blackListString.split(','); return blackListArray.some(function (pname) { return pathname.startsWith(pname); }); }; _this.renderMenuSideIconName = function (data) { var _root$AppState$menuTy; var _this$props3 = _this.props, MenuStore = _this$props3.MenuStore, AppState = _this$props3.AppState; var str = iconMap[data.code] || 'xiezuo'; var root = MenuStore.getActiveMenuRoot; if (true) { return "".concat(str, "new.sprite"); } if (root && data.code === ((_root$AppState$menuTy = root[AppState.menuType.type]) === null || _root$AppState$menuTy === void 0 ? void 0 : _root$AppState$menuTy.code)) { return "".concat(str, "click.sprite"); } return "".concat(str, ".sprite"); }; _this.handleClickItemMenuSide = function (item) { var _this$props4 = _this.props, MenuStore = _this$props4.MenuStore, AppState = _this$props4.AppState; var origin = MenuStore.getActiveMenuRoot; origin[AppState.menuType.type] = item; MenuStore.setOpenkeysBaseonRoot(item); MenuStore.setActiveMenuRoot(JSON.parse(JSON.stringify(origin))); }; _this.getBackgroundImage = function (color, isDefault) { if (color) { if (isDefault) { return "url(".concat(bg, ")"); } return 'unset'; } return "url(".concat(bg, ")"); }; _this.getBackgroundColor = function (color, isDefault) { if (color) { if (isDefault) { return 'unset'; } return color; } return 'unset'; }; _this.renderNewMenuSide = function () { var _AppState$menuType; var _this$props5 = _this.props, MenuStore = _this$props5.MenuStore, AppState = _this$props5.AppState; var menuData = MenuStore.getMenuData; var activeMenuRoot = MenuStore.getActiveMenuRoot[(_AppState$menuType = AppState.menuType) === null || _AppState$menuType === void 0 ? void 0 : _AppState$menuType.type] || {}; var themeColor = AppState.getSiteInfo.themeColor; var isDefaultThemeColor = (themeColor === null || themeColor === void 0 ? void 0 : themeColor.toLowerCase()) === (defaultThemeColor === null || defaultThemeColor === void 0 ? void 0 : defaultThemeColor.toLowerCase()); return /*#__PURE__*/React.createElement("div", { className: "c7ncd-theme4-menuSide", style: { backgroundImage: _this.getBackgroundImage(themeColor, isDefaultThemeColor), backgroundSize: 'cover', backgroundColor: _this.getBackgroundColor(themeColor, isDefaultThemeColor) } }, menuData.map(function (data) { return /*#__PURE__*/React.createElement("div", Object.assign({ className: classNames('c7ncd-theme4-menuSide-item', { // 'c7ncd-origin-menuSide': activeMenuRoot.id === data.id && AppState.getCurrentTheme === '', // 'c7ncd-origin-menuSide-item': AppState.getCurrentTheme === '', 'c7ncd-theme4-menuSide-item-hover': true }) }, activeMenuRoot.id === data.id && true ? { style: { background: 'rgba(140, 158, 255, 0.35)' } } : {}, { onClick: function onClick() { return _this.handleClickItemMenuSide(data); } }), /*#__PURE__*/React.createElement("div", { style: { borderRadius: '8px', width: 30, height: 30, display: 'flex', alignItems: 'center', justifyContent: 'center' } }, /*#__PURE__*/React.createElement(MenuSideIcon, { name: _this.renderMenuSideIconName(data) })), /*#__PURE__*/React.createElement("p", null, data.name)); })); }; return _this; } _createClass(CommonMenu, [{ key: "componentWillMount", value: function componentWillMount() { this.loadMenu(this.props); if (localStorage.getItem('rawStatistics')) { this.props.MenuStore.statistics = JSON.parse(localStorage.getItem('rawStatistics')); } } }, { key: "componentWillReceiveProps", value: function componentWillReceiveProps(nextProps) { this.loadMenu(nextProps); } }, { key: "loadMenu", value: function loadMenu(props) { var _this2 = this; var location = props.location, AppState = props.AppState, MenuStore = props.MenuStore; var currentType = MenuStore.type, currentIsUser = MenuStore.isUser, currentId = MenuStore.id, selected = MenuStore.selected, collapsed = MenuStore.collapsed; var pathname = location.pathname; var _AppState$currentMenu = AppState.currentMenuType, type = _AppState$currentMenu.type, id = _AppState$currentMenu.id; if (type) { MenuStore.loadMenuData().then(function (menus) { var isUser = AppState.isTypeUser; if (pathname === '/') { MenuStore.setActiveMenu(null); MenuStore.setSelected(selected ? menus.find(function (_ref3) { var code = _ref3.code; return code === selected.code; }) || menus[0] : menus[0]); MenuStore.setType(type); MenuStore.setId(id); MenuStore.setIsUser(isUser); // MenuStore.setOpenKeys([]); } else { MenuStore.treeReduce({ subMenus: menus }, function (menu, parents) { if (menu.route === pathname || pathname.indexOf("".concat(menu.route, "/")) === 0) { var nCode = parents.length && parents[parents.length - 1].code; var oCode = selected && selected.code; if (oCode !== nCode || currentType !== type || isUser !== currentIsUser || currentId !== id) {// MenuStore.setOpenKeys(collapsed ? [] : [menu, ...parents].map(({ code }) => code)); // this.savedOpenKeys = [menu, ...parents].map(({ code }) => code); } var activeMenu = menu.type === 'tab' ? parents[parents.length - 1] : menu; if (activeMenu && window.location.href.includes(activeMenu.route)) { MenuStore.setActiveMenu(activeMenu); MenuStore.setActiveMenuParents(parents); MenuStore.setSelected(parents[0]); MenuStore.setType(type); MenuStore.setId(id); MenuStore.setIsUser(isUser); MenuStore.setRootBaseOnActiveMenu(); } return true; } return false; }); } if (MenuStore.activeMenu && MenuStore.activeMenu.route === _this2.props.location.pathname && _this2.props.location.pathname !== '/') { // eslint-disable-next-line no-underscore-dangle document.getElementsByTagName('title')[0].innerText = "".concat(MenuStore.activeMenu.name || '', " \u2013 ").concat(MenuStore.activeMenu.parentName || '', " \u2013 ").concat(AppState.menuType.type !== 'site' ? "".concat(AppState.menuType.name, " \u2013 ") : '', " ").concat(AppState.getSiteInfo.systemTitle || window._env_.HEADER_TITLE_NAME || AppState.getSiteInfo.defaultTitle); } else { // eslint-disable-next-line no-underscore-dangle document.getElementsByTagName('title')[0].innerText = AppState.getSiteInfo.systemTitle || window._env_.HEADER_TITLE_NAME || AppState.getSiteInfo.defaultTitle; } }); } } // isThird 是否渲染三级菜单 }, { key: "getMenuSingle", value: function getMenuSingle(data, num, collapsed) { var _this3 = this; var isThird = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var paddingStyleObj = num === 0 && collapsed ? { padding: '0 !important' } : {}; if (!data.subMenus && !data.route) { return null; } if (!data.subMenus || data.subMenus.every(function (v) { return v.type === 'tab'; })) { var _findFirstLeafMenu2 = findFirstLeafMenu(data), route = _findFirstLeafMenu2.route; var link = /*#__PURE__*/React.createElement(Link, { to: this.getMenuLink(route), onClick: function onClick() { // 路由拦截时,url无变化但菜单发生变化了,暂时去除,后续测试 // this.props.MenuStore.setActiveMenu(data); _this3.props.MenuStore.click(data.code, data.level, data.name); }, style: { marginLeft: collapsed && num === 0 ? 0 : parseInt(num, 10) * 20, fontSize: '0.14rem' } }, /*#__PURE__*/React.createElement("span", { className: classNames({ 'theme4-iconwrap': true }), style: { marginRight: isThird ? '-3px' : '16px' } }, !isThird && /*#__PURE__*/React.createElement(_Icon, { type: data.icon })), /*#__PURE__*/React.createElement("span", { className: classNames({ 'theme4-iconwrap-text': true }) }, data.name)); return /*#__PURE__*/React.createElement(Item, { key: data.code, style: paddingStyleObj }, link); } return /*#__PURE__*/React.createElement(SubMenu, { key: data.code, className: "common-menu-right-popup", title: /*#__PURE__*/React.createElement("span", { style: { marginLeft: parseInt(num, 10) * 20, fontSize: '0.14rem' } }, /*#__PURE__*/React.createElement("span", { className: classNames({ 'theme4-iconwrap': true }) }, /*#__PURE__*/React.createElement(_Icon, { type: data.icon })), num === 0 && collapsed ? null : /*#__PURE__*/React.createElement("span", null, data.name)) }, data.subMenus.filter(function (v) { return v.type !== 'tab' && v.code !== 'choerodon.code.project.deploy.app-deployment.pipeline'; }).map(function (two) { return _this3.getMenuSingle(two, parseInt(num, 10) + 1, collapsed, true); })); } }, { key: "TooltipMenu", value: function TooltipMenu(reactNode, code) { var AppState = this.props.AppState; if (AppState.getDebugger) { return /*#__PURE__*/React.createElement(_Tooltip, { defaultVisible: "true", trigger: "hover", placement: "right" }, reactNode); } return reactNode; } }, { key: "getMenuLink", value: function getMenuLink(route) { var _this$props6 = this.props, AppState = _this$props6.AppState, history = _this$props6.history; var _AppState$currentMenu2 = AppState.currentMenuType, id = _AppState$currentMenu2.id, name = _AppState$currentMenu2.name, type = _AppState$currentMenu2.type, organizationId = _AppState$currentMenu2.organizationId, category = _AppState$currentMenu2.category; var search = ''; switch (type) { case 'site': if (AppState.isTypeUser) { search = '?type=site'; } break; case 'organization': case 'project': search = "?type=".concat(type, "&id=").concat(id).concat(name && "&name=".concat(encodeURIComponent(name)), "&category=").concat(category); break; case 'user': search = "?type=".concat(type); break; default: } return "".concat(route).concat(search).concat(search === '' ? "?organizationId=".concat(organizationId) : "&organizationId=".concat(organizationId)); } }, { key: "findSelectedMenuByCode", value: function findSelectedMenuByCode(child, code) { var _this4 = this; var selected = false; child.forEach(function (item) { if (selected) { return; } if (item.code === code) { selected = item; } else if (item.subMenus) { selected = _this4.findSelectedMenuByCode(item.subMenus, code); } }); return selected; } }, { key: "renderLeftMenuItem", value: function renderLeftMenuItem(item, collapsed) { var _this5 = this; var icon = /*#__PURE__*/React.createElement(_Icon, { type: item.icon }); var text; if (!collapsed) { text = /*#__PURE__*/React.createElement("span", null, item.name); } else { icon = /*#__PURE__*/React.createElement(_Tooltip, { placement: "right", title: item.name }, icon); } if (!item.subMenus || item.subMenus.every(function (v) { return v.type === 'tab'; })) { return /*#__PURE__*/React.createElement(Item, { key: item.code }, icon, text); } return /*#__PURE__*/React.createElement(ItemGroup // onTitleClick={this.handleClick} , { key: item.code, className: "common-menu-right-popup" }, item.subMenus.filter(function (v) { return v.type !== 'tab'; }).map(function (two) { return _this5.getMenuSingle(two, 0, collapsed); })); } }, { key: "renderRightMenu", value: function renderRightMenu() { var _AppState$menuType2, _child, _this6 = this; var _this$props7 = this.props, MenuStore = _this$props7.MenuStore, AppState = _this$props7.AppState; var collapsed = MenuStore.collapsed, openKeys = MenuStore.openKeys, activeMenu = MenuStore.activeMenu; var child; var activeMenuRoot = MenuStore.getActiveMenuRoot[(_AppState$menuType2 = AppState.menuType) === null || _AppState$menuType2 === void 0 ? void 0 : _AppState$menuType2.type] || {}; child = MenuStore.getMenuData.filter(function (item) { return item.id === activeMenuRoot.id; }); // if (AppState.getCurrentTheme === 'theme4') { // const activeMenuRoot = MenuStore.getActiveMenuRoot[AppState.menuType?.type] || {}; // child = MenuStore.getMenuData.filter((item) => item.id === activeMenuRoot.id); // } else { // child = MenuStore.getMenuData; // } return /*#__PURE__*/React.createElement("div", { className: classNames('common-menu-right', { collapsed: collapsed, 'theme4-common-menu': true }), style: { width: collapsed ? '50px' : 'calc(250px - 50px)' } }, /*#__PURE__*/React.createElement("div", { className: "common-menu-right-header", style: { position: 'relative', height: 0 } }, /*#__PURE__*/React.createElement("div", { className: classNames({ 'theme4-iconToggle': true }) }, true ? /*#__PURE__*/React.createElement("img", { role: "none", style: { cursor: 'pointer' }, src: collapsed ? unfold : folding, alt: "", onClick: this.toggleRightMenu }) : /*#__PURE__*/React.createElement(_Icon, { type: function () { // if (AppState.getCurrentTheme === 'theme4') { // if (collapsed) { // return 'keyboard_arrow_right'; // } // return 'keyboard_arrow_left'; // } return 'menu'; }(), onClick: this.toggleRightMenu }))), /*#__PURE__*/React.createElement("div", { className: "common-menu-right-content" }, /*#__PURE__*/React.createElement(_Menu, { className: classNames({ 'theme4-menu-ul': true }), mode: "inline", inlineCollapsed: collapsed, selectedKeys: [activeMenu && activeMenu.code], openKeys: collapsed ? [] : openKeys.slice(), onOpenChange: this.handleOpenChange, subMenuCloseDelay: 0.1, subMenuOpenDelay: 0.1 }, (_child = child) === null || _child === void 0 ? void 0 : _child.map(function (item) { return _this6.renderLeftMenuItem(item, collapsed); })))); } }, { key: "render", value: function render() { var _this$props8 = this.props, MenuStore = _this$props8.MenuStore, pathname = _this$props8.location.pathname, AppState = _this$props8.AppState; var child = MenuStore.getMenuData; if (!(child && child.length > 0) || this.shouldHiddenMenu(pathname) || MenuStore.notFoundSign) { return null; } return /*#__PURE__*/React.createElement("div", { className: "common-menu" }, this.renderNewMenuSide(), this.renderRightMenu()); } }]); return CommonMenu; }(Component)) || _class) || _class) || _class); export { CommonMenu as default };