ekangularbase
Version:
Authentication service for usermanagement(oidc client)
334 lines (275 loc) • 13 kB
text/typescript
import { SideBarMenuClass } from '../SideBarMenu/side-bar-menu';
import { SideBarMenuService } from '../SideBarMenu/side-bar-menu.service';
import { MenuItem } from 'primeng/api';
import { AuthService } from '../auth/auth.service';
import { TranslateService } from '@ngx-translate/core';
import { Router, NavigationEnd } from '@angular/router';
import { OnInit } from '@angular/core';
import { Subscription } from 'rxjs';
import { AppConfig } from 'ekangularbase/src/AppConfig/AppConfig';
export class SidebarBase implements OnInit {
showSpinner = true;
isActive = false;
showMenu = '';
pushRightClass = 'push-right';
items: MenuItem[];
itemsHide: MenuItem[];
username: string;
menuList: SideBarMenuClass[];
LoadingCompletedSubscription: Subscription;
constructor(public translate: TranslateService, public router: Router,
public authService: AuthService, public sideBarMenuService: SideBarMenuService) {
this.translate.addLangs(['en', 'fr', 'ur', 'es', 'it', 'fa', 'de']);
this.translate.setDefaultLang('en');
const browserLang = this.translate.getBrowserLang();
this.translate.use(browserLang.match(/en|fr|ur|es|it|fa|de/) ? browserLang : 'en');
this.router.events.subscribe(val => {
if (
val instanceof NavigationEnd &&
window.innerWidth <= 992 &&
this.isToggled()
) {
this.toggleSidebar();
}
});
this.username = this.authService.getUserName();
}
ngOnInit() {
console.log('loadMenu ngOnInit');
this.LoadingCompletedSubscription = this.authService.loadingcompleted.subscribe(s => {
if (s) {
console.log('loadMenu subscribe');
this.initMenu();
this.dynamicMenu(AppConfig.settings.module_name);
this.ngOnLocalInit();
}
});
}
ngOnLocalInit() { }
initMenu() {
// this.items = [];
this.itemsHide = [
{
label: 'RTL/LTR', icon: 'fa fa-arrows-h', command: (onclick) => { this.rltAndLtr(); }
},
{
label: 'Language',
icon: 'fa fa-language',
items: [{ label: 'English', icon: '', command: (onclick) => { this.changeLang('en'); } },
{ label: 'French', icon: '', command: (onclick) => { this.changeLang('fr'); } },
{ label: 'Urdu', icon: '', command: (onclick) => { this.changeLang('ur'); } },
{ label: 'Spanish', icon: '', command: (onclick) => { this.changeLang('es'); } },
{ label: 'Italian', icon: '', command: (onclick) => { this.changeLang('it'); } },
{ label: 'Farsi', icon: '', command: (onclick) => { this.changeLang('fa'); } },
{ label: 'German', icon: '', command: (onclick) => { this.changeLang('de'); } },
{ label: 'Simplified Chinese', icon: '', command: (onclick) => { this.changeLang('zh-CHS'); } }
]
},
// {
// label: this.username, icon: 'fa fa-user',
// items: [{label: 'Profile', icon: 'fa fa-fw fa-user', routerLink: '/profile'},
// // {label: 'Inbox', icon: 'fa fa-fw fa-envelope'},
// // {label: 'Settings', icon: 'fa fa-fw fa-gear'},
// {label: 'Log Out', icon: 'fa fa-fw fa-power-off', command: (onclick)=> {this.onLoggedout()} }
// ]
// }
];
const items: MenuItem[] = [];
// if (this.checkPermission("pf-cp")) {
// let newItem = {
// label: 'Change Password', icon: 'fa fa-fw fa-key', routerLink: '/change-password'
// }
// items.push(newItem);
// }
// if (this.checkPermission("pf-rd")) {
// let newItem = {
// label: 'Profile', icon: 'fa fa-fw fa-user', routerLink: '/profile'
// }
// items.push(newItem);
// }
const x = {
label: 'Log Out', icon: 'fa fa-fw fa-power-off', command: (onclick) => { this.onLoggedout(); }
};
items.push(x);
const i = {
label: this.username, icon: 'fa fa-user',
items: items
};
this.itemsHide.push(i);
}
createQueryParams(queryParams): any {
if (!queryParams || queryParams === '') { return null; }
try {
const obj: any = JSON.parse(queryParams);
return obj;
} catch (error) {
return null;
}
}
dynamicMenu(moduleName: string) {
this.showSpinner = true;
const mod = moduleName.toLowerCase();
if (mod === 'estimate' || mod === 'ocprofile' || mod === 'ideas') {
this.sideBarMenuService.GetAllByMRC(moduleName).subscribe(res => {
this.authService.currentSidebarMenu = res;
this.items = [];
this.createMenu(res);
});
} else {
this.sideBarMenuService.GetByModule(moduleName).subscribe(res => {
this.authService.currentSidebarMenu = res;
this.items = [];
this.createMenu(res);
});
}
}
menuClick(event) {
console.log('menu click');
console.log(event);
this.authService.menuClicked.next({ previousUrl: this.authService.currentUrl, currentUrl: event });
this.authService.ResetFlag();
this.authService.currentUrl = event;
}
createMenu(res: SideBarMenuClass[]) {
res = res.filter(r => r.isHide === false);
this.menuList = res;
for (let i = 0; i < res.length; i++) {
try {
if ((!res[i].parentMenuId || res[i].parentMenuId === '') &&
!(!res[i].routerLink || res[i].routerLink === '')) {
const col = <MenuItem>{};
col.label = res[i].displayName;
col.title = res[i].displayName;
col.icon = 'ipms-left-first-menu ' + res[i].icon;
col.styleClass = 'ipms-left-first-label';
col.routerLink = res[i].routerLink;
col.command = () => { this.menuClick(col.routerLink); };
if (res[i].queryParams) { col.queryParams = this.createQueryParams(res[i].queryParams); }
if (res[i].permission && this.checkPermission(res[i].permission)) {
this.items.push(col);
}
} else if ((!res[i].parentMenuId || res[i].parentMenuId === '') &&
(!res[i].routerLink || res[i].routerLink === '')) {
const col = <MenuItem>{};
const subcollst: MenuItem[] = [];
col.label = res[i].displayName;
col.icon = res[i].icon;
const menuId = res[i].menuId;
if (!(!menuId || menuId === '')) {
for (let j = 0; j < res.length; j++) {
const subcol = <MenuItem>{};
try {
if ((res[j].parentMenuId === menuId) &&
!(!res[j].routerLink || res[j].routerLink === '')) {
subcol.label = res[j].displayName;
subcol.title = res[j].displayName;
subcol.icon = 'ipms-left-second-menu ' + res[j].icon;
subcol.styleClass = 'ipms-left-second-label';
subcol.routerLink = res[j].routerLink;
subcol.command = () => { this.menuClick(subcol.routerLink); };
if (res[j].queryParams) { subcol.queryParams = this.createQueryParams(res[j].queryParams); }
if (res[j].permission && this.checkPermission(res[j].permission)) {
subcollst.push(subcol);
}
} else if ((res[j].parentMenuId === menuId) &&
(!res[j].routerLink || res[j].routerLink === '')) {
const loopResult = this.findSubMenu(res[j].menuId, 2);
if (loopResult.length > 0) {
subcol.label = res[j].displayName;
subcol.icon = res[j].icon;
subcol.items = loopResult;
subcollst.push(subcol);
}
}
} catch (error) {
console.log(error);
}
}
}
if (subcollst.length > 0) {
col.items = subcollst;
this.items.push(col);
}
}
// console.log(this.items);
} catch (error) {
console.log(error);
return;
}
}
this.showSpinner = false;
}
findSubMenu(parentMenuId: string, loopValue: number): MenuItem[] {
loopValue += 1;
const subcollst: MenuItem[] = [];
if (!parentMenuId || parentMenuId === '') { return subcollst; }
for (let j = 0; j < this.menuList.length; j++) {
const subcol = <MenuItem>{};
try {
if (this.menuList[j].parentMenuId === parentMenuId &&
!(!this.menuList[j].routerLink || this.menuList[j].routerLink === '')) {
subcol.label = this.menuList[j].displayName;
subcol.title = this.menuList[j].displayName;
subcol.icon = 'ipms-left-third-menu ipms-left-menu-' + loopValue + ' ' + this.menuList[j].icon;
subcol.styleClass = 'ipms-left-third-label ipms-left-label-' + loopValue;
subcol.routerLink = this.menuList[j].routerLink;
subcol.command = () => { this.menuClick(subcol.routerLink); };
if (this.menuList[j].queryParams) { subcol.queryParams = this.createQueryParams(this.menuList[j].queryParams); }
if (this.menuList[j].permission && this.checkPermission(this.menuList[j].permission)) {
subcollst.push(subcol);
}
} else if ((this.menuList[j].parentMenuId === parentMenuId) &&
(!this.menuList[j].routerLink || this.menuList[j].routerLink === '')) {
const loopResult = this.findSubMenu(this.menuList[j].menuId, loopValue);
if (loopResult.length > 0) {
subcol.label = this.menuList[j].displayName;
subcol.icon = this.menuList[j].icon;
subcol.items = loopResult;
subcollst.push(subcol);
}
}
} catch (error) {
console.log(error);
}
}
if (subcollst.length === 0) { return []; }
return subcollst;
}
checkPermission(claim: string): boolean {
return this.authService.hasPermissions(claim);
}
eventCalled() {
this.isActive = !this.isActive;
}
addExpandClass(element: any) {
if (element === this.showMenu) {
this.showMenu = '0';
} else {
this.showMenu = element;
}
}
isToggled(): boolean {
const dom: Element = document.querySelector('body');
return dom.classList.contains(this.pushRightClass);
}
toggleSidebar() {
const dom: any = document.querySelector('body');
dom.classList.toggle(this.pushRightClass);
}
rltAndLtr() {
const dom: any = document.querySelector('body');
dom.classList.toggle('rtl');
}
changeLang(language: string) {
this.translate.use(language);
}
onLoggedout() {
this.authService.logOut();
// localStorage.removeItem('isLoggedin');
}
ngOnDestroy() {
if (this.LoadingCompletedSubscription !== undefined) {
this.LoadingCompletedSubscription.unsubscribe();
}
}
}