blob: cf4a84b36db341ea19af11a962ecd2fa46db9ac8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
import { NavigationEnd, Router } from '@angular/router';
import { PageName } from '../../_enums/page-name.enum';
import { AuthService } from '../../services/auth.service';
import { CurrentUserService } from '@streampipes/shared-ui';
import { AppConstants } from '../../services/app.constants';
import { UserPrivilege } from '../../_enums/user-privilege.enum';
import { inject } from '@angular/core';
export abstract class BaseNavigationComponent {
activePageName: string;
activePage: any;
authenticated = true;
public menu = [
{{#modulesActive}}
{
link: '{{{link}}}',
title: '{{{title}}}',
icon: '{{{icon}}}',
pageNames: [{{{pageNames}}}],
privileges: {{{privileges}}},
visible: false
},
{{/modulesActive}}
];
notificationsVisible = false;
protected authService = inject(AuthService);
protected currentUserService = inject(CurrentUserService);
protected router = inject(Router);
protected appConstants = inject(AppConstants);
onInit() {
this.currentUserService.user$.subscribe(user => {
this.menu.forEach(m => m.visible = this.isNavItemVisible(m.privileges));
this.notificationsVisible = this.isNavItemVisible([
UserPrivilege.PRIVILEGE_READ_PIPELINE,
UserPrivilege.PRIVILEGE_WRITE_PIPELINE
]);
});
this.activePage = this.router.url.replace('/', '');
this.activePageName = this.getPageTitle(this.activePage);
this.router.events.subscribe(event => {
if (event instanceof NavigationEnd) {
this.activePage = event.url.split('/')[1];
this.activePageName = this.getPageTitle(this.activePage);
}
});
}
getActivePage() {
return this.activePage;
}
getPageTitle(path) {
let currentTitle = this.appConstants.APP_NAME;
this.menu.forEach(m => {
if (m.link === path) {
currentTitle = m.title;
}
});
if (path === 'pipeline-details') {
currentTitle = 'Pipeline Details';
}
return currentTitle;
}
go(path, payload?) {
if (payload === undefined) {
this.router.navigateByUrl(path);
this.activePage = path;
} else {
this.router.navigateByUrl(path, payload);
this.activePage = path;
}
this.activePageName = this.getPageTitle(this.activePage);
}
public isNavItemVisible(privileges: string[]): boolean {
return this.authService.isAnyAccessGranted(privileges);
}
}