@csmart/ngc-smart-core 0.7.92 → 0.7.93
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 +1 -1
- 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-offender-header/smart-offender-header.component.js +2 -2
- package/esm5/lib/smart-offender-header/smart-offender-header.component.js +2 -2
- package/fesm2015/csmart-ngc-smart-core.js +1 -1
- package/fesm2015/csmart-ngc-smart-core.js.map +1 -1
- package/fesm5/csmart-ngc-smart-core.js +1 -1
- package/fesm5/csmart-ngc-smart-core.js.map +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","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","window","location","href","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","url","hasAppModulePermission","permissions","p","Object","defineProperty","isExternalRole","encapsulation","ViewEncapsulation","None","Input","ViewChild","SmartErrorComponent","type","route","snapshot","queryParamMap","get","message","portal","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","path","_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","navigate","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 window.location.href = window.location.href;\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"]}
|
|
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","window","location","reload","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","url","hasAppModulePermission","permissions","p","Object","defineProperty","isExternalRole","encapsulation","ViewEncapsulation","None","Input","ViewChild","SmartErrorComponent","type","route","snapshot","queryParamMap","get","message","portal","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","path","_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","navigate","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 window.location.reload(false);\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"]}
|
|
@@ -167,7 +167,7 @@ export class SmartOffenderHeaderComponent {
|
|
|
167
167
|
} catch {
|
|
168
168
|
this.router.navigateByUrl('/');
|
|
169
169
|
}*/
|
|
170
|
-
window.location.
|
|
170
|
+
window.location.reload(false);
|
|
171
171
|
}
|
|
172
172
|
/**
|
|
173
173
|
* @private
|
|
@@ -246,4 +246,4 @@ if (false) {
|
|
|
246
246
|
*/
|
|
247
247
|
SmartOffenderHeaderComponent.prototype.router;
|
|
248
248
|
}
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtb2ZmZW5kZXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjc21hcnQvbmdjLXNtYXJ0LWNvcmUvIiwic291cmNlcyI6WyJsaWIvc21hcnQtb2ZmZW5kZXItaGVhZGVyL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFtRCxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsMEJBQTBCLEVBQW9CLE1BQU0saUNBQWlDLENBQUM7QUFDL0YsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBT3pDLE1BQU0sT0FBTyw0QkFBNEI7Ozs7Ozs7SUFVdkMsWUFDVSxVQUFzQixFQUN0QixZQUF5QixFQUN6QiwwQkFBc0QsRUFDdEQsTUFBYztRQUhkLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUN0RCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBVnhCLDZCQUF3QixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFXMUMsQ0FBQzs7OztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSTs7OztRQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbEQsSUFB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VTtZQUdWLFdBQVc7WUFHWCwwQkFBMEI7WUFDMUIsTUFBTTs7OztJQVFiLHdEQUEwQzs7SUFDMUMsa0RBQXVCOztJQUN2QixvREFBMkI7O0lBQzNCLGdFQUE2Qzs7SUFFN0MseURBQXNDOztJQUN0QyxpRUFBd0M7O0lBQ3hDLHVEQUFnQzs7Ozs7SUFHOUIsa0RBQThCOzs7OztJQUM5QixvREFBaUM7Ozs7O0lBQ2pDLGtFQUE4RDs7Ozs7SUFDOUQsOENBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgTmdab25lLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYZG1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtc3RvcmFnZS94ZG0uc2VydmljZSc7XHJcbmltcG9ydCB7IFNlbGVjdGVkT2ZmZW5kZXIsIExvZ2luU3RhZmYsIFJvbGUsIE9mZmVuZGVyUXVlcnkgfSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3NtYXJ0LXN0b3JhZ2UtbW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU21hcnRPZmZlbmRlckhlYWRlclNlcnZpY2UsIEFzc2lnbmVkT2ZmZW5kZXIgfSBmcm9tICcuL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNtYXJ0LW9mZmVuZGVyLWhlYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtb2ZmZW5kZXItaGVhZGVyLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0T2ZmZW5kZXJIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXI7XHJcbiAgbG9naW5TdGFmZjogTG9naW5TdGFmZjtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBzZWxlY3RlZE9mZmVuZGVyQ29udHJvbCQgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICAvLyBhc3NpZ25lZE9mZmVuZGVyczogQXNzaWduZWRPZmZlbmRlcltdO1xyXG4gIG9mZmVuZGVyUXVlcnlMaXN0OiBTZWxlY3RlZE9mZmVuZGVyW107XHJcbiAgb2ZmZW5kZXJRdWVyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoblNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbWFydE9mZmVuZGVySGVhZGVyU2VydmljZTogU21hcnRPZmZlbmRlckhlYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aG5TZXJ2aWNlLmdldEFjY291bnQoKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRMb2dpblN0YWZmKCkudGhlbigobG9naW5TdGFmZikgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmID8gbG9naW5TdGFmZiA6IG51bGw7XHJcbiAgICB9KTtcclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRTZWxlY3RlZE9mZmVuZGVyKCkudGhlbigoc2VsZWN0ZWRPZmZlbmRlcikgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPVxyXG4gICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIgJiYgc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkXHJcbiAgICAgICAgICA/IHNlbGVjdGVkT2ZmZW5kZXJcclxuICAgICAgICAgIDogbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRPZmZlbmRlclVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPSBzZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRPZmZlbmRlckNvbnRyb2woKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldE9mZmVuZGVyUXVlcnkoKS50aGVuKChvZmZlbmRlclF1ZXJ5OiBPZmZlbmRlclF1ZXJ5KSA9PiB7XHJcbiAgICAgIGlmIChvZmZlbmRlclF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5vZmZlbmRlclF1ZXJ5TGlzdCA9IG9mZmVuZGVyUXVlcnkub2ZmZW5kZXJzO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRPZmZlbmRlckNvbnRyb2woKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vZmZlbmRlclF1ZXJ5U3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlLmdldE9mZmVuZGVyUXVlcnlVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChvZmZlbmRlckxpc3QpID0+IHtcclxuICAgICAgICBpZiAob2ZmZW5kZXJMaXN0ICYmIG9mZmVuZGVyTGlzdC5vZmZlbmRlcnMpIHtcclxuICAgICAgICAgIHRoaXMub2ZmZW5kZXJRdWVyeUxpc3QgPSBbLi4ub2ZmZW5kZXJMaXN0Lm9mZmVuZGVyc107XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlckNvbnRyb2wkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKG8pID0+XHJcbiAgICAgIHRoaXMub25PZmZlbmRlclNlbGVjdGVkKG8pLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbk9mZmVuZGVyU2VsZWN0ZWQob2ZmZW5kZXIpOiB2b2lkIHtcclxuICAgIGlmIChvZmZlbmRlcikge1xyXG4gICAgICAvLyBjb25zdCBvID0gb2ZmZW5kZXIub2ZmZW5kZXJOYW1lLnNwbGl0KCcsJyk7XHJcbiAgICAgIC8vIGlmIChvLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAvLyAgIGNvbnN0IG9mZmVuZGVyTmFtZSA9IGAke29bMV19ICR7b1swXX1gO1xyXG4gICAgICAvLyAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9IHtcclxuICAgICAgLy8gICAgIG9mZmVuZGVySWQ6IG9mZmVuZGVyLm9mZmVuZGVySWQsXHJcbiAgICAgIC8vICAgICBuYW1lOiBvZmZlbmRlck5hbWUsXHJcbiAgICAgIC8vICAgICBwZElkOiBvZmZlbmRlci5wZElkLFxyXG4gICAgICAvLyAgICAgYmlydGhEYXRlOiBvZmZlbmRlci5iaXJ0aERhdGUsXHJcbiAgICAgIC8vICAgICBnZW5kZXI6IG9mZmVuZGVyLmdlbmRlckNvZGUsXHJcbiAgICAgIC8vICAgICBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkOiAnJyxcclxuICAgICAgLy8gICAgIGludGFrZUZsYWc6IHRoaXMubG9naW5TdGFmZlxyXG4gICAgICAvLyAgICAgICA/IHRoaXMuaGFzSW50YWtlUm9sZSh0aGlzLmxvZ2luU3RhZmYucm9sZXMpXHJcbiAgICAgIC8vICAgICAgIDogZmFsc2UsXHJcbiAgICAgIC8vICAgfSBhcyBTZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPSBvZmZlbmRlcjtcclxuICAgICAgdGhpcy54ZG1TZXJ2aWNlLnNldFNlbGVjdGVkT2ZmZW5kZXIodGhpcy5zZWxlY3RlZE9mZmVuZGVyLCB0aGlzLnJlbG9hZEN1cnJlbnRSb3V0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZE9mZmVuZGVyQ29udHJvbCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyICYmXHJcbiAgICAgIHRoaXMub2ZmZW5kZXJRdWVyeUxpc3QgJiZcclxuICAgICAgdGhpcy5vZmZlbmRlclF1ZXJ5TGlzdC5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgbyA9IHRoaXMub2ZmZW5kZXJRdWVyeUxpc3QuZmluZChcclxuICAgICAgICAoeCkgPT4geC5vZmZlbmRlcklkID09PSB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZCxcclxuICAgICAgKTtcclxuICAgICAgaWYgKG8pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXJDb250cm9sJC5zZXRWYWx1ZShvLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghbyAmJiB0aGlzLm9mZmVuZGVyUXVlcnlMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXJDb250cm9sJC5zZXRWYWx1ZSh0aGlzLm9mZmVuZGVyUXVlcnlMaXN0WzBdLCB7XHJcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbG9hZEN1cnJlbnRSb3V0ZSgpIHtcclxuICAgIC8qdHJ5IHtcclxuICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XHJcbiAgICAgIGlmICh1cmxUcmVlXHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290XHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290LnNlZ21lbnRzXHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290LnNlZ21lbnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsVHJlZS5yb290LnNlZ21lbnRzWzBdLnBhdGhdKTtcclxuICAgICAgfSBlbHNlIGlmICh1cmxUcmVlXHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290XHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290LmNoaWxkcmVuXHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290LmNoaWxkcmVuLnByaW1hcnlcclxuICAgICAgICAmJiB1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50c1xyXG4gICAgICAgICYmIHVybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsVHJlZS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHNbMF0ucGF0aF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlci51cmxdKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcclxuICAgIH0qL1xyXG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzSW50YWtlUm9sZShyb2xlczogUm9sZVtdKSB7XHJcbiAgICBpZiAocm9sZXMgJiYgcm9sZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gcm9sZXMuZmluZEluZGV4KHRoaXMuaXNJbnRha2VSb2xlKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0ludGFrZVJvbGUocm9sZTogUm9sZSkge1xyXG4gICAgc3dpdGNoIChyb2xlLnJvbGVJZCkge1xyXG4gICAgICBjYXNlICdPUEEnOlxyXG4gICAgICBjYXNlICdPUFMnOlxyXG4gICAgICBjYXNlICdTT1BTJzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtb2ZmZW5kZXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjc21hcnQvbmdjLXNtYXJ0LWNvcmUvIiwic291cmNlcyI6WyJsaWIvc21hcnQtb2ZmZW5kZXItaGVhZGVyL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFtRCxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsMEJBQTBCLEVBQW9CLE1BQU0saUNBQWlDLENBQUM7QUFDL0YsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBT3pDLE1BQU0sT0FBTyw0QkFBNEI7Ozs7Ozs7SUFVdkMsWUFDVSxVQUFzQixFQUN0QixZQUF5QixFQUN6QiwwQkFBc0QsRUFDdEQsTUFBYztRQUhkLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUN0RCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBVnhCLDZCQUF3QixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFXMUMsQ0FBQzs7OztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSTs7OztRQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25ELENBQUMsRUFBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUk7Ozs7UUFBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkIsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsVUFBVTtvQkFDN0MsQ0FBQyxDQUFDLGdCQUFnQjtvQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNiLENBQUMsRUFBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVTthQUNoQyxpQkFBaUIsRUFBRTthQUNuQixTQUFTOzs7O1FBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztZQUN6QyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLEVBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJOzs7O1FBQUMsQ0FBQyxhQUE0QixFQUFFLEVBQUU7WUFDdkUsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQzthQUNuQztRQUNILENBQUMsRUFBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUU7YUFDdEUsU0FBUzs7OztRQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdEQ7UUFDTCxDQUFDLEVBQUMsQ0FBQztRQUdILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsU0FBUzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUMzQixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0I7OztRQUFHLEdBQUcsRUFBRTtZQUNyRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQSxDQUFDO0lBR0osQ0FBQzs7OztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7Ozs7OztJQUVPLGtCQUFrQixDQUFDLFFBQVE7UUFDakMsSUFBSSxRQUFRLEVBQUU7WUFDWiw4Q0FBOEM7WUFDOUMsd0JBQXdCO1lBQ3hCLDRDQUE0QztZQUM1Qyw4QkFBOEI7WUFDOUIsdUNBQXVDO1lBQ3ZDLDBCQUEwQjtZQUMxQiwyQkFBMkI7WUFDM0IscUNBQXFDO1lBQ3JDLG1DQUFtQztZQUNuQyxxQ0FBcUM7WUFDckMsa0NBQWtDO1lBQ2xDLG9EQUFvRDtZQUNwRCxpQkFBaUI7WUFDakIsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDbkY7SUFDSCxDQUFDOzs7OztJQUVLLDBCQUEwQjtRQUNoQyxJQUNFLElBQUksQ0FBQyxnQkFBZ0I7WUFDckIsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDakM7O2tCQUNNLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSTs7OztZQUNuQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUN6RDtZQUNELElBQUksQ0FBQyxFQUFFO2dCQUNMLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDakU7WUFFRCxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDaEUsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDOzs7OztJQUVPLGtCQUFrQjtRQUN4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQW1CRztRQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7OztJQUVPLGFBQWEsQ0FBQyxLQUFhO1FBQ2pDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Ozs7OztJQUVPLFlBQVksQ0FBQyxJQUFVO1FBQzdCLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNuQixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDOzs7WUF6SkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7Z0JBQ3JDLDY4QkFBcUQ7O2FBRXREOzs7O1lBYlEsVUFBVTtZQUdWLFdBQVc7WUFHWCwwQkFBMEI7WUFDMUIsTUFBTTs7OztJQVFiLHdEQUEwQzs7SUFDMUMsa0RBQXVCOztJQUN2QixvREFBMkI7O0lBQzNCLGdFQUE2Qzs7SUFFN0MseURBQXNDOztJQUN0QyxpRUFBd0M7O0lBQ3hDLHVEQUFnQzs7Ozs7SUFHOUIsa0RBQThCOzs7OztJQUM5QixvREFBaUM7Ozs7O0lBQ2pDLGtFQUE4RDs7Ozs7SUFDOUQsOENBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgTmdab25lLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYZG1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtc3RvcmFnZS94ZG0uc2VydmljZSc7XHJcbmltcG9ydCB7IFNlbGVjdGVkT2ZmZW5kZXIsIExvZ2luU3RhZmYsIFJvbGUsIE9mZmVuZGVyUXVlcnkgfSBmcm9tICcuLi9zbWFydC1zdG9yYWdlL3NtYXJ0LXN0b3JhZ2UtbW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU21hcnRPZmZlbmRlckhlYWRlclNlcnZpY2UsIEFzc2lnbmVkT2ZmZW5kZXIgfSBmcm9tICcuL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNtYXJ0LW9mZmVuZGVyLWhlYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LW9mZmVuZGVyLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtb2ZmZW5kZXItaGVhZGVyLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0T2ZmZW5kZXJIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIHNlbGVjdGVkT2ZmZW5kZXI6IFNlbGVjdGVkT2ZmZW5kZXI7XHJcbiAgbG9naW5TdGFmZjogTG9naW5TdGFmZjtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBzZWxlY3RlZE9mZmVuZGVyQ29udHJvbCQgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICAvLyBhc3NpZ25lZE9mZmVuZGVyczogQXNzaWduZWRPZmZlbmRlcltdO1xyXG4gIG9mZmVuZGVyUXVlcnlMaXN0OiBTZWxlY3RlZE9mZmVuZGVyW107XHJcbiAgb2ZmZW5kZXJRdWVyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB4ZG1TZXJ2aWNlOiBYZG1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoblNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbWFydE9mZmVuZGVySGVhZGVyU2VydmljZTogU21hcnRPZmZlbmRlckhlYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IHRoaXMuYXV0aG5TZXJ2aWNlLmdldEFjY291bnQoKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRMb2dpblN0YWZmKCkudGhlbigobG9naW5TdGFmZikgPT4ge1xyXG4gICAgICB0aGlzLmxvZ2luU3RhZmYgPSBsb2dpblN0YWZmID8gbG9naW5TdGFmZiA6IG51bGw7XHJcbiAgICB9KTtcclxuICAgIHRoaXMueGRtU2VydmljZS5nZXRTZWxlY3RlZE9mZmVuZGVyKCkudGhlbigoc2VsZWN0ZWRPZmZlbmRlcikgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPVxyXG4gICAgICAgIHNlbGVjdGVkT2ZmZW5kZXIgJiYgc2VsZWN0ZWRPZmZlbmRlci5vZmZlbmRlcklkXHJcbiAgICAgICAgICA/IHNlbGVjdGVkT2ZmZW5kZXJcclxuICAgICAgICAgIDogbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlXHJcbiAgICAgIC5nZXRPZmZlbmRlclVwZGF0ZSgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkT2ZmZW5kZXIpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPSBzZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRPZmZlbmRlckNvbnRyb2woKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy54ZG1TZXJ2aWNlLmdldE9mZmVuZGVyUXVlcnkoKS50aGVuKChvZmZlbmRlclF1ZXJ5OiBPZmZlbmRlclF1ZXJ5KSA9PiB7XHJcbiAgICAgIGlmIChvZmZlbmRlclF1ZXJ5KSB7XHJcbiAgICAgICAgdGhpcy5vZmZlbmRlclF1ZXJ5TGlzdCA9IG9mZmVuZGVyUXVlcnkub2ZmZW5kZXJzO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRPZmZlbmRlckNvbnRyb2woKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vZmZlbmRlclF1ZXJ5U3Vic2NyaXB0aW9uID0gdGhpcy54ZG1TZXJ2aWNlLmdldE9mZmVuZGVyUXVlcnlVcGRhdGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChvZmZlbmRlckxpc3QpID0+IHtcclxuICAgICAgICBpZiAob2ZmZW5kZXJMaXN0ICYmIG9mZmVuZGVyTGlzdC5vZmZlbmRlcnMpIHtcclxuICAgICAgICAgIHRoaXMub2ZmZW5kZXJRdWVyeUxpc3QgPSBbLi4ub2ZmZW5kZXJMaXN0Lm9mZmVuZGVyc107XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlckNvbnRyb2wkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKG8pID0+XHJcbiAgICAgIHRoaXMub25PZmZlbmRlclNlbGVjdGVkKG8pLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbk9mZmVuZGVyU2VsZWN0ZWQob2ZmZW5kZXIpOiB2b2lkIHtcclxuICAgIGlmIChvZmZlbmRlcikge1xyXG4gICAgICAvLyBjb25zdCBvID0gb2ZmZW5kZXIub2ZmZW5kZXJOYW1lLnNwbGl0KCcsJyk7XHJcbiAgICAgIC8vIGlmIChvLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAvLyAgIGNvbnN0IG9mZmVuZGVyTmFtZSA9IGAke29bMV19ICR7b1swXX1gO1xyXG4gICAgICAvLyAgIHRoaXMuc2VsZWN0ZWRPZmZlbmRlciA9IHtcclxuICAgICAgLy8gICAgIG9mZmVuZGVySWQ6IG9mZmVuZGVyLm9mZmVuZGVySWQsXHJcbiAgICAgIC8vICAgICBuYW1lOiBvZmZlbmRlck5hbWUsXHJcbiAgICAgIC8vICAgICBwZElkOiBvZmZlbmRlci5wZElkLFxyXG4gICAgICAvLyAgICAgYmlydGhEYXRlOiBvZmZlbmRlci5iaXJ0aERhdGUsXHJcbiAgICAgIC8vICAgICBnZW5kZXI6IG9mZmVuZGVyLmdlbmRlckNvZGUsXHJcbiAgICAgIC8vICAgICBhc3NpZ25tZW50U3RhZmZSZWxhdGlvbklkOiAnJyxcclxuICAgICAgLy8gICAgIGludGFrZUZsYWc6IHRoaXMubG9naW5TdGFmZlxyXG4gICAgICAvLyAgICAgICA/IHRoaXMuaGFzSW50YWtlUm9sZSh0aGlzLmxvZ2luU3RhZmYucm9sZXMpXHJcbiAgICAgIC8vICAgICAgIDogZmFsc2UsXHJcbiAgICAgIC8vICAgfSBhcyBTZWxlY3RlZE9mZmVuZGVyO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIgPSBvZmZlbmRlcjtcclxuICAgICAgdGhpcy54ZG1TZXJ2aWNlLnNldFNlbGVjdGVkT2ZmZW5kZXIodGhpcy5zZWxlY3RlZE9mZmVuZGVyLCB0aGlzLnJlbG9hZEN1cnJlbnRSb3V0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZE9mZmVuZGVyQ29udHJvbCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZE9mZmVuZGVyICYmXHJcbiAgICAgIHRoaXMub2ZmZW5kZXJRdWVyeUxpc3QgJiZcclxuICAgICAgdGhpcy5vZmZlbmRlclF1ZXJ5TGlzdC5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgbyA9IHRoaXMub2ZmZW5kZXJRdWVyeUxpc3QuZmluZChcclxuICAgICAgICAoeCkgPT4geC5vZmZlbmRlcklkID09PSB0aGlzLnNlbGVjdGVkT2ZmZW5kZXIub2ZmZW5kZXJJZCxcclxuICAgICAgKTtcclxuICAgICAgaWYgKG8pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXJDb250cm9sJC5zZXRWYWx1ZShvLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghbyAmJiB0aGlzLm9mZmVuZGVyUXVlcnlMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2ZmZW5kZXJDb250cm9sJC5zZXRWYWx1ZSh0aGlzLm9mZmVuZGVyUXVlcnlMaXN0WzBdLCB7XHJcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbG9hZEN1cnJlbnRSb3V0ZSgpIHtcclxuICAgIC8qdHJ5IHtcclxuICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XHJcbiAgICAgIGlmICh1cmxUcmVlXHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290XHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290LnNlZ21lbnRzXHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290LnNlZ21lbnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsVHJlZS5yb290LnNlZ21lbnRzWzBdLnBhdGhdKTtcclxuICAgICAgfSBlbHNlIGlmICh1cmxUcmVlXHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290XHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290LmNoaWxkcmVuXHJcbiAgICAgICAgJiYgdXJsVHJlZS5yb290LmNoaWxkcmVuLnByaW1hcnlcclxuICAgICAgICAmJiB1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50c1xyXG4gICAgICAgICYmIHVybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsVHJlZS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHNbMF0ucGF0aF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlci51cmxdKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcclxuICAgIH0qL1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0ludGFrZVJvbGUocm9sZXM6IFJvbGVbXSkge1xyXG4gICAgaWYgKHJvbGVzICYmIHJvbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHJvbGVzLmZpbmRJbmRleCh0aGlzLmlzSW50YWtlUm9sZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNJbnRha2VSb2xlKHJvbGU6IFJvbGUpIHtcclxuICAgIHN3aXRjaCAocm9sZS5yb2xlSWQpIHtcclxuICAgICAgY2FzZSAnT1BBJzpcclxuICAgICAgY2FzZSAnT1BTJzpcclxuICAgICAgY2FzZSAnU09QUyc6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|