@csmart/ngc-smart-core 0.7.79 → 0.7.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/csmart-ngc-smart-core.umd.js +8 -2
- package/bundles/csmart-ngc-smart-core.umd.js.map +1 -1
- package/bundles/csmart-ngc-smart-core.umd.min.js +1 -1
- package/bundles/csmart-ngc-smart-core.umd.min.js.map +1 -1
- package/esm2015/lib/smart-auth/smart-auth.service.js +10 -3
- package/esm5/lib/smart-auth/smart-auth.service.js +10 -3
- package/fesm2015/csmart-ngc-smart-core.js +9 -2
- package/fesm2015/csmart-ngc-smart-core.js.map +1 -1
- package/fesm5/csmart-ngc-smart-core.js +10 -3
- package/fesm5/csmart-ngc-smart-core.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csmart-ngc-smart-core.js.map","sources":["ng://@csmart/ngc-smart-core/lib/smart-storage/smart-storage-model.ts","ng://@csmart/ngc-smart-core/lib/smart-storage/xdm.service.ts","ng://@csmart/ngc-smart-core/lib/smart-offender-header/smart-offender-header.service.ts","ng://@csmart/ngc-smart-core/lib/smart-offender-header/smart-offender-header.component.ts","ng://@csmart/ngc-smart-core/lib/smart-navbar/smart-navbar.service.ts","ng://@csmart/ngc-smart-core/lib/smart-navbar/smart-navbar.component.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-error.component.ts","ng://@csmart/ngc-smart-core/lib/smart-staff-offender-options/smart-staff-offender-options.service.ts","ng://@csmart/ngc-smart-core/lib/smart-staff-offender-options/smart-staff-offender-options.component.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-auth.service.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-access-control.directive.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-authorization-guard.service.ts","ng://@csmart/ngc-smart-core/lib/ngc-smart-core.module.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-login-staff-resolver.service.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-selected-offender-resolver.service.ts","ng://@csmart/ngc-smart-core/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-access-control-config.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}\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","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject, Observable } from 'rxjs';\r\nimport { map } 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>();\r\n private staffSubject = new Subject<LoginStaff>();\r\n private offenderQuerySubject = new Subject<OffenderQuery>();\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 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\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();\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();\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();\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 { FormControl } 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 FormControl();\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.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\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 }\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 (urlTree\r\n && urlTree.root\r\n && urlTree.root.segments\r\n && urlTree.root.segments.length > 1) {\r\n this.router.navigate([urlTree.root.segments[0].path]);\r\n } else if (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 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","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 OnChanges,\r\n OnDestroy,\r\n Input,\r\n NgZone,\r\n ViewChild,\r\n isDevMode,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { MatTabGroup } from '@angular/material';\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\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, OnChanges, OnDestroy {\r\n @Input() serviceApiUrl: string;\r\n @Input() appModuleId = 'SMART';\r\n @ViewChild('tabs') tabGroup: MatTabGroup;\r\n selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n offenderSubscription: Subscription;\r\n staffSubscription: Subscription;\r\n isAuthenticated = false;\r\n\r\n navbarConfigs: SmartNavbarConfig[];\r\n\r\n constructor(\r\n private navbarConfigService: SmartNavbarService,\r\n private xdmService: XdmService,\r\n // private zone: NgZone,\r\n private authnService: MsalService,\r\n ) {}\r\n\r\n ngOnChanges() {\r\n /*\r\n console.log(this.selectedTab);\r\n setTimeout(() => {\r\n this.tabGroup.selectedIndex = this.selectedTab;\r\n }, 1000);\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.zone.run(() => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n // });\r\n });\r\n\r\n this.offenderSubscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n // this.zone.run(() => {\r\n this.selectedOffender = selectedOffender;\r\n // });\r\n });\r\n\r\n this.staffSubscription = this.xdmService\r\n .getStaffUpdate()\r\n .subscribe((loginStaff) => {\r\n // this.zone.run(() => {\r\n this.loginStaff = loginStaff;\r\n // });\r\n });\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 });\r\n\r\n this.isAuthenticated = this.authnService.getAccount() ? true : false;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.offenderSubscription.unsubscribe();\r\n this.staffSubscription.unsubscribe();\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 hasAppModulePermission(appModuleId) {\r\n if (this.loginStaff && this.loginStaff.permissions && this.loginStaff.permissions.length > 0) {\r\n return this.loginStaff.permissions.findIndex(p => p.appModuleId === appModuleId) > -1;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public get hasExternalUserRole() {\r\n if (this.loginStaff && this.loginStaff.roles && this.loginStaff.roles.length > 0) {\r\n return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;\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// EUDTL\r\n// EUDUSM\r\n// EUJDG\r\n\r\n// EUMPD\r\n// EUSOTV\r\n// EUUSA2\r\n\r\n// EUUSAO\r\n// EUUSPC\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","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, from, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { MatSnackBar } from '@angular/material';\nimport {\n SMART_DATA_SERVICE_URL,\n} from '../smart-storage/smart-storage-model';\n\n@Injectable()\nexport class SmartStaffOffenderOptionsService {\n constructor(\n @Inject(SMART_DATA_SERVICE_URL) private serviceApiUrl,\n private http: HttpClient, private matSnackBar: MatSnackBar\n ) { }\n\n public showMessage(message) {\n this.matSnackBar.open(message, null, {\n duration: 2000,\n });\n }\n\n private convertEmptyToNull(jsonObject: JSON) {\n if (!jsonObject) {\n return;\n }\n\n if (jsonObject instanceof Array) {\n jsonObject.forEach(obj => {\n this.convertEmptyToNull(obj);\n });\n }\n\n const keys = Object.keys(jsonObject);\n keys.forEach(key => {\n if (typeof jsonObject[key] === 'object') {\n this.convertEmptyToNull(jsonObject[key]);\n } else if (typeof jsonObject[key] === 'string' && jsonObject[key].trim() === '') {\n jsonObject[key] = null;\n }\n });\n }\n\n private getGraphQueryData(queryName: string, queryString: string): Observable<any> {\n return this.http\n .post<any>(this.serviceApiUrl, { query: queryString })\n .pipe(\n map(({ data }) => {\n return data[queryName];\n }));\n }\n \n getOffenderListOptions(): Observable<any> {\n const queryName = 'findOffenderListOptions';\n const queryString = `{\n ${queryName} {\n data {\n offenderListOptionId\n name\n serviceApiFieldName\n }\n message\n }\n }`;\n\n return this.getGraphQueryData(queryName, queryString);\n }\n\n public getStaffOffenderListOptions(\n staffId: number,\n ): Observable<Array<any>> {\n const queryString = `{findStaffOffenderListOptions(input:{\n where:{\n staffId: ${staffId}\n }\n }){\n data{\n offenderListOptionId\n }\n } }`;\n return this.http\n .post<any>(this.serviceApiUrl, { query: queryString })\n .pipe(\n map(({ data }) => {\n return data.findStaffOffenderListOptions.data;\n }),\n );\n }\n\n saveStaffOffenderListOptionsData(dataToSave: any) { //}: Observable<any> {\n\n // this.convertEmptyToNull(dataToSave);\n const queryName = 'upsertStaffOffenderListOption';\n const query = `mutation {\n upsertStaffOffenderListOption(input: ${this.convertToString(dataToSave)}) {\n message\n }\n }`;\n\n;\n return this.http\n .post<any>(this.serviceApiUrl, { query });\n /*.pipe(\n map(({ data }) => {\n return data[queryName];\n }));*/\n\n\n }\n\n convertToString(obj): string {\n let result = '';\n\n if (!obj) {\n return result;\n }\n\n if (obj instanceof Array) {\n result += ' [';\n obj.forEach(eObj => {\n result += this.convertToString(eObj);\n });\n result += '],';\n } else {\n result += '{';\n const keys = Object.keys(obj);\n keys.forEach((key) => {\n if (typeof obj[key] === 'object') {\n result += key + ':' + this.convertToString(obj[key]);\n } else {\n if (isNaN(obj[key])) {\n result += key + ':\"' + obj[key] + '\",';\n } else {\n result += key + ':' + obj[key] + ',';\n }\n }\n });\n result = result.substring(0, result.length - 1);\n result += '},';\n }\n return result;\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\nimport { FormBuilder,\n FormGroup,\n FormControl,\n Validators,\n ValidatorFn,\n AbstractControl,\n} from '@angular/forms';\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { XdmService} from '../smart-storage/xdm.service';\n\n@Component({\n selector: 'lib-smart-staff-offender-options',\n templateUrl: './smart-staff-offender-options.component.html',\n styleUrls: ['./smart-staff-offender-options.component.css']\n})\nexport class SmartStaffOffenderOptionsComponent implements OnInit {\n loginStaff: LoginStaff;\n offenderListOptions: Array<any> = [];\n frmGroup: FormGroup;\n constructor(\n private route: ActivatedRoute,\n private offenderService: SmartStaffOffenderOptionsService,\n private xdmService: XdmService\n ) { }\n\n ngOnInit() {\n const routData = this.route.snapshot.data;\n this.loginStaff = routData.loginStaff;\n this.offenderListOptions = routData.selectedOffenderResolverService;\n this.frmGroup = this.createForm();\n this.offenderService.getStaffOffenderListOptions(this.loginStaff.staffId).subscribe(data => {\n this.fillForm(data);\n });\n }\n\n private fillForm(data) {\n if (data) {\n const offenderListOptionsFg = this.frmGroup.get('offenderListOptions');\n data.forEach(element => {\n offenderListOptionsFg.get(element.offenderListOptionId).setValue(true);\n });\n }\n\n }\n private createForm() {\n const offenderListOptionsFg = new FormGroup({\n });\n\n this.offenderListOptions.forEach( (dt, i) => {\n offenderListOptionsFg.addControl(dt.offenderListOptionId, new FormControl(false));\n });\n\n return new FormGroup({\n offenderListOptions: offenderListOptionsFg,\n });\n }\n\n onSave() {\n const data = {\n options: [],\n staffId: this.loginStaff.staffId,\n modifiedBy: this.loginStaff.staffId\n };\n\n const offenderListOptionsVal = this.frmGroup.get('offenderListOptions').value;\n const keys = Object.keys(offenderListOptionsVal);\n keys.forEach(key => {\n if (offenderListOptionsVal[key]) {\n data.options.push({'offenderListOptionId': key});\n }\n });\n\n this.offenderService.saveStaffOffenderListOptionsData(data).subscribe(rtrDatea=>{\n if (rtrDatea.message) {\n this.offenderService.showMessage(rtrDatea.message);\n } else {\n this.offenderService.showMessage('Saved successfully');\n this.xdmService.refreshLoginStaffOptions();\n }\n });\n }\n\n}\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of, from } 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 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\nimport { nullSafeIsEquivalent } from '@angular/compiler/src/output/output_ast';\r\n// import { stringify } from 'querystring';\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 ) { }\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.authnService.getAccount().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 private getTeamUrl(app: string, hash: string): string {\r\n let webIndex = window.location.href.indexOf('web-');\r\n const uptoweb = (window.location.href.substring(0, webIndex) + 'web-');\r\n const afterweb = window.location.href.replace(uptoweb, '');\r\n webIndex = afterweb.indexOf('-', 0);\r\n let lastPart = (afterweb.substring(webIndex));\r\n lastPart = lastPart.replace(window.location.pathname, '');\r\n return uptoweb + app + lastPart + hash;\r\n }\r\n\r\n public redirectToTeam(loginStaff: LoginStaff) {\r\n if (loginStaff.roles.filter(role => role.roleId === 'EUUSPC').length > 0) {\r\n window.location.href = this.getTeamUrl('investigation', '/assignment');\r\n }\r\n }\r\n\r\n public async setSelectedOffender(selectedOffender: SelectedOffender) {\r\n if (selectedOffender) {\r\n // if (!selectedOffender.assignmentStaffRelationId) {\r\n const relation = await this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n selectedOffender.offenderId,\r\n ).toPromise();\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 = 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 = this.selectedOffender\r\n .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 const permissions = this.loginStaff.permissions;\r\n const resource = accessControlConfig.route.url[0].path;\r\n const roleId = accessControlConfig.roleId\r\n ? accessControlConfig.roleId.toUpperCase()\r\n : null;\r\n const accessType = accessControlConfig.accessType;\r\n const assignmentStaffRelationId = !this.selectedOffender\r\n .assignmentStaffRelationId\r\n ? 'N/A'\r\n : this.selectedOffender.assignmentStaffRelationId;\r\n const permission = permissions.find((p) => {\r\n return (\r\n p.appModuleId === accessControlConfig.appModuleId\r\n && p.resource === resource\r\n && (!roleId || p.roleId === roleId)\r\n // && p.assignmentStaffRelationId === assignmentStaffRelationId\r\n );\r\n });\r\n\r\n if (permission) {\r\n if (accessType === 'read') {\r\n if (!permission.readFlag) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else if (\r\n (accessType === 'create' && !permission.createFlag) ||\r\n (accessType === 'update' && !permission.updateFlag) ||\r\n (accessType === 'delete' && !permission.deleteFlag) ||\r\n (accessType === 'assign' && !permission.assignFlag) ||\r\n (accessType === 'close' && !permission.closeFlag) ||\r\n (accessType === 'expunge' && !permission.expungeFlag) ||\r\n (accessType === 'reopen' && !permission.reopenFlag)\r\n ) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n if (accessType === 'read') {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public canAppFeatureActivate(loginStaff: LoginStaff, feature: string, appModuleId = null) {\r\n if (!this.hasExternalUserRole(loginStaff.roles)) {\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 hasExternalUserRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isExternalRole) > -1;\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[], feature: string, appModuleId: string) {\r\n if (permissions && permissions.length > 0) {\r\n if (appModuleId) {\r\n return permissions.findIndex((p) =>\r\n p.resource === feature && p.appModuleId === appModuleId) > -1;\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(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 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 const queryString = `\r\n {\r\n findvStaffs(input: {where: {userName: \"${userName}\", activeFlag: true}}) {\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 }\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 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('##### getStaff() from service ', result);\r\n }\r\n if (result.data.findvStaffs.data.length > 0) {\r\n const data = result.data.findvStaffs.data[0];\r\n this.xdmService.setLoginStaff(data);\r\n this.loginStaff = data;\r\n return data;\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 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","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 !this.accessControlConfig.route.data.selectedOffender\r\n ) {\r\n return;\r\n }\r\n\r\n const loginStaff = this.accessControlConfig.route.data.loginStaff;\r\n if (!this.auth.hasExternalUserRole(loginStaff.roles)) {\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 {\r\n CanActivate,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n} 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 implements CanActivate {\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.hasExternalUserRole(loginStaff.roles)) {\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 { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatButtonModule,\r\n MatMenuModule,\r\n MatTabsModule,\r\n MatSelectModule,\r\n MatCard,\r\n MatCheckbox,\r\n MatCheckboxModule,\r\n MatCardModule,\r\n MatSnackBar,\r\n} from '@angular/material';\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\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 ],\r\n})\r\nexport class NgcSmartCoreModule {}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport {\r\n Resolve,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n Router,\r\n} 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 implements Resolve<LoginStaff> {\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 {\r\n Resolve,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n Router,\r\n} from '@angular/router';\r\nimport { Observable, from, of, EMPTY, throwError, concat } from 'rxjs';\r\nimport {\r\n catchError,\r\n mergeMap,\r\n map,\r\n take,\r\n retryWhen,\r\n tap,\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 implements Resolve<SelectedOffender> {\r\n constructor(\r\n private service: XdmService,\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<SelectedOffender> | Observable<never> {\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 (!selectedOffender) {\r\n return throwError('No offender selected.');\r\n }\r\n return of(selectedOffender);\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('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';\nimport { Resolve } from '@angular/router';\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SmartStaffOffenderOptionsResolverService implements Resolve<Observable<any>> {\n constructor(private offenderService: SmartStaffOffenderOptionsService) {}\n resolve() {\n return this.offenderService.getOffenderListOptions()\n .pipe(\n map(({ data }) => {\n return data;\n }),\n );\n }\n }\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"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"csmart-ngc-smart-core.js.map","sources":["ng://@csmart/ngc-smart-core/lib/smart-storage/smart-storage-model.ts","ng://@csmart/ngc-smart-core/lib/smart-storage/xdm.service.ts","ng://@csmart/ngc-smart-core/lib/smart-offender-header/smart-offender-header.service.ts","ng://@csmart/ngc-smart-core/lib/smart-offender-header/smart-offender-header.component.ts","ng://@csmart/ngc-smart-core/lib/smart-navbar/smart-navbar.service.ts","ng://@csmart/ngc-smart-core/lib/smart-navbar/smart-navbar.component.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-error.component.ts","ng://@csmart/ngc-smart-core/lib/smart-staff-offender-options/smart-staff-offender-options.service.ts","ng://@csmart/ngc-smart-core/lib/smart-staff-offender-options/smart-staff-offender-options.component.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-auth.service.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-access-control.directive.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-authorization-guard.service.ts","ng://@csmart/ngc-smart-core/lib/ngc-smart-core.module.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-login-staff-resolver.service.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-selected-offender-resolver.service.ts","ng://@csmart/ngc-smart-core/lib/smart-staff-offender-options/smart-staff-offender-options-resolver.service.ts","ng://@csmart/ngc-smart-core/lib/smart-auth/smart-access-control-config.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}\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","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject, Observable } from 'rxjs';\r\nimport { map } 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>();\r\n private staffSubject = new Subject<LoginStaff>();\r\n private offenderQuerySubject = new Subject<OffenderQuery>();\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 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\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();\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();\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();\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 { FormControl } 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 FormControl();\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.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\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 }\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 (urlTree\r\n && urlTree.root\r\n && urlTree.root.segments\r\n && urlTree.root.segments.length > 1) {\r\n this.router.navigate([urlTree.root.segments[0].path]);\r\n } else if (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 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","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 OnChanges,\r\n OnDestroy,\r\n Input,\r\n NgZone,\r\n ViewChild,\r\n isDevMode,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { MatTabGroup } from '@angular/material';\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\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, OnChanges, OnDestroy {\r\n @Input() serviceApiUrl: string;\r\n @Input() appModuleId = 'SMART';\r\n @ViewChild('tabs') tabGroup: MatTabGroup;\r\n selectedOffender: SelectedOffender;\r\n loginStaff: LoginStaff;\r\n offenderSubscription: Subscription;\r\n staffSubscription: Subscription;\r\n isAuthenticated = false;\r\n\r\n navbarConfigs: SmartNavbarConfig[];\r\n\r\n constructor(\r\n private navbarConfigService: SmartNavbarService,\r\n private xdmService: XdmService,\r\n // private zone: NgZone,\r\n private authnService: MsalService,\r\n ) {}\r\n\r\n ngOnChanges() {\r\n /*\r\n console.log(this.selectedTab);\r\n setTimeout(() => {\r\n this.tabGroup.selectedIndex = this.selectedTab;\r\n }, 1000);\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.zone.run(() => {\r\n this.loginStaff = loginStaff ? loginStaff : null;\r\n // });\r\n });\r\n\r\n this.offenderSubscription = this.xdmService\r\n .getOffenderUpdate()\r\n .subscribe((selectedOffender) => {\r\n // this.zone.run(() => {\r\n this.selectedOffender = selectedOffender;\r\n // });\r\n });\r\n\r\n this.staffSubscription = this.xdmService\r\n .getStaffUpdate()\r\n .subscribe((loginStaff) => {\r\n // this.zone.run(() => {\r\n this.loginStaff = loginStaff;\r\n // });\r\n });\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 });\r\n\r\n this.isAuthenticated = this.authnService.getAccount() ? true : false;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.offenderSubscription.unsubscribe();\r\n this.staffSubscription.unsubscribe();\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 hasAppModulePermission(appModuleId) {\r\n if (this.loginStaff && this.loginStaff.permissions && this.loginStaff.permissions.length > 0) {\r\n return this.loginStaff.permissions.findIndex(p => p.appModuleId === appModuleId) > -1;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public get hasExternalUserRole() {\r\n if (this.loginStaff && this.loginStaff.roles && this.loginStaff.roles.length > 0) {\r\n return this.loginStaff.roles.findIndex(this.isExternalRole) > -1;\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// EUDTL\r\n// EUDUSM\r\n// EUJDG\r\n\r\n// EUMPD\r\n// EUSOTV\r\n// EUUSA2\r\n\r\n// EUUSAO\r\n// EUUSPC\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","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, from, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { MatSnackBar } from '@angular/material';\nimport {\n SMART_DATA_SERVICE_URL,\n} from '../smart-storage/smart-storage-model';\n\n@Injectable()\nexport class SmartStaffOffenderOptionsService {\n constructor(\n @Inject(SMART_DATA_SERVICE_URL) private serviceApiUrl,\n private http: HttpClient, private matSnackBar: MatSnackBar\n ) { }\n\n public showMessage(message) {\n this.matSnackBar.open(message, null, {\n duration: 2000,\n });\n }\n\n private convertEmptyToNull(jsonObject: JSON) {\n if (!jsonObject) {\n return;\n }\n\n if (jsonObject instanceof Array) {\n jsonObject.forEach(obj => {\n this.convertEmptyToNull(obj);\n });\n }\n\n const keys = Object.keys(jsonObject);\n keys.forEach(key => {\n if (typeof jsonObject[key] === 'object') {\n this.convertEmptyToNull(jsonObject[key]);\n } else if (typeof jsonObject[key] === 'string' && jsonObject[key].trim() === '') {\n jsonObject[key] = null;\n }\n });\n }\n\n private getGraphQueryData(queryName: string, queryString: string): Observable<any> {\n return this.http\n .post<any>(this.serviceApiUrl, { query: queryString })\n .pipe(\n map(({ data }) => {\n return data[queryName];\n }));\n }\n \n getOffenderListOptions(): Observable<any> {\n const queryName = 'findOffenderListOptions';\n const queryString = `{\n ${queryName} {\n data {\n offenderListOptionId\n name\n serviceApiFieldName\n }\n message\n }\n }`;\n\n return this.getGraphQueryData(queryName, queryString);\n }\n\n public getStaffOffenderListOptions(\n staffId: number,\n ): Observable<Array<any>> {\n const queryString = `{findStaffOffenderListOptions(input:{\n where:{\n staffId: ${staffId}\n }\n }){\n data{\n offenderListOptionId\n }\n } }`;\n return this.http\n .post<any>(this.serviceApiUrl, { query: queryString })\n .pipe(\n map(({ data }) => {\n return data.findStaffOffenderListOptions.data;\n }),\n );\n }\n\n saveStaffOffenderListOptionsData(dataToSave: any) { //}: Observable<any> {\n\n // this.convertEmptyToNull(dataToSave);\n const queryName = 'upsertStaffOffenderListOption';\n const query = `mutation {\n upsertStaffOffenderListOption(input: ${this.convertToString(dataToSave)}) {\n message\n }\n }`;\n\n;\n return this.http\n .post<any>(this.serviceApiUrl, { query });\n /*.pipe(\n map(({ data }) => {\n return data[queryName];\n }));*/\n\n\n }\n\n convertToString(obj): string {\n let result = '';\n\n if (!obj) {\n return result;\n }\n\n if (obj instanceof Array) {\n result += ' [';\n obj.forEach(eObj => {\n result += this.convertToString(eObj);\n });\n result += '],';\n } else {\n result += '{';\n const keys = Object.keys(obj);\n keys.forEach((key) => {\n if (typeof obj[key] === 'object') {\n result += key + ':' + this.convertToString(obj[key]);\n } else {\n if (isNaN(obj[key])) {\n result += key + ':\"' + obj[key] + '\",';\n } else {\n result += key + ':' + obj[key] + ',';\n }\n }\n });\n result = result.substring(0, result.length - 1);\n result += '},';\n }\n return result;\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\nimport { FormBuilder,\n FormGroup,\n FormControl,\n Validators,\n ValidatorFn,\n AbstractControl,\n} from '@angular/forms';\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { XdmService} from '../smart-storage/xdm.service';\n\n@Component({\n selector: 'lib-smart-staff-offender-options',\n templateUrl: './smart-staff-offender-options.component.html',\n styleUrls: ['./smart-staff-offender-options.component.css']\n})\nexport class SmartStaffOffenderOptionsComponent implements OnInit {\n loginStaff: LoginStaff;\n offenderListOptions: Array<any> = [];\n frmGroup: FormGroup;\n constructor(\n private route: ActivatedRoute,\n private offenderService: SmartStaffOffenderOptionsService,\n private xdmService: XdmService\n ) { }\n\n ngOnInit() {\n const routData = this.route.snapshot.data;\n this.loginStaff = routData.loginStaff;\n this.offenderListOptions = routData.selectedOffenderResolverService;\n this.frmGroup = this.createForm();\n this.offenderService.getStaffOffenderListOptions(this.loginStaff.staffId).subscribe(data => {\n this.fillForm(data);\n });\n }\n\n private fillForm(data) {\n if (data) {\n const offenderListOptionsFg = this.frmGroup.get('offenderListOptions');\n data.forEach(element => {\n offenderListOptionsFg.get(element.offenderListOptionId).setValue(true);\n });\n }\n\n }\n private createForm() {\n const offenderListOptionsFg = new FormGroup({\n });\n\n this.offenderListOptions.forEach( (dt, i) => {\n offenderListOptionsFg.addControl(dt.offenderListOptionId, new FormControl(false));\n });\n\n return new FormGroup({\n offenderListOptions: offenderListOptionsFg,\n });\n }\n\n onSave() {\n const data = {\n options: [],\n staffId: this.loginStaff.staffId,\n modifiedBy: this.loginStaff.staffId\n };\n\n const offenderListOptionsVal = this.frmGroup.get('offenderListOptions').value;\n const keys = Object.keys(offenderListOptionsVal);\n keys.forEach(key => {\n if (offenderListOptionsVal[key]) {\n data.options.push({'offenderListOptionId': key});\n }\n });\n\n this.offenderService.saveStaffOffenderListOptionsData(data).subscribe(rtrDatea=>{\n if (rtrDatea.message) {\n this.offenderService.showMessage(rtrDatea.message);\n } else {\n this.offenderService.showMessage('Saved successfully');\n this.xdmService.refreshLoginStaffOptions();\n }\n });\n }\n\n}\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of, from } 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 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\nimport { nullSafeIsEquivalent } from '@angular/compiler/src/output/output_ast';\r\n// import { stringify } from 'querystring';\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 ) { }\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.authnService.getAccount().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 private getTeamUrl(app: string, hash: string): string {\r\n let webIndex = window.location.href.indexOf('web-');\r\n const uptoweb = (window.location.href.substring(0, webIndex) + 'web-');\r\n const afterweb = window.location.href.replace(uptoweb, '');\r\n webIndex = afterweb.indexOf('-', 0);\r\n let lastPart = (afterweb.substring(webIndex));\r\n lastPart = lastPart.replace(window.location.pathname, '');\r\n return uptoweb + app + lastPart + hash;\r\n }\r\n\r\n public redirectToTeam(loginStaff: LoginStaff) {\r\n if (loginStaff.roles.findIndex(role => role.roleId === 'EUUSPC') > -1) {\r\n window.location.href = this.getTeamUrl('investigation', '/assignment');\r\n }\r\n if (loginStaff.roles.findIndex(role => role.roleId.substring(0, 3) === 'RSC') > -1) {\r\n window.location.href = this.getTeamUrl('rsc', '/offender-list');\r\n }\r\n }\r\n\r\n public async setSelectedOffender(selectedOffender: SelectedOffender) {\r\n if (selectedOffender) {\r\n // if (!selectedOffender.assignmentStaffRelationId) {\r\n const relation = await this.getStaffOffenderRelation(\r\n this.loginStaff.staffId,\r\n selectedOffender.offenderId,\r\n ).toPromise();\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 = 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 = this.selectedOffender\r\n .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 const permissions = this.loginStaff.permissions;\r\n const resource = accessControlConfig.route.url[0].path;\r\n const roleId = accessControlConfig.roleId\r\n ? accessControlConfig.roleId.toUpperCase()\r\n : null;\r\n const accessType = accessControlConfig.accessType;\r\n const assignmentStaffRelationId = !this.selectedOffender\r\n .assignmentStaffRelationId\r\n ? 'N/A'\r\n : this.selectedOffender.assignmentStaffRelationId;\r\n const permission = permissions.find((p) => {\r\n return (\r\n p.appModuleId === accessControlConfig.appModuleId\r\n && p.resource === resource\r\n && (!roleId || p.roleId === roleId)\r\n // && p.assignmentStaffRelationId === assignmentStaffRelationId\r\n );\r\n });\r\n\r\n if (permission) {\r\n if (accessType === 'read') {\r\n if (!permission.readFlag) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else if (\r\n (accessType === 'create' && !permission.createFlag) ||\r\n (accessType === 'update' && !permission.updateFlag) ||\r\n (accessType === 'delete' && !permission.deleteFlag) ||\r\n (accessType === 'assign' && !permission.assignFlag) ||\r\n (accessType === 'close' && !permission.closeFlag) ||\r\n (accessType === 'expunge' && !permission.expungeFlag) ||\r\n (accessType === 'reopen' && !permission.reopenFlag)\r\n ) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n if (accessType === 'read') {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public canAppFeatureActivate(loginStaff: LoginStaff, feature: string, appModuleId = null) {\r\n if (!this.hasExternalUserRole(loginStaff.roles)) {\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 hasExternalUserRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isExternalRole) > -1;\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[], feature: string, appModuleId: string) {\r\n if (permissions && permissions.length > 0) {\r\n if (appModuleId) {\r\n return permissions.findIndex((p) =>\r\n p.resource === feature && p.appModuleId === appModuleId) > -1;\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(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 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 const queryString = `\r\n {\r\n findvStaffs(input: {where: {userName: \"${userName}\", activeFlag: true}}) {\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 }\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 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('##### getStaff() from service ', result);\r\n }\r\n if (result.data.findvStaffs.data.length > 0) {\r\n const data = result.data.findvStaffs.data[0];\r\n this.xdmService.setLoginStaff(data);\r\n this.loginStaff = data;\r\n return data;\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 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","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 !this.accessControlConfig.route.data.selectedOffender\r\n ) {\r\n return;\r\n }\r\n\r\n const loginStaff = this.accessControlConfig.route.data.loginStaff;\r\n if (!this.auth.hasExternalUserRole(loginStaff.roles)) {\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 {\r\n CanActivate,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n} 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 implements CanActivate {\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.hasExternalUserRole(loginStaff.roles)) {\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 { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n MatButtonModule,\r\n MatMenuModule,\r\n MatTabsModule,\r\n MatSelectModule,\r\n MatCard,\r\n MatCheckbox,\r\n MatCheckboxModule,\r\n MatCardModule,\r\n MatSnackBar,\r\n} from '@angular/material';\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\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 ],\r\n})\r\nexport class NgcSmartCoreModule {}\r\n","import { Injectable, NgZone, isDevMode } from '@angular/core';\r\nimport {\r\n Resolve,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n Router,\r\n} 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 implements Resolve<LoginStaff> {\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 {\r\n Resolve,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n Router,\r\n} from '@angular/router';\r\nimport { Observable, from, of, EMPTY, throwError, concat } from 'rxjs';\r\nimport {\r\n catchError,\r\n mergeMap,\r\n map,\r\n take,\r\n retryWhen,\r\n tap,\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 implements Resolve<SelectedOffender> {\r\n constructor(\r\n private service: XdmService,\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<SelectedOffender> | Observable<never> {\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 (!selectedOffender) {\r\n return throwError('No offender selected.');\r\n }\r\n return of(selectedOffender);\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('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';\nimport { Resolve } from '@angular/router';\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SmartStaffOffenderOptionsResolverService implements Resolve<Observable<any>> {\n constructor(private offenderService: SmartStaffOffenderOptionsService) {}\n resolve() {\n return this.offenderService.getOffenderListOptions()\n .pipe(\n map(({ data }) => {\n return data;\n }),\n );\n }\n }\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"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { HttpClient, HttpClientModule } from '@angular/common/http';
|
|
|
7
7
|
import { MsalService } from '@azure/msal-angular';
|
|
8
8
|
import { Router, ActivatedRoute } from '@angular/router';
|
|
9
9
|
import { Subject, of, from, EMPTY, throwError, concat } from 'rxjs';
|
|
10
|
-
import { InjectionToken, Injectable, Inject, isDevMode, Directive, Input, ElementRef, Component, ViewChild, ViewEncapsulation,
|
|
10
|
+
import { InjectionToken, Injectable, Inject, isDevMode, Directive, Input, ElementRef, Component, ViewChild, ViewEncapsulation, NgZone, NgModule, defineInjectable, inject } from '@angular/core';
|
|
11
11
|
import { map, switchMap, take, catchError, mergeMap, retryWhen, delay } from 'rxjs/operators';
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -1475,13 +1475,20 @@ var SmartAuthService = /** @class */ (function () {
|
|
|
1475
1475
|
* @return {?}
|
|
1476
1476
|
*/
|
|
1477
1477
|
function (loginStaff) {
|
|
1478
|
-
if (loginStaff.roles.
|
|
1478
|
+
if (loginStaff.roles.findIndex((/**
|
|
1479
1479
|
* @param {?} role
|
|
1480
1480
|
* @return {?}
|
|
1481
1481
|
*/
|
|
1482
|
-
function (role) { return role.roleId === 'EUUSPC'; }))
|
|
1482
|
+
function (role) { return role.roleId === 'EUUSPC'; })) > -1) {
|
|
1483
1483
|
window.location.href = this.getTeamUrl('investigation', '/assignment');
|
|
1484
1484
|
}
|
|
1485
|
+
if (loginStaff.roles.findIndex((/**
|
|
1486
|
+
* @param {?} role
|
|
1487
|
+
* @return {?}
|
|
1488
|
+
*/
|
|
1489
|
+
function (role) { return role.roleId.substring(0, 3) === 'RSC'; })) > -1) {
|
|
1490
|
+
window.location.href = this.getTeamUrl('rsc', '/offender-list');
|
|
1491
|
+
}
|
|
1485
1492
|
};
|
|
1486
1493
|
/**
|
|
1487
1494
|
* @param {?} selectedOffender
|