@esfaenza/core 15.2.4 → 15.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/components/base/navigable.component.d.ts +17 -0
  2. package/components/base/reactive.component.d.ts +9 -0
  3. package/components/breadcrumb/breadcrumb.component.d.ts +4 -0
  4. package/components/components.module.d.ts +11 -9
  5. package/components/jace-resource/jace-resource.component.d.ts +22 -0
  6. package/components/navbar/navbar.component.d.ts +22 -17
  7. package/components/public-api.d.ts +3 -0
  8. package/components/sidebar/sidebar.component.d.ts +13 -8
  9. package/domain/models/core/ApplicationJob.d.ts +12 -0
  10. package/domain/models/core/GenericItem.d.ts +10 -0
  11. package/domain/models/core/KeyValue.d.ts +5 -0
  12. package/domain/models/global_search/SaerchResultContainer.d.ts +5 -0
  13. package/domain/models/global_search/SearchResult.d.ts +10 -0
  14. package/domain/models/jace/{classes/ActiveModuleView.d.ts → ActiveModuleView.d.ts} +0 -5
  15. package/domain/models/jace/CategoriesWithModules.d.ts +6 -0
  16. package/domain/models/jace/{classes/JaceAccount.d.ts → JaceAccount.d.ts} +0 -9
  17. package/domain/models/jace/{classes/JaceIdentity.d.ts → JaceIdentity.d.ts} +1 -3
  18. package/domain/models/jace/JaceUser.d.ts +9 -0
  19. package/domain/public-api.d.ts +16 -10
  20. package/domain/tokens.d.ts +1 -1
  21. package/esm2020/components/base/navigable.component.mjs +43 -0
  22. package/esm2020/components/base/reactive.component.mjs +26 -0
  23. package/esm2020/components/breadcrumb/breadcrumb.component.mjs +34 -29
  24. package/esm2020/components/components.module.mjs +15 -8
  25. package/esm2020/components/error/Angular/angularerror.component.mjs +7 -5
  26. package/esm2020/components/external-page/external_pages.component.mjs +1 -2
  27. package/esm2020/components/jace-resource/jace-resource.component.mjs +65 -0
  28. package/esm2020/components/navbar/modules-board/jace-modules-board.component.mjs +1 -1
  29. package/esm2020/components/navbar/navbar.component.mjs +85 -68
  30. package/esm2020/components/public-api.mjs +4 -1
  31. package/esm2020/components/sidebar/sidebar.component.mjs +67 -39
  32. package/esm2020/domain/models/core/ApplicationJob.mjs +3 -0
  33. package/esm2020/domain/models/core/ApplicationMenu.mjs +26 -0
  34. package/esm2020/domain/models/core/EnvOptions.mjs +13 -0
  35. package/esm2020/domain/models/core/GenericItem.mjs +12 -0
  36. package/esm2020/domain/models/core/KeyValue.mjs +15 -0
  37. package/esm2020/domain/models/global_search/SaerchResultContainer.mjs +6 -0
  38. package/esm2020/domain/models/global_search/SearchResult.mjs +8 -0
  39. package/esm2020/domain/models/jace/AccountScope.mjs +8 -0
  40. package/esm2020/domain/models/jace/ActiveModuleView.mjs +3 -0
  41. package/esm2020/domain/models/jace/CategoriesWithModules.mjs +7 -0
  42. package/esm2020/domain/models/jace/JaceAccount.mjs +3 -0
  43. package/esm2020/domain/models/jace/JaceIdentity.mjs +13 -0
  44. package/esm2020/domain/models/jace/JaceModule.mjs +3 -0
  45. package/esm2020/domain/models/jace/JacePermission.mjs +3 -0
  46. package/esm2020/domain/models/jace/JaceRole.mjs +8 -0
  47. package/esm2020/domain/models/jace/JaceUser.mjs +3 -0
  48. package/esm2020/domain/public-api.mjs +17 -11
  49. package/esm2020/domain/tokens.mjs +1 -1
  50. package/esm2020/lib/app.component.mjs +2 -2
  51. package/esm2020/lib/core.module.mjs +8 -7
  52. package/esm2020/pipes/classes/included_in.pipe.mjs +17 -0
  53. package/esm2020/pipes/{safe_html → classes}/safe_html.pipe.mjs +1 -1
  54. package/esm2020/pipes/{safe_script → classes}/safe_script.pipe.mjs +1 -1
  55. package/esm2020/pipes/{safe_style → classes}/safe_style.pipe.mjs +1 -1
  56. package/esm2020/pipes/classes/safe_url.pipe.mjs +18 -0
  57. package/esm2020/pipes/pipes.module.mjs +6 -6
  58. package/esm2020/pipes/public-api.mjs +6 -6
  59. package/esm2020/services/classes/app.completedjobredirection.mjs +18 -0
  60. package/esm2020/services/classes/app.globalsearch.mjs +34 -0
  61. package/esm2020/services/classes/app.menufilter.mjs +21 -0
  62. package/esm2020/services/classes/app.state.mjs +101 -9
  63. package/esm2020/services/public-api.mjs +4 -1
  64. package/fesm2015/esfaenza-core-components.mjs +336 -216
  65. package/fesm2015/esfaenza-core-components.mjs.map +1 -1
  66. package/fesm2015/esfaenza-core-domain.mjs +55 -15
  67. package/fesm2015/esfaenza-core-domain.mjs.map +1 -1
  68. package/fesm2015/esfaenza-core-pipes.mjs +2 -2
  69. package/fesm2015/esfaenza-core-pipes.mjs.map +1 -1
  70. package/fesm2015/esfaenza-core-services.mjs +168 -10
  71. package/fesm2015/esfaenza-core-services.mjs.map +1 -1
  72. package/fesm2015/esfaenza-core.mjs +11 -10
  73. package/fesm2015/esfaenza-core.mjs.map +1 -1
  74. package/fesm2020/esfaenza-core-components.mjs +328 -209
  75. package/fesm2020/esfaenza-core-components.mjs.map +1 -1
  76. package/fesm2020/esfaenza-core-domain.mjs +54 -14
  77. package/fesm2020/esfaenza-core-domain.mjs.map +1 -1
  78. package/fesm2020/esfaenza-core-pipes.mjs +2 -2
  79. package/fesm2020/esfaenza-core-pipes.mjs.map +1 -1
  80. package/fesm2020/esfaenza-core-services.mjs +167 -10
  81. package/fesm2020/esfaenza-core-services.mjs.map +1 -1
  82. package/fesm2020/esfaenza-core.mjs +11 -10
  83. package/fesm2020/esfaenza-core.mjs.map +1 -1
  84. package/lib/core.module.d.ts +6 -8
  85. package/package.json +1 -1
  86. package/pipes/{safe_url → classes}/safe_url.pipe.d.ts +1 -1
  87. package/pipes/pipes.module.d.ts +5 -5
  88. package/pipes/public-api.d.ts +5 -5
  89. package/services/classes/app.completedjobredirection.d.ts +12 -0
  90. package/services/classes/app.globalsearch.d.ts +25 -0
  91. package/services/classes/app.menufilter.d.ts +14 -0
  92. package/services/classes/app.state.d.ts +10 -17
  93. package/services/public-api.d.ts +3 -0
  94. package/theme/initial.scss +0 -8
  95. package/components/sidebar/sidebar.component.service.d.ts +0 -27
  96. package/domain/models/jace/classes/User.d.ts +0 -4
  97. package/esm2020/components/sidebar/sidebar.component.service.mjs +0 -58
  98. package/esm2020/domain/models/core/classes/ApplicationMenu.mjs +0 -26
  99. package/esm2020/domain/models/core/classes/EnvOptions.mjs +0 -13
  100. package/esm2020/domain/models/jace/classes/AccountScope.mjs +0 -8
  101. package/esm2020/domain/models/jace/classes/ActiveModuleView.mjs +0 -9
  102. package/esm2020/domain/models/jace/classes/JaceAccount.mjs +0 -5
  103. package/esm2020/domain/models/jace/classes/JaceIdentity.mjs +0 -16
  104. package/esm2020/domain/models/jace/classes/JaceModule.mjs +0 -3
  105. package/esm2020/domain/models/jace/classes/JacePermission.mjs +0 -3
  106. package/esm2020/domain/models/jace/classes/JaceRole.mjs +0 -8
  107. package/esm2020/domain/models/jace/classes/User.mjs +0 -3
  108. package/esm2020/pipes/included_in/included_in.pipe.mjs +0 -17
  109. package/esm2020/pipes/safe_url/safe_url.pipe.mjs +0 -18
  110. /package/domain/models/core/{classes/ApplicationMenu.d.ts → ApplicationMenu.d.ts} +0 -0
  111. /package/domain/models/core/{classes/EnvOptions.d.ts → EnvOptions.d.ts} +0 -0
  112. /package/domain/models/jace/{classes/AccountScope.d.ts → AccountScope.d.ts} +0 -0
  113. /package/domain/models/jace/{classes/JaceModule.d.ts → JaceModule.d.ts} +0 -0
  114. /package/domain/models/jace/{classes/JacePermission.d.ts → JacePermission.d.ts} +0 -0
  115. /package/domain/models/jace/{classes/JaceRole.d.ts → JaceRole.d.ts} +0 -0
  116. /package/pipes/{included_in → classes}/included_in.pipe.d.ts +0 -0
  117. /package/pipes/{safe_html → classes}/safe_html.pipe.d.ts +0 -0
  118. /package/pipes/{safe_script → classes}/safe_script.pipe.d.ts +0 -0
  119. /package/pipes/{safe_style → classes}/safe_style.pipe.d.ts +0 -0
@@ -1,18 +1,21 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, ViewEncapsulation, Input, ViewChild, HostListener, Injectable, ChangeDetectionStrategy, Inject, Optional, NgModule } from '@angular/core';
3
- import * as i4 from '@esfaenza/core/services';
2
+ import { Component, ViewEncapsulation, Input, ViewChild, HostListener, Injectable, ChangeDetectionStrategy, Optional, Inject, NgModule } from '@angular/core';
3
+ import * as i2 from '@esfaenza/core/services';
4
+ import { AppState } from '@esfaenza/core/services';
4
5
  import * as i1 from '@angular/router';
5
- import { NavigationEnd, RouterModule } from '@angular/router';
6
+ import { NavigationEnd, ActivatedRoute, RouterModule } from '@angular/router';
6
7
  import * as i3 from '@angular/platform-browser';
7
8
  import * as i3$1 from '@angular/common';
8
9
  import { CommonModule } from '@angular/common';
9
10
  import * as i1$1 from '@esfaenza/preferences';
10
11
  import * as i3$2 from '@esfaenza/httpservice';
11
- import * as i4$1 from '@esfaenza/localizations';
12
+ import * as i5 from '@esfaenza/localizations';
12
13
  import { LocalizationService, LocalizationModule } from '@esfaenza/localizations';
13
- import { Subject, interval, takeUntil } from 'rxjs';
14
- import * as i2 from '@esfaenza/signalr-notifications';
15
- import * as i3$3 from '@esfaenza/extensions';
14
+ import { ReplaySubject, interval, startWith, takeUntil, takeWhile, firstValueFrom } from 'rxjs';
15
+ import * as i13 from '@esfaenza/es-table';
16
+ import { EsTableColumnsDefinition, EsTableModule } from '@esfaenza/es-table';
17
+ import * as i3$3 from '@esfaenza/signalr-notifications';
18
+ import * as i4 from '@esfaenza/extensions';
16
19
  import * as i9 from '@angular/forms';
17
20
  import { FormsModule } from '@angular/forms';
18
21
  import * as i10 from 'ngx-bootstrap/progressbar';
@@ -21,10 +24,11 @@ import * as i11 from '@angular/material/slide-toggle';
21
24
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
22
25
  import * as i12 from 'ngx-bootstrap/dropdown';
23
26
  import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
24
- import { CategoriesWithModules, MENU, MENU_LOCALIZATION, REDIRECT_MAP } from '@esfaenza/core/domain';
25
- import * as i2$1 from '@esfaenza/access-control';
26
- import * as i6 from '@esfaenza/core/directives';
27
+ import { CategoriesWithModules, MENU_LOCALIZATION, MENU, REDIRECT_MAP } from '@esfaenza/core/domain';
28
+ import * as i5$1 from '@esfaenza/access-control';
29
+ import * as i7 from '@esfaenza/core/directives';
27
30
  import { DirectivesModule } from '@esfaenza/core/directives';
31
+ import { takeUntil as takeUntil$1 } from 'rxjs/operators';
28
32
 
29
33
  // Angular
30
34
  class BackTop {
@@ -75,46 +79,51 @@ class Breadcrumb {
75
79
  this._titleService = _titleService;
76
80
  this.activePageTitle = "";
77
81
  this.subActiveLinks = [];
78
- this._state.subscribe("menu.adjustNavigationTo", (activeLink) => {
79
- if (activeLink) {
80
- this.subActiveLinks = [];
81
- this.activePageTitle = activeLink;
82
- this._titleService.setTitle(myconfig.AppData.ModuleDescription + " > " + activeLink);
83
- }
84
- });
85
- /*Gestione della navigazione interna:
86
- Essenzialmente controllo se la lista di subnavigation gi� contiene l'elemento in cui sono ora,
87
- se lo contiene gi� significa che ci sono tornato sopra premendo back(browser o pagina), quindi
88
- elimino l'ultimo elemento della lista per ristabilire la situazione, se invece l'elemento non esiste
89
- vuol dire che ci ho navigato sopra, quindi lo aggiungo.*/
90
- this._state.subscribe("menu.adjustSubNavigationTo", (activeLink) => {
91
- if (activeLink) {
92
- var index = this.subActiveLinks.indexOf(activeLink);
93
- if (index != -1 && (index + 1) != this.subActiveLinks.length)
94
- this.subActiveLinks.pop();
95
- if (index == -1 && this.activePageTitle != activeLink)
96
- this.subActiveLinks.push(activeLink);
97
- this._titleService.setTitle(myconfig.AppData.ModuleDescription + " > " + activeLink);
98
- }
99
- });
100
- this._state.subscribe("menu.removeLastSubNavigation", () => {
101
- this.subActiveLinks.pop();
102
- });
103
- this._state.subscribe("menu.cleanupSubNavigation", () => {
82
+ this._state.subscribe("menu.adjustNavigationTo", (activeLink) => this.adjustNavigationTo(activeLink));
83
+ this._state.subscribe("menu.adjustSubNavigationTo", (activeLink) => this.adjustSubNavigationTo(activeLink));
84
+ this._state.subscribe("menu.removeLastSubNavigation", () => this.removeLastSubNavigation());
85
+ this._state.subscribe("menu.cleanupSubNavigation", () => this.cleanupSubNavigation());
86
+ }
87
+ adjustNavigationTo(activeLink) {
88
+ if (activeLink) {
104
89
  this.subActiveLinks = [];
105
- });
90
+ this.activePageTitle = activeLink;
91
+ this._titleService.setTitle(myconfig.AppData.ModuleDescription + " > " + activeLink);
92
+ }
93
+ }
94
+ /*Gestione della navigazione interna:
95
+ Essenzialmente controllo se la lista di subnavigation già contiene l'elemento in cui sono ora,
96
+ se lo contiene già significa che ci sono tornato sopra premendo back(browser o pagina), quindi
97
+ elimino l'ultimo elemento della lista per ristabilire la situazione, se invece l'elemento non esiste
98
+ vuol dire che ci ho navigato sopra, quindi lo aggiungo.*/
99
+ adjustSubNavigationTo(activeLink) {
100
+ if (activeLink) {
101
+ var index = this.subActiveLinks.indexOf(activeLink);
102
+ if (index != -1 && (index + 1) != this.subActiveLinks.length)
103
+ this.subActiveLinks.pop();
104
+ if (index == -1 && this.activePageTitle != activeLink)
105
+ this.subActiveLinks.push(activeLink);
106
+ this._titleService.setTitle(myconfig.AppData.ModuleDescription + " > " + activeLink);
107
+ }
108
+ }
109
+ removeLastSubNavigation() {
110
+ this.subActiveLinks.pop();
111
+ }
112
+ cleanupSubNavigation() {
113
+ this.subActiveLinks = [];
106
114
  }
107
115
  ngOnInit() {
108
- if (!this.activePageTitle)
116
+ if (!this.activePageTitle) {
109
117
  this.activePageTitle = this._activatedRoute.snapshot.firstChild.data["title"];
118
+ }
110
119
  }
111
120
  }
112
- Breadcrumb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Breadcrumb, deps: [{ token: i4.AppState }, { token: i1.ActivatedRoute }, { token: i3.Title }], target: i0.ɵɵFactoryTarget.Component });
121
+ Breadcrumb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Breadcrumb, deps: [{ token: i2.AppState }, { token: i1.ActivatedRoute }, { token: i3.Title }], target: i0.ɵɵFactoryTarget.Component });
113
122
  Breadcrumb.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Breadcrumb, selector: "breadcrumb", ngImport: i0, template: "<div class=\"clearfix\">\r\n <ol class=\"breadcrumb\">\r\n <li class=\"breadcrumb-item fa fa-home m-t-3\"></li>\r\n <li class=\"breadcrumb-item active text-uppercase\">{{ activePageTitle }}</li>\r\n <li class=\"breadcrumb-item active text-uppercase e2eLeafPage\" *ngFor=\"let link of subActiveLinks\">{{ link }}</li>\r\n </ol>\r\n</div>", styles: [".breadcrumb{padding:0;background:transparent;color:#242424;font-size:14px;margin-bottom:15px}.breadcrumb-item+.breadcrumb-item:before{color:#242424;content:\">\"}.breadcrumb-item{float:left}.breadcrumb-item.active{color:#242424;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None });
114
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Breadcrumb, decorators: [{
115
124
  type: Component,
116
125
  args: [{ selector: "breadcrumb", encapsulation: ViewEncapsulation.None, template: "<div class=\"clearfix\">\r\n <ol class=\"breadcrumb\">\r\n <li class=\"breadcrumb-item fa fa-home m-t-3\"></li>\r\n <li class=\"breadcrumb-item active text-uppercase\">{{ activePageTitle }}</li>\r\n <li class=\"breadcrumb-item active text-uppercase e2eLeafPage\" *ngFor=\"let link of subActiveLinks\">{{ link }}</li>\r\n </ol>\r\n</div>", styles: [".breadcrumb{padding:0;background:transparent;color:#242424;font-size:14px;margin-bottom:15px}.breadcrumb-item+.breadcrumb-item:before{color:#242424;content:\">\"}.breadcrumb-item{float:left}.breadcrumb-item.active{color:#242424;font-weight:700}\n"] }]
117
- }], ctorParameters: function () { return [{ type: i4.AppState }, { type: i1.ActivatedRoute }, { type: i3.Title }]; } });
126
+ }], ctorParameters: function () { return [{ type: i2.AppState }, { type: i1.ActivatedRoute }, { type: i3.Title }]; } });
118
127
 
119
128
  // Angular
120
129
  class PageNotFoundComponent {
@@ -162,12 +171,12 @@ class ServerErrorComponent {
162
171
  this.router.navigate(["/pages/dashboard"]);
163
172
  }
164
173
  }
165
- ServerErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ServerErrorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i4.AppState }], target: i0.ɵɵFactoryTarget.Component });
174
+ ServerErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ServerErrorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.AppState }], target: i0.ɵɵFactoryTarget.Component });
166
175
  ServerErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ServerErrorComponent, selector: "servererror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\">&nbsp;&nbsp;&nbsp;</h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\">&nbsp;&nbsp;&nbsp;</h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
167
176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ServerErrorComponent, decorators: [{
168
177
  type: Component,
169
178
  args: [{ selector: "servererror", encapsulation: ViewEncapsulation.None, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\">&nbsp;&nbsp;&nbsp;</h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\">&nbsp;&nbsp;&nbsp;</h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
170
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i4.AppState }]; } });
179
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.AppState }]; } });
171
180
 
172
181
  // Angular
173
182
  class AngularErrorComponent {
@@ -187,30 +196,32 @@ class AngularErrorComponent {
187
196
  console.error(this.errorMessage);
188
197
  }
189
198
  ngOnInit() {
190
- var item = this.store.getLocalItem("Reload");
199
+ var item = localStorage.getItem("Reload");
191
200
  if (item) {
192
- this.store.removeItem("Reload");
201
+ localStorage.removeItem("Reload");
193
202
  this.router.navigate([item]);
194
203
  }
195
204
  }
196
205
  b64DecodeUnicode(str) {
197
- // Going backwards: from bytestream, to percent-encoding, to original string.
206
+ // Bytestream -> Encoding % -> Stringa originale
198
207
  return decodeURIComponent(atob(str).split("").map(c => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join(""));
199
208
  }
200
209
  goPreviousPage() {
201
- this.store.setLocalItem("Reload", this.previousUrl);
210
+ // Reload per forzare il ricaricamento del javascript (in modo che lo stato dell'applicazione sia a posto)
211
+ // all'onInit la pagina prenderà la root a cui navigare dal localStorage
212
+ localStorage.setItem("Reload", this.previousUrl);
202
213
  location.reload();
203
214
  }
204
215
  goDashboard() {
205
216
  this.router.navigate(["/pages/dashboard"]);
206
217
  }
207
218
  }
208
- AngularErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AngularErrorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i1$1.CacheService }, { token: i3$2.HTTPService }, { token: i4.TokenService }], target: i0.ɵɵFactoryTarget.Component });
219
+ AngularErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AngularErrorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i1$1.CacheService }, { token: i3$2.HTTPService }, { token: i2.TokenService }], target: i0.ɵɵFactoryTarget.Component });
209
220
  AngularErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AngularErrorComponent, selector: "angularerror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa &egrave; andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si &egrave; verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
210
221
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AngularErrorComponent, decorators: [{
211
222
  type: Component,
212
223
  args: [{ selector: "angularerror", encapsulation: ViewEncapsulation.None, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa &egrave; andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si &egrave; verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
213
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i1$1.CacheService }, { type: i3$2.HTTPService }, { type: i4.TokenService }]; } });
224
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i1$1.CacheService }, { type: i3$2.HTTPService }, { type: i2.TokenService }]; } });
214
225
 
215
226
  class NavBarLoc extends LocalizationService {
216
227
  constructor(injector) {
@@ -245,6 +256,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
245
256
  type: Injectable
246
257
  }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
247
258
 
259
+ // Angular
260
+ class ReactiveComponent {
261
+ constructor() {
262
+ this.Subscriptions = [];
263
+ this.destroyed$ = new ReplaySubject(1);
264
+ }
265
+ ngOnDestroy() {
266
+ this.destroyed$.next(true);
267
+ this.destroyed$.complete();
268
+ if (!this.Subscriptions)
269
+ return;
270
+ for (let i = 0; i < this.Subscriptions.length; i++)
271
+ this.Subscriptions[i].unsubscribe();
272
+ }
273
+ }
274
+ ReactiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ReactiveComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
275
+ ReactiveComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ReactiveComponent, selector: "ng-component", ngImport: i0, template: '', isInline: true });
276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ReactiveComponent, decorators: [{
277
+ type: Component,
278
+ args: [{ template: '' }]
279
+ }] });
280
+
248
281
  // Angular
249
282
  class JaceModulesBoardComponent {
250
283
  constructor(bts) {
@@ -270,12 +303,12 @@ class JaceModulesBoardComponent {
270
303
  });
271
304
  }
272
305
  }
273
- JaceModulesBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: JaceModulesBoardComponent, deps: [{ token: i4.TokenService }], target: i0.ɵɵFactoryTarget.Component });
306
+ JaceModulesBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: JaceModulesBoardComponent, deps: [{ token: i2.TokenService }], target: i0.ɵɵFactoryTarget.Component });
274
307
  JaceModulesBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: JaceModulesBoardComponent, selector: "jace-modules-board", inputs: { Modules: "Modules" }, ngImport: i0, template: "<div *ngIf=\"Categories\">\r\n <div *ngFor=\"let cat of Categories\">\r\n <div class=\"row\">\r\n <div class=\"section-title app-padding-left-0 app-padding-top-0\">\r\n {{cat.category}}\r\n </div>\r\n </div>\r\n <div *ngFor=\"let modRow of cat.module_rows\" class=\"row app-padding-left-10 app-padding-right-15\">\r\n <div class=\"module\" [class.module-available]=\"module.href\" [class.module-unavailable]=\"!module.href\" *ngFor=\"let module of modRow\">\r\n <a [href]=\"module.href\">\r\n <div class=\"module-name\"><span>{{module.name}}</span></div>\r\n <div class=\"module-footer\">\r\n <span class=\"fa-stack\"><i class=\"fa fa-circle-thin fa-stack-2x\"></i><i class=\"fa fa-chevron-right fa-stack-1x\"></i></span>\r\n </div>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".module{padding:.4em .4em .4em .7em;height:6em;width:11.5em;background:#3d3d3d;border:1px solid #383737;border-radius:5px;text-align:center;color:#f7ca26;border-top:3px solid transparent;border-bottom:3px solid transparent;margin-left:5px;margin-bottom:5px}.module-name{color:#fcf9cf;font-family:Passion One,cursive;font-size:18px;text-transform:uppercase;text-align:left;height:65%;white-space:pre-line}.module-footer{height:25%;text-align:right;color:#f7ca26}.module-available{cursor:pointer}.module-available:hover{border-top:3px solid #8e9aaf;border-bottom:3px solid #8e9aaf;background-color:#242d3a;box-shadow:3px 3px 2px #151515}.module-available:hover .module-name{color:#fff}.module-available:hover .module-footer{color:#f7ca26}.module-unavailable,.module-unavailable .module-name,.module-unavailable .module-footer{cursor:not-allowed}.module-unavailable .module-name,.module-unavailable .module-footer{color:#7d7d7d!important}.section-title{margin-left:15px;margin-right:15px;text-align:left;color:#f7ca26;padding:.4em .4em .4em .7em;border-radius:5px;font-family:Passion One,cursive;font-size:20px;text-transform:uppercase}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
275
308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: JaceModulesBoardComponent, decorators: [{
276
309
  type: Component,
277
310
  args: [{ selector: "jace-modules-board", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"Categories\">\r\n <div *ngFor=\"let cat of Categories\">\r\n <div class=\"row\">\r\n <div class=\"section-title app-padding-left-0 app-padding-top-0\">\r\n {{cat.category}}\r\n </div>\r\n </div>\r\n <div *ngFor=\"let modRow of cat.module_rows\" class=\"row app-padding-left-10 app-padding-right-15\">\r\n <div class=\"module\" [class.module-available]=\"module.href\" [class.module-unavailable]=\"!module.href\" *ngFor=\"let module of modRow\">\r\n <a [href]=\"module.href\">\r\n <div class=\"module-name\"><span>{{module.name}}</span></div>\r\n <div class=\"module-footer\">\r\n <span class=\"fa-stack\"><i class=\"fa fa-circle-thin fa-stack-2x\"></i><i class=\"fa fa-chevron-right fa-stack-1x\"></i></span>\r\n </div>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".module{padding:.4em .4em .4em .7em;height:6em;width:11.5em;background:#3d3d3d;border:1px solid #383737;border-radius:5px;text-align:center;color:#f7ca26;border-top:3px solid transparent;border-bottom:3px solid transparent;margin-left:5px;margin-bottom:5px}.module-name{color:#fcf9cf;font-family:Passion One,cursive;font-size:18px;text-transform:uppercase;text-align:left;height:65%;white-space:pre-line}.module-footer{height:25%;text-align:right;color:#f7ca26}.module-available{cursor:pointer}.module-available:hover{border-top:3px solid #8e9aaf;border-bottom:3px solid #8e9aaf;background-color:#242d3a;box-shadow:3px 3px 2px #151515}.module-available:hover .module-name{color:#fff}.module-available:hover .module-footer{color:#f7ca26}.module-unavailable,.module-unavailable .module-name,.module-unavailable .module-footer{cursor:not-allowed}.module-unavailable .module-name,.module-unavailable .module-footer{color:#7d7d7d!important}.section-title{margin-left:15px;margin-right:15px;text-align:left;color:#f7ca26;padding:.4em .4em .4em .7em;border-radius:5px;font-family:Passion One,cursive;font-size:20px;text-transform:uppercase}\n"] }]
278
- }], ctorParameters: function () { return [{ type: i4.TokenService }]; }, propDecorators: { Modules: [{
311
+ }], ctorParameters: function () { return [{ type: i2.TokenService }]; }, propDecorators: { Modules: [{
279
312
  type: Input
280
313
  }] } });
281
314
 
@@ -283,10 +316,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
283
316
  // Chiamate ai Repository
284
317
  const GET_Jace_GetActiveJaceModules = "/api/Jace/GetActiveJaceModules";
285
318
  const GET_Adm_ClearAllCaches = "/api/Adm/ClearAllCaches";
286
- class Navbar {
287
- constructor(prefsService, cacheService, MessageDef, notifications, msgExts, lc, http, cdr, _state, sr, router) {
319
+ class Navbar extends ReactiveComponent {
320
+ constructor(prefsService, cacheService, globalSearchService, MessageDef, notifications, msgExts, lc, http, cdr, _state, sr, router, cjrService) {
321
+ super();
288
322
  this.prefsService = prefsService;
289
323
  this.cacheService = cacheService;
324
+ this.globalSearchService = globalSearchService;
290
325
  this.MessageDef = MessageDef;
291
326
  this.notifications = notifications;
292
327
  this.msgExts = msgExts;
@@ -296,72 +331,62 @@ class Navbar {
296
331
  this._state = _state;
297
332
  this.sr = sr;
298
333
  this.router = router;
299
- this.destroyed$ = new Subject();
300
- this.isMenuCollapsed = false;
334
+ this.cjrService = cjrService;
301
335
  this.applicationVersion = myconfig.AppData.ComponentVersion;
302
- this.myconfig = myconfig;
336
+ this.applicationEnvironment = myconfig.AppData.ComponentEnvironment;
337
+ this.isMenuCollapsed = false;
303
338
  this.anomaliesProcessing = false;
304
- this.IsJaceAdmin = false;
305
339
  this.newVersionWarned = false;
306
- this.notificationsSubs = [];
340
+ // ***************************************** Gestione Ricerca Globale *****************************************
341
+ this.SelectedResult = null;
342
+ this.ShowSingleTable = false;
343
+ this.searchingTerm = false;
307
344
  this._state.subscribe("menu.isCollapsed", (isCollapsed) => { this.isMenuCollapsed = isCollapsed; });
308
- this.thisLoc = lc.Locale;
309
- this.checkIdentity();
310
- this.getActiveJaceModules();
311
- interval(1000).pipe(takeUntil(this.destroyed$)).subscribe(t => {
312
- if (!myconfig.redirectInProgress)
313
- this.checkIdentity();
314
- });
315
- this.startSignalRListening();
316
345
  this._state.subscribe("app.completedJob", (jobDescription) => {
317
346
  this.msgExts.simpleSuccess(this.lc.loc("Job Completato") + ": " + jobDescription);
318
347
  });
348
+ this.handleBaseNotifications();
349
+ this.getActiveJaceModules();
350
+ // Appena la pagina parte, poi ogni secondo, controllo l'identity per verificare se rimane la stessa
351
+ interval(1000).pipe(startWith(0), takeUntil(this.destroyed$), takeWhile(_ => !myconfig.redirectInProgress)).subscribe(t => {
352
+ this.checkIdentity();
353
+ });
319
354
  }
320
355
  ngOnDestroy() {
321
- this.destroyed$.next();
322
- this.destroyed$.complete();
323
- this.stopSignalRListening();
356
+ super.ngOnDestroy();
357
+ //Quando viene distrutta la navbar devo distruggere anche il client di signalr perchè vuol dire che ho chiuso la pagina
358
+ this.notifications.disconnect();
324
359
  }
325
- startSignalRListening() {
326
- this.notificationsSubs.push(this.notifications.observe(this.MessageDef.IN_SendVersion).subscribe((message) => {
360
+ handleBaseNotifications() {
361
+ this.notifications.send(this.MessageDef.OUT_QueryJobStatus, null);
362
+ this.notifications.observe(this.MessageDef.IN_SendVersion).pipe(takeUntil(this.destroyed$)).subscribe((message) => {
327
363
  if (message != myconfig.AppData.ComponentVersion && !this.newVersionWarned) {
328
364
  this.msgExts.simpleWarning(this.lc.loc("È disponibile una nuova versione per l'applicazione corrente. Si suggerisce di ricaricare la pagina (CTRL + F5)"));
329
365
  this.newVersionWarned = true;
330
366
  }
331
- }));
332
- }
333
- stopSignalRListening() {
334
- //Quando viene distrutta la navbar devo distruggere anche il client di signalr perch� vuol dire che ho chiuso la pagina
335
- this.notificationsSubs.forEach(i => { i.unsubscribe(); });
336
- this.notifications.disconnect();
367
+ });
337
368
  }
338
369
  checkIdentity() {
339
- // Controllo identity
340
- let identity = this.sr.getJaceIdentity();
341
- if (identity) {
342
- this.checkSession(identity);
343
- if (identity.IdAccount != this.LastIdentity?.IdAccount ||
344
- identity.IdUser != this.LastIdentity?.IdUser ||
345
- identity.Idtenant != this.LastIdentity?.Idtenant) {
346
- this.msgExts.simpleWarning(this.lc.loc("Le informazioni di Sessione (Tenant/Account) sono cambiate a seguito di un login su modulo diverso utilizzando diverso Tenant/Utente sullo stesso browser. Si suggerisce di ricaricare la pagina (CTRL + F5)"));
347
- this.cdr.markForCheck();
348
- }
349
- this.LastIdentity = identity;
350
- this.Permissions = identity.Permissions;
351
- this.Roles = identity.Roles;
352
- this.IsJaceAdmin = identity.Roles.some(t => t == "Jace Admin") && !identity.Permissions.some(t => t == "alg_custom");
370
+ let id = this.sr.getJaceIdentity();
371
+ let idLast = this.CurrentIdentity;
372
+ if (!id)
373
+ return;
374
+ this.checkSessionTimeout(id);
375
+ if (this.CurrentIdentity && (id.IdAccount != idLast?.IdAccount || id.IdUser != idLast?.IdUser || id.Idtenant != idLast?.Idtenant)) {
376
+ this.msgExts.simpleWarning(this.lc.loc("Le informazioni di Sessione (Tenant/Account) sono cambiate a seguito di un login su modulo diverso utilizzando diverso Tenant/Utente sullo stesso browser. Si suggerisce di ricaricare la pagina (CTRL + F5)"));
377
+ this.cdr.markForCheck();
353
378
  }
379
+ this.CurrentIdentity = id;
354
380
  }
355
381
  getActiveJaceModules() {
356
382
  this.http.get(GET_Jace_GetActiveJaceModules).subscribe(res => {
357
383
  this.Modules = res;
384
+ this._state.Modules = this.Modules;
358
385
  });
359
386
  }
360
- checkSession(identity) {
361
- //10 minuti prima
387
+ checkSessionTimeout(identity) {
362
388
  if (dayjs() >= dayjs(identity.ExpirationTime).subtract(10, 'minutes') && !myconfig.redirectInProgress) {
363
389
  myconfig.redirectInProgress = true;
364
- //popup
365
390
  this.msgExts.expiredSessionMessage(this.lc.loc('Expired session'), this.lc.loc("L'attuale sessione di lavoro non è più valida.<br>Si prega di eseguire nuovamente il login."), () => {
366
391
  myconfig.redirectInProgress = false;
367
392
  this.router.navigate(["login"]);
@@ -411,95 +436,69 @@ class Navbar {
411
436
  this.msgExts.clearMessages();
412
437
  }
413
438
  completedJobClicked(job) {
414
- if (job.reportid) {
415
- localStorage.setItem("JOB_RPT_PARS", JSON.stringify(job.reportpars));
416
- this.router.navigate(["pages/rpt/rpt_details", { 'idRpt': job.reportid, 'searchOnOpen': true }]);
417
- }
418
- else if (job.id) {
419
- this.router.navigate(["pages/job/job_details", { 'idJob': job.id }]);
420
- }
421
- else if (job.fileid) {
422
- // Scaricare il file
423
- }
424
- else if (job.complexreportid) {
425
- // Navigare al complex report (?)
426
- }
439
+ this.cjrService.redirect(job);
440
+ }
441
+ searchRequest() {
442
+ this.searchingTerm = true;
443
+ this.searchResult = null;
444
+ if (!this.globalSearchService.Enabled)
445
+ return;
446
+ this.globalSearchService.search(this.searchTerm).subscribe(t => {
447
+ this.searchingTerm = false;
448
+ this.searchResult = t;
449
+ this.searchResult.results.forEach(t => {
450
+ t.est_cols = t.columns.map(c => {
451
+ let colLink = this.globalSearchService.generateColumnLink(c);
452
+ return new EsTableColumnsDefinition(c.description, c.id, colLink?.routePath, colLink?.routeProperties);
453
+ });
454
+ });
455
+ });
456
+ }
457
+ searchModelChanged() {
458
+ if (!this.searchingTerm)
459
+ this.closeSearch();
460
+ }
461
+ closeSearch() {
462
+ this.searchingTerm = false;
463
+ this.searchResult = null;
464
+ }
465
+ FilterSearchResults(item = null) {
466
+ this.SelectedResult = null;
467
+ this.ShowSingleTable = true;
468
+ requestAnimationFrame(() => {
469
+ if (item)
470
+ this.SelectedResult = this.searchResult?.results?.find(f => f.description == item.description);
471
+ else
472
+ this.ShowSingleTable = false;
473
+ });
427
474
  }
428
475
  }
429
- Navbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Navbar, deps: [{ token: i1$1.PreferencesService }, { token: i1$1.CacheService }, { token: i2.BaseMessageService }, { token: i2.NotificationsService }, { token: i3$3.MessageService }, { token: i4$1.LocalizationService }, { token: i3$2.HTTPService }, { token: i0.ChangeDetectorRef }, { token: i4.AppState }, { token: i4.TokenService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
430
- Navbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Navbar, selector: "navbar", viewQueries: [{ propertyName: "navbar", first: true, predicate: ["navbar"], descendants: true }], ngImport: i0, template: "<nav #navbar class=\"nav az-navbar fixed-top\">\r\n <a class=\"navbar-brand\" routerLink=\"/pages/dashboard\">\r\n <img src=\"../assets/img/logo/logo.png\" alt=\"\" class=\"d-md-block d-none\"\r\n style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-v d-md-block d-none\">{{ applicationVersion }}</div>\r\n\r\n <img src=\"../assets/img/logo/logo_sm.png\" alt=\"\" class=\"d-md-none\"\r\n style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-sm-v d-md-none\">{{ applicationVersion }}</div>\r\n </a>\r\n\r\n <ul class=\"nav navbar-nav navbar-fillable\">\r\n <li>\r\n <a (click)=\"toggleMenu()\" class=\"collapse-menu-link fa fa-navicon\"></a>\r\n </li>\r\n <li class=\"d-none d-md-block\">\r\n <form role=\"search\" class=\"app-search\">\r\n <input type=\"text\" placeholder=\"Search...\" class=\"form-control\">\r\n <a><i class=\"fa fa-search\" style=\"color: #aaa\"></i></a>\r\n </form>\r\n </li>\r\n\r\n <ul class=\"nav right-section\">\r\n\r\n <!--Dropdown job in esecuzione-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a [class.fa-spin]=\"_state.jobsInProgress > 0\" class=\"fa fa-cog dropdown-toggle app-pointer nav-jobs-icon\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{ 'Completed' | localize : lc }}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!--Dropdown moduli-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"fa fa-th module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle>\r\n </a>\r\n <ul *dropdownMenu class=\"module-board-menu container\" role=\"menu\">\r\n <div class=\"app-relative\">\r\n <jace-modules-board [Modules]=\"Modules\"></jace-modules-board>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!-- USER MENU -->\r\n <div class=\"pull-right user-menu app-no-selection\" dropdown container=\"body\" placement=\"bottom right\" style=\"height:50px;\">\r\n <a class=\"dropdown-toggle user-link app-pointer\" dropdownToggle>\r\n <div class=\"pull-left app-margin-right-10 app-relative\">\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" *ngIf=\"_state.halloweenTime\">\r\n </div>\r\n <div class=\"pull-right d-none d-sm-block\">\r\n <div class=\"app-white-text\">\r\n {{LastIdentity?.FullName}} - ({{LastIdentity?.TenantName}})\r\n </div>\r\n <div class=\"app-white-text text-sm-center\">\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 2\">\r\n {{'Ambiente di Sviluppo' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 5\">\r\n {{'Ambiente di Staging' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 6\">\r\n {{'Ambiente di Staging A' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 1\">\r\n {{'Ambiente di Produzione' | localize : lc}}\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </a>\r\n\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"user-info\">\r\n <div class=\"app-relative\">\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" style=\"right:62px;\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" style=\"right:62px;\" *ngIf=\"_state.halloweenTime\">\r\n </div>\r\n <div class=\"app-white-text app-margin-top-10 app-margin-bottom-10\">\r\n <div>\r\n {{LastIdentity?.FullName}} - ({{LastIdentity?.TenantName}})\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 2\">\r\n {{'Ambiente di Sviluppo' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 5\">\r\n {{'Ambiente di Staging' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 6\">\r\n {{'Ambiente di Staging A' | localize : lc}}\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n </li>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"thisLoc == 'en-US'\" (click)=\"lc.changeLocale('it-IT')\"><i class=\"fa fa-globe\">&nbsp;</i>Switch to Italian Site</a>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"thisLoc == 'it-IT'\" (click)=\"lc.changeLocale('en-US')\"><i class=\"fa fa-globe\">&nbsp;</i>Passa al Sito in Inglese</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeModule()\"><i class=\"fa fa-th\">&nbsp;</i>{{'Cambia Modulo' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeTenant()\"><i class=\"fa fa-building\">&nbsp;</i>{{'Cambia Tenant' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\"><i class=\"fa fa-user-times\">&nbsp;</i>{{'Ripulisci le Preferenze Utente' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearAll()\"><i class=\"fa fa-recycle \">&nbsp;</i>{{'Ripulisci la Cache' | localize : lc}}</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"logout()\"><i class=\"fa fa-power-off\">&nbsp;</i>Log out</a>\r\n </ul>\r\n </div>\r\n </ul>\r\n </ul>\r\n</nav>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #ccc}.nav-jobs-menu-header{padding:8px;font-size:14px;background-color:#242d3a;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.nav.az-navbar{height:60px;align-items:center;background-color:#242d3a}.nav.az-navbar .navbar-brand{width:205px;padding-top:0;font-size:0;margin-left:10px}.navbar-nav{flex-direction:row}#lines{border-bottom:7px double;border-top:2px solid;border-color:#ffffffe6;content:\"\";height:3px;width:20px;box-sizing:content-box;cursor:pointer}#lines:hover{opacity:.8}.app-search{position:relative;margin-left:20px}.app-search a{position:absolute;top:3px;right:14px;font-size:16px;color:#ffffff4d}.app-search .form-control{border:1px solid rgba(255,255,255,.1);font-size:11px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:190px}.app-search input{border:1px solid rgba(255,255,255,.1);font-size:12px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:240px}.completer-selected-row{background-color:#0275d8!important;color:#fff!important;width:100%!important}.completer-row{width:100%!important;color:#fff!important}.completer-dropdown{margin-top:2px!important;background-color:#344154f7!important;color:#fff;border-color:#111!important;box-shadow:0 6px 12px #0003}.search-results{left:-85px;top:-2px;z-index:1050;color:#fff;background-color:#344154f7}.search-results .btn-sm{padding:.15rem .25rem;font-size:.5rem}.search-results:before{content:\"\";border:0px}.search-results a{color:#242d3a}.search-results a:hover{color:#fff;background-color:#0275d8;cursor:pointer}.search-results a i{margin-right:8px}.right-section{position:absolute;right:10px;top:10px}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#242d3a}.user-menu .dropdown-menu a:hover{color:#fff;background-color:#242d3a}.user-menu .dropdown-menu a i{margin-right:8px}.user-link{margin-right:6px}.user-link span{color:#fff;margin-left:7px;letter-spacing:.02em}.user-link img{width:40px;border-radius:50%}.user-link:hover,.user-link:focus{text-decoration:none}.user-info{background-color:#242d3a;padding:8px;text-align:center;width:240px;margin-bottom:5px}.user-info img{width:100px;margin-top:5px;border-radius:50%}.user-info p{color:#ebebeb;margin-top:10px}.user-info small{display:block}@media (max-width: 767px){.nav.az-navbar .navbar-brand{width:auto}}.navbar-search{color:#ffffff80!important}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 8px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.collapse-menu-link{color:#fff!important;font-size:20px;padding-top:5px;cursor:pointer}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.overlay{height:100%;width:100%;display:none;padding-left:10%;padding-right:10%;position:fixed;z-index:999999;left:0;top:0;background-color:#000;background-color:#000000e6;overflow-x:hidden;transition:.5s}.overlay-content{position:relative;top:25%;width:100%;text-align:center;margin-top:30px}.overlay p{padding:8px;text-decoration:none;font-size:36px;color:#818181;display:block;transition:.3s}.overlay a:hover,.overlay a:focus{color:#f1f1f1}.overlay .closebtn{position:absolute;top:20px;right:45px;font-size:60px}@media screen and (max-height: 450px){.overlay a{font-size:20px}.overlay .closebtn{font-size:40px;top:15px;right:35px}}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.ProgressbarComponent, selector: "progressbar", inputs: ["max", "animate", "striped", "type", "value"] }, { kind: "component", type: i11.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i12.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i12.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i12.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: JaceModulesBoardComponent, selector: "jace-modules-board", inputs: ["Modules"] }, { kind: "pipe", type: i4$1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
476
+ Navbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Navbar, deps: [{ token: i1$1.PreferencesService }, { token: i1$1.CacheService }, { token: i2.GlobalSearchService }, { token: i3$3.BaseMessageService }, { token: i3$3.NotificationsService }, { token: i4.MessageService }, { token: i5.LocalizationService }, { token: i3$2.HTTPService }, { token: i0.ChangeDetectorRef }, { token: i2.AppState }, { token: i2.TokenService }, { token: i1.Router }, { token: i2.CompletedJobRedirectionService }], target: i0.ɵɵFactoryTarget.Component });
477
+ Navbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Navbar, selector: "navbar", viewQueries: [{ propertyName: "navbar", first: true, predicate: ["navbar"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nav #navbar class=\"nav az-navbar fixed-top\">\r\n <!-- Logo -->\r\n <a class=\"navbar-brand\" routerLink=\"/pages/dashboard\">\r\n <img src=\"../assets/img/logo/logo.png\" class=\"d-md-block d-none\" style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-v d-md-block d-none\">{{ applicationVersion }}</div>\r\n\r\n <img src=\"../assets/img/logo/logo_sm.png\" class=\"d-md-none\" style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-sm-v d-md-none\">{{ applicationVersion }}</div>\r\n </a>\r\n\r\n <ul class=\"nav navbar-nav navbar-fillable\">\r\n <!-- Collapse men\u00F9 a sinistra -->\r\n <li><a (click)=\"toggleMenu()\" class=\"collapse-menu-link fa fa-navicon\"></a></li>\r\n\r\n <!-- Search -->\r\n <li class=\"d-none d-md-block app-relative\">\r\n <form class=\"app-search\" role=\"search\" (ngSubmit)=\"searchRequest()\">\r\n <input type=\"text\" placeholder=\"Search...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"searchModelChanged()\" [ngModelOptions]=\"{standalone : true}\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"ion-ios-search-strong\"></i></a>\r\n <button hidden></button>\r\n </form>\r\n </li>\r\n\r\n <ul class=\"nav right-section\">\r\n\r\n <!--Dropdown job in esecuzione-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a [class.fa-spin]=\"_state.jobsInProgress > 0\" class=\"fa fa-cog dropdown-toggle app-pointer nav-jobs-icon\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{ 'Completed' | localize : lc }}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!--Dropdown moduli-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"fa fa-th module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"module-board-menu container\" role=\"menu\">\r\n <div class=\"app-relative\"><jace-modules-board [Modules]=\"Modules\"></jace-modules-board></div>\r\n </ul>\r\n </div>\r\n\r\n <!-- Calendar ??? TODO ??? -->\r\n\r\n <!-- Chatrooms ??? TODO ??? -->\r\n\r\n <!--Dropdown User Menu-->\r\n <div class=\"pull-right user-menu app-no-selection\" dropdown container=\"body\" placement=\"bottom right\" style=\"height:50px;\">\r\n <a class=\"dropdown-toggle user-link app-pointer\" dropdownToggle>\r\n <div class=\"pull-left app-margin-right-10 app-relative\">\r\n <ng-container *ngTemplateOutlet=\"userIcon;\"></ng-container>\r\n </div>\r\n <div class=\"app-white-text pull-right d-none d-sm-block\">\r\n <ng-container *ngTemplateOutlet=\"debugInfos\"></ng-container>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </a>\r\n\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"user-info\">\r\n <div class=\"app-relative\">\r\n <ng-container *ngTemplateOutlet=\"userIcon; context: { $implicit: {right: 62} }\"></ng-container>\r\n </div>\r\n <div class=\"app-white-text app-margin-top-10 app-margin-bottom-10\">\r\n <ng-container *ngTemplateOutlet=\"debugInfos\"></ng-container>\r\n </div>\r\n </li>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"lc.Locale == 'en-US'\" (click)=\"lc.changeLocale('it-IT')\"><i class=\"fa fa-globe\">&nbsp;</i>Switch to Italian Site</a>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"lc.Locale == 'it-IT'\" (click)=\"lc.changeLocale('en-US')\"><i class=\"fa fa-globe\">&nbsp;</i>Passa al Sito in Inglese</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeModule()\"><i class=\"fa fa-th\">&nbsp;</i>{{'Cambia Modulo' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeTenant()\"><i class=\"fa fa-building\">&nbsp;</i>{{'Cambia Tenant' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\"><i class=\"fa fa-user-times\">&nbsp;</i>{{'Ripulisci le Preferenze Utente' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearAll()\"><i class=\"fa fa-recycle \">&nbsp;</i>{{'Ripulisci la Cache' | localize : lc}}</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"logout()\"><i class=\"fa fa-power-off\">&nbsp;</i>Log out</a>\r\n </ul>\r\n </div>\r\n </ul>\r\n </ul>\r\n</nav>\r\n\r\n<!-- Template per l'icona dell'utente -->\r\n<ng-template #userIcon let-context>\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context.right || undefined\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context.right || undefined\" *ngIf=\"_state.halloweenTime\">\r\n</ng-template>\r\n\r\n<!-- Template per le informaizoni di debug: Ambiente, ruoli, permessi ecc -->\r\n<ng-template #debugInfos>\r\n <div>{{CurrentIdentity?.FullName}} - ({{CurrentIdentity?.TenantName}})</div>\r\n <div class=\"text-sm-center\">\r\n <ng-container *ngIf=\"applicationEnvironment == 2\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 5\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 6\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 1\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity.Roles\">{{r}}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #ccc}.nav-jobs-menu-header{padding:8px;font-size:14px;background-color:#242d3a;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.nav.az-navbar{height:60px;align-items:center;background-color:#242d3a}.nav.az-navbar .navbar-brand{width:205px;padding-top:0;font-size:0;margin-left:10px}.navbar-nav{flex-direction:row}#lines{border-bottom:7px double;border-top:2px solid;border-color:#ffffffe6;content:\"\";height:3px;width:20px;box-sizing:content-box;cursor:pointer}#lines:hover{opacity:.8}.app-search{position:relative;margin-left:20px}.app-search a{position:absolute;top:3px;right:14px;font-size:16px;color:#ffffff4d}.app-search .form-control{border:1px solid rgba(255,255,255,.1);font-size:11px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:190px}.app-search input{border:1px solid rgba(255,255,255,.1);font-size:12px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:240px}.completer-selected-row{background-color:#0275d8!important;color:#fff!important;width:100%!important}.completer-row{width:100%!important;color:#fff!important}.completer-dropdown{margin-top:2px!important;background-color:#344154f7!important;color:#fff;border-color:#111!important;box-shadow:0 6px 12px #0003}.search-results{left:-85px;top:-2px;z-index:1050;color:#fff;background-color:#344154f7}.search-results .btn-sm{padding:.15rem .25rem;font-size:.5rem}.search-results:before{content:\"\";border:0px}.search-results a{color:#242d3a}.search-results a:hover{color:#fff;background-color:#0275d8;cursor:pointer}.search-results a i{margin-right:8px}.right-section{position:absolute;right:10px;top:10px}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#242d3a}.user-menu .dropdown-menu a:hover{color:#fff;background-color:#242d3a}.user-menu .dropdown-menu a i{margin-right:8px}.user-link{margin-right:6px}.user-link span{color:#fff;margin-left:7px;letter-spacing:.02em}.user-link img{width:40px;border-radius:50%}.user-link:hover,.user-link:focus{text-decoration:none}.user-info{background-color:#242d3a;padding:8px;text-align:center;width:240px;margin-bottom:5px}.user-info img{width:100px;margin-top:5px;border-radius:50%}.user-info p{color:#ebebeb;margin-top:10px}.user-info small{display:block}@media (max-width: 767px){.nav.az-navbar .navbar-brand{width:auto}}.navbar-search{color:#ffffff80!important}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 8px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.collapse-menu-link{color:#fff!important;font-size:20px;padding-top:5px;cursor:pointer}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.overlay{height:100%;width:100%;display:none;padding-left:10%;padding-right:10%;position:fixed;z-index:999999;left:0;top:0;background-color:#000;background-color:#000000e6;overflow-x:hidden;transition:.5s}.overlay-content{position:relative;top:25%;width:100%;text-align:center;margin-top:30px}.overlay p{padding:8px;text-decoration:none;font-size:36px;color:#818181;display:block;transition:.3s}.overlay a:hover,.overlay a:focus{color:#f1f1f1}.overlay .closebtn{position:absolute;top:20px;right:45px;font-size:60px}@media screen and (max-height: 450px){.overlay a{font-size:20px}.overlay .closebtn{font-size:40px;top:15px;right:35px}}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.ProgressbarComponent, selector: "progressbar", inputs: ["max", "animate", "striped", "type", "value"] }, { kind: "component", type: i11.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i12.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i12.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i12.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i13.EsTableComponent, selector: "es-table", inputs: ["EsTableTemplate", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "component", type: JaceModulesBoardComponent, selector: "jace-modules-board", inputs: ["Modules"] }, { kind: "pipe", type: i5.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
431
478
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Navbar, decorators: [{
432
479
  type: Component,
433
- args: [{ selector: "navbar", viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav #navbar class=\"nav az-navbar fixed-top\">\r\n <a class=\"navbar-brand\" routerLink=\"/pages/dashboard\">\r\n <img src=\"../assets/img/logo/logo.png\" alt=\"\" class=\"d-md-block d-none\"\r\n style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-v d-md-block d-none\">{{ applicationVersion }}</div>\r\n\r\n <img src=\"../assets/img/logo/logo_sm.png\" alt=\"\" class=\"d-md-none\"\r\n style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-sm-v d-md-none\">{{ applicationVersion }}</div>\r\n </a>\r\n\r\n <ul class=\"nav navbar-nav navbar-fillable\">\r\n <li>\r\n <a (click)=\"toggleMenu()\" class=\"collapse-menu-link fa fa-navicon\"></a>\r\n </li>\r\n <li class=\"d-none d-md-block\">\r\n <form role=\"search\" class=\"app-search\">\r\n <input type=\"text\" placeholder=\"Search...\" class=\"form-control\">\r\n <a><i class=\"fa fa-search\" style=\"color: #aaa\"></i></a>\r\n </form>\r\n </li>\r\n\r\n <ul class=\"nav right-section\">\r\n\r\n <!--Dropdown job in esecuzione-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a [class.fa-spin]=\"_state.jobsInProgress > 0\" class=\"fa fa-cog dropdown-toggle app-pointer nav-jobs-icon\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{ 'Completed' | localize : lc }}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!--Dropdown moduli-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"fa fa-th module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle>\r\n </a>\r\n <ul *dropdownMenu class=\"module-board-menu container\" role=\"menu\">\r\n <div class=\"app-relative\">\r\n <jace-modules-board [Modules]=\"Modules\"></jace-modules-board>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!-- USER MENU -->\r\n <div class=\"pull-right user-menu app-no-selection\" dropdown container=\"body\" placement=\"bottom right\" style=\"height:50px;\">\r\n <a class=\"dropdown-toggle user-link app-pointer\" dropdownToggle>\r\n <div class=\"pull-left app-margin-right-10 app-relative\">\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" *ngIf=\"_state.halloweenTime\">\r\n </div>\r\n <div class=\"pull-right d-none d-sm-block\">\r\n <div class=\"app-white-text\">\r\n {{LastIdentity?.FullName}} - ({{LastIdentity?.TenantName}})\r\n </div>\r\n <div class=\"app-white-text text-sm-center\">\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 2\">\r\n {{'Ambiente di Sviluppo' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 5\">\r\n {{'Ambiente di Staging' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 6\">\r\n {{'Ambiente di Staging A' | localize : lc}}\r\n </ng-container>\r\n <ng-container *ngIf=\"myconfig.AppData.ComponentEnvironment == 1\">\r\n {{'Ambiente di Produzione' | localize : lc}}\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </a>\r\n\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"user-info\">\r\n <div class=\"app-relative\">\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" style=\"right:62px;\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" style=\"right:62px;\" *ngIf=\"_state.halloweenTime\">\r\n </div>\r\n <div class=\"app-white-text app-margin-top-10 app-margin-bottom-10\">\r\n <div>\r\n {{LastIdentity?.FullName}} - ({{LastIdentity?.TenantName}})\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 2\">\r\n {{'Ambiente di Sviluppo' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 5\">\r\n {{'Ambiente di Staging' | localize : lc}}\r\n </div>\r\n <div *ngIf=\"myconfig.AppData.ComponentEnvironment == 6\">\r\n {{'Ambiente di Staging A' | localize : lc}}\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n </li>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"thisLoc == 'en-US'\" (click)=\"lc.changeLocale('it-IT')\"><i class=\"fa fa-globe\">&nbsp;</i>Switch to Italian Site</a>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"thisLoc == 'it-IT'\" (click)=\"lc.changeLocale('en-US')\"><i class=\"fa fa-globe\">&nbsp;</i>Passa al Sito in Inglese</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeModule()\"><i class=\"fa fa-th\">&nbsp;</i>{{'Cambia Modulo' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeTenant()\"><i class=\"fa fa-building\">&nbsp;</i>{{'Cambia Tenant' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\"><i class=\"fa fa-user-times\">&nbsp;</i>{{'Ripulisci le Preferenze Utente' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearAll()\"><i class=\"fa fa-recycle \">&nbsp;</i>{{'Ripulisci la Cache' | localize : lc}}</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"logout()\"><i class=\"fa fa-power-off\">&nbsp;</i>Log out</a>\r\n </ul>\r\n </div>\r\n </ul>\r\n </ul>\r\n</nav>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #ccc}.nav-jobs-menu-header{padding:8px;font-size:14px;background-color:#242d3a;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.nav.az-navbar{height:60px;align-items:center;background-color:#242d3a}.nav.az-navbar .navbar-brand{width:205px;padding-top:0;font-size:0;margin-left:10px}.navbar-nav{flex-direction:row}#lines{border-bottom:7px double;border-top:2px solid;border-color:#ffffffe6;content:\"\";height:3px;width:20px;box-sizing:content-box;cursor:pointer}#lines:hover{opacity:.8}.app-search{position:relative;margin-left:20px}.app-search a{position:absolute;top:3px;right:14px;font-size:16px;color:#ffffff4d}.app-search .form-control{border:1px solid rgba(255,255,255,.1);font-size:11px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:190px}.app-search input{border:1px solid rgba(255,255,255,.1);font-size:12px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:240px}.completer-selected-row{background-color:#0275d8!important;color:#fff!important;width:100%!important}.completer-row{width:100%!important;color:#fff!important}.completer-dropdown{margin-top:2px!important;background-color:#344154f7!important;color:#fff;border-color:#111!important;box-shadow:0 6px 12px #0003}.search-results{left:-85px;top:-2px;z-index:1050;color:#fff;background-color:#344154f7}.search-results .btn-sm{padding:.15rem .25rem;font-size:.5rem}.search-results:before{content:\"\";border:0px}.search-results a{color:#242d3a}.search-results a:hover{color:#fff;background-color:#0275d8;cursor:pointer}.search-results a i{margin-right:8px}.right-section{position:absolute;right:10px;top:10px}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#242d3a}.user-menu .dropdown-menu a:hover{color:#fff;background-color:#242d3a}.user-menu .dropdown-menu a i{margin-right:8px}.user-link{margin-right:6px}.user-link span{color:#fff;margin-left:7px;letter-spacing:.02em}.user-link img{width:40px;border-radius:50%}.user-link:hover,.user-link:focus{text-decoration:none}.user-info{background-color:#242d3a;padding:8px;text-align:center;width:240px;margin-bottom:5px}.user-info img{width:100px;margin-top:5px;border-radius:50%}.user-info p{color:#ebebeb;margin-top:10px}.user-info small{display:block}@media (max-width: 767px){.nav.az-navbar .navbar-brand{width:auto}}.navbar-search{color:#ffffff80!important}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 8px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.collapse-menu-link{color:#fff!important;font-size:20px;padding-top:5px;cursor:pointer}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.overlay{height:100%;width:100%;display:none;padding-left:10%;padding-right:10%;position:fixed;z-index:999999;left:0;top:0;background-color:#000;background-color:#000000e6;overflow-x:hidden;transition:.5s}.overlay-content{position:relative;top:25%;width:100%;text-align:center;margin-top:30px}.overlay p{padding:8px;text-decoration:none;font-size:36px;color:#818181;display:block;transition:.3s}.overlay a:hover,.overlay a:focus{color:#f1f1f1}.overlay .closebtn{position:absolute;top:20px;right:45px;font-size:60px}@media screen and (max-height: 450px){.overlay a{font-size:20px}.overlay .closebtn{font-size:40px;top:15px;right:35px}}\n"] }]
434
- }], ctorParameters: function () { return [{ type: i1$1.PreferencesService }, { type: i1$1.CacheService }, { type: i2.BaseMessageService }, { type: i2.NotificationsService }, { type: i3$3.MessageService }, { type: i4$1.LocalizationService }, { type: i3$2.HTTPService }, { type: i0.ChangeDetectorRef }, { type: i4.AppState }, { type: i4.TokenService }, { type: i1.Router }]; }, propDecorators: { navbar: [{
480
+ args: [{ selector: "navbar", viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav #navbar class=\"nav az-navbar fixed-top\">\r\n <!-- Logo -->\r\n <a class=\"navbar-brand\" routerLink=\"/pages/dashboard\">\r\n <img src=\"../assets/img/logo/logo.png\" class=\"d-md-block d-none\" style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-v d-md-block d-none\">{{ applicationVersion }}</div>\r\n\r\n <img src=\"../assets/img/logo/logo_sm.png\" class=\"d-md-none\" style=\"margin-top: 10px; margin-bottom: -10px;\">\r\n <div class=\"app-fe-sm-v d-md-none\">{{ applicationVersion }}</div>\r\n </a>\r\n\r\n <ul class=\"nav navbar-nav navbar-fillable\">\r\n <!-- Collapse men\u00F9 a sinistra -->\r\n <li><a (click)=\"toggleMenu()\" class=\"collapse-menu-link fa fa-navicon\"></a></li>\r\n\r\n <!-- Search -->\r\n <li class=\"d-none d-md-block app-relative\">\r\n <form class=\"app-search\" role=\"search\" (ngSubmit)=\"searchRequest()\">\r\n <input type=\"text\" placeholder=\"Search...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"searchModelChanged()\" [ngModelOptions]=\"{standalone : true}\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"ion-ios-search-strong\"></i></a>\r\n <button hidden></button>\r\n </form>\r\n </li>\r\n\r\n <ul class=\"nav right-section\">\r\n\r\n <!--Dropdown job in esecuzione-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a [class.fa-spin]=\"_state.jobsInProgress > 0\" class=\"fa fa-cog dropdown-toggle app-pointer nav-jobs-icon\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\" class=\"app-link app-no-selection app-inline app-pointer\" (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{ 'Completed' | localize : lc }}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\" [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\" [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n <!--Dropdown moduli-->\r\n <div class=\"pull-right user-menu app-no-selection app-margin-right-10\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"fa fa-th module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"module-board-menu container\" role=\"menu\">\r\n <div class=\"app-relative\"><jace-modules-board [Modules]=\"Modules\"></jace-modules-board></div>\r\n </ul>\r\n </div>\r\n\r\n <!-- Calendar ??? TODO ??? -->\r\n\r\n <!-- Chatrooms ??? TODO ??? -->\r\n\r\n <!--Dropdown User Menu-->\r\n <div class=\"pull-right user-menu app-no-selection\" dropdown container=\"body\" placement=\"bottom right\" style=\"height:50px;\">\r\n <a class=\"dropdown-toggle user-link app-pointer\" dropdownToggle>\r\n <div class=\"pull-left app-margin-right-10 app-relative\">\r\n <ng-container *ngTemplateOutlet=\"userIcon;\"></ng-container>\r\n </div>\r\n <div class=\"app-white-text pull-right d-none d-sm-block\">\r\n <ng-container *ngTemplateOutlet=\"debugInfos\"></ng-container>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </a>\r\n\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"user-info\">\r\n <div class=\"app-relative\">\r\n <ng-container *ngTemplateOutlet=\"userIcon; context: { $implicit: {right: 62} }\"></ng-container>\r\n </div>\r\n <div class=\"app-white-text app-margin-top-10 app-margin-bottom-10\">\r\n <ng-container *ngTemplateOutlet=\"debugInfos\"></ng-container>\r\n </div>\r\n </li>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"lc.Locale == 'en-US'\" (click)=\"lc.changeLocale('it-IT')\"><i class=\"fa fa-globe\">&nbsp;</i>Switch to Italian Site</a>\r\n <a class=\"dropdown-item app-pointer\" *ngIf=\"lc.Locale == 'it-IT'\" (click)=\"lc.changeLocale('en-US')\"><i class=\"fa fa-globe\">&nbsp;</i>Passa al Sito in Inglese</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeModule()\"><i class=\"fa fa-th\">&nbsp;</i>{{'Cambia Modulo' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"changeTenant()\"><i class=\"fa fa-building\">&nbsp;</i>{{'Cambia Tenant' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\"><i class=\"fa fa-user-times\">&nbsp;</i>{{'Ripulisci le Preferenze Utente' | localize : lc}}</a>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"clearAll()\"><i class=\"fa fa-recycle \">&nbsp;</i>{{'Ripulisci la Cache' | localize : lc}}</a>\r\n <div class=\"dropdown-divider\"></div>\r\n <a class=\"dropdown-item app-pointer\" (click)=\"logout()\"><i class=\"fa fa-power-off\">&nbsp;</i>Log out</a>\r\n </ul>\r\n </div>\r\n </ul>\r\n </ul>\r\n</nav>\r\n\r\n<!-- Template per l'icona dell'utente -->\r\n<ng-template #userIcon let-context>\r\n <img src='../assets/img/users/user.jpg' alt=\"user-img\" class=\"img-circle user-img\">\r\n <img src='../assets/img/events/christmas.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context.right || undefined\" *ngIf=\"_state.christmasTime\">\r\n <img src='../assets/img/events/halloween.png' alt=\"user-img\" class=\"img-circle user-img app-absolute app-right-0\" [style.right.px]=\"context.right || undefined\" *ngIf=\"_state.halloweenTime\">\r\n</ng-template>\r\n\r\n<!-- Template per le informaizoni di debug: Ambiente, ruoli, permessi ecc -->\r\n<ng-template #debugInfos>\r\n <div>{{CurrentIdentity?.FullName}} - ({{CurrentIdentity?.TenantName}})</div>\r\n <div class=\"text-sm-center\">\r\n <ng-container *ngIf=\"applicationEnvironment == 2\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 5\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 6\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 1\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n </div>\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity.Roles\">{{r}}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: [".nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #ccc}.nav-jobs-menu-header{padding:8px;font-size:14px;background-color:#242d3a;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.nav.az-navbar{height:60px;align-items:center;background-color:#242d3a}.nav.az-navbar .navbar-brand{width:205px;padding-top:0;font-size:0;margin-left:10px}.navbar-nav{flex-direction:row}#lines{border-bottom:7px double;border-top:2px solid;border-color:#ffffffe6;content:\"\";height:3px;width:20px;box-sizing:content-box;cursor:pointer}#lines:hover{opacity:.8}.app-search{position:relative;margin-left:20px}.app-search a{position:absolute;top:3px;right:14px;font-size:16px;color:#ffffff4d}.app-search .form-control{border:1px solid rgba(255,255,255,.1);font-size:11px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:190px}.app-search input{border:1px solid rgba(255,255,255,.1);font-size:12px;letter-spacing:.03em;height:30px;color:#fff;padding:7px 40px 7px 20px;background:rgba(255,255,255,.05);box-shadow:none;border-radius:30px;width:240px}.completer-selected-row{background-color:#0275d8!important;color:#fff!important;width:100%!important}.completer-row{width:100%!important;color:#fff!important}.completer-dropdown{margin-top:2px!important;background-color:#344154f7!important;color:#fff;border-color:#111!important;box-shadow:0 6px 12px #0003}.search-results{left:-85px;top:-2px;z-index:1050;color:#fff;background-color:#344154f7}.search-results .btn-sm{padding:.15rem .25rem;font-size:.5rem}.search-results:before{content:\"\";border:0px}.search-results a{color:#242d3a}.search-results a:hover{color:#fff;background-color:#0275d8;cursor:pointer}.search-results a i{margin-right:8px}.right-section{position:absolute;right:10px;top:10px}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#242d3a}.user-menu .dropdown-menu a:hover{color:#fff;background-color:#242d3a}.user-menu .dropdown-menu a i{margin-right:8px}.user-link{margin-right:6px}.user-link span{color:#fff;margin-left:7px;letter-spacing:.02em}.user-link img{width:40px;border-radius:50%}.user-link:hover,.user-link:focus{text-decoration:none}.user-info{background-color:#242d3a;padding:8px;text-align:center;width:240px;margin-bottom:5px}.user-info img{width:100px;margin-top:5px;border-radius:50%}.user-info p{color:#ebebeb;margin-top:10px}.user-info small{display:block}@media (max-width: 767px){.nav.az-navbar .navbar-brand{width:auto}}.navbar-search{color:#ffffff80!important}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 8px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.collapse-menu-link{color:#fff!important;font-size:20px;padding-top:5px;cursor:pointer}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.overlay{height:100%;width:100%;display:none;padding-left:10%;padding-right:10%;position:fixed;z-index:999999;left:0;top:0;background-color:#000;background-color:#000000e6;overflow-x:hidden;transition:.5s}.overlay-content{position:relative;top:25%;width:100%;text-align:center;margin-top:30px}.overlay p{padding:8px;text-decoration:none;font-size:36px;color:#818181;display:block;transition:.3s}.overlay a:hover,.overlay a:focus{color:#f1f1f1}.overlay .closebtn{position:absolute;top:20px;right:45px;font-size:60px}@media screen and (max-height: 450px){.overlay a{font-size:20px}.overlay .closebtn{font-size:40px;top:15px;right:35px}}\n"] }]
481
+ }], ctorParameters: function () { return [{ type: i1$1.PreferencesService }, { type: i1$1.CacheService }, { type: i2.GlobalSearchService }, { type: i3$3.BaseMessageService }, { type: i3$3.NotificationsService }, { type: i4.MessageService }, { type: i5.LocalizationService }, { type: i3$2.HTTPService }, { type: i0.ChangeDetectorRef }, { type: i2.AppState }, { type: i2.TokenService }, { type: i1.Router }, { type: i2.CompletedJobRedirectionService }]; }, propDecorators: { navbar: [{
435
482
  type: ViewChild,
436
483
  args: ["navbar", { static: false }]
437
484
  }] } });
438
485
 
439
- // Angular
440
- class SidebarService {
441
- constructor(utiExts, aac, menuItems) {
442
- this.utiExts = utiExts;
443
- this.aac = aac;
444
- this.menuItems = menuItems;
445
- this.custom_permissions = [];
446
- }
447
- getMenuItems() {
448
- var items = [];
449
- var itemsTMP = this.utiExts.deepClone(this.menuItems);
450
- itemsTMP.forEach(t => {
451
- if (!t.ac || this.aac.has(t.ac)) {
452
- if (!t.subMenu || t.subMenu.length == 0)
453
- items.push(t);
454
- else {
455
- var toPush = this.checkSubMenuOverClaims(t);
456
- items.push(toPush);
457
- }
458
- }
459
- // Calcolo qui per non doverlo calcolare lato HTML
460
- t.padding_left = t.level > 2 ? (65 + ((t.level - 3) * 15) + 'px !important') : null;
461
- });
462
- return items;
463
- }
464
- checkSubMenuOverClaims(menuItem) {
465
- var menuTMP = this.utiExts.deepClone(menuItem);
466
- menuTMP.subMenu = [];
467
- menuItem.subMenu.forEach(t => {
468
- if (!t.ac || this.aac.has(t.ac)) {
469
- if (!t.subMenu || t.subMenu.length == 0)
470
- menuTMP.subMenu.push(t);
471
- else {
472
- var toPush = this.checkSubMenuOverClaims(t);
473
- menuTMP.subMenu.push(toPush);
474
- }
475
- }
476
- });
477
- return menuTMP;
478
- }
479
- }
480
- SidebarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SidebarService, deps: [{ token: i3$3.UtilityService }, { token: i2$1.AccessControlService }, { token: MENU }], target: i0.ɵɵFactoryTarget.Injectable });
481
- SidebarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SidebarService });
482
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SidebarService, decorators: [{
483
- type: Injectable
484
- }], ctorParameters: function () { return [{ type: i3$3.UtilityService }, { type: i2$1.AccessControlService }, { type: undefined, decorators: [{
485
- type: Inject,
486
- args: [MENU]
487
- }] }]; } });
488
- class MenuItem {
489
- }
490
-
491
486
  // Angular
492
487
  class Sidebar {
493
- constructor(lc, lcMenu, cdr, _elementRef, _router, _state, _sidebarService, zone) {
488
+ constructor(lc, lcMenu, cdr, _elementRef, _router, _state, zone, utiExts, aac, menuItemsRaw, menuFilteringService) {
494
489
  this.lc = lc;
495
490
  this.cdr = cdr;
496
491
  this._elementRef = _elementRef;
497
492
  this._router = _router;
498
493
  this._state = _state;
499
- this._sidebarService = _sidebarService;
500
494
  this.zone = zone;
495
+ this.utiExts = utiExts;
496
+ this.aac = aac;
497
+ this.menuItemsRaw = menuItemsRaw;
498
+ this.menuFilteringService = menuFilteringService;
501
499
  this.isMenuCollapsed = false;
502
500
  this.isMenuShouldCollapsed = false;
501
+ this.lc = this.lc.generateFromType(lcMenu);
503
502
  this._state.subscribe("menu.isCollapsed", (isCollapsed) => {
504
503
  this.isMenuCollapsed = isCollapsed;
505
504
  this.cdr.markForCheck();
@@ -511,35 +510,55 @@ class Sidebar {
511
510
  this._router.events.subscribe(event => {
512
511
  if (event instanceof NavigationEnd) {
513
512
  let width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
514
- if (width <= 768) {
513
+ if (width <= 768)
515
514
  this._state.notifyDataChanged("menu.isCollapsed", true);
516
- }
517
515
  window.scrollTo(0, 0);
518
516
  }
519
517
  });
520
- this.lc = this.lc.generateFromType(lcMenu);
521
518
  }
522
- ngOnInit() {
523
- // Ivnentarsi una sorta di refresh
524
- this.init();
525
- }
526
- init() {
527
- var mi = this._sidebarService.getMenuItems();
528
- ;
529
- for (let i = 0; i < mi.length; i++)
530
- this.assignLevel(mi[i], 1);
531
- this.menuItems = mi;
519
+ async ngOnInit() {
520
+ let tmpMenuItems = this.getMenuItems();
521
+ this.menuItems = await firstValueFrom(this.menuFilteringService.filter(tmpMenuItems));
532
522
  if (this._shouldMenuCollapse())
533
523
  this.menuCollapse();
534
524
  this.updateSidebarHeight();
535
525
  this._state.setSidebarWidth(this.sidebar.nativeElement.offsetWidth);
526
+ this.cdr.markForCheck();
536
527
  }
537
- assignLevel(menuItem, level) {
538
- menuItem.level = level;
539
- if (!menuItem.subMenu)
540
- return;
541
- for (let i = 0; i < menuItem.subMenu.length; i++)
542
- this.assignLevel(menuItem.subMenu[i], level + 1);
528
+ getMenuItems() {
529
+ var items = [];
530
+ for (let i = 0; i < this.menuItemsRaw.length; i++) {
531
+ let t = this.menuItemsRaw[i];
532
+ t.level = 1;
533
+ if (!t.ac || this.aac.has(t.ac)) {
534
+ if (!t.subMenu || t.subMenu.length == 0)
535
+ items.push(t);
536
+ else {
537
+ var toPush = this.checkSubMenuOverClaims(t, 1);
538
+ items.push(toPush);
539
+ }
540
+ }
541
+ }
542
+ return items;
543
+ }
544
+ checkSubMenuOverClaims(menuItem, level) {
545
+ var item = this.utiExts.deepClone(menuItem);
546
+ item.subMenu = [];
547
+ for (let i = 0; i < menuItem.subMenu.length; i++) {
548
+ let t = menuItem.subMenu[i];
549
+ t.level = level + 1;
550
+ if (!t.ac || this.aac.has(t.ac)) {
551
+ if (!t.subMenu || t.subMenu.length == 0)
552
+ item.subMenu.push(t);
553
+ else {
554
+ var toPush = this.checkSubMenuOverClaims(t, level + 1);
555
+ item.subMenu.push(toPush);
556
+ }
557
+ }
558
+ // Calcolo qui per non doverlo calcolare lato HTML
559
+ t.padding_left = level > 2 ? (65 + ((level - 3) * 15) + 'px !important') : null;
560
+ }
561
+ return item;
543
562
  }
544
563
  onWindowResize() {
545
564
  var isMenuShouldCollapsed = this._shouldMenuCollapse();
@@ -580,7 +599,7 @@ class Sidebar {
580
599
  this.menuHeight = this._elementRef.nativeElement.children[0].clientHeight - 60;
581
600
  }
582
601
  //Nonostante questa funzione sia collegata con (click.out-zone) per qualche motivo angular le esegue comunque nella sua zone
583
- //generando un po' di irresponsivit� iniziale... succede solo col click... boh
602
+ //generando un po' di irresponsività iniziale... succede solo col click... boh
584
603
  collapseMenu($event, item) {
585
604
  if (this.isMenuCollapsed)
586
605
  this.menuExpand();
@@ -595,15 +614,15 @@ class Sidebar {
595
614
  let levelClassPlusOne = item.level ? "level-" + (item.level + 1) : "";
596
615
  let slidePeriod = 400;
597
616
  var link = jQuery($event.currentTarget);
598
- //Se l'elemento non espanso
617
+ //Se l'elemento non è espanso
599
618
  if (!link.closest(".sidebar-item-expanded" + "_" + levelClass).length) {
600
619
  //Tiro su tutti gli elementi dello stesso livello espansi e li chiudo
601
- //Se ho compresso un menu vado a vedere se c' anche un altro menu di livello pi� basso da richiudere
620
+ //Se ho compresso un menu vado a vedere se c'è anche un altro menu di livello pi� basso da richiudere
602
621
  jQuery("ul.nav-sidebar li" + "." + (levelClassPlusOne)).each(function () {
603
622
  let closestLi = jQuery(this).closest("li");
604
623
  if (closestLi.children("ul").length && closestLi.hasClass("sidebar-item-expanded")) {
605
624
  closestLi.children("ul").slideUp(slidePeriod);
606
- //Le uso sempre entrambe insieme. La prima la classe per la logica, la seconda per le animazioni
625
+ //Le uso sempre entrambe insieme. La prima è la classe per la logica, la seconda per le animazioni
607
626
  closestLi.removeClass("sidebar-item-expanded" + "_" + (levelClassPlusOne));
608
627
  closestLi.removeClass("sidebar-item-expanded");
609
628
  }
@@ -613,7 +632,7 @@ class Sidebar {
613
632
  let closestLi = jQuery(this).closest("li");
614
633
  if (closestLi.children("ul").length && closestLi.hasClass("sidebar-item-expanded")) {
615
634
  closestLi.children("ul").slideUp(slidePeriod);
616
- //Le uso sempre entrambe insieme. La prima la classe per la logica, la seconda per le animazioni
635
+ //Le uso sempre entrambe insieme. La prima è la classe per la logica, la seconda per le animazioni
617
636
  closestLi.removeClass("sidebar-item-expanded" + "_" + levelClass);
618
637
  closestLi.removeClass("sidebar-item-expanded");
619
638
  }
@@ -621,15 +640,15 @@ class Sidebar {
621
640
  //Dopodich� espando quello attuale
622
641
  link.next().slideDown(slidePeriod);
623
642
  if (item.subMenu) {
624
- //Le uso sempre entrambe insieme. La prima la classe per la logica, la seconda per le animazioni
643
+ //Le uso sempre entrambe insieme. La prima è la classe per la logica, la seconda per le animazioni
625
644
  link.closest("li").addClass("sidebar-item-expanded" + "_" + levelClass);
626
645
  link.closest("li").addClass("sidebar-item-expanded");
627
646
  }
628
647
  }
629
648
  else {
630
- //Altrimenti, se l'elemento gi� espanso lo chiudo
649
+ //Altrimenti, se l'elemento è già espanso lo chiudo
631
650
  if (item.subMenu) {
632
- //Le uso sempre entrambe insieme. La prima la classe per la logica, la seconda per le animazioni
651
+ //Le uso sempre entrambe insieme. La prima è la classe per la logica, la seconda per le animazioni
633
652
  link.closest("li").removeClass("sidebar-item-expanded" + "_" + levelClass);
634
653
  link.closest("li").removeClass("sidebar-item-expanded");
635
654
  }
@@ -637,17 +656,20 @@ class Sidebar {
637
656
  }
638
657
  }
639
658
  }
640
- Sidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Sidebar, deps: [{ token: i4$1.LocalizationService }, { token: MENU_LOCALIZATION, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.Router }, { token: i4.AppState }, { token: SidebarService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
641
- Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Sidebar, selector: "sidebar", host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [SidebarService], viewQueries: [{ propertyName: "sidebar", first: true, predicate: ["sidebar"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"app-sidebar\" #sidebar [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\" style=\"position:relative; zoom:1\">\r\n\r\n <li *ngFor=\"let item of menuItems\" class=\"sidebar-list-item level-{{item.level}}\" [ngClass]=\"{'has-sub-menu': item.subMenu, 'sidebar-item-expanded': item.expanded}\" [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: item}\"></ng-container>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"sidebar-hover-elem\"></div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>", styles: [".app-sidebar{background:#344154;height:100%;min-height:100%;position:fixed;width:230px;overflow:hidden;display:block;z-index:9;margin-top:60px}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid rgba(36,45,58,.5);box-shadow:0 1px #ffffff1a}.sidebar-item-wip{cursor:default}.sidebar-item-wip a{color:#999!important}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;color:#fff;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#242d3a}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#242d3a80}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-bottom:1px solid rgba(36,45,58,.7)}.sidebar-sublist li:last-child{border-bottom:none}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;color:#fff;padding-left:40px!important;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:FontAwesome;content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#242d3a}.sidebar-sublist .subitem-submenu-list li{border-top:1px solid rgba(36,45,58,.7)}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#242d3a80}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background:#637CA0;position:absolute;top:-150px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#637ca0}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}\n"], dependencies: [{ kind: "directive", type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i6.SlimScroll, selector: "[slim-scroll]", inputs: ["slimScrollOptions"] }, { kind: "pipe", type: i4$1.LocalizePipe, name: "localize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
659
+ Sidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Sidebar, deps: [{ token: i5.LocalizationService }, { token: MENU_LOCALIZATION, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.Router }, { token: i2.AppState }, { token: i0.NgZone }, { token: i4.UtilityService }, { token: i5$1.AccessControlService }, { token: MENU }, { token: i2.MenuFilteringService }], target: i0.ɵɵFactoryTarget.Component });
660
+ Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Sidebar, selector: "sidebar", host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "sidebar", first: true, predicate: ["sidebar"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"app-sidebar\" #sidebar [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\" style=\"position:relative; zoom:1\">\r\n\r\n <li *ngFor=\"let item of menuItems\" class=\"sidebar-list-item level-{{item.level}}\" [ngClass]=\"{'has-sub-menu': item.subMenu, 'sidebar-item-expanded': item.expanded}\" [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: item}\"></ng-container>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"sidebar-hover-elem\"></div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>", styles: [".app-sidebar{background:#344154;height:100%;min-height:100%;position:fixed;width:230px;overflow:hidden;display:block;z-index:9;margin-top:60px}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid rgba(36,45,58,.5);box-shadow:0 1px #ffffff1a}.sidebar-item-wip{cursor:default}.sidebar-item-wip a{color:#999!important}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;color:#fff;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#242d3a}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#242d3a80}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-bottom:1px solid rgba(36,45,58,.7)}.sidebar-sublist li:last-child{border-bottom:none}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;color:#fff;padding-left:40px!important;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:FontAwesome;content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#242d3a}.sidebar-sublist .subitem-submenu-list li{border-top:1px solid rgba(36,45,58,.7)}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#242d3a80}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background:#637CA0;position:absolute;top:-150px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#637ca0}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}\n"], dependencies: [{ kind: "directive", type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i7.SlimScroll, selector: "[slim-scroll]", inputs: ["slimScrollOptions"] }, { kind: "pipe", type: i5.LocalizePipe, name: "localize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
642
661
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Sidebar, decorators: [{
643
662
  type: Component,
644
- args: [{ selector: "sidebar", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [SidebarService], template: "<div class=\"app-sidebar\" #sidebar [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\" style=\"position:relative; zoom:1\">\r\n\r\n <li *ngFor=\"let item of menuItems\" class=\"sidebar-list-item level-{{item.level}}\" [ngClass]=\"{'has-sub-menu': item.subMenu, 'sidebar-item-expanded': item.expanded}\" [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: item}\"></ng-container>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"sidebar-hover-elem\"></div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>", styles: [".app-sidebar{background:#344154;height:100%;min-height:100%;position:fixed;width:230px;overflow:hidden;display:block;z-index:9;margin-top:60px}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid rgba(36,45,58,.5);box-shadow:0 1px #ffffff1a}.sidebar-item-wip{cursor:default}.sidebar-item-wip a{color:#999!important}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;color:#fff;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#242d3a}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#242d3a80}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-bottom:1px solid rgba(36,45,58,.7)}.sidebar-sublist li:last-child{border-bottom:none}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;color:#fff;padding-left:40px!important;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:FontAwesome;content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#242d3a}.sidebar-sublist .subitem-submenu-list li{border-top:1px solid rgba(36,45,58,.7)}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#242d3a80}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background:#637CA0;position:absolute;top:-150px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#637ca0}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}\n"] }]
645
- }], ctorParameters: function () { return [{ type: i4$1.LocalizationService }, { type: i0.Type, decorators: [{
663
+ args: [{ selector: "sidebar", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"app-sidebar\" #sidebar [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\" style=\"position:relative; zoom:1\">\r\n\r\n <li *ngFor=\"let item of menuItems\" class=\"sidebar-list-item level-{{item.level}}\" [ngClass]=\"{'has-sub-menu': item.subMenu, 'sidebar-item-expanded': item.expanded}\" [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: item}\"></ng-container>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"sidebar-hover-elem\"></div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>", styles: [".app-sidebar{background:#344154;height:100%;min-height:100%;position:fixed;width:230px;overflow:hidden;display:block;z-index:9;margin-top:60px}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid rgba(36,45,58,.5);box-shadow:0 1px #ffffff1a}.sidebar-item-wip{cursor:default}.sidebar-item-wip a{color:#999!important}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;color:#fff;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#242d3a}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#242d3a80}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-bottom:1px solid rgba(36,45,58,.7)}.sidebar-sublist li:last-child{border-bottom:none}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;color:#fff;padding-left:40px!important;height:42px;line-height:42px}.sidebar-sublist li a:before{font-family:FontAwesome;content:\"\\f1db\";margin-right:10px;font-size:10px}.sidebar-sublist li a:hover{background-color:#242d3a}.sidebar-sublist .subitem-submenu-list li{border-top:1px solid rgba(36,45,58,.7)}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#242d3a80}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background:#637CA0;position:absolute;top:-150px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{background-color:#637ca0}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}\n"] }]
664
+ }], ctorParameters: function () { return [{ type: i5.LocalizationService }, { type: i0.Type, decorators: [{
646
665
  type: Optional
647
666
  }, {
648
667
  type: Inject,
649
668
  args: [MENU_LOCALIZATION]
650
- }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.Router }, { type: i4.AppState }, { type: SidebarService }, { type: i0.NgZone }]; }, propDecorators: { sidebar: [{
669
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.Router }, { type: i2.AppState }, { type: i0.NgZone }, { type: i4.UtilityService }, { type: i5$1.AccessControlService }, { type: undefined, decorators: [{
670
+ type: Inject,
671
+ args: [MENU]
672
+ }] }, { type: i2.MenuFilteringService }]; }, propDecorators: { sidebar: [{
651
673
  type: ViewChild,
652
674
  args: ["sidebar", { static: true }]
653
675
  }], onWindowResize: [{
@@ -692,12 +714,12 @@ class PagesComponent {
692
714
  this.getHeight();
693
715
  }
694
716
  }
695
- PagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PagesComponent, deps: [{ token: i3.DomSanitizer }, { token: i4.AppState }, { token: i3$1.Location }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
717
+ PagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PagesComponent, deps: [{ token: i3.DomSanitizer }, { token: i2.AppState }, { token: i3$1.Location }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
696
718
  PagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: PagesComponent, selector: "pages", host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<navbar></navbar>\r\n<div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <sidebar></sidebar>\r\n <div class=\"main-wrapper\" [style.max-height.px]=\"maxHeight\" [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\">\r\n <div class=\"az-overlay\" *ngIf=\"!isMenuCollapsed\" (click)=\"hideMenu()\"></div>\r\n\r\n <div class=\"main\">\r\n <breadcrumb></breadcrumb>\r\n <router-outlet></router-outlet>\r\n </div>\r\n\r\n <back-top [position]=\"200\"></back-top>\r\n </div>\r\n </div>\r\n</div>", styles: [".main-wrapper{margin-left:230px;padding:20px 40px;margin-top:60px;position:relative;width:100%;overflow:auto}.main-wrapper.menu-collapsed{margin-left:50px}.main{height:100%;min-height:500px}.footer{padding-top:20px}.footer .footer-main{display:inline-block}.footer .footer-main .copyright{color:#242424;font-size:14px}.footer .footer-main .copyright a{color:#242d3a}.footer .footer-main .share{padding-left:5px;margin:0}.footer .footer-main .share li{list-style:none;float:left;margin-left:10px}.footer .footer-main .share li i{cursor:pointer;transition:all .1s ease;color:#fff;padding:9px 9px 6px;font-size:12px;border-radius:50%;background-color:#242d3a}.footer .footer-main .share li i.socicon-facebook{background-color:#3b5998}.footer .footer-main .share li i.socicon-twitter{background-color:#55acee}.footer .footer-main .share li i.socicon-instagram{background-color:#8a3ab9}.footer .footer-main .share li i.socicon-pinterest{background-color:#c92228}.footer .footer-main .share li i:hover{opacity:.9}.footer .created{color:#242424;font-size:14px}.footer .created i{color:red}.az-overlay{position:fixed;inset:0;z-index:8;background:rgba(36,45,58,.2);width:100%;height:100%;display:none}@media (max-width: 544px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:0;padding:30px 20px}.az-overlay{display:block}.footer .footer-main,.footer .created{float:none}}@media (min-width: 544px) and (max-width: 768px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:50px}.az-overlay{display:block}}\n"], dependencies: [{ kind: "directive", type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: BackTop, selector: "back-top", inputs: ["position", "showSpeed", "moveSpeed"] }, { kind: "component", type: Breadcrumb, selector: "breadcrumb" }, { kind: "component", type: Navbar, selector: "navbar" }, { kind: "component", type: Sidebar, selector: "sidebar" }], encapsulation: i0.ViewEncapsulation.None });
697
719
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PagesComponent, decorators: [{
698
720
  type: Component,
699
721
  args: [{ selector: "pages", encapsulation: ViewEncapsulation.None, template: "<navbar></navbar>\r\n<div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <sidebar></sidebar>\r\n <div class=\"main-wrapper\" [style.max-height.px]=\"maxHeight\" [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\">\r\n <div class=\"az-overlay\" *ngIf=\"!isMenuCollapsed\" (click)=\"hideMenu()\"></div>\r\n\r\n <div class=\"main\">\r\n <breadcrumb></breadcrumb>\r\n <router-outlet></router-outlet>\r\n </div>\r\n\r\n <back-top [position]=\"200\"></back-top>\r\n </div>\r\n </div>\r\n</div>", styles: [".main-wrapper{margin-left:230px;padding:20px 40px;margin-top:60px;position:relative;width:100%;overflow:auto}.main-wrapper.menu-collapsed{margin-left:50px}.main{height:100%;min-height:500px}.footer{padding-top:20px}.footer .footer-main{display:inline-block}.footer .footer-main .copyright{color:#242424;font-size:14px}.footer .footer-main .copyright a{color:#242d3a}.footer .footer-main .share{padding-left:5px;margin:0}.footer .footer-main .share li{list-style:none;float:left;margin-left:10px}.footer .footer-main .share li i{cursor:pointer;transition:all .1s ease;color:#fff;padding:9px 9px 6px;font-size:12px;border-radius:50%;background-color:#242d3a}.footer .footer-main .share li i.socicon-facebook{background-color:#3b5998}.footer .footer-main .share li i.socicon-twitter{background-color:#55acee}.footer .footer-main .share li i.socicon-instagram{background-color:#8a3ab9}.footer .footer-main .share li i.socicon-pinterest{background-color:#c92228}.footer .footer-main .share li i:hover{opacity:.9}.footer .created{color:#242424;font-size:14px}.footer .created i{color:red}.az-overlay{position:fixed;inset:0;z-index:8;background:rgba(36,45,58,.2);width:100%;height:100%;display:none}@media (max-width: 544px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:0;padding:30px 20px}.az-overlay{display:block}.footer .footer-main,.footer .created{float:none}}@media (min-width: 544px) and (max-width: 768px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:50px}.az-overlay{display:block}}\n"] }]
700
- }], ctorParameters: function () { return [{ type: i3.DomSanitizer }, { type: i4.AppState }, { type: i3$1.Location }, { type: i1.Router }]; }, propDecorators: { onResize: [{
722
+ }], ctorParameters: function () { return [{ type: i3.DomSanitizer }, { type: i2.AppState }, { type: i3$1.Location }, { type: i1.Router }]; }, propDecorators: { onResize: [{
701
723
  type: HostListener,
702
724
  args: ['window:resize', ['$event']]
703
725
  }] } });
@@ -713,7 +735,6 @@ class ExternalPagesComponent {
713
735
  this.Username = "";
714
736
  this.Password = "";
715
737
  this.Tenant = "";
716
- this._state.registerNavigation(this.route.snapshot);
717
738
  this.Username = this.route.snapshot.params["user"];
718
739
  this.Password = this.route.snapshot.params["pswd"];
719
740
  this.Tenant = this.route.snapshot.params["tnt"];
@@ -734,12 +755,12 @@ class ExternalPagesComponent {
734
755
  });
735
756
  }
736
757
  }
737
- ExternalPagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ExternalPagesComponent, deps: [{ token: i2$1.AccessControlService }, { token: i4$1.LocalizationService }, { token: i3$2.HTTPService }, { token: i4.AppState }, { token: i1.ActivatedRoute }, { token: i4.TokenService }], target: i0.ɵɵFactoryTarget.Component });
758
+ ExternalPagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ExternalPagesComponent, deps: [{ token: i5$1.AccessControlService }, { token: i5.LocalizationService }, { token: i3$2.HTTPService }, { token: i2.AppState }, { token: i1.ActivatedRoute }, { token: i2.TokenService }], target: i0.ɵɵFactoryTarget.Component });
738
759
  ExternalPagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ExternalPagesComponent, selector: "external-pages", ngImport: i0, template: "<router-outlet></router-outlet>", dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
739
760
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ExternalPagesComponent, decorators: [{
740
761
  type: Component,
741
762
  args: [{ selector: "external-pages", template: "<router-outlet></router-outlet>" }]
742
- }], ctorParameters: function () { return [{ type: i2$1.AccessControlService }, { type: i4$1.LocalizationService }, { type: i3$2.HTTPService }, { type: i4.AppState }, { type: i1.ActivatedRoute }, { type: i4.TokenService }]; } });
763
+ }], ctorParameters: function () { return [{ type: i5$1.AccessControlService }, { type: i5.LocalizationService }, { type: i3$2.HTTPService }, { type: i2.AppState }, { type: i1.ActivatedRoute }, { type: i2.TokenService }]; } });
743
764
 
744
765
  // Angular
745
766
  class JaceLoginComponent {
@@ -793,18 +814,113 @@ class RedirecterComponent {
793
814
  }
794
815
  }
795
816
  }
796
- RedirecterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RedirecterComponent, deps: [{ token: i4.AppState }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: REDIRECT_MAP, optional: true }], target: i0.ɵɵFactoryTarget.Component });
817
+ RedirecterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RedirecterComponent, deps: [{ token: i2.AppState }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: REDIRECT_MAP, optional: true }], target: i0.ɵɵFactoryTarget.Component });
797
818
  RedirecterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RedirecterComponent, selector: "redirecter", ngImport: i0, template: "<div *ngIf=\"Error\">{{Error}}</div>", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
798
819
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RedirecterComponent, decorators: [{
799
820
  type: Component,
800
821
  args: [{ selector: "redirecter", encapsulation: ViewEncapsulation.None, template: "<div *ngIf=\"Error\">{{Error}}</div>" }]
801
- }], ctorParameters: function () { return [{ type: i4.AppState }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: undefined, decorators: [{
822
+ }], ctorParameters: function () { return [{ type: i2.AppState }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: undefined, decorators: [{
802
823
  type: Optional
803
824
  }, {
804
825
  type: Inject,
805
826
  args: [REDIRECT_MAP]
806
827
  }] }]; } });
807
828
 
829
+ // Angular
830
+ class NavigableComponent extends ReactiveComponent {
831
+ constructor(injector) {
832
+ super();
833
+ this.Parameters = null;
834
+ let _activatedRoute = injector.get(ActivatedRoute);
835
+ let _state = injector.get(AppState);
836
+ _state.registerNavigationIfMeaningful(_activatedRoute.snapshot);
837
+ // Parametri in maniera "dinamica"
838
+ _activatedRoute.params.pipe(takeUntil$1(this.destroyed$)).subscribe(t => { this.Parameters = t; });
839
+ // Tutto il resto in maniera statica tanto non cambia
840
+ let segs = _activatedRoute.snapshot._urlSegment.segments;
841
+ this.CompletePath = "/" + segs.map(t => t.path).join('/');
842
+ this.ComponentPath = "/" + segs.filter((t, i) => i != 0).map(t => t.path).join('/');
843
+ this.BasePath = "/" + segs[0].path;
844
+ this.InternalNavigation = _activatedRoute.snapshot.data["internalNavigation"] || false;
845
+ this.Title = _activatedRoute.snapshot.data["title"] || "";
846
+ // Per i componenti navigabili non embeddati è inutile mandare il messaggio di navigazione
847
+ if (!_state.Embedded)
848
+ return;
849
+ // Se sono dentro un iframe risalgo a quello di livello più alto in assoluto
850
+ let tmpWindow = window;
851
+ // Quando il parent non esiste window. parent è un riferimento a se stesso
852
+ while (tmpWindow.parent != tmpWindow)
853
+ tmpWindow = tmpWindow.parent;
854
+ tmpWindow.postMessage({ type: "navigation", url: this.CompletePath, internalNavigation: this.InternalNavigation, title: this.Title }, "*");
855
+ }
856
+ }
857
+ NavigableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavigableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
858
+ NavigableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NavigableComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true });
859
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NavigableComponent, decorators: [{
860
+ type: Component,
861
+ args: [{ template: '' }]
862
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
863
+
864
+ // Angular
865
+ class JaceResourceComponent {
866
+ constructor(cdr, _state, sanitizer) {
867
+ this.cdr = cdr;
868
+ this._state = _state;
869
+ this.sanitizer = sanitizer;
870
+ this.Module = "";
871
+ this.ModuleKeyType = 'altid';
872
+ this.Page = "";
873
+ this.Height = 0;
874
+ this.sanitizedSourceResource = null;
875
+ }
876
+ ngOnInit() {
877
+ console.log("Initializing jace resource for " + this.Module);
878
+ if (this._state.Modules?.length > 0)
879
+ this.afterModulesRetrieve(this._state.Modules);
880
+ else {
881
+ this._state.subscribe("modules.Retrieved", (modules) => {
882
+ this.afterModulesRetrieve(modules);
883
+ this.cdr.markForCheck();
884
+ });
885
+ }
886
+ }
887
+ ngAfterViewInit() {
888
+ //let frame = document.getElementById("externalFrame");
889
+ //let rect = frame.getBoundingClientRect();
890
+ this.Height = window.innerHeight - 116;
891
+ console.log("Height: " + this.Height);
892
+ this.cdr.markForCheck();
893
+ }
894
+ afterModulesRetrieve(modules) {
895
+ let module = modules.find(t => (this.ModuleKeyType == 'id' ? t.idmodule : this.ModuleKeyType == 'altid' ? t.altname : "") == this.Module);
896
+ if (!module) {
897
+ console.error(`Impossibile trovare il modulo con ${this.ModuleKeyType} uguale a ${this.Module}`);
898
+ this.sanitizedSourceResource = null;
899
+ }
900
+ if (this.Page.startsWith("pages") || this.Page.startsWith("/pages")) {
901
+ console.error(`L'url della pagina da visitare non deve partire con 'pages', scrivere solo {modulo}/{pagina}`);
902
+ this.sanitizedSourceResource = null;
903
+ }
904
+ let moduleUrl = myconfig.AuthUrl.includes("localhost") ? `http://localhost:${this.Localhost}` : module.uiurl;
905
+ let finalUrl = `${moduleUrl}/#/pages_ext/${this.Page}`;
906
+ this.sanitizedSourceResource = this.sanitizer.bypassSecurityTrustResourceUrl(finalUrl);
907
+ }
908
+ }
909
+ JaceResourceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: JaceResourceComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i2.AppState }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
910
+ JaceResourceComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: JaceResourceComponent, selector: "jace-resource", inputs: { Module: "Module", ModuleKeyType: "ModuleKeyType", Page: "Page", Localhost: "Localhost" }, ngImport: i0, template: "<iframe *ngIf=\"!!sanitizedSourceResource\" id=\"externalFrame\" style=\"width: 100%; border: none;\" [style.height.px]=\"Height\" \r\n [src]=\"sanitizedSourceResource\">\r\n</iframe>", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
911
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: JaceResourceComponent, decorators: [{
912
+ type: Component,
913
+ args: [{ selector: "jace-resource", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<iframe *ngIf=\"!!sanitizedSourceResource\" id=\"externalFrame\" style=\"width: 100%; border: none;\" [style.height.px]=\"Height\" \r\n [src]=\"sanitizedSourceResource\">\r\n</iframe>" }]
914
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i2.AppState }, { type: i3.DomSanitizer }]; }, propDecorators: { Module: [{
915
+ type: Input
916
+ }], ModuleKeyType: [{
917
+ type: Input
918
+ }], Page: [{
919
+ type: Input
920
+ }], Localhost: [{
921
+ type: Input
922
+ }] } });
923
+
808
924
  // Angular
809
925
  const COMPONENTS = [
810
926
  BackTop,
@@ -818,7 +934,8 @@ const COMPONENTS = [
818
934
  JaceModulesBoardComponent,
819
935
  Navbar,
820
936
  RedirecterComponent,
821
- Sidebar
937
+ Sidebar,
938
+ JaceResourceComponent
822
939
  ];
823
940
  class ComponentsModule {
824
941
  }
@@ -834,7 +951,8 @@ ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
834
951
  JaceModulesBoardComponent,
835
952
  Navbar,
836
953
  RedirecterComponent,
837
- Sidebar], imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule, BsDropdownModule], exports: [BackTop,
954
+ Sidebar,
955
+ JaceResourceComponent], imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule, BsDropdownModule, EsTableModule], exports: [BackTop,
838
956
  Breadcrumb,
839
957
  PageNotFoundComponent,
840
958
  ServerErrorComponent,
@@ -845,12 +963,13 @@ ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
845
963
  JaceModulesBoardComponent,
846
964
  Navbar,
847
965
  RedirecterComponent,
848
- Sidebar] });
849
- ComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ComponentsModule, imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule, BsDropdownModule] });
966
+ Sidebar,
967
+ JaceResourceComponent] });
968
+ ComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ComponentsModule, imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule, BsDropdownModule, EsTableModule] });
850
969
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ComponentsModule, decorators: [{
851
970
  type: NgModule,
852
971
  args: [{
853
- imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule, BsDropdownModule],
972
+ imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule, BsDropdownModule, EsTableModule],
854
973
  declarations: [...COMPONENTS],
855
974
  exports: [...COMPONENTS]
856
975
  }]
@@ -860,5 +979,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
860
979
  * Generated bundle index. Do not edit.
861
980
  */
862
981
 
863
- export { AngularErrorComponent, BackTop, Breadcrumb, ComponentsModule, ExternalPagesComponent, JaceLoginComponent, JaceModulesBoardComponent, Navbar, PageNotFoundComponent, PagesComponent, RedirecterComponent, ServerErrorComponent, Sidebar };
982
+ export { AngularErrorComponent, BackTop, Breadcrumb, ComponentsModule, ExternalPagesComponent, JaceLoginComponent, JaceModulesBoardComponent, JaceResourceComponent, Navbar, NavigableComponent, PageNotFoundComponent, PagesComponent, ReactiveComponent, RedirecterComponent, ServerErrorComponent, Sidebar };
864
983
  //# sourceMappingURL=esfaenza-core-components.mjs.map