allerta-vvf/frontend/src/app/_routes/admin/admin.component.ts

64 lines
1.9 KiB
TypeScript

import { Component, OnInit } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { TabDirective } from 'ngx-bootstrap/tabs';
import { TranslateService } from '@ngx-translate/core';
import { AuthService } from 'src/app/_services/auth.service';
interface ITab {
title: string;
id: string;
active: boolean;
permissionsRequired: string[];
}
@Component({
selector: 'app-admin',
templateUrl: './admin.component.html',
styleUrls: ['./admin.component.scss']
})
export class AdminComponent implements OnInit {
currRoute: string | undefined = '';
tabs: ITab[] = [
{ title: 'info', id: 'info', active: false, permissionsRequired: ['admin-read', 'admin-info-read'] },
{ title: 'roles', id: 'roles', active: false, permissionsRequired: ['admin-read', 'admin-roles-read'] }
];
constructor(
private router: Router,
private route: ActivatedRoute,
private translate: TranslateService,
private auth: AuthService
) {
// Filter out tabs that the user doesn't have permission to see
this.tabs = this.tabs.filter(t => !t.permissionsRequired.some(p => !this.auth.profile.can(p)));
// Translate tab titles
this.tabs.forEach((t) => {
this.translate.get(`menu.${t.title}`).subscribe((res: string) => {
t.title = res;
});
});
}
ngOnInit(): void {
this.currRoute = this.route?.snapshot?.firstChild?.routeConfig?.path;
if (this.currRoute) {
const tab = this.tabs.find(t => t.id === this.currRoute);
if (tab) {
tab.active = true;
}
} else if (this.tabs.length > 0) {
this.router.navigate(["/admin", this.tabs[0].id]);
this.currRoute = this.tabs[0].id;
this.tabs[0].active = true;
}
}
routeChange(data: TabDirective) {
if(!data.id || data.id == this.currRoute) return;
this.router.navigate(["/admin", data.id]);
this.currRoute = data.id;
}
}