@csmart/ngc-smart-core 1.15.7 → 1.16.1
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/{esm2020 → esm2022}/csmart-ngc-smart-core.mjs +4 -4
- package/{esm2020 → esm2022}/lib/ngc-smart-core.module.mjs +98 -98
- package/{esm2020 → esm2022}/lib/smart-auth/smart-access-control-config.mjs +11 -11
- package/{esm2020 → esm2022}/lib/smart-auth/smart-access-control.directive.mjs +39 -39
- package/{esm2020 → esm2022}/lib/smart-auth/smart-auth.service.mjs +452 -452
- package/{esm2020 → esm2022}/lib/smart-auth/smart-authorization-guard.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/smart-auth/smart-error.component.mjs +37 -37
- package/esm2022/lib/smart-auth/smart-login-staff-resolver.service.mjs +59 -0
- package/esm2022/lib/smart-auth/smart-selected-offender-resolver.service.mjs +60 -0
- package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.component.mjs +174 -174
- package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.service.mjs +52 -52
- package/{esm2020 → esm2022}/lib/smart-offender-header/smart-offender-header.component.mjs +151 -151
- package/{esm2020 → esm2022}/lib/smart-offender-header/smart-offender-header.service.mjs +29 -29
- package/{esm2020 → esm2022}/lib/smart-offender-header/smart-offender-redirect.guard.mjs +27 -27
- package/{esm2020 → esm2022}/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.mjs +25 -25
- package/{esm2020 → esm2022}/lib/smart-staff-offender-options/smart-staff-offender-options.component.mjs +78 -78
- package/{esm2020 → esm2022}/lib/smart-staff-offender-options/smart-staff-offender-options.service.mjs +110 -110
- package/esm2022/lib/smart-storage/smart-storage-model.mjs +30 -0
- package/{esm2020 → esm2022}/lib/smart-storage/xdm.service.mjs +169 -169
- package/{esm2020 → esm2022}/public-api.mjs +20 -20
- package/{fesm2020 → fesm2022}/csmart-ngc-smart-core.mjs +1454 -1454
- package/{fesm2015 → fesm2022}/csmart-ngc-smart-core.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/ngc-smart-core.module.d.ts +20 -20
- package/lib/smart-auth/smart-access-control-config.d.ts +17 -17
- package/lib/smart-auth/smart-access-control.directive.d.ts +14 -14
- package/lib/smart-auth/smart-auth.service.d.ts +41 -41
- package/lib/smart-auth/smart-authorization-guard.service.d.ts +13 -13
- package/lib/smart-auth/smart-error.component.d.ts +17 -17
- package/lib/smart-auth/smart-login-staff-resolver.service.d.ts +13 -13
- package/lib/smart-auth/smart-selected-offender-resolver.service.d.ts +15 -15
- package/lib/smart-navbar/smart-navbar-config.d.ts +7 -7
- package/lib/smart-navbar/smart-navbar.component.d.ts +42 -42
- package/lib/smart-navbar/smart-navbar.service.d.ts +12 -12
- package/lib/smart-offender-header/smart-offender-header.component.d.ts +32 -32
- package/lib/smart-offender-header/smart-offender-header.service.d.ts +18 -18
- package/lib/smart-offender-header/smart-offender-redirect.guard.d.ts +9 -9
- package/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.d.ts +10 -11
- package/lib/smart-staff-offender-options/smart-staff-offender-options.component.d.ts +22 -22
- package/lib/smart-staff-offender-options/smart-staff-offender-options.service.d.ts +19 -19
- package/lib/smart-storage/smart-storage-model.d.ts +58 -58
- package/lib/smart-storage/xdm.service.d.ts +43 -43
- package/package.json +5 -11
- package/public-api.d.ts +17 -17
- package/esm2020/lib/smart-auth/smart-login-staff-resolver.service.mjs +0 -59
- package/esm2020/lib/smart-auth/smart-selected-offender-resolver.service.mjs +0 -60
- package/esm2020/lib/smart-storage/smart-storage-model.mjs +0 -30
- package/fesm2015/csmart-ngc-smart-core.mjs +0 -1670
- package/fesm2020/csmart-ngc-smart-core.mjs.map +0 -1
|
@@ -1,174 +1,174 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import { MatTabGroup } from '@angular/material/tabs';
|
|
3
|
-
import { MsalService } from '@azure/msal-angular';
|
|
4
|
-
import { SmartNavbarService } from './smart-navbar.service';
|
|
5
|
-
import { XdmService } from '../smart-storage/xdm.service';
|
|
6
|
-
import { FormControl } from '@angular/forms';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "./smart-navbar.service";
|
|
9
|
-
import * as i2 from "../smart-storage/xdm.service";
|
|
10
|
-
import * as i3 from "@azure/msal-angular";
|
|
11
|
-
import * as i4 from "@angular/common";
|
|
12
|
-
import * as i5 from "@angular/material/button";
|
|
13
|
-
import * as i6 from "@angular/material/tabs";
|
|
14
|
-
export class SmartNavbarComponent {
|
|
15
|
-
constructor(navbarConfigService, xdmService,
|
|
16
|
-
// private zone: NgZone,
|
|
17
|
-
authnService) {
|
|
18
|
-
this.navbarConfigService = navbarConfigService;
|
|
19
|
-
this.xdmService = xdmService;
|
|
20
|
-
this.authnService = authnService;
|
|
21
|
-
this.appModuleId = 'SMART';
|
|
22
|
-
this.selectedTab = new FormControl(0);
|
|
23
|
-
}
|
|
24
|
-
ngOnChanges() {
|
|
25
|
-
/*
|
|
26
|
-
console.log(this.selectedTab);
|
|
27
|
-
setTimeout(() => {
|
|
28
|
-
this.tabGroup.selectedIndex = this.selectedTab;
|
|
29
|
-
}, 1000);
|
|
30
|
-
*/
|
|
31
|
-
this.selectedTab.setValue;
|
|
32
|
-
}
|
|
33
|
-
ngOnInit() {
|
|
34
|
-
this.xdmService.getSelectedOffender().then((selectedOffender) => {
|
|
35
|
-
this.selectedOffender =
|
|
36
|
-
selectedOffender && selectedOffender.offenderId
|
|
37
|
-
? selectedOffender
|
|
38
|
-
: null;
|
|
39
|
-
});
|
|
40
|
-
this.xdmService.getLoginStaff().then((loginStaff) => {
|
|
41
|
-
// this.zone.run(() => {
|
|
42
|
-
this.loginStaff = loginStaff ? loginStaff : null;
|
|
43
|
-
// });
|
|
44
|
-
});
|
|
45
|
-
this.offenderSubscription = this.xdmService
|
|
46
|
-
.getOffenderUpdate()
|
|
47
|
-
.subscribe((selectedOffender) => {
|
|
48
|
-
// this.zone.run(() => {
|
|
49
|
-
this.selectedOffender = selectedOffender;
|
|
50
|
-
// });
|
|
51
|
-
});
|
|
52
|
-
this.staffSubscription = this.xdmService
|
|
53
|
-
.getStaffUpdate()
|
|
54
|
-
.subscribe((loginStaff) => {
|
|
55
|
-
// this.zone.run(() => {
|
|
56
|
-
this.loginStaff = loginStaff;
|
|
57
|
-
// });
|
|
58
|
-
});
|
|
59
|
-
this.navbarConfigService
|
|
60
|
-
.getNavbarConfigs(this.serviceApiUrl)
|
|
61
|
-
.subscribe((configs) => {
|
|
62
|
-
this.navbarConfigs = configs.sort((a, b) => {
|
|
63
|
-
if (a.displayOrder < b.displayOrder) {
|
|
64
|
-
return -1;
|
|
65
|
-
}
|
|
66
|
-
else if (a.displayOrder > b.displayOrder) {
|
|
67
|
-
return 1;
|
|
68
|
-
}
|
|
69
|
-
return 0;
|
|
70
|
-
});
|
|
71
|
-
setTimeout(() => {
|
|
72
|
-
this.selectedTab.setValue(this.navbarConfigs.findIndex(c => c.appModuleId === this.appModuleId));
|
|
73
|
-
}, 1000);
|
|
74
|
-
});
|
|
75
|
-
// this.isAuthenticated = this.authnService.getAccount() ? true : false;
|
|
76
|
-
}
|
|
77
|
-
ngOnDestroy() {
|
|
78
|
-
this.offenderSubscription.unsubscribe();
|
|
79
|
-
this.staffSubscription.unsubscribe();
|
|
80
|
-
}
|
|
81
|
-
logout() {
|
|
82
|
-
this.xdmService.clearAll();
|
|
83
|
-
this.authnService.logout();
|
|
84
|
-
}
|
|
85
|
-
get isAuthenticated() {
|
|
86
|
-
return this.authnService.instance.getAllAccounts().length > 0;
|
|
87
|
-
}
|
|
88
|
-
getAppModuleUrl(config) {
|
|
89
|
-
return (config.appModuleId === 'PPMASRVW') ? config.url
|
|
90
|
-
: config && this.selectedOffender && config.appModuleId === 'PPMAS'
|
|
91
|
-
? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`
|
|
92
|
-
: this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`
|
|
93
|
-
: config.url;
|
|
94
|
-
}
|
|
95
|
-
hasAppModulePermission(appModuleId) {
|
|
96
|
-
if (this.loginStaff &&
|
|
97
|
-
this.loginStaff.permissions &&
|
|
98
|
-
this.loginStaff.permissions.length > 0) {
|
|
99
|
-
return (this.loginStaff.permissions.findIndex((p) => p.appModuleId === appModuleId) > -1);
|
|
100
|
-
}
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
get hasExternalUserRole() {
|
|
104
|
-
if (this.loginStaff &&
|
|
105
|
-
this.loginStaff.roles &&
|
|
106
|
-
this.loginStaff.roles.length > 0) {
|
|
107
|
-
return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;
|
|
108
|
-
}
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
checkDVIPPermission(config) {
|
|
112
|
-
return ((config.appModuleId !== 'DVIP') || (config.appModuleId === "DVIP" && this.hasDVIPRole));
|
|
113
|
-
}
|
|
114
|
-
get hasDVIPRole() {
|
|
115
|
-
if (this.loginStaff &&
|
|
116
|
-
this.loginStaff.roles &&
|
|
117
|
-
this.loginStaff.roles.length > 0) {
|
|
118
|
-
return this.loginStaff.roles.findIndex(this.isDVIPRole) > -1;
|
|
119
|
-
}
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
isDVIPRole(role) {
|
|
123
|
-
if (role.roleId == 'TSD' || role.roleId == 'TAD' || role.roleId == 'STSD' || role.roleId == 'BC') {
|
|
124
|
-
return true;
|
|
125
|
-
}
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
checkVictimPermission(config) {
|
|
129
|
-
return ((config.appModuleId !== 'VICTIM') || (config.appModuleId === "VICTIM" && this.hasVictimRole));
|
|
130
|
-
}
|
|
131
|
-
get hasVictimRole() {
|
|
132
|
-
if (this.loginStaff &&
|
|
133
|
-
this.loginStaff.roles &&
|
|
134
|
-
this.loginStaff.roles.length > 0) {
|
|
135
|
-
return this.loginStaff.roles.findIndex(this.isVictimRole) > -1;
|
|
136
|
-
}
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
isVictimRole(role) {
|
|
140
|
-
if (role.roleId == 'BC' || role.roleId == 'VSP') {
|
|
141
|
-
return true;
|
|
142
|
-
}
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
isExternalRole(role) {
|
|
146
|
-
switch (role.roleId) {
|
|
147
|
-
case 'EUDTL':
|
|
148
|
-
case 'EUDUSM':
|
|
149
|
-
case 'EUJDG':
|
|
150
|
-
case 'EUMPD':
|
|
151
|
-
case 'EUSOTV':
|
|
152
|
-
case 'EUUSA2':
|
|
153
|
-
case 'EUUSAO':
|
|
154
|
-
case 'EUUSPC':
|
|
155
|
-
return true;
|
|
156
|
-
default:
|
|
157
|
-
return false;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
/** @nocollapse */
|
|
162
|
-
|
|
163
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
164
|
-
type: Component,
|
|
165
|
-
args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-
|
|
166
|
-
}], ctorParameters: function () { return [{ type: i1.SmartNavbarService }, { type: i2.XdmService }, { type: i3.MsalService }]; }, propDecorators: { serviceApiUrl: [{
|
|
167
|
-
type: Input
|
|
168
|
-
}], appModuleId: [{
|
|
169
|
-
type: Input
|
|
170
|
-
}], tabGroup: [{
|
|
171
|
-
type: ViewChild,
|
|
172
|
-
args: ['tabs']
|
|
173
|
-
}] } });
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUlULEtBQUssRUFFTCxTQUFTLEVBRVQsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBTzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRN0MsTUFBTSxPQUFPLG9CQUFvQjtJQWEvQixZQUNVLG1CQUF1QyxFQUN2QyxVQUFzQjtJQUM5Qix3QkFBd0I7SUFDaEIsWUFBeUI7UUFIekIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXRCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBZjFCLGdCQUFXLEdBQUcsT0FBTyxDQUFDO1FBUy9CLGdCQUFXLEdBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFPN0IsQ0FBQztJQUVKLFdBQVc7UUFDVDs7Ozs7VUFLRTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFBO0lBQzVCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkIsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsVUFBVTtvQkFDN0MsQ0FBQyxDQUFDLGdCQUFnQjtvQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNsRCx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2pELE1BQU07UUFDUixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVTthQUN4QyxpQkFBaUIsRUFBRTthQUNuQixTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQzlCLHdCQUF3QjtZQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7WUFDekMsTUFBTTtRQUNSLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVO2FBQ3JDLGNBQWMsRUFBRTthQUNoQixTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4Qix3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDN0IsTUFBTTtRQUNSLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLG1CQUFtQjthQUNyQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUU7b0JBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ1g7cUJBQU0sSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUU7b0JBQzFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNWO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7WUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRyxDQUFDLEVBQ0MsSUFBSSxDQUFDLENBQUM7UUFDVixDQUFDLENBQUMsQ0FBQztRQUVMLHdFQUF3RTtJQUMxRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVNLGVBQWUsQ0FBQyxNQUF5QjtRQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFDckQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxPQUFPO2dCQUNuRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxlQUFlLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7b0JBQ3pGLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxXQUFXO1FBQ3ZDLElBQ0UsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDdEM7WUFDQSxPQUFPLENBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUNuQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQ1AsQ0FBQztTQUNIO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBVyxtQkFBbUI7UUFDNUIsSUFDRSxJQUFJLENBQUMsVUFBVTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSztZQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNoQztZQUNBLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNsRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLG1CQUFtQixDQUFDLE1BQXlCO1FBQ2xELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLElBQ0UsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDaEM7WUFDQSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBVTtRQUMzQixJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFDO1lBQzlGLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxNQUF5QjtRQUNwRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVELElBQVcsYUFBYTtRQUN0QixJQUNFLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLO1lBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2hDO1lBQ0EsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sWUFBWSxDQUFDLElBQVU7UUFDN0IsSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBQztZQUM3QyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVU7UUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25CLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDOztxSUEzTFUsb0JBQW9CO3lIQUFwQixvQkFBb0IsdVBDOUJqQyxrM0VBc0RBOzRGRHhCYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGlCQUdiLGlCQUFpQixDQUFDLElBQUk7NEpBRzVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDYSxRQUFRO3NCQUExQixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGlzRGV2TW9kZSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmJhclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWGRtU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2UveGRtLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgTG9naW5TdGFmZixcclxuICBSb2xlLFxyXG59IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNtYXJ0LW5hdmJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5jc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnROYXZiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzZXJ2aWNlQXBpVXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwTW9kdWxlSWQgPSAnU01BUlQnO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYnMnKSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XHJcbiAgc2VsZWN0ZWRPZmZlbmRlcjogU2VsZWN0ZWRPZmZlbmRlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIG9mZmVuZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgc3RhZmZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAvLyBpc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuXHJcbiAgbmF2YmFyQ29uZmlnczogU21hcnROYXZiYXJDb25maWdbXTtcclxuICBzZWxlY3RlZFRhYj0gbmV3IEZvcm1Db250cm9sKDApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmF2YmFyQ29uZmlnU2VydmljZTogU21hcnROYXZiYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIGF1dGhuU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIC8qXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVGFiKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgICAqL1xyXG4gICAgIHRoaXMuc2VsZWN0ZWRUYWIuc2V0VmFsdWVcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldFNlbGVjdGVkT2ZmZW5kZXIoKS50aGVuKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9XHJcbiAgICAgICAgc2VsZWN0ZWRPZmZlbmRlciAmJiBzZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWRcclxuICAgICAgICAgID8gc2VsZWN0ZWRPZmZlbmRlclxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldExvZ2luU3RhZmYoKS50aGVuKChsb2dpblN0YWZmKSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmID8gbG9naW5TdGFmZiA6IG51bGw7XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vZmZlbmRlclN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0T2ZmZW5kZXJVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsZWN0ZWRPZmZlbmRlcjtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdGFmZlN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0U3RhZmZVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChsb2dpblN0YWZmKSA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gbG9naW5TdGFmZjtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5uYXZiYXJDb25maWdTZXJ2aWNlXHJcbiAgICAgIC5nZXROYXZiYXJDb25maWdzKHRoaXMuc2VydmljZUFwaVVybClcclxuICAgICAgLnN1YnNjcmliZSgoY29uZmlncykgPT4ge1xyXG4gICAgICAgIHRoaXMubmF2YmFyQ29uZmlncyA9IGNvbmZpZ3Muc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKGEuZGlzcGxheU9yZGVyIDwgYi5kaXNwbGF5T3JkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChhLmRpc3BsYXlPcmRlciA+IGIuZGlzcGxheU9yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiLnNldFZhbHVlKHRoaXMubmF2YmFyQ29uZmlncy5maW5kSW5kZXgoYyA9PiBjLmFwcE1vZHVsZUlkID09PSB0aGlzLmFwcE1vZHVsZUlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICwgMTAwMCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoblNlcnZpY2UuZ2V0QWNjb3VudCgpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmNsZWFyQWxsKCk7XHJcbiAgICB0aGlzLmF1dGhuU2VydmljZS5sb2dvdXQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRoblNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFwcE1vZHVsZVVybChjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gKGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gJ1BQTUFTUlZXJykgPyBjb25maWcudXJsIFxyXG4gICAgICA6IGNvbmZpZyAmJiB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgJiYgY29uZmlnLmFwcE1vZHVsZUlkID09PSAnUFBNQVMnXHJcbiAgICAgID8gYCR7Y29uZmlnLnVybH0mT2ZmZW5kZXJJZD0ke3RoaXMuc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkfWBcclxuICAgICAgOiB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPyBgJHtjb25maWcudXJsfS8/b2ZmZW5kZXJJZD0ke3RoaXMuc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkfWBcclxuICAgICAgOiBjb25maWcudXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0FwcE1vZHVsZVBlcm1pc3Npb24oYXBwTW9kdWxlSWQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zLmZpbmRJbmRleChcclxuICAgICAgICAgIChwKSA9PiBwLmFwcE1vZHVsZUlkID09PSBhcHBNb2R1bGVJZCxcclxuICAgICAgICApID4gLTFcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0V4dGVybmFsVXNlclJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRXh0ZXJuYWxSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrRFZJUFBlcm1pc3Npb24oY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykgOiBib29sZWFue1xyXG4gICAgcmV0dXJuICgoY29uZmlnLmFwcE1vZHVsZUlkICE9PSAnRFZJUCcpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiRFZJUFwiICYmIHRoaXMuaGFzRFZJUFJvbGUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzRFZJUFJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRFZJUFJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRFZJUFJvbGUocm9sZTogUm9sZSl7XHJcbiAgICBpZihyb2xlLnJvbGVJZCA9PSAnVFNEJyB8fCByb2xlLnJvbGVJZCA9PSAnVEFEJyB8fCByb2xlLnJvbGVJZCA9PSAnU1RTRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ0JDJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tWaWN0aW1QZXJtaXNzaW9uKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbntcclxuICAgIHJldHVybiAoKGNvbmZpZy5hcHBNb2R1bGVJZCAhPT0gJ1ZJQ1RJTScpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiVklDVElNXCIgJiYgdGhpcy5oYXNWaWN0aW1Sb2xlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc1ZpY3RpbVJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzVmljdGltUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNWaWN0aW1Sb2xlKHJvbGU6IFJvbGUpe1xyXG4gICAgaWYocm9sZS5yb2xlSWQgPT0gJ0JDJyB8fCByb2xlLnJvbGVJZCA9PSAnVlNQJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRXh0ZXJuYWxSb2xlKHJvbGU6IFJvbGUpIHtcclxuICAgIHN3aXRjaCAocm9sZS5yb2xlSWQpIHtcclxuICAgICAgY2FzZSAnRVVEVEwnOlxyXG4gICAgICBjYXNlICdFVURVU00nOlxyXG4gICAgICBjYXNlICdFVUpERyc6XHJcbiAgICAgIGNhc2UgJ0VVTVBEJzpcclxuICAgICAgY2FzZSAnRVVTT1RWJzpcclxuICAgICAgY2FzZSAnRVVVU0EyJzpcclxuICAgICAgY2FzZSAnRVVVU0FPJzpcclxuICAgICAgY2FzZSAnRVVVU1BDJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLyBFVURUTFxyXG4vLyBFVURVU01cclxuLy8gRVVKREdcclxuXHJcbi8vIEVVTVBEXHJcbi8vIEVVU09UVlxyXG4vLyBFVVVTQTJcclxuXHJcbi8vIEVVVVNBT1xyXG4vLyBFVVVTUENcclxuIiwiPCEtLVxyXG48YSBjbGFzcz1cInNtYXJ0LW5hdmJhci10b2dnbGUgb3BlblwiIGhyZWY9XCIjbmF2XCI+XHJcbiAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPm1lbnU8L2k+XHJcbjwvYT5cclxuXHJcbjxuYXYgaWQ9XCJuYXZcIiByb2xlPVwibmF2aWdhdGlvblwiIGNsYXNzPVwic21hcnQtbmF2YmFyLWNvbnRhaW5lclwiPlxyXG4gIDxhIGNsYXNzPVwic21hcnQtbmF2YmFyLXRvZ2dsZSBjbG9zZVwiIGhyZWY9XCIjXCI+XHJcbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+Y2xvc2U8L2k+XHJcbiAgPC9hPlxyXG5cclxuICA8c3BhbiAqbmdGb3I9XCJsZXQgY29uZmlnIG9mIG5hdmJhckNvbmZpZ3NcIj5cclxuICAgIDxhIG1hdC1idXR0b24gY2xhc3M9XCJzbWFydC1uYXZiYXItaXRlbVwiIFxyXG4gICAgICAqbmdJZj1cIihjb25maWcub2ZmZW5kZXJTcGVjaWZpY0ZsYWcgPT09IGZhbHNlIHx8IHNlbGVjdGVkT2ZmZW5kZXIpICYmIGlzQXV0aGVudGljYXRlZCAmJiBsb2dpblN0YWZmXCIgaHJlZj1cInt7Y29uZmlnLnVybH19XCI+e3tjb25maWcubmFtZX19PC9hPlxyXG4gIDwvc3Bhbj5cclxuXHJcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic21hcnQtbmF2YmFyLWl0ZW1cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVRoZW1lXCI+U2V0IFRoZW1lPC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNtZW51VGhlbWU9XCJtYXRNZW51XCI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uU2V0VGhlbWUoJ2JsdWUtdGhlbWUnKVwiPkJsdWU8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TZXRUaGVtZSgncmVkLXRoZW1lJylcIj5SZWQ8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TZXRUaGVtZSgnZ3JlZW4tdGhlbWUnKVwiPkdyZWVuPC9idXR0b24+XHJcbiAgPC9tYXQtbWVudT5cclxuICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJzbWFydC1uYXZiYXItaXRlbSBzbWFydC1uYXZiYXItbGFzdC1pdGVtXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxyXG4gICAgKm5nSWY9XCJpc0F1dGhlbnRpY2F0ZWQgJiYgbG9naW5TdGFmZlwiPnt7bG9naW5TdGFmZi5maXJzdE5hbWUgKyAnICcgKyBsb2dpblN0YWZmLmxhc3ROYW1lfX08L2J1dHRvbj5cclxuICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0+UHJvZmlsZTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJsb2dvdXQoKVwiPlNpZ24gT3V0PC9idXR0b24+XHJcbiAgPC9tYXQtbWVudT5cclxuPC9uYXY+XHJcbi0tPlxyXG5cclxuPCEtLSA8bmF2IG1hdC10YWItbmF2LWJhcj5cclxuICA8YSBtYXQtdGFiLWxpbmsgbWF0LWZsYXQtYnV0dG9uICpuZ0Zvcj1cImxldCBjb25maWcgb2YgbmF2YmFyQ29uZmlnc1wiIFthY3RpdmVdPVwiYXBwTW9kdWxlSWQgPT0gY29uZmlnLmFwcE1vZHVsZUlkXCIgaHJlZj1cInt7Y29uZmlnLnVybH19XCI+e3tjb25maWcubmFtZX19PC9hPlxyXG48L25hdj4gLS0+XHJcblxyXG48bWF0LXRhYi1ncm91cCBjbGFzcz1cIm5hdi10YWItZ3JvdXBcIiBbc2VsZWN0ZWRJbmRleF09XCJzZWxlY3RlZFRhYi52YWx1ZVwiIChzZWxlY3RlZEluZGV4Q2hhbmdlKT1cInNlbGVjdGVkVGFiLnNldFZhbHVlKCRldmVudClcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb25maWcgb2YgbmF2YmFyQ29uZmlnczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cclxuICAgIDxtYXQtdGFiXHJcbiAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgKChoYXNFeHRlcm5hbFVzZXJSb2xlICYmIGhhc0FwcE1vZHVsZVBlcm1pc3Npb24oY29uZmlnLmFwcE1vZHVsZUlkKSkgfHxcclxuICAgICAgICAoIWhhc0V4dGVybmFsVXNlclJvbGUgJiYgXHJcbiAgICAgICAgKGNvbmZpZy5vZmZlbmRlclNwZWNpZmljRmxhZyA9PT0gZmFsc2UgfHwgc2VsZWN0ZWRPZmZlbmRlcikpKSAmJlxyXG4gICAgICAgIGNoZWNrVmljdGltUGVybWlzc2lvbihjb25maWcpICYmXHJcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkICYmXHJcbiAgICAgICAgbG9naW5TdGFmZlwiXHJcbiAgICAgIGxhYmVsPVwiY29uZmlnLm5hbWVcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XHJcbiAgICAgICAgPGFcclxuICAgICAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICAgICAgW2hyZWZdPVwiZ2V0QXBwTW9kdWxlVXJsKGNvbmZpZylcIlxyXG4gICAgICAgICAgPnt7IGNvbmZpZy5uYW1lIH19PC9hPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L21hdC10YWItZ3JvdXA+XHJcbiJdfQ==
|
|
1
|
+
import { Component, Input, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { MatTabGroup } from '@angular/material/tabs';
|
|
3
|
+
import { MsalService } from '@azure/msal-angular';
|
|
4
|
+
import { SmartNavbarService } from './smart-navbar.service';
|
|
5
|
+
import { XdmService } from '../smart-storage/xdm.service';
|
|
6
|
+
import { FormControl } from '@angular/forms';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./smart-navbar.service";
|
|
9
|
+
import * as i2 from "../smart-storage/xdm.service";
|
|
10
|
+
import * as i3 from "@azure/msal-angular";
|
|
11
|
+
import * as i4 from "@angular/common";
|
|
12
|
+
import * as i5 from "@angular/material/button";
|
|
13
|
+
import * as i6 from "@angular/material/tabs";
|
|
14
|
+
export class SmartNavbarComponent {
|
|
15
|
+
constructor(navbarConfigService, xdmService,
|
|
16
|
+
// private zone: NgZone,
|
|
17
|
+
authnService) {
|
|
18
|
+
this.navbarConfigService = navbarConfigService;
|
|
19
|
+
this.xdmService = xdmService;
|
|
20
|
+
this.authnService = authnService;
|
|
21
|
+
this.appModuleId = 'SMART';
|
|
22
|
+
this.selectedTab = new FormControl(0);
|
|
23
|
+
}
|
|
24
|
+
ngOnChanges() {
|
|
25
|
+
/*
|
|
26
|
+
console.log(this.selectedTab);
|
|
27
|
+
setTimeout(() => {
|
|
28
|
+
this.tabGroup.selectedIndex = this.selectedTab;
|
|
29
|
+
}, 1000);
|
|
30
|
+
*/
|
|
31
|
+
this.selectedTab.setValue;
|
|
32
|
+
}
|
|
33
|
+
ngOnInit() {
|
|
34
|
+
this.xdmService.getSelectedOffender().then((selectedOffender) => {
|
|
35
|
+
this.selectedOffender =
|
|
36
|
+
selectedOffender && selectedOffender.offenderId
|
|
37
|
+
? selectedOffender
|
|
38
|
+
: null;
|
|
39
|
+
});
|
|
40
|
+
this.xdmService.getLoginStaff().then((loginStaff) => {
|
|
41
|
+
// this.zone.run(() => {
|
|
42
|
+
this.loginStaff = loginStaff ? loginStaff : null;
|
|
43
|
+
// });
|
|
44
|
+
});
|
|
45
|
+
this.offenderSubscription = this.xdmService
|
|
46
|
+
.getOffenderUpdate()
|
|
47
|
+
.subscribe((selectedOffender) => {
|
|
48
|
+
// this.zone.run(() => {
|
|
49
|
+
this.selectedOffender = selectedOffender;
|
|
50
|
+
// });
|
|
51
|
+
});
|
|
52
|
+
this.staffSubscription = this.xdmService
|
|
53
|
+
.getStaffUpdate()
|
|
54
|
+
.subscribe((loginStaff) => {
|
|
55
|
+
// this.zone.run(() => {
|
|
56
|
+
this.loginStaff = loginStaff;
|
|
57
|
+
// });
|
|
58
|
+
});
|
|
59
|
+
this.navbarConfigService
|
|
60
|
+
.getNavbarConfigs(this.serviceApiUrl)
|
|
61
|
+
.subscribe((configs) => {
|
|
62
|
+
this.navbarConfigs = configs.sort((a, b) => {
|
|
63
|
+
if (a.displayOrder < b.displayOrder) {
|
|
64
|
+
return -1;
|
|
65
|
+
}
|
|
66
|
+
else if (a.displayOrder > b.displayOrder) {
|
|
67
|
+
return 1;
|
|
68
|
+
}
|
|
69
|
+
return 0;
|
|
70
|
+
});
|
|
71
|
+
setTimeout(() => {
|
|
72
|
+
this.selectedTab.setValue(this.navbarConfigs.findIndex(c => c.appModuleId === this.appModuleId));
|
|
73
|
+
}, 1000);
|
|
74
|
+
});
|
|
75
|
+
// this.isAuthenticated = this.authnService.getAccount() ? true : false;
|
|
76
|
+
}
|
|
77
|
+
ngOnDestroy() {
|
|
78
|
+
this.offenderSubscription.unsubscribe();
|
|
79
|
+
this.staffSubscription.unsubscribe();
|
|
80
|
+
}
|
|
81
|
+
logout() {
|
|
82
|
+
this.xdmService.clearAll();
|
|
83
|
+
this.authnService.logout();
|
|
84
|
+
}
|
|
85
|
+
get isAuthenticated() {
|
|
86
|
+
return this.authnService.instance.getAllAccounts().length > 0;
|
|
87
|
+
}
|
|
88
|
+
getAppModuleUrl(config) {
|
|
89
|
+
return (config.appModuleId === 'PPMASRVW') ? config.url
|
|
90
|
+
: config && this.selectedOffender && config.appModuleId === 'PPMAS'
|
|
91
|
+
? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`
|
|
92
|
+
: this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`
|
|
93
|
+
: config.url;
|
|
94
|
+
}
|
|
95
|
+
hasAppModulePermission(appModuleId) {
|
|
96
|
+
if (this.loginStaff &&
|
|
97
|
+
this.loginStaff.permissions &&
|
|
98
|
+
this.loginStaff.permissions.length > 0) {
|
|
99
|
+
return (this.loginStaff.permissions.findIndex((p) => p.appModuleId === appModuleId) > -1);
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
get hasExternalUserRole() {
|
|
104
|
+
if (this.loginStaff &&
|
|
105
|
+
this.loginStaff.roles &&
|
|
106
|
+
this.loginStaff.roles.length > 0) {
|
|
107
|
+
return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
checkDVIPPermission(config) {
|
|
112
|
+
return ((config.appModuleId !== 'DVIP') || (config.appModuleId === "DVIP" && this.hasDVIPRole));
|
|
113
|
+
}
|
|
114
|
+
get hasDVIPRole() {
|
|
115
|
+
if (this.loginStaff &&
|
|
116
|
+
this.loginStaff.roles &&
|
|
117
|
+
this.loginStaff.roles.length > 0) {
|
|
118
|
+
return this.loginStaff.roles.findIndex(this.isDVIPRole) > -1;
|
|
119
|
+
}
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
isDVIPRole(role) {
|
|
123
|
+
if (role.roleId == 'TSD' || role.roleId == 'TAD' || role.roleId == 'STSD' || role.roleId == 'BC') {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
checkVictimPermission(config) {
|
|
129
|
+
return ((config.appModuleId !== 'VICTIM') || (config.appModuleId === "VICTIM" && this.hasVictimRole));
|
|
130
|
+
}
|
|
131
|
+
get hasVictimRole() {
|
|
132
|
+
if (this.loginStaff &&
|
|
133
|
+
this.loginStaff.roles &&
|
|
134
|
+
this.loginStaff.roles.length > 0) {
|
|
135
|
+
return this.loginStaff.roles.findIndex(this.isVictimRole) > -1;
|
|
136
|
+
}
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
isVictimRole(role) {
|
|
140
|
+
if (role.roleId == 'BC' || role.roleId == 'VSP') {
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
isExternalRole(role) {
|
|
146
|
+
switch (role.roleId) {
|
|
147
|
+
case 'EUDTL':
|
|
148
|
+
case 'EUDUSM':
|
|
149
|
+
case 'EUJDG':
|
|
150
|
+
case 'EUMPD':
|
|
151
|
+
case 'EUSOTV':
|
|
152
|
+
case 'EUUSA2':
|
|
153
|
+
case 'EUUSAO':
|
|
154
|
+
case 'EUUSPC':
|
|
155
|
+
return true;
|
|
156
|
+
default:
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SmartNavbarComponent, deps: [{ token: i1.SmartNavbarService }, { token: i2.XdmService }, { token: i3.MsalService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
161
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
162
|
+
}
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SmartNavbarComponent, decorators: [{
|
|
164
|
+
type: Component,
|
|
165
|
+
args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"] }]
|
|
166
|
+
}], ctorParameters: function () { return [{ type: i1.SmartNavbarService }, { type: i2.XdmService }, { type: i3.MsalService }]; }, propDecorators: { serviceApiUrl: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}], appModuleId: [{
|
|
169
|
+
type: Input
|
|
170
|
+
}], tabGroup: [{
|
|
171
|
+
type: ViewChild,
|
|
172
|
+
args: ['tabs']
|
|
173
|
+
}] } });
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUlULEtBQUssRUFFTCxTQUFTLEVBRVQsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBTzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRN0MsTUFBTSxPQUFPLG9CQUFvQjtJQWEvQixZQUNVLG1CQUF1QyxFQUN2QyxVQUFzQjtJQUM5Qix3QkFBd0I7SUFDaEIsWUFBeUI7UUFIekIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXRCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBZjFCLGdCQUFXLEdBQUcsT0FBTyxDQUFDO1FBUy9CLGdCQUFXLEdBQUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFPN0IsQ0FBQztJQUVKLFdBQVc7UUFDVDs7Ozs7VUFLRTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFB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LENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sWUFBWSxDQUFDLElBQVU7UUFDN0IsSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBQztZQUM3QyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVU7UUFDL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25CLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDO2tJQTNMVSxvQkFBb0I7c0hBQXBCLG9CQUFvQix1UEM5QmpDLGszRUFzREE7OzRGRHhCYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGlCQUdiLGlCQUFpQixDQUFDLElBQUk7NEpBRzVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDYSxRQUFRO3NCQUExQixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGlzRGV2TW9kZSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmJhclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWGRtU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2UveGRtLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgTG9naW5TdGFmZixcclxuICBSb2xlLFxyXG59IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNtYXJ0LW5hdmJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5jc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnROYXZiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzZXJ2aWNlQXBpVXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwTW9kdWxlSWQgPSAnU01BUlQnO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYnMnKSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XHJcbiAgc2VsZWN0ZWRPZmZlbmRlcjogU2VsZWN0ZWRPZmZlbmRlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIG9mZmVuZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgc3RhZmZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAvLyBpc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuXHJcbiAgbmF2YmFyQ29uZmlnczogU21hcnROYXZiYXJDb25maWdbXTtcclxuICBzZWxlY3RlZFRhYj0gbmV3IEZvcm1Db250cm9sKDApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmF2YmFyQ29uZmlnU2VydmljZTogU21hcnROYXZiYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIGF1dGhuU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIC8qXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVGFiKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgICAqL1xyXG4gICAgIHRoaXMuc2VsZWN0ZWRUYWIuc2V0VmFsdWVcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldFNlbGVjdGVkT2ZmZW5kZXIoKS50aGVuKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9XHJcbiAgICAgICAgc2VsZWN0ZWRPZmZlbmRlciAmJiBzZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWRcclxuICAgICAgICAgID8gc2VsZWN0ZWRPZmZlbmRlclxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldExvZ2luU3RhZmYoKS50aGVuKChsb2dpblN0YWZmKSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmID8gbG9naW5TdGFmZiA6IG51bGw7XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vZmZlbmRlclN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0T2ZmZW5kZXJVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID0gc2VsZWN0ZWRPZmZlbmRlcjtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdGFmZlN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxyXG4gICAgICAuZ2V0U3RhZmZVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChsb2dpblN0YWZmKSA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gbG9naW5TdGFmZjtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5uYXZiYXJDb25maWdTZXJ2aWNlXHJcbiAgICAgIC5nZXROYXZiYXJDb25maWdzKHRoaXMuc2VydmljZUFwaVVybClcclxuICAgICAgLnN1YnNjcmliZSgoY29uZmlncykgPT4ge1xyXG4gICAgICAgIHRoaXMubmF2YmFyQ29uZmlncyA9IGNvbmZpZ3Muc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKGEuZGlzcGxheU9yZGVyIDwgYi5kaXNwbGF5T3JkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChhLmRpc3BsYXlPcmRlciA+IGIuZGlzcGxheU9yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiLnNldFZhbHVlKHRoaXMubmF2YmFyQ29uZmlncy5maW5kSW5kZXgoYyA9PiBjLmFwcE1vZHVsZUlkID09PSB0aGlzLmFwcE1vZHVsZUlkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICwgMTAwMCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIHRoaXMuaXNBdXRoZW50aWNhdGVkID0gdGhpcy5hdXRoblNlcnZpY2UuZ2V0QWNjb3VudCgpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmNsZWFyQWxsKCk7XHJcbiAgICB0aGlzLmF1dGhuU2VydmljZS5sb2dvdXQoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRoblNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFwcE1vZHVsZVVybChjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gKGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gJ1BQTUFTUlZXJykgPyBjb25maWcudXJsIFxyXG4gICAgICA6IGNvbmZpZyAmJiB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgJiYgY29uZmlnLmFwcE1vZHVsZUlkID09PSAnUFBNQVMnXHJcbiAgICAgID8gYCR7Y29uZmlnLnVybH0mT2ZmZW5kZXJJZD0ke3RoaXMuc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkfWBcclxuICAgICAgOiB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPyBgJHtjb25maWcudXJsfS8/b2ZmZW5kZXJJZD0ke3RoaXMuc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkfWBcclxuICAgICAgOiBjb25maWcudXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0FwcE1vZHVsZVBlcm1pc3Npb24oYXBwTW9kdWxlSWQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucyAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zLmZpbmRJbmRleChcclxuICAgICAgICAgIChwKSA9PiBwLmFwcE1vZHVsZUlkID09PSBhcHBNb2R1bGVJZCxcclxuICAgICAgICApID4gLTFcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0V4dGVybmFsVXNlclJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRXh0ZXJuYWxSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrRFZJUFBlcm1pc3Npb24oY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykgOiBib29sZWFue1xyXG4gICAgcmV0dXJuICgoY29uZmlnLmFwcE1vZHVsZUlkICE9PSAnRFZJUCcpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiRFZJUFwiICYmIHRoaXMuaGFzRFZJUFJvbGUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzRFZJUFJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRFZJUFJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRFZJUFJvbGUocm9sZTogUm9sZSl7XHJcbiAgICBpZihyb2xlLnJvbGVJZCA9PSAnVFNEJyB8fCByb2xlLnJvbGVJZCA9PSAnVEFEJyB8fCByb2xlLnJvbGVJZCA9PSAnU1RTRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ0JDJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tWaWN0aW1QZXJtaXNzaW9uKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbntcclxuICAgIHJldHVybiAoKGNvbmZpZy5hcHBNb2R1bGVJZCAhPT0gJ1ZJQ1RJTScpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiVklDVElNXCIgJiYgdGhpcy5oYXNWaWN0aW1Sb2xlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc1ZpY3RpbVJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzVmljdGltUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNWaWN0aW1Sb2xlKHJvbGU6IFJvbGUpe1xyXG4gICAgaWYocm9sZS5yb2xlSWQgPT0gJ0JDJyB8fCByb2xlLnJvbGVJZCA9PSAnVlNQJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRXh0ZXJuYWxSb2xlKHJvbGU6IFJvbGUpIHtcclxuICAgIHN3aXRjaCAocm9sZS5yb2xlSWQpIHtcclxuICAgICAgY2FzZSAnRVVEVEwnOlxyXG4gICAgICBjYXNlICdFVURVU00nOlxyXG4gICAgICBjYXNlICdFVUpERyc6XHJcbiAgICAgIGNhc2UgJ0VVTVBEJzpcclxuICAgICAgY2FzZSAnRVVTT1RWJzpcclxuICAgICAgY2FzZSAnRVVVU0EyJzpcclxuICAgICAgY2FzZSAnRVVVU0FPJzpcclxuICAgICAgY2FzZSAnRVVVU1BDJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLyBFVURUTFxyXG4vLyBFVURVU01cclxuLy8gRVVKREdcclxuXHJcbi8vIEVVTVBEXHJcbi8vIEVVU09UVlxyXG4vLyBFVVVTQTJcclxuXHJcbi8vIEVVVVNBT1xyXG4vLyBFVVVTUENcclxuIiwiPCEtLVxyXG48YSBjbGFzcz1cInNtYXJ0LW5hdmJhci10b2dnbGUgb3BlblwiIGhyZWY9XCIjbmF2XCI+XHJcbiAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPm1lbnU8L2k+XHJcbjwvYT5cclxuXHJcbjxuYXYgaWQ9XCJuYXZcIiByb2xlPVwibmF2aWdhdGlvblwiIGNsYXNzPVwic21hcnQtbmF2YmFyLWNvbnRhaW5lclwiPlxyXG4gIDxhIGNsYXNzPVwic21hcnQtbmF2YmFyLXRvZ2dsZSBjbG9zZVwiIGhyZWY9XCIjXCI+XHJcbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+Y2xvc2U8L2k+XHJcbiAgPC9hPlxyXG5cclxuICA8c3BhbiAqbmdGb3I9XCJsZXQgY29uZmlnIG9mIG5hdmJhckNvbmZpZ3NcIj5cclxuICAgIDxhIG1hdC1idXR0b24gY2xhc3M9XCJzbWFydC1uYXZiYXItaXRlbVwiIFxyXG4gICAgICAqbmdJZj1cIihjb25maWcub2ZmZW5kZXJTcGVjaWZpY0ZsYWcgPT09IGZhbHNlIHx8IHNlbGVjdGVkT2ZmZW5kZXIpICYmIGlzQXV0aGVudGljYXRlZCAmJiBsb2dpblN0YWZmXCIgaHJlZj1cInt7Y29uZmlnLnVybH19XCI+e3tjb25maWcubmFtZX19PC9hPlxyXG4gIDwvc3Bhbj5cclxuXHJcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic21hcnQtbmF2YmFyLWl0ZW1cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVRoZW1lXCI+U2V0IFRoZW1lPC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNtZW51VGhlbWU9XCJtYXRNZW51XCI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uU2V0VGhlbWUoJ2JsdWUtdGhlbWUnKVwiPkJsdWU8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TZXRUaGVtZSgncmVkLXRoZW1lJylcIj5SZWQ8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TZXRUaGVtZSgnZ3JlZW4tdGhlbWUnKVwiPkdyZWVuPC9idXR0b24+XHJcbiAgPC9tYXQtbWVudT5cclxuICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJzbWFydC1uYXZiYXItaXRlbSBzbWFydC1uYXZiYXItbGFzdC1pdGVtXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxyXG4gICAgKm5nSWY9XCJpc0F1dGhlbnRpY2F0ZWQgJiYgbG9naW5TdGFmZlwiPnt7bG9naW5TdGFmZi5maXJzdE5hbWUgKyAnICcgKyBsb2dpblN0YWZmLmxhc3ROYW1lfX08L2J1dHRvbj5cclxuICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0+UHJvZmlsZTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJsb2dvdXQoKVwiPlNpZ24gT3V0PC9idXR0b24+XHJcbiAgPC9tYXQtbWVudT5cclxuPC9uYXY+XHJcbi0tPlxyXG5cclxuPCEtLSA8bmF2IG1hdC10YWItbmF2LWJhcj5cclxuICA8YSBtYXQtdGFiLWxpbmsgbWF0LWZsYXQtYnV0dG9uICpuZ0Zvcj1cImxldCBjb25maWcgb2YgbmF2YmFyQ29uZmlnc1wiIFthY3RpdmVdPVwiYXBwTW9kdWxlSWQgPT0gY29uZmlnLmFwcE1vZHVsZUlkXCIgaHJlZj1cInt7Y29uZmlnLnVybH19XCI+e3tjb25maWcubmFtZX19PC9hPlxyXG48L25hdj4gLS0+XHJcblxyXG48bWF0LXRhYi1ncm91cCBjbGFzcz1cIm5hdi10YWItZ3JvdXBcIiBbc2VsZWN0ZWRJbmRleF09XCJzZWxlY3RlZFRhYi52YWx1ZVwiIChzZWxlY3RlZEluZGV4Q2hhbmdlKT1cInNlbGVjdGVkVGFiLnNldFZhbHVlKCRldmVudClcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb25maWcgb2YgbmF2YmFyQ29uZmlnczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cclxuICAgIDxtYXQtdGFiXHJcbiAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgKChoYXNFeHRlcm5hbFVzZXJSb2xlICYmIGhhc0FwcE1vZHVsZVBlcm1pc3Npb24oY29uZmlnLmFwcE1vZHVsZUlkKSkgfHxcclxuICAgICAgICAoIWhhc0V4dGVybmFsVXNlclJvbGUgJiYgXHJcbiAgICAgICAgKGNvbmZpZy5vZmZlbmRlclNwZWNpZmljRmxhZyA9PT0gZmFsc2UgfHwgc2VsZWN0ZWRPZmZlbmRlcikpKSAmJlxyXG4gICAgICAgIGNoZWNrVmljdGltUGVybWlzc2lvbihjb25maWcpICYmXHJcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkICYmXHJcbiAgICAgICAgbG9naW5TdGFmZlwiXHJcbiAgICAgIGxhYmVsPVwiY29uZmlnLm5hbWVcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XHJcbiAgICAgICAgPGFcclxuICAgICAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICAgICAgW2hyZWZdPVwiZ2V0QXBwTW9kdWxlVXJsKGNvbmZpZylcIlxyXG4gICAgICAgICAgPnt7IGNvbmZpZy5uYW1lIH19PC9hPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L21hdC10YWItZ3JvdXA+XHJcbiJdfQ==
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { Injectable, isDevMode } from '@angular/core';
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { map } from 'rxjs/operators';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common/http";
|
|
6
|
-
export class SmartNavbarService {
|
|
7
|
-
constructor(http) {
|
|
8
|
-
this.http = http;
|
|
9
|
-
}
|
|
10
|
-
/*
|
|
11
|
-
public getNavbarConfigs(): SmartNavbarConfig[] {
|
|
12
|
-
this.configs = [
|
|
13
|
-
{appModuleId: 'SMART', name: 'SMART', url: 'http://localhost:4200', offenderSpecific: false, displayOrder: 1 },
|
|
14
|
-
{appModuleId: 'OFFENDER', name: 'Offender', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 2 },
|
|
15
|
-
{appModuleId: 'SPRVSN', name: 'Supervision', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 3 },
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
return this.configs;
|
|
19
|
-
}
|
|
20
|
-
*/
|
|
21
|
-
/*
|
|
22
|
-
public getNavbarConfigs(serviceApiUrl: string): Observable<SmartNavbarConfig[]> {
|
|
23
|
-
return this.http.get<SmartNavbarConfig[]>(serviceApiUrl + '/AppModules');
|
|
24
|
-
}
|
|
25
|
-
*/
|
|
26
|
-
getNavbarConfigs(serviceApiUrl) {
|
|
1
|
+
import { Injectable, isDevMode } from '@angular/core';
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
3
|
+
import { map } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common/http";
|
|
6
|
+
export class SmartNavbarService {
|
|
7
|
+
constructor(http) {
|
|
8
|
+
this.http = http;
|
|
9
|
+
}
|
|
10
|
+
/*
|
|
11
|
+
public getNavbarConfigs(): SmartNavbarConfig[] {
|
|
12
|
+
this.configs = [
|
|
13
|
+
{appModuleId: 'SMART', name: 'SMART', url: 'http://localhost:4200', offenderSpecific: false, displayOrder: 1 },
|
|
14
|
+
{appModuleId: 'OFFENDER', name: 'Offender', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 2 },
|
|
15
|
+
{appModuleId: 'SPRVSN', name: 'Supervision', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 3 },
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
return this.configs;
|
|
19
|
+
}
|
|
20
|
+
*/
|
|
21
|
+
/*
|
|
22
|
+
public getNavbarConfigs(serviceApiUrl: string): Observable<SmartNavbarConfig[]> {
|
|
23
|
+
return this.http.get<SmartNavbarConfig[]>(serviceApiUrl + '/AppModules');
|
|
24
|
+
}
|
|
25
|
+
*/
|
|
26
|
+
getNavbarConfigs(serviceApiUrl) {
|
|
27
27
|
const queryString = `
|
|
28
28
|
{
|
|
29
29
|
findAppModules {
|
|
@@ -35,29 +35,29 @@ export class SmartNavbarService {
|
|
|
35
35
|
displayOrder
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
}`;
|
|
39
|
-
/*
|
|
40
|
-
const httpHeaders = new HttpHeaders({
|
|
41
|
-
'Content-Type': 'application/json',
|
|
42
|
-
'Cache-Control': 'no-cache'
|
|
43
|
-
});
|
|
44
|
-
const options = {
|
|
45
|
-
headers: httpHeaders
|
|
46
|
-
};
|
|
47
|
-
*/
|
|
48
|
-
return this.http
|
|
49
|
-
.post(serviceApiUrl, { query: queryString })
|
|
50
|
-
.pipe(map(({ data }) => {
|
|
51
|
-
if (isDevMode()) {
|
|
52
|
-
console.log(data);
|
|
53
|
-
}
|
|
54
|
-
return data.findAppModules.data;
|
|
55
|
-
}));
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/** @nocollapse */
|
|
59
|
-
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
61
|
-
type: Injectable
|
|
62
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
}`;
|
|
39
|
+
/*
|
|
40
|
+
const httpHeaders = new HttpHeaders({
|
|
41
|
+
'Content-Type': 'application/json',
|
|
42
|
+
'Cache-Control': 'no-cache'
|
|
43
|
+
});
|
|
44
|
+
const options = {
|
|
45
|
+
headers: httpHeaders
|
|
46
|
+
};
|
|
47
|
+
*/
|
|
48
|
+
return this.http
|
|
49
|
+
.post(serviceApiUrl, { query: queryString })
|
|
50
|
+
.pipe(map(({ data }) => {
|
|
51
|
+
if (isDevMode()) {
|
|
52
|
+
console.log(data);
|
|
53
|
+
}
|
|
54
|
+
return data.findAppModules.data;
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SmartNavbarService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
58
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SmartNavbarService }); }
|
|
59
|
+
}
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SmartNavbarService, decorators: [{
|
|
61
|
+
type: Injectable
|
|
62
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jc21hcnQvbmdjLXNtYXJ0LWNvcmUvc3JjL2xpYi9zbWFydC1uYXZiYXIvc21hcnQtbmF2YmFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBS3JDLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUFHLENBQUM7SUFFeEM7Ozs7Ozs7Ozs7TUFVRTtJQUNGOzs7O01BSUU7SUFFSyxnQkFBZ0IsQ0FDckIsYUFBcUI7UUFFckIsTUFBTSxXQUFXLEdBQUc7Ozs7Ozs7Ozs7O1VBV2QsQ0FBQztRQUVQOzs7Ozs7OztVQVFFO1FBRUYsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBTSxhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7YUFDaEQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNmLElBQUksU0FBUyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQjtZQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7a0lBekRVLGtCQUFrQjtzSUFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU21hcnROYXZiYXJTZXJ2aWNlIHtcclxuICBjb25maWdzOiBTbWFydE5hdmJhckNvbmZpZ1tdO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgLypcclxuICBwdWJsaWMgZ2V0TmF2YmFyQ29uZmlncygpOiBTbWFydE5hdmJhckNvbmZpZ1tdIHtcclxuICAgICAgdGhpcy5jb25maWdzID0gW1xyXG4gICAgICAgICAge2FwcE1vZHVsZUlkOiAnU01BUlQnLCBuYW1lOiAnU01BUlQnLCB1cmw6ICdodHRwOi8vbG9jYWxob3N0OjQyMDAnLCBvZmZlbmRlclNwZWNpZmljOiBmYWxzZSwgZGlzcGxheU9yZGVyOiAxIH0sXHJcbiAgICAgICAgICB7YXBwTW9kdWxlSWQ6ICdPRkZFTkRFUicsIG5hbWU6ICdPZmZlbmRlcicsIHVybDogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMCcsIG9mZmVuZGVyU3BlY2lmaWM6IHRydWUsIGRpc3BsYXlPcmRlcjogMiB9LFxyXG4gICAgICAgICAge2FwcE1vZHVsZUlkOiAnU1BSVlNOJywgbmFtZTogJ1N1cGVydmlzaW9uJywgdXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0MjAwJywgb2ZmZW5kZXJTcGVjaWZpYzogdHJ1ZSwgZGlzcGxheU9yZGVyOiAzIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWdzO1xyXG4gIH1cclxuICAqL1xyXG4gIC8qXHJcbiAgcHVibGljIGdldE5hdmJhckNvbmZpZ3Moc2VydmljZUFwaVVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTbWFydE5hdmJhckNvbmZpZ1tdPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFNtYXJ0TmF2YmFyQ29uZmlnW10+KHNlcnZpY2VBcGlVcmwgKyAnL0FwcE1vZHVsZXMnKTtcclxuICB9XHJcbiAgKi9cclxuXHJcbiAgcHVibGljIGdldE5hdmJhckNvbmZpZ3MoXHJcbiAgICBzZXJ2aWNlQXBpVXJsOiBzdHJpbmcsXHJcbiAgKTogT2JzZXJ2YWJsZTxTbWFydE5hdmJhckNvbmZpZ1tdPiB7XHJcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IGBcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaW5kQXBwTW9kdWxlcyB7XHJcbiAgICAgICAgICAgIGRhdGEge1xyXG4gICAgICAgICAgICAgIGFwcE1vZHVsZUlkXHJcbiAgICAgICAgICAgICAgbmFtZVxyXG4gICAgICAgICAgICAgIHVybFxyXG4gICAgICAgICAgICAgIG9mZmVuZGVyU3BlY2lmaWNGbGFnXHJcbiAgICAgICAgICAgICAgZGlzcGxheU9yZGVyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9YDtcclxuXHJcbiAgICAvKlxyXG4gICAgY29uc3QgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZSdcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogaHR0cEhlYWRlcnNcclxuICAgIH07XHJcbiAgICAqL1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8YW55PihzZXJ2aWNlQXBpVXJsLCB7IHF1ZXJ5OiBxdWVyeVN0cmluZyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHsgZGF0YSB9KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZGF0YS5maW5kQXBwTW9kdWxlcy5kYXRhO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|