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: `
`
})
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);
}
});
}
}