Skip to content
Snippets Groups Projects
Commit 7c165f30 authored by Clayton, Brandon Scott's avatar Clayton, Brandon Scott
Browse files

add nav service

parent 320ccef2
No related branches found
No related tags found
1 merge request!573Navigation Service
import {Injectable, Signal, signal} from '@angular/core';
import {Navigation, NavigationList} from '@ghsc/nshmp-template';
import {catchError, map, of} from 'rxjs';
import * as ApplicationsUtils from '../utils/applications.utils';
import {AuthService} from './auth.service';
const APPS = ApplicationsUtils.apps();
const DEV_APPS = ApplicationsUtils.devApps();
const INTERNAL_APPS = ApplicationsUtils.internalApps();
@Injectable({
providedIn: 'root',
})
export class NavigationService {
private navListSignal = signal<NavigationList[]>([]);
private devNavListSignal = signal<NavigationList[]>(this.devNavigationList());
private internalNavListSignal = signal<NavigationList[]>(
this.internalNavigationList(),
);
constructor(private authService: AuthService) {
this.navigation();
}
/**
* Returns the list of design map application.
*/
designMapApps(): Navigation[] {
return Object.values(APPS.designMaps) as Navigation[];
}
devGmmApps(): Navigation[] {
return Object.values(DEV_APPS.gmm) as Navigation[];
}
devHazardApps(): Navigation[] {
return Object.values(DEV_APPS.hazard) as Navigation[];
}
/**
* Returns the list development main applications.
*/
devMainApps(): Navigation[] {
return [
DEV_APPS.math.exceedanceExplorer,
DEV_APPS.hazard.dynamicCompare,
DEV_APPS.gmm.hangingWallEffects,
];
}
devMathApps(): Navigation[] {
return Object.values(DEV_APPS.math) as Navigation[];
}
/**
* Returns the drop down navigation menu for development applications.
*/
get devNavigation(): Signal<NavigationList[]> {
return this.devNavListSignal.asReadonly();
}
/**
* Returns the list of ground motion model applications.
*/
gmmApps(): Navigation[] {
return Object.values(APPS.gmm) as Navigation[];
}
/**
* Returns list of hazard applications.
*/
hazardApps(): Navigation[] {
return Object.values(APPS.hazard) as Navigation[];
}
/**
* Returns the list of AWS applications.
*/
internalAwsApps(): Navigation[] {
return Object.values(INTERNAL_APPS.aws) as Navigation[];
}
internalMainApps(): Navigation[] {
return this.internalAwsApps();
}
get internalNavigation(): Signal<NavigationList[]> {
return this.internalNavListSignal.asReadonly();
}
get navigationList(): Signal<NavigationList[]> {
return this.navListSignal;
}
/**
* Returns the list services apps.
*/
serviceApps(): Navigation[] {
return [APPS.services];
}
/**
* Returns the list of NCM appliations.
*/
ncmApps(): Navigation[] {
return Object.values(APPS.ncm) as Navigation[];
}
/**
* Returns the list of source model applicaitons.
*/
sourceModelApps(): Navigation[] {
return Object.values(APPS.source) as Navigation[];
}
private devNavigationList(): NavigationList[] {
const devNavigation: NavigationList[] = [
{
navigation: [DEV_APPS.dashboard],
},
{
navigation: this.devHazardApps(),
subHeader: 'Hazard',
},
{
navigation: this.devGmmApps(),
subHeader: 'Ground Motion Models',
},
{
navigation: this.devMathApps(),
subHeader: 'Math',
},
];
return devNavigation;
}
private internalNavigationList(): NavigationList[] {
const internalNavigation: NavigationList[] = [
{
navigation: [INTERNAL_APPS.dashboard],
},
{
navigation: this.internalAwsApps(),
subHeader: 'AWS',
},
];
return [...internalNavigation];
}
/**
* Get navigation.
*/
private navigation() {
const navigation: NavigationList[] = [
{
navigation: [APPS.dashboard],
},
{
navigation: this.hazardApps(),
subHeader: 'Hazard',
},
{
navigation: this.sourceModelApps(),
subHeader: 'Source Models',
},
{
navigation: this.gmmApps(),
subHeader: 'Ground Motion Models',
},
{
navigation: this.designMapApps(),
subHeader: 'Design Map',
},
{
navigation: this.ncmApps(),
subHeader: 'National Crustal Model',
},
{
navigation: [DEV_APPS.dashboard, ...this.devMainApps()],
subHeader: 'Development',
},
];
this.authService
.isAuthorized(false)
.pipe(
map(isInternal => {
if (isInternal) {
navigation.push({
navigation: this.internalMainApps(),
subHeader: 'Internal',
});
}
navigation.push({
navigation: [APPS.services],
});
return navigation;
}),
catchError(() => {
navigation.push({
navigation: [APPS.services],
});
this.navListSignal.set(navigation);
return of();
}),
)
.subscribe(navList => {
this.navListSignal.set(navList);
});
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment