@csmart/ngc-smart-core 1.13.13 → 1.13.14
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/README.md +24 -24
- package/csmart-ngc-smart-core.d.ts +5 -5
- package/esm2020/csmart-ngc-smart-core.mjs +4 -4
- package/esm2020/lib/ngc-smart-core.module.mjs +97 -97
- package/esm2020/lib/smart-auth/smart-access-control-config.mjs +12 -12
- package/esm2020/lib/smart-auth/smart-access-control.directive.mjs +40 -40
- package/esm2020/lib/smart-auth/smart-auth.service.mjs +505 -505
- package/esm2020/lib/smart-auth/smart-authorization-guard.service.mjs +35 -35
- package/esm2020/lib/smart-auth/smart-error.component.mjs +37 -37
- package/esm2020/lib/smart-auth/smart-login-staff-resolver.service.mjs +59 -59
- package/esm2020/lib/smart-auth/smart-selected-offender-resolver.service.mjs +49 -49
- package/esm2020/lib/smart-navbar/smart-navbar-config.mjs +2 -2
- package/esm2020/lib/smart-navbar/smart-navbar.component.mjs +167 -166
- package/esm2020/lib/smart-navbar/smart-navbar.service.mjs +63 -63
- package/esm2020/lib/smart-offender-header/smart-offender-header.component.mjs +151 -151
- package/esm2020/lib/smart-offender-header/smart-offender-header.service.mjs +41 -41
- package/esm2020/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.mjs +25 -25
- package/esm2020/lib/smart-staff-offender-options/smart-staff-offender-options.component.mjs +78 -78
- package/esm2020/lib/smart-staff-offender-options/smart-staff-offender-options.service.mjs +132 -132
- package/esm2020/lib/smart-storage/smart-storage-model.mjs +30 -30
- package/esm2020/lib/smart-storage/xdm.service.mjs +158 -158
- package/esm2020/public-api.mjs +20 -20
- package/fesm2015/csmart-ngc-smart-core.mjs +1518 -1517
- package/fesm2015/csmart-ngc-smart-core.mjs.map +1 -1
- package/fesm2020/csmart-ngc-smart-core.mjs +1504 -1503
- package/fesm2020/csmart-ngc-smart-core.mjs.map +1 -1
- 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 +40 -40
- 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-staff-offender-options/smart-staff-offender-options-resolver.service.d.ts +11 -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 +42 -42
- package/package.json +1 -1
- package/public-api.d.ts +16 -16
|
@@ -1,166 +1,167 @@
|
|
|
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 * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "./smart-navbar.service";
|
|
8
|
-
import * as i2 from "../smart-storage/xdm.service";
|
|
9
|
-
import * as i3 from "@azure/msal-angular";
|
|
10
|
-
import * as i4 from "@angular/material/tabs";
|
|
11
|
-
import * as i5 from "@angular/material/button";
|
|
12
|
-
import * as i6 from "@angular/common";
|
|
13
|
-
export class SmartNavbarComponent {
|
|
14
|
-
constructor(navbarConfigService, xdmService,
|
|
15
|
-
// private zone: NgZone,
|
|
16
|
-
authnService) {
|
|
17
|
-
this.navbarConfigService = navbarConfigService;
|
|
18
|
-
this.xdmService = xdmService;
|
|
19
|
-
this.authnService = authnService;
|
|
20
|
-
this.appModuleId = 'SMART';
|
|
21
|
-
}
|
|
22
|
-
ngOnChanges() {
|
|
23
|
-
/*
|
|
24
|
-
console.log(this.selectedTab);
|
|
25
|
-
setTimeout(() => {
|
|
26
|
-
this.tabGroup.selectedIndex = this.selectedTab;
|
|
27
|
-
}, 1000);
|
|
28
|
-
*/
|
|
29
|
-
}
|
|
30
|
-
ngOnInit() {
|
|
31
|
-
this.xdmService.getSelectedOffender().then((selectedOffender) => {
|
|
32
|
-
this.selectedOffender =
|
|
33
|
-
selectedOffender && selectedOffender.offenderId
|
|
34
|
-
? selectedOffender
|
|
35
|
-
: null;
|
|
36
|
-
});
|
|
37
|
-
this.xdmService.getLoginStaff().then((loginStaff) => {
|
|
38
|
-
// this.zone.run(() => {
|
|
39
|
-
this.loginStaff = loginStaff ? loginStaff : null;
|
|
40
|
-
// });
|
|
41
|
-
});
|
|
42
|
-
this.offenderSubscription = this.xdmService
|
|
43
|
-
.getOffenderUpdate()
|
|
44
|
-
.subscribe((selectedOffender) => {
|
|
45
|
-
// this.zone.run(() => {
|
|
46
|
-
this.selectedOffender = selectedOffender;
|
|
47
|
-
// });
|
|
48
|
-
});
|
|
49
|
-
this.staffSubscription = this.xdmService
|
|
50
|
-
.getStaffUpdate()
|
|
51
|
-
.subscribe((loginStaff) => {
|
|
52
|
-
// this.zone.run(() => {
|
|
53
|
-
this.loginStaff = loginStaff;
|
|
54
|
-
// });
|
|
55
|
-
});
|
|
56
|
-
this.navbarConfigService
|
|
57
|
-
.getNavbarConfigs(this.serviceApiUrl)
|
|
58
|
-
.subscribe((configs) => {
|
|
59
|
-
this.navbarConfigs = configs.sort((a, b) => {
|
|
60
|
-
if (a.displayOrder < b.displayOrder) {
|
|
61
|
-
return -1;
|
|
62
|
-
}
|
|
63
|
-
else if (a.displayOrder > b.displayOrder) {
|
|
64
|
-
return 1;
|
|
65
|
-
}
|
|
66
|
-
return 0;
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
// this.isAuthenticated = this.authnService.getAccount() ? true : false;
|
|
70
|
-
}
|
|
71
|
-
ngOnDestroy() {
|
|
72
|
-
this.offenderSubscription.unsubscribe();
|
|
73
|
-
this.staffSubscription.unsubscribe();
|
|
74
|
-
}
|
|
75
|
-
logout() {
|
|
76
|
-
this.xdmService.clearAll();
|
|
77
|
-
this.authnService.logout();
|
|
78
|
-
}
|
|
79
|
-
get isAuthenticated() {
|
|
80
|
-
return this.authnService.instance.getAllAccounts().length > 0;
|
|
81
|
-
}
|
|
82
|
-
getAppModuleUrl(config) {
|
|
83
|
-
return config && this.selectedOffender && config.appModuleId === 'PPMAS'
|
|
84
|
-
? `${config.url}?skipAppMetadata=true&OffenderId=${this.selectedOffender.offenderId}`
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
this.loginStaff.permissions
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
this.loginStaff.roles
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
this.loginStaff.roles
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
this.loginStaff.roles
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
case '
|
|
141
|
-
case '
|
|
142
|
-
case '
|
|
143
|
-
case '
|
|
144
|
-
case '
|
|
145
|
-
case '
|
|
146
|
-
case '
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/** @nocollapse */ /** @nocollapse */ SmartNavbarComponent.ɵ
|
|
155
|
-
i0.ɵɵ
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUlULEtBQUssRUFFTCxTQUFTLEVBRVQsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7OztBQWMxRCxNQUFNLE9BQU8sb0JBQW9CO0lBWS9CLFlBQ1UsbUJBQXVDLEVBQ3ZDLFVBQXNCO0lBQzlCLHdCQUF3QjtJQUNoQixZQUF5QjtRQUh6Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBQ3ZDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFFdEIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFkMUIsZ0JBQVcsR0FBRyxPQUFPLENBQUM7SUFlNUIsQ0FBQztJQUVKLFdBQVc7UUFDVDs7Ozs7VUFLRTtJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkIs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b0JBQW9COzJJQUFwQixvQkFBb0IsdVBDN0JqQyx5N0VBMkRBOzJGRDlCYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLGlCQUdiLGlCQUFpQixDQUFDLElBQUk7NEpBRzVCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDYSxRQUFRO3NCQUExQixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGlzRGV2TW9kZSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmJhclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWGRtU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2UveGRtLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgTG9naW5TdGFmZixcclxuICBSb2xlLFxyXG59IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc21hcnQtbmF2YmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1uYXZiYXIuY29tcG9uZW50LmNzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydE5hdmJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHNlcnZpY2VBcGlVcmw6IHN0cmluZztcclxuICBASW5wdXQoKSBhcHBNb2R1bGVJZCA9ICdTTUFSVCc7XHJcbiAgQFZpZXdDaGlsZCgndGFicycpIHRhYkdyb3VwOiBNYXRUYWJHcm91cDtcclxuICBzZWxlY3RlZE9mZmVuZGVyOiBTZWxlY3RlZE9mZmVuZGVyO1xyXG4gIGxvZ2luU3RhZmY6IExvZ2luU3RhZmY7XHJcbiAgb2ZmZW5kZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBzdGFmZlN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIC8vIGlzQXV0aGVudGljYXRlZCA9IGZhbHNlO1xyXG5cclxuICBuYXZiYXJDb25maWdzOiBTbWFydE5hdmJhckNvbmZpZ1tdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmF2YmFyQ29uZmlnU2VydmljZTogU21hcnROYXZiYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIGF1dGhuU2VydmljZTogTXNhbFNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIC8qXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVGFiKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgICAqL1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuZ2V0U2VsZWN0ZWRPZmZlbmRlcigpLnRoZW4oKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyID1cclxuICAgICAgICBzZWxlY3RlZE9mZmVuZGVyICYmIHNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZFxyXG4gICAgICAgICAgPyBzZWxlY3RlZE9mZmVuZGVyXHJcbiAgICAgICAgICA6IG51bGw7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuZ2V0TG9naW5TdGFmZigpLnRoZW4oKGxvZ2luU3RhZmYpID0+IHtcclxuICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiA9IGxvZ2luU3RhZmYgPyBsb2dpblN0YWZmIDogbnVsbDtcclxuICAgICAgLy8gfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRPZmZlbmRlclVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcclxuICAgICAgICAvLyB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPSBzZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRTdGFmZlVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxvZ2luU3RhZmYpID0+IHtcclxuICAgICAgICAvLyB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLm5hdmJhckNvbmZpZ1NlcnZpY2VcclxuICAgICAgLmdldE5hdmJhckNvbmZpZ3ModGhpcy5zZXJ2aWNlQXBpVXJsKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb25maWdzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uYXZiYXJDb25maWdzID0gY29uZmlncy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICBpZiAoYS5kaXNwbGF5T3JkZXIgPCBiLmRpc3BsYXlPcmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGEuZGlzcGxheU9yZGVyID4gYi5kaXNwbGF5T3JkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhuU2VydmljZS5nZXRBY2NvdW50KCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMub2ZmZW5kZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc3RhZmZTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuY2xlYXJBbGwoKTtcclxuICAgIHRoaXMuYXV0aG5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmF1dGhuU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QXBwTW9kdWxlVXJsKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIHtcclxuICAgIHJldHVybiBjb25maWcgJiYgdGhpcy5zZWxlY3RlZE9mZmVuZGVyICYmIGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gJ1BQTUFTJ1xyXG4gICAgICA/IGAke2NvbmZpZy51cmx9P3NraXBBcHBNZXRhZGF0YT10cnVlJk9mZmVuZGVySWQ9JHt0aGlzLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZH1gXHJcbiAgICAgIDogY29uZmlnLnVybDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNBcHBNb2R1bGVQZXJtaXNzaW9uKGFwcE1vZHVsZUlkKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAocCkgPT4gcC5hcHBNb2R1bGVJZCA9PT0gYXBwTW9kdWxlSWQsXHJcbiAgICAgICAgKSA+IC0xXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNFeHRlcm5hbFVzZXJSb2xlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9naW5TdGFmZi5yb2xlcy5maW5kSW5kZXgodGhpcy5pc0V4dGVybmFsUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja0RWSVBQZXJtaXNzaW9uKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbntcclxuICAgIHJldHVybiAoKGNvbmZpZy5hcHBNb2R1bGVJZCAhPT0gJ0RWSVAnKSB8fCAoY29uZmlnLmFwcE1vZHVsZUlkID09PSBcIkRWSVBcIiAmJiB0aGlzLmhhc0RWSVBSb2xlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0RWSVBSb2xlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9naW5TdGFmZi5yb2xlcy5maW5kSW5kZXgodGhpcy5pc0RWSVBSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0RWSVBSb2xlKHJvbGU6IFJvbGUpe1xyXG4gICAgaWYocm9sZS5yb2xlSWQgPT0gJ1RTRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ1RBRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ1NUU0QnIHx8IHJvbGUucm9sZUlkID09ICdCQycpe1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrVmljdGltUGVybWlzc2lvbihjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKSA6IGJvb2xlYW57XHJcbiAgICByZXR1cm4gKChjb25maWcuYXBwTW9kdWxlSWQgIT09ICdWSUNUSU0nKSB8fCAoY29uZmlnLmFwcE1vZHVsZUlkID09PSBcIlZJQ1RJTVwiICYmIHRoaXMuaGFzVmljdGltUm9sZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNWaWN0aW1Sb2xlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9naW5TdGFmZi5yb2xlcy5maW5kSW5kZXgodGhpcy5pc1ZpY3RpbVJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVmljdGltUm9sZShyb2xlOiBSb2xlKXtcclxuICAgIGlmKHJvbGUucm9sZUlkID09ICdCQycgfHwgcm9sZS5yb2xlSWQgPT0gJ1ZTUCcpe1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0V4dGVybmFsUm9sZShyb2xlOiBSb2xlKSB7XHJcbiAgICBzd2l0Y2ggKHJvbGUucm9sZUlkKSB7XHJcbiAgICAgIGNhc2UgJ0VVRFRMJzpcclxuICAgICAgY2FzZSAnRVVEVVNNJzpcclxuICAgICAgY2FzZSAnRVVKREcnOlxyXG4gICAgICBjYXNlICdFVU1QRCc6XHJcbiAgICAgIGNhc2UgJ0VVU09UVic6XHJcbiAgICAgIGNhc2UgJ0VVVVNBMic6XHJcbiAgICAgIGNhc2UgJ0VVVVNBTyc6XHJcbiAgICAgIGNhc2UgJ0VVVVNQQyc6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gRVVEVExcclxuLy8gRVVEVVNNXHJcbi8vIEVVSkRHXHJcblxyXG4vLyBFVU1QRFxyXG4vLyBFVVNPVFZcclxuLy8gRVVVU0EyXHJcblxyXG4vLyBFVVVTQU9cclxuLy8gRVVVU1BDXHJcbiIsIjwhLS1cclxuPGEgY2xhc3M9XCJzbWFydC1uYXZiYXItdG9nZ2xlIG9wZW5cIiBocmVmPVwiI25hdlwiPlxyXG4gIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5tZW51PC9pPlxyXG48L2E+XHJcblxyXG48bmF2IGlkPVwibmF2XCIgcm9sZT1cIm5hdmlnYXRpb25cIiBjbGFzcz1cInNtYXJ0LW5hdmJhci1jb250YWluZXJcIj5cclxuICA8YSBjbGFzcz1cInNtYXJ0LW5hdmJhci10b2dnbGUgY2xvc2VcIiBocmVmPVwiI1wiPlxyXG4gICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmNsb3NlPC9pPlxyXG4gIDwvYT5cclxuXHJcbiAgPHNwYW4gKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBuYXZiYXJDb25maWdzXCI+XHJcbiAgICA8YSBtYXQtYnV0dG9uIGNsYXNzPVwic21hcnQtbmF2YmFyLWl0ZW1cIiBcclxuICAgICAgKm5nSWY9XCIoY29uZmlnLm9mZmVuZGVyU3BlY2lmaWNGbGFnID09PSBmYWxzZSB8fCBzZWxlY3RlZE9mZmVuZGVyKSAmJiBpc0F1dGhlbnRpY2F0ZWQgJiYgbG9naW5TdGFmZlwiIGhyZWY9XCJ7e2NvbmZpZy51cmx9fVwiPnt7Y29uZmlnLm5hbWV9fTwvYT5cclxuICA8L3NwYW4+XHJcblxyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInNtYXJ0LW5hdmJhci1pdGVtXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVUaGVtZVwiPlNldCBUaGVtZTwvYnV0dG9uPlxyXG4gIDxtYXQtbWVudSAjbWVudVRoZW1lPVwibWF0TWVudVwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvblNldFRoZW1lKCdibHVlLXRoZW1lJylcIj5CbHVlPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uU2V0VGhlbWUoJ3JlZC10aGVtZScpXCI+UmVkPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uU2V0VGhlbWUoJ2dyZWVuLXRoZW1lJylcIj5HcmVlbjwvYnV0dG9uPlxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic21hcnQtbmF2YmFyLWl0ZW0gc21hcnQtbmF2YmFyLWxhc3QtaXRlbVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcclxuICAgICpuZ0lmPVwiaXNBdXRoZW50aWNhdGVkICYmIGxvZ2luU3RhZmZcIj57e2xvZ2luU3RhZmYuZmlyc3ROYW1lICsgJyAnICsgbG9naW5TdGFmZi5sYXN0TmFtZX19PC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtPlByb2ZpbGU8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwibG9nb3V0KClcIj5TaWduIE91dDwvYnV0dG9uPlxyXG4gIDwvbWF0LW1lbnU+XHJcbjwvbmF2PlxyXG4tLT5cclxuXHJcbjwhLS0gPG5hdiBtYXQtdGFiLW5hdi1iYXI+XHJcbiAgPGEgbWF0LXRhYi1saW5rIG1hdC1mbGF0LWJ1dHRvbiAqbmdGb3I9XCJsZXQgY29uZmlnIG9mIG5hdmJhckNvbmZpZ3NcIiBbYWN0aXZlXT1cImFwcE1vZHVsZUlkID09IGNvbmZpZy5hcHBNb2R1bGVJZFwiIGhyZWY9XCJ7e2NvbmZpZy51cmx9fVwiPnt7Y29uZmlnLm5hbWV9fTwvYT5cclxuPC9uYXY+IC0tPlxyXG5cclxuPG1hdC10YWItZ3JvdXAgY2xhc3M9XCJuYXYtdGFiLWdyb3VwXCIgW3NlbGVjdGVkSW5kZXhdPVwibnVsbFwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBuYXZiYXJDb25maWdzXCI+XHJcbiAgICA8bWF0LXRhYlxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgICgoaGFzRXh0ZXJuYWxVc2VyUm9sZSAmJiBoYXNBcHBNb2R1bGVQZXJtaXNzaW9uKGNvbmZpZy5hcHBNb2R1bGVJZCkpIHx8XHJcbiAgICAgICAgKCFoYXNFeHRlcm5hbFVzZXJSb2xlICYmIFxyXG4gICAgICAgIChjb25maWcub2ZmZW5kZXJTcGVjaWZpY0ZsYWcgPT09IGZhbHNlIHx8IHNlbGVjdGVkT2ZmZW5kZXIpKSkgJiZcclxuICAgICAgICBjaGVja1ZpY3RpbVBlcm1pc3Npb24oY29uZmlnKSAmJlxyXG4gICAgICAgIGNoZWNrRFZJUFBlcm1pc3Npb24oY29uZmlnKSAmJlxyXG4gICAgICAgIGlzQXV0aGVudGljYXRlZCAmJlxyXG4gICAgICAgIGxvZ2luU3RhZmYgXHJcbiAgICAgIFwiXHJcbiAgICAgIGxhYmVsPVwiY29uZmlnLm5hbWVcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cclxuICAgICAgICA8YVxyXG4gICAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdtYWluLW1lbnUtYWN0aXZlJzogYXBwTW9kdWxlSWQgPT0gY29uZmlnLmFwcE1vZHVsZUlkIH1cIlxyXG4gICAgICAgICAgW2hyZWZdPVwiZ2V0QXBwTW9kdWxlVXJsKGNvbmZpZylcIlxyXG4gICAgICAgICAgPnt7IGNvbmZpZy5uYW1lIH19PC9hXHJcbiAgICAgICAgPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L21hdC10YWItZ3JvdXA+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 * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./smart-navbar.service";
|
|
8
|
+
import * as i2 from "../smart-storage/xdm.service";
|
|
9
|
+
import * as i3 from "@azure/msal-angular";
|
|
10
|
+
import * as i4 from "@angular/material/tabs";
|
|
11
|
+
import * as i5 from "@angular/material/button";
|
|
12
|
+
import * as i6 from "@angular/common";
|
|
13
|
+
export class SmartNavbarComponent {
|
|
14
|
+
constructor(navbarConfigService, xdmService,
|
|
15
|
+
// private zone: NgZone,
|
|
16
|
+
authnService) {
|
|
17
|
+
this.navbarConfigService = navbarConfigService;
|
|
18
|
+
this.xdmService = xdmService;
|
|
19
|
+
this.authnService = authnService;
|
|
20
|
+
this.appModuleId = 'SMART';
|
|
21
|
+
}
|
|
22
|
+
ngOnChanges() {
|
|
23
|
+
/*
|
|
24
|
+
console.log(this.selectedTab);
|
|
25
|
+
setTimeout(() => {
|
|
26
|
+
this.tabGroup.selectedIndex = this.selectedTab;
|
|
27
|
+
}, 1000);
|
|
28
|
+
*/
|
|
29
|
+
}
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
this.xdmService.getSelectedOffender().then((selectedOffender) => {
|
|
32
|
+
this.selectedOffender =
|
|
33
|
+
selectedOffender && selectedOffender.offenderId
|
|
34
|
+
? selectedOffender
|
|
35
|
+
: null;
|
|
36
|
+
});
|
|
37
|
+
this.xdmService.getLoginStaff().then((loginStaff) => {
|
|
38
|
+
// this.zone.run(() => {
|
|
39
|
+
this.loginStaff = loginStaff ? loginStaff : null;
|
|
40
|
+
// });
|
|
41
|
+
});
|
|
42
|
+
this.offenderSubscription = this.xdmService
|
|
43
|
+
.getOffenderUpdate()
|
|
44
|
+
.subscribe((selectedOffender) => {
|
|
45
|
+
// this.zone.run(() => {
|
|
46
|
+
this.selectedOffender = selectedOffender;
|
|
47
|
+
// });
|
|
48
|
+
});
|
|
49
|
+
this.staffSubscription = this.xdmService
|
|
50
|
+
.getStaffUpdate()
|
|
51
|
+
.subscribe((loginStaff) => {
|
|
52
|
+
// this.zone.run(() => {
|
|
53
|
+
this.loginStaff = loginStaff;
|
|
54
|
+
// });
|
|
55
|
+
});
|
|
56
|
+
this.navbarConfigService
|
|
57
|
+
.getNavbarConfigs(this.serviceApiUrl)
|
|
58
|
+
.subscribe((configs) => {
|
|
59
|
+
this.navbarConfigs = configs.sort((a, b) => {
|
|
60
|
+
if (a.displayOrder < b.displayOrder) {
|
|
61
|
+
return -1;
|
|
62
|
+
}
|
|
63
|
+
else if (a.displayOrder > b.displayOrder) {
|
|
64
|
+
return 1;
|
|
65
|
+
}
|
|
66
|
+
return 0;
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
// this.isAuthenticated = this.authnService.getAccount() ? true : false;
|
|
70
|
+
}
|
|
71
|
+
ngOnDestroy() {
|
|
72
|
+
this.offenderSubscription.unsubscribe();
|
|
73
|
+
this.staffSubscription.unsubscribe();
|
|
74
|
+
}
|
|
75
|
+
logout() {
|
|
76
|
+
this.xdmService.clearAll();
|
|
77
|
+
this.authnService.logout();
|
|
78
|
+
}
|
|
79
|
+
get isAuthenticated() {
|
|
80
|
+
return this.authnService.instance.getAllAccounts().length > 0;
|
|
81
|
+
}
|
|
82
|
+
getAppModuleUrl(config) {
|
|
83
|
+
return config && this.selectedOffender && config.appModuleId === 'PPMAS'
|
|
84
|
+
// ? `${config.url}?skipAppMetadata=true&OffenderId=${this.selectedOffender.offenderId}`
|
|
85
|
+
? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`
|
|
86
|
+
: config.url;
|
|
87
|
+
}
|
|
88
|
+
hasAppModulePermission(appModuleId) {
|
|
89
|
+
if (this.loginStaff &&
|
|
90
|
+
this.loginStaff.permissions &&
|
|
91
|
+
this.loginStaff.permissions.length > 0) {
|
|
92
|
+
return (this.loginStaff.permissions.findIndex((p) => p.appModuleId === appModuleId) > -1);
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
get hasExternalUserRole() {
|
|
97
|
+
if (this.loginStaff &&
|
|
98
|
+
this.loginStaff.roles &&
|
|
99
|
+
this.loginStaff.roles.length > 0) {
|
|
100
|
+
return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
checkDVIPPermission(config) {
|
|
105
|
+
return ((config.appModuleId !== 'DVIP') || (config.appModuleId === "DVIP" && this.hasDVIPRole));
|
|
106
|
+
}
|
|
107
|
+
get hasDVIPRole() {
|
|
108
|
+
if (this.loginStaff &&
|
|
109
|
+
this.loginStaff.roles &&
|
|
110
|
+
this.loginStaff.roles.length > 0) {
|
|
111
|
+
return this.loginStaff.roles.findIndex(this.isDVIPRole) > -1;
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
isDVIPRole(role) {
|
|
116
|
+
if (role.roleId == 'TSD' || role.roleId == 'TAD' || role.roleId == 'STSD' || role.roleId == 'BC') {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
checkVictimPermission(config) {
|
|
122
|
+
return ((config.appModuleId !== 'VICTIM') || (config.appModuleId === "VICTIM" && this.hasVictimRole));
|
|
123
|
+
}
|
|
124
|
+
get hasVictimRole() {
|
|
125
|
+
if (this.loginStaff &&
|
|
126
|
+
this.loginStaff.roles &&
|
|
127
|
+
this.loginStaff.roles.length > 0) {
|
|
128
|
+
return this.loginStaff.roles.findIndex(this.isVictimRole) > -1;
|
|
129
|
+
}
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
isVictimRole(role) {
|
|
133
|
+
if (role.roleId == 'BC' || role.roleId == 'VSP') {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
isExternalRole(role) {
|
|
139
|
+
switch (role.roleId) {
|
|
140
|
+
case 'EUDTL':
|
|
141
|
+
case 'EUDUSM':
|
|
142
|
+
case 'EUJDG':
|
|
143
|
+
case 'EUMPD':
|
|
144
|
+
case 'EUSOTV':
|
|
145
|
+
case 'EUUSA2':
|
|
146
|
+
case 'EUUSAO':
|
|
147
|
+
case 'EUUSPC':
|
|
148
|
+
return true;
|
|
149
|
+
default:
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/** @nocollapse */ /** @nocollapse */ SmartNavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SmartNavbarComponent, deps: [{ token: i1.SmartNavbarService }, { token: i2.XdmService }, { token: i3.MsalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
155
|
+
/** @nocollapse */ /** @nocollapse */ SmartNavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", 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: "<!--\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\n <i class=\"material-icons\">menu</i>\n</a>\n\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\n <a class=\"smart-navbar-toggle close\" href=\"#\">\n <i class=\"material-icons\">close</i>\n </a>\n\n <span *ngFor=\"let config of navbarConfigs\">\n <a mat-button class=\"smart-navbar-item\" \n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\n </span>\n\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\n <mat-menu #menuTheme=\"matMenu\">\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\n </mat-menu>\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item>Profile</button>\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\n </mat-menu>\n</nav>\n-->\n\n<!-- <nav mat-tab-nav-bar>\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\n</nav> -->\n\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"null\">\n <ng-container *ngFor=\"let config of navbarConfigs\">\n <mat-tab\n *ngIf=\"\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\n (!hasExternalUserRole && \n (config.offenderSpecificFlag === false || selectedOffender))) &&\n checkVictimPermission(config) &&\n checkDVIPPermission(config) &&\n isAuthenticated &&\n loginStaff \n \"\n label=\"config.name\"\n >\n <ng-template mat-tab-label>\n <a\n mat-flat-button\n [ngClass]=\"{ 'main-menu-active': appModuleId == config.appModuleId }\"\n [href]=\"getAppModuleUrl(config)\"\n >{{ config.name }}</a\n >\n </ng-template>\n </mat-tab>\n </ng-container>\n</mat-tab-group>\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);-webkit-text-decoration-line:none;text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-family:Roboto,arial,sans-serif;font-size:13px}.mat-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-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"], components: [{ type: i4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i4.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }], directives: [{ type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SmartNavbarComponent, decorators: [{
|
|
157
|
+
type: Component,
|
|
158
|
+
args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "<!--\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\n <i class=\"material-icons\">menu</i>\n</a>\n\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\n <a class=\"smart-navbar-toggle close\" href=\"#\">\n <i class=\"material-icons\">close</i>\n </a>\n\n <span *ngFor=\"let config of navbarConfigs\">\n <a mat-button class=\"smart-navbar-item\" \n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\n </span>\n\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\n <mat-menu #menuTheme=\"matMenu\">\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\n </mat-menu>\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item>Profile</button>\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\n </mat-menu>\n</nav>\n-->\n\n<!-- <nav mat-tab-nav-bar>\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\n</nav> -->\n\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"null\">\n <ng-container *ngFor=\"let config of navbarConfigs\">\n <mat-tab\n *ngIf=\"\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\n (!hasExternalUserRole && \n (config.offenderSpecificFlag === false || selectedOffender))) &&\n checkVictimPermission(config) &&\n checkDVIPPermission(config) &&\n isAuthenticated &&\n loginStaff \n \"\n label=\"config.name\"\n >\n <ng-template mat-tab-label>\n <a\n mat-flat-button\n [ngClass]=\"{ 'main-menu-active': appModuleId == config.appModuleId }\"\n [href]=\"getAppModuleUrl(config)\"\n >{{ config.name }}</a\n >\n </ng-template>\n </mat-tab>\n </ng-container>\n</mat-tab-group>\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);-webkit-text-decoration-line:none;text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-family:Roboto,arial,sans-serif;font-size:13px}.mat-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-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"] }]
|
|
159
|
+
}], ctorParameters: function () { return [{ type: i1.SmartNavbarService }, { type: i2.XdmService }, { type: i3.MsalService }]; }, propDecorators: { serviceApiUrl: [{
|
|
160
|
+
type: Input
|
|
161
|
+
}], appModuleId: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], tabGroup: [{
|
|
164
|
+
type: ViewChild,
|
|
165
|
+
args: ['tabs']
|
|
166
|
+
}] } });
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUlULEtBQUssRUFFTCxTQUFTLEVBRVQsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7OztBQWMxRCxNQUFNLE9BQU8sb0JBQW9CO0lBWS9CLFlBQ1UsbUJBQXVDLEVBQ3ZDLFVBQXNCO0lBQzlCLHdCQUF3QjtJQUNoQixZQUF5QjtRQUh6Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBQ3ZDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFFdEIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFkMUIsZ0JBQVcsR0FBRyxPQUFPLENBQUM7SUFlNUIsQ0FBQztJQUVKLFdBQVc7UUFDVDs7Ozs7VUFLRTtJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkIsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsVUFBVTtvQkFDN0MsQ0FBQyxDQUFDLGdCQUFnQjtvQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNsRCx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2pELE1BQU07UUFDUixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVTthQUN4QyxpQkFBaUIsRUFBRTthQUNuQixTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQzlCLHdCQUF3QjtZQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7WUFDekMsTUFBTTtRQUNSLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVO2FBQ3JDLGNBQWMsRUFBRTthQUNoQixTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4Qix3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDN0IsTUFBTTtRQUNSLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLG1CQUFtQjthQUNyQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUU7b0JBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ1g7cUJBQU0sSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUU7b0JBQzFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNWO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVMLHdFQUF3RTtJQUMxRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVNLGVBQWUsQ0FBQyxNQUF5QjtRQUM5QyxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxPQUFPO1lBQ3hFLHlGQUF5RjtZQUN2RixDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxlQUFlLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7WUFDaEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVNLHNCQUFzQixDQUFDLFdBQVc7UUFDdkMsSUFDRSxJQUFJLENBQUMsVUFBVTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN0QztZQUNBLE9BQU8sQ0FDTCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ25DLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FDckMsR0FBRyxDQUFDLENBQUMsQ0FDUCxDQUFDO1NBQ0g7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUM1QixJQUNFLElBQUksQ0FBQyxVQUFVO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLO1lBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2hDO1lBQ0EsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sbUJBQW1CLENBQUMsTUFBeUI7UUFDbEQsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsSUFDRSxJQUFJLENBQUMsVUFBVTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSztZQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNoQztZQUNBLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFVO1FBQzNCLElBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUM7WUFDOUYsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLHFCQUFxQixDQUFDLE1BQXlCO1FBQ3BELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLElBQ0UsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDaEM7WUFDQSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDaEU7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBVTtRQUM3QixJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFDO1lBQzdDLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBVTtRQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbkIsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZDtnQkFDRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNILENBQUM7O3VKQXBMVSxvQkFBb0I7MklBQXBCLG9CQUFvQix1UEM3QmpDLG0wRUEyREE7MkZEOUJhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxrQkFBa0IsaUJBR2IsaUJBQWlCLENBQUMsSUFBSTs0SkFHNUIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNhLFFBQVE7c0JBQTFCLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgVmlld0NoaWxkLFxuICBpc0Rldk1vZGUsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYkdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBNc2FsU2VydmljZSB9IGZyb20gJ0BhenVyZS9tc2FsLWFuZ3VsYXInO1xuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xuaW1wb3J0IHsgU21hcnROYXZiYXJTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC1uYXZiYXIuc2VydmljZSc7XG5pbXBvcnQgeyBYZG1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtc3RvcmFnZS94ZG0uc2VydmljZSc7XG5pbXBvcnQge1xuICBTZWxlY3RlZE9mZmVuZGVyLFxuICBMb2dpblN0YWZmLFxuICBSb2xlLFxufSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3NtYXJ0LXN0b3JhZ2UtbW9kZWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zbWFydC1uYXZiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5jc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU21hcnROYXZiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc2VydmljZUFwaVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBhcHBNb2R1bGVJZCA9ICdTTUFSVCc7XG4gIEBWaWV3Q2hpbGQoJ3RhYnMnKSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XG4gIHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXI7XG4gIGxvZ2luU3RhZmY6IExvZ2luU3RhZmY7XG4gIG9mZmVuZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHN0YWZmU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIC8vIGlzQXV0aGVudGljYXRlZCA9IGZhbHNlO1xuXG4gIG5hdmJhckNvbmZpZ3M6IFNtYXJ0TmF2YmFyQ29uZmlnW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuYXZiYXJDb25maWdTZXJ2aWNlOiBTbWFydE5hdmJhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxuICAgIC8vIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgYXV0aG5TZXJ2aWNlOiBNc2FsU2VydmljZSxcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIC8qXG4gICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RlZFRhYik7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiO1xuICAgIH0sIDEwMDApO1xuICAgICovXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnhkbVNlcnZpY2UuZ2V0U2VsZWN0ZWRPZmZlbmRlcigpLnRoZW4oKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9XG4gICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIgJiYgc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkXG4gICAgICAgICAgPyBzZWxlY3RlZE9mZmVuZGVyXG4gICAgICAgICAgOiBudWxsO1xuICAgIH0pO1xuXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldExvZ2luU3RhZmYoKS50aGVuKChsb2dpblN0YWZmKSA9PiB7XG4gICAgICAvLyB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMubG9naW5TdGFmZiA9IGxvZ2luU3RhZmYgPyBsb2dpblN0YWZmIDogbnVsbDtcbiAgICAgIC8vIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vZmZlbmRlclN1YnNjcmlwdGlvbiA9IHRoaXMueGRtU2VydmljZVxuICAgICAgLmdldE9mZmVuZGVyVXBkYXRlKClcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcbiAgICAgICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9IHNlbGVjdGVkT2ZmZW5kZXI7XG4gICAgICAgIC8vIH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXG4gICAgICAuZ2V0U3RhZmZVcGRhdGUoKVxuICAgICAgLnN1YnNjcmliZSgobG9naW5TdGFmZikgPT4ge1xuICAgICAgICAvLyB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmID0gbG9naW5TdGFmZjtcbiAgICAgICAgLy8gfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMubmF2YmFyQ29uZmlnU2VydmljZVxuICAgICAgLmdldE5hdmJhckNvbmZpZ3ModGhpcy5zZXJ2aWNlQXBpVXJsKVxuICAgICAgLnN1YnNjcmliZSgoY29uZmlncykgPT4ge1xuICAgICAgICB0aGlzLm5hdmJhckNvbmZpZ3MgPSBjb25maWdzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBpZiAoYS5kaXNwbGF5T3JkZXIgPCBiLmRpc3BsYXlPcmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYS5kaXNwbGF5T3JkZXIgPiBiLmRpc3BsYXlPcmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgLy8gdGhpcy5pc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhuU2VydmljZS5nZXRBY2NvdW50KCkgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdGFmZlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGxvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLnhkbVNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICB0aGlzLmF1dGhuU2VydmljZS5sb2dvdXQoKTtcbiAgfVxuXG4gIGdldCBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aG5TZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKCkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBcHBNb2R1bGVVcmwoY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykge1xuICAgIHJldHVybiBjb25maWcgJiYgdGhpcy5zZWxlY3RlZE9mZmVuZGVyICYmIGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gJ1BQTUFTJ1xuICAgIC8vICA/IGAke2NvbmZpZy51cmx9P3NraXBBcHBNZXRhZGF0YT10cnVlJk9mZmVuZGVySWQ9JHt0aGlzLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZH1gXG4gICAgICA/IGAke2NvbmZpZy51cmx9Jk9mZmVuZGVySWQ9JHt0aGlzLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZH1gXG4gICAgICA6IGNvbmZpZy51cmw7XG4gIH1cblxuICBwdWJsaWMgaGFzQXBwTW9kdWxlUGVybWlzc2lvbihhcHBNb2R1bGVJZCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxuICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zICYmXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zLmZpbmRJbmRleChcbiAgICAgICAgICAocCkgPT4gcC5hcHBNb2R1bGVJZCA9PT0gYXBwTW9kdWxlSWQsXG4gICAgICAgICkgPiAtMVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0V4dGVybmFsVXNlclJvbGUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRXh0ZXJuYWxSb2xlKSA+IC0xO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tEVklQUGVybWlzc2lvbihjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKSA6IGJvb2xlYW57XG4gICAgcmV0dXJuICgoY29uZmlnLmFwcE1vZHVsZUlkICE9PSAnRFZJUCcpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiRFZJUFwiICYmIHRoaXMuaGFzRFZJUFJvbGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzRFZJUFJvbGUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sb2dpblN0YWZmICYmXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRFZJUFJvbGUpID4gLTE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEVklQUm9sZShyb2xlOiBSb2xlKXtcbiAgICBpZihyb2xlLnJvbGVJZCA9PSAnVFNEJyB8fCByb2xlLnJvbGVJZCA9PSAnVEFEJyB8fCByb2xlLnJvbGVJZCA9PSAnU1RTRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ0JDJyl7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tWaWN0aW1QZXJtaXNzaW9uKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbntcbiAgICByZXR1cm4gKChjb25maWcuYXBwTW9kdWxlSWQgIT09ICdWSUNUSU0nKSB8fCAoY29uZmlnLmFwcE1vZHVsZUlkID09PSBcIlZJQ1RJTVwiICYmIHRoaXMuaGFzVmljdGltUm9sZSkpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNWaWN0aW1Sb2xlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzICYmXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMubG9naW5TdGFmZi5yb2xlcy5maW5kSW5kZXgodGhpcy5pc1ZpY3RpbVJvbGUpID4gLTE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWaWN0aW1Sb2xlKHJvbGU6IFJvbGUpe1xuICAgIGlmKHJvbGUucm9sZUlkID09ICdCQycgfHwgcm9sZS5yb2xlSWQgPT0gJ1ZTUCcpe1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V4dGVybmFsUm9sZShyb2xlOiBSb2xlKSB7XG4gICAgc3dpdGNoIChyb2xlLnJvbGVJZCkge1xuICAgICAgY2FzZSAnRVVEVEwnOlxuICAgICAgY2FzZSAnRVVEVVNNJzpcbiAgICAgIGNhc2UgJ0VVSkRHJzpcbiAgICAgIGNhc2UgJ0VVTVBEJzpcbiAgICAgIGNhc2UgJ0VVU09UVic6XG4gICAgICBjYXNlICdFVVVTQTInOlxuICAgICAgY2FzZSAnRVVVU0FPJzpcbiAgICAgIGNhc2UgJ0VVVVNQQyc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG4vLyBFVURUTFxuLy8gRVVEVVNNXG4vLyBFVUpER1xuXG4vLyBFVU1QRFxuLy8gRVVTT1RWXG4vLyBFVVVTQTJcblxuLy8gRVVVU0FPXG4vLyBFVVVTUENcbiIsIjwhLS1cbjxhIGNsYXNzPVwic21hcnQtbmF2YmFyLXRvZ2dsZSBvcGVuXCIgaHJlZj1cIiNuYXZcIj5cbiAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPm1lbnU8L2k+XG48L2E+XG5cbjxuYXYgaWQ9XCJuYXZcIiByb2xlPVwibmF2aWdhdGlvblwiIGNsYXNzPVwic21hcnQtbmF2YmFyLWNvbnRhaW5lclwiPlxuICA8YSBjbGFzcz1cInNtYXJ0LW5hdmJhci10b2dnbGUgY2xvc2VcIiBocmVmPVwiI1wiPlxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5jbG9zZTwvaT5cbiAgPC9hPlxuXG4gIDxzcGFuICpuZ0Zvcj1cImxldCBjb25maWcgb2YgbmF2YmFyQ29uZmlnc1wiPlxuICAgIDxhIG1hdC1idXR0b24gY2xhc3M9XCJzbWFydC1uYXZiYXItaXRlbVwiIFxuICAgICAgKm5nSWY9XCIoY29uZmlnLm9mZmVuZGVyU3BlY2lmaWNGbGFnID09PSBmYWxzZSB8fCBzZWxlY3RlZE9mZmVuZGVyKSAmJiBpc0F1dGhlbnRpY2F0ZWQgJiYgbG9naW5TdGFmZlwiIGhyZWY9XCJ7e2NvbmZpZy51cmx9fVwiPnt7Y29uZmlnLm5hbWV9fTwvYT5cbiAgPC9zcGFuPlxuXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInNtYXJ0LW5hdmJhci1pdGVtXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVUaGVtZVwiPlNldCBUaGVtZTwvYnV0dG9uPlxuICA8bWF0LW1lbnUgI21lbnVUaGVtZT1cIm1hdE1lbnVcIj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uU2V0VGhlbWUoJ2JsdWUtdGhlbWUnKVwiPkJsdWU8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uU2V0VGhlbWUoJ3JlZC10aGVtZScpXCI+UmVkPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvblNldFRoZW1lKCdncmVlbi10aGVtZScpXCI+R3JlZW48L2J1dHRvbj5cbiAgPC9tYXQtbWVudT5cbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic21hcnQtbmF2YmFyLWl0ZW0gc21hcnQtbmF2YmFyLWxhc3QtaXRlbVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAqbmdJZj1cImlzQXV0aGVudGljYXRlZCAmJiBsb2dpblN0YWZmXCI+e3tsb2dpblN0YWZmLmZpcnN0TmFtZSArICcgJyArIGxvZ2luU3RhZmYubGFzdE5hbWV9fTwvYnV0dG9uPlxuICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtPlByb2ZpbGU8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImxvZ291dCgpXCI+U2lnbiBPdXQ8L2J1dHRvbj5cbiAgPC9tYXQtbWVudT5cbjwvbmF2PlxuLS0+XG5cbjwhLS0gPG5hdiBtYXQtdGFiLW5hdi1iYXI+XG4gIDxhIG1hdC10YWItbGluayBtYXQtZmxhdC1idXR0b24gKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBuYXZiYXJDb25maWdzXCIgW2FjdGl2ZV09XCJhcHBNb2R1bGVJZCA9PSBjb25maWcuYXBwTW9kdWxlSWRcIiBocmVmPVwie3tjb25maWcudXJsfX1cIj57e2NvbmZpZy5uYW1lfX08L2E+XG48L25hdj4gLS0+XG5cbjxtYXQtdGFiLWdyb3VwIGNsYXNzPVwibmF2LXRhYi1ncm91cFwiIFtzZWxlY3RlZEluZGV4XT1cIm51bGxcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29uZmlnIG9mIG5hdmJhckNvbmZpZ3NcIj5cbiAgICA8bWF0LXRhYlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgKChoYXNFeHRlcm5hbFVzZXJSb2xlICYmIGhhc0FwcE1vZHVsZVBlcm1pc3Npb24oY29uZmlnLmFwcE1vZHVsZUlkKSkgfHxcbiAgICAgICAgKCFoYXNFeHRlcm5hbFVzZXJSb2xlICYmIFxuICAgICAgICAoY29uZmlnLm9mZmVuZGVyU3BlY2lmaWNGbGFnID09PSBmYWxzZSB8fCBzZWxlY3RlZE9mZmVuZGVyKSkpICYmXG4gICAgICAgIGNoZWNrVmljdGltUGVybWlzc2lvbihjb25maWcpICYmXG4gICAgICAgIGNoZWNrRFZJUFBlcm1pc3Npb24oY29uZmlnKSAmJlxuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQgJiZcbiAgICAgICAgbG9naW5TdGFmZiBcbiAgICAgIFwiXG4gICAgICBsYWJlbD1cImNvbmZpZy5uYW1lXCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgPGFcbiAgICAgICAgICBtYXQtZmxhdC1idXR0b25cbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdtYWluLW1lbnUtYWN0aXZlJzogYXBwTW9kdWxlSWQgPT0gY29uZmlnLmFwcE1vZHVsZUlkIH1cIlxuICAgICAgICAgIFtocmVmXT1cImdldEFwcE1vZHVsZVVybChjb25maWcpXCJcbiAgICAgICAgICA+e3sgY29uZmlnLm5hbWUgfX08L2FcbiAgICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L21hdC10YWI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9tYXQtdGFiLWdyb3VwPlxuIl19
|
|
@@ -1,63 +1,63 @@
|
|
|
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
|
-
const queryString = `
|
|
28
|
-
{
|
|
29
|
-
findAppModules {
|
|
30
|
-
data {
|
|
31
|
-
appModuleId
|
|
32
|
-
name
|
|
33
|
-
url
|
|
34
|
-
offenderSpecificFlag
|
|
35
|
-
displayOrder
|
|
36
|
-
}
|
|
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 */ /** @nocollapse */ SmartNavbarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SmartNavbarService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
59
|
-
/** @nocollapse */ /** @nocollapse */ SmartNavbarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SmartNavbarService });
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SmartNavbarService, decorators: [{
|
|
61
|
-
type: Injectable
|
|
62
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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
|
+
const queryString = `
|
|
28
|
+
{
|
|
29
|
+
findAppModules {
|
|
30
|
+
data {
|
|
31
|
+
appModuleId
|
|
32
|
+
name
|
|
33
|
+
url
|
|
34
|
+
offenderSpecificFlag
|
|
35
|
+
displayOrder
|
|
36
|
+
}
|
|
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 */ /** @nocollapse */ SmartNavbarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SmartNavbarService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
59
|
+
/** @nocollapse */ /** @nocollapse */ SmartNavbarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SmartNavbarService });
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: SmartNavbarService, decorators: [{
|
|
61
|
+
type: Injectable
|
|
62
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jc21hcnQvbmdjLXNtYXJ0LWNvcmUvc3JjL2xpYi9zbWFydC1uYXZiYXIvc21hcnQtbmF2YmFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBS3JDLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUFHLENBQUM7SUFFeEM7Ozs7Ozs7Ozs7TUFVRTtJQUNGOzs7O01BSUU7SUFFSyxnQkFBZ0IsQ0FDckIsYUFBcUI7UUFFckIsTUFBTSxXQUFXLEdBQUc7Ozs7Ozs7Ozs7O1VBV2QsQ0FBQztRQUVQOzs7Ozs7OztVQVFFO1FBRUYsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBTSxhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7YUFDaEQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNmLElBQUksU0FBUyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQjtZQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7O3FKQXpEVSxrQkFBa0I7eUpBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTbWFydE5hdmJhckNvbmZpZyB9IGZyb20gJy4vc21hcnQtbmF2YmFyLWNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTbWFydE5hdmJhclNlcnZpY2Uge1xuICBjb25maWdzOiBTbWFydE5hdmJhckNvbmZpZ1tdO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XG5cbiAgLypcbiAgcHVibGljIGdldE5hdmJhckNvbmZpZ3MoKTogU21hcnROYXZiYXJDb25maWdbXSB7XG4gICAgICB0aGlzLmNvbmZpZ3MgPSBbXG4gICAgICAgICAge2FwcE1vZHVsZUlkOiAnU01BUlQnLCBuYW1lOiAnU01BUlQnLCB1cmw6ICdodHRwOi8vbG9jYWxob3N0OjQyMDAnLCBvZmZlbmRlclNwZWNpZmljOiBmYWxzZSwgZGlzcGxheU9yZGVyOiAxIH0sXG4gICAgICAgICAge2FwcE1vZHVsZUlkOiAnT0ZGRU5ERVInLCBuYW1lOiAnT2ZmZW5kZXInLCB1cmw6ICdodHRwOi8vbG9jYWxob3N0OjQyMDAnLCBvZmZlbmRlclNwZWNpZmljOiB0cnVlLCBkaXNwbGF5T3JkZXI6IDIgfSxcbiAgICAgICAgICB7YXBwTW9kdWxlSWQ6ICdTUFJWU04nLCBuYW1lOiAnU3VwZXJ2aXNpb24nLCB1cmw6ICdodHRwOi8vbG9jYWxob3N0OjQyMDAnLCBvZmZlbmRlclNwZWNpZmljOiB0cnVlLCBkaXNwbGF5T3JkZXI6IDMgfSxcbiAgICAgIF07XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3M7XG4gIH1cbiAgKi9cbiAgLypcbiAgcHVibGljIGdldE5hdmJhckNvbmZpZ3Moc2VydmljZUFwaVVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTbWFydE5hdmJhckNvbmZpZ1tdPiB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTbWFydE5hdmJhckNvbmZpZ1tdPihzZXJ2aWNlQXBpVXJsICsgJy9BcHBNb2R1bGVzJyk7XG4gIH1cbiAgKi9cblxuICBwdWJsaWMgZ2V0TmF2YmFyQ29uZmlncyhcbiAgICBzZXJ2aWNlQXBpVXJsOiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8U21hcnROYXZiYXJDb25maWdbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gYFxuICAgICAgICB7XG4gICAgICAgICAgZmluZEFwcE1vZHVsZXMge1xuICAgICAgICAgICAgZGF0YSB7XG4gICAgICAgICAgICAgIGFwcE1vZHVsZUlkXG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgIG9mZmVuZGVyU3BlY2lmaWNGbGFnXG4gICAgICAgICAgICAgIGRpc3BsYXlPcmRlclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfWA7XG5cbiAgICAvKlxuICAgIGNvbnN0IGh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZSdcbiAgICB9KTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogaHR0cEhlYWRlcnNcbiAgICB9O1xuICAgICovXG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxhbnk+KHNlcnZpY2VBcGlVcmwsIHsgcXVlcnk6IHF1ZXJ5U3RyaW5nIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRhLmZpbmRBcHBNb2R1bGVzLmRhdGE7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxufVxuIl19
|