UNPKG

qt-public-ui

Version:

新设计规范下业务组件库

159 lines (158 loc) 8.82 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = _interopRequireWildcard(require("react")); var _reactRouterDom = require("react-router-dom"); var _ = require(".."); var _antd = require("antd"); var _classnames = _interopRequireDefault(require("classnames")); var _simple = _interopRequireDefault(require("./simple")); var _utils = require("./utils"); var _globalContext = _interopRequireDefault(require("../UmProvider/globalContext")); require("./style"); var _excluded = ["options", "className", "mode", "appSelect", "style", "selected", "openKeys", "navHeightOffset"]; /** * @module 菜单配置 * @author lize * * 默认渲染为<Link>,仅以下情况渲染为 <a> * 1. link 参数以 https:// 或 http:// 或 // 开头 * 2. menu 配置具有 target 属性且 target 不等于 _self */ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var _default = exports["default"] = function _default(props) { var _ref = props, _ref$options = _ref.options, options = _ref$options === void 0 ? [] : _ref$options, className = _ref.className, _ref$mode = _ref.mode, mode = _ref$mode === void 0 ? 'inline' : _ref$mode, appSelect = _ref.appSelect, style = _ref.style, _ref$selected = _ref.selected, selected = _ref$selected === void 0 ? '' : _ref$selected, showKeys = _ref.openKeys, navHeightOffset = _ref.navHeightOffset, menuProps = (0, _objectWithoutProperties2["default"])(_ref, _excluded); // cxw 觉得styleType无用 var controlled = ('selected' in props); var _useState = (0, _react.useState)([]), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), openKeys = _useState2[0], setOpenKeys = _useState2[1]; var _useState3 = (0, _react.useState)(controlled ? [selected] : []), _useState4 = (0, _slicedToArray2["default"])(_useState3, 2), selectedKeys = _useState4[0], setSelectedKeys = _useState4[1]; var location = (0, _reactRouterDom.useLocation)(); var gContext = (0, _react.useContext)(_globalContext["default"]); var calcNavHeight = navHeightOffset || (appSelect ? 66 : 0); var tempStyle = calcNavHeight ? { height: "calc(100% - ".concat(calcNavHeight, "px)") } : {}; var renderLink = (0, _react.useCallback)(function (menu) { if (!menu.link) return null; var title = menu.title, link = menu.link, target = menu.target, icon = menu.icon, node = menu.node, _menu$disabled = menu.disabled, disabled = _menu$disabled === void 0 ? false : _menu$disabled; var content = icon ? /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_.IconSlim, { type: icon }), /*#__PURE__*/_react["default"].createElement("span", null, title)) : /*#__PURE__*/_react["default"].createElement("span", null, title); if ((0, _utils.isAnchor)(menu)) { return /*#__PURE__*/_react["default"].createElement("a", { href: link, target: target }, content); } if (disabled) { return content; } return /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Link, { to: link }, content, node); }, []); var renderMenu = (0, _react.useCallback)(function (menu) { if ((0, _utils.isMenuTitle)(menu)) { var children = menu.children, icon = menu.icon, title = menu.title, _menu$disabled2 = menu.disabled, disabled = _menu$disabled2 === void 0 ? false : _menu$disabled2, _menu$tip = menu.tip, tip = _menu$tip === void 0 ? '' : _menu$tip; return /*#__PURE__*/_react["default"].createElement(_antd.Menu.SubMenu, { key: menu.title, disabled: disabled, title: /*#__PURE__*/_react["default"].createElement(_antd.Tooltip, { title: tip }, /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_.IconSlim, { type: icon }), title, menu.isNew && /*#__PURE__*/_react["default"].createElement("span", { className: "nav-new-icon" }, /*#__PURE__*/_react["default"].createElement(_.IconSlim, { type: "umicon-NEW" })))) }, children.map(renderMenu)); } else { return /*#__PURE__*/_react["default"].createElement(_antd.Menu.Item, { key: menu.title, disabled: menu.disabled }, /*#__PURE__*/_react["default"].createElement(_antd.Tooltip, { title: menu.tip }, renderLink(menu), menu.isNew && /*#__PURE__*/_react["default"].createElement("span", { className: "nav-new-icon" }, /*#__PURE__*/_react["default"].createElement(_.IconSlim, { type: "umicon-NEW" })))); } }, []); var openKeysResult = (0, _react.useMemo)(function () { return Array.isArray(showKeys) ? (0, _toConsumableArray2["default"])(showKeys) : (0, _toConsumableArray2["default"])(openKeys); }, [openKeys, showKeys]); (0, _react.useEffect)(function () { controlled && selected && setSelectedKeys([selected]); }, [controlled, selected]); (0, _react.useEffect)(function () { var _matchMenu = (0, _utils.matchMenu)(options, location.pathname), openKey = _matchMenu.openKey, selectedKey = _matchMenu.selectedKey; openKey ? setOpenKeys([openKey]) : setOpenKeys([]); if (!controlled) { selectedKey ? setSelectedKeys([selectedKey]) : setSelectedKeys([]); } props.handleSelectedChange && props.handleSelectedChange(selectedKey); }, [controlled, location.pathname, options]); if (gContext.theme === 'operational' && mode !== 'horizontal') { return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_simple["default"], (0, _extends2["default"])({}, props, { selected: selectedKeys })), props.extraRender && props.extraRender()); } return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, mode !== 'horizontal' && appSelect, /*#__PURE__*/_react["default"].createElement("div", { className: (0, _classnames["default"])('umui-nav', className), style: _objectSpread(_objectSpread({}, tempStyle), style) }, /*#__PURE__*/_react["default"].createElement(_antd.Menu, (0, _extends2["default"])({}, menuProps, { mode: mode, openKeys: openKeysResult, selectedKeys: selectedKeys, onOpenChange: function onOpenChange(_openKeys) { setOpenKeys(_openKeys); menuProps.onOpenChange && menuProps.onOpenChange(_openKeys); // setOpenKeys as (_openKeys: string[]) => void; } }), options.map(renderMenu), props.extraRender && props.extraRender()))); };