"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 _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));

require("maycur-antd/lib/badge/style/css");

var _badge = _interopRequireDefault(require("maycur-antd/lib/badge"));

var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));

require("maycur-antd/lib/menu/style/css");

var _menu = _interopRequireDefault(require("maycur-antd/lib/menu"));

require("maycur-antd/lib/layout/style/css");

var _layout = _interopRequireDefault(require("maycur-antd/lib/layout"));

var _react = _interopRequireWildcard(require("react"));

var _lodash = _interopRequireDefault(require("lodash"));

var _utils = _interopRequireDefault(require("../../utils/utils"));

var _ScrollBar = _interopRequireDefault(require("../../ScrollBar"));

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; }

var prefix = _utils.default.prefixCls;
var Sider = _layout.default.Sider;
var SubMenu = _menu.default.SubMenu;

function loopPath(menus, pathArr) {
  var matchedMenu;
  if (!pathArr) return;

  _lodash.default.forEach(menus, function (menu) {
    var pathReg = new RegExp('^' + menu.path);

    if (menu.subRoutes) {
      var childMenu = loopPath(menu.subRoutes, pathArr);
      if (childMenu) matchedMenu = childMenu;
    } else {
      if (pathReg.test(pathArr.join('/'))) matchedMenu = menu;
    }
  });

  return matchedMenu;
}

var MkSider = function MkSider(props) {
  var _menus = props.menus,
      pathArr = props.pathArr,
      collapsed = props.collapsed,
      onToggleCollapsed = props.onToggleCollapsed,
      renderLoader = props.renderLoader,
      Link = props.Link,
      _renderSiderMenu = props.renderSiderMenu,
      getBadgeCount = props.getBadgeCount,
      isShowMenuFn = props.isShowMenuFn,
      renderMenuLabel = props.renderMenuLabel,
      isHistoryPush = props.isHistoryPush;

  var menus = _lodash.default.filter(_menus, function (menu) {
    return !menu.hideInRoute;
  });

  var matchedMenu = loopPath(menus, pathArr);
  var selectedKeys = matchedMenu ? [matchedMenu.path] : [];
  var defaultOpenKeys = pathArr.length > 2 ? [pathArr.slice(0, pathArr.length - 1).join('/')] : [];

  var _useState = (0, _react.useState)(defaultOpenKeys),
      _useState2 = (0, _slicedToArray2.default)(_useState, 2),
      openKeys = _useState2[0],
      setOpenKeys = _useState2[1];

  var renderMenu = function renderMenu(menu) {
    var _menu$subRoutes = menu.subRoutes,
        subRoutes = _menu$subRoutes === void 0 ? [] : _menu$subRoutes;
    var badgeCount = getBadgeCount && getBadgeCount(menu) || 0;
    var isShowMenu = isShowMenuFn(menu);

    var content = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, menu.icon ? collapsed ? /*#__PURE__*/_react.default.createElement(_badge.default, {
      count: badgeCount || 0,
      dot: true,
      className: 'show-dot-badge'
    }, /*#__PURE__*/_react.default.createElement("span", {
      className: "fm ".concat(menu.icon)
    })) : /*#__PURE__*/_react.default.createElement("span", {
      className: "fm ".concat(menu.icon)
    }) : null, /*#__PURE__*/_react.default.createElement("span", {
      style: {
        color: menu.color || ''
      },
      className: 'menu-name'
    }, " ", menu.name), badgeCount ? /*#__PURE__*/_react.default.createElement(_badge.default, {
      count: badgeCount || 0,
      className: 'item-badge',
      offset: [5, 0]
    }) : null);

    return isShowMenu ? menu.customRender ? renderMenuLabel(menu, collapsed, true) : // 有子菜单的，父菜单不需要路由跳转
    subRoutes.length ? /*#__PURE__*/_react.default.createElement("span", null, content) : /*#__PURE__*/_react.default.createElement(Link, {
      to: menu.path
    }, content) : null;
  };

  var onOpenChange = function onOpenChange(openKeys) {
    setOpenKeys(openKeys);
  };

  (0, _react.useEffect)(function () {
    if (isHistoryPush) {
      var _openKeys = new Set([].concat((0, _toConsumableArray2.default)(openKeys), [pathArr.slice(0, pathArr.length - 1).join('/')]));

      setOpenKeys((0, _toConsumableArray2.default)(_openKeys));
    }
  }, [pathArr]);

  var renderSiderMenu = function renderSiderMenu() {
    if (_renderSiderMenu) return _renderSiderMenu(menus);
    return /*#__PURE__*/_react.default.createElement(_menu.default, {
      theme: "light",
      mode: "inline",
      inlineIndent: "44",
      selectedKeys: selectedKeys,
      defaultOpenKeys: defaultOpenKeys,
      openKeys: openKeys,
      onOpenChange: onOpenChange,
      style: {
        height: '100%',
        borderRight: 0
      }
    }, menus.map(function (menu, index) {
      var split = menu.split,
          _menu$subRoutes2 = menu.subRoutes,
          subRoutes = _menu$subRoutes2 === void 0 ? [] : _menu$subRoutes2,
          customRender = menu.customRender;
      /*设置菜单根据功能块划分*/

      if (split) {
        return customRender ? renderMenuLabel(menu, collapsed) : /*#__PURE__*/_react.default.createElement(_menu.default.Divider, {
          key: index
        });
      }

      var content = renderMenu(menu);

      if (!content) {
        return null;
      }

      return subRoutes.length ? /*#__PURE__*/_react.default.createElement(SubMenu, {
        key: menu.path,
        title: content
      }, subRoutes.map(function (route, index) {
        var subMenu = renderMenu(route);
        return !!subMenu && /*#__PURE__*/_react.default.createElement(_menu.default.Item, {
          key: route.path
        }, subMenu);
      })) : /*#__PURE__*/_react.default.createElement(_menu.default.Item, {
        key: menu.path
      }, content);
    }));
  };

  return /*#__PURE__*/_react.default.createElement(_ScrollBar.default, {
    className: "".concat(prefix, "-sider-scroll")
  }, renderLoader && renderLoader(), /*#__PURE__*/_react.default.createElement(Sider, {
    breakpoint: "xl",
    theme: "light",
    className: "".concat(prefix, "-sider"),
    width: 220,
    trigger: null,
    collapsible: true,
    collapsed: collapsed,
    collapsedWidth: 56,
    onCollapse: onToggleCollapsed
  }, renderSiderMenu()));
};

var _default = MkSider;
exports.default = _default;