From b50775a96ae1a4ea0372bf61b7989992133ef2d8 Mon Sep 17 00:00:00 2001 From: nixa <4dmitr@gmail.com> Date: Fri, 13 May 2016 18:40:34 +0300 Subject: [PATCH] a bit more of a refactoring --- .../contentTop/contentTop.component.ts | 4 ++- .../components/sidebar/sidebar.component.ts | 2 +- .../components/sidebar/sidebar.service.ts | 33 +++++++++++++------ 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/app/theme/components/contentTop/contentTop.component.ts b/src/app/theme/components/contentTop/contentTop.component.ts index 2ce50f48..a92d6ef9 100644 --- a/src/app/theme/components/contentTop/contentTop.component.ts +++ b/src/app/theme/components/contentTop/contentTop.component.ts @@ -12,7 +12,9 @@ export class ContentTop { constructor(private _state:AppState) { this._state.subscribe('menu.activeLink', (activeLink) => { - this.activePageTitle = activeLink.title; + if (activeLink) { + this.activePageTitle = activeLink.title; + } }); } } diff --git a/src/app/theme/components/sidebar/sidebar.component.ts b/src/app/theme/components/sidebar/sidebar.component.ts index 66bb1c92..01d7634b 100644 --- a/src/app/theme/components/sidebar/sidebar.component.ts +++ b/src/app/theme/components/sidebar/sidebar.component.ts @@ -96,7 +96,7 @@ export class Sidebar { private _selectMenuItem(currentPath = null) { - let currentMenu = this._sidebarService.selectMenuItem(this._router, this.menuItems, currentPath); + let currentMenu = this._sidebarService.setRouter(this._router).selectMenuItem(this.menuItems, currentPath); this._state.notifyDataChanged('menu.activeLink', currentMenu); } } diff --git a/src/app/theme/components/sidebar/sidebar.service.ts b/src/app/theme/components/sidebar/sidebar.service.ts index 5fe565e7..6761b349 100644 --- a/src/app/theme/components/sidebar/sidebar.service.ts +++ b/src/app/theme/components/sidebar/sidebar.service.ts @@ -4,38 +4,51 @@ import {menuItems} from '../../../app.menu'; @Injectable() export class SidebarService { + private _router; + getMenuItems() { return menuItems; } - selectMenuItem(router, items:Array, currentPath:string) { + setRouter(router) { + this._router = router; + return this; + } + + selectMenuItem(items:Array, currentPath:string) { let currentMenu; let assignCurrent = (menu) => (menu.selected ? currentMenu = menu : null); items.forEach((menu: any) => { - menu.selected = this._isCurrent(router, this._generateRoute(router, [menu.component])); - menu.expanded = menu.expanded || menu.selected; + this._selectItem(currentPath, [menu.component], menu); assignCurrent(menu); if (menu.subMenu) { menu.subMenu.forEach((subMenu) => { - let route = this._generateRoute(router, [menu.component, subMenu.component]); - subMenu.selected = !subMenu.disabled && this._isCurrent(router, route) && this._resolvePath(route, '') == currentPath; - assignCurrent(menu); + this._selectItem(currentPath, [menu.component, subMenu.component], subMenu, menu); + assignCurrent(subMenu); }); } }); return currentMenu; } - private _isCurrent(router, route) { - return route ? router.isRouteActive(route) : false; + private _selectItem(currentPath, instructions, item, parentMenu = null) { + let route = this._generateRoute(instructions); + item.selected = !item.disabled && this._isCurrent(route) && this._resolvePath(route, '') == currentPath; + if (parentMenu) { + parentMenu.expanded = parentMenu.expanded || item.selected; + } } - private _generateRoute(router, instructions) { - return instructions.filter(i => typeof i !== 'undefined').length > 0 ? router.generate(instructions) : null; + private _isCurrent(route) { + return route ? this._router.isRouteActive(route) : false; + } + + private _generateRoute(instructions) { + return instructions.filter(i => typeof i !== 'undefined').length > 0 ? this._router.generate(instructions) : null; } private _resolvePath(instruction, collected) {