From aa47d06307083e52736326b1b8b4972ee5fae37b Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Thu, 16 Apr 2020 16:02:01 +0200
Subject: [PATCH] FEAT #13670 TIME 2 fix js error http order in guard

---
 src/frontend/app/app.component.html           | 14 ++--
 src/frontend/app/app.component.ts             | 16 ++--
 .../app/basket/basket-home.component.html     |  2 +-
 src/frontend/service/app.guard.ts             | 83 +++++++++----------
 4 files changed, 57 insertions(+), 58 deletions(-)

diff --git a/src/frontend/app/app.component.html b/src/frontend/app/app.component.html
index 98a3f8cf97e..bc26ed8a456 100644
--- a/src/frontend/app/app.component.html
+++ b/src/frontend/app/app.component.html
@@ -1,16 +1,16 @@
 <mat-sidenav-container class="maarch-container" autosize>
-    <mat-sidenav #snavLeft *ngIf="!headerService.hideSideBar" class="panel-left" [mode]="appService.getViewMode() ? 'over' : 'side'"
-        [fixedInViewport]="appService.getViewMode()" [opened]="appService.getViewMode() ? false : true"
+    <mat-sidenav #snavLeft class="panel-left" [mode]="appService.getViewMode() ? 'over' : 'side'"
+        [fixedInViewport]="appService.getViewMode()" [opened]="appService.getViewMode() || headerService.hideSideBar ? false : true"
         autoFocus="false" style="overflow-x:hidden;" [class.sideBarForm]="headerService.sideBarForm && !appService.getViewMode()" [class.sideBarFormMobile]="appService.getViewMode() && headerService.sideBarForm" [ngStyle]="{'width': appService.getViewMode() ? '80%' : '350px'}">
-        <header-panel *ngIf="headerService.showhHeaderPanel"></header-panel>
-        <menu-shortcut *ngIf="headerService.showMenuShortcut"></menu-shortcut>
-        <menu-nav *ngIf="headerService.showMenuShortcut"></menu-nav>
-        <ng-container *ngIf="!headerService.sideBarAdmin">
+        <header-panel *ngIf="headerService.showhHeaderPanel && !headerService.hideSideBar"></header-panel>
+        <menu-shortcut *ngIf="headerService.showMenuShortcut && !headerService.hideSideBar"></menu-shortcut>
+        <menu-nav *ngIf="headerService.showMenuShortcut && !headerService.hideSideBar"></menu-nav>
+        <ng-container *ngIf="!headerService.sideBarAdmin && !headerService.hideSideBar">
             <basket-home #basketHome></basket-home>
             <mat-divider></mat-divider>
             <panel-folder #panelFolder></panel-folder>
         </ng-container>
-        <div id="adminMenu" style="display: contents;"></div>
+        <div id="adminMenu" *ngIf="!headerService.hideSideBar" style="display: contents;"></div>
     </mat-sidenav>
     <mat-sidenav-content>
         <router-outlet></router-outlet>
diff --git a/src/frontend/app/app.component.ts b/src/frontend/app/app.component.ts
index 5139e93a8bc..047c75dc8f6 100755
--- a/src/frontend/app/app.component.ts
+++ b/src/frontend/app/app.component.ts
@@ -6,6 +6,9 @@ import { HeaderService } from '../service/header.service';
 import { AppService } from '../service/app.service';
 import { MatSidenav } from '@angular/material/sidenav';
 import { LangService } from '../service/app-lang.service';
+import { HttpClient } from '@angular/common/http';
+import { map } from 'rxjs/internal/operators/map';
+import { AuthService } from '../service/auth.service';
 
 /** Custom options the configure the tooltip's default show/hide delays. */
 export const myCustomTooltipDefaults: MatTooltipDefaultOptions = {
@@ -25,14 +28,16 @@ export const myCustomTooltipDefaults: MatTooltipDefaultOptions = {
 })
 export class AppComponent implements OnInit {
 
-    @ViewChild('snavLeft', { static: false }) snavLeft: MatSidenav;
+    @ViewChild('snavLeft', { static: true }) snavLeft: MatSidenav;
 
     constructor(
+        public http: HttpClient,
         public langService: LangService,
         iconReg: MatIconRegistry,
         sanitizer: DomSanitizer,
         public appService: AppService,
-        public headerService: HeaderService
+        public headerService: HeaderService,
+        private authService: AuthService
     ) {
 
         iconReg.addSvgIcon('maarchLogo', sanitizer.bypassSecurityTrustResourceUrl('../rest/images?image=onlyLogo'));
@@ -43,13 +48,8 @@ export class AppComponent implements OnInit {
 
     }
 
-    ngOnInit(): void {
-
+    async ngOnInit(): Promise<void> {
         this.headerService.hideSideBar = true;
-        setTimeout(() => {
-            this.headerService.sideNavLeft = this.snavLeft;
-        }, 200);
-
         this.headerService.sideNavLeft = this.snavLeft;
     }
 }
diff --git a/src/frontend/app/basket/basket-home.component.html b/src/frontend/app/basket/basket-home.component.html
index 4dc9a627499..58a8f44b5ac 100755
--- a/src/frontend/app/basket/basket-home.component.html
+++ b/src/frontend/app/basket/basket-home.component.html
@@ -1,4 +1,4 @@
-<mat-expansion-panel #basketPanel class="basketList" [expanded]="!loading">
+<mat-expansion-panel #basketPanel class="basketList" expanded *ngIf="!loading">
     <mat-expansion-panel-header>
         <mat-panel-title>
             <i class="fa fa-inbox panelIconMenu"></i>&nbsp;{{lang.myBaskets}}
diff --git a/src/frontend/service/app.guard.ts b/src/frontend/service/app.guard.ts
index 5b74dd29b60..f0dd4d69984 100644
--- a/src/frontend/service/app.guard.ts
+++ b/src/frontend/service/app.guard.ts
@@ -3,7 +3,7 @@ import { Injectable } from '@angular/core';
 import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, CanDeactivate } from '@angular/router';
 import { HttpClient } from '@angular/common/http';
 import { Observable, of } from 'rxjs';
-import { map, tap, catchError, exhaustMap } from 'rxjs/operators';
+import { map, tap, catchError, exhaustMap, filter } from 'rxjs/operators';
 import { HeaderService } from './header.service';
 import { ProcessComponent } from '../app/process/process.component';
 import { PrivilegeService } from './privileges.service';
@@ -24,7 +24,7 @@ export class AppGuard implements CanActivate {
         private privilegeService: PrivilegeService
     ) { }
 
-    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): any {
+    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {
         console.log('guard');
 
         this.headerService.resetSideNavSelection();
@@ -79,7 +79,8 @@ export class AppGuard implements CanActivate {
 
                 if (this.headerService.user.status === 'ABS') {
                     console.log('ABS!');
-                    return this.router.navigate(['/activate-user']);
+                    this.router.navigate(['/activate-user']);
+                    return of(false);
                 } else {
                     if (route.url.map((url: any) => url.path).filter((url: any) => ['signatureBook', 'content'].indexOf(url) > -1).length > 0) {
                         this.headerService.hideSideBar = true;
@@ -91,7 +92,7 @@ export class AppGuard implements CanActivate {
                     } else {
                         this.headerService.sideBarAdmin = false;
                     }
-                    return true;
+                    return of(true);
                 }
             }
         } else {
@@ -105,47 +106,11 @@ export class AppGuard implements CanActivate {
                         // this.authService.changeKey = data.changeKey;
                         this.localStorage.setAppSession(data.instanceId);
                         tokenInfo = this.authService.getToken();
+                        console.log(tokenInfo);
 
                         if (tokenInfo !== null) {
                             this.authService.setUrl(route.url.join('/'));
-                            console.log('Token trouvé !');
-                            console.log('Récupération données user...');
-                            this.http.get('../rest/currentUser/profile')
-                                .pipe(
-                                    map((dataUser: any) => {
-                                        this.headerService.user = {
-                                            id: dataUser.id,
-                                            status: data.status,
-                                            userId: dataUser.user_id,
-                                            firstname: dataUser.firstname,
-                                            lastname: dataUser.lastname,
-                                            entities: dataUser.entities,
-                                            groups: dataUser.groups,
-                                            preferences: dataUser.preferences,
-                                            privileges: dataUser.privileges[0] === 'ALL_PRIVILEGES' ? this.privilegeService.getAllPrivileges() : dataUser.privileges
-                                        };
-
-                                        this.headerService.nbResourcesFollowed = dataUser.nbFollowedResources;
-                                        this.privilegeService.resfreshUserShortcuts();
-                                        if (this.headerService.user.status === 'ABS') {
-                                            console.log('ABS!');
-                                            return this.router.navigate(['/activate-user']);
-                                        } else {
-                                            if (route.url.map((url: any) => url.path).filter((url: any) => ['signatureBook', 'content'].indexOf(url) > -1).length > 0) {
-                                                this.headerService.hideSideBar = true;
-                                            } else {
-                                                this.headerService.hideSideBar = false;
-                                            }
-                                            if (route.url.map((url: any) => url.path).filter((url: any) => url === 'administration').length > 0 || route.url.map((url: any) => url.path).filter((url: any) => url === 'profile').length > 0) {
-                                                this.headerService.sideBarAdmin = true;
-                                            } else {
-                                                this.headerService.sideBarAdmin = false;
-                                            }
-                                            return true;
-                                        }
-                                    })
-                                ).subscribe();
-                            return true;
+                            return tokenInfo;
                         } else {
                             this.authService.setCachedUrl(route.url.join('/'));
                             console.log('Aucun token trouvé ! Redirection sur login ...');
@@ -153,6 +118,40 @@ export class AppGuard implements CanActivate {
                             return false;
                         }
                     }),
+                    filter((info: any) => info !== null),
+                    exhaustMap(() => this.http.get('../rest/currentUser/profile')),
+                    map((dataUser: any) => {
+                        this.headerService.user = {
+                            id: dataUser.id,
+                            status: dataUser.status,
+                            userId: dataUser.user_id,
+                            firstname: dataUser.firstname,
+                            lastname: dataUser.lastname,
+                            entities: dataUser.entities,
+                            groups: dataUser.groups,
+                            preferences: dataUser.preferences,
+                            privileges: dataUser.privileges[0] === 'ALL_PRIVILEGES' ? this.privilegeService.getAllPrivileges() : dataUser.privileges
+                        };
+
+                        this.headerService.nbResourcesFollowed = dataUser.nbFollowedResources;
+                        this.privilegeService.resfreshUserShortcuts();
+                        if (this.headerService.user.status === 'ABS') {
+                            console.log('ABS!');
+                            return this.router.navigate(['/activate-user']);
+                        } else {
+                            if (route.url.map((url: any) => url.path).filter((url: any) => ['signatureBook', 'content'].indexOf(url) > -1).length > 0) {
+                                this.headerService.hideSideBar = true;
+                            } else {
+                                this.headerService.hideSideBar = false;
+                            }
+                            if (route.url.map((url: any) => url.path).filter((url: any) => url === 'administration').length > 0 || route.url.map((url: any) => url.path).filter((url: any) => url === 'profile').length > 0) {
+                                this.headerService.sideBarAdmin = true;
+                            } else {
+                                this.headerService.sideBarAdmin = false;
+                            }
+                            return true;
+                        }
+                    }),
                 );
 
         }
-- 
GitLab