@csmart/ngc-smart-core 1.15.8 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/{esm2020 → esm2022}/csmart-ngc-smart-core.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/ngc-smart-core.module.mjs +98 -98
  3. package/{esm2020 → esm2022}/lib/smart-auth/smart-access-control-config.mjs +11 -11
  4. package/esm2022/lib/smart-auth/smart-access-control.directive.mjs +39 -0
  5. package/esm2022/lib/smart-auth/smart-auth.service.mjs +504 -0
  6. package/esm2022/lib/smart-auth/smart-authorization-guard.service.mjs +35 -0
  7. package/{esm2020 → esm2022}/lib/smart-auth/smart-error.component.mjs +37 -37
  8. package/esm2022/lib/smart-auth/smart-login-staff-resolver.service.mjs +59 -0
  9. package/esm2022/lib/smart-auth/smart-selected-offender-resolver.service.mjs +60 -0
  10. package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar-config.mjs +1 -1
  11. package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +174 -0
  12. package/esm2022/lib/smart-navbar/smart-navbar.service.mjs +63 -0
  13. package/esm2022/lib/smart-offender-header/smart-offender-header.component.mjs +151 -0
  14. package/{esm2020 → esm2022}/lib/smart-offender-header/smart-offender-header.service.mjs +29 -29
  15. package/esm2022/lib/smart-offender-header/smart-offender-redirect.guard.mjs +27 -0
  16. package/{esm2020 → esm2022}/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.mjs +25 -25
  17. package/esm2022/lib/smart-staff-offender-options/smart-staff-offender-options.component.mjs +78 -0
  18. package/esm2022/lib/smart-staff-offender-options/smart-staff-offender-options.service.mjs +132 -0
  19. package/esm2022/lib/smart-storage/smart-storage-model.mjs +30 -0
  20. package/esm2022/lib/smart-storage/xdm.service.mjs +201 -0
  21. package/{esm2020 → esm2022}/public-api.mjs +20 -20
  22. package/{fesm2020 → fesm2022}/csmart-ngc-smart-core.mjs +1467 -1467
  23. package/{fesm2015 → fesm2022}/csmart-ngc-smart-core.mjs.map +1 -1
  24. package/index.d.ts +5 -5
  25. package/lib/ngc-smart-core.module.d.ts +20 -20
  26. package/lib/smart-auth/smart-access-control-config.d.ts +17 -17
  27. package/lib/smart-auth/smart-access-control.directive.d.ts +14 -14
  28. package/lib/smart-auth/smart-auth.service.d.ts +41 -41
  29. package/lib/smart-auth/smart-authorization-guard.service.d.ts +13 -13
  30. package/lib/smart-auth/smart-error.component.d.ts +17 -17
  31. package/lib/smart-auth/smart-login-staff-resolver.service.d.ts +13 -13
  32. package/lib/smart-auth/smart-selected-offender-resolver.service.d.ts +15 -15
  33. package/lib/smart-navbar/smart-navbar-config.d.ts +7 -7
  34. package/lib/smart-navbar/smart-navbar.component.d.ts +42 -42
  35. package/lib/smart-navbar/smart-navbar.service.d.ts +12 -12
  36. package/lib/smart-offender-header/smart-offender-header.component.d.ts +32 -32
  37. package/lib/smart-offender-header/smart-offender-header.service.d.ts +18 -18
  38. package/lib/smart-offender-header/smart-offender-redirect.guard.d.ts +9 -9
  39. package/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.d.ts +10 -11
  40. package/lib/smart-staff-offender-options/smart-staff-offender-options.component.d.ts +22 -22
  41. package/lib/smart-staff-offender-options/smart-staff-offender-options.service.d.ts +19 -19
  42. package/lib/smart-storage/smart-storage-model.d.ts +58 -58
  43. package/lib/smart-storage/xdm.service.d.ts +43 -43
  44. package/package.json +5 -11
  45. package/public-api.d.ts +17 -17
  46. package/esm2020/lib/smart-auth/smart-access-control.directive.mjs +0 -39
  47. package/esm2020/lib/smart-auth/smart-auth.service.mjs +0 -504
  48. package/esm2020/lib/smart-auth/smart-authorization-guard.service.mjs +0 -35
  49. package/esm2020/lib/smart-auth/smart-login-staff-resolver.service.mjs +0 -59
  50. package/esm2020/lib/smart-auth/smart-selected-offender-resolver.service.mjs +0 -60
  51. package/esm2020/lib/smart-navbar/smart-navbar.component.mjs +0 -174
  52. package/esm2020/lib/smart-navbar/smart-navbar.service.mjs +0 -63
  53. package/esm2020/lib/smart-offender-header/smart-offender-header.component.mjs +0 -151
  54. package/esm2020/lib/smart-offender-header/smart-offender-redirect.guard.mjs +0 -27
  55. package/esm2020/lib/smart-staff-offender-options/smart-staff-offender-options.component.mjs +0 -78
  56. package/esm2020/lib/smart-staff-offender-options/smart-staff-offender-options.service.mjs +0 -132
  57. package/esm2020/lib/smart-storage/smart-storage-model.mjs +0 -30
  58. package/esm2020/lib/smart-storage/xdm.service.mjs +0 -201
  59. package/fesm2015/csmart-ngc-smart-core.mjs +0 -1670
  60. package/fesm2020/csmart-ngc-smart-core.mjs.map +0 -1
@@ -1,1670 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { InjectionToken, isDevMode, Injectable, Inject, Component, ViewEncapsulation, Input, ViewChild, Directive, NgModule } from '@angular/core';
3
- import * as i4 from '@angular/common';
4
- import { DOCUMENT, CommonModule } from '@angular/common';
5
- import * as i5 from '@angular/material/button';
6
- import { MatButtonModule } from '@angular/material/button';
7
- import * as i6$1 from '@angular/material/tabs';
8
- import { MatTabsModule } from '@angular/material/tabs';
9
- import * as i7 from '@angular/material/select';
10
- import { MatSelectModule } from '@angular/material/select';
11
- import * as i7$1 from '@angular/material/checkbox';
12
- import { MatCheckboxModule } from '@angular/material/checkbox';
13
- import * as i6$2 from '@angular/material/card';
14
- import { MatCardModule } from '@angular/material/card';
15
- import * as i2$2 from '@angular/material/snack-bar';
16
- import { MatSnackBar } from '@angular/material/snack-bar';
17
- import { MatMenuModule } from '@angular/material/menu';
18
- import * as i1 from '@angular/common/http';
19
- import { HttpHeaders, HttpClientModule } from '@angular/common/http';
20
- import * as i8$1 from '@angular/forms';
21
- import { UntypedFormControl, FormControl, UntypedFormGroup, ReactiveFormsModule } from '@angular/forms';
22
- import { Subject, from, of, lastValueFrom, throwError, EMPTY, concat } from 'rxjs';
23
- import { map, switchMap, catchError, take, mergeMap, retryWhen, delay } from 'rxjs/operators';
24
- import { connectToChild } from 'penpal';
25
- import * as i2 from '@azure/msal-angular';
26
- import * as i2$1 from '@angular/router';
27
- import * as i6 from '@angular/material/form-field';
28
- import * as i8 from '@angular/material/core';
29
- import { __awaiter } from 'tslib';
30
-
31
- class Permission {
32
- }
33
- class Role {
34
- }
35
- class Option {
36
- }
37
- class LoginStaff {
38
- constructor() {
39
- this.selectedRole = '*';
40
- }
41
- }
42
- class SelectedOffender {
43
- constructor() {
44
- this.intakeFlag = false;
45
- }
46
- }
47
- class OffenderQuery {
48
- }
49
- class StorageKey {
50
- }
51
- StorageKey.selectedOffender = 'smart-selected-offender';
52
- StorageKey.loginStaff = 'smart-login-staff';
53
- StorageKey.offenderQuery = 'smart-offender-query';
54
- const SMART_WEB_STORAGE_LISTENER_URL = new InjectionToken('SMART Web Storage Listener URL');
55
- const SMART_WEB_PORTAL_URL = new InjectionToken('SMART Web Portal URL');
56
- const SMART_DATA_SERVICE_URL = new InjectionToken('SMART Data Service URL');
57
- //exception for redirection
58
- const SMART_DOMAIN_FORMAT = new InjectionToken('SMART Domain Format URL');
59
-
60
- class XdmService {
61
- constructor(document, smartStorageListenerUrl, httpClient, smartDataServiceUrl) {
62
- this.document = document;
63
- this.smartStorageListenerUrl = smartStorageListenerUrl;
64
- this.httpClient = httpClient;
65
- this.smartDataServiceUrl = smartDataServiceUrl;
66
- this.offenderSubject = new Subject();
67
- this.staffSubject = new Subject();
68
- this.offenderQuerySubject = new Subject();
69
- if (isDevMode) {
70
- console.log('SmartStorage XdmService (Client) - constructor()');
71
- }
72
- this.init();
73
- }
74
- init() {
75
- const frame = this.document.createElement('iframe');
76
- frame.src = this.smartStorageListenerUrl;
77
- frame.id = 'childframe';
78
- frame.name = Math.random().toString();
79
- frame.onload = null;
80
- frame.style.visibility = 'hidden';
81
- this.document.body.appendChild(frame);
82
- this.connection = connectToChild({
83
- iframe: frame,
84
- debug: false,
85
- });
86
- }
87
- getStaffOffenderListOptions(staffId) {
88
- const queryString = `{findvStaffOffenderListOptions(input:{
89
- where:{
90
- staffId: ${staffId}
91
- }
92
- }){
93
- data{
94
- offenderListOptionId
95
- name
96
- serviceApiFieldName
97
- selectedFlag
98
- }
99
- } }`;
100
- return this.httpClient
101
- .post(this.smartDataServiceUrl, { query: queryString })
102
- .pipe(map(({ data }) => {
103
- data.findvStaffOffenderListOptions.data['offenderOptionListId'] =
104
- data.findvStaffOffenderListOptions.data['offenderListOptionId'];
105
- return data.findvStaffOffenderListOptions.data;
106
- }));
107
- /*return of([
108
- { offenderListOptionId: 'genderCode', name: '', selectedFlag: true }]);*/
109
- }
110
- clearAll() {
111
- this.connection.promise.then((child) => {
112
- child.clearAll();
113
- this.offenderSubject.next();
114
- this.staffSubject.next();
115
- });
116
- }
117
- /*************************************
118
- * Offender
119
- **************************************/
120
- setSelectedOffender(selectedOffender) {
121
- this.connection.promise.then((child) => {
122
- child.setSelectedOffender(selectedOffender);
123
- this.offenderSubject.next(selectedOffender);
124
- });
125
- this.getLoginStaff().then((loginStaff) => {
126
- let now = (new Date()).toISOString();
127
- const queryString = `mutation { createStaffOffenderAccess(input: {
128
- staffId: ${loginStaff.staffId},
129
- offenderId: ${selectedOffender.offenderId},
130
- accessDate: "${now}"
131
- }) {
132
- data {
133
- staffOffenderAccessId
134
- }
135
- }}`;
136
- this.httpClient.post(this.smartDataServiceUrl, { query: queryString }).subscribe();
137
- });
138
- }
139
- getSelectedOffender() {
140
- return this.connection.promise.then((child) => child.getSelectedOffender(StorageKey.selectedOffender));
141
- }
142
- clearSelectedOffender() {
143
- this.connection.promise.then((child) => {
144
- child.clearSelectedOffender();
145
- this.offenderSubject.next();
146
- });
147
- }
148
- getOffenderUpdate() {
149
- return this.offenderSubject.asObservable();
150
- }
151
- /************************************************************************
152
- * Staff
153
- ************************************************************************/
154
- setLoginStaff(loginStaff) {
155
- this.connection.promise.then((child) => {
156
- child.setLoginStaff(loginStaff);
157
- this.staffSubject.next(loginStaff);
158
- });
159
- }
160
- getLoginStaff() {
161
- return this.connection.promise.then((child) => child.getLoginStaff(StorageKey.loginStaff));
162
- }
163
- clearLoginStaff() {
164
- this.connection.promise.then((child) => {
165
- child.clearLoginStaff();
166
- this.staffSubject.next();
167
- });
168
- }
169
- getStaffUpdate() {
170
- return this.staffSubject.asObservable();
171
- }
172
- refreshLoginStaffOptions() {
173
- this.getLoginStaff().then((oldLoginStaff) => {
174
- this.getStaffOffenderListOptions(oldLoginStaff.staffId).subscribe((optionData) => {
175
- console.log(optionData);
176
- oldLoginStaff.options = optionData;
177
- this.setLoginStaff(oldLoginStaff);
178
- });
179
- });
180
- }
181
- /************************************************************************
182
- * Offender Query
183
- ************************************************************************/
184
- setOffenderQuery(offenderQuery) {
185
- this.connection.promise.then((child) => {
186
- child.setOffenderQuery(offenderQuery);
187
- this.offenderQuerySubject.next(offenderQuery);
188
- });
189
- }
190
- getOffenderQuery() {
191
- return this.connection.promise.then((child) => child.getOffenderQuery(StorageKey.offenderQuery));
192
- }
193
- clearOffenderQuery() {
194
- this.connection.promise.then((child) => {
195
- child.clearOffenderQuery();
196
- this.offenderQuerySubject.next();
197
- });
198
- }
199
- getOffenderQueryUpdate() {
200
- return this.offenderQuerySubject.asObservable();
201
- }
202
- setSelectedOffenderFromRoute(offenderId, intakeFlag) {
203
- return from(this.getLoginStaff()).pipe(switchMap(loginStaff => {
204
- const queryString = `{
205
- getSelectedOffender(input: {
206
- offenderId: ${offenderId},
207
- staffId: ${loginStaff.staffId}
208
- }){
209
- data{
210
- offenderId
211
- name: offenderName
212
- pdId
213
- birthDate
214
- gender
215
- }
216
- }
217
- }`;
218
- return this.httpClient.post(this.smartDataServiceUrl, { query: queryString }).pipe(map(({ data }) => data.getSelectedOffender.data), catchError(error => {
219
- console.error('HTTP request error:', error);
220
- return of(null);
221
- }));
222
- }), map(selectedOffender => {
223
- selectedOffender.intakeFlag = intakeFlag;
224
- this.setSelectedOffender(selectedOffender);
225
- this.setOffenderQuery({ offenders: [selectedOffender] });
226
- return selectedOffender;
227
- }), catchError(error => {
228
- console.error('Error in processing offender data:', error);
229
- throw error;
230
- }));
231
- }
232
- }
233
- /** @nocollapse */ XdmService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: XdmService, deps: [{ token: DOCUMENT }, { token: SMART_WEB_STORAGE_LISTENER_URL }, { token: i1.HttpClient }, { token: SMART_DATA_SERVICE_URL }], target: i0.ɵɵFactoryTarget.Injectable });
234
- /** @nocollapse */ XdmService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: XdmService, providedIn: 'root' });
235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: XdmService, decorators: [{
236
- type: Injectable,
237
- args: [{
238
- providedIn: 'root',
239
- }]
240
- }], ctorParameters: function () {
241
- return [{ type: undefined, decorators: [{
242
- type: Inject,
243
- args: [DOCUMENT]
244
- }] }, { type: undefined, decorators: [{
245
- type: Inject,
246
- args: [SMART_WEB_STORAGE_LISTENER_URL]
247
- }] }, { type: i1.HttpClient }, { type: undefined, decorators: [{
248
- type: Inject,
249
- args: [SMART_DATA_SERVICE_URL]
250
- }] }];
251
- } });
252
-
253
- class SmartOffenderHeaderService {
254
- constructor(smartDataServiceUrl, http) {
255
- this.smartDataServiceUrl = smartDataServiceUrl;
256
- this.http = http;
257
- }
258
- getStaffOffenders(staffId) {
259
- const queryString = `
260
- query getStaffOffenderList{
261
- filterOffenderList(input: {staffId: ${staffId}}) {
262
- data {
263
- offenderId
264
- offenderName
265
- pdId
266
- birthDate
267
- gender
268
- }
269
- }
270
- }
271
- `;
272
- return this.http
273
- .post(this.smartDataServiceUrl, { query: queryString })
274
- .pipe(map(({ data }) => {
275
- return data.filterOffenderList.data;
276
- }));
277
- }
278
- }
279
- /** @nocollapse */ SmartOffenderHeaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderHeaderService, deps: [{ token: SMART_DATA_SERVICE_URL }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
280
- /** @nocollapse */ SmartOffenderHeaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderHeaderService });
281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderHeaderService, decorators: [{
282
- type: Injectable
283
- }], ctorParameters: function () {
284
- return [{ type: undefined, decorators: [{
285
- type: Inject,
286
- args: [SMART_DATA_SERVICE_URL]
287
- }] }, { type: i1.HttpClient }];
288
- } });
289
-
290
- class SmartOffenderHeaderComponent {
291
- // public isAuthenticated: boolean;
292
- constructor(xdmService, authnService, smartOffenderHeaderService, router) {
293
- this.xdmService = xdmService;
294
- this.authnService = authnService;
295
- this.smartOffenderHeaderService = smartOffenderHeaderService;
296
- this.router = router;
297
- this.selectedOffenderControl$ = new UntypedFormControl();
298
- }
299
- ngOnInit() {
300
- // this.isAuthenticated = this.authnService.getAccount() ? true : false;
301
- this.xdmService.getLoginStaff().then((loginStaff) => {
302
- this.loginStaff = loginStaff ? loginStaff : null;
303
- });
304
- this.xdmService.getSelectedOffender().then((selectedOffender) => {
305
- this.selectedOffender =
306
- selectedOffender && selectedOffender.offenderId
307
- ? selectedOffender
308
- : null;
309
- });
310
- this.subscription = this.xdmService
311
- .getOffenderUpdate()
312
- .subscribe((selectedOffender) => {
313
- this.selectedOffender = selectedOffender;
314
- this.setSelectedOffenderControl();
315
- });
316
- this.xdmService.getOffenderQuery().then((offenderQuery) => {
317
- if (offenderQuery) {
318
- this.offenderQueryList = offenderQuery.offenders;
319
- this.setSelectedOffenderControl();
320
- }
321
- });
322
- this.offenderQuerySubscription = this.xdmService
323
- .getOffenderQueryUpdate()
324
- .subscribe((offenderList) => {
325
- if (offenderList && offenderList.offenders) {
326
- this.offenderQueryList = [...offenderList.offenders];
327
- }
328
- });
329
- this.selectedOffenderControl$.valueChanges.subscribe((o) => this.onOffenderSelected(o));
330
- this.router.routeReuseStrategy.shouldReuseRoute = () => {
331
- return false;
332
- };
333
- }
334
- get isAuthenticated() {
335
- return this.authnService.instance.getAllAccounts().length > 0;
336
- }
337
- ngOnDestroy() {
338
- this.subscription.unsubscribe();
339
- }
340
- onOffenderSelected(offender) {
341
- if (offender) {
342
- // const o = offender.offenderName.split(',');
343
- // if (o.length === 2) {
344
- // const offenderName = `${o[1]} ${o[0]}`;
345
- // this.selectedOffender = {
346
- // offenderId: offender.offenderId,
347
- // name: offenderName,
348
- // pdId: offender.pdId,
349
- // birthDate: offender.birthDate,
350
- // gender: offender.genderCode,
351
- // assignmentStaffRelationId: '',
352
- // intakeFlag: this.loginStaff
353
- // ? this.hasIntakeRole(this.loginStaff.roles)
354
- // : false,
355
- // } as SelectedOffender;
356
- this.selectedOffender = offender;
357
- this.xdmService.setSelectedOffender(this.selectedOffender);
358
- this.reloadCurrentRoute();
359
- }
360
- }
361
- setSelectedOffenderControl() {
362
- if (this.selectedOffender &&
363
- this.offenderQueryList &&
364
- this.offenderQueryList.length > 0) {
365
- const o = this.offenderQueryList.find((x) => x.offenderId === this.selectedOffender.offenderId);
366
- if (o) {
367
- this.selectedOffenderControl$.setValue(o, { emitEvent: false });
368
- }
369
- if (!o && this.offenderQueryList.length > 0) {
370
- this.selectedOffenderControl$.setValue(this.offenderQueryList[0], {
371
- emitEvent: false,
372
- });
373
- }
374
- }
375
- }
376
- reloadCurrentRoute() {
377
- try {
378
- const urlTree = this.router.parseUrl(this.router.url);
379
- if (urlTree &&
380
- urlTree.root &&
381
- urlTree.root.segments &&
382
- urlTree.root.segments.length > 1) {
383
- this.router.navigate([urlTree.root.segments[0].path]);
384
- }
385
- else if (urlTree &&
386
- urlTree.root &&
387
- urlTree.root.children &&
388
- urlTree.root.children.primary &&
389
- urlTree.root.children.primary.segments &&
390
- urlTree.root.children.primary.segments.length > 1) {
391
- this.router.navigate([urlTree.root.children.primary.segments[0].path]);
392
- }
393
- else {
394
- this.router.navigate([this.router.url]);
395
- }
396
- }
397
- catch (_a) {
398
- this.router.navigateByUrl('/');
399
- }
400
- }
401
- hasIntakeRole(roles) {
402
- if (roles && roles.length > 0) {
403
- return roles.findIndex(this.isIntakeRole) > -1;
404
- }
405
- return false;
406
- }
407
- isIntakeRole(role) {
408
- switch (role.roleId) {
409
- case 'OPA':
410
- case 'OPS':
411
- case 'SOPS':
412
- return true;
413
- default:
414
- return false;
415
- }
416
- }
417
- }
418
- /** @nocollapse */ SmartOffenderHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderHeaderComponent, deps: [{ token: XdmService }, { token: i2.MsalService }, { token: SmartOffenderHeaderService }, { token: i2$1.Router }], target: i0.ɵɵFactoryTarget.Component });
419
- /** @nocollapse */ SmartOffenderHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartOffenderHeaderComponent, selector: "app-smart-offender-header", ngImport: i0, template: "<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", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i8$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
420
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderHeaderComponent, decorators: [{
421
- type: Component,
422
- args: [{ selector: 'app-smart-offender-header', template: "<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", styles: [".offender-header-container{display:grid;grid-template-columns:2fr 1fr;grid-column-gap:20px;width:100%;margin:4px;background-color:#eae9e9;font-size:14px;font-weight:500;padding-top:8px;justify-items:end}.offender-header-name-item{width:50%}.offender-header-id-item{text-align:left;display:grid;grid-template-columns:80px 80px;margin-top:8px}.switch-offender{width:100%!important}@media only screen and (max-width: 740px){.offender-header-container{display:grid;grid-template-rows:1fr 1fr;grid-template-columns:1fr;align-items:center;background-color:#eae9e9;font-size:14px;font-weight:500;height:100%;margin:4px;padding-left:16px;justify-items:start}.offender-header-name-item{text-align:left}}\n"] }]
423
- }], ctorParameters: function () { return [{ type: XdmService }, { type: i2.MsalService }, { type: SmartOffenderHeaderService }, { type: i2$1.Router }]; } });
424
-
425
- class SmartNavbarService {
426
- constructor(http) {
427
- this.http = http;
428
- }
429
- /*
430
- public getNavbarConfigs(): SmartNavbarConfig[] {
431
- this.configs = [
432
- {appModuleId: 'SMART', name: 'SMART', url: 'http://localhost:4200', offenderSpecific: false, displayOrder: 1 },
433
- {appModuleId: 'OFFENDER', name: 'Offender', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 2 },
434
- {appModuleId: 'SPRVSN', name: 'Supervision', url: 'http://localhost:4200', offenderSpecific: true, displayOrder: 3 },
435
- ];
436
-
437
- return this.configs;
438
- }
439
- */
440
- /*
441
- public getNavbarConfigs(serviceApiUrl: string): Observable<SmartNavbarConfig[]> {
442
- return this.http.get<SmartNavbarConfig[]>(serviceApiUrl + '/AppModules');
443
- }
444
- */
445
- getNavbarConfigs(serviceApiUrl) {
446
- const queryString = `
447
- {
448
- findAppModules {
449
- data {
450
- appModuleId
451
- name
452
- url
453
- offenderSpecificFlag
454
- displayOrder
455
- }
456
- }
457
- }`;
458
- /*
459
- const httpHeaders = new HttpHeaders({
460
- 'Content-Type': 'application/json',
461
- 'Cache-Control': 'no-cache'
462
- });
463
- const options = {
464
- headers: httpHeaders
465
- };
466
- */
467
- return this.http
468
- .post(serviceApiUrl, { query: queryString })
469
- .pipe(map(({ data }) => {
470
- if (isDevMode()) {
471
- console.log(data);
472
- }
473
- return data.findAppModules.data;
474
- }));
475
- }
476
- }
477
- /** @nocollapse */ SmartNavbarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartNavbarService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
478
- /** @nocollapse */ SmartNavbarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartNavbarService });
479
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartNavbarService, decorators: [{
480
- type: Injectable
481
- }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
482
-
483
- class SmartNavbarComponent {
484
- constructor(navbarConfigService, xdmService,
485
- // private zone: NgZone,
486
- authnService) {
487
- this.navbarConfigService = navbarConfigService;
488
- this.xdmService = xdmService;
489
- this.authnService = authnService;
490
- this.appModuleId = 'SMART';
491
- this.selectedTab = new FormControl(0);
492
- }
493
- ngOnChanges() {
494
- /*
495
- console.log(this.selectedTab);
496
- setTimeout(() => {
497
- this.tabGroup.selectedIndex = this.selectedTab;
498
- }, 1000);
499
- */
500
- this.selectedTab.setValue;
501
- }
502
- ngOnInit() {
503
- this.xdmService.getSelectedOffender().then((selectedOffender) => {
504
- this.selectedOffender =
505
- selectedOffender && selectedOffender.offenderId
506
- ? selectedOffender
507
- : null;
508
- });
509
- this.xdmService.getLoginStaff().then((loginStaff) => {
510
- // this.zone.run(() => {
511
- this.loginStaff = loginStaff ? loginStaff : null;
512
- // });
513
- });
514
- this.offenderSubscription = this.xdmService
515
- .getOffenderUpdate()
516
- .subscribe((selectedOffender) => {
517
- // this.zone.run(() => {
518
- this.selectedOffender = selectedOffender;
519
- // });
520
- });
521
- this.staffSubscription = this.xdmService
522
- .getStaffUpdate()
523
- .subscribe((loginStaff) => {
524
- // this.zone.run(() => {
525
- this.loginStaff = loginStaff;
526
- // });
527
- });
528
- this.navbarConfigService
529
- .getNavbarConfigs(this.serviceApiUrl)
530
- .subscribe((configs) => {
531
- this.navbarConfigs = configs.sort((a, b) => {
532
- if (a.displayOrder < b.displayOrder) {
533
- return -1;
534
- }
535
- else if (a.displayOrder > b.displayOrder) {
536
- return 1;
537
- }
538
- return 0;
539
- });
540
- setTimeout(() => {
541
- this.selectedTab.setValue(this.navbarConfigs.findIndex(c => c.appModuleId === this.appModuleId));
542
- }, 1000);
543
- });
544
- // this.isAuthenticated = this.authnService.getAccount() ? true : false;
545
- }
546
- ngOnDestroy() {
547
- this.offenderSubscription.unsubscribe();
548
- this.staffSubscription.unsubscribe();
549
- }
550
- logout() {
551
- this.xdmService.clearAll();
552
- this.authnService.logout();
553
- }
554
- get isAuthenticated() {
555
- return this.authnService.instance.getAllAccounts().length > 0;
556
- }
557
- getAppModuleUrl(config) {
558
- return (config.appModuleId === 'PPMASRVW') ? config.url
559
- : config && this.selectedOffender && config.appModuleId === 'PPMAS'
560
- ? `${config.url}&OffenderId=${this.selectedOffender.offenderId}`
561
- : this.selectedOffender ? `${config.url}/?offenderId=${this.selectedOffender.offenderId}`
562
- : config.url;
563
- }
564
- hasAppModulePermission(appModuleId) {
565
- if (this.loginStaff &&
566
- this.loginStaff.permissions &&
567
- this.loginStaff.permissions.length > 0) {
568
- return (this.loginStaff.permissions.findIndex((p) => p.appModuleId === appModuleId) > -1);
569
- }
570
- return false;
571
- }
572
- get hasExternalUserRole() {
573
- if (this.loginStaff &&
574
- this.loginStaff.roles &&
575
- this.loginStaff.roles.length > 0) {
576
- return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;
577
- }
578
- return false;
579
- }
580
- checkDVIPPermission(config) {
581
- return ((config.appModuleId !== 'DVIP') || (config.appModuleId === "DVIP" && this.hasDVIPRole));
582
- }
583
- get hasDVIPRole() {
584
- if (this.loginStaff &&
585
- this.loginStaff.roles &&
586
- this.loginStaff.roles.length > 0) {
587
- return this.loginStaff.roles.findIndex(this.isDVIPRole) > -1;
588
- }
589
- return false;
590
- }
591
- isDVIPRole(role) {
592
- if (role.roleId == 'TSD' || role.roleId == 'TAD' || role.roleId == 'STSD' || role.roleId == 'BC') {
593
- return true;
594
- }
595
- return false;
596
- }
597
- checkVictimPermission(config) {
598
- return ((config.appModuleId !== 'VICTIM') || (config.appModuleId === "VICTIM" && this.hasVictimRole));
599
- }
600
- get hasVictimRole() {
601
- if (this.loginStaff &&
602
- this.loginStaff.roles &&
603
- this.loginStaff.roles.length > 0) {
604
- return this.loginStaff.roles.findIndex(this.isVictimRole) > -1;
605
- }
606
- return false;
607
- }
608
- isVictimRole(role) {
609
- if (role.roleId == 'BC' || role.roleId == 'VSP') {
610
- return true;
611
- }
612
- return false;
613
- }
614
- isExternalRole(role) {
615
- switch (role.roleId) {
616
- case 'EUDTL':
617
- case 'EUDUSM':
618
- case 'EUJDG':
619
- case 'EUMPD':
620
- case 'EUSOTV':
621
- case 'EUUSA2':
622
- case 'EUUSAO':
623
- case 'EUUSPC':
624
- return true;
625
- default:
626
- return false;
627
- }
628
- }
629
- }
630
- /** @nocollapse */ SmartNavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartNavbarComponent, deps: [{ token: SmartNavbarService }, { token: XdmService }, { token: i2.MsalService }], target: i0.ɵɵFactoryTarget.Component });
631
- /** @nocollapse */ SmartNavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartNavbarComponent, selector: "app-smart-navbar", inputs: { serviceApiUrl: "serviceApiUrl", appModuleId: "appModuleId" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: ["tabs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i6$1.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i6$1.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i6$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }], encapsulation: i0.ViewEncapsulation.None });
632
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartNavbarComponent, decorators: [{
633
- type: Component,
634
- args: [{ selector: 'app-smart-navbar', encapsulation: ViewEncapsulation.None, template: "<!--\r\n<a class=\"smart-navbar-toggle open\" href=\"#nav\">\r\n <i class=\"material-icons\">menu</i>\r\n</a>\r\n\r\n<nav id=\"nav\" role=\"navigation\" class=\"smart-navbar-container\">\r\n <a class=\"smart-navbar-toggle close\" href=\"#\">\r\n <i class=\"material-icons\">close</i>\r\n </a>\r\n\r\n <span *ngFor=\"let config of navbarConfigs\">\r\n <a mat-button class=\"smart-navbar-item\" \r\n *ngIf=\"(config.offenderSpecificFlag === false || selectedOffender) && isAuthenticated && loginStaff\" href=\"{{config.url}}\">{{config.name}}</a>\r\n </span>\r\n\r\n <button mat-button class=\"smart-navbar-item\" [matMenuTriggerFor]=\"menuTheme\">Set Theme</button>\r\n <mat-menu #menuTheme=\"matMenu\">\r\n <button mat-menu-item (click)=\"onSetTheme('blue-theme')\">Blue</button>\r\n <button mat-menu-item (click)=\"onSetTheme('red-theme')\">Red</button>\r\n <button mat-menu-item (click)=\"onSetTheme('green-theme')\">Green</button>\r\n </mat-menu>\r\n <button mat-button class=\"smart-navbar-item smart-navbar-last-item\" [matMenuTriggerFor]=\"menu\"\r\n *ngIf=\"isAuthenticated && loginStaff\">{{loginStaff.firstName + ' ' + loginStaff.lastName}}</button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item>Profile</button>\r\n <button mat-menu-item (click)=\"logout()\">Sign Out</button>\r\n </mat-menu>\r\n</nav>\r\n-->\r\n\r\n<!-- <nav mat-tab-nav-bar>\r\n <a mat-tab-link mat-flat-button *ngFor=\"let config of navbarConfigs\" [active]=\"appModuleId == config.appModuleId\" href=\"{{config.url}}\">{{config.name}}</a>\r\n</nav> -->\r\n\r\n<mat-tab-group class=\"nav-tab-group\" [selectedIndex]=\"selectedTab.value\" (selectedIndexChange)=\"selectedTab.setValue($event)\">\r\n <ng-container *ngFor=\"let config of navbarConfigs; let index = index\">\r\n <mat-tab\r\n *ngIf=\"\r\n ((hasExternalUserRole && hasAppModulePermission(config.appModuleId)) ||\r\n (!hasExternalUserRole && \r\n (config.offenderSpecificFlag === false || selectedOffender))) &&\r\n checkVictimPermission(config) &&\r\n isAuthenticated &&\r\n loginStaff\"\r\n label=\"config.name\">\r\n <ng-template mat-tab-label>\r\n <a\r\n mat-flat-button\r\n [href]=\"getAppModuleUrl(config)\"\r\n >{{ config.name }}</a>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n</mat-tab-group>\r\n", styles: [".smart-navbar-container{display:flex;flex-wrap:wrap;flex-direction:column}.smart-navbar-item{font-size:1.2rem;line-height:1.2rem;padding:.5rem;background-color:var(--primary-color, #9fa8da);text-decoration-line:none;display:block;text-align:left;border-radius:.3rem;margin:.1rem}.smart-navbar-last-item{margin-left:auto}.main-menu-active,.mat-mdc-tab.mat-mdc-focus-indicato.mdc-tab--active{border-bottom:3px solid darkblue!important;border-radius:0!important}.nav-tab-group.mat-primary .mat-ink-bar{background-color:inherit!important}.mat-mdc-tab-links{flex-direction:row;margin:4px;flex-wrap:wrap;font-size:13px}.mat-mdc-tab-link{min-width:16px!important}@media only screen and (min-width: 768px){.smart-navbar-container{flex-direction:row}.smart-navbar-item{text-align:center}.smart-navbar-toggle{display:none}}@media only screen and (max-width: 767px){#nav{position:fixed;top:0;bottom:0;width:300px;left:-340px;transition:transform .3s ease-in-out}#nav:target{transform:translate(340px)}}.mat-tab-labels{display:flex!important;justify-content:flex-start!important}.mat-tab-label,.mat-tab-label.mat-mdc-tab-label-active{min-width:25px!important;padding:0 5px!important;justify-content:flex-start!important;font-weight:700}\n"] }]
635
- }], ctorParameters: function () { return [{ type: SmartNavbarService }, { type: XdmService }, { type: i2.MsalService }]; }, propDecorators: { serviceApiUrl: [{
636
- type: Input
637
- }], appModuleId: [{
638
- type: Input
639
- }], tabGroup: [{
640
- type: ViewChild,
641
- args: ['tabs']
642
- }] } });
643
-
644
- class SmartErrorComponent {
645
- constructor(authnService, route, smartWebPortalUrl) {
646
- this.authnService = authnService;
647
- this.route = route;
648
- this.smartWebPortalUrl = smartWebPortalUrl;
649
- }
650
- ngOnInit() {
651
- this.type = this.route.snapshot.queryParamMap.get('type') || 'staff';
652
- this.message =
653
- this.route.snapshot.queryParamMap.get('message') || 'Error occured.';
654
- }
655
- logout() {
656
- this.authnService.logout();
657
- }
658
- portal() {
659
- window.location.href = this.smartWebPortalUrl;
660
- }
661
- }
662
- /** @nocollapse */ SmartErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartErrorComponent, deps: [{ token: i2.MsalService }, { token: i2$1.ActivatedRoute }, { token: SMART_WEB_PORTAL_URL }], target: i0.ɵɵFactoryTarget.Component });
663
- /** @nocollapse */ SmartErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SmartErrorComponent, selector: "app-smart-error", ngImport: i0, template: "<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", styles: ["div{text-align:center}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
664
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartErrorComponent, decorators: [{
665
- type: Component,
666
- args: [{ selector: 'app-smart-error', template: "<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", styles: ["div{text-align:center}\n"] }]
667
- }], ctorParameters: function () {
668
- return [{ type: i2.MsalService }, { type: i2$1.ActivatedRoute }, { type: undefined, decorators: [{
669
- type: Inject,
670
- args: [SMART_WEB_PORTAL_URL]
671
- }] }];
672
- } });
673
-
674
- class SmartStaffOffenderOptionsService {
675
- constructor(http, matSnackBar, serviceApiUrl) {
676
- this.http = http;
677
- this.matSnackBar = matSnackBar;
678
- this.serviceApiUrl = serviceApiUrl;
679
- }
680
- showMessage(message) {
681
- this.matSnackBar.open(message, null, {
682
- duration: 2000,
683
- });
684
- }
685
- convertEmptyToNull(jsonObject) {
686
- if (!jsonObject) {
687
- return;
688
- }
689
- if (jsonObject instanceof Array) {
690
- jsonObject.forEach((obj) => {
691
- this.convertEmptyToNull(obj);
692
- });
693
- }
694
- const keys = Object.keys(jsonObject);
695
- keys.forEach((key) => {
696
- if (typeof jsonObject[key] === 'object') {
697
- this.convertEmptyToNull(jsonObject[key]);
698
- }
699
- else if (typeof jsonObject[key] === 'string' &&
700
- jsonObject[key].trim() === '') {
701
- jsonObject[key] = null;
702
- }
703
- });
704
- }
705
- getGraphQueryData(queryName, queryString) {
706
- return this.http.post(this.serviceApiUrl, { query: queryString }).pipe(map(({ data }) => {
707
- return data[queryName];
708
- }));
709
- }
710
- getOffenderListOptions() {
711
- const queryString = `{findOffenderListOptions(input:{
712
- where:{
713
- deactivatedDate: null
714
- }
715
- }){
716
- data{
717
- offenderListOptionId
718
- name
719
- serviceApiFieldName
720
- }
721
- } }`;
722
- return this.http.post(this.serviceApiUrl, { query: queryString }).pipe(map(({ data }) => {
723
- return data['findOffenderListOptions'];
724
- }));
725
- }
726
- getStaffOffenderListOptions(staffId) {
727
- const queryString = `{findStaffOffenderListOptions(input:{
728
- where:{
729
- staffId: ${staffId}
730
- }
731
- }){
732
- data{
733
- offenderListOptionId
734
- }
735
- } }`;
736
- return this.http.post(this.serviceApiUrl, { query: queryString }).pipe(map(({ data }) => {
737
- return data.findStaffOffenderListOptions.data;
738
- }));
739
- }
740
- saveStaffOffenderListOptionsData(dataToSave) {
741
- //}: Observable<any> {
742
- // this.convertEmptyToNull(dataToSave);
743
- const queryName = 'upsertStaffOffenderListOption';
744
- const query = `mutation {
745
- upsertStaffOffenderListOption(input: ${this.convertToString(dataToSave)}) {
746
- message
747
- }
748
- }`;
749
- return this.http.post(this.serviceApiUrl, { query });
750
- /*.pipe(
751
- map(({ data }) => {
752
- return data[queryName];
753
- }));*/
754
- }
755
- convertToString(obj) {
756
- let result = '';
757
- if (!obj) {
758
- return result;
759
- }
760
- if (obj instanceof Array) {
761
- result += ' [';
762
- obj.forEach((eObj) => {
763
- result += this.convertToString(eObj);
764
- });
765
- result += '],';
766
- }
767
- else {
768
- result += '{';
769
- const keys = Object.keys(obj);
770
- keys.forEach((key) => {
771
- if (typeof obj[key] === 'object') {
772
- result += key + ':' + this.convertToString(obj[key]);
773
- }
774
- else {
775
- if (isNaN(obj[key])) {
776
- result += key + ':"' + obj[key] + '",';
777
- }
778
- else {
779
- result += key + ':' + obj[key] + ',';
780
- }
781
- }
782
- });
783
- result = result.substring(0, result.length - 1);
784
- result += '},';
785
- }
786
- return result;
787
- }
788
- }
789
- /** @nocollapse */ SmartStaffOffenderOptionsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartStaffOffenderOptionsService, deps: [{ token: i1.HttpClient }, { token: i2$2.MatSnackBar }, { token: SMART_DATA_SERVICE_URL }], target: i0.ɵɵFactoryTarget.Injectable });
790
- /** @nocollapse */ SmartStaffOffenderOptionsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartStaffOffenderOptionsService });
791
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartStaffOffenderOptionsService, decorators: [{
792
- type: Injectable
793
- }], ctorParameters: function () {
794
- return [{ type: i1.HttpClient }, { type: i2$2.MatSnackBar }, { type: undefined, decorators: [{
795
- type: Inject,
796
- args: [SMART_DATA_SERVICE_URL]
797
- }] }];
798
- } });
799
-
800
- class SmartStaffOffenderOptionsComponent {
801
- constructor(route, offenderService, xdmService) {
802
- this.route = route;
803
- this.offenderService = offenderService;
804
- this.xdmService = xdmService;
805
- this.offenderListOptions = [];
806
- }
807
- ngOnInit() {
808
- const routData = this.route.snapshot.data;
809
- this.loginStaff = routData.loginStaff;
810
- this.offenderListOptions = routData.selectedOffenderResolverService;
811
- this.frmGroup = this.createForm();
812
- this.offenderService.getStaffOffenderListOptions(this.loginStaff.staffId).subscribe(data => {
813
- this.fillForm(data);
814
- });
815
- }
816
- fillForm(data) {
817
- if (data) {
818
- const offenderListOptionsFg = this.frmGroup.get('offenderListOptions');
819
- data.forEach(element => {
820
- offenderListOptionsFg.get(element.offenderListOptionId).setValue(true);
821
- });
822
- }
823
- }
824
- createForm() {
825
- const offenderListOptionsFg = new UntypedFormGroup({});
826
- this.offenderListOptions.forEach((dt, i) => {
827
- offenderListOptionsFg.addControl(dt.offenderListOptionId, new UntypedFormControl(false));
828
- });
829
- return new UntypedFormGroup({
830
- offenderListOptions: offenderListOptionsFg,
831
- });
832
- }
833
- onSave() {
834
- const data = {
835
- options: [],
836
- staffId: this.loginStaff.staffId,
837
- modifiedBy: this.loginStaff.staffId
838
- };
839
- const offenderListOptionsVal = this.frmGroup.get('offenderListOptions').value;
840
- const keys = Object.keys(offenderListOptionsVal);
841
- keys.forEach(key => {
842
- if (offenderListOptionsVal[key]) {
843
- data.options.push({ 'offenderListOptionId': key });
844
- }
845
- });
846
- this.offenderService.saveStaffOffenderListOptionsData(data).subscribe(rtrDatea => {
847
- if (rtrDatea.message) {
848
- this.offenderService.showMessage(rtrDatea.message);
849
- }
850
- else {
851
- this.offenderService.showMessage('Saved successfully');
852
- this.xdmService.refreshLoginStaffOptions();
853
- }
854
- });
855
- }
856
- }
857
- /** @nocollapse */ SmartStaffOffenderOptionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartStaffOffenderOptionsComponent, deps: [{ token: i2$1.ActivatedRoute }, { token: SmartStaffOffenderOptionsService }, { token: XdmService }], target: i0.ɵɵFactoryTarget.Component });
858
- /** @nocollapse */ SmartStaffOffenderOptionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", 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-raised-button color=\"accent\" (click)=\"onSave()\">Save</button>\r\n </div>\r\n </mat-card>\r\n </form>\r\n ", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6$2.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i6$2.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i7$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], 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"] }] });
859
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartStaffOffenderOptionsComponent, decorators: [{
860
- type: Component,
861
- args: [{ selector: 'lib-smart-staff-offender-options', 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-raised-button color=\"accent\" (click)=\"onSave()\">Save</button>\r\n </div>\r\n </mat-card>\r\n </form>\r\n " }]
862
- }], ctorParameters: function () { return [{ type: i2$1.ActivatedRoute }, { type: SmartStaffOffenderOptionsService }, { type: XdmService }]; } });
863
-
864
- class SmartAuthService {
865
- constructor(http, authnService, xdmService, smartDataServiceUrl, smartDomainFormatUrl) {
866
- this.http = http;
867
- this.authnService = authnService;
868
- this.xdmService = xdmService;
869
- this.smartDataServiceUrl = smartDataServiceUrl;
870
- this.smartDomainFormatUrl = smartDomainFormatUrl;
871
- }
872
- getLoginStaff() {
873
- if (isDevMode) {
874
- console.log('SmartAuthService - getLoginStaff()');
875
- }
876
- if (!isDevMode && this.loginStaff) {
877
- if (this.loginStaff.staffId) {
878
- if (isDevMode) {
879
- console.log('##### getLoginStaff(): get internal instance in service', this.loginStaff);
880
- }
881
- return of(this.loginStaff);
882
- }
883
- else if (this.loginStaff.userName) {
884
- if (isDevMode) {
885
- console.log('##### getLoginStaff(): get using preset user name', this.loginStaff);
886
- }
887
- return this.getStaff(this.loginStaff.userName);
888
- }
889
- }
890
- return from(this.xdmService.getLoginStaff()).pipe(switchMap((storedResult) => {
891
- if (storedResult && storedResult.staffId) {
892
- if (isDevMode) {
893
- console.log('##### getLoginStaff(): get from session.', storedResult);
894
- }
895
- this.loginStaff = storedResult;
896
- return of(storedResult);
897
- }
898
- else if (storedResult && storedResult.userName) {
899
- if (isDevMode) {
900
- console.log('##### getLoginStaff(): get using preset user name', this.loginStaff);
901
- }
902
- return this.getStaff(storedResult.userName);
903
- }
904
- else {
905
- const userName = this.userName;
906
- const staffName = userName.substring(0, userName.indexOf('@'));
907
- if (isDevMode) {
908
- console.log('##### loginLoginStaff(): get using login staff name ', staffName);
909
- }
910
- return this.getStaff(staffName);
911
- }
912
- }));
913
- }
914
- get userName() {
915
- if (this.authnService.instance.getAllAccounts().length > 0) {
916
- const account = this.authnService.instance.getAllAccounts()[0];
917
- return account.username;
918
- }
919
- return '';
920
- }
921
- getTeamUrl(app, afterHash) {
922
- return this.smartDomainFormatUrl.replace('${APP}', app) + afterHash;
923
- }
924
- isSameHost(url, app) {
925
- return this.smartDomainFormatUrl.replace('${APP}', app) === url;
926
- }
927
- redirectToTeam(loginStaff) {
928
- if (loginStaff.roles.findIndex((role) => role.roleId === 'EUUSPC') > -1) {
929
- if (!this.isSameHost(window.location.origin, 'investigation')) {
930
- window.location.href = this.getTeamUrl('investigation', '/assignment');
931
- }
932
- }
933
- else if (loginStaff.roles.findIndex((role) => role.roleId.substring(0, 3) === 'RSC') > -1) {
934
- if (!this.isSameHost(window.location.origin, 'rsc')) {
935
- window.location.href = this.getTeamUrl('rsc', '/offender-list');
936
- }
937
- }
938
- }
939
- setSelectedOffender(selectedOffender) {
940
- return __awaiter(this, void 0, void 0, function* () {
941
- if (!this.loginStaff) {
942
- return;
943
- }
944
- if (selectedOffender) {
945
- // if (!selectedOffender.assignmentStaffRelationId) {
946
- const relation = yield lastValueFrom(this.getStaffOffenderRelation(this.loginStaff.staffId, selectedOffender.offenderId));
947
- if (relation) {
948
- selectedOffender.assignmentStaffRelationId = relation;
949
- }
950
- else {
951
- selectedOffender.assignmentStaffRelationId = 'NOASSIGN';
952
- }
953
- // }
954
- }
955
- this.xdmService.setSelectedOffender(selectedOffender);
956
- this.selectedOffender = selectedOffender;
957
- });
958
- }
959
- logout() {
960
- this.xdmService.clearAll();
961
- this.authnService.logout();
962
- }
963
- setPermission(appModuleId, route) {
964
- return __awaiter(this, void 0, void 0, function* () {
965
- if (!this.loginStaff) {
966
- this.loginStaff = yield this.xdmService.getLoginStaff();
967
- }
968
- const permissions = this.loginStaff.permissions;
969
- const resource = route.url && route.url.length > 0 ? route.url[0].path : '';
970
- if (!this.selectedOffender) {
971
- this.selectedOffender = yield this.xdmService.getSelectedOffender();
972
- }
973
- if (this.selectedOffender) {
974
- // if (!this.selectedOffender.assignmentStaffRelationId) {
975
- const relation = yield this.getStaffOffenderRelation(this.loginStaff.staffId, this.selectedOffender.offenderId).toPromise();
976
- if (relation) {
977
- this.selectedOffender.assignmentStaffRelationId = relation;
978
- }
979
- else {
980
- this.selectedOffender.assignmentStaffRelationId = 'NOASSIGN';
981
- }
982
- this.xdmService.setSelectedOffender(this.selectedOffender);
983
- // }
984
- }
985
- const assignmentStaffRelationId = this.selectedOffender.assignmentStaffRelationId;
986
- const elements = document.querySelectorAll('[class^="sac-"]');
987
- const pattern = /^sac-(\S+)-(\S+)$/i;
988
- Array.from(elements).forEach((element) => {
989
- let hide;
990
- let disable;
991
- element.classList.forEach((c) => {
992
- const results = c.match(pattern);
993
- // console.log(results);
994
- if (results && results.length > 2) {
995
- const roleId = results[1] ? results[1].toUpperCase() : null;
996
- const right = results[2];
997
- // console.log(results[0]);
998
- // console.log(results[1]);
999
- // console.log(results[2]);
1000
- const permission = permissions.find(function (p) {
1001
- return (p.appModuleId === appModuleId &&
1002
- p.resource === resource &&
1003
- p.roleId === roleId &&
1004
- p.assignmentStaffRelationId === assignmentStaffRelationId);
1005
- });
1006
- /*
1007
- console.log('##### setPermission() resource: ', resource);
1008
- console.log('##### setPermission() appModuleId: ', appModuleId);
1009
- console.log('##### setPermission() roleId: ', roleId);
1010
- console.log(
1011
- '##### setPermission() assignment relation: ',
1012
- assignmentStaffRelationId,
1013
- );
1014
- */
1015
- console.log('##### Matched permission: ', permission);
1016
- if (permission) {
1017
- if (right === 'read') {
1018
- if (!permission.readFlag) {
1019
- if (hide !== false) {
1020
- hide = true;
1021
- }
1022
- }
1023
- else {
1024
- hide = false;
1025
- }
1026
- }
1027
- else if ((right === 'create' && !permission.createFlag) ||
1028
- (right === 'update' && !permission.updateFlag) ||
1029
- (right === 'delete' && !permission.deleteFlag) ||
1030
- (right === 'assign' && !permission.assignFlag) ||
1031
- (right === 'close' && !permission.closeFlag) ||
1032
- (right === 'expunge' && !permission.expungeFlag) ||
1033
- (right === 'reopen' && !permission.reopenFlag)) {
1034
- if (element.nodeName === 'BUTTON') {
1035
- if (hide !== false) {
1036
- hide = true;
1037
- }
1038
- }
1039
- else {
1040
- if (disable !== false) {
1041
- disable = true;
1042
- }
1043
- }
1044
- }
1045
- else {
1046
- if (element.nodeName === 'BUTTON') {
1047
- hide = false;
1048
- }
1049
- else {
1050
- disable = false;
1051
- }
1052
- }
1053
- }
1054
- else {
1055
- if (right === 'read') {
1056
- if (hide !== false) {
1057
- hide = true;
1058
- }
1059
- }
1060
- else if (element.nodeName === 'BUTTON') {
1061
- if (hide !== false) {
1062
- hide = true;
1063
- }
1064
- }
1065
- else if (disable !== false) {
1066
- disable = true;
1067
- }
1068
- }
1069
- }
1070
- });
1071
- console.log('hide: ', hide);
1072
- console.log('disable: ', disable);
1073
- if (hide === true) {
1074
- this.hideHtmlElement(element);
1075
- }
1076
- else if (disable === true) {
1077
- this.disableHtmlElement(element);
1078
- }
1079
- });
1080
- });
1081
- }
1082
- checkPermission(accessControlConfig) {
1083
- const selData = accessControlConfig.route.data;
1084
- this.loginStaff = selData.loginStaff;
1085
- this.selectedOffender = selData.selectedOffender;
1086
- let routePath = '';
1087
- if (accessControlConfig.route.url &&
1088
- accessControlConfig.route.url.length > 0) {
1089
- routePath = accessControlConfig.route.url[0].path;
1090
- }
1091
- const permissions = this.loginStaff.permissions;
1092
- const resource = routePath;
1093
- const roleId = accessControlConfig.roleId
1094
- ? accessControlConfig.roleId.toUpperCase()
1095
- : null;
1096
- const accessType = accessControlConfig.accessType;
1097
- const assignmentStaffRelationId = (!this.selectedOffender || !this.selectedOffender
1098
- .assignmentStaffRelationId)
1099
- ? 'N/A'
1100
- : this.selectedOffender.assignmentStaffRelationId;
1101
- const permission = permissions.find((p) => {
1102
- return (p.appModuleId === accessControlConfig.appModuleId &&
1103
- p.resource === resource &&
1104
- (!roleId || p.roleId === roleId) &&
1105
- (p.assignmentStaffRelationId === 'N/A' ||
1106
- p.assignmentStaffRelationId === assignmentStaffRelationId));
1107
- });
1108
- if (permission) {
1109
- if (accessType === 'read') {
1110
- if (!permission.readFlag) {
1111
- return false;
1112
- }
1113
- else {
1114
- return true;
1115
- }
1116
- }
1117
- else if ((accessType === 'create' && !permission.createFlag) ||
1118
- (accessType === 'update' && !permission.updateFlag) ||
1119
- (accessType === 'delete' && !permission.deleteFlag) ||
1120
- (accessType === 'assign' && !permission.assignFlag) ||
1121
- (accessType === 'close' && !permission.closeFlag) ||
1122
- (accessType === 'expunge' && !permission.expungeFlag) ||
1123
- (accessType === 'reopen' && !permission.reopenFlag)) {
1124
- return false;
1125
- }
1126
- else {
1127
- return true;
1128
- }
1129
- }
1130
- else {
1131
- if (accessType === 'read') {
1132
- return false;
1133
- }
1134
- }
1135
- return false;
1136
- }
1137
- canAppFeatureActivate(loginStaff, feature, appModuleId = null) {
1138
- // if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {
1139
- // return true;
1140
- // }
1141
- return this.hasAppFeaturePermission(loginStaff.permissions, feature, appModuleId);
1142
- }
1143
- // public isAuthEnable(roles: Role[], appModuleId: string) {
1144
- // if (roles && roles.length > 0) {
1145
- // return roles.map(r => r.roleId).findIndex(this.isExternalRole) > -1 || appModuleId === 'RR';
1146
- // }
1147
- // return false;
1148
- // }
1149
- hasIntakeRole(roles) {
1150
- if (roles && roles.length > 0) {
1151
- return roles.findIndex(this.isIntakeRole) > -1;
1152
- }
1153
- return false;
1154
- }
1155
- hasAppFeaturePermission(permissions, feature, appModuleId) {
1156
- if (permissions && permissions.length > 0) {
1157
- if (appModuleId) {
1158
- return (permissions.findIndex((p) => p.resource === feature && p.appModuleId === appModuleId) > -1);
1159
- }
1160
- else {
1161
- return permissions.findIndex((p) => p.resource === feature) > -1;
1162
- }
1163
- }
1164
- return false;
1165
- }
1166
- isExternalRole(roleId) {
1167
- switch (roleId) {
1168
- case 'EUDTL':
1169
- case 'EUDUSM':
1170
- case 'EUJDG':
1171
- case 'EUMPD':
1172
- case 'EUSOTV':
1173
- case 'EUUSA2':
1174
- case 'EUUSAO':
1175
- case 'EUUSPC':
1176
- return true;
1177
- default:
1178
- return false;
1179
- }
1180
- }
1181
- isIntakeRole(role) {
1182
- switch (role.roleId) {
1183
- case 'OPA':
1184
- case 'OPS':
1185
- case 'SOPS':
1186
- return true;
1187
- default:
1188
- return false;
1189
- }
1190
- }
1191
- disableHtmlElement(element) {
1192
- // console.log(element);
1193
- switch (element.nodeName) {
1194
- case 'A':
1195
- element.setAttribute('style', 'pointer-events: none;cursor: not-allowed;');
1196
- element.setAttribute('tabIndex', '-1');
1197
- break;
1198
- default:
1199
- element.setAttribute('disabled', 'disabled');
1200
- break;
1201
- }
1202
- }
1203
- hideHtmlElement(element) {
1204
- // element.setAttribute('hidden', 'hidden');
1205
- element.setAttribute('style', 'display: none;');
1206
- }
1207
- getStaff(userName) {
1208
- return this.query({
1209
- query: this.findStaffQuery,
1210
- variables: {
1211
- input: {
1212
- where: {
1213
- userName: userName,
1214
- activeFlag: true,
1215
- },
1216
- }
1217
- },
1218
- }).pipe(take(1), map((result) => {
1219
- if (isDevMode) {
1220
- console.log('##### getStaff() from service ', result);
1221
- }
1222
- if (result.findvStaffs.data.length > 0) {
1223
- const data = result.findvStaffs.data[0];
1224
- this.xdmService.setLoginStaff(data);
1225
- this.loginStaff = data;
1226
- return data;
1227
- }
1228
- else {
1229
- return of(null);
1230
- }
1231
- }), catchError((error) => {
1232
- console.log('error ' + error);
1233
- return of(null);
1234
- }));
1235
- }
1236
- query(options) {
1237
- return this.http
1238
- .post(this.smartDataServiceUrl, {
1239
- query: options.query,
1240
- variables: options.variables,
1241
- }, {
1242
- headers: new HttpHeaders({
1243
- 'Content-Type': 'application/json',
1244
- 'No-Auth': 'True',
1245
- }),
1246
- })
1247
- .pipe(map((d) => d.data));
1248
- }
1249
- get findStaffQuery() {
1250
- return `
1251
- query findvStaffs($input: vStaffMultiInput) {
1252
- findvStaffs(input: $input) {
1253
- totalCount
1254
- message
1255
- data {
1256
- staffId
1257
- userName
1258
- lastName
1259
- firstName
1260
- phone
1261
- email
1262
- roles {
1263
- roleId
1264
- role
1265
- }
1266
- permissions {
1267
- roleId
1268
- appModuleId
1269
- resource
1270
- assignmentStaffRelationId
1271
- readFlag
1272
- createFlag
1273
- updateFlag
1274
- deleteFlag
1275
- assignFlag
1276
- reopenFlag
1277
- closeFlag
1278
- expungeFlag
1279
- }
1280
- options {
1281
- offenderListOptionId
1282
- name
1283
- serviceApiFieldName
1284
- selectedFlag
1285
- }
1286
- }
1287
- }
1288
- }
1289
- `;
1290
- }
1291
- getStaffOffenderRelation(staffId, offenderId) {
1292
- const queryString = `
1293
- {
1294
- findvStaffOffenderRelations(input: {where: {staffId: ${staffId}, offenderId: ${offenderId}}}) {
1295
- data {
1296
- assignmentStaffRelationId
1297
- }
1298
- }
1299
- }`;
1300
- return this.http
1301
- .post(this.smartDataServiceUrl, { query: queryString })
1302
- .pipe(take(1), map((result) => {
1303
- if (isDevMode) {
1304
- console.log('##### getStaffOffenderRelation() from service ', result);
1305
- }
1306
- if (result.data.findvStaffOffenderRelations.data.length > 0) {
1307
- const data = result.data.findvStaffOffenderRelations.data[0];
1308
- return data.assignmentStaffRelationId;
1309
- }
1310
- else {
1311
- return null;
1312
- // return throwError('No access right.');
1313
- }
1314
- }), catchError((error) => {
1315
- console.log('error ' + error);
1316
- return null;
1317
- }));
1318
- }
1319
- getRolePermissions(appModuleId, resource) {
1320
- const queryString = `
1321
- query findvRolePermissionPivots{
1322
- findvRolePermissionPivots(input: {where: {appModuleId: ${appModuleId}, resource: ${resource}}}){
1323
- totalCount
1324
- message
1325
- }
1326
- }`;
1327
- return this.http
1328
- .post(this.smartDataServiceUrl, { query: queryString })
1329
- .pipe(take(1), map((result) => {
1330
- if (isDevMode) {
1331
- console.log('##### findvRolePermissionPivots() from service ', result);
1332
- }
1333
- if (result.data.findvRolePermissionPivots.totalCount > 0) {
1334
- return true;
1335
- }
1336
- else {
1337
- return false;
1338
- // return throwError('No access right.');
1339
- }
1340
- }), catchError((error) => {
1341
- console.log('error ' + error);
1342
- return throwError(error);
1343
- }));
1344
- }
1345
- }
1346
- /** @nocollapse */ SmartAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartAuthService, deps: [{ token: i1.HttpClient }, { token: i2.MsalService }, { token: XdmService }, { token: SMART_DATA_SERVICE_URL }, { token: SMART_DOMAIN_FORMAT }], target: i0.ɵɵFactoryTarget.Injectable });
1347
- /** @nocollapse */ SmartAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartAuthService, providedIn: 'root' });
1348
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartAuthService, decorators: [{
1349
- type: Injectable,
1350
- args: [{
1351
- providedIn: 'root',
1352
- }]
1353
- }], ctorParameters: function () {
1354
- return [{ type: i1.HttpClient }, { type: i2.MsalService }, { type: XdmService }, { type: undefined, decorators: [{
1355
- type: Inject,
1356
- args: [SMART_DATA_SERVICE_URL]
1357
- }] }, { type: undefined, decorators: [{
1358
- type: Inject,
1359
- args: [SMART_DOMAIN_FORMAT]
1360
- }] }];
1361
- } });
1362
-
1363
- class SmartAccessControlDirective {
1364
- constructor(elementRef, auth) {
1365
- this.elementRef = elementRef;
1366
- this.auth = auth;
1367
- }
1368
- ngOnInit() {
1369
- this.checkAccess();
1370
- }
1371
- checkAccess() {
1372
- if (!this.accessControlConfig ||
1373
- !this.accessControlConfig.route ||
1374
- !this.accessControlConfig.route.data ||
1375
- !this.accessControlConfig.route.data.loginStaff) {
1376
- return;
1377
- }
1378
- // const loginStaff = this.accessControlConfig.route.data.loginStaff;
1379
- // if (!this.auth.isAuthEnable(loginStaff.roles, this.accessControlConfig.appModuleId)) {
1380
- // return;
1381
- // }
1382
- this.elementRef.nativeElement.style.display = this.auth.checkPermission(this.accessControlConfig)
1383
- ? 'block'
1384
- : 'none';
1385
- }
1386
- }
1387
- /** @nocollapse */ SmartAccessControlDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartAccessControlDirective, deps: [{ token: i0.ElementRef }, { token: SmartAuthService }], target: i0.ɵɵFactoryTarget.Directive });
1388
- /** @nocollapse */ SmartAccessControlDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: SmartAccessControlDirective, selector: "[accessControl]", inputs: { accessControlConfig: "accessControlConfig" }, ngImport: i0 });
1389
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartAccessControlDirective, decorators: [{
1390
- type: Directive,
1391
- args: [{
1392
- selector: '[accessControl]',
1393
- }]
1394
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: SmartAuthService }]; }, propDecorators: { accessControlConfig: [{
1395
- type: Input
1396
- }] } });
1397
-
1398
- // smart-authorization.service
1399
- class SmartAuthorizationGuard {
1400
- constructor(authnService) {
1401
- this.authnService = authnService;
1402
- }
1403
- canActivate(route) {
1404
- return this.authnService.getLoginStaff().pipe(take(1), mergeMap((loginStaff) => {
1405
- if (!loginStaff || !route || !route.routeConfig) {
1406
- return of(false);
1407
- }
1408
- // if (!this.authnService.isAuthEnable(loginStaff.roles, null)) {
1409
- // return of(true);
1410
- // }
1411
- const resource = route.routeConfig.path
1412
- ? route.routeConfig.path.split('/')[0]
1413
- : '';
1414
- const isFeatureValid = this.authnService.canAppFeatureActivate(loginStaff, resource);
1415
- return of(isFeatureValid);
1416
- }), catchError((error) => {
1417
- return of(false);
1418
- }));
1419
- }
1420
- }
1421
- /** @nocollapse */ SmartAuthorizationGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartAuthorizationGuard, deps: [{ token: SmartAuthService }], target: i0.ɵɵFactoryTarget.Injectable });
1422
- /** @nocollapse */ SmartAuthorizationGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartAuthorizationGuard });
1423
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartAuthorizationGuard, decorators: [{
1424
- type: Injectable
1425
- }], ctorParameters: function () { return [{ type: SmartAuthService }]; } });
1426
-
1427
- class SmartOffenderRedirectGuard {
1428
- constructor(router) {
1429
- this.router = router;
1430
- }
1431
- canActivate(route, state) {
1432
- var _a;
1433
- const targetRoute = route.data['routeTo'];
1434
- const queryParams = (_a = route.parent) === null || _a === void 0 ? void 0 : _a.queryParams;
1435
- if (targetRoute) {
1436
- this.router.navigate([targetRoute], { queryParams: queryParams });
1437
- return false;
1438
- }
1439
- return true;
1440
- }
1441
- }
1442
- /** @nocollapse */ SmartOffenderRedirectGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderRedirectGuard, deps: [{ token: i2$1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
1443
- /** @nocollapse */ SmartOffenderRedirectGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderRedirectGuard, providedIn: 'root' });
1444
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartOffenderRedirectGuard, decorators: [{
1445
- type: Injectable,
1446
- args: [{
1447
- providedIn: 'root'
1448
- }]
1449
- }], ctorParameters: function () { return [{ type: i2$1.Router }]; } });
1450
-
1451
- class NgcSmartCoreModule {
1452
- }
1453
- /** @nocollapse */ NgcSmartCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NgcSmartCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1454
- /** @nocollapse */ NgcSmartCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: NgcSmartCoreModule, declarations: [SmartOffenderHeaderComponent,
1455
- SmartNavbarComponent,
1456
- SmartErrorComponent,
1457
- SmartStaffOffenderOptionsComponent,
1458
- SmartAccessControlDirective], imports: [CommonModule,
1459
- HttpClientModule,
1460
- MatButtonModule,
1461
- MatMenuModule,
1462
- MatTabsModule,
1463
- MatSelectModule,
1464
- MatCardModule,
1465
- MatCheckboxModule,
1466
- ReactiveFormsModule], exports: [SmartOffenderHeaderComponent,
1467
- SmartNavbarComponent,
1468
- SmartErrorComponent,
1469
- SmartStaffOffenderOptionsComponent,
1470
- SmartAccessControlDirective] });
1471
- /** @nocollapse */ NgcSmartCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NgcSmartCoreModule, providers: [
1472
- SmartNavbarService,
1473
- SmartOffenderHeaderService,
1474
- SmartStaffOffenderOptionsService,
1475
- SmartAuthorizationGuard,
1476
- MatSnackBar,
1477
- SmartOffenderRedirectGuard
1478
- ], imports: [CommonModule,
1479
- HttpClientModule,
1480
- MatButtonModule,
1481
- MatMenuModule,
1482
- MatTabsModule,
1483
- MatSelectModule,
1484
- MatCardModule,
1485
- MatCheckboxModule,
1486
- ReactiveFormsModule] });
1487
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NgcSmartCoreModule, decorators: [{
1488
- type: NgModule,
1489
- args: [{
1490
- declarations: [
1491
- SmartOffenderHeaderComponent,
1492
- SmartNavbarComponent,
1493
- SmartErrorComponent,
1494
- SmartStaffOffenderOptionsComponent,
1495
- SmartAccessControlDirective,
1496
- ],
1497
- imports: [
1498
- CommonModule,
1499
- HttpClientModule,
1500
- MatButtonModule,
1501
- MatMenuModule,
1502
- MatTabsModule,
1503
- MatSelectModule,
1504
- MatCardModule,
1505
- MatCheckboxModule,
1506
- ReactiveFormsModule,
1507
- ],
1508
- exports: [
1509
- SmartOffenderHeaderComponent,
1510
- SmartNavbarComponent,
1511
- SmartErrorComponent,
1512
- SmartStaffOffenderOptionsComponent,
1513
- SmartAccessControlDirective,
1514
- ],
1515
- providers: [
1516
- SmartNavbarService,
1517
- SmartOffenderHeaderService,
1518
- SmartStaffOffenderOptionsService,
1519
- SmartAuthorizationGuard,
1520
- MatSnackBar,
1521
- SmartOffenderRedirectGuard
1522
- ],
1523
- }]
1524
- }] });
1525
-
1526
- class LoginStaffResolverService {
1527
- constructor(authnService,
1528
- // private zone: NgZone,
1529
- router) {
1530
- this.authnService = authnService;
1531
- this.router = router;
1532
- }
1533
- resolve(route, state) {
1534
- return this.authnService.getLoginStaff().pipe(take(1), mergeMap((loginStaff) => {
1535
- if (isDevMode) {
1536
- console.log('LoginStaffResolverService: ', loginStaff);
1537
- }
1538
- if (loginStaff) {
1539
- return of(loginStaff);
1540
- }
1541
- else {
1542
- return throwError('Not authorized to access SMART.');
1543
- // return EMPTY;
1544
- /*
1545
- this.zone.run(() => {
1546
- this.router.navigate(['/smart-error'], {
1547
- queryParams: {
1548
- type: 'staff',
1549
- message: 'Not authorized to access SMART.'
1550
- }
1551
- });
1552
- });
1553
- return EMPTY;
1554
- */
1555
- }
1556
- }), catchError((error) => {
1557
- console.log('LoginStaffResolverService: ' + error);
1558
- this.router.navigate(['/smart-error'], {
1559
- queryParams: {
1560
- type: 'staff',
1561
- message: 'SMART Authentication: ' + error,
1562
- },
1563
- });
1564
- return EMPTY;
1565
- }));
1566
- }
1567
- }
1568
- /** @nocollapse */ LoginStaffResolverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LoginStaffResolverService, deps: [{ token: SmartAuthService }, { token: i2$1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
1569
- /** @nocollapse */ LoginStaffResolverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LoginStaffResolverService, providedIn: 'root' });
1570
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LoginStaffResolverService, decorators: [{
1571
- type: Injectable,
1572
- args: [{
1573
- providedIn: 'root',
1574
- }]
1575
- }], ctorParameters: function () { return [{ type: SmartAuthService }, { type: i2$1.Router }]; } });
1576
-
1577
- class SelectedOffenderResolverService {
1578
- constructor(service, zone, router) {
1579
- this.service = service;
1580
- this.zone = zone;
1581
- this.router = router;
1582
- }
1583
- resolve(route, state) {
1584
- let offenderId = null;
1585
- let intakeFlag = false;
1586
- if (route) {
1587
- if (route.queryParams["offenderId"])
1588
- offenderId = parseInt(route.queryParams["offenderId"]);
1589
- if (route.queryParams["intakeFlag"])
1590
- intakeFlag = route.queryParams["intakeFlag"] == "true";
1591
- }
1592
- return from(this.service.getSelectedOffender()).pipe(mergeMap((selectedOffender) => {
1593
- if (isDevMode) {
1594
- console.log(selectedOffender);
1595
- }
1596
- if (offenderId && offenderId > 0 && (!selectedOffender || (selectedOffender && selectedOffender.offenderId !== offenderId))) {
1597
- return this.service.setSelectedOffenderFromRoute(offenderId, intakeFlag);
1598
- }
1599
- if (selectedOffender) {
1600
- return of(selectedOffender);
1601
- }
1602
- return throwError(() => new Error('No offender selected.'));
1603
- }), retryWhen((errors) => errors.pipe(
1604
- // tap(() => console.log('Retry getting selected offender.')),
1605
- delay(1000), take(5), (o) => concat(o, throwError(() => new Error('No offender selected (failed after retries).'))))), catchError((error) => {
1606
- /*
1607
- this.zone.run(() => {
1608
- this.router.navigate(['/smart-error'], {
1609
- queryParams: { type: 'offender', message: error }
1610
- });
1611
- });
1612
- */
1613
- this.router.navigate(['/smart-error'], {
1614
- queryParams: { type: 'offender', message: error },
1615
- });
1616
- return EMPTY;
1617
- }));
1618
- }
1619
- }
1620
- /** @nocollapse */ SelectedOffenderResolverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectedOffenderResolverService, deps: [{ token: XdmService }, { token: i0.NgZone }, { token: i2$1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
1621
- /** @nocollapse */ SelectedOffenderResolverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectedOffenderResolverService, providedIn: 'root' });
1622
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SelectedOffenderResolverService, decorators: [{
1623
- type: Injectable,
1624
- args: [{
1625
- providedIn: 'root',
1626
- }]
1627
- }], ctorParameters: function () { return [{ type: XdmService }, { type: i0.NgZone }, { type: i2$1.Router }]; } });
1628
-
1629
- class SmartStaffOffenderOptionsResolverService {
1630
- constructor(offenderService) {
1631
- this.offenderService = offenderService;
1632
- }
1633
- resolve() {
1634
- return this.offenderService.getOffenderListOptions()
1635
- .pipe(map(({ data }) => {
1636
- return data;
1637
- }));
1638
- }
1639
- }
1640
- /** @nocollapse */ SmartStaffOffenderOptionsResolverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartStaffOffenderOptionsResolverService, deps: [{ token: SmartStaffOffenderOptionsService }], target: i0.ɵɵFactoryTarget.Injectable });
1641
- /** @nocollapse */ SmartStaffOffenderOptionsResolverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartStaffOffenderOptionsResolverService, providedIn: 'root' });
1642
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SmartStaffOffenderOptionsResolverService, decorators: [{
1643
- type: Injectable,
1644
- args: [{
1645
- providedIn: 'root',
1646
- }]
1647
- }], ctorParameters: function () { return [{ type: SmartStaffOffenderOptionsService }]; } });
1648
-
1649
- var AccessType;
1650
- (function (AccessType) {
1651
- AccessType["READ"] = "read";
1652
- AccessType["CREATE"] = "create";
1653
- AccessType["UPDATE"] = "update";
1654
- AccessType["DELETE"] = "delete";
1655
- AccessType["EXPUNGE"] = "expunge";
1656
- AccessType["ASSIGN"] = "assign";
1657
- AccessType["REOPEN"] = "reopen";
1658
- AccessType["CLOSE"] = "close";
1659
- })(AccessType || (AccessType = {}));
1660
-
1661
- /*
1662
- * Public API Surface of ngc-smart-core
1663
- */
1664
-
1665
- /**
1666
- * Generated bundle index. Do not edit.
1667
- */
1668
-
1669
- export { AccessType, LoginStaff, LoginStaffResolverService, NgcSmartCoreModule, OffenderQuery, Option, Permission, Role, SMART_DATA_SERVICE_URL, SMART_DOMAIN_FORMAT, SMART_WEB_PORTAL_URL, SMART_WEB_STORAGE_LISTENER_URL, SelectedOffender, SelectedOffenderResolverService, SmartAccessControlDirective, SmartAuthService, SmartAuthorizationGuard, SmartErrorComponent, SmartNavbarComponent, SmartNavbarService, SmartOffenderHeaderComponent, SmartOffenderRedirectGuard, SmartStaffOffenderOptionsComponent, SmartStaffOffenderOptionsResolverService, StorageKey, XdmService };
1670
- //# sourceMappingURL=csmart-ngc-smart-core.mjs.map