@csmart/ngc-smart-core 0.7.90 → 0.7.91
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 +14 -8
- 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 +5 -6
- package/esm2015/lib/smart-offender-header/smart-offender-header.component.js +2 -3
- package/esm2015/lib/smart-storage/xdm.service.js +6 -2
- package/esm5/lib/smart-auth/smart-auth.service.js +5 -6
- package/esm5/lib/smart-offender-header/smart-offender-header.component.js +2 -3
- package/esm5/lib/smart-storage/xdm.service.js +8 -2
- package/fesm2015/csmart-ngc-smart-core.js +10 -8
- package/fesm2015/csmart-ngc-smart-core.js.map +1 -1
- package/fesm5/csmart-ngc-smart-core.js +12 -8
- package/fesm5/csmart-ngc-smart-core.js.map +1 -1
- package/lib/smart-storage/xdm.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["node_modules/tslib/tslib.es6.js","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"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","adopt","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","__read","o","m","r","i","ar","error","Permission","selectedRole","intakeFlag","StorageKey","selectedOffender","loginStaff","offenderQuery","SMART_WEB_STORAGE_LISTENER_URL","InjectionToken","SMART_WEB_PORTAL_URL","SMART_DATA_SERVICE_URL","SMART_DOMAIN_FORMAT","XdmService","prototype","init","frame","document","createElement","src","smartStorageListenerUrl","id","name","Math","random","toString","onload","style","visibility","appendChild","connection","connectToChild","iframe","debug","getStaffOffenderListOptions","staffId","queryString","httpClient","post","smartDataServiceUrl","query","pipe","map","_a","data","findvStaffOffenderListOptions","clearAll","_this","promise","child","offenderSubject","staffSubject","setSelectedOffender","getSelectedOffender","clearSelectedOffender","getOffenderUpdate","asObservable","setLoginStaff","getLoginStaff","clearLoginStaff","getStaffUpdate","refreshLoginStaffOptions","oldLoginStaff","subscribe","optionData","console","log","options","setOffenderQuery","offenderQuerySubject","getOffenderQuery","clearOffenderQuery","getOffenderQueryUpdate","Injectable","args","providedIn","Inject","DOCUMENT","HttpClient","Subject","isDevMode","SmartOffenderHeaderService","getStaffOffenders","http","filterOffenderList","SmartOffenderHeaderComponent","ngOnInit","isAuthenticated","authnService","getAccount","xdmService","offenderId","subscription","setSelectedOffenderControl","offenderQueryList","offenders","offenderQuerySubscription","offenderList","__spread","arguments","concat","selectedOffenderControl$","valueChanges","onOffenderSelected","router","routeReuseStrategy","shouldReuseRoute","ngOnDestroy","unsubscribe","offender","reloadCurrentRoute","find","x","setValue","emitEvent","urlTree","parseUrl","url","root","segments","navigate","path","children","primary","navigateByUrl","hasIntakeRole","roles","findIndex","isIntakeRole","role","roleId","Component","selector","template","MsalService","Router","smartOffenderHeaderService","FormControl","SmartNavbarService","getNavbarConfigs","serviceApiUrl","findAppModules","SmartNavbarComponent","ngOnChanges","offenderSubscription","staffSubscription","navbarConfigService","configs","navbarConfigs","sort","a","b","displayOrder","logout","getAppModuleUrl","config","appModuleId","hasAppModulePermission","permissions","p","Object","defineProperty","isExternalRole","encapsulation","ViewEncapsulation","None","Input","ViewChild","SmartErrorComponent","type","route","snapshot","queryParamMap","get","message","portal","window","location","href","smartWebPortalUrl","ActivatedRoute","SmartStaffOffenderOptionsService","showMessage","matSnackBar","open","duration","convertEmptyToNull","jsonObject","Array","forEach","obj","keys","key","trim","getGraphQueryData","queryName","getOffenderListOptions","findStaffOffenderListOptions","saveStaffOffenderListOptionsData","dataToSave","convertToString","eObj","isNaN","substring","MatSnackBar","SmartStaffOffenderOptionsComponent","routData","offenderListOptions","selectedOffenderResolverService","frmGroup","createForm","offenderService","fillForm","offenderListOptionsFg_1","element","offenderListOptionId","offenderListOptionsFg","FormGroup","dt","addControl","onSave","modifiedBy","offenderListOptionsVal","rtrDatea","SmartAuthService","of","userName","getStaff","from","switchMap","storedResult","staffName","indexOf","getTeamUrl","app","afterHash","smartDomainFormatUrl","replace","isSameHost","redirectToTeam","origin","getStaffOffenderRelation","toPromise","relation","assignmentStaffRelationId","setPermission","_c","resource","_b","elements","querySelectorAll","pattern","hide","disable","classList","c","results","match","roleId_1","toUpperCase","right","permission","readFlag","createFlag","updateFlag","deleteFlag","assignFlag","closeFlag","expungeFlag","reopenFlag","nodeName","hideHtmlElement","disableHtmlElement","checkPermission","accessControlConfig","selData","accessType","canAppFeatureActivate","feature","hasAppFeaturePermission","setAttribute","take","findvStaffs","catchError","findvStaffOffenderRelations","getRolePermissions","findvRolePermissionPivots","totalCount","throwError","SmartAccessControlDirective","checkAccess","elementRef","nativeElement","display","auth","Directive","ElementRef","SmartAuthorizationGuard","canActivate","mergeMap","routeConfig","split","isFeatureValid","NgcSmartCoreModule","NgModule","declarations","imports","CommonModule","HttpClientModule","MatButtonModule","MatMenuModule","MatTabsModule","MatSelectModule","MatCardModule","MatCheckboxModule","ReactiveFormsModule","exports","providers","LoginStaffResolverService","state","queryParams","EMPTY","SelectedOffenderResolverService","service","retryWhen","errors","delay","NgZone","zone","SmartStaffOffenderOptionsResolverService","READ","CREATE","UPDATE","DELETE","EXPUNGE","ASSIGN","REOPEN","CLOSE"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","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\r\n//exception for redirection\r\nexport const SMART_DOMAIN_FORMAT = new InjectionToken<string>(\r\n 'SMART Domain Format URL',\r\n);\r\n\r\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject, Observable } 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 getAppModuleUrl(config: SmartNavbarConfig) {\r\n return (config && this.selectedOffender && config.appModuleId === 'PPMAS') ?\r\n `${config.url}?skipAppMetadata=true&OffenderId=${this.selectedOffender.offenderId}` : config.url;\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';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { MatSnackBar } from '@angular/material';\r\nimport {\r\n SMART_DATA_SERVICE_URL,\r\n} from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable()\r\nexport class SmartStaffOffenderOptionsService {\r\n constructor(\r\n @Inject(SMART_DATA_SERVICE_URL) private serviceApiUrl,\r\n private http: HttpClient, private matSnackBar: MatSnackBar\r\n ) { }\r\n\r\n public showMessage(message) {\r\n this.matSnackBar.open(message, null, {\r\n duration: 2000,\r\n });\r\n }\r\n\r\n private convertEmptyToNull(jsonObject: JSON) {\r\n if (!jsonObject) {\r\n return;\r\n }\r\n\r\n if (jsonObject instanceof Array) {\r\n jsonObject.forEach(obj => {\r\n this.convertEmptyToNull(obj);\r\n });\r\n }\r\n\r\n const keys = Object.keys(jsonObject);\r\n keys.forEach(key => {\r\n if (typeof jsonObject[key] === 'object') {\r\n this.convertEmptyToNull(jsonObject[key]);\r\n } else if (typeof jsonObject[key] === 'string' && jsonObject[key].trim() === '') {\r\n jsonObject[key] = null;\r\n }\r\n });\r\n }\r\n\r\n private getGraphQueryData(queryName: string, queryString: string): Observable<any> {\r\n return this.http\r\n .post<any>(this.serviceApiUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }));\r\n }\r\n \r\n getOffenderListOptions(): Observable<any> {\r\n const queryName = 'findOffenderListOptions';\r\n const queryString = `{\r\n ${queryName} {\r\n data {\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n }\r\n message\r\n }\r\n }`;\r\n\r\n return this.getGraphQueryData(queryName, queryString);\r\n }\r\n\r\n public getStaffOffenderListOptions(\r\n staffId: number,\r\n ): Observable<Array<any>> {\r\n const queryString = `{findStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n }\r\n } }`;\r\n return this.http\r\n .post<any>(this.serviceApiUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n return data.findStaffOffenderListOptions.data;\r\n }),\r\n );\r\n }\r\n\r\n saveStaffOffenderListOptionsData(dataToSave: any) { //}: Observable<any> {\r\n\r\n // this.convertEmptyToNull(dataToSave);\r\n const queryName = 'upsertStaffOffenderListOption';\r\n const query = `mutation {\r\n upsertStaffOffenderListOption(input: ${this.convertToString(dataToSave)}) {\r\n message\r\n }\r\n }`;\r\n\r\n;\r\n return this.http\r\n .post<any>(this.serviceApiUrl, { query });\r\n /*.pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }));*/\r\n\r\n\r\n }\r\n\r\n convertToString(obj): string {\r\n let result = '';\r\n\r\n if (!obj) {\r\n return result;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n result += ' [';\r\n obj.forEach(eObj => {\r\n result += this.convertToString(eObj);\r\n });\r\n result += '],';\r\n } else {\r\n result += '{';\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n if (typeof obj[key] === 'object') {\r\n result += key + ':' + this.convertToString(obj[key]);\r\n } else {\r\n if (isNaN(obj[key])) {\r\n result += key + ':\"' + obj[key] + '\",';\r\n } else {\r\n result += key + ':' + obj[key] + ',';\r\n }\r\n }\r\n });\r\n result = result.substring(0, result.length - 1);\r\n result += '},';\r\n }\r\n return result;\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { FormBuilder,\r\n FormGroup,\r\n FormControl,\r\n Validators,\r\n ValidatorFn,\r\n AbstractControl,\r\n} from '@angular/forms';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { XdmService} from '../smart-storage/xdm.service';\r\n\r\n@Component({\r\n selector: 'lib-smart-staff-offender-options',\r\n templateUrl: './smart-staff-offender-options.component.html',\r\n styleUrls: ['./smart-staff-offender-options.component.css']\r\n})\r\nexport class SmartStaffOffenderOptionsComponent implements OnInit {\r\n loginStaff: LoginStaff;\r\n offenderListOptions: Array<any> = [];\r\n frmGroup: FormGroup;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private offenderService: SmartStaffOffenderOptionsService,\r\n private xdmService: XdmService\r\n ) { }\r\n\r\n ngOnInit() {\r\n const routData = this.route.snapshot.data;\r\n this.loginStaff = routData.loginStaff;\r\n this.offenderListOptions = routData.selectedOffenderResolverService;\r\n this.frmGroup = this.createForm();\r\n this.offenderService.getStaffOffenderListOptions(this.loginStaff.staffId).subscribe(data => {\r\n this.fillForm(data);\r\n });\r\n }\r\n\r\n private fillForm(data) {\r\n if (data) {\r\n const offenderListOptionsFg = this.frmGroup.get('offenderListOptions');\r\n data.forEach(element => {\r\n offenderListOptionsFg.get(element.offenderListOptionId).setValue(true);\r\n });\r\n }\r\n\r\n }\r\n private createForm() {\r\n const offenderListOptionsFg = new FormGroup({\r\n });\r\n\r\n this.offenderListOptions.forEach( (dt, i) => {\r\n offenderListOptionsFg.addControl(dt.offenderListOptionId, new FormControl(false));\r\n });\r\n\r\n return new FormGroup({\r\n offenderListOptions: offenderListOptionsFg,\r\n });\r\n }\r\n\r\n onSave() {\r\n const data = {\r\n options: [],\r\n staffId: this.loginStaff.staffId,\r\n modifiedBy: this.loginStaff.staffId\r\n };\r\n\r\n const offenderListOptionsVal = this.frmGroup.get('offenderListOptions').value;\r\n const keys = Object.keys(offenderListOptionsVal);\r\n keys.forEach(key => {\r\n if (offenderListOptionsVal[key]) {\r\n data.options.push({'offenderListOptionId': key});\r\n }\r\n });\r\n\r\n this.offenderService.saveStaffOffenderListOptionsData(data).subscribe(rtrDatea=>{\r\n if (rtrDatea.message) {\r\n this.offenderService.showMessage(rtrDatea.message);\r\n } else {\r\n this.offenderService.showMessage('Saved successfully');\r\n this.xdmService.refreshLoginStaffOptions();\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of, from, throwError } from 'rxjs';\r\nimport { map, switchMap, take, catchError} from 'rxjs/operators';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nimport {\r\n LoginStaff,\r\n SelectedOffender,\r\n SMART_DATA_SERVICE_URL,\r\n SMART_DOMAIN_FORMAT,\r\n Role,\r\n Permission,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\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 @Inject(SMART_DOMAIN_FORMAT) private smartDomainFormatUrl: string,\r\n ) {}\r\n\r\n public getLoginStaff(): Observable<LoginStaff> {\r\n if (isDevMode) {\r\n console.log('SmartAuthService - getLoginStaff()');\r\n }\r\n if (!isDevMode && this.loginStaff) {\r\n if (this.loginStaff.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get internal instance in service',\r\n this.loginStaff,\r\n );\r\n }\r\n return of(this.loginStaff);\r\n } else if (this.loginStaff.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(this.loginStaff.userName);\r\n }\r\n }\r\n return from(this.xdmService.getLoginStaff()).pipe(\r\n switchMap((storedResult) => {\r\n if (storedResult && storedResult.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get from session.',\r\n storedResult,\r\n );\r\n }\r\n this.loginStaff = storedResult;\r\n return of(storedResult);\r\n } else if (storedResult && storedResult.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(storedResult.userName);\r\n } else {\r\n const userName = this.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, afterHash: string): string {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) + afterHash;\r\n }\r\n private isSameHost(url, app) {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) === url;\r\n }\r\n\r\n public redirectToTeam(loginStaff: LoginStaff) {\r\n if (loginStaff.roles.findIndex((role) => role.roleId === 'EUUSPC') > -1) {\r\n if (!this.isSameHost(window.location.origin, 'investigation')) {\r\n window.location.href = this.getTeamUrl('investigation', '/assignment');\r\n }\r\n } else if (\r\n loginStaff.roles.findIndex(\r\n (role) => role.roleId.substring(0, 3) === 'RSC',\r\n ) > -1\r\n ) {\r\n if (!this.isSameHost(window.location.origin, 'rsc')) {\r\n window.location.href = this.getTeamUrl('rsc', '/offender-list');\r\n }\r\n }\r\n }\r\n\r\n public async setSelectedOffender(selectedOffender: SelectedOffender) {\r\n if (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\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 === 'N/A' ||\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(\r\n loginStaff: LoginStaff,\r\n feature: string,\r\n appModuleId = null,\r\n ) {\r\n // if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {\r\n // return true;\r\n // }\r\n return this.hasAppFeaturePermission(\r\n loginStaff.permissions,\r\n feature,\r\n appModuleId,\r\n );\r\n }\r\n\r\n // public isAuthEnable(roles: Role[], appModuleId: string) {\r\n // if (roles && roles.length > 0) {\r\n // return roles.map(r => r.roleId).findIndex(this.isExternalRole) > -1 || appModuleId === 'RR';\r\n // }\r\n // return false;\r\n // }\r\n\r\n public hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private hasAppFeaturePermission(\r\n permissions: Permission[],\r\n feature: string,\r\n appModuleId: string,\r\n ) {\r\n if (permissions && permissions.length > 0) {\r\n if (appModuleId) {\r\n return (\r\n permissions.findIndex(\r\n (p) => p.resource === feature && p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n } else {\r\n return permissions.findIndex((p) => p.resource === feature) > -1;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isExternalRole(roleId) {\r\n switch (roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private disableHtmlElement(element: Element): void {\r\n // console.log(element);\r\n switch (element.nodeName) {\r\n case 'A':\r\n element.setAttribute(\r\n 'style',\r\n 'pointer-events: none;cursor: not-allowed;',\r\n );\r\n element.setAttribute('tabIndex', '-1');\r\n break;\r\n default:\r\n element.setAttribute('disabled', 'disabled');\r\n break;\r\n }\r\n }\r\n\r\n private hideHtmlElement(element: Element): void {\r\n // element.setAttribute('hidden', 'hidden');\r\n element.setAttribute('style', 'display: none;');\r\n }\r\n\r\n private getStaff(userName: string): Observable<LoginStaff> {\r\n 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 private getRolePermissions(\r\n appModuleId: string,\r\n resource: string,\r\n ): Observable<boolean> {\r\n const queryString = `\r\n query findvRolePermissionPivots{\r\n findvRolePermissionPivots(input: {where: {appModuleId: ${appModuleId}, resource: ${resource}}}){\r\n totalCount\r\n message\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### findvRolePermissionPivots() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvRolePermissionPivots.totalCount > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error: any) => {\r\n console.log('error ' + error);\r\n return throwError(error);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n\r\n@Directive({\r\n selector: '[accessControl]',\r\n})\r\nexport class SmartAccessControlDirective implements OnInit {\r\n @Input() accessControlConfig: SmartAccessControlConfig;\r\n constructor(\r\n private elementRef: ElementRef,\r\n private auth: SmartAuthService,\r\n ) {}\r\n\r\n public ngOnInit() {\r\n this.checkAccess();\r\n }\r\n\r\n checkAccess() {\r\n if (\r\n !this.accessControlConfig ||\r\n !this.accessControlConfig.route ||\r\n !this.accessControlConfig.route.data ||\r\n !this.accessControlConfig.route.data.loginStaff ||\r\n !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.isAuthEnable(loginStaff.roles, this.accessControlConfig.appModuleId)) {\r\n // return;\r\n // }\r\n this.elementRef.nativeElement.style.display = this.auth.checkPermission(\r\n this.accessControlConfig\r\n )\r\n ? 'block'\r\n : 'none';\r\n }\r\n}\r\n","// smart-authorization.service\r\nimport { Injectable } from '@angular/core';\r\nimport {\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.isAuthEnable(loginStaff.roles, null)) {\r\n // return of(true);\r\n // }\r\n const resource = route.routeConfig.path\r\n ? route.routeConfig.path.split('/')[0]\r\n : '';\r\n const isFeatureValid = this.authnService.canAppFeatureActivate(\r\n loginStaff,\r\n resource,\r\n );\r\n return of(isFeatureValid);\r\n }),\r\n catchError((error) => {\r\n return of(false);\r\n }),\r\n );\r\n }\r\n}\r\n","import { 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';\r\nimport { Resolve } from '@angular/router';\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartStaffOffenderOptionsResolverService implements Resolve<Observable<any>> {\r\n constructor(private offenderService: SmartStaffOffenderOptionsService) {}\r\n resolve() {\r\n return this.offenderService.getOffenderListOptions()\r\n .pipe(\r\n map(({ data }) => {\r\n return data;\r\n }),\r\n );\r\n }\r\n }\r\n","import { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nexport interface SmartAccessControlConfig {\r\n appModuleId: string;\r\n route: ActivatedRouteSnapshot;\r\n accessType: AccessType;\r\n roleId: string;\r\n}\r\n\r\nexport enum AccessType {\r\n READ = 'read',\r\n CREATE = 'create',\r\n UPDATE = 'update',\r\n DELETE = 'delete',\r\n EXPUNGE = 'expunge',\r\n ASSIGN = 'assign',\r\n REOPEN = 'reopen',\r\n CLOSE = 'close'\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["node_modules/tslib/tslib.es6.js","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"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","adopt","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","__read","o","m","r","i","ar","error","Permission","selectedRole","intakeFlag","StorageKey","selectedOffender","loginStaff","offenderQuery","SMART_WEB_STORAGE_LISTENER_URL","InjectionToken","SMART_WEB_PORTAL_URL","SMART_DATA_SERVICE_URL","SMART_DOMAIN_FORMAT","XdmService","prototype","init","frame","document","createElement","src","smartStorageListenerUrl","id","name","Math","random","toString","onload","style","visibility","appendChild","connection","connectToChild","iframe","debug","getStaffOffenderListOptions","staffId","queryString","httpClient","post","smartDataServiceUrl","query","pipe","map","_a","data","findvStaffOffenderListOptions","clearAll","_this","promise","child","offenderSubject","staffSubject","setSelectedOffender","redirectFunction","getSelectedOffender","clearSelectedOffender","getOffenderUpdate","asObservable","setLoginStaff","getLoginStaff","clearLoginStaff","getStaffUpdate","refreshLoginStaffOptions","oldLoginStaff","subscribe","optionData","console","log","options","setOffenderQuery","offenderQuerySubject","getOffenderQuery","clearOffenderQuery","getOffenderQueryUpdate","Injectable","args","providedIn","Inject","DOCUMENT","HttpClient","Subject","isDevMode","SmartOffenderHeaderService","getStaffOffenders","http","filterOffenderList","SmartOffenderHeaderComponent","ngOnInit","isAuthenticated","authnService","getAccount","xdmService","offenderId","subscription","setSelectedOffenderControl","offenderQueryList","offenders","offenderQuerySubscription","offenderList","__spread","arguments","concat","selectedOffenderControl$","valueChanges","onOffenderSelected","router","routeReuseStrategy","shouldReuseRoute","ngOnDestroy","unsubscribe","offender","reloadCurrentRoute","find","x","setValue","emitEvent","urlTree","parseUrl","url","root","segments","navigate","path","children","primary","navigateByUrl","hasIntakeRole","roles","findIndex","isIntakeRole","role","roleId","Component","selector","template","MsalService","Router","smartOffenderHeaderService","FormControl","SmartNavbarService","getNavbarConfigs","serviceApiUrl","findAppModules","SmartNavbarComponent","ngOnChanges","offenderSubscription","staffSubscription","navbarConfigService","configs","navbarConfigs","sort","a","b","displayOrder","logout","getAppModuleUrl","config","appModuleId","hasAppModulePermission","permissions","p","Object","defineProperty","isExternalRole","encapsulation","ViewEncapsulation","None","Input","ViewChild","SmartErrorComponent","type","route","snapshot","queryParamMap","get","message","portal","window","location","href","smartWebPortalUrl","ActivatedRoute","SmartStaffOffenderOptionsService","showMessage","matSnackBar","open","duration","convertEmptyToNull","jsonObject","Array","forEach","obj","keys","key","trim","getGraphQueryData","queryName","getOffenderListOptions","findStaffOffenderListOptions","saveStaffOffenderListOptionsData","dataToSave","convertToString","eObj","isNaN","substring","MatSnackBar","SmartStaffOffenderOptionsComponent","routData","offenderListOptions","selectedOffenderResolverService","frmGroup","createForm","offenderService","fillForm","offenderListOptionsFg_1","element","offenderListOptionId","offenderListOptionsFg","FormGroup","dt","addControl","onSave","modifiedBy","offenderListOptionsVal","rtrDatea","SmartAuthService","of","userName","getStaff","from","switchMap","storedResult","staffName","indexOf","getTeamUrl","app","afterHash","smartDomainFormatUrl","replace","isSameHost","redirectToTeam","origin","getStaffOffenderRelation","toPromise","relation","assignmentStaffRelationId","setPermission","_c","resource","_b","elements","querySelectorAll","pattern","hide","disable","classList","c","results","match","roleId_1","toUpperCase","right","permission","readFlag","createFlag","updateFlag","deleteFlag","assignFlag","closeFlag","expungeFlag","reopenFlag","nodeName","hideHtmlElement","disableHtmlElement","checkPermission","accessControlConfig","selData","accessType","canAppFeatureActivate","feature","hasAppFeaturePermission","setAttribute","take","findvStaffs","catchError","findvStaffOffenderRelations","getRolePermissions","findvRolePermissionPivots","totalCount","throwError","SmartAccessControlDirective","checkAccess","elementRef","nativeElement","display","auth","Directive","ElementRef","SmartAuthorizationGuard","canActivate","mergeMap","routeConfig","split","isFeatureValid","NgcSmartCoreModule","NgModule","declarations","imports","CommonModule","HttpClientModule","MatButtonModule","MatMenuModule","MatTabsModule","MatSelectModule","MatCardModule","MatCheckboxModule","ReactiveFormsModule","exports","providers","LoginStaffResolverService","state","queryParams","EMPTY","SelectedOffenderResolverService","service","retryWhen","errors","delay","NgZone","zone","SmartStaffOffenderOptionsResolverService","READ","CREATE","UPDATE","DELETE","EXPUNGE","ASSIGN","REOPEN","CLOSE"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","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\r\n//exception for redirection\r\nexport const SMART_DOMAIN_FORMAT = new InjectionToken<string>(\r\n 'SMART Domain Format URL',\r\n);\r\n\r\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject, Observable } 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, redirectFunction: any = null): void {\r\n this.connection.promise.then((child) => {\r\n child.setSelectedOffender(selectedOffender);\r\n this.offenderSubject.next(selectedOffender);\r\n if(redirectFunction) {\r\n redirectFunction();\r\n }\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, 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 getAppModuleUrl(config: SmartNavbarConfig) {\r\n return (config && this.selectedOffender && config.appModuleId === 'PPMAS') ?\r\n `${config.url}?skipAppMetadata=true&OffenderId=${this.selectedOffender.offenderId}` : config.url;\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';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, from, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { MatSnackBar } from '@angular/material';\r\nimport {\r\n SMART_DATA_SERVICE_URL,\r\n} from '../smart-storage/smart-storage-model';\r\n\r\n@Injectable()\r\nexport class SmartStaffOffenderOptionsService {\r\n constructor(\r\n @Inject(SMART_DATA_SERVICE_URL) private serviceApiUrl,\r\n private http: HttpClient, private matSnackBar: MatSnackBar\r\n ) { }\r\n\r\n public showMessage(message) {\r\n this.matSnackBar.open(message, null, {\r\n duration: 2000,\r\n });\r\n }\r\n\r\n private convertEmptyToNull(jsonObject: JSON) {\r\n if (!jsonObject) {\r\n return;\r\n }\r\n\r\n if (jsonObject instanceof Array) {\r\n jsonObject.forEach(obj => {\r\n this.convertEmptyToNull(obj);\r\n });\r\n }\r\n\r\n const keys = Object.keys(jsonObject);\r\n keys.forEach(key => {\r\n if (typeof jsonObject[key] === 'object') {\r\n this.convertEmptyToNull(jsonObject[key]);\r\n } else if (typeof jsonObject[key] === 'string' && jsonObject[key].trim() === '') {\r\n jsonObject[key] = null;\r\n }\r\n });\r\n }\r\n\r\n private getGraphQueryData(queryName: string, queryString: string): Observable<any> {\r\n return this.http\r\n .post<any>(this.serviceApiUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }));\r\n }\r\n \r\n getOffenderListOptions(): Observable<any> {\r\n const queryName = 'findOffenderListOptions';\r\n const queryString = `{\r\n ${queryName} {\r\n data {\r\n offenderListOptionId\r\n name\r\n serviceApiFieldName\r\n }\r\n message\r\n }\r\n }`;\r\n\r\n return this.getGraphQueryData(queryName, queryString);\r\n }\r\n\r\n public getStaffOffenderListOptions(\r\n staffId: number,\r\n ): Observable<Array<any>> {\r\n const queryString = `{findStaffOffenderListOptions(input:{\r\n where:{\r\n staffId: ${staffId}\r\n }\r\n }){\r\n data{\r\n offenderListOptionId\r\n }\r\n } }`;\r\n return this.http\r\n .post<any>(this.serviceApiUrl, { query: queryString })\r\n .pipe(\r\n map(({ data }) => {\r\n return data.findStaffOffenderListOptions.data;\r\n }),\r\n );\r\n }\r\n\r\n saveStaffOffenderListOptionsData(dataToSave: any) { //}: Observable<any> {\r\n\r\n // this.convertEmptyToNull(dataToSave);\r\n const queryName = 'upsertStaffOffenderListOption';\r\n const query = `mutation {\r\n upsertStaffOffenderListOption(input: ${this.convertToString(dataToSave)}) {\r\n message\r\n }\r\n }`;\r\n\r\n;\r\n return this.http\r\n .post<any>(this.serviceApiUrl, { query });\r\n /*.pipe(\r\n map(({ data }) => {\r\n return data[queryName];\r\n }));*/\r\n\r\n\r\n }\r\n\r\n convertToString(obj): string {\r\n let result = '';\r\n\r\n if (!obj) {\r\n return result;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n result += ' [';\r\n obj.forEach(eObj => {\r\n result += this.convertToString(eObj);\r\n });\r\n result += '],';\r\n } else {\r\n result += '{';\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n if (typeof obj[key] === 'object') {\r\n result += key + ':' + this.convertToString(obj[key]);\r\n } else {\r\n if (isNaN(obj[key])) {\r\n result += key + ':\"' + obj[key] + '\",';\r\n } else {\r\n result += key + ':' + obj[key] + ',';\r\n }\r\n }\r\n });\r\n result = result.substring(0, result.length - 1);\r\n result += '},';\r\n }\r\n return result;\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { FormBuilder,\r\n FormGroup,\r\n FormControl,\r\n Validators,\r\n ValidatorFn,\r\n AbstractControl,\r\n} from '@angular/forms';\r\nimport { LoginStaff } from '../smart-storage/smart-storage-model';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { XdmService} from '../smart-storage/xdm.service';\r\n\r\n@Component({\r\n selector: 'lib-smart-staff-offender-options',\r\n templateUrl: './smart-staff-offender-options.component.html',\r\n styleUrls: ['./smart-staff-offender-options.component.css']\r\n})\r\nexport class SmartStaffOffenderOptionsComponent implements OnInit {\r\n loginStaff: LoginStaff;\r\n offenderListOptions: Array<any> = [];\r\n frmGroup: FormGroup;\r\n constructor(\r\n private route: ActivatedRoute,\r\n private offenderService: SmartStaffOffenderOptionsService,\r\n private xdmService: XdmService\r\n ) { }\r\n\r\n ngOnInit() {\r\n const routData = this.route.snapshot.data;\r\n this.loginStaff = routData.loginStaff;\r\n this.offenderListOptions = routData.selectedOffenderResolverService;\r\n this.frmGroup = this.createForm();\r\n this.offenderService.getStaffOffenderListOptions(this.loginStaff.staffId).subscribe(data => {\r\n this.fillForm(data);\r\n });\r\n }\r\n\r\n private fillForm(data) {\r\n if (data) {\r\n const offenderListOptionsFg = this.frmGroup.get('offenderListOptions');\r\n data.forEach(element => {\r\n offenderListOptionsFg.get(element.offenderListOptionId).setValue(true);\r\n });\r\n }\r\n\r\n }\r\n private createForm() {\r\n const offenderListOptionsFg = new FormGroup({\r\n });\r\n\r\n this.offenderListOptions.forEach( (dt, i) => {\r\n offenderListOptionsFg.addControl(dt.offenderListOptionId, new FormControl(false));\r\n });\r\n\r\n return new FormGroup({\r\n offenderListOptions: offenderListOptionsFg,\r\n });\r\n }\r\n\r\n onSave() {\r\n const data = {\r\n options: [],\r\n staffId: this.loginStaff.staffId,\r\n modifiedBy: this.loginStaff.staffId\r\n };\r\n\r\n const offenderListOptionsVal = this.frmGroup.get('offenderListOptions').value;\r\n const keys = Object.keys(offenderListOptionsVal);\r\n keys.forEach(key => {\r\n if (offenderListOptionsVal[key]) {\r\n data.options.push({'offenderListOptionId': key});\r\n }\r\n });\r\n\r\n this.offenderService.saveStaffOffenderListOptionsData(data).subscribe(rtrDatea=>{\r\n if (rtrDatea.message) {\r\n this.offenderService.showMessage(rtrDatea.message);\r\n } else {\r\n this.offenderService.showMessage('Saved successfully');\r\n this.xdmService.refreshLoginStaffOptions();\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Injectable, Inject, isDevMode } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, of, from, throwError } from 'rxjs';\r\nimport { map, switchMap, take, catchError} from 'rxjs/operators';\r\nimport { MsalService } from '@azure/msal-angular';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nimport {\r\n LoginStaff,\r\n SelectedOffender,\r\n SMART_DATA_SERVICE_URL,\r\n SMART_DOMAIN_FORMAT,\r\n Role,\r\n Permission,\r\n} from '../smart-storage/smart-storage-model';\r\nimport { XdmService } from '../smart-storage/xdm.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\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 @Inject(SMART_DOMAIN_FORMAT) private smartDomainFormatUrl: string,\r\n ) {}\r\n\r\n public getLoginStaff(): Observable<LoginStaff> {\r\n if (isDevMode) {\r\n console.log('SmartAuthService - getLoginStaff()');\r\n }\r\n if (!isDevMode && this.loginStaff) {\r\n if (this.loginStaff.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get internal instance in service',\r\n this.loginStaff,\r\n );\r\n }\r\n return of(this.loginStaff);\r\n } else if (this.loginStaff.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(this.loginStaff.userName);\r\n }\r\n }\r\n return from(this.xdmService.getLoginStaff()).pipe(\r\n switchMap((storedResult) => {\r\n if (storedResult && storedResult.staffId) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get from session.',\r\n storedResult,\r\n );\r\n }\r\n this.loginStaff = storedResult;\r\n return of(storedResult);\r\n } else if (storedResult && storedResult.userName) {\r\n if (isDevMode) {\r\n console.log(\r\n '##### getLoginStaff(): get using preset user name',\r\n this.loginStaff,\r\n );\r\n }\r\n return this.getStaff(storedResult.userName);\r\n } else {\r\n const userName = this.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, afterHash: string): string {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) + afterHash;\r\n }\r\n private isSameHost(url, app) {\r\n return this.smartDomainFormatUrl.replace('${APP}', app) === url;\r\n }\r\n\r\n public redirectToTeam(loginStaff: LoginStaff) {\r\n if (loginStaff.roles.findIndex((role) => role.roleId === 'EUUSPC') > -1) {\r\n if (!this.isSameHost(window.location.origin, 'investigation')) {\r\n window.location.href = this.getTeamUrl('investigation', '/assignment');\r\n }\r\n } else if (\r\n loginStaff.roles.findIndex(\r\n (role) => role.roleId.substring(0, 3) === 'RSC',\r\n ) > -1\r\n ) {\r\n if (!this.isSameHost(window.location.origin, 'rsc')) {\r\n window.location.href = this.getTeamUrl('rsc', '/offender-list');\r\n }\r\n }\r\n }\r\n\r\n public async setSelectedOffender(selectedOffender: SelectedOffender) {\r\n if (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\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\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(\r\n loginStaff: LoginStaff,\r\n feature: string,\r\n appModuleId = null,\r\n ) {\r\n // if (!this.isAuthEnable(loginStaff.roles, appModuleId)) {\r\n // return true;\r\n // }\r\n return this.hasAppFeaturePermission(\r\n loginStaff.permissions,\r\n feature,\r\n appModuleId,\r\n );\r\n }\r\n\r\n // public isAuthEnable(roles: Role[], appModuleId: string) {\r\n // if (roles && roles.length > 0) {\r\n // return roles.map(r => r.roleId).findIndex(this.isExternalRole) > -1 || appModuleId === 'RR';\r\n // }\r\n // return false;\r\n // }\r\n\r\n public hasIntakeRole(roles: Role[]) {\r\n if (roles && roles.length > 0) {\r\n return roles.findIndex(this.isIntakeRole) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n private hasAppFeaturePermission(\r\n permissions: Permission[],\r\n feature: string,\r\n appModuleId: string,\r\n ) {\r\n if (permissions && permissions.length > 0) {\r\n if (appModuleId) {\r\n return (\r\n permissions.findIndex(\r\n (p) => p.resource === feature && p.appModuleId === appModuleId,\r\n ) > -1\r\n );\r\n } else {\r\n return permissions.findIndex((p) => p.resource === feature) > -1;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private isExternalRole(roleId) {\r\n switch (roleId) {\r\n case 'EUDTL':\r\n case 'EUDUSM':\r\n case 'EUJDG':\r\n case 'EUMPD':\r\n case 'EUSOTV':\r\n case 'EUUSA2':\r\n case 'EUUSAO':\r\n case 'EUUSPC':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private isIntakeRole(role: Role) {\r\n switch (role.roleId) {\r\n case 'OPA':\r\n case 'OPS':\r\n case 'SOPS':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private disableHtmlElement(element: Element): void {\r\n // console.log(element);\r\n switch (element.nodeName) {\r\n case 'A':\r\n element.setAttribute(\r\n 'style',\r\n 'pointer-events: none;cursor: not-allowed;',\r\n );\r\n element.setAttribute('tabIndex', '-1');\r\n break;\r\n default:\r\n element.setAttribute('disabled', 'disabled');\r\n break;\r\n }\r\n }\r\n\r\n private hideHtmlElement(element: Element): void {\r\n // element.setAttribute('hidden', 'hidden');\r\n element.setAttribute('style', 'display: none;');\r\n }\r\n\r\n private getStaff(userName: string): Observable<LoginStaff> {\r\n 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 private getRolePermissions(\r\n appModuleId: string,\r\n resource: string,\r\n ): Observable<boolean> {\r\n const queryString = `\r\n query findvRolePermissionPivots{\r\n findvRolePermissionPivots(input: {where: {appModuleId: ${appModuleId}, resource: ${resource}}}){\r\n totalCount\r\n message\r\n }\r\n }`;\r\n\r\n return this.http\r\n .post<any>(this.smartDataServiceUrl, { query: queryString })\r\n .pipe(\r\n take(1),\r\n map((result) => {\r\n if (isDevMode) {\r\n console.log(\r\n '##### findvRolePermissionPivots() from service ',\r\n result,\r\n );\r\n }\r\n if (result.data.findvRolePermissionPivots.totalCount > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n // return throwError('No access right.');\r\n }\r\n }),\r\n catchError((error: any) => {\r\n console.log('error ' + error);\r\n return throwError(error);\r\n }),\r\n );\r\n }\r\n}\r\n","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { SmartAuthService } from './smart-auth.service';\r\nimport { SmartAccessControlConfig } from './smart-access-control-config';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n\r\n@Directive({\r\n selector: '[accessControl]',\r\n})\r\nexport class SmartAccessControlDirective implements OnInit {\r\n @Input() accessControlConfig: SmartAccessControlConfig;\r\n constructor(\r\n private elementRef: ElementRef,\r\n private auth: SmartAuthService,\r\n ) {}\r\n\r\n public ngOnInit() {\r\n this.checkAccess();\r\n }\r\n\r\n checkAccess() {\r\n if (\r\n !this.accessControlConfig ||\r\n !this.accessControlConfig.route ||\r\n !this.accessControlConfig.route.data ||\r\n !this.accessControlConfig.route.data.loginStaff ||\r\n !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.isAuthEnable(loginStaff.roles, this.accessControlConfig.appModuleId)) {\r\n // return;\r\n // }\r\n this.elementRef.nativeElement.style.display = this.auth.checkPermission(\r\n this.accessControlConfig\r\n )\r\n ? 'block'\r\n : 'none';\r\n }\r\n}\r\n","// smart-authorization.service\r\nimport { Injectable } from '@angular/core';\r\nimport {\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.isAuthEnable(loginStaff.roles, null)) {\r\n // return of(true);\r\n // }\r\n const resource = route.routeConfig.path\r\n ? route.routeConfig.path.split('/')[0]\r\n : '';\r\n const isFeatureValid = this.authnService.canAppFeatureActivate(\r\n loginStaff,\r\n resource,\r\n );\r\n return of(isFeatureValid);\r\n }),\r\n catchError((error) => {\r\n return of(false);\r\n }),\r\n );\r\n }\r\n}\r\n","import { 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';\r\nimport { Resolve } from '@angular/router';\r\nimport { SmartStaffOffenderOptionsService} from './smart-staff-offender-options.service';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SmartStaffOffenderOptionsResolverService implements Resolve<Observable<any>> {\r\n constructor(private offenderService: SmartStaffOffenderOptionsService) {}\r\n resolve() {\r\n return this.offenderService.getOffenderListOptions()\r\n .pipe(\r\n map(({ data }) => {\r\n return data;\r\n }),\r\n );\r\n }\r\n }\r\n","import { ActivatedRouteSnapshot } from '@angular/router';\r\n\r\nexport interface SmartAccessControlConfig {\r\n appModuleId: string;\r\n route: ActivatedRouteSnapshot;\r\n accessType: AccessType;\r\n roleId: string;\r\n}\r\n\r\nexport enum AccessType {\r\n READ = 'read',\r\n CREATE = 'create',\r\n UPDATE = 'update',\r\n DELETE = 'delete',\r\n EXPUNGE = 'expunge',\r\n ASSIGN = 'assign',\r\n REOPEN = 'reopen',\r\n CLOSE = 'close'\r\n}\r\n"]}
|