Introduced SysParamsState. Refactored hide menu approach
This commit is contained in:
parent
9089163880
commit
b1f4e43e8f
@ -16,21 +16,18 @@
|
||||
|
||||
import { AuthUser, User } from '@shared/models/user.model';
|
||||
|
||||
export interface AuthPayload {
|
||||
authUser: AuthUser;
|
||||
userDetails: User;
|
||||
export interface SysParamsState {
|
||||
userTokenAccessEnabled: boolean;
|
||||
allowedDashboardIds: string[];
|
||||
edgesSupportEnabled: boolean;
|
||||
}
|
||||
export interface AuthPayload extends SysParamsState {
|
||||
authUser: AuthUser;
|
||||
userDetails: User;
|
||||
forceFullscreen: boolean;
|
||||
}
|
||||
|
||||
export interface AuthState {
|
||||
export interface AuthState extends AuthPayload {
|
||||
isAuthenticated: boolean;
|
||||
isUserLoaded: boolean;
|
||||
authUser: AuthUser;
|
||||
userDetails: User;
|
||||
userTokenAccessEnabled: boolean;
|
||||
allowedDashboardIds: string[];
|
||||
forceFullscreen: boolean;
|
||||
lastPublicDashboardId: string;
|
||||
}
|
||||
|
||||
@ -22,7 +22,8 @@ const emptyUserAuthState: AuthPayload = {
|
||||
userDetails: null,
|
||||
userTokenAccessEnabled: false,
|
||||
forceFullscreen: false,
|
||||
allowedDashboardIds: []
|
||||
allowedDashboardIds: [],
|
||||
edgesSupportEnabled: false
|
||||
};
|
||||
|
||||
export const initialState: AuthState = {
|
||||
|
||||
@ -31,7 +31,7 @@ import { ActionAuthAuthenticated, ActionAuthLoadUser, ActionAuthUnauthenticated
|
||||
import { getCurrentAuthState, getCurrentAuthUser } from './auth.selectors';
|
||||
import { Authority } from '@shared/models/authority.enum';
|
||||
import { ActionSettingsChangeLanguage } from '@app/core/settings/settings.actions';
|
||||
import { AuthPayload, AuthState } from '@core/auth/auth.models';
|
||||
import { AuthPayload, AuthState, SysParamsState } from '@core/auth/auth.models';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { AuthUser } from '@shared/models/user.model';
|
||||
import { TimeService } from '@core/services/time.service';
|
||||
@ -64,8 +64,7 @@ export class AuthService {
|
||||
private dashboardService: DashboardService,
|
||||
private adminService: AdminService,
|
||||
private translate: TranslateService,
|
||||
private dialog: MatDialog,
|
||||
private edgeService: EdgeService
|
||||
private dialog: MatDialog
|
||||
) {
|
||||
}
|
||||
|
||||
@ -427,17 +426,24 @@ export class AuthService {
|
||||
}
|
||||
}
|
||||
|
||||
private loadSystemParams(authPayload: AuthPayload): Observable<any> {
|
||||
const sources: Array<Observable<any>> = [this.loadIsUserTokenAccessEnabled(authPayload.authUser),
|
||||
this.fetchAllowedDashboardIds(authPayload),
|
||||
this.timeService.loadMaxDatapointsLimit(),
|
||||
this.edgeService.loadIsEdgesSupportEnabled()];
|
||||
public loadIsEdgesSupportEnabled(): Observable<boolean> {
|
||||
return this.http.get<boolean>('/api/edges/enabled', defaultHttpOptions());
|
||||
}
|
||||
|
||||
private loadSystemParams(authPayload: AuthPayload): Observable<SysParamsState> {
|
||||
const sources = [this.loadIsUserTokenAccessEnabled(authPayload.authUser),
|
||||
this.fetchAllowedDashboardIds(authPayload),
|
||||
this.loadIsEdgesSupportEnabled(),
|
||||
this.timeService.loadMaxDatapointsLimit()];
|
||||
return forkJoin(sources)
|
||||
.pipe(map((data) => {
|
||||
const userTokenAccessEnabled: boolean = data[0];
|
||||
const allowedDashboardIds: string[] = data[1];
|
||||
return {userTokenAccessEnabled, allowedDashboardIds};
|
||||
}));
|
||||
const userTokenAccessEnabled: boolean = data[0] as boolean;
|
||||
const allowedDashboardIds: string[] = data[1] as string[];
|
||||
const edgesSupportEnabled: boolean = data[2] as boolean;
|
||||
return {userTokenAccessEnabled, allowedDashboardIds, edgesSupportEnabled};
|
||||
}, catchError((err) => {
|
||||
return of({});
|
||||
})));
|
||||
}
|
||||
|
||||
public refreshJwtToken(loadUserElseStoreJwtToken = true): Observable<LoginResponse> {
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
///
|
||||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { defaultHttpOptions, defaultHttpOptionsFromConfig, RequestConfig } from './http-utils';
|
||||
import { defaultHttpOptionsFromConfig, RequestConfig } from './http-utils';
|
||||
import { Observable } from 'rxjs';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { PageLink, TimePageLink } from '@shared/models/page/page-link';
|
||||
@ -24,32 +24,15 @@ import { EntitySubtype } from '@app/shared/models/entity-type.models';
|
||||
import { Edge, EdgeInfo, EdgeSearchQuery } from "@shared/models/edge.models";
|
||||
import { EntityId } from "@shared/models/id/entity-id";
|
||||
import { Event } from "@shared/models/event.models";
|
||||
import { map } from "rxjs/operators";
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class EdgeService {
|
||||
|
||||
private edgesSupportEnabled = false;
|
||||
|
||||
constructor(
|
||||
private http: HttpClient
|
||||
) { }
|
||||
|
||||
public isEdgesSupportEnabled(): boolean {
|
||||
return this.edgesSupportEnabled;
|
||||
}
|
||||
|
||||
public loadIsEdgesSupportEnabled(): Observable<boolean> {
|
||||
return this.http.get<boolean>('/api/edges/enabled',
|
||||
defaultHttpOptions(true)).pipe(
|
||||
map( (enabled) => {
|
||||
this.edgesSupportEnabled = enabled;
|
||||
return this.edgesSupportEnabled;
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public getEdges(edgeIds: Array<string>, config?: RequestConfig): Observable<Array<Edge>> {
|
||||
return this.http.get<Array<Edge>>(`/api/edges?edgeIds=${edgeIds.join(',')}`,
|
||||
defaultHttpOptionsFromConfig(config));
|
||||
|
||||
@ -18,14 +18,14 @@ import { Injectable } from '@angular/core';
|
||||
import { AuthService } from '../auth/auth.service';
|
||||
import { select, Store } from '@ngrx/store';
|
||||
import { AppState } from '../core.state';
|
||||
import { selectAuthUser, selectIsAuthenticated } from '../auth/auth.selectors';
|
||||
import {selectAuth, selectAuthUser, selectIsAuthenticated} from '../auth/auth.selectors';
|
||||
import { take } from 'rxjs/operators';
|
||||
import { HomeSection, MenuSection } from '@core/services/menu.models';
|
||||
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
||||
import { Authority } from '@shared/models/authority.enum';
|
||||
import { AuthUser } from '@shared/models/user.model';
|
||||
import { guid } from '@core/utils';
|
||||
import { EdgeService } from '../http/edge.service';
|
||||
import {AuthState} from "@core/auth/auth.models";
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
@ -35,7 +35,7 @@ export class MenuService {
|
||||
menuSections$: Subject<Array<MenuSection>> = new BehaviorSubject<Array<MenuSection>>([]);
|
||||
homeSections$: Subject<Array<HomeSection>> = new BehaviorSubject<Array<HomeSection>>([]);
|
||||
|
||||
constructor(private store: Store<AppState>, private authService: AuthService, private edgeService: EdgeService) {
|
||||
constructor(private store: Store<AppState>, private authService: AuthService) {
|
||||
this.store.pipe(select(selectIsAuthenticated)).subscribe(
|
||||
(authenticated: boolean) => {
|
||||
if (authenticated) {
|
||||
@ -46,23 +46,23 @@ export class MenuService {
|
||||
}
|
||||
|
||||
private buildMenu() {
|
||||
this.store.pipe(select(selectAuthUser), take(1)).subscribe(
|
||||
(authUser: AuthUser) => {
|
||||
if (authUser) {
|
||||
this.store.pipe(select(selectAuth), take(1)).subscribe(
|
||||
(authState: AuthState) => {
|
||||
if (authState.authUser) {
|
||||
let menuSections: Array<MenuSection>;
|
||||
let homeSections: Array<HomeSection>;
|
||||
switch (authUser.authority) {
|
||||
switch (authState.authUser.authority) {
|
||||
case Authority.SYS_ADMIN:
|
||||
menuSections = this.buildSysAdminMenu(authUser);
|
||||
homeSections = this.buildSysAdminHome(authUser);
|
||||
menuSections = this.buildSysAdminMenu(authState);
|
||||
homeSections = this.buildSysAdminHome(authState);
|
||||
break;
|
||||
case Authority.TENANT_ADMIN:
|
||||
menuSections = this.buildTenantAdminMenu(authUser);
|
||||
homeSections = this.buildTenantAdminHome(authUser);
|
||||
menuSections = this.buildTenantAdminMenu(authState);
|
||||
homeSections = this.buildTenantAdminHome(authState);
|
||||
break;
|
||||
case Authority.CUSTOMER_USER:
|
||||
menuSections = this.buildCustomerUserMenu(authUser);
|
||||
homeSections = this.buildCustomerUserHome(authUser);
|
||||
menuSections = this.buildCustomerUserMenu(authState);
|
||||
homeSections = this.buildCustomerUserHome(authState);
|
||||
break;
|
||||
}
|
||||
this.menuSections$.next(menuSections);
|
||||
@ -72,7 +72,7 @@ export class MenuService {
|
||||
);
|
||||
}
|
||||
|
||||
private buildSysAdminMenu(authUser: any): Array<MenuSection> {
|
||||
private buildSysAdminMenu(authState: AuthState): Array<MenuSection> {
|
||||
const sections: Array<MenuSection> = [];
|
||||
sections.push(
|
||||
{
|
||||
@ -153,7 +153,7 @@ export class MenuService {
|
||||
return sections;
|
||||
}
|
||||
|
||||
private buildSysAdminHome(authUser: any): Array<HomeSection> {
|
||||
private buildSysAdminHome(authState: AuthState): Array<HomeSection> {
|
||||
const homeSections: Array<HomeSection> = [];
|
||||
homeSections.push(
|
||||
{
|
||||
@ -216,7 +216,7 @@ export class MenuService {
|
||||
return homeSections;
|
||||
}
|
||||
|
||||
private buildTenantAdminMenu(authUser: any): Array<MenuSection> {
|
||||
private buildTenantAdminMenu(authState: AuthState): Array<MenuSection> {
|
||||
const sections: Array<MenuSection> = [];
|
||||
sections.push(
|
||||
{
|
||||
@ -270,7 +270,7 @@ export class MenuService {
|
||||
icon: 'view_quilt'
|
||||
}
|
||||
);
|
||||
if (this.edgeService.isEdgesSupportEnabled()) {
|
||||
if (authState.edgesSupportEnabled) {
|
||||
sections.push(
|
||||
{
|
||||
id: guid(),
|
||||
@ -332,7 +332,7 @@ export class MenuService {
|
||||
return sections;
|
||||
}
|
||||
|
||||
private buildTenantAdminHome(authUser: any): Array<HomeSection> {
|
||||
private buildTenantAdminHome(authState: AuthState): Array<HomeSection> {
|
||||
const homeSections: Array<HomeSection> = [];
|
||||
homeSections.push(
|
||||
{
|
||||
@ -392,7 +392,7 @@ export class MenuService {
|
||||
]
|
||||
}
|
||||
);
|
||||
if (this.edgeService.isEdgesSupportEnabled()) {
|
||||
if (authState.edgesSupportEnabled) {
|
||||
homeSections.push(
|
||||
{
|
||||
name: 'edge.management',
|
||||
@ -446,7 +446,7 @@ export class MenuService {
|
||||
return homeSections;
|
||||
}
|
||||
|
||||
private buildCustomerUserMenu(authUser: any): Array<MenuSection> {
|
||||
private buildCustomerUserMenu(authState: AuthState): Array<MenuSection> {
|
||||
const sections: Array<MenuSection> = [];
|
||||
sections.push(
|
||||
{
|
||||
@ -488,7 +488,7 @@ export class MenuService {
|
||||
return sections;
|
||||
}
|
||||
|
||||
private buildCustomerUserHome(authUser: any): Array<HomeSection> {
|
||||
private buildCustomerUserHome(authState: AuthState): Array<HomeSection> {
|
||||
const homeSections: Array<HomeSection> = [
|
||||
{
|
||||
name: 'asset.view-assets',
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user