@esfaenza/core 15.2.183 → 15.2.185

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.
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-core.mjs","sources":["../../../projects/core/src/lib/app.component.ts","../../../projects/core/src/lib/app.component.html","../../../projects/core/src/lib/core.module.ts","../../../projects/core/src/esfaenza-core.ts"],"sourcesContent":["// Angular\r\nimport { Component, ViewEncapsulation } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n// Configurazioni\r\nimport { AppState, TokenService } from \"@esfaenza/core/services\";\r\n\r\n/* N.B: Questo componente non può diventare standalone. È il punto di ingresso per il bootstrap dei moduli di Frontend, che NON si basano sui componenti standalone a meno di rare funzionalità */\r\n@Component({\r\n selector: 'app-root',\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"./app.component.scss\"],\r\n templateUrl: './app.component.html'\r\n})\r\nexport class AppComponent {\r\n\r\n public snows: number[] = [];\r\n\r\n public snowTrackBy = (_: number, item: any) => item;\r\n\r\n constructor(private bts: TokenService, public _state: AppState, private router: Router) {\r\n\r\n if (this._state.christmasTime)\r\n for (let i = 0; i < 400; i++)\r\n this.snows.push(i);\r\n\r\n if (!this.bts.accountScope) {\r\n console.log(\"AppComponent - no account scope, redirecting to login\")\r\n this.router.navigate([\"login\", { fromUrl: this.router.url }]);\r\n }\r\n }\r\n}","<ng-container *ngIf=\"_state.christmasTime\">\r\n <div *ngFor=\"let i of snows; trackBy: snowTrackBy\" class=\"snow\"></div>\r\n</ng-container>\r\n<router-outlet></router-outlet>","// Angular\r\nimport { NgModule, ErrorHandler, LOCALE_ID, APP_INITIALIZER, ModuleWithProviders, Type, isDevMode } from \"@angular/core\";\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { Routes, RouterModule, NoPreloading, ROUTES } from \"@angular/router\";\r\nimport { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from \"@angular/material/core\";\r\nimport { EVENT_MANAGER_PLUGINS } from \"@angular/platform-browser\";\r\nimport { ServiceWorkerModule } from \"@angular/service-worker\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport \"@angular/common/locales/global/it\";\r\n\r\n// Plugins\r\nimport { NgxMatDateAdapter, NGX_MAT_DATE_FORMATS } from \"@angular-material-components/datetime-picker\";\r\nimport { CookieService } from \"ngx-cookie-service\";\r\nimport { ToastrModule } from \"ngx-toastr\";\r\nimport \"widgster/widgster.js\";\r\n\r\n// ES\r\nimport { PreferencesModule, PREF_DEBUG_MODE, PreferencesPersistor, LocalStoragePreferencesPersistor, CachePersistor, LocalStorageCachePersistor } from \"@esfaenza/preferences\";\r\nimport { LocalizationModule, LocalizationService, LocalizationMissingPolicy, LOC_DEBUG_MODE, BaseLocalization } from \"@esfaenza/localizations\";\r\nimport { HttpserviceModule, HttpServiceExtensions, HTTPService, HTTP_DEBUG_MODE, HTTP_INVALIDATION } from \"@esfaenza/httpservice\";\r\nimport { SignalrNotificationsModule, SGR_DEBUG_MODE, BaseMessageService } from \"@esfaenza/signalr-notifications\";\r\nimport { FormsAndValidationsModule, NgxExpandedDayJsDateAdapter } from \"@esfaenza/forms-and-validations\";\r\nimport { AccessControlModule, AccessControlService, ACC_DEBUG_MODE } from \"@esfaenza/access-control\";\r\nimport { BaseAdapter, EsChartsModule, ESC_DEBUG_MODE } from \"@esfaenza/es-charts\";\r\nimport { ExtensionsModule, EXT_DEBUG_MODE } from \"@esfaenza/extensions\";\r\nimport { ContextMenuModule } from \"@esfaenza/ngx-contextmenu\";\r\nimport { DragulaModule } from '@esfaenza/ngx-dragula';\r\nimport { EsTableModule } from \"@esfaenza/es-table\";\r\nimport { TAB_DEBUG_MODE } from \"@esfaenza/tabber\";\r\n\r\n// Core\r\nimport { APPErrorHandler, HTTPServiceExtensions, ApplicationPreferencesPersistor, ApplicationCachePersistor, SessionRetriever, OutZoneEventPlugin, TokenService, GlobalSearchService, CompletedJobRedirectionService, MenuFilteringService, UserPreferencesService } from \"@esfaenza/core/services\";\r\nimport { PageNotFoundComponent, ServerErrorComponent, AngularErrorComponent, ExternalPagesComponent, JaceLoginComponent, PagesComponent, RedirecterComponent, ComponentsModule, UserInfosComponent } from \"@esfaenza/core/components\";\r\nimport { ApplicationMenu, EnvOptions, AccountScope, MENU, MENU_LOCALIZATION, REDIRECT_MAP, USE_FAKE_ACCESS_TOKEN, NAVBAR_EXTENSIONS, LOGIN_URL_LEGACY } from \"@esfaenza/core/domain\"\r\nimport { ROUTE, EMBEDDED_ROUTE } from \"@esfaenza/core/domain\"\r\nimport { TemplateCommon } from \"@esfaenza/core/modules\";\r\n\r\n// RxJs\r\nimport { catchError, switchMap, take, tap } from \"rxjs/operators\";\r\nimport { forkJoin, Observable, of } from \"rxjs\";\r\n\r\n// Bootstrap\r\nimport { ProgressbarModule } from \"ngx-bootstrap/progressbar\";\r\nimport { TimepickerModule } from \"ngx-bootstrap/timepicker\";\r\nimport { BsDropdownModule } from \"ngx-bootstrap/dropdown\";\r\nimport { TooltipModule } from \"ngx-bootstrap/tooltip\";\r\nimport { ModalModule } from \"ngx-bootstrap/modal\";\r\n\r\n// Applicazione\r\nimport { AppComponent } from \"./app.component\";\r\n\r\n// Repositories\r\nconst GET_Jace_GetAccountScope: string = \"/api/Jace/GetAccountScope\";\r\nconst GET_AppConfig_GetAppConfig: string = \"/api/AppConfig/GetAppConfig\";\r\n\r\ndeclare var myconfig: EnvOptions;\r\n\r\nconst baseAppRoutes: Routes = [\r\n { path: \"\", redirectTo: \"pages/{emptyRouteRedirect}\", pathMatch: \"full\" },\r\n { path: EMBEDDED_ROUTE, component: ExternalPagesComponent },\r\n { path: ROUTE, component: PagesComponent },\r\n { path: \"rd\", component: RedirecterComponent },\r\n { path: \"rd/:tenant\", component: RedirecterComponent },\r\n { path: \"login\", component: JaceLoginComponent },\r\n { path: \"iserr\", component: ServerErrorComponent },\r\n { path: \"anerr\", component: AngularErrorComponent },\r\n { path: \"**\", component: PageNotFoundComponent },\r\n \r\n];\r\n\r\nconst MODULES = [\r\n BrowserAnimationsModule,\r\n HttpClientModule,\r\n TemplateCommon,\r\n ComponentsModule,\r\n\r\n // Attenzione a lasciarlo attivo in ng serve: https://github.com/angular/angular/issues/47455\r\n ServiceWorkerModule.register('ngsw-worker.js', { enabled: !isDevMode() }),\r\n RouterModule.forRoot([], { useHash: true, preloadingStrategy: NoPreloading, onSameUrlNavigation: \"reload\" }),\r\n\r\n // ES\r\n EsTableModule.forRoot(),\r\n FormsAndValidationsModule.forRoot({ acocustom: \"O\", sliderMode: true }),\r\n ExtensionsModule.forRoot(),\r\n LocalizationModule.forRoot({ localizationMissingPolicy: LocalizationMissingPolicy.PrintSource, defaultLocale: 'it-IT' }),\r\n AccessControlModule.forRoot({ contextAwareKey: \"O\", defaultCondition: '(R:Jace Admin || R:Jace Support)' }),\r\n HttpserviceModule.forRoot(),\r\n SignalrNotificationsModule.forRoot({ endpointUrl: 'notify', useMessagePack: true }),\r\n PreferencesModule.forRoot({ retrieveAllAtStart: true, sessionRetriever: SessionRetriever, preferencePersistor: ApplicationPreferencesPersistor, cachePersistor: ApplicationCachePersistor }),\r\n EsChartsModule.forRoot(),\r\n\r\n // Bootstrap\r\n TooltipModule.forRoot(),\r\n ModalModule.forRoot(),\r\n ProgressbarModule.forRoot(),\r\n BsDropdownModule.forRoot(),\r\n ToastrModule.forRoot(),\r\n TimepickerModule.forRoot(),\r\n ContextMenuModule.forRoot(),\r\n DragulaModule.forRoot()\r\n];\r\n\r\n// Generatore dei formati data\r\nvar formats = (style: 'long' | 'short') => {\r\n return {\r\n parse: { dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : '') },\r\n display: {\r\n dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),\r\n monthYearLabel: 'MM YYYY',\r\n dateA11yLabel: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),\r\n monthYearA11yLabel: 'MM YYYY',\r\n }\r\n };\r\n}\r\n\r\nconst localeFactory = (loc: LocalizationService) => loc.SmallLocale;\r\n\r\nconst PROVIDERS = [\r\n CookieService,\r\n\r\n // Providers applicativi\r\n { provide: ErrorHandler, useClass: APPErrorHandler },\r\n { provide: EVENT_MANAGER_PLUGINS, useExisting: OutZoneEventPlugin, multi: true },\r\n { provide: HttpServiceExtensions, useClass: HTTPServiceExtensions },\r\n\r\n // Locale e gestioni delle date\r\n { provide: LOCALE_ID, useFactory: localeFactory, deps: [LocalizationService] },\r\n { provide: MAT_DATE_LOCALE, useFactory: localeFactory, deps: [LocalizationService] },\r\n { provide: MAT_DATE_FORMATS, useValue: formats('short') },\r\n\r\n // Questi due sono providati dal FormsAndValidationModule stesso, però quest'ultimo è definito in forRoot solo lato componenti shared, \r\n // quindi per rendere questi provider disponibili anche a moduli esterni devo riprovidarli anche qui\r\n { provide: NGX_MAT_DATE_FORMATS, useValue: formats('long') },\r\n { provide: NgxMatDateAdapter, useClass: NgxExpandedDayJsDateAdapter }\r\n];\r\n\r\n@NgModule({\r\n declarations: [AppComponent],\r\n imports: [...MODULES]\r\n})\r\nexport class EsFaenzaCoreModule {\r\n static forRoot(config?: EsFaenzaCoreModuleConfig): ModuleWithProviders<EsFaenzaCoreModule> {\r\n if (config.routes) {\r\n // Aggiunta della route di embedding se non dichiarata, lato aggiunta faccio in modo che l'embedding sia disponibile solo da route interne (pages OK, pages_ext NON OK)\r\n if (!config.routes.find(t => t.path.startsWith(\"embed\")))\r\n config.routes = [...config.routes, { path: \"embed/:module\", loadChildren: () => import('@esfaenza/core/modules').then(m => m.EmbeddingModule) }]\r\n\r\n baseAppRoutes[0].redirectTo = `pages/${config.emptyRouteRedirect || 'dashboard'}`;\r\n baseAppRoutes.filter(t => [\"pages\", \"pages_ext\"].includes(t.path)).forEach(path => { \r\n path.children = [\r\n { path: \"profile\", component: UserInfosComponent, data: { InternalNavigation: true, title: \"profilo\" } }, \r\n ...config.routes.filter(r => !path.path.includes(\"pages_ext\") || !r.path.startsWith(\"embed\"))\r\n ];\r\n });\r\n }\r\n config.debugMode = (!isDevMode() && !config.forceDebugModeForProdBuilds) ? DebugFlags.None : (config.debugMode || DebugFlags.All);\r\n\r\n let mergedAppInitializer = (http: HTTPService, bts: TokenService, aac: AccessControlService, loc: BaseLocalization) => {\r\n return () => {\r\n console.log(\"%c[APP_INITIALIZER] Loading AppConfig and Account Scope...\", \"background-color: yellow\");\r\n let realObservable = forkJoin(\r\n {\r\n appConfig: http.get<EnvOptions>(GET_AppConfig_GetAppConfig, null, null, false).pipe(catchError(_ => of({}))),\r\n scope: http.get<AccountScope>(GET_Jace_GetAccountScope, null, null, false).pipe(catchError(_ => of(null))),\r\n locale: loc.Locale.pipe(take(1), catchError(_ => of('it-IT'))),\r\n });\r\n\r\n let usedObservable = config.optionsAndScopeProvider || realObservable;\r\n\r\n return usedObservable.pipe(\r\n tap((res: { appConfig: EnvOptions, scope: AccountScope, locale: string }) => {\r\n myconfig = res.appConfig;\r\n // L'account scope lo prendo dalla Query a backend solo se non uso il Fake token\r\n if (!bts.USE_FAKE_ACCESS_TOKEN)\r\n bts.accountScope = res.scope;\r\n\r\n console.log(\"%c[APP_INITIALIZER] appConfig and scope registered\", \"background-color: yellow\");\r\n\r\n if (bts.accountScope)\r\n aac.initializeIdentity(bts.getJaceIdentity());\r\n }),\r\n switchMap(_ => {\r\n if (!config.initializerFunction)\r\n return of();\r\n\r\n console.log(\"%c[APP_INITIALIZER] Loading custom application initialization\", \"background-color: yellow\");\r\n return config.initializerFunction(http, bts, aac)().pipe(tap(_ => {\r\n console.log(\"%c[APP_INITIALIZER] Initialization is over\", \"background-color: yellow\");\r\n }));\r\n })\r\n );\r\n }\r\n };\r\n\r\n return {\r\n ngModule: EsFaenzaCoreModule,\r\n providers: [\r\n // *************************** Provider statici ***************************\r\n\r\n ...PROVIDERS,\r\n\r\n // ************************ Provider customizzabili ************************\r\n ...(!config.redirectionMap ? [] : [{ provide: REDIRECT_MAP, useValue: config.redirectionMap }]),\r\n { provide: APP_INITIALIZER, useFactory: mergedAppInitializer, deps: [HTTPService, TokenService, AccessControlService, BaseLocalization], multi: true },\r\n { provide: ROUTES, useValue: baseAppRoutes, multi: true },\r\n { provide: LOC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Localizations) == DebugFlags.Localizations : false },\r\n { provide: EXT_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Extensions) == DebugFlags.Extensions : false },\r\n { provide: ACC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.AccessControl) == DebugFlags.AccessControl : false },\r\n { provide: HTTP_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Http) == DebugFlags.Http : false },\r\n { provide: HTTP_INVALIDATION, useValue: config?.httpInvalidationCache },\r\n { provide: TAB_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Tabber) == DebugFlags.Tabber : false },\r\n { provide: SGR_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.SignalR) == DebugFlags.SignalR : false },\r\n { provide: PREF_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Preferences) == DebugFlags.Preferences : false },\r\n { provide: ESC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Charts) == DebugFlags.Charts : false },\r\n { provide: LOGIN_URL_LEGACY, useValue: config.legacyLogin !== null && config.legacyLogin !== undefined ? config.legacyLogin : false },\r\n { provide: NAVBAR_EXTENSIONS, useValue: config.navbarExtensions ? config.navbarExtensions : [] },\r\n { provide: BaseAdapter, useClass: config?.chartsAdapter || BaseAdapter },\r\n { provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },\r\n { provide: GlobalSearchService, useClass: config?.globalSearchService || GlobalSearchService },\r\n { provide: CompletedJobRedirectionService, useClass: config?.completedJobRedirectionService || CompletedJobRedirectionService },\r\n { provide: MenuFilteringService, useClass: config?.menuFilteringService || MenuFilteringService },\r\n { provide: UserPreferencesService, useClass: config?.userPreferencesProvider || UserPreferencesService },\r\n { provide: MENU_LOCALIZATION, useValue: config.menuLoc || null },\r\n { provide: MENU, useValue: config.menu },\r\n { provide: USE_FAKE_ACCESS_TOKEN, useValue: !!config.fakeAccessToken },\r\n { provide: PreferencesPersistor, useClass: config.fakeAccessToken ? LocalStoragePreferencesPersistor : ApplicationPreferencesPersistor },\r\n { provide: CachePersistor, useClass: config.fakeAccessToken ? LocalStorageCachePersistor : ApplicationCachePersistor }\r\n ]\r\n };\r\n }\r\n}\r\n\r\nexport class EsFaenzaCoreModuleConfig {\r\n /* Route applicative, solo quelle dentro a **pages** */\r\n routes!: Routes;\r\n /* Menù della sidebar dell'applicazione */\r\n menu: ApplicationMenu[];\r\n /* Indica se utilizzare l'access token finto */\r\n fakeAccessToken?: boolean;\r\n /* Tipo da usare per generare le localizzaizoni del menù */\r\n menuLoc?: Type<LocalizationService>;\r\n /* Redirect per la root dell'applicazione, di default è impostato a **dashboard**. Se all'interno delle **routes** non esiste la route **dashboard** è da impostare adeguatamente */\r\n emptyRouteRedirect?: string;\r\n /* Se non specificata viene impostata automaticamente ad \"All\" in fase di debug, \"None\" in produzione (quest'ultimo a prescindere, a meno che **forceDebugModeForProdBuilds** non sia true)*/\r\n debugMode?: DebugFlags;\r\n /* Permette di forzare la modalità di debug specificata anche per le build di produzione, **NON IMPOSTARE A TRUE** a meno di rarissimissimissimi casi */\r\n forceDebugModeForProdBuilds?: boolean;\r\n /* Cache di invalidazione per le chiamate http */\r\n httpInvalidationCache?: any;\r\n /* Funzione di inizializzazione APP_INITIALIZER-like che viene richiamata dopo alla funzione di inizializzazione di default */\r\n initializerFunction?: (http: HTTPService, bts: TokenService, aac: AccessControlService) => () => Observable<any>;\r\n /* Mappa di redirect per permettere al **RedirecterComponent** di sapere dove navigare in base a Oggetto-Parametri */\r\n redirectionMap?: { [index: string]: { url: string, params: string[] } };\r\n /* Adattatore dei grafici nel caso un progetto fosse vecchio (Rimuovibile quando tutti i progetti usano nativamente es-charts) */\r\n chartsAdapter?: Type<BaseAdapter>;\r\n /* Servizio che espone i messaggi disponibili su Signalr */\r\n messageService?: Type<BaseMessageService>;\r\n /* Servizio per la search globale del modulo */\r\n globalSearchService?: Type<GlobalSearchService>;\r\n /* Servizio per filtrare le voci di menù */\r\n menuFilteringService?: Type<MenuFilteringService>;\r\n /* Servizio di ridirezione per job completati */\r\n completedJobRedirectionService?: Type<CompletedJobRedirectionService>;\r\n /* Funzione di override per recuperare account scope e envoptions. Può anche essere utilizzata per fornire modelli finti fino ad implementazione */\r\n optionsAndScopeProvider?: Observable<{ appConfig: EnvOptions, scope: AccountScope, locale: string }>;\r\n /* Lista dei componenti con cui espandere la navbar */\r\n navbarExtensions?: Type<any>[];\r\n /* Servizio di recupero/modifica preferenze utente */\r\n userPreferencesProvider?: Type<UserPreferencesService>;\r\n /* identifica se utilizzare la versione vecchia dell'url di auth (${myconfig.AUTH_URL}/login/form?client=${myconfig.CLIENT_NAME}) invece che la nuova (${myconfig.AUTH_URL}/login;client=${myconfig.CLIENT_NAME}) */\r\n legacyLogin?: boolean;\r\n}\r\n\r\nexport enum DebugFlags {\r\n None = 0,\r\n Localizations = 1 << 0,\r\n Extensions = 1 << 1,\r\n AccessControl = 1 << 2,\r\n Http = 1 << 3,\r\n SignalR = 1 << 4,\r\n Preferences = 1 << 5,\r\n Charts = 1 << 6,\r\n Tabber = 1 << 7,\r\n All = ~(~0 << 8)\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-core.mjs","sources":["../../../projects/core/src/lib/app.component.ts","../../../projects/core/src/lib/app.component.html","../../../projects/core/src/lib/core.module.ts","../../../projects/core/src/esfaenza-core.ts"],"sourcesContent":["// Angular\r\nimport { Component, ViewEncapsulation } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n// Configurazioni\r\nimport { AppState, TokenService } from \"@esfaenza/core/services\";\r\n\r\n/* N.B: Questo componente non può diventare standalone. È il punto di ingresso per il bootstrap dei moduli di Frontend, che NON si basano sui componenti standalone a meno di rare funzionalità */\r\n@Component({\r\n selector: 'app-root',\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"./app.component.scss\"],\r\n templateUrl: './app.component.html'\r\n})\r\nexport class AppComponent {\r\n\r\n public snows: number[] = [];\r\n\r\n public snowTrackBy = (_: number, item: any) => item;\r\n\r\n constructor(private bts: TokenService, public _state: AppState, private router: Router) {\r\n\r\n if (this._state.christmasTime)\r\n for (let i = 0; i < 400; i++)\r\n this.snows.push(i);\r\n\r\n if (!this.bts.accountScope) {\r\n console.log(\"AppComponent - no account scope, redirecting to login\")\r\n this.router.navigate([\"login\", { fromUrl: this.router.url }]);\r\n }\r\n }\r\n}","<ng-container *ngIf=\"_state.christmasTime\">\r\n <div *ngFor=\"let i of snows; trackBy: snowTrackBy\" class=\"snow\"></div>\r\n</ng-container>\r\n<router-outlet></router-outlet>","// Angular\r\nimport { NgModule, ErrorHandler, LOCALE_ID, APP_INITIALIZER, ModuleWithProviders, Type, isDevMode } from \"@angular/core\";\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { Routes, RouterModule, NoPreloading, ROUTES } from \"@angular/router\";\r\nimport { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from \"@angular/material/core\";\r\nimport { EVENT_MANAGER_PLUGINS } from \"@angular/platform-browser\";\r\nimport { ServiceWorkerModule } from \"@angular/service-worker\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport \"@angular/common/locales/global/it\";\r\n\r\n// Plugins\r\nimport { NgxMatDateAdapter, NGX_MAT_DATE_FORMATS } from \"@angular-material-components/datetime-picker\";\r\nimport { CookieService } from \"ngx-cookie-service\";\r\nimport { ToastrModule } from \"ngx-toastr\";\r\nimport \"widgster/widgster.js\";\r\n\r\n// ES\r\nimport { PreferencesModule, PREF_DEBUG_MODE, PreferencesPersistor, LocalStoragePreferencesPersistor, CachePersistor, LocalStorageCachePersistor } from \"@esfaenza/preferences\";\r\nimport { LocalizationModule, LocalizationService, LocalizationMissingPolicy, LOC_DEBUG_MODE, BaseLocalization } from \"@esfaenza/localizations\";\r\nimport { HttpserviceModule, HttpServiceExtensions, HTTPService, HTTP_DEBUG_MODE, HTTP_INVALIDATION } from \"@esfaenza/httpservice\";\r\nimport { SignalrNotificationsModule, SGR_DEBUG_MODE, BaseMessageService } from \"@esfaenza/signalr-notifications\";\r\nimport { FormsAndValidationsModule, NgxExpandedDayJsDateAdapter } from \"@esfaenza/forms-and-validations\";\r\nimport { AccessControlModule, AccessControlService, ACC_DEBUG_MODE } from \"@esfaenza/access-control\";\r\nimport { BaseAdapter, EsChartsModule, ESC_DEBUG_MODE } from \"@esfaenza/es-charts\";\r\nimport { ExtensionsModule, EXT_DEBUG_MODE } from \"@esfaenza/extensions\";\r\nimport { ContextMenuModule } from \"@esfaenza/ngx-contextmenu\";\r\nimport { DragulaModule } from '@esfaenza/ngx-dragula';\r\nimport { EsTableModule } from \"@esfaenza/es-table\";\r\nimport { TAB_DEBUG_MODE } from \"@esfaenza/tabber\";\r\n\r\n// Core\r\nimport { APPErrorHandler, HTTPServiceExtensions, ApplicationPreferencesPersistor, ApplicationCachePersistor, SessionRetriever, OutZoneEventPlugin, TokenService, GlobalSearchService, CompletedJobRedirectionService, MenuFilteringService, UserPreferencesService } from \"@esfaenza/core/services\";\r\nimport { PageNotFoundComponent, ServerErrorComponent, AngularErrorComponent, ExternalPagesComponent, JaceLoginComponent, PagesComponent, RedirecterComponent, ComponentsModule, UserInfosComponent } from \"@esfaenza/core/components\";\r\nimport { ApplicationMenu, EnvOptions, AccountScope, MENU, MENU_LOCALIZATION, REDIRECT_MAP, USE_FAKE_ACCESS_TOKEN, NAVBAR_EXTENSIONS, LOGIN_URL_LEGACY } from \"@esfaenza/core/domain\"\r\nimport { ROUTE, EMBEDDED_ROUTE } from \"@esfaenza/core/domain\"\r\nimport { TemplateCommon } from \"@esfaenza/core/modules\";\r\n\r\n// RxJs\r\nimport { catchError, switchMap, take, tap } from \"rxjs/operators\";\r\nimport { forkJoin, Observable, of } from \"rxjs\";\r\n\r\n// Bootstrap\r\nimport { ProgressbarModule } from \"ngx-bootstrap/progressbar\";\r\nimport { TimepickerModule } from \"ngx-bootstrap/timepicker\";\r\nimport { BsDropdownModule } from \"ngx-bootstrap/dropdown\";\r\nimport { TooltipModule } from \"ngx-bootstrap/tooltip\";\r\nimport { ModalModule } from \"ngx-bootstrap/modal\";\r\n\r\n// Applicazione\r\nimport { AppComponent } from \"./app.component\";\r\n\r\n// Repositories\r\nconst GET_Jace_GetAccountScope: string = \"/api/Jace/GetAccountScope\";\r\nconst GET_AppConfig_GetAppConfig: string = \"/api/AppConfig/GetAppConfig\";\r\n\r\ndeclare var myconfig: EnvOptions;\r\n\r\nconst baseAppRoutes: Routes = [\r\n { path: \"\", redirectTo: \"pages/{emptyRouteRedirect}\", pathMatch: \"full\" },\r\n { path: EMBEDDED_ROUTE, component: ExternalPagesComponent },\r\n { path: ROUTE, component: PagesComponent },\r\n { path: \"rd\", component: RedirecterComponent },\r\n { path: \"rd/:tenant\", component: RedirecterComponent },\r\n { path: \"login\", component: JaceLoginComponent },\r\n { path: \"iserr\", component: ServerErrorComponent },\r\n { path: \"anerr\", component: AngularErrorComponent },\r\n { path: \"**\", component: PageNotFoundComponent },\r\n \r\n];\r\n\r\nconst MODULES = [\r\n BrowserAnimationsModule,\r\n HttpClientModule,\r\n TemplateCommon,\r\n ComponentsModule,\r\n\r\n // Attenzione a lasciarlo attivo in ng serve: https://github.com/angular/angular/issues/47455\r\n ServiceWorkerModule.register('ngsw-worker.js', { enabled: !isDevMode() }),\r\n RouterModule.forRoot([], { useHash: true, preloadingStrategy: NoPreloading, onSameUrlNavigation: \"reload\" }),\r\n\r\n // ES\r\n EsTableModule.forRoot(),\r\n FormsAndValidationsModule.forRoot({ acocustom: \"O\", sliderMode: true }),\r\n ExtensionsModule.forRoot(),\r\n LocalizationModule.forRoot({ localizationMissingPolicy: LocalizationMissingPolicy.PrintSource, defaultLocale: 'it-IT' }),\r\n AccessControlModule.forRoot({ contextAwareKey: \"O\", defaultCondition: '(R:Jace Admin || R:Jace Support)' }),\r\n HttpserviceModule.forRoot(),\r\n SignalrNotificationsModule.forRoot({ endpointUrl: 'notify', useMessagePack: true }),\r\n PreferencesModule.forRoot({ retrieveAllAtStart: true, sessionRetriever: SessionRetriever, preferencePersistor: ApplicationPreferencesPersistor, cachePersistor: ApplicationCachePersistor }),\r\n EsChartsModule.forRoot(),\r\n\r\n // Bootstrap\r\n TooltipModule.forRoot(),\r\n ModalModule.forRoot(),\r\n ProgressbarModule.forRoot(),\r\n BsDropdownModule.forRoot(),\r\n ToastrModule.forRoot(),\r\n TimepickerModule.forRoot(),\r\n ContextMenuModule.forRoot(),\r\n DragulaModule.forRoot()\r\n];\r\n\r\n// Generatore dei formati data\r\nvar formats = (style: 'long' | 'short') => {\r\n return {\r\n parse: { dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : '') },\r\n display: {\r\n dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),\r\n monthYearLabel: 'MM YYYY',\r\n dateA11yLabel: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),\r\n monthYearA11yLabel: 'MM YYYY',\r\n }\r\n };\r\n}\r\n\r\nconst localeFactory = (loc: LocalizationService) => loc.SmallLocale;\r\n\r\nconst PROVIDERS = [\r\n CookieService,\r\n\r\n // Providers applicativi\r\n { provide: ErrorHandler, useClass: APPErrorHandler },\r\n { provide: EVENT_MANAGER_PLUGINS, useExisting: OutZoneEventPlugin, multi: true },\r\n { provide: HttpServiceExtensions, useClass: HTTPServiceExtensions },\r\n\r\n // Locale e gestioni delle date\r\n { provide: LOCALE_ID, useFactory: localeFactory, deps: [LocalizationService] },\r\n { provide: MAT_DATE_LOCALE, useFactory: localeFactory, deps: [LocalizationService] },\r\n { provide: MAT_DATE_FORMATS, useValue: formats('short') },\r\n\r\n // Questi due sono providati dal FormsAndValidationModule stesso, però quest'ultimo è definito in forRoot solo lato componenti shared, \r\n // quindi per rendere questi provider disponibili anche a moduli esterni devo riprovidarli anche qui\r\n { provide: NGX_MAT_DATE_FORMATS, useValue: formats('long') },\r\n { provide: NgxMatDateAdapter, useClass: NgxExpandedDayJsDateAdapter }\r\n];\r\n\r\n@NgModule({\r\n declarations: [AppComponent],\r\n imports: [...MODULES]\r\n})\r\nexport class EsFaenzaCoreModule {\r\n static forRoot(config?: EsFaenzaCoreModuleConfig): ModuleWithProviders<EsFaenzaCoreModule> {\r\n if (config.routes) {\r\n // Aggiunta della route di embedding se non dichiarata, lato aggiunta faccio in modo che l'embedding sia disponibile solo da route interne (pages OK, pages_ext NON OK)\r\n if (!config.routes.find(t => t.path.startsWith(\"embed\")))\r\n config.routes = [...config.routes, { path: \"embed/:module\", loadChildren: () => import('@esfaenza/core/modules').then(m => m.EmbeddingModule) }]\r\n\r\n baseAppRoutes[0].redirectTo = `pages/${config.emptyRouteRedirect || 'dashboard'}`;\r\n baseAppRoutes.filter(t => [\"pages\", \"pages_ext\"].includes(t.path)).forEach(path => { \r\n path.children = [\r\n { path: \"profile\", component: UserInfosComponent, data: { InternalNavigation: true, title: \"profilo\" } }, \r\n ...config.routes.filter(r => !path.path.includes(\"pages_ext\") || !r.path.startsWith(\"embed\"))\r\n ];\r\n });\r\n }\r\n config.debugMode = (!isDevMode() && !config.forceDebugModeForProdBuilds) ? DebugFlags.None : (config.debugMode || DebugFlags.All);\r\n\r\n let mergedAppInitializer = (http: HTTPService, bts: TokenService, aac: AccessControlService, loc: BaseLocalization) => {\r\n return () => {\r\n console.log(\"%c[APP_INITIALIZER] Loading AppConfig and Account Scope...\", \"background-color: yellow\");\r\n let realObservable = forkJoin(\r\n {\r\n appConfig: http.get<EnvOptions>(GET_AppConfig_GetAppConfig, null, null, false).pipe(catchError(_ => of({}))),\r\n scope: http.get<AccountScope>(GET_Jace_GetAccountScope, null, null, false).pipe(catchError(_ => of(null))),\r\n locale: loc.Locale.pipe(take(1), catchError(_ => of('it-IT'))),\r\n });\r\n\r\n let usedObservable = config.optionsAndScopeProvider || realObservable;\r\n\r\n return usedObservable.pipe(\r\n tap((res: { appConfig: EnvOptions, scope: AccountScope, locale: string }) => {\r\n myconfig = res.appConfig;\r\n // L'account scope lo prendo dalla Query a backend solo se non uso il Fake token\r\n if (!bts.USE_FAKE_ACCESS_TOKEN)\r\n bts.accountScope = res.scope;\r\n\r\n console.log(\"%c[APP_INITIALIZER] appConfig and scope registered\", \"background-color: yellow\");\r\n\r\n if (bts.accountScope)\r\n aac.initializeIdentity(bts.getJaceIdentity());\r\n }),\r\n switchMap(_ => {\r\n if (!config.initializerFunction)\r\n return of();\r\n\r\n console.log(\"%c[APP_INITIALIZER] Loading custom application initialization\", \"background-color: yellow\");\r\n return config.initializerFunction(http, bts, aac)().pipe(tap(_ => {\r\n console.log(\"%c[APP_INITIALIZER] Initialization is over\", \"background-color: yellow\");\r\n }));\r\n })\r\n );\r\n }\r\n };\r\n\r\n return {\r\n ngModule: EsFaenzaCoreModule,\r\n providers: [\r\n // *************************** Provider statici ***************************\r\n\r\n ...PROVIDERS,\r\n\r\n // ************************ Provider customizzabili ************************\r\n ...(!config.redirectionMap ? [] : [{ provide: REDIRECT_MAP, useValue: config.redirectionMap }]),\r\n { provide: APP_INITIALIZER, useFactory: mergedAppInitializer, deps: [HTTPService, TokenService, AccessControlService, BaseLocalization], multi: true },\r\n { provide: ROUTES, useValue: baseAppRoutes, multi: true },\r\n { provide: LOC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Localizations) == DebugFlags.Localizations : false },\r\n { provide: EXT_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Extensions) == DebugFlags.Extensions : false },\r\n { provide: ACC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.AccessControl) == DebugFlags.AccessControl : false },\r\n { provide: HTTP_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Http) == DebugFlags.Http : false },\r\n { provide: HTTP_INVALIDATION, useValue: config?.httpInvalidationCache },\r\n { provide: TAB_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Tabber) == DebugFlags.Tabber : false },\r\n { provide: SGR_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.SignalR) == DebugFlags.SignalR : false },\r\n { provide: PREF_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Preferences) == DebugFlags.Preferences : false },\r\n { provide: ESC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Charts) == DebugFlags.Charts : false },\r\n { provide: LOGIN_URL_LEGACY, useValue: config.legacyLogin !== null && config.legacyLogin !== undefined ? config.legacyLogin : false },\r\n { provide: NAVBAR_EXTENSIONS, useValue: config.navbarExtensions ? config.navbarExtensions : [] },\r\n { provide: BaseAdapter, useClass: config?.chartsAdapter || BaseAdapter },\r\n { provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },\r\n { provide: GlobalSearchService, useClass: config?.globalSearchService || GlobalSearchService },\r\n { provide: CompletedJobRedirectionService, useClass: config?.completedJobRedirectionService || CompletedJobRedirectionService },\r\n { provide: MenuFilteringService, useClass: config?.menuFilteringService || MenuFilteringService },\r\n { provide: UserPreferencesService, useClass: config?.userPreferencesProvider || UserPreferencesService },\r\n { provide: MENU_LOCALIZATION, useValue: config.menuLoc || null },\r\n { provide: MENU, useValue: config.menu },\r\n { provide: USE_FAKE_ACCESS_TOKEN, useValue: !!config.fakeAccessToken },\r\n { provide: PreferencesPersistor, useClass: config.fakeAccessToken ? LocalStoragePreferencesPersistor : ApplicationPreferencesPersistor },\r\n { provide: CachePersistor, useClass: config.fakeAccessToken ? LocalStorageCachePersistor : ApplicationCachePersistor }\r\n ]\r\n };\r\n }\r\n}\r\n\r\nexport class EsFaenzaCoreModuleConfig {\r\n /* Route applicative, solo quelle dentro a **pages** */\r\n routes!: Routes;\r\n /* Menù della sidebar dell'applicazione */\r\n menu: ApplicationMenu[];\r\n /* Indica se utilizzare l'access token finto */\r\n fakeAccessToken?: boolean;\r\n /* Tipo da usare per generare le localizzaizoni del menù */\r\n menuLoc?: Type<LocalizationService>;\r\n /* Redirect per la root dell'applicazione, di default è impostato a **dashboard**. Se all'interno delle **routes** non esiste la route **dashboard** è da impostare adeguatamente */\r\n emptyRouteRedirect?: string;\r\n /* Se non specificata viene impostata automaticamente ad \"All\" in fase di debug, \"None\" in produzione (quest'ultimo a prescindere, a meno che **forceDebugModeForProdBuilds** non sia true)*/\r\n debugMode?: DebugFlags;\r\n /* Permette di forzare la modalità di debug specificata anche per le build di produzione, **NON IMPOSTARE A TRUE** a meno di rarissimissimissimi casi */\r\n forceDebugModeForProdBuilds?: boolean;\r\n /* Cache di invalidazione per le chiamate http */\r\n httpInvalidationCache?: any;\r\n /* Funzione di inizializzazione APP_INITIALIZER-like che viene richiamata dopo alla funzione di inizializzazione di default */\r\n initializerFunction?: (http: HTTPService, bts: TokenService, aac: AccessControlService) => () => Observable<any>;\r\n /* Mappa di redirect per permettere al **RedirecterComponent** di sapere dove navigare in base a Oggetto-Parametri */\r\n redirectionMap?: { [index: string]: { url: string, params: string[] } };\r\n /* Adattatore dei grafici nel caso un progetto fosse vecchio (Rimuovibile quando tutti i progetti usano nativamente es-charts) */\r\n chartsAdapter?: Type<BaseAdapter>;\r\n /* Servizio che espone i messaggi disponibili su Signalr */\r\n messageService?: Type<BaseMessageService>;\r\n /* Servizio per la search globale del modulo */\r\n globalSearchService?: Type<GlobalSearchService>;\r\n /* Servizio per filtrare le voci di menù */\r\n menuFilteringService?: Type<MenuFilteringService>;\r\n /* Servizio di ridirezione per job completati */\r\n completedJobRedirectionService?: Type<CompletedJobRedirectionService>;\r\n /* Funzione di override per recuperare account scope e envoptions. Può anche essere utilizzata per fornire modelli finti fino ad implementazione */\r\n optionsAndScopeProvider?: Observable<{ appConfig: EnvOptions, scope: AccountScope, locale: string }>;\r\n /* Lista dei componenti con cui espandere la navbar */\r\n navbarExtensions?: Type<any>[];\r\n /* Servizio di recupero/modifica preferenze utente */\r\n userPreferencesProvider?: Type<UserPreferencesService>;\r\n /* identifica se utilizzare la versione vecchia dell'url di auth (${myconfig.AUTH_URL}/login/form?client=${myconfig.CLIENT_NAME}) invece che la nuova (${myconfig.AUTH_URL}/login;client=${myconfig.CLIENT_NAME}) */\r\n legacyLogin?: boolean;\r\n}\r\n\r\nexport enum DebugFlags {\r\n None = 0,\r\n Localizations = 1 << 0,\r\n Extensions = 1 << 1,\r\n AccessControl = 1 << 2,\r\n Http = 1 << 3,\r\n SignalR = 1 << 4,\r\n Preferences = 1 << 5,\r\n Charts = 1 << 6,\r\n Tabber = 1 << 7,\r\n All = ~(~0 << 8)\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3"],"mappings":"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"}
@@ -529,10 +529,10 @@ class Sidebar {
529
529
  }
530
530
  }
531
531
  Sidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Sidebar, deps: [{ token: i1$2.LocalizationService }, { token: MENU_LOCALIZATION, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$1.Router }, { token: i1.AppState }, { token: i0.NgZone }, { token: i2$1.UtilityService }, { token: i5.AccessControlService }, { token: MENU }, { token: i1.MenuFilteringService }, { token: i1.TokenService }, { token: i1.GlobalSearchService }, { token: i1.UserPreferencesService }, { token: i2$1.MessageService }], target: i0.ɵɵFactoryTarget.Component });
532
- Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Sidebar, isStandalone: true, selector: "sidebar", host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "sidebar", first: true, predicate: ["sidebar"], descendants: true, static: true }], ngImport: i0, template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <img *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img\" src=\"assets/img/logo/logo.png\" alt=\"\">\r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/logo_sm.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <!--Ricerca globale-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\">\r\n <li *ngFor=\"let item of menuItems; let last = last;\" \r\n class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\" \r\n [class.has-sub-menu]=\"item.subMenu\"\r\n [class.sidebar-item-expanded]=\"item.expanded\" \r\n [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 <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div class=\"app-padding-15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\">\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-from-bracket\"></i>&nbsp;Logout</div>\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-left\"></i>&nbsp;Cambia Tenant</div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"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 [style.padding-left.px]=\"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 [style.padding-left.px]=\"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 <ng-container *ngFor=\"let subitem of item.subMenu\" >\r\n <li *ngIf=\"subitem.visible\" class=\"sidebar-sublist-item level-{{item.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\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: [".app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.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 #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;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;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.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:#3e4d64}.sidebar-sublist .level-1{background-color:#364357}.sidebar-sublist .level-2{background-color:#2e3a4b}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;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:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#024a88;position:absolute;top:-90px;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:#677ea1!important}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-img{width:210px;margin:10px 0 0 10px}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fff;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}\n"], dependencies: [{ kind: "directive", type: SlimScroll, selector: "[slim-scroll]", inputs: ["slimScrollOptions"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: EsTableModule }, { kind: "component", type: i7.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "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: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$2.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: SideBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
532
+ Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Sidebar, isStandalone: true, selector: "sidebar", host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "sidebar", first: true, predicate: ["sidebar"], descendants: true, static: true }], ngImport: i0, template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <img *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img\" src=\"assets/img/logo/logo.png\" alt=\"\">\r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/logo_sm.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <!--Ricerca globale-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\">\r\n <li *ngFor=\"let item of menuItems; let last = last;\" \r\n class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\" \r\n [class.has-sub-menu]=\"item.subMenu\"\r\n [class.sidebar-item-expanded]=\"item.expanded\" \r\n [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 <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div class=\"app-padding-15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\">\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-from-bracket\"></i>&nbsp;Logout</div>\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-left\"></i>&nbsp;Cambia Tenant</div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"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 [style.padding-left.px]=\"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 [style.padding-left.px]=\"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 <ng-container *ngFor=\"let subitem of item.subMenu\" >\r\n <li *ngIf=\"subitem.visible\" class=\"sidebar-sublist-item level-{{item.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\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: [".app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.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 #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;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;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.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:#3e4d64}.sidebar-sublist .level-1{background-color:#364357}.sidebar-sublist .level-2{background-color:#2e3a4b}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;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:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#024a88;position:absolute;top:-90px;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:#677ea1!important}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-img{width:210px;margin:10px 0 0 10px}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fff;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}\n"], dependencies: [{ kind: "directive", type: SlimScroll, selector: "[slim-scroll]", inputs: ["slimScrollOptions"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: EsTableModule }, { kind: "component", type: i7.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "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: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$2.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: SideBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
533
533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Sidebar, decorators: [{
534
534
  type: Component,
535
- args: [{ selector: "sidebar", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: LocalizationService, useClass: SideBarLoc }], standalone: true, imports: [NgClass, SlimScroll, NgFor, NgTemplateOutlet, NgIf, RouterLinkActive, RouterLink, FormsModule, EsTableModule, LocalizationModule], template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <img *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img\" src=\"assets/img/logo/logo.png\" alt=\"\">\r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/logo_sm.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <!--Ricerca globale-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\">\r\n <li *ngFor=\"let item of menuItems; let last = last;\" \r\n class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\" \r\n [class.has-sub-menu]=\"item.subMenu\"\r\n [class.sidebar-item-expanded]=\"item.expanded\" \r\n [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 <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div class=\"app-padding-15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\">\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-from-bracket\"></i>&nbsp;Logout</div>\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-left\"></i>&nbsp;Cambia Tenant</div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"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 [style.padding-left.px]=\"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 [style.padding-left.px]=\"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 <ng-container *ngFor=\"let subitem of item.subMenu\" >\r\n <li *ngIf=\"subitem.visible\" class=\"sidebar-sublist-item level-{{item.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\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: [".app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.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 #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;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;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.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:#3e4d64}.sidebar-sublist .level-1{background-color:#364357}.sidebar-sublist .level-2{background-color:#2e3a4b}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;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:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#024a88;position:absolute;top:-90px;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:#677ea1!important}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-img{width:210px;margin:10px 0 0 10px}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fff;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}\n"] }]
535
+ args: [{ selector: "sidebar", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: LocalizationService, useClass: SideBarLoc }], standalone: true, imports: [NgClass, SlimScroll, NgFor, NgTemplateOutlet, NgIf, RouterLinkActive, RouterLink, FormsModule, EsTableModule, LocalizationModule], template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <img *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img\" src=\"assets/img/logo/logo.png\" alt=\"\">\r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/logo_sm.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <!--Ricerca globale-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\">\r\n <li *ngFor=\"let item of menuItems; let last = last;\" \r\n class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\" \r\n [class.has-sub-menu]=\"item.subMenu\"\r\n [class.sidebar-item-expanded]=\"item.expanded\" \r\n [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 <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div class=\"app-padding-15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\">\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-from-bracket\"></i>&nbsp;Logout</div>\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-left\"></i>&nbsp;Cambia Tenant</div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [style.padding-left.px]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"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 [style.padding-left.px]=\"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 [style.padding-left.px]=\"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 <ng-container *ngFor=\"let subitem of item.subMenu\" >\r\n <li *ngIf=\"subitem.visible\" class=\"sidebar-sublist-item level-{{item.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ng-container>\r\n </ul>\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: [".app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.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 #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;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;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.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:#3e4d64}.sidebar-sublist .level-1{background-color:#364357}.sidebar-sublist .level-2{background-color:#2e3a4b}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;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:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#024a88;position:absolute;top:-90px;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:#677ea1!important}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-img{width:210px;margin:10px 0 0 10px}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fff;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}\n"] }]
536
536
  }], ctorParameters: function () { return [{ type: i1$2.LocalizationService }, { type: i0.Type, decorators: [{
537
537
  type: Optional
538
538
  }, {