diff --git a/src/app/pages/pages.component.ts b/src/app/pages/pages.component.ts index 951dc021..64210826 100644 --- a/src/app/pages/pages.component.ts +++ b/src/app/pages/pages.component.ts @@ -9,20 +9,47 @@ import {PageTop, Sidebar} from '../theme'; * Top Level Component */ @Component({ - selector: 'pages', - encapsulation: ViewEncapsulation.None, - styles: [], - directives: [PageTop, Sidebar], - template: `` + selector: 'pages', + encapsulation: ViewEncapsulation.None, + styles: [], + directives: [PageTop, Sidebar], + template: `` }) @RouteConfig([ - { path: '/dashboard', name: 'Dashboard', component: Dashboard, useAsDefault: true }, + { + path: '/dashboard', + name: 'Dashboard', + component: Dashboard, + useAsDefault: true, + data: { + title: 'Dashboard', + selected: true, + expanded: true, + sidebarMeta: { + icon: 'ion-android-home', + order: 0, + } + } + }, ]) export class Pages { - constructor() {} - ngOnInit() { - console.log('Pages'); + private _routeConfig; + + constructor(private _router: Router) { } + + ngOnInit() { } + + getRoutes() { + + if (!this._routeConfig) { + this._routeConfig = Reflect.getMetadata('annotations', this.constructor) + .filter(a => { + return a.constructor.name === 'RouteConfig'; + }) + .pop(); } + return this._routeConfig; + } } diff --git a/src/app/theme/sidebar/sidebar.component.ts b/src/app/theme/sidebar/sidebar.component.ts index 5f10ab38..1fc788e7 100644 --- a/src/app/theme/sidebar/sidebar.component.ts +++ b/src/app/theme/sidebar/sidebar.component.ts @@ -1,4 +1,4 @@ -import {Component, ElementRef, HostListener, ViewEncapsulation} from 'angular2/core'; +import {Component, ElementRef, HostListener, ViewEncapsulation, Input} from 'angular2/core'; import {Router} from 'angular2/router'; import {layoutSizes} from '../theme.constants'; @@ -16,6 +16,8 @@ import {SidebarStateService} from './sidebarState.service'; }) export class Sidebar { + @Input('routes') routes; + menuItems: Array; menuHeight: number; isMenuCollapsed: boolean; @@ -28,12 +30,13 @@ export class Sidebar { isMenuShouldCollapsed: boolean = false; - constructor(private elementRef: ElementRef, private router: Router, private _sidebarService: SidebarService, private _sidebarStateService: SidebarStateService) { - - this.menuItems = this._sidebarService.getMenuItems(); - } + constructor(private elementRef: ElementRef, + private router: Router, + private _sidebarService: SidebarService, + private _sidebarStateService: SidebarStateService) { } ngOnInit() { + this.menuItems = this._sidebarService.getMenuItems(this.routes); this.selectMenuItem(); } diff --git a/src/app/theme/sidebar/sidebar.service.ts b/src/app/theme/sidebar/sidebar.service.ts index b1ef4de2..3b31cf23 100644 --- a/src/app/theme/sidebar/sidebar.service.ts +++ b/src/app/theme/sidebar/sidebar.service.ts @@ -53,54 +53,33 @@ export class SidebarService { }] } ] - }]; + }]; - getMenuItems() { - var states = this.defineMenuItemStates(); - var menuItems = states.filter(function(item) { - return item.level == 0; - }); + constructor() { } - 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; - }); + getMenuItems(routes) { - return menuItems.concat(this.staticMenuItems); - }; - - defineMenuItemStates() { - - // TODO mock state object - var state = [{ - name: 'Dashboard', - title: 'Dashboard', - selected: false, - expanded: false, - sidebarMeta: { - icon: 'ion-android-home', - order: 0, - } - }]; - - return state + let menuItems = routes.configs .filter(function(s) { - return s.sidebarMeta != null; + return s.data.sidebarMeta != null; }) .map(function(s) { - var meta = s.sidebarMeta; + var meta = s.data.sidebarMeta; return { + title: s.data.title, name: s.name, - title: s.title, - level: (s.name.match(/\./g) || []).length, + level: 0, order: meta.order, icon: meta.icon }; }) .sort(function(a, b) { return (a.level - b.level) * 100 + a.order - b.order; + }) + .filter(function(item) { + return item.level == 0; }); + + return menuItems.concat(this.staticMenuItems); } }