@csmart/ngc-smart-core 1.18.20 → 1.18.22

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.
@@ -7,7 +7,8 @@ import * as i0 from "@angular/core";
7
7
  import * as i1 from "./smart-navbar.service";
8
8
  import * as i2 from "../smart-storage/xdm.service";
9
9
  import * as i3 from "@azure/msal-angular";
10
- import * as i4 from "@angular/material/tabs";
10
+ import * as i4 from "@angular/material/menu";
11
+ import * as i5 from "@angular/material/tabs";
11
12
  export class SmartNavbarComponent {
12
13
  constructor(navbarConfigService, xdmService, authnService) {
13
14
  this.navbarConfigService = navbarConfigService;
@@ -15,6 +16,7 @@ export class SmartNavbarComponent {
15
16
  this.authnService = authnService;
16
17
  this.appModuleId = null;
17
18
  this.selectedNavbarConfig = {};
19
+ this.ASSESSMENT_MODULE_IDS = new Set(['STATIC99', 'TCU', 'TCUCH']);
18
20
  }
19
21
  ngOnInit() {
20
22
  this.xdmService.getSelectedOffender().then((selectedOffender) => {
@@ -57,6 +59,42 @@ export class SmartNavbarComponent {
57
59
  this.offenderSubscription.unsubscribe();
58
60
  this.staffSubscription.unsubscribe();
59
61
  }
62
+ get renderItems() {
63
+ if (!this.navbarConfigs)
64
+ return [];
65
+ const result = [];
66
+ let assessmentsInserted = false;
67
+ for (const config of this.navbarConfigs) {
68
+ if (this.ASSESSMENT_MODULE_IDS.has(config.appModuleId)) {
69
+ if (!assessmentsInserted) {
70
+ result.push('ASSESSMENTS');
71
+ assessmentsInserted = true;
72
+ }
73
+ }
74
+ else {
75
+ result.push(config);
76
+ }
77
+ }
78
+ return result;
79
+ }
80
+ get assessmentConfigs() {
81
+ if (!this.navbarConfigs)
82
+ return [];
83
+ return this.navbarConfigs.filter(c => this.ASSESSMENT_MODULE_IDS.has(c.appModuleId));
84
+ }
85
+ get showAssessmentsMenu() {
86
+ return this.assessmentConfigs.some(c => this.showTab(c));
87
+ }
88
+ get isAssessmentActive() {
89
+ return this.selectedNavbarConfig != null
90
+ && this.ASSESSMENT_MODULE_IDS.has(this.selectedNavbarConfig?.appModuleId);
91
+ }
92
+ onAssessmentItemClick(config) {
93
+ this.selectedNavbarConfig = config;
94
+ }
95
+ asConfig(item) {
96
+ return item;
97
+ }
60
98
  logout() {
61
99
  this.xdmService.clearAll();
62
100
  this.authnService.logout();
@@ -66,7 +104,7 @@ export class SmartNavbarComponent {
66
104
  }
67
105
  getAppModuleUrl(config) {
68
106
  return (config.appModuleId === 'PPMASRVW') ? config.url
69
- : config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99')
107
+ : config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99' || config.appModuleId === 'TCU' || config.appModuleId === 'TCUCH')
70
108
  ? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`
71
109
  : this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`
72
110
  : config.url;
@@ -141,11 +179,11 @@ export class SmartNavbarComponent {
141
179
  }
142
180
  }
143
181
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: SmartNavbarComponent, deps: [{ token: i1.SmartNavbarService }, { token: i2.XdmService }, { token: i3.MsalService }], target: i0.ɵɵFactoryTarget.Component }); }
144
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], ngImport: i0, template: "\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (config of navbarConfigs; track config; let index = $index){\r\n @if (showTab(config)) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = config\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === config?.appModuleId\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\r\n\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-link{min-width:16px!important}.mat-mdc-tab .mdc-tab__content{pointer-events:none!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: "component", type: i4.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i4.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i4.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }], encapsulation: i0.ViewEncapsulation.None }); }
182
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], ngImport: i0, template: "\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (item of renderItems; track $index) {\r\n @if (item === 'ASSESSMENTS') {\r\n @if (showAssessmentsMenu) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item assessments-menu-trigger\"\r\n [matMenuTriggerFor]=\"assessmentsMenu\"\r\n [active]=\"isAssessmentActive\">\r\n Assessments &#9662;\r\n </a>\r\n <mat-menu #assessmentsMenu=\"matMenu\">\r\n @for (config of assessmentConfigs; track config.appModuleId) {\r\n @if (showTab(config)) {\r\n <a\r\n mat-menu-item\r\n (click)=\"onAssessmentItemClick(config)\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n </mat-menu>\r\n }\r\n } @else {\r\n @if (showTab(asConfig(item))) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = asConfig(item)\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === asConfig(item)?.appModuleId\"\r\n [href]=\"getAppModuleUrl(asConfig(item))\">{{ asConfig(item).name }}</a>\r\n }\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\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-link{min-width:16px!important}.mat-mdc-tab .mdc-tab__content{pointer-events:none!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}.assessments-menu-trigger{cursor:pointer}a.mat-mdc-menu-item{text-decoration:none;color:inherit}\n"], dependencies: [{ kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i5.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i5.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }], encapsulation: i0.ViewEncapsulation.None }); }
145
183
  }
146
184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: SmartNavbarComponent, decorators: [{
147
185
  type: Component,
148
- args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (config of navbarConfigs; track config; let index = $index){\r\n @if (showTab(config)) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = config\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === config?.appModuleId\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\r\n\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-link{min-width:16px!important}.mat-mdc-tab .mdc-tab__content{pointer-events:none!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"] }]
186
+ args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (item of renderItems; track $index) {\r\n @if (item === 'ASSESSMENTS') {\r\n @if (showAssessmentsMenu) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item assessments-menu-trigger\"\r\n [matMenuTriggerFor]=\"assessmentsMenu\"\r\n [active]=\"isAssessmentActive\">\r\n Assessments &#9662;\r\n </a>\r\n <mat-menu #assessmentsMenu=\"matMenu\">\r\n @for (config of assessmentConfigs; track config.appModuleId) {\r\n @if (showTab(config)) {\r\n <a\r\n mat-menu-item\r\n (click)=\"onAssessmentItemClick(config)\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n </mat-menu>\r\n }\r\n } @else {\r\n @if (showTab(asConfig(item))) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = asConfig(item)\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === asConfig(item)?.appModuleId\"\r\n [href]=\"getAppModuleUrl(asConfig(item))\">{{ asConfig(item).name }}</a>\r\n }\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\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-link{min-width:16px!important}.mat-mdc-tab .mdc-tab__content{pointer-events:none!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}.assessments-menu-trigger{cursor:pointer}a.mat-mdc-menu-item{text-decoration:none;color:inherit}\n"] }]
149
187
  }], ctorParameters: () => [{ type: i1.SmartNavbarService }, { type: i2.XdmService }, { type: i3.MsalService }], propDecorators: { serviceApiUrl: [{
150
188
  type: Input
151
189
  }], appModuleId: [{
@@ -154,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
154
192
  type: ViewChild,
155
193
  args: ['tabs']
156
194
  }] } });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEdBRWxCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7O0FBZ0IxRCxNQUFNLE9BQU8sb0JBQW9CO0lBVy9CLFlBQ1UsbUJBQXVDLEVBQ3ZDLFVBQXNCLEVBQ3RCLFlBQXlCO1FBRnpCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQVoxQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQU81Qix5QkFBb0IsR0FBeUMsRUFBRSxDQUFDO0lBTTdELENBQUM7SUFHSixRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkIsZ0JBQWdCLElBQUksZ0JBQWdC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QUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgSW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcclxuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuaW1wb3J0IHsgU21hcnROYXZiYXJDb25maWcgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci1jb25maWcnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmJhclNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LW5hdmJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWGRtU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2UveGRtLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNlbGVjdGVkT2ZmZW5kZXIsXHJcbiAgTG9naW5TdGFmZixcclxuICBSb2xlLFxyXG59IGZyb20gJy4uL3NtYXJ0LXN0b3JhZ2Uvc21hcnQtc3RvcmFnZS1tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc21hcnQtbmF2YmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1uYXZiYXIuY29tcG9uZW50LmNzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydE5hdmJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzZXJ2aWNlQXBpVXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBwTW9kdWxlSWQgPSBudWxsO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYnMnKSB0YWJHcm91cDogTWF0VGFiR3JvdXA7XHJcbiAgc2VsZWN0ZWRPZmZlbmRlcjogU2VsZWN0ZWRPZmZlbmRlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIG9mZmVuZGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgc3RhZmZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBuYXZiYXJDb25maWdzOiBTbWFydE5hdmJhckNvbmZpZ1tdO1xyXG4gIHNlbGVjdGVkTmF2YmFyQ29uZmlnOiBTbWFydE5hdmJhckNvbmZpZyA9IDxTbWFydE5hdmJhckNvbmZpZz57fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5hdmJhckNvbmZpZ1NlcnZpY2U6IFNtYXJ0TmF2YmFyU2VydmljZSxcclxuICAgIHByaXZhdGUgeGRtU2VydmljZTogWGRtU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aG5TZXJ2aWNlOiBNc2FsU2VydmljZSxcclxuICApIHt9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRTZWxlY3RlZE9mZmVuZGVyKCkudGhlbigoc2VsZWN0ZWRPZmZlbmRlcikgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPVxyXG4gICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIgJiYgc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkXHJcbiAgICAgICAgICA/IHNlbGVjdGVkT2ZmZW5kZXJcclxuICAgICAgICAgIDogbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRMb2dpblN0YWZmKCkudGhlbigobG9naW5TdGFmZikgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmID8gbG9naW5TdGFmZiA6IG51bGw7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRPZmZlbmRlclVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPSBzZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRTdGFmZlVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxvZ2luU3RhZmYpID0+IHtcclxuICAgICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMubmF2YmFyQ29uZmlnU2VydmljZVxyXG4gICAgICAuZ2V0TmF2YmFyQ29uZmlncyh0aGlzLnNlcnZpY2VBcGlVcmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNvbmZpZ3MpID0+IHtcclxuICAgICAgICB0aGlzLm5hdmJhckNvbmZpZ3MgPSBjb25maWdzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGlmIChhLmRpc3BsYXlPcmRlciA8IGIuZGlzcGxheU9yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoYS5kaXNwbGF5T3JkZXIgPiBiLmRpc3BsYXlPcmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5hdmJhckNvbmZpZyA9IHRoaXMubmF2YmFyQ29uZmlncy5maW5kKFxyXG4gICAgICAgICAgICAoY29uZmlnKSA9PiBjb25maWcuYXBwTW9kdWxlSWQgPT09IHRoaXMuYXBwTW9kdWxlSWQsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLm9mZmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnN0YWZmU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGxvZ291dCgpOiB2b2lkIHtcclxuICAgIHRoaXMueGRtU2VydmljZS5jbGVhckFsbCgpO1xyXG4gICAgdGhpcy5hdXRoblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0aG5TZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKCkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBcHBNb2R1bGVVcmwoY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykge1xyXG4gICAgcmV0dXJuIChjb25maWcuYXBwTW9kdWxlSWQgPT09ICdQUE1BU1JWVycpID8gY29uZmlnLnVybCBcclxuICAgICAgOiBjb25maWcgJiYgdGhpcy5zZWxlY3RlZE9mZmVuZGVyICYmIChjb25maWcuYXBwTW9kdWxlSWQgPT09ICdQUE1BUycgfHwgY29uZmlnLmFwcE1vZHVsZUlkID09PSAnU1RBVElDOTknKVxyXG4gICAgICA/IGAke2NvbmZpZy51cmx9Jk9mZmVuZGVySWQ9JHt0aGlzLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZH1gXHJcbiAgICAgIDogdGhpcy5zZWxlY3RlZE9mZmVuZGVyID8gYCR7Y29uZmlnLnVybH0vP29mZmVuZGVySWQ9JHt0aGlzLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZH1gXHJcbiAgICAgIDogY29uZmlnLnVybDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNBcHBNb2R1bGVQZXJtaXNzaW9uKGFwcE1vZHVsZUlkKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAocCkgPT4gcC5hcHBNb2R1bGVJZCA9PT0gYXBwTW9kdWxlSWQsXHJcbiAgICAgICAgKSA+IC0xXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzaG93VGFiKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAodGhpcy5oYXNFeHRlcm5hbFVzZXJSb2xlICYmIHRoaXMuaGFzQXBwTW9kdWxlUGVybWlzc2lvbihjb25maWcuYXBwTW9kdWxlSWQpKSB8fFxyXG4gICAgICAoIXRoaXMuaGFzRXh0ZXJuYWxVc2VyUm9sZSAmJiAoY29uZmlnLm9mZmVuZGVyU3BlY2lmaWNGbGFnID09PSBmYWxzZSB8fCB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIpKVxyXG4gICAgKSAmJiB0aGlzLmNoZWNrVmljdGltUGVybWlzc2lvbihjb25maWcpICYmIHRoaXMuaXNBdXRoZW50aWNhdGVkICYmICEhdGhpcy5sb2dpblN0YWZmXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0V4dGVybmFsVXNlclJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRXh0ZXJuYWxSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrRFZJUFBlcm1pc3Npb24oY29uZmlnOiBTbWFydE5hdmJhckNvbmZpZykgOiBib29sZWFue1xyXG4gICAgcmV0dXJuICgoY29uZmlnLmFwcE1vZHVsZUlkICE9PSAnRFZJUCcpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiRFZJUFwiICYmIHRoaXMuaGFzRFZJUFJvbGUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzRFZJUFJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzRFZJUFJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRFZJUFJvbGUocm9sZTogUm9sZSl7XHJcbiAgICBpZihyb2xlLnJvbGVJZCA9PSAnVFNEJyB8fCByb2xlLnJvbGVJZCA9PSAnVEFEJyB8fCByb2xlLnJvbGVJZCA9PSAnU1RTRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ0JDJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tWaWN0aW1QZXJtaXNzaW9uKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbntcclxuICAgIHJldHVybiAoKGNvbmZpZy5hcHBNb2R1bGVJZCAhPT0gJ1ZJQ1RJTScpIHx8IChjb25maWcuYXBwTW9kdWxlSWQgPT09IFwiVklDVElNXCIgJiYgdGhpcy5oYXNWaWN0aW1Sb2xlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc1ZpY3RpbVJvbGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiAmJlxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYucm9sZXMgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2dpblN0YWZmLnJvbGVzLmZpbmRJbmRleCh0aGlzLmlzVmljdGltUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNWaWN0aW1Sb2xlKHJvbGU6IFJvbGUpe1xyXG4gICAgaWYocm9sZS5yb2xlSWQgPT0gJ0JDJyB8fCByb2xlLnJvbGVJZCA9PSAnVlNQJyl7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRXh0ZXJuYWxSb2xlKHJvbGU6IFJvbGUpIHtcclxuICAgIHN3aXRjaCAocm9sZS5yb2xlSWQpIHtcclxuICAgICAgY2FzZSAnRVVEVEwnOlxyXG4gICAgICBjYXNlICdFVURVU00nOlxyXG4gICAgICBjYXNlICdFVUpERyc6XHJcbiAgICAgIGNhc2UgJ0VVTVBEJzpcclxuICAgICAgY2FzZSAnRVVTT1RWJzpcclxuICAgICAgY2FzZSAnRVVVU0EyJzpcclxuICAgICAgY2FzZSAnRVVVU0FPJzpcclxuICAgICAgY2FzZSAnRVVVU1BDJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuIiwiXHJcbjxuYXYgbWF0LXRhYi1uYXYtYmFyIFt0YWJQYW5lbF09XCJ0YWJQYW5lbFwiPlxyXG4gIEBmb3IgKGNvbmZpZyBvZiBuYXZiYXJDb25maWdzOyB0cmFjayBjb25maWc7IGxldCBpbmRleCA9ICRpbmRleCl7XHJcbiAgICBAaWYgKHNob3dUYWIoY29uZmlnKSkge1xyXG4gICAgICA8YVxyXG4gICAgICAgIG1hdC10YWItbGlua1xyXG4gICAgICAgIGNsYXNzPVwic21hcnQtbmF2YmFyLWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RlZE5hdmJhckNvbmZpZyA9IGNvbmZpZ1wiXHJcbiAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZE5hdmJhckNvbmZpZyAhPT0gbnVsbCAmJiBzZWxlY3RlZE5hdmJhckNvbmZpZz8uYXBwTW9kdWxlSWQgPT09IGNvbmZpZz8uYXBwTW9kdWxlSWRcIlxyXG4gICAgICAgIFtocmVmXT1cImdldEFwcE1vZHVsZVVybChjb25maWcpXCI+e3sgY29uZmlnLm5hbWUgfX08L2E+XHJcbiAgICB9XHJcbiAgfVxyXG48L25hdj5cclxuPG1hdC10YWItbmF2LXBhbmVsICN0YWJQYW5lbD48L21hdC10YWItbmF2LXBhbmVsPlxyXG5cclxuIl19
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtbmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NzbWFydC9uZ2Mtc21hcnQtY29yZS9zcmMvbGliL3NtYXJ0LW5hdmJhci9zbWFydC1uYXZiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3NtYXJ0L25nYy1zbWFydC1jb3JlL3NyYy9saWIvc21hcnQtbmF2YmFyL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEdBRWxCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUIsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7OztBQWdCMUQsTUFBTSxPQUFPLG9CQUFvQjtJQVkvQixZQUNVLG1CQUF1QyxFQUN2QyxVQUFzQixFQUN0QixZQUF5QjtRQUZ6Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBQ3ZDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFiMUIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFPNUIseUJBQW9CLEdBQXlDLEVBQUUsQ0FBQztRQUMvQywwQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQU01RSxDQUFDO0lBR0osUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJ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QUNiLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO2lJQXJOVSxvQkFBb0I7cUhBQXBCLG9CQUFvQixrT0M3QmpDLDYwQ0FvQ0E7OzJGRFBhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxrQkFBa0IsaUJBR2IsaUJBQWlCLENBQUMsSUFBSTswSUFHNUIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNhLFFBQVE7c0JBQTFCLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIEluamVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFiQ2hhbmdlRXZlbnQsIE1hdFRhYkdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XHJcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XHJcbmltcG9ydCB7IFNtYXJ0TmF2YmFyQ29uZmlnIH0gZnJvbSAnLi9zbWFydC1uYXZiYXItY29uZmlnJztcclxuaW1wb3J0IHsgU21hcnROYXZiYXJTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC1uYXZiYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFhkbVNlcnZpY2UgfSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3hkbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTZWxlY3RlZE9mZmVuZGVyLFxyXG4gIExvZ2luU3RhZmYsXHJcbiAgUm9sZSxcclxufSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3NtYXJ0LXN0b3JhZ2UtbW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNtYXJ0LW5hdmJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LW5hdmJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtbmF2YmFyLmNvbXBvbmVudC5jc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnROYXZiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgc2VydmljZUFwaVVybDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwcE1vZHVsZUlkID0gbnVsbDtcclxuICBAVmlld0NoaWxkKCd0YWJzJykgdGFiR3JvdXA6IE1hdFRhYkdyb3VwO1xyXG4gIHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXI7XHJcbiAgbG9naW5TdGFmZjogTG9naW5TdGFmZjtcclxuICBvZmZlbmRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHN0YWZmU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgbmF2YmFyQ29uZmlnczogU21hcnROYXZiYXJDb25maWdbXTtcclxuICBzZWxlY3RlZE5hdmJhckNvbmZpZzogU21hcnROYXZiYXJDb25maWcgPSA8U21hcnROYXZiYXJDb25maWc+e307XHJcbiAgcHJpdmF0ZSByZWFkb25seSBBU1NFU1NNRU5UX01PRFVMRV9JRFMgPSBuZXcgU2V0KFsnU1RBVElDOTknLCAnVENVJywgJ1RDVUNIJ10pO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbmF2YmFyQ29uZmlnU2VydmljZTogU21hcnROYXZiYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoblNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldFNlbGVjdGVkT2ZmZW5kZXIoKS50aGVuKChzZWxlY3RlZE9mZmVuZGVyKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9XHJcbiAgICAgICAgc2VsZWN0ZWRPZmZlbmRlciAmJiBzZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWRcclxuICAgICAgICAgID8gc2VsZWN0ZWRPZmZlbmRlclxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldExvZ2luU3RhZmYoKS50aGVuKChsb2dpblN0YWZmKSA9PiB7XHJcbiAgICAgIHRoaXMubG9naW5TdGFmZiA9IGxvZ2luU3RhZmYgPyBsb2dpblN0YWZmIDogbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub2ZmZW5kZXJTdWJzY3JpcHRpb24gPSB0aGlzLnhkbVNlcnZpY2VcclxuICAgICAgLmdldE9mZmVuZGVyVXBkYXRlKClcclxuICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWRPZmZlbmRlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9IHNlbGVjdGVkT2ZmZW5kZXI7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RhZmZTdWJzY3JpcHRpb24gPSB0aGlzLnhkbVNlcnZpY2VcclxuICAgICAgLmdldFN0YWZmVXBkYXRlKClcclxuICAgICAgLnN1YnNjcmliZSgobG9naW5TdGFmZikgPT4ge1xyXG4gICAgICAgIHRoaXMubG9naW5TdGFmZiA9IGxvZ2luU3RhZmY7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5uYXZiYXJDb25maWdTZXJ2aWNlXHJcbiAgICAgIC5nZXROYXZiYXJDb25maWdzKHRoaXMuc2VydmljZUFwaVVybClcclxuICAgICAgLnN1YnNjcmliZSgoY29uZmlncykgPT4ge1xyXG4gICAgICAgIHRoaXMubmF2YmFyQ29uZmlncyA9IGNvbmZpZ3Muc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKGEuZGlzcGxheU9yZGVyIDwgYi5kaXNwbGF5T3JkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChhLmRpc3BsYXlPcmRlciA+IGIuZGlzcGxheU9yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTmF2YmFyQ29uZmlnID0gdGhpcy5uYXZiYXJDb25maWdzLmZpbmQoXHJcbiAgICAgICAgICAgIChjb25maWcpID0+IGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gdGhpcy5hcHBNb2R1bGVJZCxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMub2ZmZW5kZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc3RhZmZTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldCByZW5kZXJJdGVtcygpOiBBcnJheTxTbWFydE5hdmJhckNvbmZpZyB8IHN0cmluZz4ge1xyXG4gICAgaWYgKCF0aGlzLm5hdmJhckNvbmZpZ3MpIHJldHVybiBbXTtcclxuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8U21hcnROYXZiYXJDb25maWcgfCBzdHJpbmc+ID0gW107XHJcbiAgICBsZXQgYXNzZXNzbWVudHNJbnNlcnRlZCA9IGZhbHNlO1xyXG4gICAgZm9yIChjb25zdCBjb25maWcgb2YgdGhpcy5uYXZiYXJDb25maWdzKSB7XHJcbiAgICAgIGlmICh0aGlzLkFTU0VTU01FTlRfTU9EVUxFX0lEUy5oYXMoY29uZmlnLmFwcE1vZHVsZUlkKSkge1xyXG4gICAgICAgIGlmICghYXNzZXNzbWVudHNJbnNlcnRlZCkge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0FTU0VTU01FTlRTJyk7XHJcbiAgICAgICAgICBhc3Nlc3NtZW50c0luc2VydGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGdldCBhc3Nlc3NtZW50Q29uZmlncygpOiBTbWFydE5hdmJhckNvbmZpZ1tdIHtcclxuICAgIGlmICghdGhpcy5uYXZiYXJDb25maWdzKSByZXR1cm4gW107XHJcbiAgICByZXR1cm4gdGhpcy5uYXZiYXJDb25maWdzLmZpbHRlcihjID0+IHRoaXMuQVNTRVNTTUVOVF9NT0RVTEVfSURTLmhhcyhjLmFwcE1vZHVsZUlkKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvd0Fzc2Vzc21lbnRzTWVudSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFzc2Vzc21lbnRDb25maWdzLnNvbWUoYyA9PiB0aGlzLnNob3dUYWIoYykpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQXNzZXNzbWVudEFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTmF2YmFyQ29uZmlnICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5BU1NFU1NNRU5UX01PRFVMRV9JRFMuaGFzKHRoaXMuc2VsZWN0ZWROYXZiYXJDb25maWc/LmFwcE1vZHVsZUlkKTtcclxuICB9XHJcblxyXG4gIG9uQXNzZXNzbWVudEl0ZW1DbGljayhjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkTmF2YmFyQ29uZmlnID0gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgYXNDb25maWcoaXRlbTogU21hcnROYXZiYXJDb25maWcgfCBzdHJpbmcpOiBTbWFydE5hdmJhckNvbmZpZyB7XHJcbiAgICByZXR1cm4gaXRlbSBhcyBTbWFydE5hdmJhckNvbmZpZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnhkbVNlcnZpY2UuY2xlYXJBbGwoKTtcclxuICAgIHRoaXMuYXV0aG5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmF1dGhuU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QXBwTW9kdWxlVXJsKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIHtcclxuICAgIHJldHVybiAoY29uZmlnLmFwcE1vZHVsZUlkID09PSAnUFBNQVNSVlcnKSA/IGNvbmZpZy51cmwgXHJcbiAgICAgIDogY29uZmlnICYmIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciAmJiAoY29uZmlnLmFwcE1vZHVsZUlkID09PSAnUFBNQVMnIHx8IGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gJ1NUQVRJQzk5JyB8fCBjb25maWcuYXBwTW9kdWxlSWQgPT09ICdUQ1UnIHx8IGNvbmZpZy5hcHBNb2R1bGVJZCA9PT0gJ1RDVUNIJylcclxuICAgICAgPyBgJHtjb25maWcudXJsfSZPZmZlbmRlcklkPSR7dGhpcy5zZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWR9YFxyXG4gICAgICA6IHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA/IGAke2NvbmZpZy51cmx9Lz9vZmZlbmRlcklkPSR7dGhpcy5zZWxlY3RlZE9mZmVuZGVyLm9mZmVuZGVySWR9YFxyXG4gICAgICA6IGNvbmZpZy51cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzQXBwTW9kdWxlUGVybWlzc2lvbihhcHBNb2R1bGVJZCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnBlcm1pc3Npb25zICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0aGlzLmxvZ2luU3RhZmYucGVybWlzc2lvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgKHApID0+IHAuYXBwTW9kdWxlSWQgPT09IGFwcE1vZHVsZUlkLFxyXG4gICAgICAgICkgPiAtMVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2hvd1RhYihjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKSA6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMuaGFzRXh0ZXJuYWxVc2VyUm9sZSAmJiB0aGlzLmhhc0FwcE1vZHVsZVBlcm1pc3Npb24oY29uZmlnLmFwcE1vZHVsZUlkKSkgfHxcclxuICAgICAgKCF0aGlzLmhhc0V4dGVybmFsVXNlclJvbGUgJiYgKGNvbmZpZy5vZmZlbmRlclNwZWNpZmljRmxhZyA9PT0gZmFsc2UgfHwgdGhpcy5zZWxlY3RlZE9mZmVuZGVyKSlcclxuICAgICkgJiYgdGhpcy5jaGVja1ZpY3RpbVBlcm1pc3Npb24oY29uZmlnKSAmJiB0aGlzLmlzQXV0aGVudGljYXRlZCAmJiAhIXRoaXMubG9naW5TdGFmZlxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNFeHRlcm5hbFVzZXJSb2xlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9naW5TdGFmZi5yb2xlcy5maW5kSW5kZXgodGhpcy5pc0V4dGVybmFsUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja0RWSVBQZXJtaXNzaW9uKGNvbmZpZzogU21hcnROYXZiYXJDb25maWcpIDogYm9vbGVhbntcclxuICAgIHJldHVybiAoKGNvbmZpZy5hcHBNb2R1bGVJZCAhPT0gJ0RWSVAnKSB8fCAoY29uZmlnLmFwcE1vZHVsZUlkID09PSBcIkRWSVBcIiAmJiB0aGlzLmhhc0RWSVBSb2xlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0RWSVBSb2xlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9naW5TdGFmZi5yb2xlcy5maW5kSW5kZXgodGhpcy5pc0RWSVBSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0RWSVBSb2xlKHJvbGU6IFJvbGUpe1xyXG4gICAgaWYocm9sZS5yb2xlSWQgPT0gJ1RTRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ1RBRCcgfHwgcm9sZS5yb2xlSWQgPT0gJ1NUU0QnIHx8IHJvbGUucm9sZUlkID09ICdCQycpe1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrVmljdGltUGVybWlzc2lvbihjb25maWc6IFNtYXJ0TmF2YmFyQ29uZmlnKSA6IGJvb2xlYW57XHJcbiAgICByZXR1cm4gKChjb25maWcuYXBwTW9kdWxlSWQgIT09ICdWSUNUSU0nKSB8fCAoY29uZmlnLmFwcE1vZHVsZUlkID09PSBcIlZJQ1RJTVwiICYmIHRoaXMuaGFzVmljdGltUm9sZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNWaWN0aW1Sb2xlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgJiZcclxuICAgICAgdGhpcy5sb2dpblN0YWZmLnJvbGVzICYmXHJcbiAgICAgIHRoaXMubG9naW5TdGFmZi5yb2xlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9naW5TdGFmZi5yb2xlcy5maW5kSW5kZXgodGhpcy5pc1ZpY3RpbVJvbGUpID4gLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVmljdGltUm9sZShyb2xlOiBSb2xlKXtcclxuICAgIGlmKHJvbGUucm9sZUlkID09ICdCQycgfHwgcm9sZS5yb2xlSWQgPT0gJ1ZTUCcpe1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0V4dGVybmFsUm9sZShyb2xlOiBSb2xlKSB7XHJcbiAgICBzd2l0Y2ggKHJvbGUucm9sZUlkKSB7XHJcbiAgICAgIGNhc2UgJ0VVRFRMJzpcclxuICAgICAgY2FzZSAnRVVEVVNNJzpcclxuICAgICAgY2FzZSAnRVVKREcnOlxyXG4gICAgICBjYXNlICdFVU1QRCc6XHJcbiAgICAgIGNhc2UgJ0VVU09UVic6XHJcbiAgICAgIGNhc2UgJ0VVVVNBMic6XHJcbiAgICAgIGNhc2UgJ0VVVVNBTyc6XHJcbiAgICAgIGNhc2UgJ0VVVVNQQyc6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbiIsIlxyXG48bmF2IG1hdC10YWItbmF2LWJhciBbdGFiUGFuZWxdPVwidGFiUGFuZWxcIj5cclxuICBAZm9yIChpdGVtIG9mIHJlbmRlckl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgIEBpZiAoaXRlbSA9PT0gJ0FTU0VTU01FTlRTJykge1xyXG4gICAgICBAaWYgKHNob3dBc3Nlc3NtZW50c01lbnUpIHtcclxuICAgICAgICA8YVxyXG4gICAgICAgICAgbWF0LXRhYi1saW5rXHJcbiAgICAgICAgICBjbGFzcz1cInNtYXJ0LW5hdmJhci1pdGVtIGFzc2Vzc21lbnRzLW1lbnUtdHJpZ2dlclwiXHJcbiAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYXNzZXNzbWVudHNNZW51XCJcclxuICAgICAgICAgIFthY3RpdmVdPVwiaXNBc3Nlc3NtZW50QWN0aXZlXCI+XHJcbiAgICAgICAgICBBc3Nlc3NtZW50cyAmIzk2NjI7XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICAgIDxtYXQtbWVudSAjYXNzZXNzbWVudHNNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgQGZvciAoY29uZmlnIG9mIGFzc2Vzc21lbnRDb25maWdzOyB0cmFjayBjb25maWcuYXBwTW9kdWxlSWQpIHtcclxuICAgICAgICAgICAgQGlmIChzaG93VGFiKGNvbmZpZykpIHtcclxuICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXNzZXNzbWVudEl0ZW1DbGljayhjb25maWcpXCJcclxuICAgICAgICAgICAgICAgIFtocmVmXT1cImdldEFwcE1vZHVsZVVybChjb25maWcpXCI+e3sgY29uZmlnLm5hbWUgfX08L2E+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICB9XHJcbiAgICB9IEBlbHNlIHtcclxuICAgICAgQGlmIChzaG93VGFiKGFzQ29uZmlnKGl0ZW0pKSkge1xyXG4gICAgICAgIDxhXHJcbiAgICAgICAgICBtYXQtdGFiLWxpbmtcclxuICAgICAgICAgIGNsYXNzPVwic21hcnQtbmF2YmFyLWl0ZW1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkTmF2YmFyQ29uZmlnID0gYXNDb25maWcoaXRlbSlcIlxyXG4gICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZE5hdmJhckNvbmZpZyAhPT0gbnVsbCAmJiBzZWxlY3RlZE5hdmJhckNvbmZpZz8uYXBwTW9kdWxlSWQgPT09IGFzQ29uZmlnKGl0ZW0pPy5hcHBNb2R1bGVJZFwiXHJcbiAgICAgICAgICBbaHJlZl09XCJnZXRBcHBNb2R1bGVVcmwoYXNDb25maWcoaXRlbSkpXCI+e3sgYXNDb25maWcoaXRlbSkubmFtZSB9fTwvYT5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuPC9uYXY+XHJcbjxtYXQtdGFiLW5hdi1wYW5lbCAjdGFiUGFuZWw+PC9tYXQtdGFiLW5hdi1wYW5lbD5cclxuIl19
@@ -2,9 +2,9 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, isDevMode, Injectable, Inject, Component, ViewEncapsulation, Input, ViewChild, Directive, NgModule } from '@angular/core';
3
3
  import * as i5 from '@angular/common';
4
4
  import { DOCUMENT, CommonModule } from '@angular/common';
5
- import * as i5$1 from '@angular/material/button';
5
+ import * as i5$2 from '@angular/material/button';
6
6
  import { MatButtonModule } from '@angular/material/button';
7
- import * as i4 from '@angular/material/tabs';
7
+ import * as i5$1 from '@angular/material/tabs';
8
8
  import { MatTabsModule } from '@angular/material/tabs';
9
9
  import * as i7 from '@angular/material/select';
10
10
  import { MatSelectModule } from '@angular/material/select';
@@ -14,6 +14,7 @@ import * as i6$1 from '@angular/material/card';
14
14
  import { MatCardModule } from '@angular/material/card';
15
15
  import * as i2$2 from '@angular/material/snack-bar';
16
16
  import { MatSnackBar } from '@angular/material/snack-bar';
17
+ import * as i4 from '@angular/material/menu';
17
18
  import { MatMenuModule } from '@angular/material/menu';
18
19
  import * as i1 from '@angular/common/http';
19
20
  import { HttpHeaders, HttpClientModule } from '@angular/common/http';
@@ -483,6 +484,7 @@ class SmartNavbarComponent {
483
484
  this.authnService = authnService;
484
485
  this.appModuleId = null;
485
486
  this.selectedNavbarConfig = {};
487
+ this.ASSESSMENT_MODULE_IDS = new Set(['STATIC99', 'TCU', 'TCUCH']);
486
488
  }
487
489
  ngOnInit() {
488
490
  this.xdmService.getSelectedOffender().then((selectedOffender) => {
@@ -525,6 +527,42 @@ class SmartNavbarComponent {
525
527
  this.offenderSubscription.unsubscribe();
526
528
  this.staffSubscription.unsubscribe();
527
529
  }
530
+ get renderItems() {
531
+ if (!this.navbarConfigs)
532
+ return [];
533
+ const result = [];
534
+ let assessmentsInserted = false;
535
+ for (const config of this.navbarConfigs) {
536
+ if (this.ASSESSMENT_MODULE_IDS.has(config.appModuleId)) {
537
+ if (!assessmentsInserted) {
538
+ result.push('ASSESSMENTS');
539
+ assessmentsInserted = true;
540
+ }
541
+ }
542
+ else {
543
+ result.push(config);
544
+ }
545
+ }
546
+ return result;
547
+ }
548
+ get assessmentConfigs() {
549
+ if (!this.navbarConfigs)
550
+ return [];
551
+ return this.navbarConfigs.filter(c => this.ASSESSMENT_MODULE_IDS.has(c.appModuleId));
552
+ }
553
+ get showAssessmentsMenu() {
554
+ return this.assessmentConfigs.some(c => this.showTab(c));
555
+ }
556
+ get isAssessmentActive() {
557
+ return this.selectedNavbarConfig != null
558
+ && this.ASSESSMENT_MODULE_IDS.has(this.selectedNavbarConfig?.appModuleId);
559
+ }
560
+ onAssessmentItemClick(config) {
561
+ this.selectedNavbarConfig = config;
562
+ }
563
+ asConfig(item) {
564
+ return item;
565
+ }
528
566
  logout() {
529
567
  this.xdmService.clearAll();
530
568
  this.authnService.logout();
@@ -534,7 +572,7 @@ class SmartNavbarComponent {
534
572
  }
535
573
  getAppModuleUrl(config) {
536
574
  return (config.appModuleId === 'PPMASRVW') ? config.url
537
- : config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99')
575
+ : config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99' || config.appModuleId === 'TCU' || config.appModuleId === 'TCUCH')
538
576
  ? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`
539
577
  : this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`
540
578
  : config.url;
@@ -609,11 +647,11 @@ class SmartNavbarComponent {
609
647
  }
610
648
  }
611
649
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: SmartNavbarComponent, deps: [{ token: SmartNavbarService }, { token: XdmService }, { token: i2.MsalService }], target: i0.ɵɵFactoryTarget.Component }); }
612
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], ngImport: i0, template: "\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (config of navbarConfigs; track config; let index = $index){\r\n @if (showTab(config)) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = config\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === config?.appModuleId\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\r\n\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-link{min-width:16px!important}.mat-mdc-tab .mdc-tab__content{pointer-events:none!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: "component", type: i4.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i4.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i4.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }], encapsulation: i0.ViewEncapsulation.None }); }
650
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], ngImport: i0, template: "\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (item of renderItems; track $index) {\r\n @if (item === 'ASSESSMENTS') {\r\n @if (showAssessmentsMenu) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item assessments-menu-trigger\"\r\n [matMenuTriggerFor]=\"assessmentsMenu\"\r\n [active]=\"isAssessmentActive\">\r\n Assessments &#9662;\r\n </a>\r\n <mat-menu #assessmentsMenu=\"matMenu\">\r\n @for (config of assessmentConfigs; track config.appModuleId) {\r\n @if (showTab(config)) {\r\n <a\r\n mat-menu-item\r\n (click)=\"onAssessmentItemClick(config)\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n </mat-menu>\r\n }\r\n } @else {\r\n @if (showTab(asConfig(item))) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = asConfig(item)\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === asConfig(item)?.appModuleId\"\r\n [href]=\"getAppModuleUrl(asConfig(item))\">{{ asConfig(item).name }}</a>\r\n }\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\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-link{min-width:16px!important}.mat-mdc-tab .mdc-tab__content{pointer-events:none!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}.assessments-menu-trigger{cursor:pointer}a.mat-mdc-menu-item{text-decoration:none;color:inherit}\n"], dependencies: [{ kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5$1.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i5$1.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i5$1.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }], encapsulation: i0.ViewEncapsulation.None }); }
613
651
  }
614
652
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: SmartNavbarComponent, decorators: [{
615
653
  type: Component,
616
- args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (config of navbarConfigs; track config; let index = $index){\r\n @if (showTab(config)) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = config\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === config?.appModuleId\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\r\n\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-link{min-width:16px!important}.mat-mdc-tab .mdc-tab__content{pointer-events:none!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"] }]
654
+ args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (item of renderItems; track $index) {\r\n @if (item === 'ASSESSMENTS') {\r\n @if (showAssessmentsMenu) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item assessments-menu-trigger\"\r\n [matMenuTriggerFor]=\"assessmentsMenu\"\r\n [active]=\"isAssessmentActive\">\r\n Assessments &#9662;\r\n </a>\r\n <mat-menu #assessmentsMenu=\"matMenu\">\r\n @for (config of assessmentConfigs; track config.appModuleId) {\r\n @if (showTab(config)) {\r\n <a\r\n mat-menu-item\r\n (click)=\"onAssessmentItemClick(config)\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n </mat-menu>\r\n }\r\n } @else {\r\n @if (showTab(asConfig(item))) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = asConfig(item)\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === asConfig(item)?.appModuleId\"\r\n [href]=\"getAppModuleUrl(asConfig(item))\">{{ asConfig(item).name }}</a>\r\n }\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\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-link{min-width:16px!important}.mat-mdc-tab .mdc-tab__content{pointer-events:none!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}.assessments-menu-trigger{cursor:pointer}a.mat-mdc-menu-item{text-decoration:none;color:inherit}\n"] }]
617
655
  }], ctorParameters: () => [{ type: SmartNavbarService }, { type: XdmService }, { type: i2.MsalService }], propDecorators: { serviceApiUrl: [{
618
656
  type: Input
619
657
  }], appModuleId: [{
@@ -837,7 +875,7 @@ class SmartStaffOffenderOptionsComponent {
837
875
  this.frmGroup.reset();
838
876
  }
839
877
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: SmartStaffOffenderOptionsComponent, deps: [{ token: i2$1.ActivatedRoute }, { token: SmartStaffOffenderOptionsService }, { token: XdmService }], target: i0.ɵɵFactoryTarget.Component }); }
840
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: SmartStaffOffenderOptionsComponent, selector: "lib-smart-staff-offender-options", ngImport: i0, template: "<form class=\"main-form\" [formGroup]=\"frmGroup\">\r\n <mat-card appearance=\"outlined\" role=\"group\">\r\n <mat-card-content>\r\n <div formGroupName=\"offenderListOptions\">\r\n <div style=\"float:left;\">\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\">\r\n <mat-checkbox *ngIf=\"i%2!=0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n <div>\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\" >\r\n <mat-checkbox *ngIf=\"i%2==0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox> \r\n </div>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n <div align=\"center\">\r\n <button mat-stroked-button (click)=\"onSave()\">Save</button>\r\n &nbsp;&nbsp;\r\n <button mat-stroked-button (click)=\"onClear()\">Clear</button>\r\n </div>\r\n </mat-card>\r\n </form>\r\n ", styles: [""], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6$1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6$1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i7$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }] }); }
878
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: SmartStaffOffenderOptionsComponent, selector: "lib-smart-staff-offender-options", ngImport: i0, template: "<form class=\"main-form\" [formGroup]=\"frmGroup\">\r\n <mat-card appearance=\"outlined\" role=\"group\">\r\n <mat-card-content>\r\n <div formGroupName=\"offenderListOptions\">\r\n <div style=\"float:left;\">\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\">\r\n <mat-checkbox *ngIf=\"i%2!=0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n <div>\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\" >\r\n <mat-checkbox *ngIf=\"i%2==0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox> \r\n </div>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n <div align=\"center\">\r\n <button mat-stroked-button (click)=\"onSave()\">Save</button>\r\n &nbsp;&nbsp;\r\n <button mat-stroked-button (click)=\"onClear()\">Clear</button>\r\n </div>\r\n </mat-card>\r\n </form>\r\n ", styles: [""], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6$1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6$1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i7$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i8$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }] }); }
841
879
  }
842
880
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: SmartStaffOffenderOptionsComponent, decorators: [{
843
881
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"csmart-ngc-smart-core.mjs","sources":["../../../../projects/csmart/ngc-smart-core/src/lib/smart-storage/smart-storage-model.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-storage/xdm.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-error.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-error.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-auth.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-access-control.directive.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-authorization-guard.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-redirect.guard.ts","../../../../projects/csmart/ngc-smart-core/src/lib/ngc-smart-core.module.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-login-staff-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-selected-offender-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-access-control-config.ts","../../../../projects/csmart/ngc-smart-core/src/lib/user-settings/user-settings.service.ts","../../../../projects/csmart/ngc-smart-core/src/public-api.ts","../../../../projects/csmart/ngc-smart-core/src/csmart-ngc-smart-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport class Permission {\r\n roleId: string;\r\n appModuleId: string;\r\n resource: string;\r\n assignmentStaffRelationId: string;\r\n readFlag: boolean;\r\n createFlag: boolean;\r\n updateFlag: boolean;\r\n deleteFlag: boolean;\r\n assignFlag: boolean;\r\n reopenFlag: boolean;\r\n closeFlag: boolean;\r\n expungeFlag: boolean;\r\n}\r\n\r\nexport class Role {\r\n roleId: string;\r\n role: string;\r\n organizationId: string;\r\n organization: string;\r\n}\r\n\r\nexport class Option {\r\n offenderOptionListId: string;\r\n name: string;\r\n serviceApiFieldName: string;\r\n selectedFlag: boolean;\r\n}\r\n\r\nexport class LoginStaff {\r\n staffId: number;\r\n userName: string;\r\n firstName: string;\r\n lastName: string;\r\n phone: string;\r\n email: string;\r\n selectedRole: string = '*';\r\n roles?: Role[];\r\n permissions?: Permission[];\r\n options?: Option[];\r\n}\r\n\r\nexport class SelectedOffender {\r\n offenderId: number;\r\n name: string;\r\n pdId: string;\r\n birthDate: Date;\r\n gender: string;\r\n assignmentStaffRelationId?: string;\r\n intakeFlag?: boolean = false;\r\n}\r\n\r\nexport class OffenderQuery {\r\n offenders: SelectedOffender[];\r\n}\r\n\r\nexport class StorageKey {\r\n static selectedOffender = 'smart-selected-offender';\r\n static loginStaff = 'smart-login-staff';\r\n static offenderQuery = 'smart-offender-query';\r\n}\r\n\r\nexport const SMART_WEB_STORAGE_LISTENER_URL = new InjectionToken<string>(\r\n 'SMART Web Storage Listener URL',\r\n);\r\nexport const SMART_WEB_PORTAL_URL = new InjectionToken<string>(\r\n 'SMART Web Portal URL',\r\n);\r\nexport const SMART_DATA_SERVICE_URL = new InjectionToken<string>(\r\n 'SMART Data Service URL',\r\n);\r\n\r\n//exception for redirection\r\nexport const SMART_DOMAIN_FORMAT = new InjectionToken<string>(\r\n 'SMART Domain Format URL',\r\n);\r\n\r\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject, Observable, of, from } from 'rxjs';\r\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\r\nimport {\r\n SelectedOffender,\r\n LoginStaff,\r\n OffenderQuery,\r\n StorageKey,\r\n SMART_WEB_STORAGE_LISTENER_URL,\r\n SMART_DATA_SERVICE_URL,\r\n Option,\r\n} from './smart-storage-model';\r\n\r\n// import connectToChild from \"penpal/lib/connectToChild\";\r\nimport { connectToChild } from 'penpal';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class XdmService {\r\n private offenderSubject = new Subject<SelectedOffender | void>();\r\n private staffSubject = new Subject<LoginStaff | void>();\r\n private offenderQuerySubject = new Subject<OffenderQuery | void>();\r\n private connection: any;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private document: any,\r\n @Inject(SMART_WEB_STORAGE_LISTENER_URL)\r\n private smartStorageListenerUrl: string,\r\n private httpClient: HttpClient,\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n ) {\r\n if (isDevMode) {\r\n console.log('SmartStorage XdmService (Client) - constructor()');\r\n }\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n const frame = this.document.createElement('iframe');\r\n frame.src = this.smartStorageListenerUrl;\r\n frame.id = 'childframe';\r\n frame.name = Math.random().toString();\r\n frame.onload = null;\r\n //frame.style.visibility = 'hidden';\r\n frame.style.display = 'none';\r\n this.document.body.appendChild(frame);\r\n\r\n this.connection = connectToChild({\r\n iframe: frame,\r\n debug: false,\r\n });\r\n }\r\n\r\n private getStaffOffenderListOptions(\r\n staffId: number,\r\n ): Observable<Array<Option>> {\r\n const queryString = `{findvStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n selectedFlag\r\n }\r\n } }`;\r\n return this.httpClient\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n data.findvStaffOffenderListOptions.data['offenderOptionListId'] =\r\n data.findvStaffOffenderListOptions.data['offenderListOptionId'];\r\n return data.findvStaffOffenderListOptions.data;\r\n }),\r\n );\r\n /*return of([\r\n { offenderListOptionId: 'genderCode', name: '', selectedFlag: true }]);*/\r\n }\r\n\r\n public clearAll(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearAll();\r\n this.offenderSubject.next();\r\n this.staffSubject.next();\r\n });\r\n }\r\n\r\n /*************************************\r\n * Offender\r\n **************************************/\r\n public setSelectedOffender(selectedOffender: SelectedOffender): void {\r\n this.connection.promise.then((child) => {\r\n child.setSelectedOffender(selectedOffender);\r\n this.offenderSubject.next(selectedOffender);\r\n });\r\n\r\n this.getLoginStaff().then((loginStaff) => {\r\n let now = (new Date()).toISOString();\r\n const queryString = `mutation { createStaffOffenderAccess(input: {\r\n staffId: ${loginStaff.staffId},\r\n offenderId: ${selectedOffender.offenderId},\r\n accessDate: \"${now}\"\r\n }) {\r\n data {\r\n staffOffenderAccessId\r\n }\r\n }}`;\r\n this.httpClient.post<any>(this.smartDataServiceUrl, { query: queryString }).subscribe();\r\n });\r\n }\r\n\r\n public getSelectedOffender(): Promise<SelectedOffender> {\r\n return this.connection.promise.then((child) =>\r\n child.getSelectedOffender(StorageKey.selectedOffender),\r\n );\r\n }\r\n\r\n public clearSelectedOffender(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearSelectedOffender();\r\n this.offenderSubject.next();\r\n });\r\n }\r\n\r\n public getOffenderUpdate(): Observable<SelectedOffender> {\r\n return this.offenderSubject.asObservable() as Observable<SelectedOffender>;\r\n }\r\n\r\n /************************************************************************\r\n * Staff\r\n ************************************************************************/\r\n public setLoginStaff(loginStaff: LoginStaff) {\r\n this.connection.promise.then((child) => {\r\n child.setLoginStaff(loginStaff);\r\n this.staffSubject.next(loginStaff);\r\n });\r\n }\r\n\r\n public getLoginStaff(): Promise<LoginStaff> {\r\n return this.connection.promise.then((child) =>\r\n child.getLoginStaff(StorageKey.loginStaff),\r\n );\r\n }\r\n\r\n public clearLoginStaff(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearLoginStaff();\r\n this.staffSubject.next();\r\n });\r\n }\r\n\r\n public getStaffUpdate(): Observable<LoginStaff> {\r\n return this.staffSubject.asObservable() as Observable<LoginStaff>;\r\n }\r\n\r\n public refreshLoginStaffOptions() {\r\n this.getLoginStaff().then((oldLoginStaff) => {\r\n this.getStaffOffenderListOptions(oldLoginStaff.staffId).subscribe(\r\n (optionData) => {\r\n console.log(optionData);\r\n oldLoginStaff.options = optionData;\r\n this.setLoginStaff(oldLoginStaff);\r\n },\r\n );\r\n });\r\n }\r\n\r\n /************************************************************************\r\n * Offender Query\r\n ************************************************************************/\r\n public setOffenderQuery(offenderQuery: OffenderQuery) {\r\n this.connection.promise.then((child) => {\r\n child.setOffenderQuery(offenderQuery);\r\n this.offenderQuerySubject.next(offenderQuery);\r\n });\r\n }\r\n\r\n public getOffenderQuery(): Promise<OffenderQuery> {\r\n return this.connection.promise.then((child) =>\r\n child.getOffenderQuery(StorageKey.offenderQuery),\r\n );\r\n }\r\n\r\n public clearOffenderQuery(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearOffenderQuery();\r\n this.offenderQuerySubject.next();\r\n });\r\n }\r\n\r\n public getOffenderQueryUpdate(): Observable<OffenderQuery> {\r\n return this.offenderQuerySubject.asObservable() as Observable<OffenderQuery>;\r\n }\r\n\r\n public setSelectedOffenderFromRoute(offenderId: number, intakeFlag: boolean): Observable<SelectedOffender> {\r\n return from(this.getLoginStaff()).pipe(\r\n switchMap(loginStaff => {\r\n const queryString = `{\r\n getSelectedOffender(input: { \r\n offenderId: ${offenderId},\r\n staffId: ${loginStaff.staffId}\r\n }){\r\n data{\r\n offenderId\r\n name: offenderName\r\n pdId\r\n birthDate\r\n gender\r\n }\r\n }\r\n }`;\r\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query: queryString }).pipe(\r\n map(({ data }) => data.getSelectedOffender.data),\r\n catchError(error => {\r\n console.error('HTTP request error:', error);\r\n return of(null); \r\n })\r\n );\r\n }),\r\n map(selectedOffender => {\r\n selectedOffender.intakeFlag = intakeFlag;\r\n this.setSelectedOffender(selectedOffender);\r\n this.setOffenderQuery({offenders: [selectedOffender]});\r\n return selectedOffender;\r\n }),\r\n catchError(error => {\r\n console.error('Error in processing offender data:', error);\r\n throw error; \r\n })\r\n );\r\n }\r\n}","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport {\r\n SMART_DATA_SERVICE_URL,\r\n} from '../smart-storage/smart-storage-model';\r\n\r\n\r\n@Injectable()\r\nexport class SmartOffenderHeaderService {\r\n constructor(\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n private http: HttpClient,\r\n ) {}\r\n\r\n getStaffOffenders(staffId: number): Observable<AssignedOffender[]> {\r\n const queryString = `\r\n query getStaffOffenderList{\r\n filterOffenderList(input: {staffId: ${staffId}}) {\r\n data {\r\n offenderId\r\n offenderName\r\n pdId\r\n birthDate\r\n gender\r\n }\r\n }\r\n }\r\n `;\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n return data.filterOffenderList.data;\r\n }),\r\n );\r\n }\r\n}\r\n\r\nexport interface AssignedOffender {\r\n offenderId: number;\r\n offenderName: string;\r\n pdId: string;\r\n birthDate: Date;\r\n gender: string;\r\n}\r\n","import { Component, OnInit, OnDestroy, NgZone, Output, EventEmitter } from '@angular/core';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SelectedOffender, LoginStaff, Role, OffenderQuery } from '../smart-storage/smart-storage-model';\r\nimport { Subscription, Observable, from, of } from 'rxjs';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { UntypedFormControl } from '@angular/forms';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { SmartOffenderHeaderService, AssignedOffender } from './smart-offender-header.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-smart-offender-header',\r\n templateUrl: './smart-offender-header.component.html',\r\n styleUrls: ['./smart-offender-header.component.css'],\r\n})\r\nexport class SmartOffenderHeaderComponent implements OnInit, OnDestroy {\r\n public selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n subscription: Subscription;\r\n selectedOffenderControl$ = new UntypedFormControl();\r\n // assignedOffenders: AssignedOffender[];\r\n offenderQueryList: SelectedOffender[];\r\n offenderQuerySubscription: Subscription;\r\n // public isAuthenticated: boolean;\r\n\r\n constructor(\r\n private xdmService: XdmService,\r\n private authnService: MsalService,\r\n private smartOffenderHeaderService: SmartOffenderHeaderService,\r\n private router: Router,\r\n ) {}\r\n\r\n ngOnInit() {\r\n // this.isAuthenticated = this.authnService.getAccount() ? true : false;\r\n this.xdmService.getLoginStaff().then((loginStaff) => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n });\r\n this.xdmService.getSelectedOffender().then((selectedOffender) => {\r\n this.selectedOffender =\r\n selectedOffender && selectedOffender.offenderId\r\n ? selectedOffender\r\n : null;\r\n });\r\n\r\n this.subscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n this.selectedOffender = selectedOffender;\r\n this.setSelectedOffenderControl();\r\n });\r\n\r\n this.xdmService.getOffenderQuery().then((offenderQuery: OffenderQuery) => {\r\n if (offenderQuery) {\r\n this.offenderQueryList = offenderQuery.offenders;\r\n this.setSelectedOffenderControl();\r\n }\r\n });\r\n\r\n this.offenderQuerySubscription = this.xdmService\r\n .getOffenderQueryUpdate()\r\n .subscribe((offenderList) => {\r\n if (offenderList && offenderList.offenders) {\r\n this.offenderQueryList = [...offenderList.offenders];\r\n }\r\n });\r\n\r\n this.selectedOffenderControl$.valueChanges.subscribe((o) =>\r\n this.onOffenderSelected(o),\r\n );\r\n\r\n this.router.routeReuseStrategy.shouldReuseRoute = () => {\r\n return false;\r\n };\r\n }\r\n\r\n get isAuthenticated() : boolean {\r\n return this.authnService.instance.getAllAccounts().length > 0;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private onOffenderSelected(offender): void {\r\n if (offender) {\r\n // const o = offender.offenderName.split(',');\r\n // if (o.length === 2) {\r\n // const offenderName = `${o[1]} ${o[0]}`;\r\n // this.selectedOffender = {\r\n // offenderId: offender.offenderId,\r\n // name: offenderName,\r\n // pdId: offender.pdId,\r\n // birthDate: offender.birthDate,\r\n // gender: offender.genderCode,\r\n // assignmentStaffRelationId: '',\r\n // intakeFlag: this.loginStaff\r\n // ? this.hasIntakeRole(this.loginStaff.roles)\r\n // : false,\r\n // } as SelectedOffender;\r\n this.selectedOffender = offender;\r\n this.xdmService.setSelectedOffender(this.selectedOffender);\r\n this.reloadCurrentRoute();\r\n }\r\n }\r\n\r\n private setSelectedOffenderControl() {\r\n if (\r\n this.selectedOffender &&\r\n this.offenderQueryList &&\r\n this.offenderQueryList.length > 0\r\n ) {\r\n const o = this.offenderQueryList.find(\r\n (x) => x.offenderId === this.selectedOffender.offenderId,\r\n );\r\n if (o) {\r\n this.selectedOffenderControl$.setValue(o, { emitEvent: false });\r\n }\r\n\r\n if (!o && this.offenderQueryList.length > 0) {\r\n this.selectedOffenderControl$.setValue(this.offenderQueryList[0], {\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n }\r\n\r\n private reloadCurrentRoute() {\r\n try {\r\n const urlTree = this.router.parseUrl(this.router.url);\r\n if (\r\n urlTree &&\r\n urlTree.root &&\r\n urlTree.root.segments &&\r\n urlTree.root.segments.length > 1\r\n ) {\r\n this.router.navigate([urlTree.root.segments[0].path]);\r\n } else if (\r\n urlTree &&\r\n urlTree.root &&\r\n urlTree.root.children &&\r\n urlTree.root.children.primary &&\r\n urlTree.root.children.primary.segments &&\r\n urlTree.root.children.primary.segments.length > 1\r\n ) {\r\n this.router.navigate([urlTree.root.children.primary.segments[0].path]);\r\n } else {\r\n this.router.navigate([this.router.url]);\r\n }\r\n } catch {\r\n this.router.navigateByUrl('/');\r\n }\r\n }\r\n\r\n private hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable, isDevMode } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { SmartNavbarConfig } from './smart-navbar-config';\r\n\r\n@Injectable()\r\nexport class SmartNavbarService {\r\n configs: SmartNavbarConfig[];\r\n constructor(private http: HttpClient) {}\r\n\r\n /*\r\n public getNavbarConfigs(): SmartNavbarConfig[] {\r\n this.configs = [\r\n {appModuleId: 'SMART', name: 'SMART', url: 'http://localhost:4200', offenderSpecific: false, displayOrder: 1 },\r\n {appModuleId: 'OFFENDER', name: 'Offender', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 2 },\r\n {appModuleId: 'SPRVSN', name: 'Supervision', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 3 },\r\n ];\r\n\r\n return this.configs;\r\n }\r\n */\r\n /*\r\n public getNavbarConfigs(serviceApiUrl: string): Observable<SmartNavbarConfig[]> {\r\n return this.http.get<SmartNavbarConfig[]>(serviceApiUrl + '/AppModules');\r\n }\r\n */\r\n\r\n public getNavbarConfigs(\r\n serviceApiUrl: string,\r\n ): Observable<SmartNavbarConfig[]> {\r\n const queryString = `\r\n {\r\n findAppModules {\r\n data {\r\n appModuleId\r\n name\r\n url\r\n offenderSpecificFlag\r\n displayOrder\r\n }\r\n }\r\n }`;\r\n\r\n /*\r\n const httpHeaders = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Cache-Control': 'no-cache'\r\n });\r\n const options = {\r\n headers: httpHeaders\r\n };\r\n */\r\n\r\n return this.http\r\n .post<any>(serviceApiUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n if (isDevMode()) {\r\n console.log(data);\r\n }\r\n return data.findAppModules.data;\r\n }),\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n Input,\r\n ViewChild,\r\n ViewEncapsulation,\r\n Inject,\r\n} from '@angular/core';\r\nimport { MatTabChangeEvent, MatTabGroup } from '@angular/material/tabs';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { SmartNavbarConfig } from './smart-navbar-config';\r\nimport { SmartNavbarService } from './smart-navbar.service';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport {\r\n SelectedOffender,\r\n LoginStaff,\r\n Role,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { Subscription } from 'rxjs';\r\nimport { FormControl } from '@angular/forms';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-smart-navbar',\r\n templateUrl: './smart-navbar.component.html',\r\n styleUrls: ['./smart-navbar.component.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SmartNavbarComponent implements OnInit, OnDestroy {\r\n @Input() serviceApiUrl: string;\r\n @Input() appModuleId = null;\r\n @ViewChild('tabs') tabGroup: MatTabGroup;\r\n selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n offenderSubscription: Subscription;\r\n staffSubscription: Subscription;\r\n navbarConfigs: SmartNavbarConfig[];\r\n selectedNavbarConfig: SmartNavbarConfig = <SmartNavbarConfig>{};\r\n\r\n constructor(\r\n private navbarConfigService: SmartNavbarService,\r\n private xdmService: XdmService,\r\n private authnService: MsalService,\r\n ) {}\r\n\r\n\r\n ngOnInit() {\r\n this.xdmService.getSelectedOffender().then((selectedOffender) => {\r\n this.selectedOffender =\r\n selectedOffender && selectedOffender.offenderId\r\n ? selectedOffender\r\n : null;\r\n });\r\n\r\n this.xdmService.getLoginStaff().then((loginStaff) => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n });\r\n\r\n this.offenderSubscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n this.selectedOffender = selectedOffender;\r\n });\r\n\r\n this.staffSubscription = this.xdmService\r\n .getStaffUpdate()\r\n .subscribe((loginStaff) => {\r\n this.loginStaff = loginStaff;\r\n });\r\n this.navbarConfigService\r\n .getNavbarConfigs(this.serviceApiUrl)\r\n .subscribe((configs) => {\r\n this.navbarConfigs = configs.sort((a, b) => {\r\n if (a.displayOrder < b.displayOrder) {\r\n return -1;\r\n } else if (a.displayOrder > b.displayOrder) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n setTimeout(() => {\r\n this.selectedNavbarConfig = this.navbarConfigs.find(\r\n (config) => config.appModuleId === this.appModuleId,\r\n );\r\n }, 100);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.offenderSubscription.unsubscribe();\r\n this.staffSubscription.unsubscribe();\r\n }\r\n\r\n\r\n public logout(): void {\r\n this.xdmService.clearAll();\r\n this.authnService.logout();\r\n }\r\n\r\n get isAuthenticated(): boolean {\r\n return this.authnService.instance.getAllAccounts().length > 0;\r\n }\r\n\r\n public getAppModuleUrl(config: SmartNavbarConfig) {\r\n return (config.appModuleId === 'PPMASRVW') ? config.url \r\n : config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99')\r\n ? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`\r\n : this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`\r\n : config.url;\r\n }\r\n\r\n public hasAppModulePermission(appModuleId) {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.permissions &&\r\n this.loginStaff.permissions.length > 0\r\n ) {\r\n return (\r\n this.loginStaff.permissions.findIndex(\r\n (p) => p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n showTab(config: SmartNavbarConfig) : boolean {\r\n return (\r\n (this.hasExternalUserRole && this.hasAppModulePermission(config.appModuleId)) ||\r\n (!this.hasExternalUserRole && (config.offenderSpecificFlag === false || this.selectedOffender))\r\n ) && this.checkVictimPermission(config) && this.isAuthenticated && !!this.loginStaff\r\n }\r\n\r\n public get hasExternalUserRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n public checkDVIPPermission(config: SmartNavbarConfig) : boolean{\r\n return ((config.appModuleId !== 'DVIP') || (config.appModuleId === \"DVIP\" && this.hasDVIPRole));\r\n }\r\n\r\n public get hasDVIPRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isDVIPRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isDVIPRole(role: Role){\r\n if(role.roleId == 'TSD' || role.roleId == 'TAD' || role.roleId == 'STSD' || role.roleId == 'BC'){\r\n return true\r\n }\r\n return false;\r\n }\r\n\r\n public checkVictimPermission(config: SmartNavbarConfig) : boolean{\r\n return ((config.appModuleId !== 'VICTIM') || (config.appModuleId === \"VICTIM\" && this.hasVictimRole));\r\n }\r\n\r\n public get hasVictimRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isVictimRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isVictimRole(role: Role){\r\n if(role.roleId == 'BC' || role.roleId == 'VSP'){\r\n return true\r\n }\r\n return false;\r\n }\r\n\r\n private isExternalRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n\r\n","\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (config of navbarConfigs; track config; let index = $index){\r\n @if (showTab(config)) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = config\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === config?.appModuleId\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\n// import { SmartAuthService } from './smart-auth.service';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SMART_WEB_PORTAL_URL } from '../smart-storage/smart-storage-model';\r\n\r\n@Component({\r\n selector: 'app-smart-error',\r\n templateUrl: './smart-error.component.html',\r\n styleUrls: ['./smart-error.component.css'],\r\n})\r\nexport class SmartErrorComponent implements OnInit {\r\n type: string;\r\n message: string;\r\n\r\n constructor(\r\n private authnService: MsalService,\r\n private route: ActivatedRoute,\r\n @Inject(SMART_WEB_PORTAL_URL) private smartWebPortalUrl: string,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.type = this.route.snapshot.queryParamMap.get('type') || 'staff';\r\n this.message =\r\n this.route.snapshot.queryParamMap.get('message') || 'Error occured.';\r\n }\r\n\r\n logout() {\r\n this.authnService.logout();\r\n }\r\n\r\n portal() {\r\n window.location.href = this.smartWebPortalUrl;\r\n }\r\n}\r\n","<div>\r\n <h2>\r\n {{ message }}\r\n </h2>\r\n <p>\r\n Please contact help desk if needed.\r\n </p>\r\n <div>\r\n <button (click)=\"logout()\" *ngIf=\"type === 'staff'\">OK</button>\r\n <button (click)=\"portal()\" *ngIf=\"type === 'offender'\">OK</button>\r\n </div>\r\n</div>\r\n","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { SMART_DATA_SERVICE_URL } from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable()\r\nexport class SmartStaffOffenderOptionsService {\r\n constructor(\r\n private http: HttpClient,\r\n private matSnackBar: MatSnackBar,\r\n @Inject(SMART_DATA_SERVICE_URL) private serviceApiUrl,\r\n ) {}\r\n\r\n public showMessage(message) {\r\n this.matSnackBar.open(message, null, {\r\n duration: 2000,\r\n });\r\n }\r\n\r\n private convertEmptyToNull(jsonObject: JSON) {\r\n if (!jsonObject) {\r\n return;\r\n }\r\n\r\n if (jsonObject instanceof Array) {\r\n jsonObject.forEach((obj) => {\r\n this.convertEmptyToNull(obj);\r\n });\r\n }\r\n\r\n const keys = Object.keys(jsonObject);\r\n keys.forEach((key) => {\r\n if (typeof jsonObject[key] === 'object') {\r\n this.convertEmptyToNull(jsonObject[key]);\r\n } else if (\r\n typeof jsonObject[key] === 'string' &&\r\n jsonObject[key].trim() === ''\r\n ) {\r\n jsonObject[key] = null;\r\n }\r\n });\r\n }\r\n\r\n private getGraphQueryData(\r\n queryName: string,\r\n queryString: string,\r\n ): Observable<any> {\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }),\r\n );\r\n }\r\n\r\n getOffenderListOptions(): Observable<any> {\r\n const queryString = `{findOffenderListOptions(input:{\r\n where:{\r\n deactivatedDate: null\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n }\r\n } }`;\r\n\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data['findOffenderListOptions'];\r\n }),\r\n );\r\n }\r\n\r\n public getStaffOffenderListOptions(staffId: number): Observable<Array<any>> {\r\n const queryString = `{findStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n }\r\n } }`;\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data.findStaffOffenderListOptions.data;\r\n }),\r\n );\r\n }\r\n\r\n saveStaffOffenderListOptionsData(dataToSave: any) {\r\n //}: Observable<any> {\r\n\r\n // this.convertEmptyToNull(dataToSave);\r\n const queryName = 'upsertStaffOffenderListOption';\r\n const query = `mutation {\r\n upsertStaffOffenderListOption(input: ${this.convertToString(\r\n dataToSave,\r\n )}) {\r\n message\r\n }\r\n }`;\r\n\r\n return this.http.post<any>(this.serviceApiUrl, { query });\r\n /*.pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }));*/\r\n }\r\n\r\n convertToString(obj): string {\r\n let result = '';\r\n\r\n if (!obj) {\r\n return result;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n result += ' [';\r\n obj.forEach((eObj) => {\r\n result += this.convertToString(eObj);\r\n });\r\n result += '],';\r\n } else {\r\n result += '{';\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n if (typeof obj[key] === 'object') {\r\n result += key + ':' + this.convertToString(obj[key]);\r\n } else {\r\n if (isNaN(obj[key])) {\r\n result += key + ':\"' + obj[key] + '\",';\r\n } else {\r\n result += key + ':' + obj[key] + ',';\r\n }\r\n }\r\n });\r\n result = result.substring(0, result.length - 1);\r\n result += '},';\r\n }\r\n return result;\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { FormBuilder,\r\n UntypedFormGroup,\r\n UntypedFormControl,\r\n Validators,\r\n ValidatorFn,\r\n AbstractControl,\r\n} from '@angular/forms';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { XdmService} from '../smart-storage/xdm.service';\r\n\r\n@Component({\r\n selector: 'lib-smart-staff-offender-options',\r\n templateUrl: './smart-staff-offender-options.component.html',\r\n styleUrls: ['./smart-staff-offender-options.component.css']\r\n})\r\nexport class SmartStaffOffenderOptionsComponent implements OnInit {\r\n loginStaff: LoginStaff;\r\n offenderListOptions: Array<any> = [];\r\n frmGroup: UntypedFormGroup;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private offenderService: SmartStaffOffenderOptionsService,\r\n private xdmService: XdmService\r\n ) { }\r\n\r\n ngOnInit() {\r\n const routData = this.route.snapshot.data;\r\n this.loginStaff = routData.loginStaff;\r\n this.offenderListOptions = routData.selectedOffenderResolverService;\r\n // Sort by name property (case-insensitive)\r\n this.offenderListOptions.sort((a, b) => \r\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\r\n );\r\n this.frmGroup = this.createForm();\r\n this.offenderService.getStaffOffenderListOptions(this.loginStaff.staffId).subscribe(data => {\r\n this.fillForm(data);\r\n });\r\n }\r\n\r\n private fillForm(data) {\r\n if (data) {\r\n const offenderListOptionsFg = this.frmGroup.get('offenderListOptions');\r\n data.forEach(element => {\r\n offenderListOptionsFg.get(element.offenderListOptionId).setValue(true);\r\n });\r\n }\r\n\r\n }\r\n private createForm() {\r\n const offenderListOptionsFg = new UntypedFormGroup({\r\n });\r\n\r\n this.offenderListOptions.forEach( (dt, i) => {\r\n offenderListOptionsFg.addControl(dt.offenderListOptionId, new UntypedFormControl(false));\r\n });\r\n\r\n return new UntypedFormGroup({\r\n offenderListOptions: offenderListOptionsFg,\r\n });\r\n }\r\n\r\n onSave() {\r\n const data = {\r\n options: [],\r\n staffId: this.loginStaff.staffId,\r\n modifiedBy: this.loginStaff.staffId\r\n };\r\n\r\n const offenderListOptionsVal = this.frmGroup.get('offenderListOptions').value;\r\n const keys = Object.keys(offenderListOptionsVal);\r\n keys.forEach(key => {\r\n if (offenderListOptionsVal[key]) {\r\n data.options.push({'offenderListOptionId': key});\r\n }\r\n });\r\n\r\n this.offenderService.saveStaffOffenderListOptionsData(data).subscribe(rtrDatea=>{\r\n if (rtrDatea.message) {\r\n this.offenderService.showMessage(rtrDatea.message);\r\n } else {\r\n this.offenderService.showMessage('Saved successfully');\r\n this.xdmService.refreshLoginStaffOptions();\r\n }\r\n });\r\n }\r\n onClear(){\r\n this.frmGroup.reset();\r\n }\r\n\r\n\r\n\r\n}\r\n","<form class=\"main-form\" [formGroup]=\"frmGroup\">\r\n <mat-card appearance=\"outlined\" role=\"group\">\r\n <mat-card-content>\r\n <div formGroupName=\"offenderListOptions\">\r\n <div style=\"float:left;\">\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\">\r\n <mat-checkbox *ngIf=\"i%2!=0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n <div>\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\" >\r\n <mat-checkbox *ngIf=\"i%2==0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox> \r\n </div>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n <div align=\"center\">\r\n <button mat-stroked-button (click)=\"onSave()\">Save</button>\r\n &nbsp;&nbsp;\r\n <button mat-stroked-button (click)=\"onClear()\">Clear</button>\r\n </div>\r\n </mat-card>\r\n </form>\r\n ","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable, of, from, throwError, lastValueFrom } from 'rxjs';\r\nimport { map, switchMap, take, catchError} from 'rxjs/operators';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nimport {\r\n LoginStaff,\r\n SelectedOffender,\r\n SMART_DATA_SERVICE_URL,\r\n SMART_DOMAIN_FORMAT,\r\n Role,\r\n Permission,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartAuthService {\r\n loginStaff: LoginStaff;\r\n selectedOffender: SelectedOffender;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private authnService: MsalService,\r\n private xdmService: XdmService,\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n @Inject(SMART_DOMAIN_FORMAT) private smartDomainFormatUrl: string,\r\n ) {}\r\n\r\n public getLoginStaff(): Observable<LoginStaff> {\r\n if (isDevMode) {\r\n console.log('SmartAuthService - getLoginStaff()');\r\n }\r\n if (!isDevMode && this.loginStaff) {\r\n if (this.loginStaff.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get internal instance in service',\r\n this.loginStaff,\r\n );\r\n }\r\n return of(this.loginStaff);\r\n } else if (this.loginStaff.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(this.loginStaff.userName);\r\n }\r\n }\r\n return from(this.xdmService.getLoginStaff()).pipe(\r\n switchMap((storedResult) => {\r\n if (storedResult && storedResult.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get from session.',\r\n storedResult,\r\n );\r\n }\r\n this.loginStaff = storedResult;\r\n return of(storedResult);\r\n } else if (storedResult && storedResult.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(storedResult.userName);\r\n } else {\r\n const userName = this.userName;\r\n const staffName = userName.substring(0, userName.indexOf('@'));\r\n if (isDevMode) {\r\n console.log(\r\n '##### loginLoginStaff(): get using login staff name ',\r\n staffName,\r\n );\r\n }\r\n return this.getStaff(staffName);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n get userName(): string {\r\n if (this.authnService.instance.getAllAccounts().length > 0) {\r\n const account = this.authnService.instance.getAllAccounts()[0];\r\n return account.username;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private getTeamUrl(app: string, afterHash: string): string {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) + afterHash;\r\n }\r\n private isSameHost(url, app) {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) === url;\r\n }\r\n\r\n public redirectToTeam(loginStaff: LoginStaff) {\r\n if (loginStaff.roles.findIndex((role) => role.roleId === 'EUUSPC') > -1) {\r\n if (!this.isSameHost(window.location.origin, 'investigation')) {\r\n window.location.href = this.getTeamUrl('investigation', '/assignment');\r\n }\r\n } else if (\r\n loginStaff.roles.findIndex(\r\n (role) => role.roleId.substring(0, 3) === 'RSC',\r\n ) > -1\r\n ) {\r\n if (!this.isSameHost(window.location.origin, 'rsc')) {\r\n window.location.href = this.getTeamUrl('rsc', '/offender-list');\r\n }\r\n }\r\n }\r\n\r\n public async setSelectedOffender(selectedOffender: SelectedOffender) {\r\n if (!this.loginStaff) {\r\n return;\r\n }\r\n\r\n if (selectedOffender) {\r\n // if (!selectedOffender.assignmentStaffRelationId) {\r\n const relation = await lastValueFrom(\r\n this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n selectedOffender.offenderId,\r\n ),\r\n );\r\n if (relation) {\r\n selectedOffender.assignmentStaffRelationId = relation;\r\n } else {\r\n selectedOffender.assignmentStaffRelationId = 'NOASSIGN';\r\n }\r\n // }\r\n }\r\n this.xdmService.setSelectedOffender(selectedOffender);\r\n this.selectedOffender = selectedOffender;\r\n }\r\n\r\n public logout(): void {\r\n this.xdmService.clearAll();\r\n this.authnService.logout();\r\n }\r\n\r\n public async setPermission(\r\n appModuleId: string,\r\n route: ActivatedRouteSnapshot,\r\n ) {\r\n if (!this.loginStaff) {\r\n this.loginStaff = await this.xdmService.getLoginStaff();\r\n }\r\n const permissions = this.loginStaff.permissions;\r\n const resource =\r\n route.url && route.url.length > 0 ? route.url[0]!.path : '';\r\n\r\n if (!this.selectedOffender) {\r\n this.selectedOffender = await this.xdmService.getSelectedOffender();\r\n }\r\n\r\n if (this.selectedOffender) {\r\n // if (!this.selectedOffender.assignmentStaffRelationId) {\r\n const relation = await this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n this.selectedOffender.offenderId,\r\n ).toPromise();\r\n if (relation) {\r\n this.selectedOffender.assignmentStaffRelationId = relation;\r\n } else {\r\n this.selectedOffender.assignmentStaffRelationId = 'NOASSIGN';\r\n }\r\n this.xdmService.setSelectedOffender(this.selectedOffender);\r\n // }\r\n }\r\n\r\n const assignmentStaffRelationId =\r\n this.selectedOffender.assignmentStaffRelationId;\r\n\r\n const elements = document.querySelectorAll('[class^=\"sac-\"]');\r\n const pattern = /^sac-(\\S+)-(\\S+)$/i;\r\n\r\n Array.from(elements).forEach((element) => {\r\n let hide;\r\n let disable;\r\n element.classList.forEach((c) => {\r\n const results = c.match(pattern);\r\n // console.log(results);\r\n if (results && results.length > 2) {\r\n const roleId = results[1] ? results[1].toUpperCase() : null;\r\n const right = results[2];\r\n // console.log(results[0]);\r\n // console.log(results[1]);\r\n // console.log(results[2]);\r\n const permission = permissions.find(function (p) {\r\n return (\r\n p.appModuleId === appModuleId &&\r\n p.resource === resource &&\r\n p.roleId === roleId &&\r\n p.assignmentStaffRelationId === assignmentStaffRelationId\r\n );\r\n });\r\n /*\r\n console.log('##### setPermission() resource: ', resource);\r\n console.log('##### setPermission() appModuleId: ', appModuleId);\r\n console.log('##### setPermission() roleId: ', roleId);\r\n console.log(\r\n '##### setPermission() assignment relation: ',\r\n assignmentStaffRelationId,\r\n );\r\n */\r\n console.log('##### Matched permission: ', permission);\r\n\r\n if (permission) {\r\n if (right === 'read') {\r\n if (!permission.readFlag) {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else {\r\n hide = false;\r\n }\r\n } else if (\r\n (right === 'create' && !permission.createFlag) ||\r\n (right === 'update' && !permission.updateFlag) ||\r\n (right === 'delete' && !permission.deleteFlag) ||\r\n (right === 'assign' && !permission.assignFlag) ||\r\n (right === 'close' && !permission.closeFlag) ||\r\n (right === 'expunge' && !permission.expungeFlag) ||\r\n (right === 'reopen' && !permission.reopenFlag)\r\n ) {\r\n if (element.nodeName === 'BUTTON') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else {\r\n if (disable !== false) {\r\n disable = true;\r\n }\r\n }\r\n } else {\r\n if (element.nodeName === 'BUTTON') {\r\n hide = false;\r\n } else {\r\n disable = false;\r\n }\r\n }\r\n } else {\r\n if (right === 'read') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else if (element.nodeName === 'BUTTON') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else if (disable !== false) {\r\n disable = true;\r\n }\r\n }\r\n }\r\n });\r\n console.log('hide: ', hide);\r\n console.log('disable: ', disable);\r\n if (hide === true) {\r\n this.hideHtmlElement(element);\r\n } else if (disable === true) {\r\n this.disableHtmlElement(element);\r\n }\r\n });\r\n }\r\n\r\n public checkPermission(accessControlConfig: SmartAccessControlConfig) {\r\n const selData = accessControlConfig.route.data;\r\n this.loginStaff = selData.loginStaff;\r\n this.selectedOffender = selData.selectedOffender;\r\n \r\n let routePath = '';\r\n if (accessControlConfig.route.url && accessControlConfig.route.url.length > 0) {\r\n routePath = accessControlConfig.route.url[0]!.path;\r\n }\r\n \r\n const permissions = this.loginStaff.permissions;\r\n const resource = routePath;\r\n const roleId = accessControlConfig.roleId?.toUpperCase() || null;\r\n const accessType = accessControlConfig.accessType;\r\n const assignmentStaffRelationId = this.selectedOffender?.assignmentStaffRelationId || 'N/A';\r\n \r\n // Find matching permissions (prioritize specific role over aggregated)\r\n const specificPermission = permissions.find(p => \r\n p.appModuleId === accessControlConfig.appModuleId &&\r\n p.resource.trim() === resource &&\r\n p.roleId.trim().toUpperCase() === roleId &&\r\n (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId)\r\n );\r\n \r\n const aggregatedPermission = permissions.find(p => \r\n p.appModuleId === accessControlConfig.appModuleId &&\r\n p.resource.trim() === resource &&\r\n p.roleId.trim() === '*' &&\r\n (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId)\r\n );\r\n \r\n const permission = specificPermission || aggregatedPermission;\r\n \r\n if (!permission) return false;\r\n \r\n const flagMap = {\r\n 'read': permission.readFlag,\r\n 'create': permission.createFlag,\r\n 'update': permission.updateFlag,\r\n 'delete': permission.deleteFlag,\r\n 'assign': permission.assignFlag,\r\n 'close': permission.closeFlag,\r\n 'expunge': permission.expungeFlag,\r\n 'reopen': permission.reopenFlag\r\n };\r\n \r\n return !!flagMap[accessType];\r\n}\r\n\r\n public canAppFeatureActivate(\r\n loginStaff: LoginStaff,\r\n feature: string,\r\n appModuleId = null,\r\n ) {\r\n // if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {\r\n // return true;\r\n // }\r\n return this.hasAppFeaturePermission(\r\n loginStaff.permissions,\r\n feature,\r\n appModuleId,\r\n );\r\n }\r\n\r\n // public isAuthEnable(roles: Role[], appModuleId: string) {\r\n // if (roles && roles.length > 0) {\r\n // return roles.map(r => r.roleId).findIndex(this.isExternalRole) > -1 || appModuleId === 'RR';\r\n // }\r\n // return false;\r\n // }\r\n\r\n public hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private hasAppFeaturePermission(\r\n permissions: Permission[],\r\n feature: string,\r\n appModuleId: string,\r\n ) {\r\n if (permissions && permissions.length > 0) {\r\n if (appModuleId) {\r\n return (\r\n permissions.findIndex(\r\n (p) => p.resource === feature && p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n } else {\r\n return permissions.findIndex((p) => p.resource === feature) > -1;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isExternalRole(roleId) {\r\n switch (roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private disableHtmlElement(element: Element): void {\r\n // console.log(element);\r\n switch (element.nodeName) {\r\n case 'A':\r\n element.setAttribute(\r\n 'style',\r\n 'pointer-events: none;cursor: not-allowed;',\r\n );\r\n element.setAttribute('tabIndex', '-1');\r\n break;\r\n default:\r\n element.setAttribute('disabled', 'disabled');\r\n break;\r\n }\r\n }\r\n\r\n private hideHtmlElement(element: Element): void {\r\n // element.setAttribute('hidden', 'hidden');\r\n element.setAttribute('style', 'display: none;');\r\n }\r\n\r\n private getStaff(userName: string): Observable<LoginStaff> {\r\n return this.query<any>({\r\n query: this.findStaffQuery,\r\n variables: {\r\n input: {\r\n where: {\r\n userName: userName,\r\n activeFlag: true,\r\n },\r\n }\r\n },\r\n }).pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log('##### getStaff() from service ', result);\r\n }\r\n if (result.findvStaffs.data.length > 0) {\r\n const data = result.findvStaffs.data[0];\r\n this.xdmService.setLoginStaff(data);\r\n this.loginStaff = data;\r\n return data;\r\n } else {\r\n return of(null);\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('error ' + error);\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private query<T>(options: {\r\n query: string;\r\n variables?: { [key: string]: any };\r\n }): Observable<T> {\r\n return this.http\r\n .post<{ data: T }>(\r\n this.smartDataServiceUrl,\r\n {\r\n query: options.query,\r\n variables: options.variables,\r\n },\r\n {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'No-Auth': 'True',\r\n }),\r\n }\r\n )\r\n .pipe(map((d) => d.data));\r\n }\r\n\r\n private get findStaffQuery(){\r\n return `\r\n query findvStaffs($input: vStaffMultiInput) {\r\n findvStaffs(input: $input) {\r\n totalCount\r\n message\r\n data {\r\n staffId\r\n userName\r\n lastName\r\n firstName\r\n phone\r\n email\r\n roles {\r\n roleId\r\n role\r\n organizationId\r\n organization\r\n }\r\n permissions {\r\n roleId\r\n appModuleId\r\n resource\r\n assignmentStaffRelationId\r\n readFlag\r\n createFlag\r\n updateFlag\r\n deleteFlag\r\n assignFlag\r\n reopenFlag\r\n closeFlag\r\n expungeFlag\r\n }\r\n options {\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n selectedFlag\r\n }\r\n }\r\n }\r\n }\r\n `;\r\n }\r\n\r\n private getStaffOffenderRelation(\r\n staffId: number,\r\n offenderId: number,\r\n ): Observable<string> {\r\n const queryString = `\r\n {\r\n findvStaffOffenderRelations(input: {where: {staffId: ${staffId}, offenderId: ${offenderId}}}) {\r\n data {\r\n assignmentStaffRelationId\r\n }\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getStaffOffenderRelation() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvStaffOffenderRelations.data.length > 0) {\r\n const data = result.data.findvStaffOffenderRelations.data[0];\r\n return data.assignmentStaffRelationId;\r\n } else {\r\n return null;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('error ' + error);\r\n return null;\r\n }),\r\n );\r\n }\r\n\r\n private getRolePermissions(\r\n appModuleId: string,\r\n resource: string,\r\n ): Observable<boolean> {\r\n const queryString = `\r\n query findvRolePermissionPivots{\r\n findvRolePermissionPivots(input: {where: {appModuleId: ${appModuleId}, resource: ${resource}}}){\r\n totalCount\r\n message\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### findvRolePermissionPivots() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvRolePermissionPivots.totalCount > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error: any) => {\r\n console.log('error ' + error);\r\n return throwError(error);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n\r\n@Directive({\r\n selector: '[accessControl]',\r\n})\r\nexport class SmartAccessControlDirective implements OnInit {\r\n @Input() accessControlConfig: SmartAccessControlConfig;\r\n constructor(\r\n private elementRef: ElementRef,\r\n private auth: SmartAuthService,\r\n ) {}\r\n\r\n public ngOnInit() {\r\n this.checkAccess();\r\n }\r\n\r\n checkAccess() {\r\n if (\r\n !this.accessControlConfig ||\r\n !this.accessControlConfig.route ||\r\n !this.accessControlConfig.route.data ||\r\n !this.accessControlConfig.route.data.loginStaff\r\n ) {\r\n return;\r\n }\r\n\r\n // const loginStaff = this.accessControlConfig.route.data.loginStaff;\r\n // if (!this.auth.isAuthEnable(loginStaff.roles, this.accessControlConfig.appModuleId)) {\r\n // return;\r\n // }\r\n this.elementRef.nativeElement.style.display = this.auth.checkPermission(\r\n this.accessControlConfig\r\n )\r\n ? 'block'\r\n : 'none';\r\n }\r\n}\r\n","// smart-authorization.service\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Router } from '@angular/router';\r\nimport { take, mergeMap, catchError } from 'rxjs/operators';\r\nimport { of, Observable } from 'rxjs';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { SmartAuthService } from './smart-auth.service';\r\n\r\n@Injectable()\r\nexport class SmartAuthorizationGuard {\r\n loginStaff: LoginStaff;\r\n\r\n constructor(public authnService: SmartAuthService) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot) {\r\n return this.authnService.getLoginStaff().pipe(\r\n take(1),\r\n mergeMap((loginStaff) => {\r\n if (!loginStaff || !route || !route.routeConfig) {\r\n return of(false);\r\n }\r\n // if (!this.authnService.isAuthEnable(loginStaff.roles, null)) {\r\n // return of(true);\r\n // }\r\n const resource = route.routeConfig.path\r\n ? route.routeConfig.path.split('/')[0]\r\n : '';\r\n const isFeatureValid = this.authnService.canAppFeatureActivate(\r\n loginStaff,\r\n resource,\r\n );\r\n return of(isFeatureValid);\r\n }),\r\n catchError((error) => {\r\n return of(false);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SmartOffenderRedirectGuard {\r\n constructor(private router: Router) {}\r\n\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): boolean {\r\n const targetRoute = route.data['routeTo'];\r\n const queryParams = route.parent?.queryParams;\r\n if (targetRoute) {\r\n this.router.navigate([targetRoute], { queryParams: queryParams });\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\n\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { SmartOffenderHeaderComponent } from './smart-offender-header/smart-offender-header.component';\r\nimport { SmartNavbarComponent } from './smart-navbar/smart-navbar.component';\r\nimport { SmartNavbarService } from './smart-navbar/smart-navbar.service';\r\nimport { SmartErrorComponent } from './smart-auth/smart-error.component';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { SmartOffenderHeaderService } from './smart-offender-header/smart-offender-header.service';\r\nimport { SmartStaffOffenderOptionsComponent } from './smart-staff-offender-options/smart-staff-offender-options.component';\r\n// import { SmartStaffOffenderOptionsComponent } from './smart-staff-offender-options/smart-staff-offender-options.component';\r\nimport { SmartStaffOffenderOptionsService } from './smart-staff-offender-options/smart-staff-offender-options.service';\r\nimport { SmartAccessControlDirective } from './smart-auth/smart-access-control.directive';\r\nimport { SmartAuthorizationGuard } from './smart-auth/smart-authorization-guard.service';\r\nimport { SmartOffenderRedirectGuard } from './smart-offender-header/smart-offender-redirect.guard';\r\n\r\n@NgModule({\r\n declarations: [\r\n SmartOffenderHeaderComponent,\r\n SmartNavbarComponent,\r\n SmartErrorComponent,\r\n SmartStaffOffenderOptionsComponent,\r\n SmartAccessControlDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n MatButtonModule,\r\n MatMenuModule,\r\n MatTabsModule,\r\n MatSelectModule,\r\n MatCardModule,\r\n MatCheckboxModule,\r\n ReactiveFormsModule,\r\n ],\r\n exports: [\r\n SmartOffenderHeaderComponent,\r\n SmartNavbarComponent,\r\n SmartErrorComponent,\r\n SmartStaffOffenderOptionsComponent,\r\n SmartAccessControlDirective,\r\n ],\r\n providers: [\r\n SmartNavbarService,\r\n SmartOffenderHeaderService,\r\n SmartStaffOffenderOptionsService,\r\n SmartAuthorizationGuard,\r\n MatSnackBar,\r\n SmartOffenderRedirectGuard\r\n ],\r\n})\r\nexport class NgcSmartCoreModule {}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, EMPTY, of, throwError } from 'rxjs';\r\nimport { mergeMap, catchError, take } from 'rxjs/operators';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoginStaffResolverService {\r\n constructor(\r\n private authnService: SmartAuthService,\r\n // private zone: NgZone,\r\n private router: Router,\r\n ) {}\r\n\r\n resolve(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<LoginStaff> | Observable<never> {\r\n return this.authnService.getLoginStaff().pipe(\r\n take(1),\r\n mergeMap((loginStaff) => {\r\n if (isDevMode) {\r\n console.log('LoginStaffResolverService: ', loginStaff);\r\n }\r\n if (loginStaff) {\r\n return of(loginStaff);\r\n } else {\r\n return throwError('Not authorized to access SMART.');\r\n // return EMPTY;\r\n /*\r\n this.zone.run(() => {\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: {\r\n type: 'staff',\r\n message: 'Not authorized to access SMART.'\r\n }\r\n });\r\n });\r\n return EMPTY;\r\n */\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('LoginStaffResolverService: ' + error);\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: {\r\n type: 'staff',\r\n message: 'SMART Authentication: ' + error,\r\n },\r\n });\r\n return EMPTY;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, from, of, EMPTY, throwError, concat } from 'rxjs';\r\nimport {\r\n catchError,\r\n mergeMap,\r\n take,\r\n retryWhen,\r\n delay,\r\n} from 'rxjs/operators';\r\nimport { SelectedOffender } from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SelectedOffenderResolverService\r\n {\r\n constructor(\r\n private service: XdmService,\r\n private zone: NgZone,\r\n private router: Router,\r\n ) {}\r\n resolve(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<SelectedOffender> | Observable<never> {\r\n let offenderId: number | null = null;\r\n let intakeFlag: boolean = false;\r\n if(route) {\r\n if(route.queryParams[\"offenderId\"])\r\n offenderId = parseInt(route.queryParams[\"offenderId\"]);\r\n if(route.queryParams[\"intakeFlag\"])\r\n intakeFlag = route.queryParams[\"intakeFlag\"] == \"true\";\r\n }\r\n return from(this.service.getSelectedOffender()).pipe(\r\n mergeMap((selectedOffender) => {\r\n if (isDevMode) {\r\n console.log(selectedOffender);\r\n }\r\n if(offenderId && offenderId > 0 && (!selectedOffender || (selectedOffender && selectedOffender.offenderId !== offenderId))) {\r\n return this.service.setSelectedOffenderFromRoute(offenderId, intakeFlag);\r\n }\r\n if(selectedOffender) {\r\n return of(selectedOffender);\r\n }\r\n return throwError(() => new Error('No offender selected.'));\r\n }),\r\n retryWhen((errors) =>\r\n errors.pipe(\r\n // tap(() => console.log('Retry getting selected offender.')),\r\n delay(1000),\r\n take(5),\r\n (o) =>\r\n concat(\r\n o,\r\n throwError(() => new Error('No offender selected (failed after retries).')),\r\n ),\r\n ),\r\n ),\r\n catchError((error) => {\r\n /*\r\n this.zone.run(() => {\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: { type: 'offender', message: error }\r\n });\r\n });\r\n */\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: { type: 'offender', message: error },\r\n });\r\n return EMPTY;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartStaffOffenderOptionsResolverService {\r\n constructor(private offenderService: SmartStaffOffenderOptionsService) {}\r\n resolve() {\r\n return this.offenderService.getOffenderListOptions()\r\n .pipe(\r\n map(({ data }) => {\r\n return data;\r\n }),\r\n );\r\n }\r\n }\r\n","import { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nexport interface SmartAccessControlConfig {\r\n appModuleId: string;\r\n route: ActivatedRouteSnapshot;\r\n accessType: AccessType;\r\n roleId: string;\r\n}\r\n\r\nexport enum AccessType {\r\n READ = 'read',\r\n CREATE = 'create',\r\n UPDATE = 'update',\r\n DELETE = 'delete',\r\n EXPUNGE = 'expunge',\r\n ASSIGN = 'assign',\r\n REOPEN = 'reopen',\r\n CLOSE = 'close'\r\n}\r\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { SMART_DATA_SERVICE_URL } from '../smart-storage/smart-storage-model';\n\nexport interface StaffSetting {\n staffSettingId: string;\n settingKey: string;\n settingValue: string;\n modifiedBy: string;\n}\n\nexport interface DefaultSetting {\n defaultSettingId: string;\n settingValue: string;\n}\n\nexport interface CreateStaffSettingInput {\n staffId: number;\n settingKey: string;\n settingValue: string;\n modifiedBy: number;\n}\n\nexport interface UpdateStaffSettingInput {\n where: {\n staffSettingId: number;\n };\n data: {\n staffId: number;\n settingKey: string;\n settingValue: string;\n modifiedBy: number;\n };\n}\n\nexport interface StaffSettingResponse {\n data: {\n staffSettingId: number;\n staffId?: number;\n settingKey: string;\n settingValue: string;\n };\n message: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSettingsService {\n constructor(\n private httpClient: HttpClient,\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl: string\n ) {}\n\n /**\n * Fetches staff settings for a given staff ID\n * @param staffId The ID of the staff member\n * @returns Observable of staff settings array\n */\n findStaffSettings(staffId: string): Observable<StaffSetting[]> {\n const query = `{\n findStaffSettings(input: { where: { staffId: ${staffId} } }) {\n data {\n staffSettingId\n settingKey\n settingValue\n modifiedBy\n }\n }\n }`;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query }).pipe(\n map(response => response?.data?.findStaffSettings?.data || []),\n catchError(error => {\n console.error('Error fetching staff settings:', error);\n return of([]);\n })\n );\n }\n\n /**\n * Fetches default settings\n * @returns Observable of default settings array\n */\n findDefaultSettings(): Observable<DefaultSetting[]> {\n const query = `{\n findDefaultSettings {\n data {\n defaultSettingId\n settingValue\n }\n }\n }`;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query }).pipe(\n map(response => response?.data?.findDefaultSettings?.data || []),\n catchError(error => {\n console.error('Error fetching default settings:', error);\n return of([]);\n })\n );\n }\n\n /**\n * Creates a new staff setting\n * @param input The staff setting data to create\n * @returns Observable with the created staff setting\n */\n createStaffSetting(input: CreateStaffSettingInput): Observable<StaffSettingResponse> {\n const mutation = `\n mutation CreateStaffSetting($input: CreateStaffSettingInput!) {\n createStaffSetting(input: $input) {\n data {\n staffSettingId\n settingKey\n settingValue\n }\n message\n }\n }\n `;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, {\n query: mutation,\n variables: { input }\n }).pipe(\n map(response => response?.data?.createStaffSetting || { data: null, message: '' }),\n catchError(error => {\n console.error('Error creating staff setting:', error);\n return of({ data: null, message: 'Failed to create staff setting' });\n })\n );\n }\n\n /**\n * Updates an existing staff setting\n * @param input The update data and conditions\n * @returns Observable with the updated staff setting\n */\n updateStaffSetting(input: UpdateStaffSettingInput): Observable<StaffSettingResponse> {\n const mutation = `\n mutation UpdateStaffSetting($input: UpdateStaffSettingInput!) {\n updateStaffSetting(input: $input) {\n data {\n staffSettingId\n staffId\n settingKey\n settingValue\n }\n message\n }\n }\n `;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, {\n query: mutation,\n variables: { input }\n }).pipe(\n map(response => response?.data?.updateStaffSetting || { data: null, message: '' }),\n catchError(error => {\n console.error('Error updating staff setting:', error);\n return of({ data: null, message: 'Failed to update staff setting' });\n })\n );\n }\n}\n","/*\r\n * Public API Surface of ngc-smart-core\r\n */\r\n\r\nexport * from './lib/ngc-smart-core.module';\r\nexport * from './lib/smart-auth/smart-auth.service';\r\nexport * from './lib/smart-auth/smart-login-staff-resolver.service';\r\nexport * from './lib/smart-auth/smart-selected-offender-resolver.service';\r\nexport * from './lib/smart-auth/smart-error.component';\r\nexport * from './lib/smart-navbar/smart-navbar.service';\r\nexport * from './lib/smart-navbar/smart-navbar-config';\r\nexport * from './lib/smart-storage/xdm.service';\r\nexport * from './lib/smart-storage/smart-storage-model';\r\nexport * from './lib/smart-staff-offender-options/smart-staff-offender-options.component';\r\nexport * from './lib/smart-offender-header/smart-offender-header.component';\r\nexport * from './lib/smart-offender-header/smart-offender-redirect.guard';\r\nexport * from './lib/smart-auth/smart-access-control.directive';\r\nexport * from './lib/smart-navbar/smart-navbar.component';\r\nexport * from './lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service';\r\nexport * from './lib/smart-auth/smart-access-control-config';\r\nexport * from './lib/smart-auth/smart-authorization-guard.service';\r\nexport * from './lib/user-settings/user-settings.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.XdmService","i3.SmartOffenderHeaderService","i4","i9","i1.SmartNavbarService","i2.XdmService","i3","i1","i2.SmartStaffOffenderOptionsService","i3.XdmService","i5","i6","i7","i8","i1.SmartAuthService","i2","i1.SmartStaffOffenderOptionsService"],"mappings":"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"}
1
+ {"version":3,"file":"csmart-ngc-smart-core.mjs","sources":["../../../../projects/csmart/ngc-smart-core/src/lib/smart-storage/smart-storage-model.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-storage/xdm.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-header.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-navbar/smart-navbar.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-error.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-error.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.component.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options.component.html","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-auth.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-access-control.directive.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-authorization-guard.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-offender-header/smart-offender-redirect.guard.ts","../../../../projects/csmart/ngc-smart-core/src/lib/ngc-smart-core.module.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-login-staff-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-selected-offender-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.ts","../../../../projects/csmart/ngc-smart-core/src/lib/smart-auth/smart-access-control-config.ts","../../../../projects/csmart/ngc-smart-core/src/lib/user-settings/user-settings.service.ts","../../../../projects/csmart/ngc-smart-core/src/public-api.ts","../../../../projects/csmart/ngc-smart-core/src/csmart-ngc-smart-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport class Permission {\r\n roleId: string;\r\n appModuleId: string;\r\n resource: string;\r\n assignmentStaffRelationId: string;\r\n readFlag: boolean;\r\n createFlag: boolean;\r\n updateFlag: boolean;\r\n deleteFlag: boolean;\r\n assignFlag: boolean;\r\n reopenFlag: boolean;\r\n closeFlag: boolean;\r\n expungeFlag: boolean;\r\n}\r\n\r\nexport class Role {\r\n roleId: string;\r\n role: string;\r\n organizationId: string;\r\n organization: string;\r\n}\r\n\r\nexport class Option {\r\n offenderOptionListId: string;\r\n name: string;\r\n serviceApiFieldName: string;\r\n selectedFlag: boolean;\r\n}\r\n\r\nexport class LoginStaff {\r\n staffId: number;\r\n userName: string;\r\n firstName: string;\r\n lastName: string;\r\n phone: string;\r\n email: string;\r\n selectedRole: string = '*';\r\n roles?: Role[];\r\n permissions?: Permission[];\r\n options?: Option[];\r\n}\r\n\r\nexport class SelectedOffender {\r\n offenderId: number;\r\n name: string;\r\n pdId: string;\r\n birthDate: Date;\r\n gender: string;\r\n assignmentStaffRelationId?: string;\r\n intakeFlag?: boolean = false;\r\n}\r\n\r\nexport class OffenderQuery {\r\n offenders: SelectedOffender[];\r\n}\r\n\r\nexport class StorageKey {\r\n static selectedOffender = 'smart-selected-offender';\r\n static loginStaff = 'smart-login-staff';\r\n static offenderQuery = 'smart-offender-query';\r\n}\r\n\r\nexport const SMART_WEB_STORAGE_LISTENER_URL = new InjectionToken<string>(\r\n 'SMART Web Storage Listener URL',\r\n);\r\nexport const SMART_WEB_PORTAL_URL = new InjectionToken<string>(\r\n 'SMART Web Portal URL',\r\n);\r\nexport const SMART_DATA_SERVICE_URL = new InjectionToken<string>(\r\n 'SMART Data Service URL',\r\n);\r\n\r\n//exception for redirection\r\nexport const SMART_DOMAIN_FORMAT = new InjectionToken<string>(\r\n 'SMART Domain Format URL',\r\n);\r\n\r\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject, Observable, of, from } from 'rxjs';\r\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\r\nimport {\r\n SelectedOffender,\r\n LoginStaff,\r\n OffenderQuery,\r\n StorageKey,\r\n SMART_WEB_STORAGE_LISTENER_URL,\r\n SMART_DATA_SERVICE_URL,\r\n Option,\r\n} from './smart-storage-model';\r\n\r\n// import connectToChild from \"penpal/lib/connectToChild\";\r\nimport { connectToChild } from 'penpal';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class XdmService {\r\n private offenderSubject = new Subject<SelectedOffender | void>();\r\n private staffSubject = new Subject<LoginStaff | void>();\r\n private offenderQuerySubject = new Subject<OffenderQuery | void>();\r\n private connection: any;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private document: any,\r\n @Inject(SMART_WEB_STORAGE_LISTENER_URL)\r\n private smartStorageListenerUrl: string,\r\n private httpClient: HttpClient,\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n ) {\r\n if (isDevMode) {\r\n console.log('SmartStorage XdmService (Client) - constructor()');\r\n }\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n const frame = this.document.createElement('iframe');\r\n frame.src = this.smartStorageListenerUrl;\r\n frame.id = 'childframe';\r\n frame.name = Math.random().toString();\r\n frame.onload = null;\r\n //frame.style.visibility = 'hidden';\r\n frame.style.display = 'none';\r\n this.document.body.appendChild(frame);\r\n\r\n this.connection = connectToChild({\r\n iframe: frame,\r\n debug: false,\r\n });\r\n }\r\n\r\n private getStaffOffenderListOptions(\r\n staffId: number,\r\n ): Observable<Array<Option>> {\r\n const queryString = `{findvStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n selectedFlag\r\n }\r\n } }`;\r\n return this.httpClient\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n data.findvStaffOffenderListOptions.data['offenderOptionListId'] =\r\n data.findvStaffOffenderListOptions.data['offenderListOptionId'];\r\n return data.findvStaffOffenderListOptions.data;\r\n }),\r\n );\r\n /*return of([\r\n { offenderListOptionId: 'genderCode', name: '', selectedFlag: true }]);*/\r\n }\r\n\r\n public clearAll(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearAll();\r\n this.offenderSubject.next();\r\n this.staffSubject.next();\r\n });\r\n }\r\n\r\n /*************************************\r\n * Offender\r\n **************************************/\r\n public setSelectedOffender(selectedOffender: SelectedOffender): void {\r\n this.connection.promise.then((child) => {\r\n child.setSelectedOffender(selectedOffender);\r\n this.offenderSubject.next(selectedOffender);\r\n });\r\n\r\n this.getLoginStaff().then((loginStaff) => {\r\n let now = (new Date()).toISOString();\r\n const queryString = `mutation { createStaffOffenderAccess(input: {\r\n staffId: ${loginStaff.staffId},\r\n offenderId: ${selectedOffender.offenderId},\r\n accessDate: \"${now}\"\r\n }) {\r\n data {\r\n staffOffenderAccessId\r\n }\r\n }}`;\r\n this.httpClient.post<any>(this.smartDataServiceUrl, { query: queryString }).subscribe();\r\n });\r\n }\r\n\r\n public getSelectedOffender(): Promise<SelectedOffender> {\r\n return this.connection.promise.then((child) =>\r\n child.getSelectedOffender(StorageKey.selectedOffender),\r\n );\r\n }\r\n\r\n public clearSelectedOffender(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearSelectedOffender();\r\n this.offenderSubject.next();\r\n });\r\n }\r\n\r\n public getOffenderUpdate(): Observable<SelectedOffender> {\r\n return this.offenderSubject.asObservable() as Observable<SelectedOffender>;\r\n }\r\n\r\n /************************************************************************\r\n * Staff\r\n ************************************************************************/\r\n public setLoginStaff(loginStaff: LoginStaff) {\r\n this.connection.promise.then((child) => {\r\n child.setLoginStaff(loginStaff);\r\n this.staffSubject.next(loginStaff);\r\n });\r\n }\r\n\r\n public getLoginStaff(): Promise<LoginStaff> {\r\n return this.connection.promise.then((child) =>\r\n child.getLoginStaff(StorageKey.loginStaff),\r\n );\r\n }\r\n\r\n public clearLoginStaff(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearLoginStaff();\r\n this.staffSubject.next();\r\n });\r\n }\r\n\r\n public getStaffUpdate(): Observable<LoginStaff> {\r\n return this.staffSubject.asObservable() as Observable<LoginStaff>;\r\n }\r\n\r\n public refreshLoginStaffOptions() {\r\n this.getLoginStaff().then((oldLoginStaff) => {\r\n this.getStaffOffenderListOptions(oldLoginStaff.staffId).subscribe(\r\n (optionData) => {\r\n console.log(optionData);\r\n oldLoginStaff.options = optionData;\r\n this.setLoginStaff(oldLoginStaff);\r\n },\r\n );\r\n });\r\n }\r\n\r\n /************************************************************************\r\n * Offender Query\r\n ************************************************************************/\r\n public setOffenderQuery(offenderQuery: OffenderQuery) {\r\n this.connection.promise.then((child) => {\r\n child.setOffenderQuery(offenderQuery);\r\n this.offenderQuerySubject.next(offenderQuery);\r\n });\r\n }\r\n\r\n public getOffenderQuery(): Promise<OffenderQuery> {\r\n return this.connection.promise.then((child) =>\r\n child.getOffenderQuery(StorageKey.offenderQuery),\r\n );\r\n }\r\n\r\n public clearOffenderQuery(): void {\r\n this.connection.promise.then((child) => {\r\n child.clearOffenderQuery();\r\n this.offenderQuerySubject.next();\r\n });\r\n }\r\n\r\n public getOffenderQueryUpdate(): Observable<OffenderQuery> {\r\n return this.offenderQuerySubject.asObservable() as Observable<OffenderQuery>;\r\n }\r\n\r\n public setSelectedOffenderFromRoute(offenderId: number, intakeFlag: boolean): Observable<SelectedOffender> {\r\n return from(this.getLoginStaff()).pipe(\r\n switchMap(loginStaff => {\r\n const queryString = `{\r\n getSelectedOffender(input: { \r\n offenderId: ${offenderId},\r\n staffId: ${loginStaff.staffId}\r\n }){\r\n data{\r\n offenderId\r\n name: offenderName\r\n pdId\r\n birthDate\r\n gender\r\n }\r\n }\r\n }`;\r\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query: queryString }).pipe(\r\n map(({ data }) => data.getSelectedOffender.data),\r\n catchError(error => {\r\n console.error('HTTP request error:', error);\r\n return of(null); \r\n })\r\n );\r\n }),\r\n map(selectedOffender => {\r\n selectedOffender.intakeFlag = intakeFlag;\r\n this.setSelectedOffender(selectedOffender);\r\n this.setOffenderQuery({offenders: [selectedOffender]});\r\n return selectedOffender;\r\n }),\r\n catchError(error => {\r\n console.error('Error in processing offender data:', error);\r\n throw error; \r\n })\r\n );\r\n }\r\n}","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport {\r\n SMART_DATA_SERVICE_URL,\r\n} from '../smart-storage/smart-storage-model';\r\n\r\n\r\n@Injectable()\r\nexport class SmartOffenderHeaderService {\r\n constructor(\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n private http: HttpClient,\r\n ) {}\r\n\r\n getStaffOffenders(staffId: number): Observable<AssignedOffender[]> {\r\n const queryString = `\r\n query getStaffOffenderList{\r\n filterOffenderList(input: {staffId: ${staffId}}) {\r\n data {\r\n offenderId\r\n offenderName\r\n pdId\r\n birthDate\r\n gender\r\n }\r\n }\r\n }\r\n `;\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n return data.filterOffenderList.data;\r\n }),\r\n );\r\n }\r\n}\r\n\r\nexport interface AssignedOffender {\r\n offenderId: number;\r\n offenderName: string;\r\n pdId: string;\r\n birthDate: Date;\r\n gender: string;\r\n}\r\n","import { Component, OnInit, OnDestroy, NgZone, Output, EventEmitter } from '@angular/core';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SelectedOffender, LoginStaff, Role, OffenderQuery } from '../smart-storage/smart-storage-model';\r\nimport { Subscription, Observable, from, of } from 'rxjs';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { UntypedFormControl } from '@angular/forms';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport { SmartOffenderHeaderService, AssignedOffender } from './smart-offender-header.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-smart-offender-header',\r\n templateUrl: './smart-offender-header.component.html',\r\n styleUrls: ['./smart-offender-header.component.css'],\r\n})\r\nexport class SmartOffenderHeaderComponent implements OnInit, OnDestroy {\r\n public selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n subscription: Subscription;\r\n selectedOffenderControl$ = new UntypedFormControl();\r\n // assignedOffenders: AssignedOffender[];\r\n offenderQueryList: SelectedOffender[];\r\n offenderQuerySubscription: Subscription;\r\n // public isAuthenticated: boolean;\r\n\r\n constructor(\r\n private xdmService: XdmService,\r\n private authnService: MsalService,\r\n private smartOffenderHeaderService: SmartOffenderHeaderService,\r\n private router: Router,\r\n ) {}\r\n\r\n ngOnInit() {\r\n // this.isAuthenticated = this.authnService.getAccount() ? true : false;\r\n this.xdmService.getLoginStaff().then((loginStaff) => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n });\r\n this.xdmService.getSelectedOffender().then((selectedOffender) => {\r\n this.selectedOffender =\r\n selectedOffender && selectedOffender.offenderId\r\n ? selectedOffender\r\n : null;\r\n });\r\n\r\n this.subscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n this.selectedOffender = selectedOffender;\r\n this.setSelectedOffenderControl();\r\n });\r\n\r\n this.xdmService.getOffenderQuery().then((offenderQuery: OffenderQuery) => {\r\n if (offenderQuery) {\r\n this.offenderQueryList = offenderQuery.offenders;\r\n this.setSelectedOffenderControl();\r\n }\r\n });\r\n\r\n this.offenderQuerySubscription = this.xdmService\r\n .getOffenderQueryUpdate()\r\n .subscribe((offenderList) => {\r\n if (offenderList && offenderList.offenders) {\r\n this.offenderQueryList = [...offenderList.offenders];\r\n }\r\n });\r\n\r\n this.selectedOffenderControl$.valueChanges.subscribe((o) =>\r\n this.onOffenderSelected(o),\r\n );\r\n\r\n this.router.routeReuseStrategy.shouldReuseRoute = () => {\r\n return false;\r\n };\r\n }\r\n\r\n get isAuthenticated() : boolean {\r\n return this.authnService.instance.getAllAccounts().length > 0;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private onOffenderSelected(offender): void {\r\n if (offender) {\r\n // const o = offender.offenderName.split(',');\r\n // if (o.length === 2) {\r\n // const offenderName = `${o[1]} ${o[0]}`;\r\n // this.selectedOffender = {\r\n // offenderId: offender.offenderId,\r\n // name: offenderName,\r\n // pdId: offender.pdId,\r\n // birthDate: offender.birthDate,\r\n // gender: offender.genderCode,\r\n // assignmentStaffRelationId: '',\r\n // intakeFlag: this.loginStaff\r\n // ? this.hasIntakeRole(this.loginStaff.roles)\r\n // : false,\r\n // } as SelectedOffender;\r\n this.selectedOffender = offender;\r\n this.xdmService.setSelectedOffender(this.selectedOffender);\r\n this.reloadCurrentRoute();\r\n }\r\n }\r\n\r\n private setSelectedOffenderControl() {\r\n if (\r\n this.selectedOffender &&\r\n this.offenderQueryList &&\r\n this.offenderQueryList.length > 0\r\n ) {\r\n const o = this.offenderQueryList.find(\r\n (x) => x.offenderId === this.selectedOffender.offenderId,\r\n );\r\n if (o) {\r\n this.selectedOffenderControl$.setValue(o, { emitEvent: false });\r\n }\r\n\r\n if (!o && this.offenderQueryList.length > 0) {\r\n this.selectedOffenderControl$.setValue(this.offenderQueryList[0], {\r\n emitEvent: false,\r\n });\r\n }\r\n }\r\n }\r\n\r\n private reloadCurrentRoute() {\r\n try {\r\n const urlTree = this.router.parseUrl(this.router.url);\r\n if (\r\n urlTree &&\r\n urlTree.root &&\r\n urlTree.root.segments &&\r\n urlTree.root.segments.length > 1\r\n ) {\r\n this.router.navigate([urlTree.root.segments[0].path]);\r\n } else if (\r\n urlTree &&\r\n urlTree.root &&\r\n urlTree.root.children &&\r\n urlTree.root.children.primary &&\r\n urlTree.root.children.primary.segments &&\r\n urlTree.root.children.primary.segments.length > 1\r\n ) {\r\n this.router.navigate([urlTree.root.children.primary.segments[0].path]);\r\n } else {\r\n this.router.navigate([this.router.url]);\r\n }\r\n } catch {\r\n this.router.navigateByUrl('/');\r\n }\r\n }\r\n\r\n private hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"offender-header-container\"\r\n *ngIf=\"selectedOffender && isAuthenticated\">\r\n <div class=\"offender-header-name-item\">\r\n <mat-form-field class=\"switch-offender\" appearance=\"fill\">\r\n <mat-label>Switch Offender</mat-label>\r\n <mat-select [formControl]=\"selectedOffenderControl$\">\r\n <mat-option\r\n *ngFor=\"let offender of offenderQueryList\"\r\n [value]=\"offender\">\r\n {{ offender?.name}} ({{offender?.offenderId}})\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">PDID:</span> {{ selectedOffender.pdId }}\r\n </div>\r\n <div class=\"offender-header-id-item\">\r\n <span class=\"item-label\">CSOSA ID:</span>\r\n {{ selectedOffender.offenderId }}\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable, isDevMode } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { SmartNavbarConfig } from './smart-navbar-config';\r\n\r\n@Injectable()\r\nexport class SmartNavbarService {\r\n configs: SmartNavbarConfig[];\r\n constructor(private http: HttpClient) {}\r\n\r\n /*\r\n public getNavbarConfigs(): SmartNavbarConfig[] {\r\n this.configs = [\r\n {appModuleId: 'SMART', name: 'SMART', url: 'http://localhost:4200', offenderSpecific: false, displayOrder: 1 },\r\n {appModuleId: 'OFFENDER', name: 'Offender', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 2 },\r\n {appModuleId: 'SPRVSN', name: 'Supervision', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 3 },\r\n ];\r\n\r\n return this.configs;\r\n }\r\n */\r\n /*\r\n public getNavbarConfigs(serviceApiUrl: string): Observable<SmartNavbarConfig[]> {\r\n return this.http.get<SmartNavbarConfig[]>(serviceApiUrl + '/AppModules');\r\n }\r\n */\r\n\r\n public getNavbarConfigs(\r\n serviceApiUrl: string,\r\n ): Observable<SmartNavbarConfig[]> {\r\n const queryString = `\r\n {\r\n findAppModules {\r\n data {\r\n appModuleId\r\n name\r\n url\r\n offenderSpecificFlag\r\n displayOrder\r\n }\r\n }\r\n }`;\r\n\r\n /*\r\n const httpHeaders = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'Cache-Control': 'no-cache'\r\n });\r\n const options = {\r\n headers: httpHeaders\r\n };\r\n */\r\n\r\n return this.http\r\n .post<any>(serviceApiUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n if (isDevMode()) {\r\n console.log(data);\r\n }\r\n return data.findAppModules.data;\r\n }),\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n Input,\r\n ViewChild,\r\n ViewEncapsulation,\r\n Inject,\r\n} from '@angular/core';\r\nimport { MatTabChangeEvent, MatTabGroup } from '@angular/material/tabs';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { SmartNavbarConfig } from './smart-navbar-config';\r\nimport { SmartNavbarService } from './smart-navbar.service';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport {\r\n SelectedOffender,\r\n LoginStaff,\r\n Role,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { Subscription } from 'rxjs';\r\nimport { FormControl } from '@angular/forms';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-smart-navbar',\r\n templateUrl: './smart-navbar.component.html',\r\n styleUrls: ['./smart-navbar.component.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class SmartNavbarComponent implements OnInit, OnDestroy {\r\n @Input() serviceApiUrl: string;\r\n @Input() appModuleId = null;\r\n @ViewChild('tabs') tabGroup: MatTabGroup;\r\n selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n offenderSubscription: Subscription;\r\n staffSubscription: Subscription;\r\n navbarConfigs: SmartNavbarConfig[];\r\n selectedNavbarConfig: SmartNavbarConfig = <SmartNavbarConfig>{};\r\n private readonly ASSESSMENT_MODULE_IDS = new Set(['STATIC99', 'TCU', 'TCUCH']);\r\n\r\n constructor(\r\n private navbarConfigService: SmartNavbarService,\r\n private xdmService: XdmService,\r\n private authnService: MsalService,\r\n ) {}\r\n\r\n\r\n ngOnInit() {\r\n this.xdmService.getSelectedOffender().then((selectedOffender) => {\r\n this.selectedOffender =\r\n selectedOffender && selectedOffender.offenderId\r\n ? selectedOffender\r\n : null;\r\n });\r\n\r\n this.xdmService.getLoginStaff().then((loginStaff) => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n });\r\n\r\n this.offenderSubscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n this.selectedOffender = selectedOffender;\r\n });\r\n\r\n this.staffSubscription = this.xdmService\r\n .getStaffUpdate()\r\n .subscribe((loginStaff) => {\r\n this.loginStaff = loginStaff;\r\n });\r\n this.navbarConfigService\r\n .getNavbarConfigs(this.serviceApiUrl)\r\n .subscribe((configs) => {\r\n this.navbarConfigs = configs.sort((a, b) => {\r\n if (a.displayOrder < b.displayOrder) {\r\n return -1;\r\n } else if (a.displayOrder > b.displayOrder) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n setTimeout(() => {\r\n this.selectedNavbarConfig = this.navbarConfigs.find(\r\n (config) => config.appModuleId === this.appModuleId,\r\n );\r\n }, 100);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.offenderSubscription.unsubscribe();\r\n this.staffSubscription.unsubscribe();\r\n }\r\n\r\n get renderItems(): Array<SmartNavbarConfig | string> {\r\n if (!this.navbarConfigs) return [];\r\n const result: Array<SmartNavbarConfig | string> = [];\r\n let assessmentsInserted = false;\r\n for (const config of this.navbarConfigs) {\r\n if (this.ASSESSMENT_MODULE_IDS.has(config.appModuleId)) {\r\n if (!assessmentsInserted) {\r\n result.push('ASSESSMENTS');\r\n assessmentsInserted = true;\r\n }\r\n } else {\r\n result.push(config);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n get assessmentConfigs(): SmartNavbarConfig[] {\r\n if (!this.navbarConfigs) return [];\r\n return this.navbarConfigs.filter(c => this.ASSESSMENT_MODULE_IDS.has(c.appModuleId));\r\n }\r\n\r\n get showAssessmentsMenu(): boolean {\r\n return this.assessmentConfigs.some(c => this.showTab(c));\r\n }\r\n\r\n get isAssessmentActive(): boolean {\r\n return this.selectedNavbarConfig != null\r\n && this.ASSESSMENT_MODULE_IDS.has(this.selectedNavbarConfig?.appModuleId);\r\n }\r\n\r\n onAssessmentItemClick(config: SmartNavbarConfig): void {\r\n this.selectedNavbarConfig = config;\r\n }\r\n\r\n asConfig(item: SmartNavbarConfig | string): SmartNavbarConfig {\r\n return item as SmartNavbarConfig;\r\n }\r\n\r\n public logout(): void {\r\n this.xdmService.clearAll();\r\n this.authnService.logout();\r\n }\r\n\r\n get isAuthenticated(): boolean {\r\n return this.authnService.instance.getAllAccounts().length > 0;\r\n }\r\n\r\n public getAppModuleUrl(config: SmartNavbarConfig) {\r\n return (config.appModuleId === 'PPMASRVW') ? config.url \r\n : config && this.selectedOffender && (config.appModuleId === 'PPMAS' || config.appModuleId === 'STATIC99' || config.appModuleId === 'TCU' || config.appModuleId === 'TCUCH')\r\n ? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`\r\n : this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`\r\n : config.url;\r\n }\r\n\r\n public hasAppModulePermission(appModuleId) {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.permissions &&\r\n this.loginStaff.permissions.length > 0\r\n ) {\r\n return (\r\n this.loginStaff.permissions.findIndex(\r\n (p) => p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n showTab(config: SmartNavbarConfig) : boolean {\r\n return (\r\n (this.hasExternalUserRole && this.hasAppModulePermission(config.appModuleId)) ||\r\n (!this.hasExternalUserRole && (config.offenderSpecificFlag === false || this.selectedOffender))\r\n ) && this.checkVictimPermission(config) && this.isAuthenticated && !!this.loginStaff\r\n }\r\n\r\n public get hasExternalUserRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n public checkDVIPPermission(config: SmartNavbarConfig) : boolean{\r\n return ((config.appModuleId !== 'DVIP') || (config.appModuleId === \"DVIP\" && this.hasDVIPRole));\r\n }\r\n\r\n public get hasDVIPRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isDVIPRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isDVIPRole(role: Role){\r\n if(role.roleId == 'TSD' || role.roleId == 'TAD' || role.roleId == 'STSD' || role.roleId == 'BC'){\r\n return true\r\n }\r\n return false;\r\n }\r\n\r\n public checkVictimPermission(config: SmartNavbarConfig) : boolean{\r\n return ((config.appModuleId !== 'VICTIM') || (config.appModuleId === \"VICTIM\" && this.hasVictimRole));\r\n }\r\n\r\n public get hasVictimRole() {\r\n if (\r\n this.loginStaff &&\r\n this.loginStaff.roles &&\r\n this.loginStaff.roles.length > 0\r\n ) {\r\n return this.loginStaff.roles.findIndex(this.isVictimRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private isVictimRole(role: Role){\r\n if(role.roleId == 'BC' || role.roleId == 'VSP'){\r\n return true\r\n }\r\n return false;\r\n }\r\n\r\n private isExternalRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n\r\n","\r\n<nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n @for (item of renderItems; track $index) {\r\n @if (item === 'ASSESSMENTS') {\r\n @if (showAssessmentsMenu) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item assessments-menu-trigger\"\r\n [matMenuTriggerFor]=\"assessmentsMenu\"\r\n [active]=\"isAssessmentActive\">\r\n Assessments &#9662;\r\n </a>\r\n <mat-menu #assessmentsMenu=\"matMenu\">\r\n @for (config of assessmentConfigs; track config.appModuleId) {\r\n @if (showTab(config)) {\r\n <a\r\n mat-menu-item\r\n (click)=\"onAssessmentItemClick(config)\"\r\n [href]=\"getAppModuleUrl(config)\">{{ config.name }}</a>\r\n }\r\n }\r\n </mat-menu>\r\n }\r\n } @else {\r\n @if (showTab(asConfig(item))) {\r\n <a\r\n mat-tab-link\r\n class=\"smart-navbar-item\"\r\n (click)=\"selectedNavbarConfig = asConfig(item)\"\r\n [active]=\"selectedNavbarConfig !== null && selectedNavbarConfig?.appModuleId === asConfig(item)?.appModuleId\"\r\n [href]=\"getAppModuleUrl(asConfig(item))\">{{ asConfig(item).name }}</a>\r\n }\r\n }\r\n }\r\n</nav>\r\n<mat-tab-nav-panel #tabPanel></mat-tab-nav-panel>\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\n// import { SmartAuthService } from './smart-auth.service';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SMART_WEB_PORTAL_URL } from '../smart-storage/smart-storage-model';\r\n\r\n@Component({\r\n selector: 'app-smart-error',\r\n templateUrl: './smart-error.component.html',\r\n styleUrls: ['./smart-error.component.css'],\r\n})\r\nexport class SmartErrorComponent implements OnInit {\r\n type: string;\r\n message: string;\r\n\r\n constructor(\r\n private authnService: MsalService,\r\n private route: ActivatedRoute,\r\n @Inject(SMART_WEB_PORTAL_URL) private smartWebPortalUrl: string,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.type = this.route.snapshot.queryParamMap.get('type') || 'staff';\r\n this.message =\r\n this.route.snapshot.queryParamMap.get('message') || 'Error occured.';\r\n }\r\n\r\n logout() {\r\n this.authnService.logout();\r\n }\r\n\r\n portal() {\r\n window.location.href = this.smartWebPortalUrl;\r\n }\r\n}\r\n","<div>\r\n <h2>\r\n {{ message }}\r\n </h2>\r\n <p>\r\n Please contact help desk if needed.\r\n </p>\r\n <div>\r\n <button (click)=\"logout()\" *ngIf=\"type === 'staff'\">OK</button>\r\n <button (click)=\"portal()\" *ngIf=\"type === 'offender'\">OK</button>\r\n </div>\r\n</div>\r\n","import { Injectable, Inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { SMART_DATA_SERVICE_URL } from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable()\r\nexport class SmartStaffOffenderOptionsService {\r\n constructor(\r\n private http: HttpClient,\r\n private matSnackBar: MatSnackBar,\r\n @Inject(SMART_DATA_SERVICE_URL) private serviceApiUrl,\r\n ) {}\r\n\r\n public showMessage(message) {\r\n this.matSnackBar.open(message, null, {\r\n duration: 2000,\r\n });\r\n }\r\n\r\n private convertEmptyToNull(jsonObject: JSON) {\r\n if (!jsonObject) {\r\n return;\r\n }\r\n\r\n if (jsonObject instanceof Array) {\r\n jsonObject.forEach((obj) => {\r\n this.convertEmptyToNull(obj);\r\n });\r\n }\r\n\r\n const keys = Object.keys(jsonObject);\r\n keys.forEach((key) => {\r\n if (typeof jsonObject[key] === 'object') {\r\n this.convertEmptyToNull(jsonObject[key]);\r\n } else if (\r\n typeof jsonObject[key] === 'string' &&\r\n jsonObject[key].trim() === ''\r\n ) {\r\n jsonObject[key] = null;\r\n }\r\n });\r\n }\r\n\r\n private getGraphQueryData(\r\n queryName: string,\r\n queryString: string,\r\n ): Observable<any> {\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }),\r\n );\r\n }\r\n\r\n getOffenderListOptions(): Observable<any> {\r\n const queryString = `{findOffenderListOptions(input:{\r\n where:{\r\n deactivatedDate: null\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n }\r\n } }`;\r\n\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data['findOffenderListOptions'];\r\n }),\r\n );\r\n }\r\n\r\n public getStaffOffenderListOptions(staffId: number): Observable<Array<any>> {\r\n const queryString = `{findStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n }\r\n } }`;\r\n return this.http.post<any>(this.serviceApiUrl, { query: queryString }).pipe(\r\n map(({ data }) => {\r\n return data.findStaffOffenderListOptions.data;\r\n }),\r\n );\r\n }\r\n\r\n saveStaffOffenderListOptionsData(dataToSave: any) {\r\n //}: Observable<any> {\r\n\r\n // this.convertEmptyToNull(dataToSave);\r\n const queryName = 'upsertStaffOffenderListOption';\r\n const query = `mutation {\r\n upsertStaffOffenderListOption(input: ${this.convertToString(\r\n dataToSave,\r\n )}) {\r\n message\r\n }\r\n }`;\r\n\r\n return this.http.post<any>(this.serviceApiUrl, { query });\r\n /*.pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }));*/\r\n }\r\n\r\n convertToString(obj): string {\r\n let result = '';\r\n\r\n if (!obj) {\r\n return result;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n result += ' [';\r\n obj.forEach((eObj) => {\r\n result += this.convertToString(eObj);\r\n });\r\n result += '],';\r\n } else {\r\n result += '{';\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n if (typeof obj[key] === 'object') {\r\n result += key + ':' + this.convertToString(obj[key]);\r\n } else {\r\n if (isNaN(obj[key])) {\r\n result += key + ':\"' + obj[key] + '\",';\r\n } else {\r\n result += key + ':' + obj[key] + ',';\r\n }\r\n }\r\n });\r\n result = result.substring(0, result.length - 1);\r\n result += '},';\r\n }\r\n return result;\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { FormBuilder,\r\n UntypedFormGroup,\r\n UntypedFormControl,\r\n Validators,\r\n ValidatorFn,\r\n AbstractControl,\r\n} from '@angular/forms';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { XdmService} from '../smart-storage/xdm.service';\r\n\r\n@Component({\r\n selector: 'lib-smart-staff-offender-options',\r\n templateUrl: './smart-staff-offender-options.component.html',\r\n styleUrls: ['./smart-staff-offender-options.component.css']\r\n})\r\nexport class SmartStaffOffenderOptionsComponent implements OnInit {\r\n loginStaff: LoginStaff;\r\n offenderListOptions: Array<any> = [];\r\n frmGroup: UntypedFormGroup;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private offenderService: SmartStaffOffenderOptionsService,\r\n private xdmService: XdmService\r\n ) { }\r\n\r\n ngOnInit() {\r\n const routData = this.route.snapshot.data;\r\n this.loginStaff = routData.loginStaff;\r\n this.offenderListOptions = routData.selectedOffenderResolverService;\r\n // Sort by name property (case-insensitive)\r\n this.offenderListOptions.sort((a, b) => \r\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\r\n );\r\n this.frmGroup = this.createForm();\r\n this.offenderService.getStaffOffenderListOptions(this.loginStaff.staffId).subscribe(data => {\r\n this.fillForm(data);\r\n });\r\n }\r\n\r\n private fillForm(data) {\r\n if (data) {\r\n const offenderListOptionsFg = this.frmGroup.get('offenderListOptions');\r\n data.forEach(element => {\r\n offenderListOptionsFg.get(element.offenderListOptionId).setValue(true);\r\n });\r\n }\r\n\r\n }\r\n private createForm() {\r\n const offenderListOptionsFg = new UntypedFormGroup({\r\n });\r\n\r\n this.offenderListOptions.forEach( (dt, i) => {\r\n offenderListOptionsFg.addControl(dt.offenderListOptionId, new UntypedFormControl(false));\r\n });\r\n\r\n return new UntypedFormGroup({\r\n offenderListOptions: offenderListOptionsFg,\r\n });\r\n }\r\n\r\n onSave() {\r\n const data = {\r\n options: [],\r\n staffId: this.loginStaff.staffId,\r\n modifiedBy: this.loginStaff.staffId\r\n };\r\n\r\n const offenderListOptionsVal = this.frmGroup.get('offenderListOptions').value;\r\n const keys = Object.keys(offenderListOptionsVal);\r\n keys.forEach(key => {\r\n if (offenderListOptionsVal[key]) {\r\n data.options.push({'offenderListOptionId': key});\r\n }\r\n });\r\n\r\n this.offenderService.saveStaffOffenderListOptionsData(data).subscribe(rtrDatea=>{\r\n if (rtrDatea.message) {\r\n this.offenderService.showMessage(rtrDatea.message);\r\n } else {\r\n this.offenderService.showMessage('Saved successfully');\r\n this.xdmService.refreshLoginStaffOptions();\r\n }\r\n });\r\n }\r\n onClear(){\r\n this.frmGroup.reset();\r\n }\r\n\r\n\r\n\r\n}\r\n","<form class=\"main-form\" [formGroup]=\"frmGroup\">\r\n <mat-card appearance=\"outlined\" role=\"group\">\r\n <mat-card-content>\r\n <div formGroupName=\"offenderListOptions\">\r\n <div style=\"float:left;\">\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\">\r\n <mat-checkbox *ngIf=\"i%2!=0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n <div>\r\n <div *ngFor=\"let offenderListOption of offenderListOptions; let i = index\" >\r\n <mat-checkbox *ngIf=\"i%2==0\" color=\"primary\" formControlName=\"{{offenderListOption.offenderListOptionId}}\">\r\n {{offenderListOption.name}}\r\n </mat-checkbox> \r\n </div>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n <div align=\"center\">\r\n <button mat-stroked-button (click)=\"onSave()\">Save</button>\r\n &nbsp;&nbsp;\r\n <button mat-stroked-button (click)=\"onClear()\">Clear</button>\r\n </div>\r\n </mat-card>\r\n </form>\r\n ","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable, of, from, throwError, lastValueFrom } from 'rxjs';\r\nimport { map, switchMap, take, catchError} from 'rxjs/operators';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nimport {\r\n LoginStaff,\r\n SelectedOffender,\r\n SMART_DATA_SERVICE_URL,\r\n SMART_DOMAIN_FORMAT,\r\n Role,\r\n Permission,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartAuthService {\r\n loginStaff: LoginStaff;\r\n selectedOffender: SelectedOffender;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private authnService: MsalService,\r\n private xdmService: XdmService,\r\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl,\r\n @Inject(SMART_DOMAIN_FORMAT) private smartDomainFormatUrl: string,\r\n ) {}\r\n\r\n public getLoginStaff(): Observable<LoginStaff> {\r\n if (isDevMode) {\r\n console.log('SmartAuthService - getLoginStaff()');\r\n }\r\n if (!isDevMode && this.loginStaff) {\r\n if (this.loginStaff.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get internal instance in service',\r\n this.loginStaff,\r\n );\r\n }\r\n return of(this.loginStaff);\r\n } else if (this.loginStaff.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(this.loginStaff.userName);\r\n }\r\n }\r\n return from(this.xdmService.getLoginStaff()).pipe(\r\n switchMap((storedResult) => {\r\n if (storedResult && storedResult.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get from session.',\r\n storedResult,\r\n );\r\n }\r\n this.loginStaff = storedResult;\r\n return of(storedResult);\r\n } else if (storedResult && storedResult.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(storedResult.userName);\r\n } else {\r\n const userName = this.userName;\r\n const staffName = userName.substring(0, userName.indexOf('@'));\r\n if (isDevMode) {\r\n console.log(\r\n '##### loginLoginStaff(): get using login staff name ',\r\n staffName,\r\n );\r\n }\r\n return this.getStaff(staffName);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n get userName(): string {\r\n if (this.authnService.instance.getAllAccounts().length > 0) {\r\n const account = this.authnService.instance.getAllAccounts()[0];\r\n return account.username;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private getTeamUrl(app: string, afterHash: string): string {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) + afterHash;\r\n }\r\n private isSameHost(url, app) {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) === url;\r\n }\r\n\r\n public redirectToTeam(loginStaff: LoginStaff) {\r\n if (loginStaff.roles.findIndex((role) => role.roleId === 'EUUSPC') > -1) {\r\n if (!this.isSameHost(window.location.origin, 'investigation')) {\r\n window.location.href = this.getTeamUrl('investigation', '/assignment');\r\n }\r\n } else if (\r\n loginStaff.roles.findIndex(\r\n (role) => role.roleId.substring(0, 3) === 'RSC',\r\n ) > -1\r\n ) {\r\n if (!this.isSameHost(window.location.origin, 'rsc')) {\r\n window.location.href = this.getTeamUrl('rsc', '/offender-list');\r\n }\r\n }\r\n }\r\n\r\n public async setSelectedOffender(selectedOffender: SelectedOffender) {\r\n if (!this.loginStaff) {\r\n return;\r\n }\r\n\r\n if (selectedOffender) {\r\n // if (!selectedOffender.assignmentStaffRelationId) {\r\n const relation = await lastValueFrom(\r\n this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n selectedOffender.offenderId,\r\n ),\r\n );\r\n if (relation) {\r\n selectedOffender.assignmentStaffRelationId = relation;\r\n } else {\r\n selectedOffender.assignmentStaffRelationId = 'NOASSIGN';\r\n }\r\n // }\r\n }\r\n this.xdmService.setSelectedOffender(selectedOffender);\r\n this.selectedOffender = selectedOffender;\r\n }\r\n\r\n public logout(): void {\r\n this.xdmService.clearAll();\r\n this.authnService.logout();\r\n }\r\n\r\n public async setPermission(\r\n appModuleId: string,\r\n route: ActivatedRouteSnapshot,\r\n ) {\r\n if (!this.loginStaff) {\r\n this.loginStaff = await this.xdmService.getLoginStaff();\r\n }\r\n const permissions = this.loginStaff.permissions;\r\n const resource =\r\n route.url && route.url.length > 0 ? route.url[0]!.path : '';\r\n\r\n if (!this.selectedOffender) {\r\n this.selectedOffender = await this.xdmService.getSelectedOffender();\r\n }\r\n\r\n if (this.selectedOffender) {\r\n // if (!this.selectedOffender.assignmentStaffRelationId) {\r\n const relation = await this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n this.selectedOffender.offenderId,\r\n ).toPromise();\r\n if (relation) {\r\n this.selectedOffender.assignmentStaffRelationId = relation;\r\n } else {\r\n this.selectedOffender.assignmentStaffRelationId = 'NOASSIGN';\r\n }\r\n this.xdmService.setSelectedOffender(this.selectedOffender);\r\n // }\r\n }\r\n\r\n const assignmentStaffRelationId =\r\n this.selectedOffender.assignmentStaffRelationId;\r\n\r\n const elements = document.querySelectorAll('[class^=\"sac-\"]');\r\n const pattern = /^sac-(\\S+)-(\\S+)$/i;\r\n\r\n Array.from(elements).forEach((element) => {\r\n let hide;\r\n let disable;\r\n element.classList.forEach((c) => {\r\n const results = c.match(pattern);\r\n // console.log(results);\r\n if (results && results.length > 2) {\r\n const roleId = results[1] ? results[1].toUpperCase() : null;\r\n const right = results[2];\r\n // console.log(results[0]);\r\n // console.log(results[1]);\r\n // console.log(results[2]);\r\n const permission = permissions.find(function (p) {\r\n return (\r\n p.appModuleId === appModuleId &&\r\n p.resource === resource &&\r\n p.roleId === roleId &&\r\n p.assignmentStaffRelationId === assignmentStaffRelationId\r\n );\r\n });\r\n /*\r\n console.log('##### setPermission() resource: ', resource);\r\n console.log('##### setPermission() appModuleId: ', appModuleId);\r\n console.log('##### setPermission() roleId: ', roleId);\r\n console.log(\r\n '##### setPermission() assignment relation: ',\r\n assignmentStaffRelationId,\r\n );\r\n */\r\n console.log('##### Matched permission: ', permission);\r\n\r\n if (permission) {\r\n if (right === 'read') {\r\n if (!permission.readFlag) {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else {\r\n hide = false;\r\n }\r\n } else if (\r\n (right === 'create' && !permission.createFlag) ||\r\n (right === 'update' && !permission.updateFlag) ||\r\n (right === 'delete' && !permission.deleteFlag) ||\r\n (right === 'assign' && !permission.assignFlag) ||\r\n (right === 'close' && !permission.closeFlag) ||\r\n (right === 'expunge' && !permission.expungeFlag) ||\r\n (right === 'reopen' && !permission.reopenFlag)\r\n ) {\r\n if (element.nodeName === 'BUTTON') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else {\r\n if (disable !== false) {\r\n disable = true;\r\n }\r\n }\r\n } else {\r\n if (element.nodeName === 'BUTTON') {\r\n hide = false;\r\n } else {\r\n disable = false;\r\n }\r\n }\r\n } else {\r\n if (right === 'read') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else if (element.nodeName === 'BUTTON') {\r\n if (hide !== false) {\r\n hide = true;\r\n }\r\n } else if (disable !== false) {\r\n disable = true;\r\n }\r\n }\r\n }\r\n });\r\n console.log('hide: ', hide);\r\n console.log('disable: ', disable);\r\n if (hide === true) {\r\n this.hideHtmlElement(element);\r\n } else if (disable === true) {\r\n this.disableHtmlElement(element);\r\n }\r\n });\r\n }\r\n\r\n public checkPermission(accessControlConfig: SmartAccessControlConfig) {\r\n const selData = accessControlConfig.route.data;\r\n this.loginStaff = selData.loginStaff;\r\n this.selectedOffender = selData.selectedOffender;\r\n \r\n let routePath = '';\r\n if (accessControlConfig.route.url && accessControlConfig.route.url.length > 0) {\r\n routePath = accessControlConfig.route.url[0]!.path;\r\n }\r\n \r\n const permissions = this.loginStaff.permissions;\r\n const resource = routePath;\r\n const roleId = accessControlConfig.roleId?.toUpperCase() || null;\r\n const accessType = accessControlConfig.accessType;\r\n const assignmentStaffRelationId = this.selectedOffender?.assignmentStaffRelationId || 'N/A';\r\n \r\n // Find matching permissions (prioritize specific role over aggregated)\r\n const specificPermission = permissions.find(p => \r\n p.appModuleId === accessControlConfig.appModuleId &&\r\n p.resource.trim() === resource &&\r\n p.roleId.trim().toUpperCase() === roleId &&\r\n (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId)\r\n );\r\n \r\n const aggregatedPermission = permissions.find(p => \r\n p.appModuleId === accessControlConfig.appModuleId &&\r\n p.resource.trim() === resource &&\r\n p.roleId.trim() === '*' &&\r\n (p.assignmentStaffRelationId === 'N/A' || p.assignmentStaffRelationId === assignmentStaffRelationId)\r\n );\r\n \r\n const permission = specificPermission || aggregatedPermission;\r\n \r\n if (!permission) return false;\r\n \r\n const flagMap = {\r\n 'read': permission.readFlag,\r\n 'create': permission.createFlag,\r\n 'update': permission.updateFlag,\r\n 'delete': permission.deleteFlag,\r\n 'assign': permission.assignFlag,\r\n 'close': permission.closeFlag,\r\n 'expunge': permission.expungeFlag,\r\n 'reopen': permission.reopenFlag\r\n };\r\n \r\n return !!flagMap[accessType];\r\n}\r\n\r\n public canAppFeatureActivate(\r\n loginStaff: LoginStaff,\r\n feature: string,\r\n appModuleId = null,\r\n ) {\r\n // if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {\r\n // return true;\r\n // }\r\n return this.hasAppFeaturePermission(\r\n loginStaff.permissions,\r\n feature,\r\n appModuleId,\r\n );\r\n }\r\n\r\n // public isAuthEnable(roles: Role[], appModuleId: string) {\r\n // if (roles && roles.length > 0) {\r\n // return roles.map(r => r.roleId).findIndex(this.isExternalRole) > -1 || appModuleId === 'RR';\r\n // }\r\n // return false;\r\n // }\r\n\r\n public hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private hasAppFeaturePermission(\r\n permissions: Permission[],\r\n feature: string,\r\n appModuleId: string,\r\n ) {\r\n if (permissions && permissions.length > 0) {\r\n if (appModuleId) {\r\n return (\r\n permissions.findIndex(\r\n (p) => p.resource === feature && p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n } else {\r\n return permissions.findIndex((p) => p.resource === feature) > -1;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isExternalRole(roleId) {\r\n switch (roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private disableHtmlElement(element: Element): void {\r\n // console.log(element);\r\n switch (element.nodeName) {\r\n case 'A':\r\n element.setAttribute(\r\n 'style',\r\n 'pointer-events: none;cursor: not-allowed;',\r\n );\r\n element.setAttribute('tabIndex', '-1');\r\n break;\r\n default:\r\n element.setAttribute('disabled', 'disabled');\r\n break;\r\n }\r\n }\r\n\r\n private hideHtmlElement(element: Element): void {\r\n // element.setAttribute('hidden', 'hidden');\r\n element.setAttribute('style', 'display: none;');\r\n }\r\n\r\n private getStaff(userName: string): Observable<LoginStaff> {\r\n return this.query<any>({\r\n query: this.findStaffQuery,\r\n variables: {\r\n input: {\r\n where: {\r\n userName: userName,\r\n activeFlag: true,\r\n },\r\n }\r\n },\r\n }).pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log('##### getStaff() from service ', result);\r\n }\r\n if (result.findvStaffs.data.length > 0) {\r\n const data = result.findvStaffs.data[0];\r\n this.xdmService.setLoginStaff(data);\r\n this.loginStaff = data;\r\n return data;\r\n } else {\r\n return of(null);\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('error ' + error);\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private query<T>(options: {\r\n query: string;\r\n variables?: { [key: string]: any };\r\n }): Observable<T> {\r\n return this.http\r\n .post<{ data: T }>(\r\n this.smartDataServiceUrl,\r\n {\r\n query: options.query,\r\n variables: options.variables,\r\n },\r\n {\r\n headers: new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n 'No-Auth': 'True',\r\n }),\r\n }\r\n )\r\n .pipe(map((d) => d.data));\r\n }\r\n\r\n private get findStaffQuery(){\r\n return `\r\n query findvStaffs($input: vStaffMultiInput) {\r\n findvStaffs(input: $input) {\r\n totalCount\r\n message\r\n data {\r\n staffId\r\n userName\r\n lastName\r\n firstName\r\n phone\r\n email\r\n roles {\r\n roleId\r\n role\r\n organizationId\r\n organization\r\n }\r\n permissions {\r\n roleId\r\n appModuleId\r\n resource\r\n assignmentStaffRelationId\r\n readFlag\r\n createFlag\r\n updateFlag\r\n deleteFlag\r\n assignFlag\r\n reopenFlag\r\n closeFlag\r\n expungeFlag\r\n }\r\n options {\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n selectedFlag\r\n }\r\n }\r\n }\r\n }\r\n `;\r\n }\r\n\r\n private getStaffOffenderRelation(\r\n staffId: number,\r\n offenderId: number,\r\n ): Observable<string> {\r\n const queryString = `\r\n {\r\n findvStaffOffenderRelations(input: {where: {staffId: ${staffId}, offenderId: ${offenderId}}}) {\r\n data {\r\n assignmentStaffRelationId\r\n }\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getStaffOffenderRelation() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvStaffOffenderRelations.data.length > 0) {\r\n const data = result.data.findvStaffOffenderRelations.data[0];\r\n return data.assignmentStaffRelationId;\r\n } else {\r\n return null;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('error ' + error);\r\n return null;\r\n }),\r\n );\r\n }\r\n\r\n private getRolePermissions(\r\n appModuleId: string,\r\n resource: string,\r\n ): Observable<boolean> {\r\n const queryString = `\r\n query findvRolePermissionPivots{\r\n findvRolePermissionPivots(input: {where: {appModuleId: ${appModuleId}, resource: ${resource}}}){\r\n totalCount\r\n message\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### findvRolePermissionPivots() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvRolePermissionPivots.totalCount > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error: any) => {\r\n console.log('error ' + error);\r\n return throwError(error);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n\r\n@Directive({\r\n selector: '[accessControl]',\r\n})\r\nexport class SmartAccessControlDirective implements OnInit {\r\n @Input() accessControlConfig: SmartAccessControlConfig;\r\n constructor(\r\n private elementRef: ElementRef,\r\n private auth: SmartAuthService,\r\n ) {}\r\n\r\n public ngOnInit() {\r\n this.checkAccess();\r\n }\r\n\r\n checkAccess() {\r\n if (\r\n !this.accessControlConfig ||\r\n !this.accessControlConfig.route ||\r\n !this.accessControlConfig.route.data ||\r\n !this.accessControlConfig.route.data.loginStaff\r\n ) {\r\n return;\r\n }\r\n\r\n // const loginStaff = this.accessControlConfig.route.data.loginStaff;\r\n // if (!this.auth.isAuthEnable(loginStaff.roles, this.accessControlConfig.appModuleId)) {\r\n // return;\r\n // }\r\n this.elementRef.nativeElement.style.display = this.auth.checkPermission(\r\n this.accessControlConfig\r\n )\r\n ? 'block'\r\n : 'none';\r\n }\r\n}\r\n","// smart-authorization.service\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Router } from '@angular/router';\r\nimport { take, mergeMap, catchError } from 'rxjs/operators';\r\nimport { of, Observable } from 'rxjs';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { SmartAuthService } from './smart-auth.service';\r\n\r\n@Injectable()\r\nexport class SmartAuthorizationGuard {\r\n loginStaff: LoginStaff;\r\n\r\n constructor(public authnService: SmartAuthService) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot) {\r\n return this.authnService.getLoginStaff().pipe(\r\n take(1),\r\n mergeMap((loginStaff) => {\r\n if (!loginStaff || !route || !route.routeConfig) {\r\n return of(false);\r\n }\r\n // if (!this.authnService.isAuthEnable(loginStaff.roles, null)) {\r\n // return of(true);\r\n // }\r\n const resource = route.routeConfig.path\r\n ? route.routeConfig.path.split('/')[0]\r\n : '';\r\n const isFeatureValid = this.authnService.canAppFeatureActivate(\r\n loginStaff,\r\n resource,\r\n );\r\n return of(isFeatureValid);\r\n }),\r\n catchError((error) => {\r\n return of(false);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SmartOffenderRedirectGuard {\r\n constructor(private router: Router) {}\r\n\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): boolean {\r\n const targetRoute = route.data['routeTo'];\r\n const queryParams = route.parent?.queryParams;\r\n if (targetRoute) {\r\n this.router.navigate([targetRoute], { queryParams: queryParams });\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\n\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { SmartOffenderHeaderComponent } from './smart-offender-header/smart-offender-header.component';\r\nimport { SmartNavbarComponent } from './smart-navbar/smart-navbar.component';\r\nimport { SmartNavbarService } from './smart-navbar/smart-navbar.service';\r\nimport { SmartErrorComponent } from './smart-auth/smart-error.component';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { SmartOffenderHeaderService } from './smart-offender-header/smart-offender-header.service';\r\nimport { SmartStaffOffenderOptionsComponent } from './smart-staff-offender-options/smart-staff-offender-options.component';\r\n// import { SmartStaffOffenderOptionsComponent } from './smart-staff-offender-options/smart-staff-offender-options.component';\r\nimport { SmartStaffOffenderOptionsService } from './smart-staff-offender-options/smart-staff-offender-options.service';\r\nimport { SmartAccessControlDirective } from './smart-auth/smart-access-control.directive';\r\nimport { SmartAuthorizationGuard } from './smart-auth/smart-authorization-guard.service';\r\nimport { SmartOffenderRedirectGuard } from './smart-offender-header/smart-offender-redirect.guard';\r\n\r\n@NgModule({\r\n declarations: [\r\n SmartOffenderHeaderComponent,\r\n SmartNavbarComponent,\r\n SmartErrorComponent,\r\n SmartStaffOffenderOptionsComponent,\r\n SmartAccessControlDirective,\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n MatButtonModule,\r\n MatMenuModule,\r\n MatTabsModule,\r\n MatSelectModule,\r\n MatCardModule,\r\n MatCheckboxModule,\r\n ReactiveFormsModule,\r\n ],\r\n exports: [\r\n SmartOffenderHeaderComponent,\r\n SmartNavbarComponent,\r\n SmartErrorComponent,\r\n SmartStaffOffenderOptionsComponent,\r\n SmartAccessControlDirective,\r\n ],\r\n providers: [\r\n SmartNavbarService,\r\n SmartOffenderHeaderService,\r\n SmartStaffOffenderOptionsService,\r\n SmartAuthorizationGuard,\r\n MatSnackBar,\r\n SmartOffenderRedirectGuard\r\n ],\r\n})\r\nexport class NgcSmartCoreModule {}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, EMPTY, of, throwError } from 'rxjs';\r\nimport { mergeMap, catchError, take } from 'rxjs/operators';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoginStaffResolverService {\r\n constructor(\r\n private authnService: SmartAuthService,\r\n // private zone: NgZone,\r\n private router: Router,\r\n ) {}\r\n\r\n resolve(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<LoginStaff> | Observable<never> {\r\n return this.authnService.getLoginStaff().pipe(\r\n take(1),\r\n mergeMap((loginStaff) => {\r\n if (isDevMode) {\r\n console.log('LoginStaffResolverService: ', loginStaff);\r\n }\r\n if (loginStaff) {\r\n return of(loginStaff);\r\n } else {\r\n return throwError('Not authorized to access SMART.');\r\n // return EMPTY;\r\n /*\r\n this.zone.run(() => {\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: {\r\n type: 'staff',\r\n message: 'Not authorized to access SMART.'\r\n }\r\n });\r\n });\r\n return EMPTY;\r\n */\r\n }\r\n }),\r\n catchError((error) => {\r\n console.log('LoginStaffResolverService: ' + error);\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: {\r\n type: 'staff',\r\n message: 'SMART Authentication: ' + error,\r\n },\r\n });\r\n return EMPTY;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, from, of, EMPTY, throwError, concat } from 'rxjs';\r\nimport {\r\n catchError,\r\n mergeMap,\r\n take,\r\n retryWhen,\r\n delay,\r\n} from 'rxjs/operators';\r\nimport { SelectedOffender } from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SelectedOffenderResolverService\r\n {\r\n constructor(\r\n private service: XdmService,\r\n private zone: NgZone,\r\n private router: Router,\r\n ) {}\r\n resolve(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<SelectedOffender> | Observable<never> {\r\n let offenderId: number | null = null;\r\n let intakeFlag: boolean = false;\r\n if(route) {\r\n if(route.queryParams[\"offenderId\"])\r\n offenderId = parseInt(route.queryParams[\"offenderId\"]);\r\n if(route.queryParams[\"intakeFlag\"])\r\n intakeFlag = route.queryParams[\"intakeFlag\"] == \"true\";\r\n }\r\n return from(this.service.getSelectedOffender()).pipe(\r\n mergeMap((selectedOffender) => {\r\n if (isDevMode) {\r\n console.log(selectedOffender);\r\n }\r\n if(offenderId && offenderId > 0 && (!selectedOffender || (selectedOffender && selectedOffender.offenderId !== offenderId))) {\r\n return this.service.setSelectedOffenderFromRoute(offenderId, intakeFlag);\r\n }\r\n if(selectedOffender) {\r\n return of(selectedOffender);\r\n }\r\n return throwError(() => new Error('No offender selected.'));\r\n }),\r\n retryWhen((errors) =>\r\n errors.pipe(\r\n // tap(() => console.log('Retry getting selected offender.')),\r\n delay(1000),\r\n take(5),\r\n (o) =>\r\n concat(\r\n o,\r\n throwError(() => new Error('No offender selected (failed after retries).')),\r\n ),\r\n ),\r\n ),\r\n catchError((error) => {\r\n /*\r\n this.zone.run(() => {\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: { type: 'offender', message: error }\r\n });\r\n });\r\n */\r\n this.router.navigate(['/smart-error'], {\r\n queryParams: { type: 'offender', message: error },\r\n });\r\n return EMPTY;\r\n }),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartStaffOffenderOptionsResolverService {\r\n constructor(private offenderService: SmartStaffOffenderOptionsService) {}\r\n resolve() {\r\n return this.offenderService.getOffenderListOptions()\r\n .pipe(\r\n map(({ data }) => {\r\n return data;\r\n }),\r\n );\r\n }\r\n }\r\n","import { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nexport interface SmartAccessControlConfig {\r\n appModuleId: string;\r\n route: ActivatedRouteSnapshot;\r\n accessType: AccessType;\r\n roleId: string;\r\n}\r\n\r\nexport enum AccessType {\r\n READ = 'read',\r\n CREATE = 'create',\r\n UPDATE = 'update',\r\n DELETE = 'delete',\r\n EXPUNGE = 'expunge',\r\n ASSIGN = 'assign',\r\n REOPEN = 'reopen',\r\n CLOSE = 'close'\r\n}\r\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { SMART_DATA_SERVICE_URL } from '../smart-storage/smart-storage-model';\n\nexport interface StaffSetting {\n staffSettingId: string;\n settingKey: string;\n settingValue: string;\n modifiedBy: string;\n}\n\nexport interface DefaultSetting {\n defaultSettingId: string;\n settingValue: string;\n}\n\nexport interface CreateStaffSettingInput {\n staffId: number;\n settingKey: string;\n settingValue: string;\n modifiedBy: number;\n}\n\nexport interface UpdateStaffSettingInput {\n where: {\n staffSettingId: number;\n };\n data: {\n staffId: number;\n settingKey: string;\n settingValue: string;\n modifiedBy: number;\n };\n}\n\nexport interface StaffSettingResponse {\n data: {\n staffSettingId: number;\n staffId?: number;\n settingKey: string;\n settingValue: string;\n };\n message: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSettingsService {\n constructor(\n private httpClient: HttpClient,\n @Inject(SMART_DATA_SERVICE_URL) private smartDataServiceUrl: string\n ) {}\n\n /**\n * Fetches staff settings for a given staff ID\n * @param staffId The ID of the staff member\n * @returns Observable of staff settings array\n */\n findStaffSettings(staffId: string): Observable<StaffSetting[]> {\n const query = `{\n findStaffSettings(input: { where: { staffId: ${staffId} } }) {\n data {\n staffSettingId\n settingKey\n settingValue\n modifiedBy\n }\n }\n }`;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query }).pipe(\n map(response => response?.data?.findStaffSettings?.data || []),\n catchError(error => {\n console.error('Error fetching staff settings:', error);\n return of([]);\n })\n );\n }\n\n /**\n * Fetches default settings\n * @returns Observable of default settings array\n */\n findDefaultSettings(): Observable<DefaultSetting[]> {\n const query = `{\n findDefaultSettings {\n data {\n defaultSettingId\n settingValue\n }\n }\n }`;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, { query }).pipe(\n map(response => response?.data?.findDefaultSettings?.data || []),\n catchError(error => {\n console.error('Error fetching default settings:', error);\n return of([]);\n })\n );\n }\n\n /**\n * Creates a new staff setting\n * @param input The staff setting data to create\n * @returns Observable with the created staff setting\n */\n createStaffSetting(input: CreateStaffSettingInput): Observable<StaffSettingResponse> {\n const mutation = `\n mutation CreateStaffSetting($input: CreateStaffSettingInput!) {\n createStaffSetting(input: $input) {\n data {\n staffSettingId\n settingKey\n settingValue\n }\n message\n }\n }\n `;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, {\n query: mutation,\n variables: { input }\n }).pipe(\n map(response => response?.data?.createStaffSetting || { data: null, message: '' }),\n catchError(error => {\n console.error('Error creating staff setting:', error);\n return of({ data: null, message: 'Failed to create staff setting' });\n })\n );\n }\n\n /**\n * Updates an existing staff setting\n * @param input The update data and conditions\n * @returns Observable with the updated staff setting\n */\n updateStaffSetting(input: UpdateStaffSettingInput): Observable<StaffSettingResponse> {\n const mutation = `\n mutation UpdateStaffSetting($input: UpdateStaffSettingInput!) {\n updateStaffSetting(input: $input) {\n data {\n staffSettingId\n staffId\n settingKey\n settingValue\n }\n message\n }\n }\n `;\n\n return this.httpClient.post<any>(this.smartDataServiceUrl, {\n query: mutation,\n variables: { input }\n }).pipe(\n map(response => response?.data?.updateStaffSetting || { data: null, message: '' }),\n catchError(error => {\n console.error('Error updating staff setting:', error);\n return of({ data: null, message: 'Failed to update staff setting' });\n })\n );\n }\n}\n","/*\r\n * Public API Surface of ngc-smart-core\r\n */\r\n\r\nexport * from './lib/ngc-smart-core.module';\r\nexport * from './lib/smart-auth/smart-auth.service';\r\nexport * from './lib/smart-auth/smart-login-staff-resolver.service';\r\nexport * from './lib/smart-auth/smart-selected-offender-resolver.service';\r\nexport * from './lib/smart-auth/smart-error.component';\r\nexport * from './lib/smart-navbar/smart-navbar.service';\r\nexport * from './lib/smart-navbar/smart-navbar-config';\r\nexport * from './lib/smart-storage/xdm.service';\r\nexport * from './lib/smart-storage/smart-storage-model';\r\nexport * from './lib/smart-staff-offender-options/smart-staff-offender-options.component';\r\nexport * from './lib/smart-offender-header/smart-offender-header.component';\r\nexport * from './lib/smart-offender-header/smart-offender-redirect.guard';\r\nexport * from './lib/smart-auth/smart-access-control.directive';\r\nexport * from './lib/smart-navbar/smart-navbar.component';\r\nexport * from './lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service';\r\nexport * from './lib/smart-auth/smart-access-control-config';\r\nexport * from './lib/smart-auth/smart-authorization-guard.service';\r\nexport * from './lib/user-settings/user-settings.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.XdmService","i3.SmartOffenderHeaderService","i4","i9","i1.SmartNavbarService","i2.XdmService","i3","i5","i1","i2.SmartStaffOffenderOptionsService","i3.XdmService","i6","i7","i8","i1.SmartAuthService","i2","i1.SmartStaffOffenderOptionsService"],"mappings":"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"}
@@ -20,9 +20,16 @@ export declare class SmartNavbarComponent implements OnInit, OnDestroy {
20
20
  staffSubscription: Subscription;
21
21
  navbarConfigs: SmartNavbarConfig[];
22
22
  selectedNavbarConfig: SmartNavbarConfig;
23
+ private readonly ASSESSMENT_MODULE_IDS;
23
24
  constructor(navbarConfigService: SmartNavbarService, xdmService: XdmService, authnService: MsalService);
24
25
  ngOnInit(): void;
25
26
  ngOnDestroy(): void;
27
+ get renderItems(): Array<SmartNavbarConfig | string>;
28
+ get assessmentConfigs(): SmartNavbarConfig[];
29
+ get showAssessmentsMenu(): boolean;
30
+ get isAssessmentActive(): boolean;
31
+ onAssessmentItemClick(config: SmartNavbarConfig): void;
32
+ asConfig(item: SmartNavbarConfig | string): SmartNavbarConfig;
26
33
  logout(): void;
27
34
  get isAuthenticated(): boolean;
28
35
  getAppModuleUrl(config: SmartNavbarConfig): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@csmart/ngc-smart-core",
3
- "version": "1.18.20",
3
+ "version": "1.18.22",
4
4
  "repository": "https://csosadev@dev.azure.com/csosadev/ngc-smart-core/_git/ngc-smart-core",
5
5
  "author": "Rick",
6
6
  "license": "MIT",