import { Component, Input, AfterViewInit } from '@angular/core'; import { Router, NavigationEnd } from '@angular/router'; import { RdLib } from '../../../base/rdLib'; import { AppComponent } from '../../../app.component'; import { RdComponent } from '../../../base/rdComponent'; import { SidebarItemType } from '../../../base/rdModule'; declare const mLayout; @Component({ selector: "[rd-sidebar-item]", template: ` {{item.translatedText}} {{item.translatedText}} ` }) export class SidebarItem extends RdComponent { @Input('item') item; SidebarItemType = SidebarItemType; } @Component({ selector: "rd-frame-sidebar", template: `
` }) export class Sidebar extends RdComponent implements AfterViewInit { app = AppComponent; SidebarItemType = SidebarItemType; items; ngAfterViewInit() { mLayout.initAside(); } protected updateSidebarDefinitions(sidebarDefinitions, activePage) { var hasActiveChild = false; for (var i of sidebarDefinitions) { var active = false; if (i.type == SidebarItemType.Url && i.page && i.page.path == activePage) active = true; if (i.type == SidebarItemType.Container && this.updateSidebarDefinitions(i.subItems, activePage)) active = true; i.active = active; if (active) hasActiveChild = true; } return hasActiveChild; }; protected updateSidebarTranslations(sidebarDefinitions) { for (var i of sidebarDefinitions) { if (!i.text) continue; i.translatedText = this.translate(i.text); if (i.type == SidebarItemType.Container) this.updateSidebarTranslations(i.subItems); } } setDynamicSidebar(sidebar) { setTimeout(function () { this.items[0].subItems = RdLib.objectOperations.deepCopy(sidebar); this.items[0].active = true; this.updateSidebarTranslations(this.items); }.bind(this)); } constructor(router: Router) { super(); this.items = []; this.items = RdLib.objectOperations.deepCopy(AppComponent.client.getSidebar()); this.updateSidebarTranslations(this.items); router.events.subscribe((navigate) => { if (navigate instanceof NavigationEnd) { let activePage = navigate["url"].replace("/", ""); this.updateSidebarDefinitions(this.items, activePage); } }); } }