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 © 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> </p> - <h3>{{lang.externalComponents}}</h3> - <hr/> - <em>{{lang.thanksToExtDev}}</em> - <p> </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> </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 © 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> </p> + <h3>{{lang.externalComponents}}</h3> + <hr /> + <em>{{lang.thanksToExtDev}}</em> + <p> </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> </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> - <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> - <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> - <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> + <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> + <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> + <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