UNPKG

@e-group/material-module

Version:
155 lines (126 loc) 6.52 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireWildcard(require("react")); var _core = require("@material-ui/core"); var _reactRouterDom = require("react-router-dom"); var _NestedListItem = _interopRequireDefault(require("@e-group/material/NestedListItem")); 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) { (0, _defineProperty2.default)(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; } const NavLinkWrapper = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => /*#__PURE__*/_react.default.createElement(_reactRouterDom.NavLink, (0, _extends2.default)({ innerRef: ref }, props))); const NestedSideMenu = props => { const classes = props.classes, className = props.className, pathname = props.pathname, routes = props.routes, NestedListItemProps = props.NestedListItemProps, NestedListItemItemsProps = props.NestedListItemItemsProps, style = props.style, other = (0, _objectWithoutProperties2.default)(props, ["classes", "className", "pathname", "routes", "NestedListItemProps", "NestedListItemItemsProps", "style"]); const _ref = NestedListItemProps || {}, MuiListItemProps = _ref.MuiListItemProps, MuiListItemTextProps = _ref.MuiListItemTextProps, otherNestedListItemProps = (0, _objectWithoutProperties2.default)(_ref, ["MuiListItemProps", "MuiListItemTextProps"]); return /*#__PURE__*/_react.default.createElement(_core.List, (0, _extends2.default)({ style: _objectSpread({ width: 240 }, style) }, other), routes.map(route => { if (route.routes && route.routes.length > 0) { var _route$key2; let items = route.routes.filter(el => Boolean(el.breadcrumbName)); // If routes do not exist any breadcrumbName means it doesn't need openable NestedListItem. // Therefore we can simply return a `NestedListItem` wrapped by `Link`. if (items.length === 0) { var _route$key; return /*#__PURE__*/_react.default.createElement(_NestedListItem.default, (0, _extends2.default)({ key: (_route$key = route.key) !== null && _route$key !== void 0 ? _route$key : route.path, icon: route.icon, MuiListItemProps: _objectSpread({ button: true, selected: route.path === pathname, // TODO: Need fixed ts-ignore // @ts-ignore to: route.path, component: NavLinkWrapper }, MuiListItemProps), MuiListItemTextProps: _objectSpread({ primary: route.breadcrumbName }, MuiListItemTextProps) }, otherNestedListItemProps)); } const _ref2 = NestedListItemItemsProps || {}, NestedMuiListItemProps = _ref2.MuiListItemProps, NestedMuiListItemTextProps = _ref2.MuiListItemTextProps, otherNestedListItemItemsProps = (0, _objectWithoutProperties2.default)(_ref2, ["MuiListItemProps", "MuiListItemTextProps"]); let defaultIsOpen = false; items = items.map(el => { var _el$key; const selected = el.path === pathname; if (selected) { defaultIsOpen = true; } return _objectSpread({ key: (_el$key = el.key) !== null && _el$key !== void 0 ? _el$key : el.path, icon: el.icon, path: el.path, MuiListItemProps: _objectSpread({ button: true, selected, to: el.path, component: NavLinkWrapper }, NestedMuiListItemProps), MuiListItemTextProps: _objectSpread({ primary: el.breadcrumbName }, NestedMuiListItemTextProps) }, otherNestedListItemItemsProps); }); return /*#__PURE__*/_react.default.createElement(_NestedListItem.default, (0, _extends2.default)({ key: (_route$key2 = route.key) !== null && _route$key2 !== void 0 ? _route$key2 : route.path, icon: route.icon, MuiListItemProps: _objectSpread({ button: true }, MuiListItemProps), MuiListItemTextProps: _objectSpread({ primary: route.breadcrumbName }, MuiListItemTextProps), items: items, defaultIsOpen: defaultIsOpen }, otherNestedListItemProps)); } if (route.breadcrumbName) { var _route$key3; return /*#__PURE__*/_react.default.createElement(_NestedListItem.default, (0, _extends2.default)({ key: (_route$key3 = route.key) !== null && _route$key3 !== void 0 ? _route$key3 : route.path, icon: route.icon, MuiListItemProps: _objectSpread({ button: true, selected: route.path === pathname, // TODO: Need fixed ts-ignore // @ts-ignore to: route.path, component: NavLinkWrapper }, MuiListItemProps), MuiListItemTextProps: _objectSpread({ primary: route.breadcrumbName }, MuiListItemTextProps) }, otherNestedListItemProps)); } if (route.subheader) { return /*#__PURE__*/_react.default.createElement(_core.ListSubheader, { key: route.key }, route.subheader); } return null; })); }; var _default = NestedSideMenu; exports.default = _default;