From 13097f0996825fb727fe149873d662dcfdc5a8d0 Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Thu, 5 Mar 2020 09:52:56 +0100
Subject: [PATCH] FEAT #13407 TIME 2 begin css v2 admin + fix panel left on top
 app

---
 src/frontend/app/about-us.component.html      | 140 +++++-----
 src/frontend/app/about-us.component.ts        |  20 +-
 .../app/actions/actions-list.component.html   |   2 +-
 .../app/actions/actions-list.component.ts     |   1 -
 .../action/action-administration.component.ts |   8 +-
 .../actions-administration.component.ts       |   4 +-
 .../basket/basket-administration.component.ts |  10 +-
 .../baskets-administration.component.ts       |   3 +-
 ...-custom-fields-administration.component.ts |   6 +-
 ...contacts-group-administration.component.ts |  12 +-
 ...ontacts-groups-administration.component.ts |   8 +-
 .../contacts-list-administration.component.ts |   1 +
 .../contacts-page-administration.component.ts |  11 +-
 ...cts-parameters-administration.component.ts |   5 +-
 .../custom-fields-administration.component.ts |   6 +-
 ...diffusionModel-administration.component.ts |   7 +-
 ...iffusionModels-administration.component.ts |   4 +-
 .../docserver-administration.component.ts     |   4 +-
 .../docservers-administration.component.ts    |   4 +-
 .../doctypes-administration.component.ts      |   7 +-
 .../entities-administration.component.ts      |   7 +-
 .../group/group-administration.component.ts   |  21 +-
 .../group/groups-administration.component.ts  |   5 +-
 .../history-batch-administration.component.ts |   4 +-
 .../history-administration.component.ts       |   2 +
 .../home/administration.component.ts          |   4 +-
 ...indexing-model-administration.component.ts |   6 +-
 ...ndexing-models-administration.component.ts |   6 +-
 .../notification-administration.component.ts  |  11 +-
 .../notifications-administration.component.ts |   7 +-
 .../parameter-administration.component.ts     |   9 +-
 .../parameters-administration.component.ts    |   6 +-
 .../priorities-administration.component.ts    |   6 +-
 .../priority-administration.component.ts      |   9 +-
 .../reports-administration.component.ts       |   6 +-
 .../securities-administration.component.ts    |   6 +-
 .../sendmail-administration.component.ts      |   6 +-
 .../shipping-administration.component.ts      |   9 +-
 .../shippings-administration.component.ts     |   6 +-
 .../status/status-administration.component.ts |   9 +-
 .../statuses-administration.component.ts      |   6 +-
 .../tag/tag-administration.component.ts       |   6 +-
 .../tag/tags-administration.component.ts      |   5 +-
 .../template-administration.component.ts      |   9 +-
 .../templates-administration.component.ts     |   6 +-
 .../update-status-administration.component.ts |   6 +-
 .../user/user-administration.component.ts     |  25 +-
 .../user/users-administration.component.html  | 228 +++++++++-------
 .../user/users-administration.component.ts    |   4 +-
 ...ersions-update-administration.component.ts |   6 +-
 src/frontend/app/app.component.html           |  15 ++
 src/frontend/app/app.component.ts             |  21 +-
 .../app/basket/basket-home.component.html     |   4 +-
 .../app/basket/basket-home.component.ts       |  18 +-
 .../folder-document-list.component.html       |  11 -
 .../folder-document-list.component.ts         |   6 -
 .../folder-action-list.component.html         |   2 +-
 .../folder/panel/panel-folder.component.ts    |  19 +-
 .../app/header/header-left.component.html     |   4 +-
 .../app/header/header-panel.component.html    |   2 +-
 .../followed-action-list.component.html       |   2 +-
 .../followed-document-list.component.html     |  11 -
 .../followed-document-list.component.ts       |   3 -
 src/frontend/app/home/home.component.html     | 247 ++++++++----------
 src/frontend/app/home/home.component.ts       |   6 +-
 .../app/indexation/indexation.component.ts    |   8 +-
 .../app/list/basket-list.component.html       |  11 -
 .../app/list/basket-list.component.ts         |  11 +-
 .../app/menu/menu-shortcut.component.html     |   2 +-
 .../app/menu/menu-shortcut.component.ts       |   9 +-
 src/frontend/app/process/process.component.ts |   3 +-
 src/frontend/app/profile.component.html       |  20 --
 src/frontend/app/profile.component.ts         |   4 +-
 src/frontend/service/app.guard.ts             |  15 +-
 src/frontend/service/header.service.ts        |  90 +++++--
 src/frontend/service/privileges.service.ts    |  23 +-
 76 files changed, 648 insertions(+), 628 deletions(-)
 create mode 100644 src/frontend/app/app.component.html

diff --git a/src/frontend/app/about-us.component.html b/src/frontend/app/about-us.component.html
index 52fd392861e..0c488fb7a4b 100755
--- a/src/frontend/app/about-us.component.html
+++ b/src/frontend/app/about-us.component.html
@@ -1,74 +1,66 @@
-<div class="admin-container" [class.admin-is-mobile]="appService.getViewMode()">
-    <mat-sidenav-container autosize class="admin-sidenav-container" >
-        <mat-sidenav #snav [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()" fixedTopGap="56" [opened]="appService.getViewMode() ? false : true"
-            autoFocus="false">
-            <menu-shortcut></menu-shortcut>
-            <menu-nav></menu-nav>
-        </mat-sidenav>
-        <mat-sidenav-content>
-            <div *ngIf="loading" style="display:flex;height:100%;">
-                <mat-spinner style="margin:auto;"></mat-spinner>
-            </div>
-            <mat-card *ngIf="!loading" class="card-app-content">
-                <div class="col-sm-8">
-                    <h3>Maarch Courrier {{applicationVersion}} </h3>
-                    <hr/>
-                    <p><em>Copyright &copy; 2008-2019 Maarch SAS {{lang.groupeCompany}}</em></p>
-                    <p>{{lang.maarchLicence}}
-                        <a target="blank" href="http://www.gnu.org/licenses/gpl-3.0-standalone.html">licence GNU GPLv3</a>.</p>
-                    <div>
-                        <ul>
-                            <li>{{lang.officialWebsite}} : <a target="blank" href="https://maarch.com/">https://maarch.com</a></li>
-                            <li>{{lang.community}} : <a target="blank" href="https://community.maarch.org/">https://community.maarch.org</a></li>
-                            <li>{{lang.documentation}} : <a target="blank" href="https://docs.maarch.org/">https://docs.maarch.org</a></li>
-                        </ul>
-                    </div>
-                    <p>&nbsp;</p>
-                    <h3>{{lang.externalComponents}}</h3>
-                    <hr/>
-                    <em>{{lang.thanksToExtDev}}</em>
-                    <p>&nbsp;</p>
-                    <ul>
-                        <li><a target="blank" href="https://angular.io/">Angular</a></li>
-                        <li><a target="blank" href="https://material.angular.io/">Angular Material</a></li>
-                        <li><a target="blank" href="http://getbootstrap.com/">Bootstrap</a></li>
-                        <li><a target="blank" href="http://www.chartjs.org/">Chart.js</a></li>
-                        <li><a target="blank" href="http://fortawesome.github.io/Font-Awesome/">Font Awesome</a></li>
-                        <li><a target="blank" href="http://www.fpdf.org/">Fpdf</a></li>
-                        <li><a target="blank" href="http://www.setasign.de/products/pdf-php-solutions/fpdi/">fpdi</a></li>
-                        <li><a target="blank" href="https://jquery.com/">Jquery</a></li>
-                        <li><a target="blank" href="https://github.com/running-coder/jquery-typeahead">Jquery Typeahead</a></li>
-                        <li><a target="blank" href="http://logging.apache.org/log4php/">log4php</a></li>
-                        <li><a target="blank" href="http://chir.ag/tech/download/pdfb">Pdfb</a></li>
-                        <li><a target="blank" href="http://www.foolabs.com/xpdf/">Pdftotext</a></li>
-                        <!-- <li><a target="blank" href="http://www.prototypejs.org/">Prototype</a></li>
-                        <li><a target="blank" href="http://script.aculo.us/">Script.aculo.us</a></li> -->
-                        <!-- <li><a target="blank" href="http://tafel.developpez.com">Tafel Tree</a></li> -->
-                        <li><a target="blank" href="http://www.tinybutstrong.com/">Tiny But Strong</a></li>
-                        <li><a target="blank" href="http://www.tinymce.com/">TinyMCE</a></li>
-                        <li><a target="blank" href="http://framework.zend.com/">Zend Lucene Search</a></li>
-                    </ul>
-                </div>
-    
-                <div class="col-sm-4">
-                    <h3>Crédits</h3>
-                    <hr/>
-                    <ul>
-                        <li>Florian AZIZIAN, Damien BUREL, Bruno CARLIN, Carole COTIN, Prosper DE LAURE, Driss DEMIRAY, Gaël DE VILLEBLANCHE, Emmanuel DILLARD, Mathieu DONZEL, Jean-Louis ERCOLANI, Claire FIGUERAS, Laurent GIOVANNONI, 
-                            Guillaume HEURTIER, Henri QUENEAU, Kader KANE, Yves-Christian KPAKPO, Alexandre MORIN, Sébastien NANABONDJA, Fodé NDIAYE, Cédric NDOUMBA, Alex ORLUC, Alexis RAGOT, Alexandre STEFANOVIC, Serge THIERRY-MIEG, 
-                            Cyril VAZQUEZ, Arnaud VEBER, Loic VINET</li>
-                        <br>
-                        <li><em>{{lang.thanksToCommunity}}</em></li>
-                    </ul>
-                    <p>&nbsp;</p>
-                    <div class="img_credits_maarch_box">
-                        <img src="static.php?filename=maarch_box.svg" />
-                    </div>
-                </div>
-            </mat-card>
-        </mat-sidenav-content>
-        <mat-sidenav #snav2 [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()" fixedTopGap="56"
-            position='end' [opened]="appService.getViewMode() ? false : true" style="overflow-x:hidden;"> 
-        </mat-sidenav>
-    </mat-sidenav-container>
-    </div>
\ No newline at end of file
+<div *ngIf="loading" style="display:flex;height:100%;">
+    <mat-spinner style="margin:auto;"></mat-spinner>
+</div>
+<mat-card *ngIf="!loading" class="card-app-content">
+    <div class="col-sm-8">
+        <h3>Maarch Courrier {{applicationVersion}} </h3>
+        <hr />
+        <p><em>Copyright &copy; 2008-2019 Maarch SAS {{lang.groupeCompany}}</em></p>
+        <p>{{lang.maarchLicence}}
+            <a target="blank" href="http://www.gnu.org/licenses/gpl-3.0-standalone.html">licence GNU GPLv3</a>.</p>
+        <div>
+            <ul>
+                <li>{{lang.officialWebsite}} : <a target="blank" href="https://maarch.com/">https://maarch.com</a></li>
+                <li>{{lang.community}} : <a target="blank"
+                        href="https://community.maarch.org/">https://community.maarch.org</a></li>
+                <li>{{lang.documentation}} : <a target="blank"
+                        href="https://docs.maarch.org/">https://docs.maarch.org</a></li>
+            </ul>
+        </div>
+        <p>&nbsp;</p>
+        <h3>{{lang.externalComponents}}</h3>
+        <hr />
+        <em>{{lang.thanksToExtDev}}</em>
+        <p>&nbsp;</p>
+        <ul>
+            <li><a target="blank" href="https://angular.io/">Angular</a></li>
+            <li><a target="blank" href="https://material.angular.io/">Angular Material</a></li>
+            <li><a target="blank" href="http://getbootstrap.com/">Bootstrap</a></li>
+            <li><a target="blank" href="http://www.chartjs.org/">Chart.js</a></li>
+            <li><a target="blank" href="http://fortawesome.github.io/Font-Awesome/">Font Awesome</a></li>
+            <li><a target="blank" href="http://www.fpdf.org/">Fpdf</a></li>
+            <li><a target="blank" href="http://www.setasign.de/products/pdf-php-solutions/fpdi/">fpdi</a></li>
+            <li><a target="blank" href="https://jquery.com/">Jquery</a></li>
+            <li><a target="blank" href="https://github.com/running-coder/jquery-typeahead">Jquery Typeahead</a></li>
+            <li><a target="blank" href="http://logging.apache.org/log4php/">log4php</a></li>
+            <li><a target="blank" href="http://chir.ag/tech/download/pdfb">Pdfb</a></li>
+            <li><a target="blank" href="http://www.foolabs.com/xpdf/">Pdftotext</a></li>
+            <!-- <li><a target="blank" href="http://www.prototypejs.org/">Prototype</a></li>
+            <li><a target="blank" href="http://script.aculo.us/">Script.aculo.us</a></li> -->
+            <!-- <li><a target="blank" href="http://tafel.developpez.com">Tafel Tree</a></li> -->
+            <li><a target="blank" href="http://www.tinybutstrong.com/">Tiny But Strong</a></li>
+            <li><a target="blank" href="http://www.tinymce.com/">TinyMCE</a></li>
+            <li><a target="blank" href="http://framework.zend.com/">Zend Lucene Search</a></li>
+        </ul>
+    </div>
+
+    <div class="col-sm-4">
+        <h3>Crédits</h3>
+        <hr />
+        <ul>
+            <li>Florian AZIZIAN, Damien BUREL, Bruno CARLIN, Carole COTIN, Prosper DE LAURE, Driss DEMIRAY, Gaël DE
+                VILLEBLANCHE, Emmanuel DILLARD, Mathieu DONZEL, Jean-Louis ERCOLANI, Claire FIGUERAS, Laurent
+                GIOVANNONI,
+                Guillaume HEURTIER, Henri QUENEAU, Kader KANE, Yves-Christian KPAKPO, Alexandre MORIN, Sébastien
+                NANABONDJA, Fodé NDIAYE, Cédric NDOUMBA, Alex ORLUC, Alexis RAGOT, Alexandre STEFANOVIC, Serge
+                THIERRY-MIEG,
+                Cyril VAZQUEZ, Arnaud VEBER, Loic VINET</li>
+            <br>
+            <li><em>{{lang.thanksToCommunity}}</em></li>
+        </ul>
+        <p>&nbsp;</p>
+        <div class="img_credits_maarch_box">
+            <img src="static.php?filename=maarch_box.svg" />
+        </div>
+    </div>
+</mat-card>
\ No newline at end of file
diff --git a/src/frontend/app/about-us.component.ts b/src/frontend/app/about-us.component.ts
index 05d14da1faf..b5ac275ec3e 100755
--- a/src/frontend/app/about-us.component.ts
+++ b/src/frontend/app/about-us.component.ts
@@ -1,8 +1,6 @@
-import { Component, OnInit, ViewChild } from '@angular/core';
+import { Component, OnInit } from '@angular/core';
 import { LANG } from './translate.component';
-import { NotificationService } from './notification.service';
-import { HeaderService }        from '../service/header.service';
-import { MatSidenav } from '@angular/material/sidenav';
+import { HeaderService } from '../service/header.service';
 import { AppService } from '../service/app.service';
 
 declare function $j(selector: any): any;
@@ -12,29 +10,23 @@ declare var angularGlobals: any;
 @Component({
     templateUrl: "about-us.component.html",
     styleUrls: ['profile.component.css'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class AboutUsComponent implements OnInit {
 
-    @ViewChild('snav', { static: true }) public  sidenavLeft   : MatSidenav;
-    @ViewChild('snav2', { static: true }) public sidenavRight  : MatSidenav;
-
-    applicationVersion              : string;
+    applicationVersion: string;
     lang: any = LANG;
 
     loading: boolean = false;
 
-
     constructor(
         private headerService: HeaderService,
-        public appService: AppService) {  
-            $j("link[href='merged_css.php']").remove();
+        public appService: AppService) {
+        $j("link[href='merged_css.php']").remove();
     }
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.aboutUs);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
 
         this.applicationVersion = angularGlobals.applicationVersion;
         this.loading = false;
diff --git a/src/frontend/app/actions/actions-list.component.html b/src/frontend/app/actions/actions-list.component.html
index 82debf74813..e41d68a7b7a 100644
--- a/src/frontend/app/actions/actions-list.component.html
+++ b/src/frontend/app/actions/actions-list.component.html
@@ -1,7 +1,7 @@
 <button *ngIf="!contextMode" (click)="loadActionList();" mat-stroked-button [matMenuTriggerFor]="menu">Actions <mat-icon
         matSuffix class="fa fa-caret-down"></mat-icon>
 </button>
-<span *ngIf="contextMode" [matMenuTriggerFor]="menu" #menu2 style="position: absolute;"
+<span *ngIf="contextMode" [matMenuTriggerFor]="menu" #menu2 style="position: fixed;"
     [style.left]="contextMenuPosition.x" [style.top]="contextMenuPosition.y"></span>
 
 <mat-menu #menu="matMenu" [class]="'actionListMenu'">
diff --git a/src/frontend/app/actions/actions-list.component.ts b/src/frontend/app/actions/actions-list.component.ts
index 6f63c0bf98b..2323cf3a0b7 100644
--- a/src/frontend/app/actions/actions-list.component.ts
+++ b/src/frontend/app/actions/actions-list.component.ts
@@ -55,7 +55,6 @@ export class ActionsListComponent implements OnInit {
     ngOnInit(): void { }
 
     open(x: number, y: number, row: any) {
-
         this.loadActionList();
         // Adjust the menu anchor position
         this.contextMenuPosition.x = x + 'px';
diff --git a/src/frontend/app/administration/action/action-administration.component.ts b/src/frontend/app/administration/action/action-administration.component.ts
index c3bded99702..1ae8994fa50 100755
--- a/src/frontend/app/administration/action/action-administration.component.ts
+++ b/src/frontend/app/administration/action/action-administration.component.ts
@@ -55,10 +55,10 @@ export class ActionAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe(params => {
-            if (typeof params['id'] == "undefined") {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
+            this.headerService.sideNavLeft = this.sidenavLeft;
 
+            if (typeof params['id'] == "undefined") {
+                
                 this.creationMode = true;
 
                 this.http.get('../../rest/initAction')
@@ -81,8 +81,6 @@ export class ActionAdministrationComponent implements OnInit {
                     });
             }
             else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
                 
                 this.creationMode = false;
 
diff --git a/src/frontend/app/administration/action/actions-administration.component.ts b/src/frontend/app/administration/action/actions-administration.component.ts
index 520f53f4717..9ab487a0881 100755
--- a/src/frontend/app/administration/action/actions-administration.component.ts
+++ b/src/frontend/app/administration/action/actions-administration.component.ts
@@ -54,8 +54,8 @@ export class ActionsAdministrationComponent implements OnInit {
     }
 
     ngOnInit(): void {
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/basket/basket-administration.component.ts b/src/frontend/app/administration/basket/basket-administration.component.ts
index fb9d3a79c33..9330a3ea926 100755
--- a/src/frontend/app/administration/basket/basket-administration.component.ts
+++ b/src/frontend/app/administration/basket/basket-administration.component.ts
@@ -73,20 +73,16 @@ export class BasketAdministrationComponent implements OnInit {
     ngOnInit(): void {
 
         this.loading = true;
-
+        this.headerService.sideNavLeft = this.sidenavLeft;
+        
         this.route.params.subscribe((params: any) => {
             if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.basketCreation);
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
-
                 this.creationMode = true;
                 this.basketIdAvailable = false;
                 this.loading = false;
             } else {
-                this.orderColumnsSelected = [];
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
+                this.orderColumnsSelected = [];      
 
                 this.creationMode = false;
                 this.basketIdAvailable = true;
diff --git a/src/frontend/app/administration/basket/baskets-administration.component.ts b/src/frontend/app/administration/basket/baskets-administration.component.ts
index 797e35e81b7..dc42ffa1c68 100755
--- a/src/frontend/app/administration/basket/baskets-administration.component.ts
+++ b/src/frontend/app/administration/basket/baskets-administration.component.ts
@@ -53,8 +53,7 @@ export class BasketsAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.baskets);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        this.headerService.sideNavLeft = this.sidenavLeft;  
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/contact/customField/contacts-custom-fields-administration.component.ts b/src/frontend/app/administration/contact/customField/contacts-custom-fields-administration.component.ts
index 8b082129cda..8ccb92eac47 100644
--- a/src/frontend/app/administration/contact/customField/contacts-custom-fields-administration.component.ts
+++ b/src/frontend/app/administration/contact/customField/contacts-custom-fields-administration.component.ts
@@ -17,7 +17,7 @@ import { SortPipe } from '../../../../plugins/sorting.pipe';
         'contacts-custom-fields-administration.component.scss', 
         '../../../indexation/indexing-form/indexing-form.component.scss'
     ],
-    providers: [NotificationService, AppService, SortPipe]
+    providers: [AppService, SortPipe]
 })
 
 export class ContactsCustomFieldsAdministrationComponent implements OnInit {
@@ -105,8 +105,8 @@ export class ContactsCustomFieldsAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.customFields + ' ' + this.lang.contacts);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.http.get("../../rest/contactsCustomFields").pipe(
             // TO FIX DATA BINDING SIMPLE ARRAY VALUES
diff --git a/src/frontend/app/administration/contact/group/contacts-group-administration.component.ts b/src/frontend/app/administration/contact/group/contacts-group-administration.component.ts
index 485b1019e61..3f99967472c 100644
--- a/src/frontend/app/administration/contact/group/contacts-group-administration.component.ts
+++ b/src/frontend/app/administration/contact/group/contacts-group-administration.component.ts
@@ -20,7 +20,7 @@ declare function $j(selector: any): any;
     styleUrls: [
         'contacts-group-administration.component.scss'
     ],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class ContactsGroupAdministrationComponent implements OnInit {
 
@@ -123,18 +123,16 @@ export class ContactsGroupAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe(params => {
+            this.headerService.sideNavLeft = this.sidenavLeft;
+
             if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.contactGroupCreation);
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
-
+                
                 this.creationMode = true;
                 this.contactsGroup.public = false;
                 this.loading = false;
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
-
+                
                 this.creationMode = false;
 
                 this.http.get('../../rest/contactsGroups/' + params['id'])
diff --git a/src/frontend/app/administration/contact/group/contacts-groups-administration.component.ts b/src/frontend/app/administration/contact/group/contacts-groups-administration.component.ts
index d1c8fc76de0..1ebc50784de 100644
--- a/src/frontend/app/administration/contact/group/contacts-groups-administration.component.ts
+++ b/src/frontend/app/administration/contact/group/contacts-groups-administration.component.ts
@@ -17,7 +17,7 @@ declare function $j(selector: any): any;
     styleUrls: [
         'contacts-groups-administration.component.scss'
     ],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 
 export class ContactsGroupsAdministrationComponent implements OnInit {
@@ -85,10 +85,8 @@ export class ContactsGroupsAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.contactsGroups);
-
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
-
+        this.headerService.sideNavLeft = this.sidenavLeft;
+        
         this.loading = true;
 
         this.http.get('../../rest/contactsGroups')
diff --git a/src/frontend/app/administration/contact/list/contacts-list-administration.component.ts b/src/frontend/app/administration/contact/list/contacts-list-administration.component.ts
index c84dab793e5..e465f80f897 100644
--- a/src/frontend/app/administration/contact/list/contacts-list-administration.component.ts
+++ b/src/frontend/app/administration/contact/list/contacts-list-administration.component.ts
@@ -82,6 +82,7 @@ export class ContactsListAdministrationComponent implements OnInit {
         public functions: FunctionsService) { }
 
     ngOnInit(): void {
+        this.headerService.sideNavLeft = this.sidenavLeft;
         this.loading = true;
         this.initContactList();
         this.initAutocompleteContacts();
diff --git a/src/frontend/app/administration/contact/page/contacts-page-administration.component.ts b/src/frontend/app/administration/contact/page/contacts-page-administration.component.ts
index 0085ee2c4e2..78cf757945f 100644
--- a/src/frontend/app/administration/contact/page/contacts-page-administration.component.ts
+++ b/src/frontend/app/administration/contact/page/contacts-page-administration.component.ts
@@ -1,7 +1,6 @@
 import { Component, OnInit, ViewChild } from '@angular/core';
 import { HttpClient } from '@angular/common/http';
 import { LANG } from '../../../translate.component';
-import { NotificationService } from '../../../notification.service';
 import { HeaderService } from '../../../../service/header.service';
 import { MatSidenav } from '@angular/material/sidenav';
 import { AppService } from '../../../../service/app.service';
@@ -11,7 +10,7 @@ import { ActivatedRoute, Router } from '@angular/router';
 @Component({
     templateUrl: "contacts-page-administration.component.html",
     styleUrls: ['contacts-page-administration.component.scss'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class ContactsPageAdministrationComponent implements OnInit {
 
@@ -65,17 +64,15 @@ export class ContactsPageAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe((params: any) => {
-            if (typeof params['id'] == "undefined") {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
+            
+            this.headerService.sideNavLeft = this.sidenavLeft;
 
+            if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.contactCreation);
                 this.creationMode = true;
                 this.loading = false;
 
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
 
                 this.headerService.setHeader(this.lang.contactModification);
 
diff --git a/src/frontend/app/administration/contact/parameter/contacts-parameters-administration.component.ts b/src/frontend/app/administration/contact/parameter/contacts-parameters-administration.component.ts
index 25b313cfcde..0aa3e9aad53 100644
--- a/src/frontend/app/administration/contact/parameter/contacts-parameters-administration.component.ts
+++ b/src/frontend/app/administration/contact/parameter/contacts-parameters-administration.component.ts
@@ -12,7 +12,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "contacts-parameters-administration.component.html",
     styleUrls: ['contacts-parameters-administration.component.scss'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class ContactsParametersAdministrationComponent implements OnInit {
 
@@ -84,8 +84,7 @@ export class ContactsParametersAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.headerService.setHeader(this.lang.contactsParameters);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.http.get('../../rest/contactsParameters')
             .subscribe((data: any) => {
diff --git a/src/frontend/app/administration/customField/custom-fields-administration.component.ts b/src/frontend/app/administration/customField/custom-fields-administration.component.ts
index 575626e0153..5b822f9f0a8 100644
--- a/src/frontend/app/administration/customField/custom-fields-administration.component.ts
+++ b/src/frontend/app/administration/customField/custom-fields-administration.component.ts
@@ -19,7 +19,7 @@ declare function $j(selector: any): any;
         'custom-fields-administration.component.scss', 
         '../../indexation/indexing-form/indexing-form.component.scss'
     ],
-    providers: [NotificationService, AppService, SortPipe]
+    providers: [AppService, SortPipe]
 })
 
 export class CustomFieldsAdministrationComponent implements OnInit {
@@ -84,8 +84,8 @@ export class CustomFieldsAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.customFields);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.http.get("../../rest/customFields").pipe(
             // TO FIX DATA BINDING SIMPLE ARRAY VALUES
diff --git a/src/frontend/app/administration/diffusionModel/diffusionModel-administration.component.ts b/src/frontend/app/administration/diffusionModel/diffusionModel-administration.component.ts
index 9d0a3ddaa6e..a40b1344afb 100755
--- a/src/frontend/app/administration/diffusionModel/diffusionModel-administration.component.ts
+++ b/src/frontend/app/administration/diffusionModel/diffusionModel-administration.component.ts
@@ -62,17 +62,16 @@ export class DiffusionModelAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe(async params => {
+
+            this.headerService.sideNavLeft = this.sidenavLeft;
+            
             if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.diffusionModelCreation);
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
 
                 this.creationMode = true;
                 this.loading = false;
 
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
 
                 this.creationMode = false;
 
diff --git a/src/frontend/app/administration/diffusionModel/diffusionModels-administration.component.ts b/src/frontend/app/administration/diffusionModel/diffusionModels-administration.component.ts
index e43119f61e0..43398eef0ce 100755
--- a/src/frontend/app/administration/diffusionModel/diffusionModels-administration.component.ts
+++ b/src/frontend/app/administration/diffusionModel/diffusionModels-administration.component.ts
@@ -67,8 +67,8 @@ export class DiffusionModelsAdministrationComponent implements OnInit {
 
     async ngOnInit(): Promise<void> {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.diffusionModels);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/docserver/docserver-administration.component.ts b/src/frontend/app/administration/docserver/docserver-administration.component.ts
index 47ba93fea25..732978e5bb9 100755
--- a/src/frontend/app/administration/docserver/docserver-administration.component.ts
+++ b/src/frontend/app/administration/docserver/docserver-administration.component.ts
@@ -43,8 +43,8 @@ export class DocserverAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.docserverCreation);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/docserver/docservers-administration.component.ts b/src/frontend/app/administration/docserver/docservers-administration.component.ts
index f38b3dbc6af..fb90bc8b3c5 100755
--- a/src/frontend/app/administration/docserver/docservers-administration.component.ts
+++ b/src/frontend/app/administration/docserver/docservers-administration.component.ts
@@ -42,8 +42,8 @@ export class DocserversAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.docservers);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/doctype/doctypes-administration.component.ts b/src/frontend/app/administration/doctype/doctypes-administration.component.ts
index 4f99c16d178..8ee2097d052 100755
--- a/src/frontend/app/administration/doctype/doctypes-administration.component.ts
+++ b/src/frontend/app/administration/doctype/doctypes-administration.component.ts
@@ -7,14 +7,13 @@ import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dial
 import { MatPaginator } from '@angular/material/paginator';
 import { MatSidenav } from '@angular/material/sidenav';
 import { MatSort } from '@angular/material/sort';
-import { MatTableDataSource } from '@angular/material/table';
 import { AppService } from '../../../service/app.service';
 
 declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "doctypes-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 
 export class DoctypesAdministrationComponent implements OnInit {
@@ -57,8 +56,8 @@ export class DoctypesAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.documentTypes);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/entity/entities-administration.component.ts b/src/frontend/app/administration/entity/entities-administration.component.ts
index c929ca96935..e88195aa431 100755
--- a/src/frontend/app/administration/entity/entities-administration.component.ts
+++ b/src/frontend/app/administration/entity/entities-administration.component.ts
@@ -6,7 +6,6 @@ import { MatPaginator } from '@angular/material/paginator';
 import { MatSidenav } from '@angular/material/sidenav';
 import { MatSort } from '@angular/material/sort';
 import { MatTableDataSource } from '@angular/material/table';
-import { ConfirmModalComponent } from '../../confirmModal.component';
 import { NotificationService } from '../../notification.service';
 import { HeaderService } from '../../../service/header.service';
 import { Router } from '@angular/router';
@@ -24,7 +23,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "entities-administration.component.html",
     styleUrls: ['entities-administration.component.css'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class EntitiesAdministrationComponent implements OnInit {
     /*HEADER*/
@@ -87,8 +86,8 @@ export class EntitiesAdministrationComponent implements OnInit {
 
     async ngOnInit(): Promise<void> {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.entities);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/group/group-administration.component.ts b/src/frontend/app/administration/group/group-administration.component.ts
index 9f071f32e65..cf8171198e6 100755
--- a/src/frontend/app/administration/group/group-administration.component.ts
+++ b/src/frontend/app/administration/group/group-administration.component.ts
@@ -13,7 +13,7 @@ import { PrivilegeService } from '../../../service/privileges.service';
 import { tap, catchError, exhaustMap, map, finalize, filter } from 'rxjs/operators';
 import { of } from 'rxjs';
 import { MenuShortcutComponent } from '../../menu/menu-shortcut.component';
-import { MatSelectionList, MatDialog, MatSlideToggle } from '@angular/material';
+import { MatDialog } from '@angular/material';
 import { ConfirmComponent } from '../../../plugins/modal/confirm.component';
 
 declare function $j(selector: any): any;
@@ -21,7 +21,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "group-administration.component.html",
     styleUrls: ['group-administration.component.scss'],
-    providers: [NotificationService, AppService, PrivilegeService]
+    providers: [AppService, PrivilegeService]
 })
 export class GroupAdministrationComponent implements OnInit {
     /*HEADER*/
@@ -87,14 +87,13 @@ export class GroupAdministrationComponent implements OnInit {
             if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.groupCreation);
 
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
-
+                this.headerService.sideNavLeft = this.sidenavLeft;
+                
                 this.creationMode = true;
                 this.loading = false;
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
+                
+                
 
                 this.creationMode = false;
                 this.http.get("../../rest/groups/" + params['id'] + "/details")
@@ -271,11 +270,9 @@ export class GroupAdministrationComponent implements OnInit {
 
     }
 
-    resfreshShortcut() {
-        this.headerService.resfreshCurrentUser();
-        setTimeout(() => {
-            this.appShortcut.loadShortcuts();
-        }, 200);
+    async resfreshShortcut() {
+        await this.headerService.resfreshCurrentUser();
+        this.privilegeService.resfreshUserShortcuts();
     }
 
     getCurrentPrivListDiff(serviceId: string) {
diff --git a/src/frontend/app/administration/group/groups-administration.component.ts b/src/frontend/app/administration/group/groups-administration.component.ts
index b7070de3cad..abf21251be6 100755
--- a/src/frontend/app/administration/group/groups-administration.component.ts
+++ b/src/frontend/app/administration/group/groups-administration.component.ts
@@ -15,7 +15,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "groups-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class GroupsAdministrationComponent implements OnInit {
     /*HEADER*/
@@ -61,8 +61,7 @@ export class GroupsAdministrationComponent implements OnInit {
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.groups);
 
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/history/batch/history-batch-administration.component.ts b/src/frontend/app/administration/history/batch/history-batch-administration.component.ts
index f1b3bc27195..395a604f333 100644
--- a/src/frontend/app/administration/history/batch/history-batch-administration.component.ts
+++ b/src/frontend/app/administration/history/batch/history-batch-administration.component.ts
@@ -7,7 +7,7 @@ import { MatSidenav } from '@angular/material/sidenav';
 import { AppService } from '../../../../service/app.service';
 import { Observable, merge, Subject, of as observableOf, of } from 'rxjs';
 import { MatPaginator, MatSort, MatDialog } from '@angular/material';
-import { takeUntil, startWith, switchMap, map, catchError, filter, exhaustMap, tap, debounceTime, distinctUntilChanged, finalize } from 'rxjs/operators';
+import { takeUntil, startWith, switchMap, map, catchError, tap, finalize } from 'rxjs/operators';
 import { FormControl } from '@angular/forms';
 import { FunctionsService } from '../../../../service/functions.service';
 import { LatinisePipe } from 'ngx-pipes';
@@ -73,6 +73,8 @@ export class HistoryBatchAdministrationComponent implements OnInit {
         private privilegeService: PrivilegeService) { }
 
     ngOnInit(): void {
+        this.headerService.sideNavLeft = this.sidenavLeft;
+
         if (this.privilegeService.hasCurrentUserPrivilege('view_history')) {
             this.subMenus = [
                 {
diff --git a/src/frontend/app/administration/history/history-administration.component.ts b/src/frontend/app/administration/history/history-administration.component.ts
index e8cadf34bab..14f189120bd 100755
--- a/src/frontend/app/administration/history/history-administration.component.ts
+++ b/src/frontend/app/administration/history/history-administration.component.ts
@@ -51,6 +51,8 @@ export class HistoryAdministrationComponent implements OnInit {
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.history.toLowerCase(), '', '');
 
+        this.headerService.sideNavLeft = this.sidenavLeft;
+        
         if (this.privilegeService.hasCurrentUserPrivilege('view_history_batch')) {
             this.subMenus = [
                 {
diff --git a/src/frontend/app/administration/home/administration.component.ts b/src/frontend/app/administration/home/administration.component.ts
index 04049776ef2..e5368cdb5c1 100644
--- a/src/frontend/app/administration/home/administration.component.ts
+++ b/src/frontend/app/administration/home/administration.component.ts
@@ -34,8 +34,8 @@ export class AdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/indexingModel/indexing-model-administration.component.ts b/src/frontend/app/administration/indexingModel/indexing-model-administration.component.ts
index 353751b330f..ca7906ee0a6 100644
--- a/src/frontend/app/administration/indexingModel/indexing-model-administration.component.ts
+++ b/src/frontend/app/administration/indexingModel/indexing-model-administration.component.ts
@@ -20,7 +20,7 @@ declare function $j(selector: any): any;
         'indexing-model-administration.component.scss',
         '../../indexation/indexing-form/indexing-form.component.scss'
     ],
-    providers: [NotificationService, AppService, SortPipe]
+    providers: [AppService, SortPipe]
 })
 
 export class IndexingModelAdministrationComponent implements OnInit {
@@ -64,8 +64,8 @@ export class IndexingModelAdministrationComponent implements OnInit {
     }
 
     ngOnInit(): void {
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.route.params.subscribe((params) => {
             if (typeof params['id'] == "undefined") {
diff --git a/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts b/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts
index a6257450be6..048c2da72e2 100644
--- a/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts
+++ b/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts
@@ -20,7 +20,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "indexing-models-administration.component.html",
     styleUrls: ['indexing-models-administration.component.scss'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 
 export class IndexingModelsAdministrationComponent implements OnInit {
@@ -63,8 +63,8 @@ export class IndexingModelsAdministrationComponent implements OnInit {
     ) { }
 
     ngOnInit(): void {
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/notification/notification-administration.component.ts b/src/frontend/app/administration/notification/notification-administration.component.ts
index ea3cadfb7ca..35c4d4be79b 100755
--- a/src/frontend/app/administration/notification/notification-administration.component.ts
+++ b/src/frontend/app/administration/notification/notification-administration.component.ts
@@ -11,7 +11,7 @@ declare var $j: any;
 
 @Component({
     templateUrl: "notification-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class NotificationAdministrationComponent implements OnInit {
 
@@ -40,11 +40,12 @@ export class NotificationAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe((params: any) => {
+
+            this.headerService.sideNavLeft = this.sidenavLeft;
+
             if (typeof params['identifier'] == "undefined") {
                 this.headerService.setHeader(this.lang.notificationCreation);
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
-
+                
                 this.creationMode = true;
                 this.http.get('../../rest/administration/notifications/new')
                     .subscribe((data: any) => {
@@ -55,8 +56,6 @@ export class NotificationAdministrationComponent implements OnInit {
                         this.notify.error(err.error.errors);
                     });
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
 
                 this.creationMode = false;
                 this.http.get('../../rest/notifications/' + params['identifier'])
diff --git a/src/frontend/app/administration/notification/notifications-administration.component.ts b/src/frontend/app/administration/notification/notifications-administration.component.ts
index 9d6af481a8b..0c992b7e477 100755
--- a/src/frontend/app/administration/notification/notifications-administration.component.ts
+++ b/src/frontend/app/administration/notification/notifications-administration.component.ts
@@ -14,7 +14,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "notifications-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class NotificationsAdministrationComponent implements OnInit {
 
@@ -72,9 +72,8 @@ export class NotificationsAdministrationComponent implements OnInit {
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.notifications);
 
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
-
+        this.headerService.sideNavLeft = this.sidenavLeft;
+        
         this.loading = true;
 
         this.http.get('../../rest/notifications')
diff --git a/src/frontend/app/administration/parameter/parameter-administration.component.ts b/src/frontend/app/administration/parameter/parameter-administration.component.ts
index e3c7e8af917..4877d552faa 100755
--- a/src/frontend/app/administration/parameter/parameter-administration.component.ts
+++ b/src/frontend/app/administration/parameter/parameter-administration.component.ts
@@ -11,7 +11,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "parameter-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class ParameterAdministrationComponent implements OnInit {
 
@@ -41,16 +41,15 @@ export class ParameterAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe((params) => {
+
+            this.headerService.sideNavLeft = this.sidenavLeft;
+
             if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.parameterCreation);
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
 
                 this.creationMode = true;
                 this.loading = false;
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
 
                 this.creationMode = false;
                 this.http.get("../../rest/parameters/" + params['id'])
diff --git a/src/frontend/app/administration/parameter/parameters-administration.component.ts b/src/frontend/app/administration/parameter/parameters-administration.component.ts
index 6695de0b655..3fe60c4ba29 100755
--- a/src/frontend/app/administration/parameter/parameters-administration.component.ts
+++ b/src/frontend/app/administration/parameter/parameters-administration.component.ts
@@ -14,7 +14,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "parameters-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class ParametersAdministrationComponent implements OnInit {
 
@@ -54,8 +54,8 @@ export class ParametersAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.parameters);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/priority/priorities-administration.component.ts b/src/frontend/app/administration/priority/priorities-administration.component.ts
index c3eb2c56a61..779cf5dae20 100755
--- a/src/frontend/app/administration/priority/priorities-administration.component.ts
+++ b/src/frontend/app/administration/priority/priorities-administration.component.ts
@@ -14,7 +14,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "priorities-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class PrioritiesAdministrationComponent implements OnInit {
     /*HEADER*/
@@ -53,8 +53,8 @@ export class PrioritiesAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.priorities);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/priority/priority-administration.component.ts b/src/frontend/app/administration/priority/priority-administration.component.ts
index 1277a98d4d4..90afaaf3c35 100755
--- a/src/frontend/app/administration/priority/priority-administration.component.ts
+++ b/src/frontend/app/administration/priority/priority-administration.component.ts
@@ -11,7 +11,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "priority-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class PriorityAdministrationComponent implements OnInit {
 
@@ -44,16 +44,15 @@ export class PriorityAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe((params) => {
+
+            this.headerService.sideNavLeft = this.sidenavLeft;
+
             if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.priorityCreation);
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
 
                 this.creationMode = true;
                 this.loading = false;
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
 
                 this.creationMode = false;
                 this.id = params['id'];
diff --git a/src/frontend/app/administration/report/reports-administration.component.ts b/src/frontend/app/administration/report/reports-administration.component.ts
index dd0add0dfe3..33528e8c3c1 100755
--- a/src/frontend/app/administration/report/reports-administration.component.ts
+++ b/src/frontend/app/administration/report/reports-administration.component.ts
@@ -10,7 +10,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "reports-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class ReportsAdministrationComponent implements OnInit {
     /*HEADER*/
@@ -37,8 +37,8 @@ export class ReportsAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.reports);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/security/securities-administration.component.ts b/src/frontend/app/administration/security/securities-administration.component.ts
index 73e1c1ec2f2..10a5e9d16f6 100755
--- a/src/frontend/app/administration/security/securities-administration.component.ts
+++ b/src/frontend/app/administration/security/securities-administration.component.ts
@@ -10,7 +10,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "securities-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class SecuritiesAdministrationComponent implements OnInit {
 
@@ -46,8 +46,8 @@ export class SecuritiesAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.securitiesAdministration);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/sendmail/sendmail-administration.component.ts b/src/frontend/app/administration/sendmail/sendmail-administration.component.ts
index 141ae90e789..7bf17590cf7 100644
--- a/src/frontend/app/administration/sendmail/sendmail-administration.component.ts
+++ b/src/frontend/app/administration/sendmail/sendmail-administration.component.ts
@@ -12,7 +12,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "sendmail-administration.component.html",
     styleUrls: ['sendmail-administration.component.scss'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class SendmailAdministrationComponent implements OnInit {
 
@@ -93,8 +93,8 @@ export class SendmailAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.sendmailShort);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/shipping/shipping-administration.component.ts b/src/frontend/app/administration/shipping/shipping-administration.component.ts
index 2e366c2cc64..0f7dd6f9873 100644
--- a/src/frontend/app/administration/shipping/shipping-administration.component.ts
+++ b/src/frontend/app/administration/shipping/shipping-administration.component.ts
@@ -15,7 +15,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "shipping-administration.component.html",
     styleUrls: ['shipping-administration.component.scss'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class ShippingAdministrationComponent implements OnInit {
 
@@ -79,10 +79,6 @@ export class ShippingAdministrationComponent implements OnInit {
     }
 
     ngOnInit(): void {
-
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
-
         this.http.get("../../rest/externalConnectionsEnabled").pipe(
             tap((data: any) => {
                 console.log(data);
@@ -96,6 +92,9 @@ export class ShippingAdministrationComponent implements OnInit {
         ).subscribe();
 
         this.route.params.subscribe(params => {
+
+            this.headerService.sideNavLeft = this.sidenavLeft;
+
             if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.shippingCreation);
 
diff --git a/src/frontend/app/administration/shipping/shippings-administration.component.ts b/src/frontend/app/administration/shipping/shippings-administration.component.ts
index 7ae43b7846c..c234100c370 100644
--- a/src/frontend/app/administration/shipping/shippings-administration.component.ts
+++ b/src/frontend/app/administration/shipping/shippings-administration.component.ts
@@ -14,7 +14,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "shippings-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class ShippingsAdministrationComponent implements OnInit {
 
@@ -54,8 +54,8 @@ export class ShippingsAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.shippings);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/status/status-administration.component.ts b/src/frontend/app/administration/status/status-administration.component.ts
index d9c3cc803c1..590b21700b8 100755
--- a/src/frontend/app/administration/status/status-administration.component.ts
+++ b/src/frontend/app/administration/status/status-administration.component.ts
@@ -12,7 +12,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "status-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class StatusAdministrationComponent implements OnInit {
 
@@ -58,10 +58,11 @@ export class StatusAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe((params: any) => {
+
+            this.headerService.sideNavLeft = this.sidenavLeft;
+
             if (typeof params['identifier'] == "undefined") {
                 this.headerService.setHeader(this.lang.statusCreation);
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
 
                 this.http.get('../../rest/administration/statuses/new')
                     .subscribe((data: any) => {
@@ -74,8 +75,6 @@ export class StatusAdministrationComponent implements OnInit {
                     });
                 this.statusIdAvailable = false;
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
 
                 this.creationMode = false;
                 this.statusIdentifier = params['identifier'];
diff --git a/src/frontend/app/administration/status/statuses-administration.component.ts b/src/frontend/app/administration/status/statuses-administration.component.ts
index 4e99a00eb18..2f350ed7575 100755
--- a/src/frontend/app/administration/status/statuses-administration.component.ts
+++ b/src/frontend/app/administration/status/statuses-administration.component.ts
@@ -14,7 +14,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "statuses-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class StatusesAdministrationComponent implements OnInit {
 
@@ -52,8 +52,8 @@ export class StatusesAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.statuses);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/tag/tag-administration.component.ts b/src/frontend/app/administration/tag/tag-administration.component.ts
index 58777e34948..502331182a8 100644
--- a/src/frontend/app/administration/tag/tag-administration.component.ts
+++ b/src/frontend/app/administration/tag/tag-administration.component.ts
@@ -57,11 +57,11 @@ export class TagAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.loading = true;
+        
+        this.route.params.subscribe((params) => {
 
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+            this.headerService.sideNavLeft = this.sidenavLeft;
 
-        this.route.params.subscribe((params) => {
             if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.tagCreation);
                 this.creationMode = true;
diff --git a/src/frontend/app/administration/tag/tags-administration.component.ts b/src/frontend/app/administration/tag/tags-administration.component.ts
index e09d04b3508..30b24dd0315 100644
--- a/src/frontend/app/administration/tag/tags-administration.component.ts
+++ b/src/frontend/app/administration/tag/tags-administration.component.ts
@@ -53,8 +53,9 @@ export class TagsAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.tags);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
+        
         this.loadList();
     }
 
diff --git a/src/frontend/app/administration/template/template-administration.component.ts b/src/frontend/app/administration/template/template-administration.component.ts
index 9ea2006e0ec..bab89ea93b1 100755
--- a/src/frontend/app/administration/template/template-administration.component.ts
+++ b/src/frontend/app/administration/template/template-administration.component.ts
@@ -14,7 +14,7 @@ declare var tinymce: any;
 @Component({
     templateUrl: "template-administration.component.html",
     styleUrls: ['template-administration.component.scss'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class TemplateAdministrationComponent implements OnInit {
 
@@ -64,10 +64,11 @@ export class TemplateAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe(params => {
+
+            this.headerService.sideNavLeft = this.sidenavLeft;
+
             if (typeof params['id'] == "undefined") {
                 this.headerService.setHeader(this.lang.templateCreation);
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
 
                 this.creationMode = true;
 
@@ -80,8 +81,6 @@ export class TemplateAdministrationComponent implements OnInit {
 
                     });
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
 
                 this.creationMode = false;
                 this.http.get('../../rest/templates/' + params['id'] + '/details')
diff --git a/src/frontend/app/administration/template/templates-administration.component.ts b/src/frontend/app/administration/template/templates-administration.component.ts
index a5fc68222f9..50ec04bcd95 100755
--- a/src/frontend/app/administration/template/templates-administration.component.ts
+++ b/src/frontend/app/administration/template/templates-administration.component.ts
@@ -14,7 +14,7 @@ declare function $j(selector: any): any;
 
 @Component({
     templateUrl: "templates-administration.component.html",
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 
 export class TemplatesAdministrationComponent implements OnInit {
@@ -55,8 +55,8 @@ export class TemplatesAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.templates);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/updateStatus/update-status-administration.component.ts b/src/frontend/app/administration/updateStatus/update-status-administration.component.ts
index 67952561cff..8b3411578d0 100755
--- a/src/frontend/app/administration/updateStatus/update-status-administration.component.ts
+++ b/src/frontend/app/administration/updateStatus/update-status-administration.component.ts
@@ -12,7 +12,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "update-status-administration.component.html",
     styleUrls: ['update-status-administration.component.css'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class UpdateStatusAdministrationComponent implements OnInit {
 
@@ -40,8 +40,8 @@ export class UpdateStatusAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.updateStatus);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/administration/user/user-administration.component.ts b/src/frontend/app/administration/user/user-administration.component.ts
index 6b349c36513..f27ee9b81ef 100755
--- a/src/frontend/app/administration/user/user-administration.component.ts
+++ b/src/frontend/app/administration/user/user-administration.component.ts
@@ -22,7 +22,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "user-administration.component.html",
     styleUrls: ['user-administration.component.scss'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class UserAdministrationComponent implements OnInit {
     @ViewChild('snav', { static: true }) public sidenavLeft: MatSidenav;
@@ -136,9 +136,10 @@ export class UserAdministrationComponent implements OnInit {
         this.loading = true;
 
         this.route.params.subscribe((params: any) => {
+
+            this.headerService.sideNavLeft = this.sidenavLeft;
+
             if (typeof params['id'] == "undefined") {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(null);
 
                 this.headerService.setHeader(this.lang.userCreation);
                 this.creationMode = true;
@@ -146,8 +147,6 @@ export class UserAdministrationComponent implements OnInit {
                 this.canManagePersonalDatas = this.privilegeService.hasCurrentUserPrivilege('manage_personal_data');
                 this.loading = false;
             } else {
-                window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-                window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
 
                 this.creationMode = false;
                 this.serialId = params['id'];
@@ -389,14 +388,12 @@ export class UserAdministrationComponent implements OnInit {
                 "role": group.role
             };
             this.http.post("../../rest/users/" + this.serialId + "/groups", groupReq)
-                .subscribe((data: any) => {
+                .subscribe(async (data: any) => {
                     this.user.groups = data.groups;
                     this.user.baskets = data.baskets;
                     if (this.headerService.user.id == this.serialId) {
-                        this.headerService.resfreshCurrentUser();
-                        setTimeout(() => {
-                            this.appShortcut.loadShortcuts();   
-                        }, 200); 
+                        await this.headerService.resfreshCurrentUser();
+                        this.privilegeService.resfreshUserShortcuts();
                     }
                     this.notify.success(this.lang.groupAdded);
                 }, (err) => {
@@ -404,15 +401,13 @@ export class UserAdministrationComponent implements OnInit {
                 });
         } else {
             this.http.delete("../../rest/users/" + this.serialId + "/groups/" + group.group_id)
-                .subscribe((data: any) => {
+                .subscribe(async (data: any) => {
                     this.user.groups = data.groups;
                     this.user.baskets = data.baskets;
                     this.user.redirectedBaskets = data.redirectedBaskets;
                     if (this.headerService.user.id == this.serialId) {
-                        this.headerService.resfreshCurrentUser();
-                        setTimeout(() => {
-                            this.appShortcut.loadShortcuts();   
-                        }, 200); 
+                        await this.headerService.resfreshCurrentUser();
+                        this.privilegeService.resfreshUserShortcuts();
                     }
                     this.notify.success(this.lang.groupDeleted);
                 }, (err) => {
diff --git a/src/frontend/app/administration/user/users-administration.component.html b/src/frontend/app/administration/user/users-administration.component.html
index 6fbcd7b8d52..a0e0d8e833b 100755
--- a/src/frontend/app/administration/user/users-administration.component.html
+++ b/src/frontend/app/administration/user/users-administration.component.html
@@ -1,100 +1,132 @@
-<div class="admin-container" [class.admin-is-mobile]="appService.getViewMode()">
-    <mat-sidenav-container autosize class="admin-sidenav-container" >
-        <mat-sidenav #snav [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()" fixedTopGap="56"
-            [opened]="appService.getViewMode() ? false : true">
-            <menu-shortcut></menu-shortcut>
-            <menu-nav></menu-nav>
-            <mat-nav-list>
-                <h3 mat-subheader>{{lang.actions}}</h3>
-                <a mat-list-item routerLink="/administration/users/new">
-                    <mat-icon color="primary" mat-list-icon class="fa fa-plus"></mat-icon>
-                    <p mat-line>
-                        {{lang.add}}
-                    </p>
-                </a>
-            </mat-nav-list>
-            <mat-divider></mat-divider>
-            <mat-divider *ngIf="quota.userQuota"></mat-divider>
-            <mat-nav-list *ngIf="quota.userQuota">
-                <h3 mat-subheader>{{lang.quota}}</h3>
-                <p mat-line style="margin-left:20px">{{lang.actives}} : {{quota.actives}}</p>
-                <p mat-line style="margin-left:20px">{{lang.inactives}} : {{quota.inactives}}</p>
-                <p mat-line style="margin-left:20px">{{lang.quota}} : {{quota.userQuota}}</p>
-            </mat-nav-list>
-        </mat-sidenav>
-        <mat-sidenav-content>
-            <div *ngIf="loading" style="display:flex;height:100%;">
-                <mat-spinner style="margin:auto;"></mat-spinner>
+<mat-sidenav-container autosize class="maarch-container">
+    <mat-sidenav #snav [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()"
+        [opened]="appService.getViewMode() ? false : true"
+        [ngStyle]="{'width': appService.getViewMode() ? '80%' : '350px'}">
+        <header-panel [snavLeft]="snav"></header-panel>
+        <menu-shortcut></menu-shortcut>
+        <menu-nav></menu-nav>
+        <mat-nav-list>
+            <h3 mat-subheader>{{lang.actions}}</h3>
+            <a mat-list-item routerLink="/administration/users/new">
+                <mat-icon color="primary" mat-list-icon class="fa fa-plus"></mat-icon>
+                <p mat-line>
+                    {{lang.add}}
+                </p>
+            </a>
+        </mat-nav-list>
+        <mat-divider></mat-divider>
+        <mat-divider *ngIf="quota.userQuota"></mat-divider>
+        <mat-nav-list *ngIf="quota.userQuota">
+            <h3 mat-subheader>{{lang.quota}}</h3>
+            <p mat-line style="margin-left:20px">{{lang.actives}} : {{quota.actives}}</p>
+            <p mat-line style="margin-left:20px">{{lang.inactives}} : {{quota.inactives}}</p>
+            <p mat-line style="margin-left:20px">{{lang.quota}} : {{quota.userQuota}}</p>
+        </mat-nav-list>
+    </mat-sidenav>
+    <mat-sidenav-content>
+        <div class="bg-head">
+            <div class="bg-head-title" [class.customContainerRight]="appService.getViewMode()">
+                <div class="bg-head-title-label">
+                    <header-left [snavLeft]="snav"></header-left>
+                </div>
+                <div class="bg-head-title-tool">
+                    <header-right></header-right>
+                </div>
             </div>
-            <mat-card *ngIf="!loading" class="card-app-content">
-                <div class="row">
-                    <div class="col-md-6 col-xs-6">
-                        <mat-form-field>
-                            <input matInput (keyup)="applyFilter($event.target.value)" placeholder="{{lang.filterBy}}">
-                            <mat-button-toggle class="webserviceAccount" matSuffix (click)="$event.stopPropagation();toggleWebserviceAccount()"
-                                [checked]="this.withWebserviceAccount" title="{{lang.displayWebserviceAccount}}" >
-                                <mat-icon fontSet="fas" fontIcon="fa-user-shield fa-2x" style="margin-left: -2px; margin-top: -4px;"></mat-icon>
-                            </mat-button-toggle>
-                        </mat-form-field>
-                    </div>
-                    <div class="col-md-6 col-xs-6">
-                        <mat-paginator #paginator [length]="100" [hidePageSize]="true" [pageSize]="10">
-                        </mat-paginator>
-                    </div>
+            <div class="bg-head-content" [class.fullContainer]="appService.getViewMode()">
+            </div>
+        </div>
+        <div class="container" [class.fullContainer]="appService.getViewMode()">
+            <div class="container-content">
+                <div *ngIf="loading" style="display:flex;height:100%;">
+                    <mat-spinner style="margin:auto;"></mat-spinner>
                 </div>
-                <mat-table #table [dataSource]="dataSource" matSort matSortActive="user_id" matSortDirection="asc">
-                    <ng-container matColumnDef="id">
-                        <mat-header-cell *matHeaderCellDef mat-sort-header [class.hide-for-mobile]="appService.getViewMode()">{{lang.technicalId}}</mat-header-cell>
-                        <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()"> {{element.id}} </mat-cell>
-                    </ng-container>
-                    <ng-container matColumnDef="user_id">
-                        <mat-header-cell *matHeaderCellDef mat-sort-header [class.hide-for-mobile]="appService.getViewMode()">{{lang.id}}</mat-header-cell>
-                        <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()"> {{element.user_id}} </mat-cell>
-                    </ng-container>
-                    <ng-container matColumnDef="lastname">
-                        <mat-header-cell *matHeaderCellDef mat-sort-header>{{lang.lastname}}</mat-header-cell>
-                        <mat-cell *matCellDef="let element"> {{element.lastname}} </mat-cell>
-                    </ng-container>
-                    <ng-container matColumnDef="firstname">
-                        <mat-header-cell *matHeaderCellDef mat-sort-header>{{lang.firstname}}</mat-header-cell>
-                        <mat-cell *matCellDef="let element"> {{element.firstname}} </mat-cell>
-                    </ng-container>
-                    <ng-container matColumnDef="status">
-                        <mat-header-cell *matHeaderCellDef mat-sort-header>{{lang.status}}</mat-header-cell>
-                        <mat-cell *matCellDef="let element">
-                            <span [ngClass]="{'statusUserLabelWarn': ['SPD','ABS'].indexOf(element.status) > -1, 'statusUserLabelPrimary': ['SPD','ABS'].indexOf(element.status) == -1}" class="label">{{lang['user'+element.status]}}</span>
-                        </mat-cell>
-                    </ng-container>
-                    <ng-container matColumnDef="mail">
-                        <mat-header-cell *matHeaderCellDef mat-sort-header [class.hide-for-mobile]="appService.getViewMode()">{{lang.email}}</mat-header-cell>
-                        <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()"> {{element.mail}} </mat-cell>
-                    </ng-container>
-                    <ng-container matColumnDef="actions">
-                        <mat-header-cell *matHeaderCellDef>
-                        </mat-header-cell>
-                        <mat-cell *matCellDef="let element" style="justify-content: flex-end;">
-                            <button mat-icon-button color="primary" [disabled]="element.user_id==user.user_id" *ngIf="element.status != 'SPD'" matTooltip="{{lang.suspend}}"
-                                (click)="$event.stopPropagation();deleteUser(element, 'suspend')">
-                                <mat-icon class="fa fa-pause fa-2x" aria-hidden="true"></mat-icon>
-                            </button>
-                            <button mat-icon-button color="accent" *ngIf="element.status == 'SPD'" matTooltip="{{lang.authorize}}" (click)="$event.stopPropagation();activateUser(element)">
-                                <mat-icon class="fa fa-check fa-2x" aria-hidden="true"></mat-icon>
-                            </button>
-                            <button mat-icon-button color="warn" [disabled]="element.user_id==user.user_id"  matTooltip="{{lang.delete}}" data-toggle="modal"
-                                data-target="#changeDiffListDest" (click)="$event.stopPropagation();deleteUser(element, 'delete')">
-                                <mat-icon class="fa fa-trash-alt fa-2x"></mat-icon>
-                            </button>
-                        </mat-cell>
-                    </ng-container>
-                    <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
-                    <mat-row *matRowDef="let row; columns: displayedColumns;" routerLink="/administration/users/{{row.id}}" style="cursor:pointer;"
-                        matTooltip="{{lang.view}}"></mat-row>
-                </mat-table>
-                <div class="mat-paginator" style="min-height:48px;min-height: 48px;display: flex;justify-content: end;align-items: center;padding-right: 20px;">{{data.length}} {{lang.usersAlt}}</div>
-            </mat-card>
-        </mat-sidenav-content>
-        <mat-sidenav #snav2 [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()" fixedTopGap="56"
-            position='end' [opened]="appService.getViewMode() ? false : false">
-        </mat-sidenav>
-    </mat-sidenav-container>
-</div>
+                <mat-card *ngIf="!loading" class="card-app-content">
+                    <div class="row">
+                        <div class="col-md-6 col-xs-6">
+                            <mat-form-field>
+                                <input matInput (keyup)="applyFilter($event.target.value)"
+                                    placeholder="{{lang.filterBy}}">
+                                <mat-button-toggle class="webserviceAccount" matSuffix
+                                    (click)="$event.stopPropagation();toggleWebserviceAccount()"
+                                    [checked]="this.withWebserviceAccount" title="{{lang.displayWebserviceAccount}}">
+                                    <mat-icon fontSet="fas" fontIcon="fa-user-shield fa-2x"
+                                        style="margin-left: -2px; margin-top: -4px;"></mat-icon>
+                                </mat-button-toggle>
+                            </mat-form-field>
+                        </div>
+                        <div class="col-md-6 col-xs-6">
+                            <mat-paginator #paginator [length]="100" [hidePageSize]="true" [pageSize]="10">
+                            </mat-paginator>
+                        </div>
+                    </div>
+                    <mat-table #table [dataSource]="dataSource" matSort matSortActive="user_id" matSortDirection="asc">
+                        <ng-container matColumnDef="id">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header
+                                [class.hide-for-mobile]="appService.getViewMode()">{{lang.technicalId}}
+                            </mat-header-cell>
+                            <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()">
+                                {{element.id}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="user_id">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header
+                                [class.hide-for-mobile]="appService.getViewMode()">{{lang.id}}</mat-header-cell>
+                            <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()">
+                                {{element.user_id}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="lastname">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header>{{lang.lastname}}</mat-header-cell>
+                            <mat-cell *matCellDef="let element"> {{element.lastname}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="firstname">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header>{{lang.firstname}}</mat-header-cell>
+                            <mat-cell *matCellDef="let element"> {{element.firstname}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="status">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header>{{lang.status}}</mat-header-cell>
+                            <mat-cell *matCellDef="let element">
+                                <span
+                                    [ngClass]="{'statusUserLabelWarn': ['SPD','ABS'].indexOf(element.status) > -1, 'statusUserLabelPrimary': ['SPD','ABS'].indexOf(element.status) == -1}"
+                                    class="label">{{lang['user'+element.status]}}</span>
+                            </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="mail">
+                            <mat-header-cell *matHeaderCellDef mat-sort-header
+                                [class.hide-for-mobile]="appService.getViewMode()">{{lang.email}}</mat-header-cell>
+                            <mat-cell *matCellDef="let element" [class.hide-for-mobile]="appService.getViewMode()">
+                                {{element.mail}} </mat-cell>
+                        </ng-container>
+                        <ng-container matColumnDef="actions">
+                            <mat-header-cell *matHeaderCellDef>
+                            </mat-header-cell>
+                            <mat-cell *matCellDef="let element" style="justify-content: flex-end;">
+                                <button mat-icon-button color="primary" [disabled]="element.user_id==user.user_id"
+                                    *ngIf="element.status != 'SPD'" matTooltip="{{lang.suspend}}"
+                                    (click)="$event.stopPropagation();deleteUser(element, 'suspend')">
+                                    <mat-icon class="fa fa-pause fa-2x" aria-hidden="true"></mat-icon>
+                                </button>
+                                <button mat-icon-button color="accent" *ngIf="element.status == 'SPD'"
+                                    matTooltip="{{lang.authorize}}"
+                                    (click)="$event.stopPropagation();activateUser(element)">
+                                    <mat-icon class="fa fa-check fa-2x" aria-hidden="true"></mat-icon>
+                                </button>
+                                <button mat-icon-button color="warn" [disabled]="element.user_id==user.user_id"
+                                    matTooltip="{{lang.delete}}" data-toggle="modal" data-target="#changeDiffListDest"
+                                    (click)="$event.stopPropagation();deleteUser(element, 'delete')">
+                                    <mat-icon class="fa fa-trash-alt fa-2x"></mat-icon>
+                                </button>
+                            </mat-cell>
+                        </ng-container>
+                        <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
+                        <mat-row *matRowDef="let row; columns: displayedColumns;"
+                            routerLink="/administration/users/{{row.id}}" style="cursor:pointer;"
+                            matTooltip="{{lang.view}}"></mat-row>
+                    </mat-table>
+                    <div class="mat-paginator"
+                        style="min-height:48px;min-height: 48px;display: flex;justify-content: end;align-items: center;padding-right: 20px;">
+                        {{data.length}} {{lang.usersAlt}}</div>
+                </mat-card>
+            </div>
+        </div>
+    </mat-sidenav-content>
+</mat-sidenav-container>
\ No newline at end of file
diff --git a/src/frontend/app/administration/user/users-administration.component.ts b/src/frontend/app/administration/user/users-administration.component.ts
index c3ee2a4c2e3..2661aa6c24c 100755
--- a/src/frontend/app/administration/user/users-administration.component.ts
+++ b/src/frontend/app/administration/user/users-administration.component.ts
@@ -71,8 +71,8 @@ export class UsersAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.administration + ' ' + this.lang.users);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.user = angularGlobals.user;
         this.loading = true;
diff --git a/src/frontend/app/administration/versionUpdate/versions-update-administration.component.ts b/src/frontend/app/administration/versionUpdate/versions-update-administration.component.ts
index 1319f5b14d8..4d5ba2906ea 100755
--- a/src/frontend/app/administration/versionUpdate/versions-update-administration.component.ts
+++ b/src/frontend/app/administration/versionUpdate/versions-update-administration.component.ts
@@ -16,7 +16,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "versions-update-administration.component.html",
     styleUrls: ['versions-update-administration.component.scss'],
-    providers: [NotificationService, AppService],
+    providers: [AppService],
 })
 export class VersionsUpdateAdministrationComponent implements OnInit {
 
@@ -42,8 +42,8 @@ export class VersionsUpdateAdministrationComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.updateVersionControl);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(null);
+        
+        this.headerService.sideNavLeft = this.sidenavLeft;
 
         this.loading = true;
 
diff --git a/src/frontend/app/app.component.html b/src/frontend/app/app.component.html
new file mode 100644
index 00000000000..c914473b148
--- /dev/null
+++ b/src/frontend/app/app.component.html
@@ -0,0 +1,15 @@
+<mat-sidenav-container class="maarch-container">
+    <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;" [ngStyle]="{'width': appService.getViewMode() ? '80%' : '350px'}">
+        <header-panel [snavLeft]="snav"></header-panel>
+        <menu-shortcut #menuShortcut></menu-shortcut>
+        <menu-nav></menu-nav>
+        <basket-home #basketHome (refreshEvent)="refreshDao()" [snavL]="snav"></basket-home>
+        <mat-divider></mat-divider>
+        <panel-folder #panelFolder (refreshEvent)="refreshDao()"></panel-folder>
+    </mat-sidenav>
+    <mat-sidenav-content>
+        <router-outlet></router-outlet>
+    </mat-sidenav-content>
+</mat-sidenav-container>
\ No newline at end of file
diff --git a/src/frontend/app/app.component.ts b/src/frontend/app/app.component.ts
index 25eb279a613..47b180ec7df 100755
--- a/src/frontend/app/app.component.ts
+++ b/src/frontend/app/app.component.ts
@@ -1,9 +1,10 @@
-import { Component, ViewEncapsulation, Testability } from '@angular/core';
+import { Component, ViewEncapsulation, ViewChild } from '@angular/core';
 import { DomSanitizer } from '@angular/platform-browser';
 import { MatIconRegistry } from '@angular/material/icon';
 import { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipDefaultOptions } from '@angular/material/tooltip';
 import { HeaderService } from '../service/header.service';
 import { AppService } from '../service/app.service';
+import { MatSidenav } from '@angular/material';
 
 /** Custom options the configure the tooltip's default show/hide delays. */
 export const myCustomTooltipDefaults: MatTooltipDefaultOptions = {
@@ -12,12 +13,11 @@ export const myCustomTooltipDefaults: MatTooltipDefaultOptions = {
     touchendHideDelay: 0,
 };
 
-declare const angularGlobals: any;
 declare function $j(selector: any): any;
 
 @Component({
     selector: 'my-app',
-    template: `<main-header></main-header><router-outlet></router-outlet>`,
+    templateUrl: 'app.component.html',
     encapsulation: ViewEncapsulation.None,
     styleUrls: [
         '../../../node_modules/bootstrap/dist/css/bootstrap.min.css',
@@ -28,14 +28,18 @@ declare function $j(selector: any): any;
     ],
     viewProviders: [MatIconRegistry],
     providers: [
+        AppService,
         {provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: myCustomTooltipDefaults}
     ],
 })
 export class AppComponent {
 
+    @ViewChild('snavLeft', { static: false }) snavLeft: MatSidenav;
+    
     constructor(
         iconReg: MatIconRegistry, 
         sanitizer: DomSanitizer, 
+        public appService: AppService,
         public headerService: HeaderService
         ) {
 
@@ -63,4 +67,15 @@ export class AppComponent {
             $j('#content h1')[0].remove();
         }
     }
+
+    ngOnInit(): void {
+        setTimeout(() => {
+            this.headerService.sideNavLeft = this.snavLeft;
+            this.headerService.defaultSideNavLeft = this.snavLeft;
+        }, 0);
+       
+        
+        this.headerService.sideNavLeft = this.snavLeft;
+        this.headerService.defaultSideNavLeft = this.snavLeft;
+    }
 }
diff --git a/src/frontend/app/basket/basket-home.component.html b/src/frontend/app/basket/basket-home.component.html
index 49fbeab794c..4dc9a627499 100755
--- a/src/frontend/app/basket/basket-home.component.html
+++ b/src/frontend/app/basket/basket-home.component.html
@@ -42,7 +42,7 @@
                         </p>
                     </a>
                     <a mat-list-item
-                        [ngClass]="{'selectedBasket': currentBasketInfo.basketId == basket.id && currentBasketInfo.ownerId == basket.owner_user_id && currentBasketInfo.groupId == regroupedBasket.groupSerialId}"
+                        [ngClass]="{'selectedBasket': headerService.currentBasketInfo.basketId == basket.id && headerService.currentBasketInfo.ownerId == basket.owner_user_id && headerService.currentBasketInfo.groupId == regroupedBasket.groupSerialId}"
                         *ngIf="!basket.redirected" (click)="refreshDatas(basket);closePanelLeft();"
                         routerLink="/basketList/users/{{basket.owner_user_id}}/groups/{{regroupedBasket.groupSerialId}}/baskets/{{basket.id}}"
                         style="cursor:pointer;"
@@ -63,7 +63,7 @@
             <mat-nav-list>
                 <a mat-list-item
                     *ngFor="let basket of homeData.assignedBaskets | filterList:listFilter.value:'basket_name'"
-                    [ngClass]="{'selectedBasket': currentBasketInfo.basketId==basket.id && currentBasketInfo.ownerId==basket.owner_user_id && currentBasketInfo.groupId==basket.group_id}"
+                    [ngClass]="{'selectedBasket': headerService.currentBasketInfo.basketId==basket.id && headerService.currentBasketInfo.ownerId==basket.owner_user_id && headerService.currentBasketInfo.groupId==basket.group_id}"
                     routerLink="/basketList/users/{{basket.owner_user_id}}/groups/{{basket.group_id}}/baskets/{{basket.id}}">
                     <mat-icon *ngIf="!appService.getViewMode()" style="color:#666" mat-list-icon
                         class="fa fa-paper-plane"></mat-icon>
diff --git a/src/frontend/app/basket/basket-home.component.ts b/src/frontend/app/basket/basket-home.component.ts
index a913568e378..5b0dc74fe42 100755
--- a/src/frontend/app/basket/basket-home.component.ts
+++ b/src/frontend/app/basket/basket-home.component.ts
@@ -5,8 +5,10 @@ import { MatSidenav } from '@angular/material/sidenav';
 import { AppService } from '../../service/app.service';
 import { tap, finalize, catchError } from 'rxjs/operators';
 import { MatExpansionPanel } from '@angular/material';
-import { of } from 'rxjs';
+import { of, Subscription } from 'rxjs';
 import { NotificationService } from '../notification.service';
+import { HeaderService } from '../../service/header.service';
+import { ActionsService } from '../actions/actions.service';
 
 declare function $j(selector: any) : any;
 
@@ -31,18 +33,30 @@ export class BasketHomeComponent implements OnInit {
     @Output('refreshEvent') refreshEvent = new EventEmitter<string>();
     @ViewChild('basketPanel', { static: true }) basketPanel: MatExpansionPanel;
     editOrderGroups: boolean = false;
+    subscription: Subscription;
 
     constructor(
         public http: HttpClient,
         public appService: AppService,
-        private notify: NotificationService
+        public headerService: HeaderService,
+        private notify: NotificationService,
+        public actionService: ActionsService,
     ) {
+
+        this.subscription = this.actionService.catchAction().subscribe(message => {
+            this.refreshBasketHome();
+        });
     }
 
     ngOnInit(): void {
         this.getMyBaskets();
     }
 
+    ngOnDestroy() {
+        // unsubscribe to ensure no memory leaks
+        this.subscription.unsubscribe();
+    }
+
     getMyBaskets() {
         this.loading = true;
 
diff --git a/src/frontend/app/folder/document-list/folder-document-list.component.html b/src/frontend/app/folder/document-list/folder-document-list.component.html
index 99571606166..7aacbe4ffce 100644
--- a/src/frontend/app/folder/document-list/folder-document-list.component.html
+++ b/src/frontend/app/folder/document-list/folder-document-list.component.html
@@ -1,15 +1,4 @@
 <mat-sidenav-container class="maarch-container">
-    <mat-sidenav #snavLeft class="panel-left" #snav [mode]="appService.getViewMode() ? 'over' : 'side'"
-        [fixedInViewport]="appService.getViewMode()" [opened]="appService.getViewMode() ? false : true"
-        autoFocus="false" style="overflow-x:hidden;" [ngStyle]="{'width': appService.getViewMode() ? '80%' : '350px'}">
-        <header-panel [snavLeft]="snav"></header-panel>
-        <menu-shortcut #menuShortcut></menu-shortcut>
-        <menu-nav></menu-nav>
-        <basket-home #basketHome [snavL]="snav"></basket-home>
-        <mat-divider></mat-divider>
-        <panel-folder #panelFolder *ngIf="folderInfo.id !== '' && folderInfo.id !== undefined"
-            [selectedId]="folderInfo.id" [showTree]="true"></panel-folder>
-    </mat-sidenav>
     <mat-sidenav-content>
         <mat-card id="viewThumbnail" style="display:none;position: fixed;z-index: 2;margin-left: 1px;">
             <img style="max-height: 100vh;" src="{{thumbnailUrl}}" />
diff --git a/src/frontend/app/folder/document-list/folder-document-list.component.ts b/src/frontend/app/folder/document-list/folder-document-list.component.ts
index 9d52d42feef..b9c1713bd31 100644
--- a/src/frontend/app/folder/document-list/folder-document-list.component.ts
+++ b/src/frontend/app/folder/document-list/folder-document-list.component.ts
@@ -55,7 +55,6 @@ export class FolderDocumentListComponent implements OnInit {
 
     dialogRef: MatDialogRef<any>;
 
-    @ViewChild('snav', { static: true }) sidenavLeft: MatSidenav;
     @ViewChild('snav2', { static: true }) sidenavRight: MatSidenav;
 
     displayedColumnsBasket: string[] = ['resId'];
@@ -167,17 +166,12 @@ export class FolderDocumentListComponent implements OnInit {
                         };
                     this.foldersService.setFolder(this.folderInfo);
                     this.headerService.setHeader(this.folderInfo.label, '', 'fa fa-folder-open');
-                    setTimeout(() => {
-                        this.basketHome.togglePanel(false);
-                    }, 200);
 
                 });
             this.basketUrl = '../../rest/folders/' + params['folderId'] + '/resources';
             this.filtersListService.filterMode = false;
             this.selectedRes = [];
             this.sidenavRight.close();
-            window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-            window['MainHeaderComponent'].setSnavRight(null);
 
             this.listProperties = this.filtersListService.initListsProperties(this.headerService.user.id, 0, params['folderId'], 'folder');
 
diff --git a/src/frontend/app/folder/folder-action-list/folder-action-list.component.html b/src/frontend/app/folder/folder-action-list/folder-action-list.component.html
index 8c3ceee1617..700eb239dee 100644
--- a/src/frontend/app/folder/folder-action-list/folder-action-list.component.html
+++ b/src/frontend/app/folder/folder-action-list/folder-action-list.component.html
@@ -1,7 +1,7 @@
 <button *ngIf="!contextMode" mat-stroked-button [matMenuTriggerFor]="menu">{{lang.actionsAlt}}<mat-icon matSuffix
         class="fa fa-caret-down"></mat-icon>
 </button>
-<span *ngIf="contextMode" [matMenuTriggerFor]="menu" #menu2 style="position: absolute;"
+<span *ngIf="contextMode" [matMenuTriggerFor]="menu" #menu2 style="position: fixed;"
     [style.left]="contextMenuPosition.x" [style.top]="contextMenuPosition.y"></span>
 
 <mat-menu #menu="matMenu" [class]="'actionListMenu'">
diff --git a/src/frontend/app/folder/panel/panel-folder.component.ts b/src/frontend/app/folder/panel/panel-folder.component.ts
index db6a4bff9fb..0dd2e47d79a 100644
--- a/src/frontend/app/folder/panel/panel-folder.component.ts
+++ b/src/frontend/app/folder/panel/panel-folder.component.ts
@@ -2,6 +2,9 @@ import { Component, OnInit, Input, ViewChild, Output, EventEmitter } from '@angu
 import { LANG } from '../../translate.component';
 import { FolderTreeComponent } from '../folder-tree.component';
 import { FoldersService } from '../folders.service';
+import { HeaderService } from '../../../service/header.service';
+import { ActionsService } from '../../actions/actions.service';
+import { Subscription } from 'rxjs';
 
 declare function $j(selector: any): any;
 
@@ -19,11 +22,25 @@ export class PanelFolderComponent implements OnInit {
     @ViewChild('folderTree', { static: false }) folderTree: FolderTreeComponent;
     
     @Output('refreshEvent') refreshEvent = new EventEmitter<string>();
+
+    subscription: Subscription;
     
-    constructor(public foldersService: FoldersService) { }
+    constructor(
+        public foldersService: FoldersService,
+        public actionService: ActionsService,
+        ) {
+        this.subscription = this.actionService.catchAction().subscribe(message => {
+            this.refreshFoldersTree();
+        });
+    }
 
     ngOnInit(): void { }
 
+    ngOnDestroy() {
+        // unsubscribe to ensure no memory leaks
+        this.subscription.unsubscribe();
+    }
+
     initTree() {
         this.folderTree.openTree(this.id);
     }
diff --git a/src/frontend/app/header/header-left.component.html b/src/frontend/app/header/header-left.component.html
index a7346f9ae18..c69bdd68a8c 100644
--- a/src/frontend/app/header/header-left.component.html
+++ b/src/frontend/app/header/header-left.component.html
@@ -1,5 +1,5 @@
-<div class="bg-head-title-label">
-    <button *ngIf="!snavLeft.opened" mat-icon-button (click)="snavLeft.open()" style="font-size:20px;">
+<div class="bg-head-title-label" *ngIf="headerService.sideNavLeft !== undefined">
+    <button *ngIf="!headerService.sideNavLeft.opened" mat-icon-button (click)="headerService.sideNavLeft.open()" style="font-size:20px;">
         <mat-icon class="fa fa-stream"></mat-icon>
     </button>
     <i *ngIf="headerService.headerMessageIcon !== ''" class="{{headerService.headerMessageIcon}} headerIcon"></i> {{headerService.headerMessage}} <span class="admin-toolbar-title-small">{{headerService.subHeaderMessage}}</span>
diff --git a/src/frontend/app/header/header-panel.component.html b/src/frontend/app/header/header-panel.component.html
index d47710379a6..151e240739e 100644
--- a/src/frontend/app/header/header-panel.component.html
+++ b/src/frontend/app/header/header-panel.component.html
@@ -11,7 +11,7 @@
         </button>
     </div>
     <div class="panelHeader-button">
-        <button mat-icon-button (click)="snavLeft.close()">
+        <button mat-icon-button (click)="headerService.sideNavLeft.close()">
             <mat-icon fontSet="fas" fontIcon="fa-stream" style="transform: rotate(180deg);"></mat-icon>
         </button>
     </div>
diff --git a/src/frontend/app/home/followed-action-list/followed-action-list.component.html b/src/frontend/app/home/followed-action-list/followed-action-list.component.html
index 880b77b3fe3..001e268eb07 100644
--- a/src/frontend/app/home/followed-action-list/followed-action-list.component.html
+++ b/src/frontend/app/home/followed-action-list/followed-action-list.component.html
@@ -1,7 +1,7 @@
 <button *ngIf="!contextMode" mat-stroked-button [matMenuTriggerFor]="menu">{{lang.actionsAlt}}<mat-icon matSuffix
         class="fa fa-caret-down"></mat-icon>
 </button>
-<span *ngIf="contextMode" [matMenuTriggerFor]="menu" #menu2 style="position: absolute;"
+<span *ngIf="contextMode" [matMenuTriggerFor]="menu" #menu2 style="position: fixed;"
     [style.left]="contextMenuPosition.x" [style.top]="contextMenuPosition.y"></span>
 
 <mat-menu #menu="matMenu" [class]="'actionListMenu'">
diff --git a/src/frontend/app/home/followed-list/followed-document-list.component.html b/src/frontend/app/home/followed-list/followed-document-list.component.html
index 21ec99516ba..5e6c76da912 100644
--- a/src/frontend/app/home/followed-list/followed-document-list.component.html
+++ b/src/frontend/app/home/followed-list/followed-document-list.component.html
@@ -1,15 +1,4 @@
 <mat-sidenav-container class="maarch-container">
-    <mat-sidenav #snavLeft class="panel-left" #snav [mode]="appService.getViewMode() ? 'over' : 'side'"
-        [fixedInViewport]="appService.getViewMode()" [opened]="appService.getViewMode() ? false : true"
-        autoFocus="false" style="overflow-x:hidden;" [ngStyle]="{'width': appService.getViewMode() ? '80%' : '350px'}">
-        <header-panel [snavLeft]="snav"></header-panel>
-        <menu-shortcut #menuShortcut></menu-shortcut>
-        <menu-nav></menu-nav>
-        <basket-home #basketHome [snavL]="snav"></basket-home>
-        <mat-divider></mat-divider>
-        <panel-folder #panelFolder *ngIf="folderInfo.id !== '' && folderInfo.id !== undefined"
-            [selectedId]="folderInfo.id" [showTree]="false"></panel-folder>
-    </mat-sidenav>
     <mat-sidenav-content>
         <mat-card id="viewThumbnail" style="display:none;position: fixed;z-index: 2;margin-left: 1px;">
             <img style="max-height: 100vh;" src="{{thumbnailUrl}}" />
diff --git a/src/frontend/app/home/followed-list/followed-document-list.component.ts b/src/frontend/app/home/followed-list/followed-document-list.component.ts
index 23e320c418f..cb16dcb7d0d 100644
--- a/src/frontend/app/home/followed-list/followed-document-list.component.ts
+++ b/src/frontend/app/home/followed-list/followed-document-list.component.ts
@@ -54,7 +54,6 @@ export class FollowedDocumentListComponent implements OnInit {
 
     dialogRef: MatDialogRef<any>;
 
-    @ViewChild('snav', { static: true }) sidenavLeft: MatSidenav;
     @ViewChild('snav2', { static: true }) sidenavRight: MatSidenav;
 
     displayedColumnsBasket: string[] = ['resId'];
@@ -141,8 +140,6 @@ export class FollowedDocumentListComponent implements OnInit {
             this.filtersListService.filterMode = false;
             this.selectedRes = [];
 
-            window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-            window['MainHeaderComponent'].setSnavRight(null);
 
             this.listProperties = this.filtersListService.initListsProperties(this.headerService.user.id, 0, null, 'followed');
 
diff --git a/src/frontend/app/home/home.component.html b/src/frontend/app/home/home.component.html
index 3f8c1e2893f..56c8741c498 100644
--- a/src/frontend/app/home/home.component.html
+++ b/src/frontend/app/home/home.component.html
@@ -1,136 +1,117 @@
-<mat-sidenav-container class="maarch-container">
-    <mat-sidenav #snavLeft class="panel-left" #snav [mode]="appService.getViewMode() ? 'over' : 'side'"
-        [fixedInViewport]="appService.getViewMode()" [opened]="appService.getViewMode() ? false : true" autoFocus="false" style="overflow-x:hidden;"
-        [ngStyle]="{'width': appService.getViewMode() ? '80%' : '350px'}">
-        <header-panel [snavLeft]="snav"></header-panel>
-        <menu-shortcut></menu-shortcut>
-        <menu-nav></menu-nav>
-        <basket-home #basketHome [snavL]="snav"></basket-home>
-        <mat-divider></mat-divider>
-        <panel-folder></panel-folder>
-    </mat-sidenav>
-    <mat-sidenav-content>
-        <mat-card id="viewThumbnail" style="display:none;position: fixed;z-index: 2;margin-left: 1px;"><img
-                style="max-height: 100vh;" src="{{thumbnailUrl}}" />
-        </mat-card>
-        <div class="bg-head">
-            <div class="bg-head-title" [class.customContainerRight]="appService.getViewMode()">
-                <div class="bg-head-title-label">
-                    <header-left [snavLeft]="snav"></header-left>
-                </div>
-                <div class="bg-head-title-tool">
-                    <header-right></header-right>
+<mat-card id="viewThumbnail" style="display:none;position: fixed;z-index: 2;margin-left: 1px;"><img
+        style="max-height: 100vh;" src="{{thumbnailUrl}}" />
+</mat-card>
+<div class="bg-head">
+    <div class="bg-head-title" [class.customContainerRight]="appService.getViewMode()">
+        <div class="bg-head-title-label">
+            <header-left></header-left>
+        </div>
+        <div class="bg-head-title-tool">
+            <header-right></header-right>
+        </div>
+    </div>
+    <div class="bg-head-content" [class.fullContainer]="appService.getViewMode()">
+        <mat-card *ngIf="homeMessage"
+            style="background: #135F7F;color: white;box-shadow: none;border: solid 2px white;width: 100%;border-radius: 20px;padding-bottom: 40px;">
+            <div style="display: flex;max-height: 250px;overflow: auto;">
+                <div style="padding-left: 10px;">
+                    <span [innerHTML]="homeMessage"></span>
                 </div>
             </div>
-            <div class="bg-head-content" [class.fullContainer]="appService.getViewMode()">
-                <mat-card *ngIf="homeMessage"
-                    style="background: #135F7F;color: white;box-shadow: none;border: solid 2px white;width: 100%;border-radius: 20px;padding-bottom: 40px;">
-                    <div style="display: flex;max-height: 250px;overflow: auto;">
-                        <div style="padding-left: 10px;">
-                            <span [innerHTML]="homeMessage"></span>
-                        </div>
-                    </div>
-                    <div style="text-align: right;opacity: 0.5;">
-                        <button mat-button routerLink="/about-us"
-                            style="position:absolute;font-size:10px;right: 0px;bottom: 0px;">{{lang.aboutUs}}</button>
-                    </div>
-                </mat-card>
+            <div style="text-align: right;opacity: 0.5;">
+                <button mat-button routerLink="/about-us"
+                    style="position:absolute;font-size:10px;right: 0px;bottom: 0px;">{{lang.aboutUs}}</button>
             </div>
-        </div>
-        <div class="container" [class.fullContainer]="appService.getViewMode()">
-            <div class="container-content">
-                <mat-tab-group>
-                    <mat-tab *ngIf="homeData !== undefined && homeData.isLinkedToMaarchParapheur">
-                        <ng-template matTabLabel>
-                            <span [class.noDoc]="nbMpDocs === 0" matBadge="{{nbMpDocs}}" matBadgeOverlap="false">{{lang.maarchParapheurDocuments}}</span>
-                        </ng-template>
-                        <app-maarch-parapheur-list (triggerEvent)="updateNbMpDocs($event)"></app-maarch-parapheur-list>
-                    </mat-tab>
-                    <mat-tab label="{{lang.myLastResources}}" *ngIf="homeData !== undefined">
-                        <div *ngIf="loading" style="display:flex;height:100%;">
-                            <mat-spinner style="margin:auto;"></mat-spinner>
-                        </div>
-                        <table *ngIf="!loading" mat-table [dataSource]="dataSource" matSort matSortActive="res_id"
-                            matSortDisableClear matSortDirection="asc" style="width:100%;table-layout: fixed;">
-                            <!-- Number Column -->
-                            <ng-container matColumnDef="res_id">
-                                <td class="first_col" mat-cell *matCellDef="let row" [ngStyle]="{'width': appService.getViewMode() ? '30%' : '15%'}">
-                                    <div *ngIf="row.closing_date == null && appService.getViewMode()"
-                                        id="{{row.res_id}}_creation_date"
-                                        style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;"
-                                        title='{{row.creation_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'>
-                                        <i class="fa fa-calendar" title="{{lang.creationDate}}"></i>
-                                        {{row.creation_date | timeAgo}}
-                                    </div>
-                                    <div style="overflow: hidden;text-overflow: ellipsis;">
-                                        <mat-icon [ngStyle]="{'color': row.priority_color}" color="primary"
-                                            class="{{row.status_icon.charAt(0)}}{{row.status_icon.charAt(1)}} {{row.status_icon}} {{row.status_icon.charAt(0)}}{{row.status_icon.charAt(1)}}-2x"
-                                            title="{{row.status_label}} ({{row.status_id}})"></mat-icon>
-                                        <span *ngIf="row.confidentiality === 'Y'" class="watermark">{{lang.confidential}}</span>
-                                    </div>
-                                    <div style="padding-top: 5px;color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;"
-                                        title="{{row.alt_identifier}} (n°{{row.res_id}})">
-                                        {{row.alt_identifier}}
-                                    </div>
-                                </td>
-                            </ng-container>
-                            <ng-container matColumnDef="subject">
-                                <td mat-cell *matCellDef="let row"
-                                    style="width:45%;overflow:hidden;text-overflow: ellipsis;padding: 5px;vertical-align: middle;">
-                                    <div *ngIf="row.closing_date == null && appService.getViewMode()"
-                                        style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;text-align: right;">
-                                        <i class="fa fa-stopwatch" title="{{lang.processLimitDate}}"></i>&nbsp;
-                                        <span [innerHTML]="row.process_limit_date | timeLimit"
-                                            title='{{row.process_limit_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'></span>
-                                    </div>
-                                    <div style="overflow: hidden;line-height: 1.5em;height: 3em;overflow: hidden;"
-                                        title="{{row.subject}}">
-                                        <span>{{row.subject}}</span>
-                                    </div>
-                                </td>
-                            </ng-container>
-                            <ng-container matColumnDef="creation_date">
-                                <td mat-cell *matCellDef="let row"
-                                    style="text-align: right;width:15%;overflow:hidden;text-overflow: ellipsis;white-space: nowrap;padding: 5px;vertical-align: middle;">
-                                    <div *ngIf="row.closing_date == null" id="{{row.res_id}}_creation_date"
-                                        style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;"
-                                        title='{{row.creation_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'>
-                                        <i class="fa fa-calendar" title="{{lang.creationDate}}"></i>
-                                        {{row.creation_date | timeAgo}}
-                                    </div>
-                                    <div *ngIf="row.closing_date == null"
-                                        style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;">
-                                        <i class="fa fa-stopwatch" title="{{lang.processLimitDate}}"></i>&nbsp;
-                                        <span [innerHTML]="row.process_limit_date | timeLimit"
-                                            title='{{row.process_limit_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'></span>
-                                    </div>
-                                    <div *ngIf="row.closing_date != null"
-                                        style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;">
-                                        <i class="fa fa-lock" title="{{lang.closingDate}}"></i>&nbsp;
-                                        <span
-                                            title='{{row.closing_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'>{{row.closing_date | timeAgo}}</span>
-                                    </div>
-                                    <div>
-                                        <button mat-icon-button (click)="$event.stopPropagation();viewDocument(row);"
-                                            (mouseenter)="viewThumbnail(row);" (mouseleave)="closeThumbnail();">
-                                            <mat-icon color="primary" class="fa fa-eye"></mat-icon>
-                                        </button>
-                                    </div>
-                                </td>
-                            </ng-container>
-                            <tr mat-row *matRowDef="let row; columns: displayedColumns;" (click)="goToDetail(row);"
-                                style="cursor:pointer;"></tr>
-                        </table>
-                    </mat-tab>
-                </mat-tab-group>
-            </div>
-        </div>
-    </mat-sidenav-content>
-    <mat-sidenav #snav2 [fixedInViewport]="appService.getViewMode()" position='end'
-        [opened]="appService.getViewMode() ? false : false" [mode]="appService.getViewMode() ? 'over' : 'side'" class="panel-right"
-        style="overflow-x:hidden;" [ngStyle]="{'width': appService.getViewMode() ? '80%' : '30%'}" autoFocus="false">
-        <pdf-viewer [src]="docUrl" [render-text]="true" [autoresize]="true" [original-size]="false" [show-all]="true">
-        </pdf-viewer>
-        <!-- <div *ngIf="innerHtml" [innerHTML]="innerHtml" style="height: 100%;overflow: hidden;"></div> -->
-    </mat-sidenav>
-</mat-sidenav-container>
+        </mat-card>
+    </div>
+</div>
+<div class="container" [class.fullContainer]="appService.getViewMode()">
+    <div class="container-content">
+        <mat-tab-group>
+            <mat-tab *ngIf="homeData !== undefined && homeData.isLinkedToMaarchParapheur">
+                <ng-template matTabLabel>
+                    <span [class.noDoc]="nbMpDocs === 0" matBadge="{{nbMpDocs}}"
+                        matBadgeOverlap="false">{{lang.maarchParapheurDocuments}}</span>
+                </ng-template>
+                <app-maarch-parapheur-list (triggerEvent)="updateNbMpDocs($event)"></app-maarch-parapheur-list>
+            </mat-tab>
+            <mat-tab label="{{lang.myLastResources}}" *ngIf="homeData !== undefined">
+                <div *ngIf="loading" style="display:flex;height:100%;">
+                    <mat-spinner style="margin:auto;"></mat-spinner>
+                </div>
+                <table *ngIf="!loading" mat-table [dataSource]="dataSource" matSort matSortActive="res_id"
+                    matSortDisableClear matSortDirection="asc" style="width:100%;table-layout: fixed;">
+                    <!-- Number Column -->
+                    <ng-container matColumnDef="res_id">
+                        <td class="first_col" mat-cell *matCellDef="let row"
+                            [ngStyle]="{'width': appService.getViewMode() ? '30%' : '15%'}">
+                            <div *ngIf="row.closing_date == null && appService.getViewMode()"
+                                id="{{row.res_id}}_creation_date"
+                                style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;"
+                                title='{{row.creation_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'>
+                                <i class="fa fa-calendar" title="{{lang.creationDate}}"></i>
+                                {{row.creation_date | timeAgo}}
+                            </div>
+                            <div style="overflow: hidden;text-overflow: ellipsis;">
+                                <mat-icon [ngStyle]="{'color': row.priority_color}" color="primary"
+                                    class="{{row.status_icon.charAt(0)}}{{row.status_icon.charAt(1)}} {{row.status_icon}} {{row.status_icon.charAt(0)}}{{row.status_icon.charAt(1)}}-2x"
+                                    title="{{row.status_label}} ({{row.status_id}})"></mat-icon>
+                                <span *ngIf="row.confidentiality === 'Y'" class="watermark">{{lang.confidential}}</span>
+                            </div>
+                            <div style="padding-top: 5px;color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;"
+                                title="{{row.alt_identifier}} (n°{{row.res_id}})">
+                                {{row.alt_identifier}}
+                            </div>
+                        </td>
+                    </ng-container>
+                    <ng-container matColumnDef="subject">
+                        <td mat-cell *matCellDef="let row"
+                            style="width:45%;overflow:hidden;text-overflow: ellipsis;padding: 5px;vertical-align: middle;">
+                            <div *ngIf="row.closing_date == null && appService.getViewMode()"
+                                style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;text-align: right;">
+                                <i class="fa fa-stopwatch" title="{{lang.processLimitDate}}"></i>&nbsp;
+                                <span [innerHTML]="row.process_limit_date | timeLimit"
+                                    title='{{row.process_limit_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'></span>
+                            </div>
+                            <div style="overflow: hidden;line-height: 1.5em;height: 3em;overflow: hidden;"
+                                title="{{row.subject}}">
+                                <span>{{row.subject}}</span>
+                            </div>
+                        </td>
+                    </ng-container>
+                    <ng-container matColumnDef="creation_date">
+                        <td mat-cell *matCellDef="let row"
+                            style="text-align: right;width:15%;overflow:hidden;text-overflow: ellipsis;white-space: nowrap;padding: 5px;vertical-align: middle;">
+                            <div *ngIf="row.closing_date == null" id="{{row.res_id}}_creation_date"
+                                style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;"
+                                title='{{row.creation_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'>
+                                <i class="fa fa-calendar" title="{{lang.creationDate}}"></i>
+                                {{row.creation_date | timeAgo}}
+                            </div>
+                            <div *ngIf="row.closing_date == null"
+                                style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;">
+                                <i class="fa fa-stopwatch" title="{{lang.processLimitDate}}"></i>&nbsp;
+                                <span [innerHTML]="row.process_limit_date | timeLimit"
+                                    title='{{row.process_limit_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'></span>
+                            </div>
+                            <div *ngIf="row.closing_date != null"
+                                style="color: rgba(0,0,0,0.4);font-size: 90%;overflow: hidden;text-overflow: ellipsis;">
+                                <i class="fa fa-lock" title="{{lang.closingDate}}"></i>&nbsp;
+                                <span
+                                    title='{{row.closing_date | date : lang.onRange + " dd/MM/y " + lang.atRange +" HH:mm"}}'>{{row.closing_date | timeAgo}}</span>
+                            </div>
+                            <div>
+                                <button mat-icon-button (click)="$event.stopPropagation();viewDocument(row);"
+                                    (mouseenter)="viewThumbnail(row);" (mouseleave)="closeThumbnail();">
+                                    <mat-icon color="primary" class="fa fa-eye"></mat-icon>
+                                </button>
+                            </div>
+                        </td>
+                    </ng-container>
+                    <tr mat-row *matRowDef="let row; columns: displayedColumns;" (click)="goToDetail(row);"
+                        style="cursor:pointer;"></tr>
+                </table>
+            </mat-tab>
+        </mat-tab-group>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/frontend/app/home/home.component.ts b/src/frontend/app/home/home.component.ts
index 179bf287961..a624075450a 100644
--- a/src/frontend/app/home/home.component.ts
+++ b/src/frontend/app/home/home.component.ts
@@ -16,7 +16,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "home.component.html",
     styleUrls: ['home.component.scss'],
-    providers: [NotificationService, AppService]
+    providers: [AppService]
 })
 export class HomeComponent implements OnInit {
 
@@ -35,8 +35,6 @@ export class HomeComponent implements OnInit {
     public innerHtml    : SafeHtml;
     displayedColumns    : string[] = ['res_id', 'subject', 'creation_date'];
 
-    @ViewChild('snav', { static: true }) snav: MatSidenav;
-    @ViewChild('snav2', { static: true }) sidenavRight: MatSidenav;
     @ViewChildren(MatExpansionPanel) viewPanels: QueryList<MatExpansionPanel>;
 
     constructor(
@@ -58,8 +56,6 @@ export class HomeComponent implements OnInit {
             this.displayedColumns = ['res_id', 'subject'];
         }
         this.headerService.setHeader(this.lang.home);
-        window['MainHeaderComponent'].setSnav(this.snav);
-        window['MainHeaderComponent'].setSnavRight(null);
 
         let event = new Date();
         let options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
diff --git a/src/frontend/app/indexation/indexation.component.ts b/src/frontend/app/indexation/indexation.component.ts
index 1dbff7fa7de..4a391549948 100644
--- a/src/frontend/app/indexation/indexation.component.ts
+++ b/src/frontend/app/indexation/indexation.component.ts
@@ -85,8 +85,8 @@ export class IndexationComponent implements OnInit {
         // Event after process action 
         this.subscription = this.actionService.catchAction().subscribe(resIds => {
             const param = this.isMailing ? {
-                isMailing : true
-            } : null;         
+                isMailing: true
+            } : null;
             this.router.navigate([`/resources/${resIds[0]}`], { queryParams: param });
         });
     }
@@ -95,6 +95,8 @@ export class IndexationComponent implements OnInit {
         // Use to clean data after navigate on same url
         this._activatedRoute.queryParamMap.subscribe((paramMap: ParamMap) => {
             const refresh = paramMap.get('refresh');
+            this.headerService.sideNavLeft.close();
+            this.headerService.sideNavLeft = this.sidenavLeft;
             if (refresh) {
                 this.appDocumentViewer.templateListForm.reset();
                 this.appDocumentViewer.file = {
@@ -188,7 +190,7 @@ export class IndexationComponent implements OnInit {
     onSubmit() {
         if (this.indexingForm.isValidForm()) {
             const formatdatas = this.formatDatas(this.indexingForm.getDatas());
-            
+
             formatdatas['modelId'] = this.currentIndexingModel.master !== null ? this.currentIndexingModel.master : this.currentIndexingModel.id;
             formatdatas['chrono'] = true;
 
diff --git a/src/frontend/app/list/basket-list.component.html b/src/frontend/app/list/basket-list.component.html
index 6e1ca1a8597..0a98ce92ea5 100644
--- a/src/frontend/app/list/basket-list.component.html
+++ b/src/frontend/app/list/basket-list.component.html
@@ -1,15 +1,4 @@
     <mat-sidenav-container class="maarch-container">
-        <mat-sidenav #snavLeft class="panel-left" #snav [mode]="appService.getViewMode() ? 'over' : 'side'"
-            [fixedInViewport]="appService.getViewMode()" [opened]="appService.getViewMode() ? false : true" autoFocus="false"
-            style="overflow-x:hidden;" [ngStyle]="{'width': appService.getViewMode() ? '80%' : '350px'}">
-            <header-panel [snavLeft]="snav"></header-panel>
-            <menu-shortcut #menuShortcut></menu-shortcut>
-            <menu-nav></menu-nav>
-            <basket-home #basketHome (refreshEvent)="refreshDao()" [snavL]="snav"
-                [currentBasketInfo]="currentBasketInfo"></basket-home>
-            <mat-divider></mat-divider>
-            <panel-folder #panelFolder (refreshEvent)="refreshDao()"></panel-folder>
-        </mat-sidenav>
         <mat-sidenav-content>
             <mat-card id="viewThumbnail" style="display:none;position: fixed;z-index: 2;margin-left: 1px;"><img style="max-height: 100vh;" src="{{thumbnailUrl}}" /></mat-card>
             <div class="bg-head">
diff --git a/src/frontend/app/list/basket-list.component.ts b/src/frontend/app/list/basket-list.component.ts
index b1da70195f7..31ef8e53cdc 100755
--- a/src/frontend/app/list/basket-list.component.ts
+++ b/src/frontend/app/list/basket-list.component.ts
@@ -31,7 +31,7 @@ declare function $j(selector: any): any;
 @Component({
     templateUrl: "basket-list.component.html",
     styleUrls: ['basket-list.component.scss'],
-    providers: [NotificationService, AppService],
+    providers: [AppService],
 })
 export class BasketListComponent implements OnInit {
 
@@ -52,7 +52,6 @@ export class BasketListComponent implements OnInit {
 
     dragInit: boolean = true;
 
-    @ViewChild('snav', { static: true }) sidenavLeft: MatSidenav;
     @ViewChild('snav2', { static: true }) sidenavRight: MatSidenav;
 
     displayedColumnsBasket: string[] = ['resId'];
@@ -98,8 +97,6 @@ export class BasketListComponent implements OnInit {
     @ViewChild('actionsListContext', { static: true }) actionsList: ActionsListComponent;
     @ViewChild('filtersTool', { static: true }) filtersTool: FiltersToolComponent;
     @ViewChild('appPanelList', { static: true }) appPanelList: PanelListComponent;
-    @ViewChild('basketHome', { static: true }) basketHome: BasketHomeComponent;
-    @ViewChild('panelFolder', { static: true }) panelFolder: PanelFolderComponent;
 
     currentSelectedChrono: string = '';
 
@@ -133,7 +130,6 @@ export class BasketListComponent implements OnInit {
         });
         this.subscription2 = this.actionService.catchAction().subscribe((message: any) => {
             this.refreshDaoAfterAction();
-            this.panelFolder.refreshFoldersTree();
         });
 
         $j("link[href='merged_css.php']").remove();
@@ -156,11 +152,11 @@ export class BasketListComponent implements OnInit {
                 groupId: params['groupSerialId'],
                 basketId: params['basketId']
             };
+            this.headerService.currentBasketInfo =  this.currentBasketInfo;
+            
             this.filtersListService.filterMode = false;
             this.selectedRes = [];
             this.sidenavRight.close();
-            window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-            window['MainHeaderComponent'].setSnavRight(null);
 
             this.listProperties = this.filtersListService.initListsProperties(this.currentBasketInfo.ownerId, this.currentBasketInfo.groupId, this.currentBasketInfo.basketId, 'basket', this.specificChrono);
 
@@ -273,7 +269,6 @@ export class BasketListComponent implements OnInit {
     refreshDaoAfterAction() {
         this.sidenavRight.close();
         this.refreshDao();
-        this.basketHome.refreshBasketHome();
         const e: any = { checked: false };
         this.toggleAllRes(e);
     }
diff --git a/src/frontend/app/menu/menu-shortcut.component.html b/src/frontend/app/menu/menu-shortcut.component.html
index 32ad6bad06f..d6b29fbfaca 100755
--- a/src/frontend/app/menu/menu-shortcut.component.html
+++ b/src/frontend/app/menu/menu-shortcut.component.html
@@ -2,7 +2,7 @@
 </mat-nav-list>
 <mat-nav-list>
     <div class="button-row" style="padding-left: 10px;padding-right: 10px;display: flex;width: 300px;margin-top: -10px;margin-bottom: 10px;">
-        <ng-container *ngFor="let shortcut of shortcuts">
+        <ng-container *ngFor="let shortcut of privilegeService.shortcuts">
             <span style="flex:1;text-align: left;padding: 5px;" *ngIf="(shortcut.id == 'indexing' && shortcut.groups.length<=1) || (shortcut.id != 'indexing')">
                 <button style="z-index: 9999;" color="default" mat-fab (click)="gotToMenu(shortcut);" matTooltip="{{shortcut.label}}"
                     matTooltipPosition="above">
diff --git a/src/frontend/app/menu/menu-shortcut.component.ts b/src/frontend/app/menu/menu-shortcut.component.ts
index 67a69145f8a..ebc7131f687 100755
--- a/src/frontend/app/menu/menu-shortcut.component.ts
+++ b/src/frontend/app/menu/menu-shortcut.component.ts
@@ -1,4 +1,4 @@
-import { Component, OnInit, Inject } from '@angular/core';
+import { Component, OnInit, Inject, ChangeDetectionStrategy } from '@angular/core';
 import { Router } from '@angular/router';
 import { HttpClient } from '@angular/common/http';
 import { LANG } from '../translate.component';
@@ -35,13 +35,8 @@ export class MenuShortcutComponent implements OnInit {
         this.router = _router;
     }
 
-    ngOnInit(): void {
-        this.loadShortcuts();
-    }
+    ngOnInit(): void { }
 
-    loadShortcuts() {
-        this.shortcuts = this.privilegeService.getCurrentUserShortcuts();
-    }
 
     onSpeedDialFabClicked(group: any, shortcut: any) {
         this.router.navigate(['/indexing/' + group.id]);
diff --git a/src/frontend/app/process/process.component.ts b/src/frontend/app/process/process.component.ts
index b8108534cb0..0988fd19ac8 100755
--- a/src/frontend/app/process/process.component.ts
+++ b/src/frontend/app/process/process.component.ts
@@ -186,7 +186,8 @@ export class ProcessComponent implements OnInit {
 
     ngOnInit(): void {
         this.loading = true;
-
+        this.headerService.sideNavLeft.close();
+        this.headerService.sideNavLeft = this.sidenavLeft;
         this.headerService.setHeader(this.lang.eventProcessDoc);
 
         this.route.params.subscribe(params => {            
diff --git a/src/frontend/app/profile.component.html b/src/frontend/app/profile.component.html
index 492b4b8d2d5..a55a498d8e1 100755
--- a/src/frontend/app/profile.component.html
+++ b/src/frontend/app/profile.component.html
@@ -1,25 +1,5 @@
 <div class="admin-container" [class.admin-is-mobile]="appService.getViewMode()">
     <mat-sidenav-container autosize class="admin-sidenav-container">
-        <mat-sidenav #snav [mode]="appService.getViewMode() ? 'over' : 'side'" [fixedInViewport]="appService.getViewMode()" fixedTopGap="56"
-            [opened]="appService.getViewMode() ? false : true" autoFocus="false">
-            <menu-shortcut></menu-shortcut>
-            <menu-nav></menu-nav>
-            <mat-nav-list>
-                <h3 mat-subheader>{{lang.actions}}</h3>
-                <a mat-list-item (click)="askRedirectBasket()">
-                    <mat-icon color="warn" mat-list-icon class="fa fa-plane"></mat-icon>
-                    <p mat-line>
-                        {{lang.activateMyAbs}}
-                    </p>
-                </a>
-                <a *ngIf="user.canModifyPassword" mat-list-item (click)="changePasswd();">
-                    <mat-icon color="primary" mat-list-icon class="fa fa-key"></mat-icon>
-                    <p mat-line>
-                        {{lang.changeMyPassword}}
-                    </p>
-                </a>
-            </mat-nav-list>
-        </mat-sidenav>
         <mat-sidenav-content>
             <div *ngIf="loading" style="display:flex;height:100%;">
                 <mat-spinner style="margin:auto;"></mat-spinner>
diff --git a/src/frontend/app/profile.component.ts b/src/frontend/app/profile.component.ts
index 3a71186d0f8..51ee5d86c1f 100755
--- a/src/frontend/app/profile.component.ts
+++ b/src/frontend/app/profile.component.ts
@@ -404,8 +404,8 @@ export class ProfileComponent implements OnInit {
 
     ngOnInit(): void {
         this.headerService.setHeader(this.lang.myProfile);
-        window['MainHeaderComponent'].setSnav(this.sidenavLeft);
-        window['MainHeaderComponent'].setSnavRight(this.sidenavRight);
+        
+        
 
         this.loading = true;
 
diff --git a/src/frontend/service/app.guard.ts b/src/frontend/service/app.guard.ts
index 26deadab743..0788ba0fb2c 100644
--- a/src/frontend/service/app.guard.ts
+++ b/src/frontend/service/app.guard.ts
@@ -21,9 +21,16 @@ export class AppGuard implements CanActivate {
     canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
         // TO DO : CAN BE REMOVE AFTER FULL V2
         localStorage.setItem('PreviousV2Route', state.url);
-
+        
+        if (route.url.filter((url: any) => url == 'administration').length > 0) {
+            this.headerService.hideSideBar = true;
+            //this.headerService.sideNavLeft.close();
+        } else {
+            this.headerService.hideSideBar = false;
+            this.headerService.resetSideNavSelection();
+        }
+        
         if (this.headerService.user.id === undefined) {
-            
             return this.http.get('../../rest/currentUser/profile')
                 .pipe(
                     map((data: any) => {
@@ -37,7 +44,9 @@ export class AppGuard implements CanActivate {
                             preferences: data.preferences,
                             privileges: data.privileges[0] === 'ALL_PRIVILEGES' ? this.privilegeService.getAllPrivileges() : data.privileges
                         };
+                        
                         this.headerService.nbResourcesFollowed = data.nbFollowedResources;
+                        this.privilegeService.resfreshUserShortcuts();
                         return true;
                     })
                 );
@@ -51,6 +60,8 @@ export class AppGuard implements CanActivate {
     providedIn: 'root'
 })
 export class AfterProcessGuard implements CanDeactivate<ProcessComponent> {
+    constructor() { }
+
     canDeactivate(component: ProcessComponent): boolean {
         if (!component.isActionEnded() && !component.detailMode) {
             component.unlockResource();
diff --git a/src/frontend/service/header.service.ts b/src/frontend/service/header.service.ts
index d8f048821d9..e282ff462cc 100755
--- a/src/frontend/service/header.service.ts
+++ b/src/frontend/service/header.service.ts
@@ -3,45 +3,71 @@ import { HttpClient } from '@angular/common/http';
 import { LANG } from '../app/translate.component';
 import { tap, catchError, map } from 'rxjs/operators';
 import { of } from 'rxjs';
+import { MatSidenav } from '@angular/material';
+import { FoldersService } from '../app/folder/folders.service';
 
 @Injectable()
 export class HeaderService {
+    hideSideBar: boolean = false;
+    sideNavLeft: MatSidenav = null;
+    defaultSideNavLeft: MatSidenav = null;
+    currentBasketInfo: any = {
+        ownerId: 0,
+        groupId: 0,
+        basketId: ''
+    };
+    folderId: number = 0;
     headerMessageIcon: string = "";
     headerMessage: string = "";
     subHeaderMessage: string = "";
-    user: any = { firstname: "", lastname: "", groups : [], privileges : [] };
+    user: any = { firstname: "", lastname: "", groups: [], privileges: [] };
     lang: any = LANG;
     nbResourcesFollowed: number = 0;
     base64: string = null;
 
-    constructor(public http: HttpClient) { }
+    constructor(
+        public http: HttpClient,
+        public foldersService: FoldersService,
+    ) { }
 
     loadHeader() {
-        this.http.get('../../rest/header').pipe(
-            tap((data: any) => this.setUser(data.user)),
-            catchError((err: any) => {
-                console.log(err);
-                return of(false);
-            })
-        ).subscribe();
+        return new Promise((resolve, reject) => {
+            this.http.get('../../rest/header').pipe(
+                tap((data: any) => {
+                    this.setUser(data.user);
+                    resolve(true);
+                }),
+                catchError((err: any) => {
+                    console.log(err);
+                    resolve(false);
+                    return of(false);
+                })
+            ).subscribe();
+        });
+
     }
 
     resfreshCurrentUser() {
-        this.http.get('../../rest/currentUser/profile')
-            .pipe(
-                map((data: any) => {
-                    this.user = {
-                        id: data.id,
-                        userId: data.user_id,
-                        firstname: data.firstname,
-                        lastname: data.lastname,
-                        entities: data.entities,
-                        groups: data.groups,
-                        preferences: data.preferences,
-                        privileges: data.privileges[0] === 'ALL_PRIVILEGES' ? this.user.privileges : data.privileges
-                    }
-                })
-            ).subscribe();
+        return new Promise((resolve, reject) => {
+            this.http.get('../../rest/currentUser/profile')
+                .pipe(
+                    map((data: any) => {
+                        this.user = {
+                            id: data.id,
+                            userId: data.user_id,
+                            firstname: data.firstname,
+                            lastname: data.lastname,
+                            entities: data.entities,
+                            groups: data.groups,
+                            preferences: data.preferences,
+                            privileges: data.privileges[0] === 'ALL_PRIVILEGES' ? this.user.privileges : data.privileges
+                        };
+                        this.nbResourcesFollowed = data.nbFollowedResources;
+                        resolve(true);
+                    })
+                ).subscribe();
+        });
+
     }
 
     setUser(user: any) {
@@ -61,4 +87,20 @@ export class HeaderService {
         this.subHeaderMessage = subTitle;
         this.headerMessageIcon = icon;
     }
+
+    resetSideNavSelection() { 
+        console.log(this.defaultSideNavLeft);
+               
+        if (this.defaultSideNavLeft !== undefined) {
+            this.sideNavLeft = this.defaultSideNavLeft;
+            this.sideNavLeft.open();
+            this.currentBasketInfo = {
+                ownerId: 0,
+                groupId: 0,
+                basketId: ''
+            };
+            this.foldersService.setFolder({ id: 0 });
+        }
+        
+    }
 }
diff --git a/src/frontend/service/privileges.service.ts b/src/frontend/service/privileges.service.ts
index 56c18fb38e3..f3200604400 100644
--- a/src/frontend/service/privileges.service.ts
+++ b/src/frontend/service/privileges.service.ts
@@ -519,6 +519,19 @@ export class PrivilegeService {
         }
     ];
 
+    shortcuts: any[] = [
+        {
+            "id": "followed",
+            "label": this.lang.followedMail,
+            "comment": this.lang.followedMail,
+            "route": "/followed",
+            "style": "fas fa-star",
+            "unit": "application",
+            "angular": true,
+            "shortcut" : true
+        }
+    ];
+
     constructor(public headerService: HeaderService) { }
 
     getAllPrivileges() {
@@ -591,8 +604,8 @@ export class PrivilegeService {
         return this.menus.map(elem => elem.unit).filter((elem, pos, arr) => arr.indexOf(elem) === pos);
     }
 
-    getCurrentUserShortcuts(): Array<menu> {
-        let shortcuts: any[] = [
+    resfreshUserShortcuts() {
+        this.shortcuts = [
             {
                 "id": "followed",
                 "label": this.lang.followedMail,
@@ -605,7 +618,7 @@ export class PrivilegeService {
             }
         ];
         
-        shortcuts = shortcuts.concat(this.menus.filter(elem => elem.shortcut === true).filter(elem => this.headerService.user.privileges.indexOf(elem.id) > -1));
+        this.shortcuts = this.shortcuts.concat(this.menus.filter(elem => elem.shortcut === true).filter(elem => this.headerService.user.privileges.indexOf(elem.id) > -1));
 
         if (this.headerService.user.groups.filter((group: any) => group.can_index === true).length > 0) {
             const indexingGroups: any[] = [];
@@ -628,10 +641,8 @@ export class PrivilegeService {
                 'shortcut' : true,
                 "groups": indexingGroups
             };
-            shortcuts.push(indexingShortcut);
+            this.shortcuts.push(indexingShortcut);
         }
-
-        return shortcuts;
     }
 
     getAdministrations(): Array<administration> {
-- 
GitLab