diff --git a/src/app/pages/pages.module.js b/src/app/pages/pages.module.js index ea11f40..86c73b1 100644 --- a/src/app/pages/pages.module.js +++ b/src/app/pages/pages.module.js @@ -24,34 +24,43 @@ $urlRouterProvider.otherwise('/dashboard'); baSidebarServiceProvider.addStaticItem({ + name: 'pages', title: 'Pages', icon: 'ion-document', subMenu: [{ + name: 'pages.signIn', title: 'Sign In', fixedHref: 'auth.html', blank: true }, { + name: 'pages.signUp', title: 'Sign Up', fixedHref: 'reg.html', blank: true }, { + name: 'pages.userProfile', title: 'User Profile', stateRef: 'profile' }, { + name: 'pages.page404', title: '404 Page', fixedHref: '404.html', blank: true }] }); baSidebarServiceProvider.addStaticItem({ + name: 'menuLevel1', title: 'Menu Level 1', icon: 'ion-ios-more', subMenu: [{ + name: 'menuLevel1.menuLevel1.1', title: 'Menu Level 1.1', disabled: true }, { + name: 'menuLevel1.menuLevel1.2', title: 'Menu Level 1.2', subMenu: [{ + name: 'menuLevel1.menuLevel1.2.1', title: 'Menu Level 1.2.1', disabled: true }] diff --git a/src/app/theme/components/baSidebar/baSidebar.service.js b/src/app/theme/components/baSidebar/baSidebar.service.js index 3c19627..76b3ff5 100644 --- a/src/app/theme/components/baSidebar/baSidebar.service.js +++ b/src/app/theme/components/baSidebar/baSidebar.service.js @@ -13,26 +13,51 @@ }; /** @ngInject */ - this.$get = function($state, layoutSizes) { - return new _factory(); + this.$get = function ($state, layoutSizes, baSidebarModel) { + return new _factory(); function _factory() { var isMenuCollapsed = shouldMenuBeCollapsed(); - this.getMenuItems = function() { - var states = defineMenuItemStates(); - var menuItems = states.filter(function(item) { - return item.level == 0; - }); + this.getMenuItems = function () { + var menuItems = baSidebarModel.getMenuItems(); + if (!menuItems) { + menuItems = createMenu(); + baSidebarModel.setMenuItems(menuItems); + } + return menuItems; + }; - menuItems.forEach(function(item) { - var children = states.filter(function(child) { - return child.level == 1 && child.name.indexOf(item.name) === 0; - }); - item.subMenu = children.length ? children : null; - }); + this.addMenuItem = function (item) { + var menuItems = baSidebarModel.getMenuItems(); + var parent = null; + _findParent(menuItems, item); + if (parent) { + _addToSubMenu(item); + } else { + menuItems.push(item); + } - return menuItems.concat(staticMenuItems); + baSidebarModel.setMenuItems(menuItems); + + function _findParent(parents, item) { + parent = parents + .filter(function (p) { + return item.name.indexOf(p.name) === 0; + }) + .pop(); + if (parent && parent.subMenu) { + _findParent(parent.subMenu, item); + } + } + + function _addToSubMenu(item) { + if (parent.subMenu) { + parent.subMenu.push(item); + } else { + parent.subMenu = [item]; + } + } }; this.shouldMenuBeCollapsed = shouldMenuBeCollapsed; @@ -63,6 +88,32 @@ } }; + function createMenu() { + var parentLevel = 0; + var states = defineMenuItemStates(); + var parents = states.filter(function(item) { + return item.level == parentLevel; + }); + + _bindMenuItems(parents, ++parentLevel); + return parents.concat(staticMenuItems); + + function _bindMenuItems(parents, childLevel) { + var child = states.filter(function (item) { + return item.level == childLevel; + }); + if (child.length) { + parents.forEach(function (p) { + var children = child.filter(function (c) { + return c.name.indexOf(p.name) === 0; + }); + p.subMenu = children.length ? children : null; + }); + _bindMenuItems(child, ++childLevel) + } + } + } + function defineMenuItemStates() { return $state.get() .filter(function(s) { diff --git a/src/app/theme/components/baSidebar/baSidebarModel.js b/src/app/theme/components/baSidebar/baSidebarModel.js new file mode 100644 index 0000000..555aa42 --- /dev/null +++ b/src/app/theme/components/baSidebar/baSidebarModel.js @@ -0,0 +1,24 @@ +(function () { + 'use strict'; + + angular.module('BlurAdmin.theme.components') + .factory('baSidebarModel', baSidebarModel); + + /** @ngInject */ + function baSidebarModel() { + var menuItems = null; + + function getMenuItems() { + return menuItems; + } + + function setMenuItems(items) { + menuItems = items; + } + + return { + getMenuItems: getMenuItems, + setMenuItems: setMenuItems + }; + } +})(); \ No newline at end of file