@esfaenza/core 16.2.27 → 17.3.17
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.
- package/components/back-top/back-top.component.d.ts +12 -12
- package/components/base/base.component.d.ts +26 -26
- package/components/base/embedding.component.d.ts +22 -22
- package/components/base/reactive.component.d.ts +9 -9
- package/components/breadcrumb/breadcrumb.component.d.ts +26 -26
- package/components/components.module.d.ts +32 -32
- package/components/error/404/pagenotfound.component.d.ts +15 -15
- package/components/error/500/servererror.component.d.ts +20 -20
- package/components/error/Angular/angularerror.component.d.ts +25 -25
- package/components/es-image-cropper/es-image-cropper.component.d.ts +25 -25
- package/components/es-modal/es-modal-head/es-modal-head.component.d.ts +11 -11
- package/components/es-modal/es-modal.component.d.ts +18 -18
- package/components/external-page/external_pages.component.d.ts +21 -21
- package/components/index.d.ts +5 -5
- package/components/jace-login/jace-login.component.d.ts +8 -8
- package/components/jace-resource/jace-resource.component.d.ts +25 -25
- package/components/labeled-span/labeled-span.component.d.ts +11 -11
- package/components/navbar/navbar.component.d.ts +58 -58
- package/components/navbar/navbar.component.loc.d.ts +8 -8
- package/components/page/pages.component.d.ts +23 -23
- package/components/public-api.d.ts +21 -21
- package/components/redirecter/redirecter.component.d.ts +23 -23
- package/components/sidebar/sidebar.component.d.ts +64 -64
- package/components/sidebar/sidebar.component.loc.d.ts +8 -8
- package/components/user_infos/user_infos.component.d.ts +50 -50
- package/components/user_infos/user_infos.component.loc.d.ts +8 -8
- package/directives/componentHost/componentHost.directive.d.ts +12 -12
- package/directives/directives.module.d.ts +12 -12
- package/directives/draggable/draggable.directive.d.ts +13 -13
- package/directives/es-modal/es-modal.directive.d.ts +20 -20
- package/directives/es-routerLink/es-routerLink.directive.d.ts +13 -13
- package/directives/index.d.ts +5 -5
- package/directives/public-api.d.ts +7 -7
- package/directives/slim-scroll/slim-scroll.directive.d.ts +15 -15
- package/directives/widget/widget.directive.d.ts +9 -9
- package/domain/index.d.ts +5 -5
- package/domain/models/core/ApplicationJob.d.ts +12 -12
- package/domain/models/core/ApplicationMenu.d.ts +16 -16
- package/domain/models/core/ApplicationRoutes.d.ts +2 -2
- package/domain/models/core/EnvOptions.d.ts +15 -15
- package/domain/models/core/GenericItem.d.ts +10 -10
- package/domain/models/core/KeyValue.d.ts +5 -5
- package/domain/models/global_search/SaerchResultContainer.d.ts +5 -5
- package/domain/models/global_search/SearchResult.d.ts +10 -10
- package/domain/models/jace/AccountScope.d.ts +9 -9
- package/domain/models/jace/ActiveModuleView.d.ts +11 -11
- package/domain/models/jace/CategoriesWithModules.d.ts +6 -6
- package/domain/models/jace/JaceAccount.d.ts +17 -17
- package/domain/models/jace/JaceIdentity.d.ts +17 -17
- package/domain/models/jace/JaceModule.d.ts +8 -8
- package/domain/models/jace/JacePermission.d.ts +10 -10
- package/domain/models/jace/JaceRole.d.ts +13 -13
- package/domain/models/jace/JaceUser.d.ts +9 -9
- package/domain/models/user/UpdateAccountRecoverySettingsDto.d.ts +5 -5
- package/domain/models/user/UpdatePasswordDto.d.ts +9 -9
- package/domain/models/user/UpdateProfilePictureDto.d.ts +4 -4
- package/domain/models/user/UserAccount.d.ts +23 -23
- package/domain/public-api.d.ts +22 -22
- package/domain/tokens.d.ts +22 -22
- package/esm2022/components/back-top/back-top.component.mjs +42 -42
- package/esm2022/components/base/base.component.mjs +67 -67
- package/esm2022/components/base/embedding.component.mjs +64 -64
- package/esm2022/components/base/reactive.component.mjs +27 -27
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +80 -80
- package/esm2022/components/components.module.mjs +96 -96
- package/esm2022/components/error/404/pagenotfound.component.mjs +35 -35
- package/esm2022/components/error/500/servererror.component.mjs +46 -46
- package/esm2022/components/error/Angular/angularerror.component.mjs +62 -62
- package/esm2022/components/es-image-cropper/es-image-cropper.component.mjs +82 -82
- package/esm2022/components/es-modal/es-modal-head/es-modal-head.component.mjs +22 -22
- package/esm2022/components/es-modal/es-modal.component.mjs +40 -40
- package/esm2022/components/esfaenza-core-components.mjs +4 -4
- package/esm2022/components/external-page/external_pages.component.mjs +48 -48
- package/esm2022/components/jace-login/jace-login.component.mjs +31 -31
- package/esm2022/components/jace-resource/jace-resource.component.mjs +68 -68
- package/esm2022/components/labeled-span/labeled-span.component.mjs +25 -25
- package/esm2022/components/navbar/navbar.component.loc.mjs +40 -40
- package/esm2022/components/navbar/navbar.component.mjs +223 -223
- package/esm2022/components/page/pages.component.mjs +60 -60
- package/esm2022/components/public-api.mjs +21 -21
- package/esm2022/components/redirecter/redirecter.component.mjs +65 -65
- package/esm2022/components/sidebar/sidebar.component.loc.mjs +38 -38
- package/esm2022/components/sidebar/sidebar.component.mjs +286 -286
- package/esm2022/components/user_infos/user_infos.component.loc.mjs +42 -42
- package/esm2022/components/user_infos/user_infos.component.mjs +148 -148
- package/esm2022/directives/componentHost/componentHost.directive.mjs +29 -29
- package/esm2022/directives/directives.module.mjs +20 -20
- package/esm2022/directives/draggable/draggable.directive.mjs +49 -49
- package/esm2022/directives/es-modal/es-modal.directive.mjs +79 -79
- package/esm2022/directives/es-routerLink/es-routerLink.directive.mjs +55 -55
- package/esm2022/directives/esfaenza-core-directives.mjs +4 -4
- package/esm2022/directives/public-api.mjs +7 -7
- package/esm2022/directives/slim-scroll/slim-scroll.directive.mjs +41 -41
- package/esm2022/directives/widget/widget.directive.mjs +37 -37
- package/esm2022/domain/esfaenza-core-domain.mjs +4 -4
- package/esm2022/domain/models/core/ApplicationJob.mjs +2 -2
- package/esm2022/domain/models/core/ApplicationMenu.mjs +25 -25
- package/esm2022/domain/models/core/ApplicationRoutes.mjs +2 -2
- package/esm2022/domain/models/core/EnvOptions.mjs +12 -12
- package/esm2022/domain/models/core/GenericItem.mjs +11 -11
- package/esm2022/domain/models/core/KeyValue.mjs +14 -14
- package/esm2022/domain/models/global_search/SaerchResultContainer.mjs +5 -5
- package/esm2022/domain/models/global_search/SearchResult.mjs +7 -7
- package/esm2022/domain/models/jace/AccountScope.mjs +7 -7
- package/esm2022/domain/models/jace/ActiveModuleView.mjs +5 -5
- package/esm2022/domain/models/jace/CategoriesWithModules.mjs +6 -6
- package/esm2022/domain/models/jace/JaceAccount.mjs +2 -2
- package/esm2022/domain/models/jace/JaceIdentity.mjs +15 -15
- package/esm2022/domain/models/jace/JaceModule.mjs +9 -9
- package/esm2022/domain/models/jace/JacePermission.mjs +2 -2
- package/esm2022/domain/models/jace/JaceRole.mjs +8 -8
- package/esm2022/domain/models/jace/JaceUser.mjs +2 -2
- package/esm2022/domain/models/user/UpdateAccountRecoverySettingsDto.mjs +6 -6
- package/esm2022/domain/models/user/UpdatePasswordDto.mjs +10 -10
- package/esm2022/domain/models/user/UpdateProfilePictureDto.mjs +5 -5
- package/esm2022/domain/models/user/UserAccount.mjs +2 -2
- package/esm2022/domain/public-api.mjs +22 -22
- package/esm2022/domain/tokens.mjs +16 -16
- package/esm2022/esfaenza-core.mjs +4 -4
- package/esm2022/helpers/classes/ResizeListener.mjs +38 -38
- package/esm2022/helpers/esfaenza-core-helpers.mjs +4 -4
- package/esm2022/helpers/public-api.mjs +1 -1
- package/esm2022/lib/app.component.mjs +34 -34
- package/esm2022/lib/core.module.mjs +258 -258
- package/esm2022/modules/classes/_base.module.mjs +31 -31
- package/esm2022/modules/classes/_embedding.module.mjs +26 -26
- package/esm2022/modules/classes/_shared.module.mjs +46 -46
- package/esm2022/modules/classes/t_c.module.mjs +85 -85
- package/esm2022/modules/esfaenza-core-modules.mjs +4 -4
- package/esm2022/modules/public-api.mjs +4 -4
- package/esm2022/pipes/classes/included_in.pipe.mjs +19 -19
- package/esm2022/pipes/classes/safe_html.pipe.mjs +20 -20
- package/esm2022/pipes/classes/safe_script.pipe.mjs +20 -20
- package/esm2022/pipes/classes/safe_style.pipe.mjs +20 -20
- package/esm2022/pipes/classes/safe_url.pipe.mjs +20 -20
- package/esm2022/pipes/esfaenza-core-pipes.mjs +4 -4
- package/esm2022/pipes/pipes.module.mjs +19 -19
- package/esm2022/pipes/public-api.mjs +6 -6
- package/esm2022/public-api.mjs +2 -2
- package/esm2022/services/classes/app.accesstoken.mjs +1041 -1041
- package/esm2022/services/classes/app.completedjobredirection.mjs +17 -17
- package/esm2022/services/classes/app.errorhandler.mjs +41 -41
- package/esm2022/services/classes/app.event.mjs +26 -26
- package/esm2022/services/classes/app.globalsearch.mjs +33 -33
- package/esm2022/services/classes/app.httpextensions.loc.mjs +14 -14
- package/esm2022/services/classes/app.httpextensions.mjs +90 -90
- package/esm2022/services/classes/app.menufilter.mjs +20 -20
- package/esm2022/services/classes/app.routeguard.mjs +22 -22
- package/esm2022/services/classes/app.session.mjs +40 -40
- package/esm2022/services/classes/app.state.mjs +229 -229
- package/esm2022/services/classes/preferences/app.cache.persistor.mjs +94 -94
- package/esm2022/services/classes/preferences/app.preference.persistor.mjs +94 -94
- package/esm2022/services/classes/preferences/user/app.userpreferences.base.mjs +101 -101
- package/esm2022/services/esfaenza-core-services.mjs +4 -4
- package/esm2022/services/public-api.mjs +13 -13
- package/fesm2022/esfaenza-core-components.mjs +1479 -1479
- package/fesm2022/esfaenza-core-components.mjs.map +1 -1
- package/fesm2022/esfaenza-core-directives.mjs +269 -269
- package/fesm2022/esfaenza-core-directives.mjs.map +1 -1
- package/fesm2022/esfaenza-core-domain.mjs +153 -153
- package/fesm2022/esfaenza-core-domain.mjs.map +1 -1
- package/fesm2022/esfaenza-core-helpers.mjs +38 -38
- package/fesm2022/esfaenza-core-helpers.mjs.map +1 -1
- package/fesm2022/esfaenza-core-modules.mjs +132 -132
- package/fesm2022/esfaenza-core-modules.mjs.map +1 -1
- package/fesm2022/esfaenza-core-pipes.mjs +96 -96
- package/fesm2022/esfaenza-core-pipes.mjs.map +1 -1
- package/fesm2022/esfaenza-core-services.mjs +1754 -1754
- package/fesm2022/esfaenza-core-services.mjs.map +1 -1
- package/fesm2022/esfaenza-core.mjs +225 -225
- package/fesm2022/esfaenza-core.mjs.map +1 -1
- package/helpers/classes/ResizeListener.d.ts +12 -12
- package/helpers/index.d.ts +5 -5
- package/helpers/public-api.d.ts +1 -1
- package/index.d.ts +5 -5
- package/lib/app.component.d.ts +13 -13
- package/lib/core.module.d.ts +86 -86
- package/modules/classes/_base.module.d.ts +4 -4
- package/modules/classes/_embedding.module.d.ts +11 -11
- package/modules/classes/_shared.module.d.ts +29 -29
- package/modules/classes/t_c.module.d.ts +19 -19
- package/modules/index.d.ts +5 -5
- package/modules/public-api.d.ts +4 -4
- package/package.json +50 -50
- package/pipes/classes/included_in.pipe.d.ts +7 -7
- package/pipes/classes/safe_html.pipe.d.ts +10 -10
- package/pipes/classes/safe_script.pipe.d.ts +10 -10
- package/pipes/classes/safe_style.pipe.d.ts +10 -10
- package/pipes/classes/safe_url.pipe.d.ts +10 -10
- package/pipes/index.d.ts +5 -5
- package/pipes/pipes.module.d.ts +11 -11
- package/pipes/public-api.d.ts +6 -6
- package/public-api.d.ts +2 -2
- package/services/classes/app.accesstoken.d.ts +17 -17
- package/services/classes/app.completedjobredirection.d.ts +12 -12
- package/services/classes/app.errorhandler.d.ts +11 -11
- package/services/classes/app.event.d.ts +10 -10
- package/services/classes/app.globalsearch.d.ts +25 -25
- package/services/classes/app.httpextensions.d.ts +34 -34
- package/services/classes/app.httpextensions.loc.d.ts +8 -8
- package/services/classes/app.menufilter.d.ts +14 -14
- package/services/classes/app.routeguard.d.ts +10 -10
- package/services/classes/app.session.d.ts +15 -15
- package/services/classes/app.state.d.ts +55 -55
- package/services/classes/preferences/app.cache.persistor.d.ts +25 -25
- package/services/classes/preferences/app.preference.persistor.d.ts +25 -25
- package/services/classes/preferences/user/app.userpreferences.base.d.ts +25 -25
- package/services/index.d.ts +5 -5
- package/services/public-api.d.ts +13 -13
- package/theme/initial.scss +13 -4
|
@@ -1,229 +1,229 @@
|
|
|
1
|
-
import { Inject, Injectable } from "@angular/core";
|
|
2
|
-
import { InboundMessageTypes } from "@esfaenza/extensions";
|
|
3
|
-
// Core
|
|
4
|
-
import { ANONYMOUS_MODE } from "@esfaenza/core/domain";
|
|
5
|
-
// Direttive, Componenti, Librerie
|
|
6
|
-
import * as customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
7
|
-
import * as isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
|
|
8
|
-
import * as isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
|
|
9
|
-
import * as isBetween from 'dayjs/plugin/isBetween';
|
|
10
|
-
import * as duration from 'dayjs/plugin/duration';
|
|
11
|
-
import * as minMax from 'dayjs/plugin/minMax';
|
|
12
|
-
import * as utc from 'dayjs/plugin/utc';
|
|
13
|
-
import { Subject, filter } from "rxjs";
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "@angular/router";
|
|
16
|
-
import * as i2 from "@esfaenza/localizations";
|
|
17
|
-
import * as i3 from "./app.accesstoken";
|
|
18
|
-
import * as i4 from "@esfaenza/signalr-notifications";
|
|
19
|
-
import * as i5 from "@esfaenza/extensions";
|
|
20
|
-
export class AppState {
|
|
21
|
-
set Modules(modules) {
|
|
22
|
-
this._modules = modules;
|
|
23
|
-
this.notifyDataChanged("modules.Retrieved", this._modules);
|
|
24
|
-
}
|
|
25
|
-
get Modules() { return this._modules; }
|
|
26
|
-
constructor(router, lc, bts, notifications, MessageDef, intercom, emb, anonymousMode) {
|
|
27
|
-
this.router = router;
|
|
28
|
-
this.lc = lc;
|
|
29
|
-
this.bts = bts;
|
|
30
|
-
this.notifications = notifications;
|
|
31
|
-
this.MessageDef = MessageDef;
|
|
32
|
-
this.intercom = intercom;
|
|
33
|
-
this.emb = emb;
|
|
34
|
-
this.anonymousMode = anonymousMode;
|
|
35
|
-
this.redirectingToLogin = false;
|
|
36
|
-
this.handlingError = false;
|
|
37
|
-
this.christmasTime = false;
|
|
38
|
-
this.halloweenTime = false;
|
|
39
|
-
this.jobsInProgress = 0;
|
|
40
|
-
this.allJobs = [];
|
|
41
|
-
this.jobWithIdsCache = {};
|
|
42
|
-
this.notifyOnCompletedJobs = true;
|
|
43
|
-
this._data = new Subject();
|
|
44
|
-
this._subscriptions = new Map();
|
|
45
|
-
this.ModulesLocalizations = {};
|
|
46
|
-
this.hookEmbedding();
|
|
47
|
-
this.setupDayjs();
|
|
48
|
-
this.setupSignalRJobListening();
|
|
49
|
-
this.JaceIdentity = null;
|
|
50
|
-
this._data.subscribe((data) => this._onEvent(data));
|
|
51
|
-
//Decide se siamo attorno a natale
|
|
52
|
-
var today = dayjs();
|
|
53
|
-
var thisYear = today.year();
|
|
54
|
-
var lowerBound = dayjs("18/12/" + thisYear, "DD/MM/YYYY");
|
|
55
|
-
var upperBound = dayjs("07/01/" + (thisYear + 1), "DD/MM/YYYY");
|
|
56
|
-
this.christmasTime = today > lowerBound && today < upperBound;
|
|
57
|
-
//Decide se siamo attorno ad halloween
|
|
58
|
-
var lowerBound = dayjs("28/10/" + thisYear, "DD/MM/YYYY");
|
|
59
|
-
var upperBound = dayjs("05/11/" + thisYear, "DD/MM/YYYY");
|
|
60
|
-
this.halloweenTime = today > lowerBound && today < upperBound;
|
|
61
|
-
this.intercom.inbounds.subscribe((t) => { this.handleInboundMessage(t); });
|
|
62
|
-
}
|
|
63
|
-
// Collego le informazioni dell'embedding che devono appoggiarsi all'app state in modo che possano comunicare col resto dell'applicazione
|
|
64
|
-
hookEmbedding() {
|
|
65
|
-
this.emb.MessageObserver.pipe(filter(ev => ev.event == "navigation")).subscribe(event => {
|
|
66
|
-
var navigationOp = event?.data?.internalNavigation ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo";
|
|
67
|
-
this.notifyDataChanged(navigationOp, event?.data?.title);
|
|
68
|
-
});
|
|
69
|
-
this.emb.MessageObserver.pipe(filter(ev => ev.event == "window-message")).subscribe(event => {
|
|
70
|
-
this.notifyDataChanged("window-message", event?.data);
|
|
71
|
-
});
|
|
72
|
-
this._data.pipe(filter(e => e.event == "menu.isCollapsed")).subscribe(_ => {
|
|
73
|
-
this.emb.refreshBoundariesOnMenuCollapse();
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
/** Tenant§Account§User§APPNAME */
|
|
77
|
-
getSessionIdentity() {
|
|
78
|
-
if (this.SessionIdentity)
|
|
79
|
-
return this.SessionIdentity;
|
|
80
|
-
// Se non ho un id mi manca il login, quindi via di qua
|
|
81
|
-
var id = this.getJaceIDentity();
|
|
82
|
-
if (!id) {
|
|
83
|
-
if (this.anonymousMode)
|
|
84
|
-
return "";
|
|
85
|
-
this.router.navigate(["login"]);
|
|
86
|
-
return "";
|
|
87
|
-
}
|
|
88
|
-
this.SessionIdentity = "" + id.Idtenant + "§" + id.IdAccount + "§" + id.IdUser + "§" + myconfig.AppData.ModuleId;
|
|
89
|
-
return this.SessionIdentity;
|
|
90
|
-
}
|
|
91
|
-
registerNavigationIfMeaningful(route) {
|
|
92
|
-
let title = route.data["title"];
|
|
93
|
-
let internal = route.data["internalNavigation"];
|
|
94
|
-
// Permette di chiamare sto registerNavigation a prescindere e fare opt out se non è una route navigabile
|
|
95
|
-
if (!title)
|
|
96
|
-
return;
|
|
97
|
-
/*
|
|
98
|
-
* Parent ({url: [{path: "{module}"}]})
|
|
99
|
-
* Parent ({url: [{path: ""}]}) (Root del modulo lazy)
|
|
100
|
-
* -> Navigazione attuale <-
|
|
101
|
-
*/
|
|
102
|
-
let module = route.parent?.parent?.url[0]?.path;
|
|
103
|
-
let loc = module ? this.ModulesLocalizations[module] : null;
|
|
104
|
-
if (!module)
|
|
105
|
-
console.error("Impossibile estrapolare il modulo dalla navigazione (Atteso Modulo al secondo livello di parentela partendo dal componente attuale): " + route.pathFromRoot.map(v => v.url.map(segment => segment.toString()).join('/')).join('/'));
|
|
106
|
-
this.notifyDataChanged(internal ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo", loc ? loc.loc(title) : title);
|
|
107
|
-
}
|
|
108
|
-
handleInboundMessage(t) {
|
|
109
|
-
switch (t.type) {
|
|
110
|
-
case InboundMessageTypes.Navigation:
|
|
111
|
-
this.notifyDataChanged(t.message.sub ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo", t.message.routeTitle);
|
|
112
|
-
// export const MK_ADM = "EsAdminModule";
|
|
113
|
-
// AdmMessageTypes.Message = 0;
|
|
114
|
-
// definita in admin-module.
|
|
115
|
-
// admin-module usa core quindi referenze circolari no-no-no
|
|
116
|
-
this.intercom.send(0, "Navigation Message Received", "EsAdminModule");
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
setupDayjs() {
|
|
121
|
-
dayjs.extend(customParseFormat.default || customParseFormat);
|
|
122
|
-
dayjs.extend(minMax.default || minMax);
|
|
123
|
-
dayjs.extend(isBetween.default || isBetween);
|
|
124
|
-
dayjs.extend(isSameOrBefore.default || isSameOrBefore);
|
|
125
|
-
dayjs.extend(isSameOrAfter.default || isSameOrAfter);
|
|
126
|
-
dayjs.extend(duration.default || duration);
|
|
127
|
-
dayjs.extend(utc.default || utc);
|
|
128
|
-
// Require e collegamento con la localizzazione per dayjs
|
|
129
|
-
import("dayjs/locale/" + this.lc.SmallLocale + ".js").then(locale => { dayjs.locale(locale); });
|
|
130
|
-
}
|
|
131
|
-
setupSignalRJobListening() {
|
|
132
|
-
this.notifications.observe(this.MessageDef.IN_JobProgressNotification).subscribe((ev) => {
|
|
133
|
-
var identity = this.getJaceIDentity();
|
|
134
|
-
if (!identity)
|
|
135
|
-
return;
|
|
136
|
-
var desc = (ev.description || ev.actionid) + " (" + (ev.user || identity.DsUser) + ")";
|
|
137
|
-
let job = {
|
|
138
|
-
id: ev.instance,
|
|
139
|
-
description: desc,
|
|
140
|
-
smalldescription: desc.length > 35 ? desc.substring(0, 30) + "..." : desc,
|
|
141
|
-
percentage: this.roundToTwo(ev.progress),
|
|
142
|
-
completed: ev.type == 'Completed',
|
|
143
|
-
fileid: ev.resultfile,
|
|
144
|
-
reportid: ev.resultreport,
|
|
145
|
-
reportpars: ev.resultreportparams,
|
|
146
|
-
complexreportid: ev.resultcomplexreport
|
|
147
|
-
};
|
|
148
|
-
switch (ev.type) {
|
|
149
|
-
case "Started":
|
|
150
|
-
if (this.jobWithIdsCache[ev.instance]) {
|
|
151
|
-
console.warn("Job already registered on the 'Started' callback");
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
this.jobWithIdsCache[ev.instance] = job;
|
|
155
|
-
this.allJobs.splice(0, 0, job);
|
|
156
|
-
this.notifyDataChanged("app.startedJob", job.description);
|
|
157
|
-
break;
|
|
158
|
-
case "Progress":
|
|
159
|
-
// Se mi arriva un progress di un job che non ho significa che mi sono loggato ora con dei Job in corso
|
|
160
|
-
// quindi per prima cosa devo metterlo in lista
|
|
161
|
-
if (!this.jobWithIdsCache[ev.instance]) {
|
|
162
|
-
this.jobWithIdsCache[ev.instance] = job;
|
|
163
|
-
this.allJobs.splice(0, 0, job);
|
|
164
|
-
}
|
|
165
|
-
this.jobWithIdsCache[ev.instance].percentage = this.roundToTwo(ev.progress);
|
|
166
|
-
this.notifyDataChanged("app.progressJob", { description: job.description, progress: this.jobWithIdsCache[ev.instance].percentage });
|
|
167
|
-
break;
|
|
168
|
-
case "Completed":
|
|
169
|
-
if (!this.jobWithIdsCache[ev.instance]) {
|
|
170
|
-
this.jobWithIdsCache[ev.instance] = job;
|
|
171
|
-
this.allJobs.splice(0, 0, job);
|
|
172
|
-
}
|
|
173
|
-
var jobToUpdate = this.jobWithIdsCache[ev.instance];
|
|
174
|
-
jobToUpdate.percentage = 100;
|
|
175
|
-
jobToUpdate.fileid = ev.resultfile;
|
|
176
|
-
jobToUpdate.reportid = ev.resultreport;
|
|
177
|
-
jobToUpdate.reportpars = ev.resultreportparams;
|
|
178
|
-
jobToUpdate.completed = true;
|
|
179
|
-
if (this.notifyOnCompletedJobs)
|
|
180
|
-
this.notifyDataChanged("app.completedJob", jobToUpdate.description);
|
|
181
|
-
break;
|
|
182
|
-
}
|
|
183
|
-
this.jobsInProgress = this.allJobs.filter(t => !t.completed).length;
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
roundToTwo(num) {
|
|
187
|
-
return Math.round(num * 100) / 100;
|
|
188
|
-
}
|
|
189
|
-
getJaceIDentity() {
|
|
190
|
-
if (this.JaceIdentity)
|
|
191
|
-
return this.JaceIdentity;
|
|
192
|
-
this.JaceIdentity = this.bts.getJaceIdentity();
|
|
193
|
-
return this.JaceIdentity;
|
|
194
|
-
}
|
|
195
|
-
notifyDataChanged(event, value) {
|
|
196
|
-
this._data[event] = value;
|
|
197
|
-
this._data.next({
|
|
198
|
-
event: event,
|
|
199
|
-
data: this._data[event]
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
subscribe(event, callback) {
|
|
203
|
-
var subscribers = this._subscriptions.get(event) || [];
|
|
204
|
-
subscribers.push(callback);
|
|
205
|
-
this._subscriptions.set(event, subscribers);
|
|
206
|
-
}
|
|
207
|
-
_onEvent(data) {
|
|
208
|
-
var subscribers = this._subscriptions.get(data["event"]) || [];
|
|
209
|
-
subscribers.forEach((callback) => {
|
|
210
|
-
callback.call(null, data["data"]);
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
setSidebarWidth(width) {
|
|
214
|
-
this.sidebarWidth = width;
|
|
215
|
-
}
|
|
216
|
-
setHeaderHeight(height) {
|
|
217
|
-
this.headerHeight = height;
|
|
218
|
-
}
|
|
219
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
220
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
221
|
-
}
|
|
222
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
223
|
-
type: Injectable,
|
|
224
|
-
args: [{ providedIn: "root" }]
|
|
225
|
-
}], ctorParameters:
|
|
226
|
-
type: Inject,
|
|
227
|
-
args: [ANONYMOUS_MODE]
|
|
228
|
-
}] }]
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9zcmMvY2xhc3Nlcy9hcHAuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFvQyxNQUFNLHNCQUFzQixDQUFDO0FBTTdGLE9BQU87QUFDUCxPQUFPLEVBQW9CLGNBQWMsRUFBNEMsTUFBTSx1QkFBdUIsQ0FBQztBQUVuSCxrQ0FBa0M7QUFDbEMsT0FBTyxLQUFLLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxjQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxLQUFLLGFBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssU0FBUyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBTXZDLE1BQU0sT0FBTyxRQUFRO0lBd0JqQixJQUFXLE9BQU8sQ0FBQyxPQUEyQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRCxJQUFXLE9BQU8sS0FBeUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVsRSxZQUFvQixNQUFjLEVBQVUsRUFBdUIsRUFBVSxHQUFpQixFQUFV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QjFRLFFBQVEsY0FESyxNQUFNOzs0RkFDbkIsUUFBUTtrQkFEcEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQStCZ08sTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBCYXNlTWVzc2FnZVNlcnZpY2UsIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLCBKb2JQcm9ncmVzc0R0byB9IGZyb20gXCJAZXNmYWVuemEvc2lnbmFsci1ub3RpZmljYXRpb25zXCI7XHJcbmltcG9ydCB7IEluYm91bmRNZXNzYWdlVHlwZXMsIEludGVyQ29tTWVzc2FnZSwgSW50ZXJDb21TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSBcIi4vYXBwLmFjY2Vzc3Rva2VuXCI7XHJcblxyXG5pbXBvcnQgeyBBcHBFbWJlZGRpbmdFeHRlbnNpb25zIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG4vLyBDb3JlXHJcbmltcG9ydCB7IEFjdGl2ZU1vZHVsZVZpZXcsIEFOT05ZTU9VU19NT0RFLCBBcHBsaWNhdGlvbkpvYiwgRW52T3B0aW9ucywgSmFjZUlkZW50aXR5IH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL2RvbWFpblwiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgKiBhcyBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnO1xyXG5pbXBvcnQgKiBhcyBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUnO1xyXG5pbXBvcnQgKiBhcyBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyJztcclxuaW1wb3J0ICogYXMgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4nO1xyXG5pbXBvcnQgKiBhcyBkdXJhdGlvbiBmcm9tICdkYXlqcy9wbHVnaW4vZHVyYXRpb24nO1xyXG5pbXBvcnQgKiBhcyBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heCc7XHJcbmltcG9ydCAqIGFzIHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZmlsdGVyIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcbmRlY2xhcmUgdmFyIG15Y29uZmlnOiBFbnZPcHRpb25zO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxyXG5leHBvcnQgY2xhc3MgQXBwU3RhdGUge1xyXG5cclxuICAgIHB1YmxpYyBzaWRlYmFyV2lkdGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBoZWFkZXJIZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RpbmdUb0xvZ2luOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFuZGxpbmdFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNocmlzdG1hc1RpbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoYWxsb3dlZW5UaW1lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBTZXNzaW9uSWRlbnRpdHk6IHN0cmluZztcclxuICAgIHByaXZhdGUgSmFjZUlkZW50aXR5OiBKYWNlSWRlbnRpdHk7XHJcblxyXG4gICAgcHVibGljIGpvYnNJblByb2dyZXNzOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGFsbEpvYnM6IEFwcGxpY2F0aW9uSm9iW10gPSBbXTtcclxuICAgIHByaXZhdGUgam9iV2l0aElkc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogQXBwbGljYXRpb25Kb2IgfSA9IHt9O1xyXG4gICAgcHVibGljIG5vdGlmeU9uQ29tcGxldGVkSm9iczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHJpdmF0ZSBfZGF0YSA9IG5ldyBTdWJqZWN0PE9iamVjdD4oKTtcclxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8RnVuY3Rpb24+PigpO1xyXG5cclxuICAgIHB1YmxpYyBNb2R1bGVzTG9jYWxpemF0aW9uczogeyBbaWQ6IHN0cmluZ106IExvY2FsaXphdGlvblNlcnZpY2UgfSA9IHt9O1xyXG5cclxuICAgIHByaXZhdGUgX21vZHVsZXM6IEFjdGl2ZU1vZHVsZVZpZXdbXTtcclxuICAgIHB1YmxpYyBzZXQgTW9kdWxlcyhtb2R1bGVzOiBBY3RpdmVNb2R1bGVWaWV3W10pIHtcclxuICAgICAgICB0aGlzLl9tb2R1bGVzID0gbW9kdWxlcztcclxuICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKFwibW9kdWxlcy5SZXRyaWV2ZWRcIiwgdGhpcy5fbW9kdWxlcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IE1vZHVsZXMoKTogQWN0aXZlTW9kdWxlVmlld1tdIHsgcmV0dXJuIHRoaXMuX21vZHVsZXM7IH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBwcml2YXRlIGJ0czogVG9rZW5TZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLCBwcml2YXRlIE1lc3NhZ2VEZWY6IEJhc2VNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBpbnRlcmNvbTogSW50ZXJDb21TZXJ2aWNlLCBwcml2YXRlIGVtYjogQXBwRW1iZWRkaW5nRXh0ZW5zaW9ucywgQEluamVjdChBTk9OWU1PVVNfTU9ERSkgcHJpdmF0ZSBhbm9ueW1vdXNNb2RlIDogYm9vbGVhbikge1xyXG5cclxuICAgICAgICB0aGlzLmhvb2tFbWJlZGRpbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR1cERheWpzKCk7XHJcbiAgICAgICAgdGhpcy5zZXR1cFNpZ25hbFJKb2JMaXN0ZW5pbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5KYWNlSWRlbnRpdHkgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RhdGEuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLl9vbkV2ZW50KGRhdGEpKTtcclxuXHJcbiAgICAgICAgLy9EZWNpZGUgc2Ugc2lhbW8gYXR0b3JubyBhIG5hdGFsZVxyXG4gICAgICAgIHZhciB0b2RheSA9IGRheWpzKCk7XHJcbiAgICAgICAgdmFyIHRoaXNZZWFyID0gdG9kYXkueWVhcigpO1xyXG4gICAgICAgIHZhciBsb3dlckJvdW5kID0gZGF5anMoXCIxOC8xMi9cIiArIHRoaXNZZWFyLCBcIkREL01NL1lZWVlcIik7XHJcbiAgICAgICAgdmFyIHVwcGVyQm91bmQgPSBkYXlqcyhcIjA3LzAxL1wiICsgKHRoaXNZZWFyICsgMSksIFwiREQvTU0vWVlZWVwiKTtcclxuICAgICAgICB0aGlzLmNocmlzdG1hc1RpbWUgPSB0b2RheSA+IGxvd2VyQm91bmQgJiYgdG9kYXkgPCB1cHBlckJvdW5kO1xyXG5cclxuICAgICAgICAvL0RlY2lkZSBzZSBzaWFtbyBhdHRvcm5vIGFkIGhhbGxvd2VlblxyXG4gICAgICAgIHZhciBsb3dlckJvdW5kID0gZGF5anMoXCIyOC8xMC9cIiArIHRoaXNZZWFyLCBcIkREL01NL1lZWVlcIik7XHJcbiAgICAgICAgdmFyIHVwcGVyQm91bmQgPSBkYXlqcyhcIjA1LzExL1wiICsgdGhpc1llYXIsIFwiREQvTU0vWVlZWVwiKTtcclxuICAgICAgICB0aGlzLmhhbGxvd2VlblRpbWUgPSB0b2RheSA+IGxvd2VyQm91bmQgJiYgdG9kYXkgPCB1cHBlckJvdW5kO1xyXG5cclxuICAgICAgICB0aGlzLmludGVyY29tLmluYm91bmRzLnN1YnNjcmliZSgodDogSW50ZXJDb21NZXNzYWdlKSA9PiB7IHRoaXMuaGFuZGxlSW5ib3VuZE1lc3NhZ2UodCk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbGxlZ28gbGUgaW5mb3JtYXppb25pIGRlbGwnZW1iZWRkaW5nIGNoZSBkZXZvbm8gYXBwb2dnaWFyc2kgYWxsJ2FwcCBzdGF0ZSBpbiBtb2RvIGNoZSBwb3NzYW5vIGNvbXVuaWNhcmUgY29sIHJlc3RvIGRlbGwnYXBwbGljYXppb25lXHJcbiAgICBob29rRW1iZWRkaW5nKCkge1xyXG4gICAgICAgIHRoaXMuZW1iLk1lc3NhZ2VPYnNlcnZlci5waXBlKGZpbHRlcihldiA9PiBldi5ldmVudCA9PSBcIm5hdmlnYXRpb25cIikpLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIHZhciBuYXZpZ2F0aW9uT3AgPSBldmVudD8uZGF0YT8uaW50ZXJuYWxOYXZpZ2F0aW9uID8gXCJtZW51LmFkanVzdFN1Yk5hdmlnYXRpb25Ub1wiIDogXCJtZW51LmFkanVzdE5hdmlnYXRpb25Ub1wiO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKG5hdmlnYXRpb25PcCwgZXZlbnQ/LmRhdGE/LnRpdGxlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWIuTWVzc2FnZU9ic2VydmVyLnBpcGUoZmlsdGVyKGV2ID0+IGV2LmV2ZW50ID09IFwid2luZG93LW1lc3NhZ2VcIikpLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZWQoXCJ3aW5kb3ctbWVzc2FnZVwiLCBldmVudD8uZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RhdGEucGlwZShmaWx0ZXIoZSA9PiAoZSBhcyBhbnkpLmV2ZW50ID09IFwibWVudS5pc0NvbGxhcHNlZFwiKSkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtYi5yZWZyZXNoQm91bmRhcmllc09uTWVudUNvbGxhcHNlKClcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVGVuYW50wqdBY2NvdW50wqdVc2VywqdBUFBOQU1FICovXHJcbiAgICBnZXRTZXNzaW9uSWRlbnRpdHkoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5TZXNzaW9uSWRlbnRpdHkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlNlc3Npb25JZGVudGl0eTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIHVuIGlkIG1pIG1hbmNhIGlsIGxvZ2luLCBxdWluZGkgdmlhIGRpIHF1YVxyXG4gICAgICAgIHZhciBpZCA9IHRoaXMuZ2V0SmFjZUlEZW50aXR5KCk7XHJcbiAgICAgICAgaWYgKCFpZCkge1xyXG4gICAgICAgICAgICBpZih0aGlzLmFub255bW91c01vZGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImxvZ2luXCJdKTtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLlNlc3Npb25JZGVudGl0eSA9IFwiXCIgKyBpZC5JZHRlbmFudCArIFwiwqdcIiArIGlkLklkQWNjb3VudCArIFwiwqdcIiArIGlkLklkVXNlciArIFwiwqdcIiArIG15Y29uZmlnLkFwcERhdGEuTW9kdWxlSWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuU2Vzc2lvbklkZW50aXR5O1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyTmF2aWdhdGlvbklmTWVhbmluZ2Z1bChyb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcclxuICAgICAgICBsZXQgdGl0bGUgPSByb3V0ZS5kYXRhW1widGl0bGVcIl07XHJcbiAgICAgICAgbGV0IGludGVybmFsID0gcm91dGUuZGF0YVtcImludGVybmFsTmF2aWdhdGlvblwiXVxyXG5cclxuICAgICAgICAvLyBQZXJtZXR0ZSBkaSBjaGlhbWFyZSBzdG8gcmVnaXN0ZXJOYXZpZ2F0aW9uIGEgcHJlc2NpbmRlcmUgZSBmYXJlIG9wdCBvdXQgc2Ugbm9uIMOoIHVuYSByb3V0ZSBuYXZpZ2FiaWxlXHJcbiAgICAgICAgaWYoIXRpdGxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogIFBhcmVudCAoe3VybDogW3twYXRoOiBcInttb2R1bGV9XCJ9XX0pXHJcbiAgICAgICAgICogICAgICBQYXJlbnQgKHt1cmw6IFt7cGF0aDogXCJcIn1dfSkgKFJvb3QgZGVsIG1vZHVsbyBsYXp5KVxyXG4gICAgICAgICAqICAgICAgICAgIC0+IE5hdmlnYXppb25lIGF0dHVhbGUgPC1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsZXQgbW9kdWxlID0gcm91dGUucGFyZW50Py5wYXJlbnQ/LnVybFswXT8ucGF0aDtcclxuICAgICAgICBsZXQgbG9jID0gbW9kdWxlID8gdGhpcy5Nb2R1bGVzTG9jYWxpemF0aW9uc1ttb2R1bGVdIDogbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKCFtb2R1bGUpXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbXBvc3NpYmlsZSBlc3RyYXBvbGFyZSBpbCBtb2R1bG8gZGFsbGEgbmF2aWdhemlvbmUgKEF0dGVzbyBNb2R1bG8gYWwgc2Vjb25kbyBsaXZlbGxvIGRpIHBhcmVudGVsYSBwYXJ0ZW5kbyBkYWwgY29tcG9uZW50ZSBhdHR1YWxlKTogXCIgKyByb3V0ZS5wYXRoRnJvbVJvb3QubWFwKHYgPT4gdi51cmwubWFwKHNlZ21lbnQgPT4gc2VnbWVudC50b1N0cmluZygpKS5qb2luKCcvJykpLmpvaW4oJy8nKSk7XHJcblxyXG4gICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZWQoaW50ZXJuYWwgPyBcIm1lbnUuYWRqdXN0U3ViTmF2aWdhdGlvblRvXCIgOiBcIm1lbnUuYWRqdXN0TmF2aWdhdGlvblRvXCIsIGxvYyA/IGxvYy5sb2ModGl0bGUpIDogdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUluYm91bmRNZXNzYWdlKHQ6IEludGVyQ29tTWVzc2FnZSkge1xyXG4gICAgICAgIHN3aXRjaCAodC50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgSW5ib3VuZE1lc3NhZ2VUeXBlcy5OYXZpZ2F0aW9uOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlEYXRhQ2hhbmdlZCh0Lm1lc3NhZ2Uuc3ViID8gXCJtZW51LmFkanVzdFN1Yk5hdmlnYXRpb25Ub1wiIDogXCJtZW51LmFkanVzdE5hdmlnYXRpb25Ub1wiLCB0Lm1lc3NhZ2Uucm91dGVUaXRsZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBleHBvcnQgY29uc3QgTUtfQURNID0gXCJFc0FkbWluTW9kdWxlXCI7XHJcbiAgICAgICAgICAgICAgICAvLyBBZG1NZXNzYWdlVHlwZXMuTWVzc2FnZSA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZGVmaW5pdGEgaW4gYWRtaW4tbW9kdWxlLlxyXG4gICAgICAgICAgICAgICAgLy8gYWRtaW4tbW9kdWxlIHVzYSBjb3JlIHF1aW5kaSByZWZlcmVuemUgY2lyY29sYXJpIG5vLW5vLW5vXHJcbiAgICAgICAgICAgICAgICB0aGlzLmludGVyY29tLnNlbmQoMCwgXCJOYXZpZ2F0aW9uIE1lc3NhZ2UgUmVjZWl2ZWRcIiwgXCJFc0FkbWluTW9kdWxlXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRGF5anMoKSB7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKCg8YW55PmN1c3RvbVBhcnNlRm9ybWF0KS5kZWZhdWx0IHx8IGN1c3RvbVBhcnNlRm9ybWF0KTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoKDxhbnk+bWluTWF4KS5kZWZhdWx0IHx8IG1pbk1heCk7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKCg8YW55PmlzQmV0d2VlbikuZGVmYXVsdCB8fCBpc0JldHdlZW4pO1xyXG4gICAgICAgIGRheWpzLmV4dGVuZCgoPGFueT5pc1NhbWVPckJlZm9yZSkuZGVmYXVsdCB8fCBpc1NhbWVPckJlZm9yZSk7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKCg8YW55PmlzU2FtZU9yQWZ0ZXIpLmRlZmF1bHQgfHwgaXNTYW1lT3JBZnRlcik7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKCg8YW55PmR1cmF0aW9uKS5kZWZhdWx0IHx8IGR1cmF0aW9uKTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoKDxhbnk+dXRjKS5kZWZhdWx0IHx8IHV0Yyk7XHJcblxyXG4gICAgICAgIC8vIFJlcXVpcmUgZSBjb2xsZWdhbWVudG8gY29uIGxhIGxvY2FsaXp6YXppb25lIHBlciBkYXlqc1xyXG4gICAgICAgIGltcG9ydChcImRheWpzL2xvY2FsZS9cIiArIHRoaXMubGMuU21hbGxMb2NhbGUgKyBcIi5qc1wiKS50aGVuKGxvY2FsZSA9PiB7IGRheWpzLmxvY2FsZShsb2NhbGUpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR1cFNpZ25hbFJKb2JMaXN0ZW5pbmcoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLm9ic2VydmUodGhpcy5NZXNzYWdlRGVmLklOX0pvYlByb2dyZXNzTm90aWZpY2F0aW9uKS5zdWJzY3JpYmUoKGV2OiBKb2JQcm9ncmVzc0R0bykgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIGlkZW50aXR5ID0gdGhpcy5nZXRKYWNlSURlbnRpdHkoKTtcclxuICAgICAgICAgICAgaWYgKCFpZGVudGl0eSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIGRlc2MgPSAoZXYuZGVzY3JpcHRpb24gfHwgZXYuYWN0aW9uaWQpICsgXCIgKFwiICsgKGV2LnVzZXIgfHwgaWRlbnRpdHkuRHNVc2VyKSArIFwiKVwiO1xyXG4gICAgICAgICAgICBsZXQgam9iOiBBcHBsaWNhdGlvbkpvYiA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBldi5pbnN0YW5jZSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjLFxyXG4gICAgICAgICAgICAgICAgc21hbGxkZXNjcmlwdGlvbjogZGVzYy5sZW5ndGggPiAzNSA/IGRlc2Muc3Vic3RyaW5nKDAsIDMwKSArIFwiLi4uXCIgOiBkZXNjLFxyXG4gICAgICAgICAgICAgICAgcGVyY2VudGFnZTogdGhpcy5yb3VuZFRvVHdvKGV2LnByb2dyZXNzKSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogZXYudHlwZSA9PSAnQ29tcGxldGVkJyxcclxuICAgICAgICAgICAgICAgIGZpbGVpZDogZXYucmVzdWx0ZmlsZSxcclxuICAgICAgICAgICAgICAgIHJlcG9ydGlkOiBldi5yZXN1bHRyZXBvcnQsXHJcbiAgICAgICAgICAgICAgICByZXBvcnRwYXJzOiBldi5yZXN1bHRyZXBvcnRwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBjb21wbGV4cmVwb3J0aWQ6IGV2LnJlc3VsdGNvbXBsZXhyZXBvcnRcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXYudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlN0YXJ0ZWRcIjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkpvYiBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gdGhlICdTdGFydGVkJyBjYWxsYmFja1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV0gPSBqb2I7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxKb2JzLnNwbGljZSgwLCAwLCBqb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZWQoXCJhcHAuc3RhcnRlZEpvYlwiLCBqb2IuZGVzY3JpcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlByb2dyZXNzXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2UgbWkgYXJyaXZhIHVuIHByb2dyZXNzIGRpIHVuIGpvYiBjaGUgbm9uIGhvIHNpZ25pZmljYSBjaGUgbWkgc29ubyBsb2dnYXRvIG9yYSBjb24gZGVpIEpvYiBpbiBjb3Jzb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHF1aW5kaSBwZXIgcHJpbWEgY29zYSBkZXZvIG1ldHRlcmxvIGluIGxpc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdID0gam9iO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbEpvYnMuc3BsaWNlKDAsIDAsIGpvYik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXS5wZXJjZW50YWdlID0gdGhpcy5yb3VuZFRvVHdvKGV2LnByb2dyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKFwiYXBwLnByb2dyZXNzSm9iXCIsIHsgZGVzY3JpcHRpb246IGpvYi5kZXNjcmlwdGlvbiwgcHJvZ3Jlc3M6IHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXS5wZXJjZW50YWdlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIkNvbXBsZXRlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXSA9IGpvYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxKb2JzLnNwbGljZSgwLCAwLCBqb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgam9iVG9VcGRhdGUgPSB0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV07XHJcbiAgICAgICAgICAgICAgICAgICAgam9iVG9VcGRhdGUucGVyY2VudGFnZSA9IDEwMDtcclxuICAgICAgICAgICAgICAgICAgICBqb2JUb1VwZGF0ZS5maWxlaWQgPSBldi5yZXN1bHRmaWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGpvYlRvVXBkYXRlLnJlcG9ydGlkID0gZXYucmVzdWx0cmVwb3J0O1xyXG4gICAgICAgICAgICAgICAgICAgIGpvYlRvVXBkYXRlLnJlcG9ydHBhcnMgPSBldi5yZXN1bHRyZXBvcnRwYXJhbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgam9iVG9VcGRhdGUuY29tcGxldGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm90aWZ5T25Db21wbGV0ZWRKb2JzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKFwiYXBwLmNvbXBsZXRlZEpvYlwiLCBqb2JUb1VwZGF0ZS5kZXNjcmlwdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmpvYnNJblByb2dyZXNzID0gdGhpcy5hbGxKb2JzLmZpbHRlcih0ID0+ICF0LmNvbXBsZXRlZCkubGVuZ3RoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJvdW5kVG9Ud28obnVtKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogMTAwKSAvIDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKYWNlSURlbnRpdHkoKTogSmFjZUlkZW50aXR5IHtcclxuICAgICAgICBpZiAodGhpcy5KYWNlSWRlbnRpdHkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkphY2VJZGVudGl0eTtcclxuICAgICAgICB0aGlzLkphY2VJZGVudGl0eSA9IHRoaXMuYnRzLmdldEphY2VJZGVudGl0eSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkphY2VJZGVudGl0eTtcclxuICAgIH1cclxuXHJcbiAgICBub3RpZnlEYXRhQ2hhbmdlZChldmVudCwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9kYXRhW2V2ZW50XSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuX2RhdGEubmV4dCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5fZGF0YVtldmVudF1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmUoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHN1YnNjcmliZXJzID0gdGhpcy5fc3Vic2NyaXB0aW9ucy5nZXQoZXZlbnQpIHx8IFtdO1xyXG4gICAgICAgIHN1YnNjcmliZXJzLnB1c2goY2FsbGJhY2spO1xyXG5cclxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnNldChldmVudCwgc3Vic2NyaWJlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIF9vbkV2ZW50KGRhdGE6IGFueSkge1xyXG4gICAgICAgIHZhciBzdWJzY3JpYmVycyA9IHRoaXMuX3N1YnNjcmlwdGlvbnMuZ2V0KGRhdGFbXCJldmVudFwiXSkgfHwgW107XHJcblxyXG4gICAgICAgIHN1YnNjcmliZXJzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZGF0YVtcImRhdGFcIl0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTaWRlYmFyV2lkdGgod2lkdGg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEhlYWRlckhlaWdodChoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuaGVhZGVySGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgfVxyXG59Il19
|
|
1
|
+
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { InboundMessageTypes } from "@esfaenza/extensions";
|
|
3
|
+
// Core
|
|
4
|
+
import { ANONYMOUS_MODE } from "@esfaenza/core/domain";
|
|
5
|
+
// Direttive, Componenti, Librerie
|
|
6
|
+
import * as customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
7
|
+
import * as isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
|
|
8
|
+
import * as isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
|
|
9
|
+
import * as isBetween from 'dayjs/plugin/isBetween';
|
|
10
|
+
import * as duration from 'dayjs/plugin/duration';
|
|
11
|
+
import * as minMax from 'dayjs/plugin/minMax';
|
|
12
|
+
import * as utc from 'dayjs/plugin/utc';
|
|
13
|
+
import { Subject, filter } from "rxjs";
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@angular/router";
|
|
16
|
+
import * as i2 from "@esfaenza/localizations";
|
|
17
|
+
import * as i3 from "./app.accesstoken";
|
|
18
|
+
import * as i4 from "@esfaenza/signalr-notifications";
|
|
19
|
+
import * as i5 from "@esfaenza/extensions";
|
|
20
|
+
export class AppState {
|
|
21
|
+
set Modules(modules) {
|
|
22
|
+
this._modules = modules;
|
|
23
|
+
this.notifyDataChanged("modules.Retrieved", this._modules);
|
|
24
|
+
}
|
|
25
|
+
get Modules() { return this._modules; }
|
|
26
|
+
constructor(router, lc, bts, notifications, MessageDef, intercom, emb, anonymousMode) {
|
|
27
|
+
this.router = router;
|
|
28
|
+
this.lc = lc;
|
|
29
|
+
this.bts = bts;
|
|
30
|
+
this.notifications = notifications;
|
|
31
|
+
this.MessageDef = MessageDef;
|
|
32
|
+
this.intercom = intercom;
|
|
33
|
+
this.emb = emb;
|
|
34
|
+
this.anonymousMode = anonymousMode;
|
|
35
|
+
this.redirectingToLogin = false;
|
|
36
|
+
this.handlingError = false;
|
|
37
|
+
this.christmasTime = false;
|
|
38
|
+
this.halloweenTime = false;
|
|
39
|
+
this.jobsInProgress = 0;
|
|
40
|
+
this.allJobs = [];
|
|
41
|
+
this.jobWithIdsCache = {};
|
|
42
|
+
this.notifyOnCompletedJobs = true;
|
|
43
|
+
this._data = new Subject();
|
|
44
|
+
this._subscriptions = new Map();
|
|
45
|
+
this.ModulesLocalizations = {};
|
|
46
|
+
this.hookEmbedding();
|
|
47
|
+
this.setupDayjs();
|
|
48
|
+
this.setupSignalRJobListening();
|
|
49
|
+
this.JaceIdentity = null;
|
|
50
|
+
this._data.subscribe((data) => this._onEvent(data));
|
|
51
|
+
//Decide se siamo attorno a natale
|
|
52
|
+
var today = dayjs();
|
|
53
|
+
var thisYear = today.year();
|
|
54
|
+
var lowerBound = dayjs("18/12/" + thisYear, "DD/MM/YYYY");
|
|
55
|
+
var upperBound = dayjs("07/01/" + (thisYear + 1), "DD/MM/YYYY");
|
|
56
|
+
this.christmasTime = today > lowerBound && today < upperBound;
|
|
57
|
+
//Decide se siamo attorno ad halloween
|
|
58
|
+
var lowerBound = dayjs("28/10/" + thisYear, "DD/MM/YYYY");
|
|
59
|
+
var upperBound = dayjs("05/11/" + thisYear, "DD/MM/YYYY");
|
|
60
|
+
this.halloweenTime = today > lowerBound && today < upperBound;
|
|
61
|
+
this.intercom.inbounds.subscribe((t) => { this.handleInboundMessage(t); });
|
|
62
|
+
}
|
|
63
|
+
// Collego le informazioni dell'embedding che devono appoggiarsi all'app state in modo che possano comunicare col resto dell'applicazione
|
|
64
|
+
hookEmbedding() {
|
|
65
|
+
this.emb.MessageObserver.pipe(filter(ev => ev.event == "navigation")).subscribe(event => {
|
|
66
|
+
var navigationOp = event?.data?.internalNavigation ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo";
|
|
67
|
+
this.notifyDataChanged(navigationOp, event?.data?.title);
|
|
68
|
+
});
|
|
69
|
+
this.emb.MessageObserver.pipe(filter(ev => ev.event == "window-message")).subscribe(event => {
|
|
70
|
+
this.notifyDataChanged("window-message", event?.data);
|
|
71
|
+
});
|
|
72
|
+
this._data.pipe(filter(e => e.event == "menu.isCollapsed")).subscribe(_ => {
|
|
73
|
+
this.emb.refreshBoundariesOnMenuCollapse();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/** Tenant§Account§User§APPNAME */
|
|
77
|
+
getSessionIdentity() {
|
|
78
|
+
if (this.SessionIdentity)
|
|
79
|
+
return this.SessionIdentity;
|
|
80
|
+
// Se non ho un id mi manca il login, quindi via di qua
|
|
81
|
+
var id = this.getJaceIDentity();
|
|
82
|
+
if (!id) {
|
|
83
|
+
if (this.anonymousMode)
|
|
84
|
+
return "";
|
|
85
|
+
this.router.navigate(["login"]);
|
|
86
|
+
return "";
|
|
87
|
+
}
|
|
88
|
+
this.SessionIdentity = "" + id.Idtenant + "§" + id.IdAccount + "§" + id.IdUser + "§" + myconfig.AppData.ModuleId;
|
|
89
|
+
return this.SessionIdentity;
|
|
90
|
+
}
|
|
91
|
+
registerNavigationIfMeaningful(route) {
|
|
92
|
+
let title = route.data["title"];
|
|
93
|
+
let internal = route.data["internalNavigation"];
|
|
94
|
+
// Permette di chiamare sto registerNavigation a prescindere e fare opt out se non è una route navigabile
|
|
95
|
+
if (!title)
|
|
96
|
+
return;
|
|
97
|
+
/*
|
|
98
|
+
* Parent ({url: [{path: "{module}"}]})
|
|
99
|
+
* Parent ({url: [{path: ""}]}) (Root del modulo lazy)
|
|
100
|
+
* -> Navigazione attuale <-
|
|
101
|
+
*/
|
|
102
|
+
let module = route.parent?.parent?.url[0]?.path;
|
|
103
|
+
let loc = module ? this.ModulesLocalizations[module] : null;
|
|
104
|
+
if (!module)
|
|
105
|
+
console.error("Impossibile estrapolare il modulo dalla navigazione (Atteso Modulo al secondo livello di parentela partendo dal componente attuale): " + route.pathFromRoot.map(v => v.url.map(segment => segment.toString()).join('/')).join('/'));
|
|
106
|
+
this.notifyDataChanged(internal ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo", loc ? loc.loc(title) : title);
|
|
107
|
+
}
|
|
108
|
+
handleInboundMessage(t) {
|
|
109
|
+
switch (t.type) {
|
|
110
|
+
case InboundMessageTypes.Navigation:
|
|
111
|
+
this.notifyDataChanged(t.message.sub ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo", t.message.routeTitle);
|
|
112
|
+
// export const MK_ADM = "EsAdminModule";
|
|
113
|
+
// AdmMessageTypes.Message = 0;
|
|
114
|
+
// definita in admin-module.
|
|
115
|
+
// admin-module usa core quindi referenze circolari no-no-no
|
|
116
|
+
this.intercom.send(0, "Navigation Message Received", "EsAdminModule");
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
setupDayjs() {
|
|
121
|
+
dayjs.extend(customParseFormat.default || customParseFormat);
|
|
122
|
+
dayjs.extend(minMax.default || minMax);
|
|
123
|
+
dayjs.extend(isBetween.default || isBetween);
|
|
124
|
+
dayjs.extend(isSameOrBefore.default || isSameOrBefore);
|
|
125
|
+
dayjs.extend(isSameOrAfter.default || isSameOrAfter);
|
|
126
|
+
dayjs.extend(duration.default || duration);
|
|
127
|
+
dayjs.extend(utc.default || utc);
|
|
128
|
+
// Require e collegamento con la localizzazione per dayjs
|
|
129
|
+
import("dayjs/locale/" + this.lc.SmallLocale + ".js").then(locale => { dayjs.locale(locale); });
|
|
130
|
+
}
|
|
131
|
+
setupSignalRJobListening() {
|
|
132
|
+
this.notifications.observe(this.MessageDef.IN_JobProgressNotification).subscribe((ev) => {
|
|
133
|
+
var identity = this.getJaceIDentity();
|
|
134
|
+
if (!identity)
|
|
135
|
+
return;
|
|
136
|
+
var desc = (ev.description || ev.actionid) + " (" + (ev.user || identity.DsUser) + ")";
|
|
137
|
+
let job = {
|
|
138
|
+
id: ev.instance,
|
|
139
|
+
description: desc,
|
|
140
|
+
smalldescription: desc.length > 35 ? desc.substring(0, 30) + "..." : desc,
|
|
141
|
+
percentage: this.roundToTwo(ev.progress),
|
|
142
|
+
completed: ev.type == 'Completed',
|
|
143
|
+
fileid: ev.resultfile,
|
|
144
|
+
reportid: ev.resultreport,
|
|
145
|
+
reportpars: ev.resultreportparams,
|
|
146
|
+
complexreportid: ev.resultcomplexreport
|
|
147
|
+
};
|
|
148
|
+
switch (ev.type) {
|
|
149
|
+
case "Started":
|
|
150
|
+
if (this.jobWithIdsCache[ev.instance]) {
|
|
151
|
+
console.warn("Job already registered on the 'Started' callback");
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
this.jobWithIdsCache[ev.instance] = job;
|
|
155
|
+
this.allJobs.splice(0, 0, job);
|
|
156
|
+
this.notifyDataChanged("app.startedJob", job.description);
|
|
157
|
+
break;
|
|
158
|
+
case "Progress":
|
|
159
|
+
// Se mi arriva un progress di un job che non ho significa che mi sono loggato ora con dei Job in corso
|
|
160
|
+
// quindi per prima cosa devo metterlo in lista
|
|
161
|
+
if (!this.jobWithIdsCache[ev.instance]) {
|
|
162
|
+
this.jobWithIdsCache[ev.instance] = job;
|
|
163
|
+
this.allJobs.splice(0, 0, job);
|
|
164
|
+
}
|
|
165
|
+
this.jobWithIdsCache[ev.instance].percentage = this.roundToTwo(ev.progress);
|
|
166
|
+
this.notifyDataChanged("app.progressJob", { description: job.description, progress: this.jobWithIdsCache[ev.instance].percentage });
|
|
167
|
+
break;
|
|
168
|
+
case "Completed":
|
|
169
|
+
if (!this.jobWithIdsCache[ev.instance]) {
|
|
170
|
+
this.jobWithIdsCache[ev.instance] = job;
|
|
171
|
+
this.allJobs.splice(0, 0, job);
|
|
172
|
+
}
|
|
173
|
+
var jobToUpdate = this.jobWithIdsCache[ev.instance];
|
|
174
|
+
jobToUpdate.percentage = 100;
|
|
175
|
+
jobToUpdate.fileid = ev.resultfile;
|
|
176
|
+
jobToUpdate.reportid = ev.resultreport;
|
|
177
|
+
jobToUpdate.reportpars = ev.resultreportparams;
|
|
178
|
+
jobToUpdate.completed = true;
|
|
179
|
+
if (this.notifyOnCompletedJobs)
|
|
180
|
+
this.notifyDataChanged("app.completedJob", jobToUpdate.description);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
this.jobsInProgress = this.allJobs.filter(t => !t.completed).length;
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
roundToTwo(num) {
|
|
187
|
+
return Math.round(num * 100) / 100;
|
|
188
|
+
}
|
|
189
|
+
getJaceIDentity() {
|
|
190
|
+
if (this.JaceIdentity)
|
|
191
|
+
return this.JaceIdentity;
|
|
192
|
+
this.JaceIdentity = this.bts.getJaceIdentity();
|
|
193
|
+
return this.JaceIdentity;
|
|
194
|
+
}
|
|
195
|
+
notifyDataChanged(event, value) {
|
|
196
|
+
this._data[event] = value;
|
|
197
|
+
this._data.next({
|
|
198
|
+
event: event,
|
|
199
|
+
data: this._data[event]
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
subscribe(event, callback) {
|
|
203
|
+
var subscribers = this._subscriptions.get(event) || [];
|
|
204
|
+
subscribers.push(callback);
|
|
205
|
+
this._subscriptions.set(event, subscribers);
|
|
206
|
+
}
|
|
207
|
+
_onEvent(data) {
|
|
208
|
+
var subscribers = this._subscriptions.get(data["event"]) || [];
|
|
209
|
+
subscribers.forEach((callback) => {
|
|
210
|
+
callback.call(null, data["data"]);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
setSidebarWidth(width) {
|
|
214
|
+
this.sidebarWidth = width;
|
|
215
|
+
}
|
|
216
|
+
setHeaderHeight(height) {
|
|
217
|
+
this.headerHeight = height;
|
|
218
|
+
}
|
|
219
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppState, deps: [{ token: i1.Router }, { token: i2.LocalizationService }, { token: i3.TokenService }, { token: i4.NotificationsService }, { token: i4.BaseMessageService }, { token: i5.InterComService }, { token: i5.AppEmbeddingExtensions }, { token: ANONYMOUS_MODE }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
220
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppState, providedIn: "root" }); }
|
|
221
|
+
}
|
|
222
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AppState, decorators: [{
|
|
223
|
+
type: Injectable,
|
|
224
|
+
args: [{ providedIn: "root" }]
|
|
225
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.LocalizationService }, { type: i3.TokenService }, { type: i4.NotificationsService }, { type: i4.BaseMessageService }, { type: i5.InterComService }, { type: i5.AppEmbeddingExtensions }, { type: undefined, decorators: [{
|
|
226
|
+
type: Inject,
|
|
227
|
+
args: [ANONYMOUS_MODE]
|
|
228
|
+
}] }] });
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9zcmMvY2xhc3Nlcy9hcHAuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFvQyxNQUFNLHNCQUFzQixDQUFDO0FBTTdGLE9BQU87QUFDUCxPQUFPLEVBQW9CLGNBQWMsRUFBNEMsTUFBTSx1QkFBdUIsQ0FBQztBQUVuSCxrQ0FBa0M7QUFDbEMsT0FBTyxLQUFLLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxjQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxLQUFLLGFBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssU0FBUyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBTXZDLE1BQU0sT0FBTyxRQUFRO0lBd0JqQixJQUFXLE9BQU8sQ0FBQyxPQUEyQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRCxJQUFXLE9BQU8sS0FBeUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVsRSxZQUFvQixNQUFjLEVBQVUsRUFBdUIsRUFBVSxHQUFpQixFQUFV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WUFBWSxHQUFHLE1BQU0sQ0FBQztJQUMvQixDQUFDOytHQS9PUSxRQUFRLGtQQThCb1AsY0FBYzttSEE5QjFRLFFBQVEsY0FESyxNQUFNOzs0RkFDbkIsUUFBUTtrQkFEcEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQStCZ08sTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBCYXNlTWVzc2FnZVNlcnZpY2UsIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLCBKb2JQcm9ncmVzc0R0byB9IGZyb20gXCJAZXNmYWVuemEvc2lnbmFsci1ub3RpZmljYXRpb25zXCI7XHJcbmltcG9ydCB7IEluYm91bmRNZXNzYWdlVHlwZXMsIEludGVyQ29tTWVzc2FnZSwgSW50ZXJDb21TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSBcIi4vYXBwLmFjY2Vzc3Rva2VuXCI7XHJcblxyXG5pbXBvcnQgeyBBcHBFbWJlZGRpbmdFeHRlbnNpb25zIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG4vLyBDb3JlXHJcbmltcG9ydCB7IEFjdGl2ZU1vZHVsZVZpZXcsIEFOT05ZTU9VU19NT0RFLCBBcHBsaWNhdGlvbkpvYiwgRW52T3B0aW9ucywgSmFjZUlkZW50aXR5IH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL2RvbWFpblwiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgKiBhcyBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnO1xyXG5pbXBvcnQgKiBhcyBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUnO1xyXG5pbXBvcnQgKiBhcyBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyJztcclxuaW1wb3J0ICogYXMgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4nO1xyXG5pbXBvcnQgKiBhcyBkdXJhdGlvbiBmcm9tICdkYXlqcy9wbHVnaW4vZHVyYXRpb24nO1xyXG5pbXBvcnQgKiBhcyBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heCc7XHJcbmltcG9ydCAqIGFzIHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZmlsdGVyIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcbmRlY2xhcmUgdmFyIG15Y29uZmlnOiBFbnZPcHRpb25zO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxyXG5leHBvcnQgY2xhc3MgQXBwU3RhdGUge1xyXG5cclxuICAgIHB1YmxpYyBzaWRlYmFyV2lkdGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBoZWFkZXJIZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgcmVkaXJlY3RpbmdUb0xvZ2luOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFuZGxpbmdFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNocmlzdG1hc1RpbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoYWxsb3dlZW5UaW1lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBTZXNzaW9uSWRlbnRpdHk6IHN0cmluZztcclxuICAgIHByaXZhdGUgSmFjZUlkZW50aXR5OiBKYWNlSWRlbnRpdHk7XHJcblxyXG4gICAgcHVibGljIGpvYnNJblByb2dyZXNzOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGFsbEpvYnM6IEFwcGxpY2F0aW9uSm9iW10gPSBbXTtcclxuICAgIHByaXZhdGUgam9iV2l0aElkc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogQXBwbGljYXRpb25Kb2IgfSA9IHt9O1xyXG4gICAgcHVibGljIG5vdGlmeU9uQ29tcGxldGVkSm9iczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgcHJpdmF0ZSBfZGF0YSA9IG5ldyBTdWJqZWN0PE9iamVjdD4oKTtcclxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8RnVuY3Rpb24+PigpO1xyXG5cclxuICAgIHB1YmxpYyBNb2R1bGVzTG9jYWxpemF0aW9uczogeyBbaWQ6IHN0cmluZ106IExvY2FsaXphdGlvblNlcnZpY2UgfSA9IHt9O1xyXG5cclxuICAgIHByaXZhdGUgX21vZHVsZXM6IEFjdGl2ZU1vZHVsZVZpZXdbXTtcclxuICAgIHB1YmxpYyBzZXQgTW9kdWxlcyhtb2R1bGVzOiBBY3RpdmVNb2R1bGVWaWV3W10pIHtcclxuICAgICAgICB0aGlzLl9tb2R1bGVzID0gbW9kdWxlcztcclxuICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKFwibW9kdWxlcy5SZXRyaWV2ZWRcIiwgdGhpcy5fbW9kdWxlcyk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IE1vZHVsZXMoKTogQWN0aXZlTW9kdWxlVmlld1tdIHsgcmV0dXJuIHRoaXMuX21vZHVsZXM7IH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBwcml2YXRlIGJ0czogVG9rZW5TZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLCBwcml2YXRlIE1lc3NhZ2VEZWY6IEJhc2VNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBpbnRlcmNvbTogSW50ZXJDb21TZXJ2aWNlLCBwcml2YXRlIGVtYjogQXBwRW1iZWRkaW5nRXh0ZW5zaW9ucywgQEluamVjdChBTk9OWU1PVVNfTU9ERSkgcHJpdmF0ZSBhbm9ueW1vdXNNb2RlIDogYm9vbGVhbikge1xyXG5cclxuICAgICAgICB0aGlzLmhvb2tFbWJlZGRpbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR1cERheWpzKCk7XHJcbiAgICAgICAgdGhpcy5zZXR1cFNpZ25hbFJKb2JMaXN0ZW5pbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5KYWNlSWRlbnRpdHkgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RhdGEuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLl9vbkV2ZW50KGRhdGEpKTtcclxuXHJcbiAgICAgICAgLy9EZWNpZGUgc2Ugc2lhbW8gYXR0b3JubyBhIG5hdGFsZVxyXG4gICAgICAgIHZhciB0b2RheSA9IGRheWpzKCk7XHJcbiAgICAgICAgdmFyIHRoaXNZZWFyID0gdG9kYXkueWVhcigpO1xyXG4gICAgICAgIHZhciBsb3dlckJvdW5kID0gZGF5anMoXCIxOC8xMi9cIiArIHRoaXNZZWFyLCBcIkREL01NL1lZWVlcIik7XHJcbiAgICAgICAgdmFyIHVwcGVyQm91bmQgPSBkYXlqcyhcIjA3LzAxL1wiICsgKHRoaXNZZWFyICsgMSksIFwiREQvTU0vWVlZWVwiKTtcclxuICAgICAgICB0aGlzLmNocmlzdG1hc1RpbWUgPSB0b2RheSA+IGxvd2VyQm91bmQgJiYgdG9kYXkgPCB1cHBlckJvdW5kO1xyXG5cclxuICAgICAgICAvL0RlY2lkZSBzZSBzaWFtbyBhdHRvcm5vIGFkIGhhbGxvd2VlblxyXG4gICAgICAgIHZhciBsb3dlckJvdW5kID0gZGF5anMoXCIyOC8xMC9cIiArIHRoaXNZZWFyLCBcIkREL01NL1lZWVlcIik7XHJcbiAgICAgICAgdmFyIHVwcGVyQm91bmQgPSBkYXlqcyhcIjA1LzExL1wiICsgdGhpc1llYXIsIFwiREQvTU0vWVlZWVwiKTtcclxuICAgICAgICB0aGlzLmhhbGxvd2VlblRpbWUgPSB0b2RheSA+IGxvd2VyQm91bmQgJiYgdG9kYXkgPCB1cHBlckJvdW5kO1xyXG5cclxuICAgICAgICB0aGlzLmludGVyY29tLmluYm91bmRzLnN1YnNjcmliZSgodDogSW50ZXJDb21NZXNzYWdlKSA9PiB7IHRoaXMuaGFuZGxlSW5ib3VuZE1lc3NhZ2UodCk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbGxlZ28gbGUgaW5mb3JtYXppb25pIGRlbGwnZW1iZWRkaW5nIGNoZSBkZXZvbm8gYXBwb2dnaWFyc2kgYWxsJ2FwcCBzdGF0ZSBpbiBtb2RvIGNoZSBwb3NzYW5vIGNvbXVuaWNhcmUgY29sIHJlc3RvIGRlbGwnYXBwbGljYXppb25lXHJcbiAgICBob29rRW1iZWRkaW5nKCkge1xyXG4gICAgICAgIHRoaXMuZW1iLk1lc3NhZ2VPYnNlcnZlci5waXBlKGZpbHRlcihldiA9PiBldi5ldmVudCA9PSBcIm5hdmlnYXRpb25cIikpLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIHZhciBuYXZpZ2F0aW9uT3AgPSBldmVudD8uZGF0YT8uaW50ZXJuYWxOYXZpZ2F0aW9uID8gXCJtZW51LmFkanVzdFN1Yk5hdmlnYXRpb25Ub1wiIDogXCJtZW51LmFkanVzdE5hdmlnYXRpb25Ub1wiO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKG5hdmlnYXRpb25PcCwgZXZlbnQ/LmRhdGE/LnRpdGxlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWIuTWVzc2FnZU9ic2VydmVyLnBpcGUoZmlsdGVyKGV2ID0+IGV2LmV2ZW50ID09IFwid2luZG93LW1lc3NhZ2VcIikpLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZWQoXCJ3aW5kb3ctbWVzc2FnZVwiLCBldmVudD8uZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RhdGEucGlwZShmaWx0ZXIoZSA9PiAoZSBhcyBhbnkpLmV2ZW50ID09IFwibWVudS5pc0NvbGxhcHNlZFwiKSkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtYi5yZWZyZXNoQm91bmRhcmllc09uTWVudUNvbGxhcHNlKClcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVGVuYW50wqdBY2NvdW50wqdVc2VywqdBUFBOQU1FICovXHJcbiAgICBnZXRTZXNzaW9uSWRlbnRpdHkoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5TZXNzaW9uSWRlbnRpdHkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlNlc3Npb25JZGVudGl0eTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIHVuIGlkIG1pIG1hbmNhIGlsIGxvZ2luLCBxdWluZGkgdmlhIGRpIHF1YVxyXG4gICAgICAgIHZhciBpZCA9IHRoaXMuZ2V0SmFjZUlEZW50aXR5KCk7XHJcbiAgICAgICAgaWYgKCFpZCkge1xyXG4gICAgICAgICAgICBpZih0aGlzLmFub255bW91c01vZGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImxvZ2luXCJdKTtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLlNlc3Npb25JZGVudGl0eSA9IFwiXCIgKyBpZC5JZHRlbmFudCArIFwiwqdcIiArIGlkLklkQWNjb3VudCArIFwiwqdcIiArIGlkLklkVXNlciArIFwiwqdcIiArIG15Y29uZmlnLkFwcERhdGEuTW9kdWxlSWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuU2Vzc2lvbklkZW50aXR5O1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyTmF2aWdhdGlvbklmTWVhbmluZ2Z1bChyb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcclxuICAgICAgICBsZXQgdGl0bGUgPSByb3V0ZS5kYXRhW1widGl0bGVcIl07XHJcbiAgICAgICAgbGV0IGludGVybmFsID0gcm91dGUuZGF0YVtcImludGVybmFsTmF2aWdhdGlvblwiXVxyXG5cclxuICAgICAgICAvLyBQZXJtZXR0ZSBkaSBjaGlhbWFyZSBzdG8gcmVnaXN0ZXJOYXZpZ2F0aW9uIGEgcHJlc2NpbmRlcmUgZSBmYXJlIG9wdCBvdXQgc2Ugbm9uIMOoIHVuYSByb3V0ZSBuYXZpZ2FiaWxlXHJcbiAgICAgICAgaWYoIXRpdGxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogIFBhcmVudCAoe3VybDogW3twYXRoOiBcInttb2R1bGV9XCJ9XX0pXHJcbiAgICAgICAgICogICAgICBQYXJlbnQgKHt1cmw6IFt7cGF0aDogXCJcIn1dfSkgKFJvb3QgZGVsIG1vZHVsbyBsYXp5KVxyXG4gICAgICAgICAqICAgICAgICAgIC0+IE5hdmlnYXppb25lIGF0dHVhbGUgPC1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsZXQgbW9kdWxlID0gcm91dGUucGFyZW50Py5wYXJlbnQ/LnVybFswXT8ucGF0aDtcclxuICAgICAgICBsZXQgbG9jID0gbW9kdWxlID8gdGhpcy5Nb2R1bGVzTG9jYWxpemF0aW9uc1ttb2R1bGVdIDogbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKCFtb2R1bGUpXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbXBvc3NpYmlsZSBlc3RyYXBvbGFyZSBpbCBtb2R1bG8gZGFsbGEgbmF2aWdhemlvbmUgKEF0dGVzbyBNb2R1bG8gYWwgc2Vjb25kbyBsaXZlbGxvIGRpIHBhcmVudGVsYSBwYXJ0ZW5kbyBkYWwgY29tcG9uZW50ZSBhdHR1YWxlKTogXCIgKyByb3V0ZS5wYXRoRnJvbVJvb3QubWFwKHYgPT4gdi51cmwubWFwKHNlZ21lbnQgPT4gc2VnbWVudC50b1N0cmluZygpKS5qb2luKCcvJykpLmpvaW4oJy8nKSk7XHJcblxyXG4gICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZWQoaW50ZXJuYWwgPyBcIm1lbnUuYWRqdXN0U3ViTmF2aWdhdGlvblRvXCIgOiBcIm1lbnUuYWRqdXN0TmF2aWdhdGlvblRvXCIsIGxvYyA/IGxvYy5sb2ModGl0bGUpIDogdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUluYm91bmRNZXNzYWdlKHQ6IEludGVyQ29tTWVzc2FnZSkge1xyXG4gICAgICAgIHN3aXRjaCAodC50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgSW5ib3VuZE1lc3NhZ2VUeXBlcy5OYXZpZ2F0aW9uOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlEYXRhQ2hhbmdlZCh0Lm1lc3NhZ2Uuc3ViID8gXCJtZW51LmFkanVzdFN1Yk5hdmlnYXRpb25Ub1wiIDogXCJtZW51LmFkanVzdE5hdmlnYXRpb25Ub1wiLCB0Lm1lc3NhZ2Uucm91dGVUaXRsZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBleHBvcnQgY29uc3QgTUtfQURNID0gXCJFc0FkbWluTW9kdWxlXCI7XHJcbiAgICAgICAgICAgICAgICAvLyBBZG1NZXNzYWdlVHlwZXMuTWVzc2FnZSA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZGVmaW5pdGEgaW4gYWRtaW4tbW9kdWxlLlxyXG4gICAgICAgICAgICAgICAgLy8gYWRtaW4tbW9kdWxlIHVzYSBjb3JlIHF1aW5kaSByZWZlcmVuemUgY2lyY29sYXJpIG5vLW5vLW5vXHJcbiAgICAgICAgICAgICAgICB0aGlzLmludGVyY29tLnNlbmQoMCwgXCJOYXZpZ2F0aW9uIE1lc3NhZ2UgUmVjZWl2ZWRcIiwgXCJFc0FkbWluTW9kdWxlXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRGF5anMoKSB7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKCg8YW55PmN1c3RvbVBhcnNlRm9ybWF0KS5kZWZhdWx0IHx8IGN1c3RvbVBhcnNlRm9ybWF0KTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoKDxhbnk+bWluTWF4KS5kZWZhdWx0IHx8IG1pbk1heCk7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKCg8YW55PmlzQmV0d2VlbikuZGVmYXVsdCB8fCBpc0JldHdlZW4pO1xyXG4gICAgICAgIGRheWpzLmV4dGVuZCgoPGFueT5pc1NhbWVPckJlZm9yZSkuZGVmYXVsdCB8fCBpc1NhbWVPckJlZm9yZSk7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKCg8YW55PmlzU2FtZU9yQWZ0ZXIpLmRlZmF1bHQgfHwgaXNTYW1lT3JBZnRlcik7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKCg8YW55PmR1cmF0aW9uKS5kZWZhdWx0IHx8IGR1cmF0aW9uKTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoKDxhbnk+dXRjKS5kZWZhdWx0IHx8IHV0Yyk7XHJcblxyXG4gICAgICAgIC8vIFJlcXVpcmUgZSBjb2xsZWdhbWVudG8gY29uIGxhIGxvY2FsaXp6YXppb25lIHBlciBkYXlqc1xyXG4gICAgICAgIGltcG9ydChcImRheWpzL2xvY2FsZS9cIiArIHRoaXMubGMuU21hbGxMb2NhbGUgKyBcIi5qc1wiKS50aGVuKGxvY2FsZSA9PiB7IGRheWpzLmxvY2FsZShsb2NhbGUpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR1cFNpZ25hbFJKb2JMaXN0ZW5pbmcoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLm9ic2VydmUodGhpcy5NZXNzYWdlRGVmLklOX0pvYlByb2dyZXNzTm90aWZpY2F0aW9uKS5zdWJzY3JpYmUoKGV2OiBKb2JQcm9ncmVzc0R0bykgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIGlkZW50aXR5ID0gdGhpcy5nZXRKYWNlSURlbnRpdHkoKTtcclxuICAgICAgICAgICAgaWYgKCFpZGVudGl0eSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIGRlc2MgPSAoZXYuZGVzY3JpcHRpb24gfHwgZXYuYWN0aW9uaWQpICsgXCIgKFwiICsgKGV2LnVzZXIgfHwgaWRlbnRpdHkuRHNVc2VyKSArIFwiKVwiO1xyXG4gICAgICAgICAgICBsZXQgam9iOiBBcHBsaWNhdGlvbkpvYiA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBldi5pbnN0YW5jZSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjLFxyXG4gICAgICAgICAgICAgICAgc21hbGxkZXNjcmlwdGlvbjogZGVzYy5sZW5ndGggPiAzNSA/IGRlc2Muc3Vic3RyaW5nKDAsIDMwKSArIFwiLi4uXCIgOiBkZXNjLFxyXG4gICAgICAgICAgICAgICAgcGVyY2VudGFnZTogdGhpcy5yb3VuZFRvVHdvKGV2LnByb2dyZXNzKSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogZXYudHlwZSA9PSAnQ29tcGxldGVkJyxcclxuICAgICAgICAgICAgICAgIGZpbGVpZDogZXYucmVzdWx0ZmlsZSxcclxuICAgICAgICAgICAgICAgIHJlcG9ydGlkOiBldi5yZXN1bHRyZXBvcnQsXHJcbiAgICAgICAgICAgICAgICByZXBvcnRwYXJzOiBldi5yZXN1bHRyZXBvcnRwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBjb21wbGV4cmVwb3J0aWQ6IGV2LnJlc3VsdGNvbXBsZXhyZXBvcnRcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXYudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlN0YXJ0ZWRcIjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkpvYiBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gdGhlICdTdGFydGVkJyBjYWxsYmFja1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV0gPSBqb2I7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxKb2JzLnNwbGljZSgwLCAwLCBqb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZWQoXCJhcHAuc3RhcnRlZEpvYlwiLCBqb2IuZGVzY3JpcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlByb2dyZXNzXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2UgbWkgYXJyaXZhIHVuIHByb2dyZXNzIGRpIHVuIGpvYiBjaGUgbm9uIGhvIHNpZ25pZmljYSBjaGUgbWkgc29ubyBsb2dnYXRvIG9yYSBjb24gZGVpIEpvYiBpbiBjb3Jzb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHF1aW5kaSBwZXIgcHJpbWEgY29zYSBkZXZvIG1ldHRlcmxvIGluIGxpc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdID0gam9iO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbEpvYnMuc3BsaWNlKDAsIDAsIGpvYik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXS5wZXJjZW50YWdlID0gdGhpcy5yb3VuZFRvVHdvKGV2LnByb2dyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKFwiYXBwLnByb2dyZXNzSm9iXCIsIHsgZGVzY3JpcHRpb246IGpvYi5kZXNjcmlwdGlvbiwgcHJvZ3Jlc3M6IHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXS5wZXJjZW50YWdlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIkNvbXBsZXRlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXSA9IGpvYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxKb2JzLnNwbGljZSgwLCAwLCBqb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgam9iVG9VcGRhdGUgPSB0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV07XHJcbiAgICAgICAgICAgICAgICAgICAgam9iVG9VcGRhdGUucGVyY2VudGFnZSA9IDEwMDtcclxuICAgICAgICAgICAgICAgICAgICBqb2JUb1VwZGF0ZS5maWxlaWQgPSBldi5yZXN1bHRmaWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGpvYlRvVXBkYXRlLnJlcG9ydGlkID0gZXYucmVzdWx0cmVwb3J0O1xyXG4gICAgICAgICAgICAgICAgICAgIGpvYlRvVXBkYXRlLnJlcG9ydHBhcnMgPSBldi5yZXN1bHRyZXBvcnRwYXJhbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgam9iVG9VcGRhdGUuY29tcGxldGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm90aWZ5T25Db21wbGV0ZWRKb2JzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKFwiYXBwLmNvbXBsZXRlZEpvYlwiLCBqb2JUb1VwZGF0ZS5kZXNjcmlwdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmpvYnNJblByb2dyZXNzID0gdGhpcy5hbGxKb2JzLmZpbHRlcih0ID0+ICF0LmNvbXBsZXRlZCkubGVuZ3RoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJvdW5kVG9Ud28obnVtKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogMTAwKSAvIDEwMDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKYWNlSURlbnRpdHkoKTogSmFjZUlkZW50aXR5IHtcclxuICAgICAgICBpZiAodGhpcy5KYWNlSWRlbnRpdHkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkphY2VJZGVudGl0eTtcclxuICAgICAgICB0aGlzLkphY2VJZGVudGl0eSA9IHRoaXMuYnRzLmdldEphY2VJZGVudGl0eSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkphY2VJZGVudGl0eTtcclxuICAgIH1cclxuXHJcbiAgICBub3RpZnlEYXRhQ2hhbmdlZChldmVudCwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9kYXRhW2V2ZW50XSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuX2RhdGEubmV4dCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5fZGF0YVtldmVudF1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmUoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHN1YnNjcmliZXJzID0gdGhpcy5fc3Vic2NyaXB0aW9ucy5nZXQoZXZlbnQpIHx8IFtdO1xyXG4gICAgICAgIHN1YnNjcmliZXJzLnB1c2goY2FsbGJhY2spO1xyXG5cclxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnNldChldmVudCwgc3Vic2NyaWJlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIF9vbkV2ZW50KGRhdGE6IGFueSkge1xyXG4gICAgICAgIHZhciBzdWJzY3JpYmVycyA9IHRoaXMuX3N1YnNjcmlwdGlvbnMuZ2V0KGRhdGFbXCJldmVudFwiXSkgfHwgW107XHJcblxyXG4gICAgICAgIHN1YnNjcmliZXJzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgZGF0YVtcImRhdGFcIl0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTaWRlYmFyV2lkdGgod2lkdGg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEhlYWRlckhlaWdodChoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuaGVhZGVySGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgfVxyXG59Il19
|