@bnsights/bbsf-utilities 1.0.31 → 1.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +5 -2
  2. package/bnsights-bbsf-utilities-1.0.32.tgz +0 -0
  3. package/bnsights-bbsf-utilities.d.ts +1 -0
  4. package/{esm2015/bnsights-bbsf-utilities.js → esm2020/bnsights-bbsf-utilities.mjs} +0 -0
  5. package/esm2020/lib/bbsf-utilities.module.mjs +74 -0
  6. package/esm2020/lib/shared/authentication/auth.service.mjs +217 -0
  7. package/{esm2015/lib/shared/config/environment.js → esm2020/lib/shared/config/environment.mjs} +0 -0
  8. package/{esm2015/lib/shared/models/AreaModel.js → esm2020/lib/shared/models/AreaModel.mjs} +0 -0
  9. package/{esm2015/lib/shared/models/ErrorModel.js → esm2020/lib/shared/models/ErrorModel.mjs} +0 -0
  10. package/{esm2015/lib/shared/models/RequestOptionsModel.js → esm2020/lib/shared/models/RequestOptionsModel.mjs} +0 -0
  11. package/esm2020/lib/shared/services/AppearanceConfiguration.service.mjs +35 -0
  12. package/esm2020/lib/shared/services/configuration.service.mjs +24 -0
  13. package/esm2020/lib/shared/services/controlvalidation.service.mjs +166 -0
  14. package/esm2020/lib/shared/services/environment.service.mjs +50 -0
  15. package/esm2020/lib/shared/services/masterlayout.service.mjs +84 -0
  16. package/esm2020/lib/shared/services/requesthandler.service.mjs +202 -0
  17. package/esm2020/lib/shared/services/stylesbundle.service.mjs +55 -0
  18. package/esm2020/lib/shared/services/translate.service.mjs +14 -0
  19. package/esm2020/lib/shared/services/translationresolver.service.mjs +18 -0
  20. package/esm2020/lib/shared/services/utility.service.mjs +90 -0
  21. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  22. package/fesm2015/{bnsights-bbsf-utilities.js → bnsights-bbsf-utilities.mjs} +160 -157
  23. package/fesm2015/bnsights-bbsf-utilities.mjs.map +1 -0
  24. package/fesm2020/bnsights-bbsf-utilities.mjs +997 -0
  25. package/fesm2020/bnsights-bbsf-utilities.mjs.map +1 -0
  26. package/lib/bbsf-utilities.module.d.ts +9 -0
  27. package/lib/shared/authentication/auth.service.d.ts +3 -0
  28. package/lib/shared/services/AppearanceConfiguration.service.d.ts +3 -0
  29. package/lib/shared/services/configuration.service.d.ts +3 -0
  30. package/lib/shared/services/controlvalidation.service.d.ts +3 -0
  31. package/lib/shared/services/environment.service.d.ts +3 -0
  32. package/lib/shared/services/masterlayout.service.d.ts +3 -0
  33. package/lib/shared/services/requesthandler.service.d.ts +3 -0
  34. package/lib/shared/services/stylesbundle.service.d.ts +3 -0
  35. package/lib/shared/services/translate.service.d.ts +3 -0
  36. package/lib/shared/services/translationresolver.service.d.ts +3 -0
  37. package/lib/shared/services/utility.service.d.ts +3 -0
  38. package/package.json +19 -7
  39. package/bnsights-bbsf-utilities-1.0.31.tgz +0 -0
  40. package/bnsights-bbsf-utilities.metadata.json +0 -1
  41. package/bundles/bnsights-bbsf-utilities.umd.js +0 -1485
  42. package/bundles/bnsights-bbsf-utilities.umd.js.map +0 -1
  43. package/esm2015/lib/bbsf-utilities.module.js +0 -52
  44. package/esm2015/lib/shared/authentication/auth.service.js +0 -236
  45. package/esm2015/lib/shared/services/AppearanceConfiguration.service.js +0 -37
  46. package/esm2015/lib/shared/services/configuration.service.js +0 -26
  47. package/esm2015/lib/shared/services/controlvalidation.service.js +0 -168
  48. package/esm2015/lib/shared/services/environment.service.js +0 -48
  49. package/esm2015/lib/shared/services/masterlayout.service.js +0 -96
  50. package/esm2015/lib/shared/services/requesthandler.service.js +0 -206
  51. package/esm2015/lib/shared/services/stylesbundle.service.js +0 -56
  52. package/esm2015/lib/shared/services/translate.service.js +0 -13
  53. package/esm2015/lib/shared/services/translationresolver.service.js +0 -20
  54. package/esm2015/lib/shared/services/utility.service.js +0 -96
  55. package/fesm2015/bnsights-bbsf-utilities.js.map +0 -1
@@ -0,0 +1,166 @@
1
+ import { __decorate } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { BlockUI } from 'ng-block-ui';
4
+ import { RequestOptionsModel } from '../models/RequestOptionsModel';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./utility.service";
7
+ export class ControlValidationService {
8
+ constructor(utilityService) {
9
+ this.utilityService = utilityService;
10
+ this.requestOptions = new RequestOptionsModel();
11
+ this.isCreatedBefor = false;
12
+ }
13
+ showGlobalError(errorMessage, formId, deleteOld) {
14
+ let globalErorrElement = document.getElementsByClassName('alert alert-InvalidValidation bg-light-danger text-danger');
15
+ if (globalErorrElement.length > 0) {
16
+ this.removeElementsByClass('alert alert-InvalidValidation bg-light-danger text-danger');
17
+ }
18
+ if (this.isCreatedBefor == true) {
19
+ this.removeElementsByClass('alert alert-InvalidValidation bg-light-danger text-danger');
20
+ }
21
+ // tslint:disable-next-line: prefer-const
22
+ if (!formId)
23
+ formId = "currentForm";
24
+ var object = document.getElementById(formId);
25
+ const tagName = 'div';
26
+ // tslint:disable-next-line: prefer-const
27
+ var elementToAppend = document.createElement(tagName); // Your tag name here
28
+ let message = "";
29
+ if (!errorMessage || (typeof errorMessage == "string")) {
30
+ if (localStorage.getItem('language') == "ar")
31
+ message = errorMessage ? errorMessage : "لديك بعص الأخطاء . من فضلك قم بالمراجعه ";
32
+ else
33
+ message = errorMessage ? errorMessage : "You have some validation errors. Please check below";
34
+ elementToAppend.innerHTML = "<ul class='list-unstyled m-0 py-3 d-flex align-items-center fs-6'><li><i class='fa fa-times-circle text-danger me-3 fs-2'></i>" + message + "</li></ul>";
35
+ elementToAppend.className += 'alert alert-InvalidValidation bg-light-danger text-danger';
36
+ elementToAppend.id += 'errorId';
37
+ // tslint:disable-next-line: prefer-for-of
38
+ const elementToAppen = elementToAppend.cloneNode(true);
39
+ // let targetElement = object.getElementsByClassName("b-control")[0];
40
+ object.insertBefore(elementToAppen, object.firstChild);
41
+ }
42
+ else {
43
+ elementToAppend.innerHTML = "<ul>";
44
+ for (const iterator of errorMessage) {
45
+ elementToAppend.innerHTML = "<li>" + iterator + "</li>";
46
+ }
47
+ elementToAppend.innerHTML = "</ul>";
48
+ elementToAppend.className += 'alert alert-InvalidValidation bg-light-danger text-danger';
49
+ elementToAppend.id += 'errorId';
50
+ // tslint:disable-next-line: prefer-for-of
51
+ const elementToAppen = elementToAppend.cloneNode(true);
52
+ // let targetElement = object.getElementsByClassName("b-control")[0];
53
+ object.insertBefore(elementToAppen, object.firstChild);
54
+ }
55
+ this.isCreatedBefor = true;
56
+ }
57
+ RemoveGlobalError() {
58
+ const removedList = document.getElementsByClassName('alert alert-InvalidValidation bg-light-danger text-danger');
59
+ // tslint:disable-next-line: prefer-for-of
60
+ for (let index = 0; index < removedList.length; index++) {
61
+ const element = removedList[index];
62
+ element.remove();
63
+ }
64
+ this.isCreatedBefor = false;
65
+ }
66
+ showInputErro(errors) {
67
+ // show error on top of form
68
+ this.showGlobalError();
69
+ // remove old error from server
70
+ this.removeElementsByClass('errortemplet');
71
+ // Looping in error Object
72
+ for (const key in errors) {
73
+ if (errors.hasOwnProperty(key)) {
74
+ for (const iterator of errors[key]) {
75
+ const input = document.querySelectorAll('[ng-reflect-name=' + key + ']')[0];
76
+ if (input.attributes['ng-reflect-name'].value === key) {
77
+ this.removeElementsByClass('erroclass-' + key);
78
+ const tagName = 'p';
79
+ const elementToAppend = document.createElement(tagName); // Your tag name here
80
+ elementToAppend.innerHTML = iterator;
81
+ elementToAppend.style.color = 'red';
82
+ elementToAppend.className += 'errortemplet erroclass-' + key;
83
+ const elementToappen = elementToAppend.cloneNode(true);
84
+ input.parentNode.insertBefore(elementToappen, input.lastChild);
85
+ break;
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
91
+ removeElementsByClass(className) {
92
+ const elements = document.getElementsByClassName(className);
93
+ while (elements.length > 0) {
94
+ elements[0].parentNode.removeChild(elements[0]);
95
+ }
96
+ }
97
+ renderServerErrors(form, err, requestOptions, formId) {
98
+ if (err.error == null) {
99
+ return;
100
+ }
101
+ let errorsArray = [];
102
+ this.requestOptions = requestOptions;
103
+ err.error.validation_errors.forEach((element) => {
104
+ let fieldName = element.field;
105
+ let controlName = element.controlName;
106
+ let message = element.message;
107
+ if (form == null) {
108
+ this.requestOptions.customErrorMessage ? this.utilityService.notifyErrorMessage(this.requestOptions.customErrorMessage) : this.utilityService.notifyErrorMessage(`${message}`);
109
+ }
110
+ else if (controlName && !this.hasControlName(form, controlName)) {
111
+ errorsArray.push(`${fieldName}: ${message}`);
112
+ // this.showGlobalError(`${fieldName}: ${message}`,formId )
113
+ }
114
+ else {
115
+ this.setFieldError(form, controlName, fieldName, message);
116
+ }
117
+ });
118
+ if (errorsArray.length > 0)
119
+ this.showGlobalError(errorsArray, formId);
120
+ }
121
+ hasControlName(form, controlName) {
122
+ let control = form.get(controlName);
123
+ return control != null;
124
+ }
125
+ setFieldError(form, controlName, fieldName, message) {
126
+ let control = null;
127
+ if (controlName)
128
+ control = form.get(controlName);
129
+ else
130
+ control = form.get(fieldName.split('.')[0]);
131
+ let errors = { "errorMassage": message };
132
+ let fieldNameArray = fieldName.split('.');
133
+ if (fieldNameArray.length >= 1) {
134
+ switch (fieldNameArray[fieldNameArray.length - 1].toLocaleLowerCase()) {
135
+ case "english":
136
+ let englishControl = control.get("English");
137
+ englishControl.setErrors(errors);
138
+ break;
139
+ case "arabic":
140
+ let arabicControl = control.get("Arabic");
141
+ arabicControl.setErrors(errors);
142
+ break;
143
+ default:
144
+ control.setErrors(errors);
145
+ }
146
+ }
147
+ else if (fieldNameArray.length == 1) {
148
+ control.setErrors(errors);
149
+ }
150
+ else {
151
+ this.requestOptions.customErrorMessage ? this.utilityService.notifyErrorMessage(this.requestOptions.customErrorMessage) : this.utilityService.notifyErrorMessage(`${message}`);
152
+ }
153
+ }
154
+ }
155
+ ControlValidationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ControlValidationService, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Injectable });
156
+ ControlValidationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ControlValidationService, providedIn: 'root' });
157
+ __decorate([
158
+ BlockUI()
159
+ ], ControlValidationService.prototype, "blockUI", void 0);
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ControlValidationService, decorators: [{
161
+ type: Injectable,
162
+ args: [{
163
+ providedIn: 'root'
164
+ }]
165
+ }], ctorParameters: function () { return [{ type: i1.UtilityService }]; }, propDecorators: { blockUI: [] } });
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbHZhbGlkYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtdXRpbGl0aWVzL3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2NvbnRyb2x2YWxpZGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXVDLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFBRSxPQUFPLEVBQWEsTUFBTSxhQUFhLENBQUM7QUFNakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQU9wRSxNQUFNLE9BQU8sd0JBQXdCO0lBR25DLFlBRVksY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBSmxDLG1CQUFjLEdBQXdCLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQVN4RSxtQkFBYyxHQUFHLEtBQUssQ0FBQztJQUZ2QixDQUFDO0lBTUQsZUFBZSxDQUFDLFlBQWdDLEVBQUUsTUFBZSxFQUFFLFNBQW1CO1FBQ3BGLElBQUksa0JBQWtCLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLDJEQUEyRCxDQUFDLENBQUE7UUFDckgsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1NBQ3pGO1FBR0QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRTtZQUMvQixJQUFJLENBQUMscUJBQXFCLENBQUMsMkRBQTJELENBQUMsQ0FBQztTQUN6RjtRQUVELHlDQUF5QztRQUN6QyxJQUFJLENBQUMsTUFBTTtZQUNULE1BQU0sR0FBRyxhQUFhLENBQUE7UUFDeEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxNQUFNLE9BQU8sR0FBRyxL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QWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1NBQy9LO0lBR0gsQ0FBQzs7c0hBbkxVLHdCQUF3QjswSEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07QUFjUDtJQUFWLE9BQU8sRUFBRTt5REFBb0I7NEZBWm5CLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7cUdBYVksT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBIb3N0LCBTa2lwU2VsZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEluZGl2aWR1YWxDb25maWcsIFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgQmxvY2tVSSwgTmdCbG9ja1VJIH0gZnJvbSAnbmctYmxvY2stdWknO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEVycm9yTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvRXJyb3JNb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi91dGlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXF1ZXN0T3B0aW9uc01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL1JlcXVlc3RPcHRpb25zTW9kZWwnO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zTW9kZWwgPSBuZXcgUmVxdWVzdE9wdGlvbnNNb2RlbCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvclxyXG4gICAgKFxyXG4gICAgICBwcml2YXRlIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgaXNDcmVhdGVkQmVmb3IgPSBmYWxzZTtcclxuXHJcbiAgQEJsb2NrVUkoKSBibG9ja1VJOiBOZ0Jsb2NrVUk7XHJcblxyXG4gIHNob3dHbG9iYWxFcnJvcihlcnJvck1lc3NhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXSwgZm9ybUlkPzogc3RyaW5nLCBkZWxldGVPbGQ/OiBib29sZWFuKSB7XHJcbiAgICBsZXQgZ2xvYmFsRXJvcnJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYWxlcnQgYWxlcnQtSW52YWxpZFZhbGlkYXRpb24gYmctbGlnaHQtZGFuZ2VyIHRleHQtZGFuZ2VyJylcclxuICAgIGlmIChnbG9iYWxFcm9yckVsZW1lbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJlbW92ZUVsZW1lbnRzQnlDbGFzcygnYWxlcnQgYWxlcnQtSW52YWxpZFZhbGlkYXRpb24gYmctbGlnaHQtZGFuZ2VyIHRleHQtZGFuZ2VyJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmICh0aGlzLmlzQ3JlYXRlZEJlZm9yID09IHRydWUpIHtcclxuICAgICAgdGhpcy5yZW1vdmVFbGVtZW50c0J5Q2xhc3MoJ2FsZXJ0IGFsZXJ0LUludmFsaWRWYWxpZGF0aW9uIGJnLWxpZ2h0LWRhbmdlciB0ZXh0LWRhbmdlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogcHJlZmVyLWNvbnN0XHJcbiAgICBpZiAoIWZvcm1JZClcclxuICAgICAgZm9ybUlkID0gXCJjdXJyZW50Rm9ybVwiXHJcbiAgICB2YXIgb2JqZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUlkKTtcclxuICAgIGNvbnN0IHRhZ05hbWUgPSAnZGl2JztcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogcHJlZmVyLWNvbnN0XHJcbiAgICB2YXIgZWxlbWVudFRvQXBwZW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsgLy8gWW91ciB0YWcgbmFtZSBoZXJlXHJcbiAgICBsZXQgbWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10gPSBcIlwiO1xyXG5cclxuXHJcbiAgICBpZiAoIWVycm9yTWVzc2FnZSB8fCAodHlwZW9mIGVycm9yTWVzc2FnZSA9PSBcInN0cmluZ1wiKSkge1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykgPT0gXCJhclwiKVxyXG4gICAgICAgIG1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgPyBlcnJvck1lc3NhZ2UgOiBcItmE2K/ZitmDINio2LnYtSDYp9mE2KPYrti32KfYoSAuINmF2YYg2YHYttmE2YMg2YLZhSDYqNin2YTZhdix2KfYrNi52YcgXCI7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBtZXNzYWdlID0gZXJyb3JNZXNzYWdlID8gZXJyb3JNZXNzYWdlIDogXCJZb3UgaGF2ZSBzb21lIHZhbGlkYXRpb24gZXJyb3JzLiBQbGVhc2UgY2hlY2sgYmVsb3dcIlxyXG4gICAgICBlbGVtZW50VG9BcHBlbmQuaW5uZXJIVE1MID0gXCI8dWwgY2xhc3M9J2xpc3QtdW5zdHlsZWQgbS0wIHB5LTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmcy02Jz48bGk+PGkgY2xhc3M9J2ZhIGZhLXRpbWVzLWNpcmNsZSB0ZXh0LWRhbmdlciBtZS0zIGZzLTInPjwvaT5cIiArIG1lc3NhZ2UgKyBcIjwvbGk+PC91bD5cIjtcclxuICAgICAgZWxlbWVudFRvQXBwZW5kLmNsYXNzTmFtZSArPSAnYWxlcnQgYWxlcnQtSW52YWxpZFZhbGlkYXRpb24gYmctbGlnaHQtZGFuZ2VyIHRleHQtZGFuZ2VyJztcclxuICAgICAgZWxlbWVudFRvQXBwZW5kLmlkICs9ICdlcnJvcklkJztcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBwcmVmZXItZm9yLW9mXHJcbiAgICAgIGNvbnN0IGVsZW1lbnRUb0FwcGVuID0gZWxlbWVudFRvQXBwZW5kLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgLy8gbGV0IHRhcmdldEVsZW1lbnQgPSBvYmplY3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImItY29udHJvbFwiKVswXTtcclxuICAgICAgb2JqZWN0Lmluc2VydEJlZm9yZShlbGVtZW50VG9BcHBlbiwgb2JqZWN0LmZpcnN0Q2hpbGQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGVsZW1lbnRUb0FwcGVuZC5pbm5lckhUTUwgPSBcIjx1bD5cIjtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgaXRlcmF0b3Igb2YgZXJyb3JNZXNzYWdlKSB7XHJcblxyXG4gICAgICAgIGVsZW1lbnRUb0FwcGVuZC5pbm5lckhUTUwgPSBcIjxsaT5cIiArIGl0ZXJhdG9yICsgXCI8L2xpPlwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBlbGVtZW50VG9BcHBlbmQuaW5uZXJIVE1MID0gXCI8L3VsPlwiO1xyXG4gICAgICBlbGVtZW50VG9BcHBlbmQuY2xhc3NOYW1lICs9ICdhbGVydCBhbGVydC1JbnZhbGlkVmFsaWRhdGlvbiBiZy1saWdodC1kYW5nZXIgdGV4dC1kYW5nZXInO1xyXG4gICAgICBlbGVtZW50VG9BcHBlbmQuaWQgKz0gJ2Vycm9ySWQnO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHByZWZlci1mb3Itb2ZcclxuICAgICAgY29uc3QgZWxlbWVudFRvQXBwZW4gPSBlbGVtZW50VG9BcHBlbmQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAvLyBsZXQgdGFyZ2V0RWxlbWVudCA9IG9iamVjdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYi1jb250cm9sXCIpWzBdO1xyXG4gICAgICBvYmplY3QuaW5zZXJ0QmVmb3JlKGVsZW1lbnRUb0FwcGVuLCBvYmplY3QuZmlyc3RDaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0NyZWF0ZWRCZWZvciA9IHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgUmVtb3ZlR2xvYmFsRXJyb3IoKSB7XHJcbiAgICBjb25zdCByZW1vdmVkTGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FsZXJ0IGFsZXJ0LUludmFsaWRWYWxpZGF0aW9uIGJnLWxpZ2h0LWRhbmdlciB0ZXh0LWRhbmdlcicpO1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBwcmVmZXItZm9yLW9mXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVtb3ZlZExpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSByZW1vdmVkTGlzdFtpbmRleF07XHJcbiAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzaG93SW5wdXRFcnJvKGVycm9yczogYW55KSB7XHJcblxyXG4gICAgLy8gc2hvdyBlcnJvciBvbiB0b3Agb2YgZm9ybSBcclxuICAgIHRoaXMuc2hvd0dsb2JhbEVycm9yKCk7XHJcbiAgICAvLyByZW1vdmUgb2xkIGVycm9yIGZyb20gc2VydmVyXHJcbiAgICB0aGlzLnJlbW92ZUVsZW1lbnRzQnlDbGFzcygnZXJyb3J0ZW1wbGV0Jyk7XHJcbiAgICAvLyBMb29waW5nIGluIGVycm9yIE9iamVjdFxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZXJyb3JzKSB7XHJcbiAgICAgIGlmIChlcnJvcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlcmF0b3Igb2YgZXJyb3JzW2tleV0pIHtcclxuICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW25nLXJlZmxlY3QtbmFtZT0nICsga2V5ICsgJ10nKVswXTtcclxuICAgICAgICAgIGlmICgoaW5wdXQuYXR0cmlidXRlc1snbmctcmVmbGVjdC1uYW1lJ10udmFsdWUgYXMgc3RyaW5nKSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudHNCeUNsYXNzKCdlcnJvY2xhc3MtJyArIGtleSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZ05hbWUgPSAncCdcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvQXBwZW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsgLy8gWW91ciB0YWcgbmFtZSBoZXJlXHJcbiAgICAgICAgICAgIGVsZW1lbnRUb0FwcGVuZC5pbm5lckhUTUwgPSBpdGVyYXRvcjtcclxuICAgICAgICAgICAgZWxlbWVudFRvQXBwZW5kLnN0eWxlLmNvbG9yID0gJ3JlZCdcclxuICAgICAgICAgICAgZWxlbWVudFRvQXBwZW5kLmNsYXNzTmFtZSArPSAnZXJyb3J0ZW1wbGV0IGVycm9jbGFzcy0nICsga2V5O1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9hcHBlbiA9IGVsZW1lbnRUb0FwcGVuZC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIGlucHV0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW1lbnRUb2FwcGVuLCBpbnB1dC5sYXN0Q2hpbGQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUVsZW1lbnRzQnlDbGFzcyhjbGFzc05hbWUpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xyXG4gICAgd2hpbGUgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZWxlbWVudHNbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50c1swXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcmVuZGVyU2VydmVyRXJyb3JzKGZvcm06IEZvcm1Hcm91cCwgZXJyOiBIdHRwRXJyb3JSZXNwb25zZSwgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zTW9kZWwsIGZvcm1JZD86IHN0cmluZykge1xyXG4gICAgaWYgKGVyci5lcnJvciA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBlcnJvcnNBcnJheTogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XHJcbiAgICBlcnIuZXJyb3IudmFsaWRhdGlvbl9lcnJvcnMuZm9yRWFjaCgoZWxlbWVudDogRXJyb3JNb2RlbCkgPT4ge1xyXG4gICAgICBsZXQgZmllbGROYW1lID0gZWxlbWVudC5maWVsZDtcclxuICAgICAgbGV0IGNvbnRyb2xOYW1lID0gZWxlbWVudC5jb250cm9sTmFtZTtcclxuICAgICAgbGV0IG1lc3NhZ2UgPSBlbGVtZW50Lm1lc3NhZ2U7XHJcbiAgICAgIGlmIChmb3JtID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLnJlcXVlc3RPcHRpb25zLmN1c3RvbUVycm9yTWVzc2FnZSA/IHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5RXJyb3JNZXNzYWdlKHRoaXMucmVxdWVzdE9wdGlvbnMuY3VzdG9tRXJyb3JNZXNzYWdlKSA6IHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5RXJyb3JNZXNzYWdlKGAke21lc3NhZ2V9YCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY29udHJvbE5hbWUgJiYgIXRoaXMuaGFzQ29udHJvbE5hbWUoZm9ybSwgY29udHJvbE5hbWUpKSB7XHJcbiAgICAgICAgZXJyb3JzQXJyYXkucHVzaChgJHtmaWVsZE5hbWV9OiAke21lc3NhZ2V9YCk7XHJcbiAgICAgICAgLy8gdGhpcy5zaG93R2xvYmFsRXJyb3IoYCR7ZmllbGROYW1lfTogJHttZXNzYWdlfWAsZm9ybUlkIClcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldEZpZWxkRXJyb3IoZm9ybSwgY29udHJvbE5hbWUsIGZpZWxkTmFtZSwgbWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGVycm9yc0FycmF5Lmxlbmd0aCA+IDApXHJcbiAgICAgIHRoaXMuc2hvd0dsb2JhbEVycm9yKGVycm9yc0FycmF5LCBmb3JtSWQpXHJcblxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzQ29udHJvbE5hbWUoZm9ybTogRm9ybUdyb3VwLCBjb250cm9sTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY29udHJvbCA9IGZvcm0uZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgIHJldHVybiBjb250cm9sICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpZWxkRXJyb3IoZm9ybTogRm9ybUdyb3VwLCBjb250cm9sTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgY29udHJvbCA9IG51bGxcclxuICAgIGlmIChjb250cm9sTmFtZSlcclxuICAgICAgY29udHJvbCA9IGZvcm0uZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgIGVsc2VcclxuICAgICAgY29udHJvbCA9IGZvcm0uZ2V0KGZpZWxkTmFtZS5zcGxpdCgnLicpWzBdKTtcclxuICAgIGxldCBlcnJvcnMgPSB7IFwiZXJyb3JNYXNzYWdlXCI6IG1lc3NhZ2UgfTtcclxuICAgIGxldCBmaWVsZE5hbWVBcnJheSA9IGZpZWxkTmFtZS5zcGxpdCgnLicpO1xyXG4gICAgaWYgKGZpZWxkTmFtZUFycmF5Lmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgIHN3aXRjaCAoZmllbGROYW1lQXJyYXlbZmllbGROYW1lQXJyYXkubGVuZ3RoIC0gMV0udG9Mb2NhbGVMb3dlckNhc2UoKSkge1xyXG4gICAgICAgIGNhc2UgXCJlbmdsaXNoXCI6XHJcbiAgICAgICAgICBsZXQgZW5nbGlzaENvbnRyb2wgPSBjb250cm9sLmdldChcIkVuZ2xpc2hcIilcclxuICAgICAgICAgIGVuZ2xpc2hDb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImFyYWJpY1wiOlxyXG4gICAgICAgICAgbGV0IGFyYWJpY0NvbnRyb2wgPSBjb250cm9sLmdldChcIkFyYWJpY1wiKVxyXG4gICAgICAgICAgYXJhYmljQ29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkTmFtZUFycmF5Lmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucy5jdXN0b21FcnJvck1lc3NhZ2UgPyB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeUVycm9yTWVzc2FnZSh0aGlzLnJlcXVlc3RPcHRpb25zLmN1c3RvbUVycm9yTWVzc2FnZSkgOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeUVycm9yTWVzc2FnZShgJHttZXNzYWdlfWApXHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
@@ -0,0 +1,50 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { environment } from '../config/environment';
3
+ import * as i0 from "@angular/core";
4
+ export class EnvironmentService {
5
+ getEnvironmentObject() {
6
+ return environment;
7
+ }
8
+ getBaseUrl() {
9
+ let Url = environment["BBSF_BaseURL"];
10
+ return Url;
11
+ }
12
+ getApiUrl() {
13
+ let Url = environment["BBSF_ApiUrl"];
14
+ return Url;
15
+ }
16
+ getProductionMode() {
17
+ let Mode = environment["BBSF_IsProduction"];
18
+ return Mode;
19
+ }
20
+ getDefaultLanguage() {
21
+ let Mode = environment["BBSF_DefaultLanguage"];
22
+ return Mode;
23
+ }
24
+ getIdentityServerUrl() {
25
+ let Url = environment["BBSF_IdentityServerUrl"];
26
+ return Url;
27
+ }
28
+ getIsIdentityServerExternal() {
29
+ let Mode = environment["BBSF_IsExternalIdentityServer"];
30
+ return Mode;
31
+ }
32
+ getIsIdentityServerClientId() {
33
+ let Mode = environment["BBSF_IdentityServer_Client_Id"];
34
+ return Mode;
35
+ }
36
+ getIsIdentityServerClientSecret() {
37
+ let Mode = environment["BBSF_IdentityServer_Client_Secret"];
38
+ return Mode;
39
+ }
40
+ }
41
+ EnvironmentService.AreaList = [];
42
+ EnvironmentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: EnvironmentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
43
+ EnvironmentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: EnvironmentService, providedIn: 'root' });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: EnvironmentService, decorators: [{
45
+ type: Injectable,
46
+ args: [{
47
+ providedIn: 'root'
48
+ }]
49
+ }] });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtdXRpbGl0aWVzL3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTXBELE1BQU0sT0FBTyxrQkFBa0I7SUFLN0Isb0JBQW9CO1FBQ2xCLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3JDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELFNBQVM7UUFDUCxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDcEMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixDQUFZLENBQUE7UUFFdEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBVyxDQUFBO1FBQ3hELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELG9CQUFvQjtRQUNsQixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUMvQyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCwyQkFBMkI7UUFDekIsSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLCtCQUErQixDQUFXLENBQUE7UUFDakUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsMkJBQTJCO1FBQ3pCLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQywrQkFBK0IsQ0FBVyxDQUFBO1FBQ2pFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELCtCQUErQjtRQUM3QixJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsbUNBQW1DLENBQVcsQ0FBQTtRQUNyRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBekNLLDJCQUFRLEdBQWdCLEVBQUUsQ0FBQTtnSEFIckIsa0JBQWtCO29IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uL2NvbmZpZy9lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IEFyZWFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9BcmVhTW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRTZXJ2aWNlIHtcclxuXHJcblxyXG4gc3RhdGljIEFyZWFMaXN0OiBBcmVhTW9kZWxbXSA9IFtdXHJcblxyXG4gIGdldEVudmlyb25tZW50T2JqZWN0KCkge1xyXG4gICAgcmV0dXJuIGVudmlyb25tZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0QmFzZVVybCgpIHtcclxuICAgIGxldCBVcmwgPSBlbnZpcm9ubWVudFtcIkJCU0ZfQmFzZVVSTFwiXVxyXG4gICAgcmV0dXJuIFVybDtcclxuICB9XHJcbiAgZ2V0QXBpVXJsKCkge1xyXG4gICAgbGV0IFVybCA9IGVudmlyb25tZW50W1wiQkJTRl9BcGlVcmxcIl1cclxuICAgIHJldHVybiBVcmw7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9kdWN0aW9uTW9kZSgpIHtcclxuICAgIGxldCBNb2RlID0gZW52aXJvbm1lbnRbXCJCQlNGX0lzUHJvZHVjdGlvblwiXSBhcyBib29sZWFuXHJcblxyXG4gICAgcmV0dXJuIE1vZGU7XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0TGFuZ3VhZ2UoKSB7XHJcbiAgICBsZXQgTW9kZSA9IGVudmlyb25tZW50W1wiQkJTRl9EZWZhdWx0TGFuZ3VhZ2VcIl0gYXMgc3RyaW5nXHJcbiAgICByZXR1cm4gTW9kZTtcclxuICB9XHJcbiAgZ2V0SWRlbnRpdHlTZXJ2ZXJVcmwoKSB7XHJcbiAgICBsZXQgVXJsID0gZW52aXJvbm1lbnRbXCJCQlNGX0lkZW50aXR5U2VydmVyVXJsXCJdXHJcbiAgICByZXR1cm4gVXJsO1xyXG4gIH1cclxuICBnZXRJc0lkZW50aXR5U2VydmVyRXh0ZXJuYWwoKSB7XHJcbiAgICBsZXQgTW9kZSA9IGVudmlyb25tZW50W1wiQkJTRl9Jc0V4dGVybmFsSWRlbnRpdHlTZXJ2ZXJcIl0gYXMgc3RyaW5nXHJcbiAgICByZXR1cm4gTW9kZTtcclxuICB9XHJcbiAgZ2V0SXNJZGVudGl0eVNlcnZlckNsaWVudElkKCkge1xyXG4gICAgbGV0IE1vZGUgPSBlbnZpcm9ubWVudFtcIkJCU0ZfSWRlbnRpdHlTZXJ2ZXJfQ2xpZW50X0lkXCJdIGFzIHN0cmluZ1xyXG4gICAgcmV0dXJuIE1vZGU7XHJcbiAgfVxyXG5cclxuICBnZXRJc0lkZW50aXR5U2VydmVyQ2xpZW50U2VjcmV0KCkge1xyXG4gICAgbGV0IE1vZGUgPSBlbnZpcm9ubWVudFtcIkJCU0ZfSWRlbnRpdHlTZXJ2ZXJfQ2xpZW50X1NlY3JldFwiXSBhcyBzdHJpbmdcclxuICAgIHJldHVybiBNb2RlO1xyXG4gIH1cclxuXHJcblxyXG5cclxufVxyXG4iXX0=
@@ -0,0 +1,84 @@
1
+ import { HttpParams } from '@angular/common/http';
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/router";
5
+ import * as i2 from "./requesthandler.service";
6
+ import * as i3 from "../authentication/auth.service";
7
+ import * as i4 from "./stylesbundle.service";
8
+ import * as i5 from "@ngx-translate/core";
9
+ import * as i6 from "./environment.service";
10
+ export class MasterLayoutService {
11
+ constructor(router, http, authService, stylesBundleService, translate, environmentService) {
12
+ this.router = router;
13
+ this.http = http;
14
+ this.authService = authService;
15
+ this.stylesBundleService = stylesBundleService;
16
+ this.translate = translate;
17
+ this.environmentService = environmentService;
18
+ this.ApiUrl = '/api/Home/';
19
+ }
20
+ switchLang(lang, bundleEnglishName, bundleArabicName) {
21
+ this.changeLanguage(lang).subscribe((result) => {
22
+ this.updateUserInfo().subscribe((Value) => {
23
+ let UserInfoObject = Value;
24
+ this.authService.getUser();
25
+ this.authService.user.profile = Object.assign(this.authService.user.profile, UserInfoObject);
26
+ this.authService.storUser(this.authService.user);
27
+ this.stylesBundleService.loadThemes(lang, bundleEnglishName, bundleArabicName);
28
+ localStorage.setItem('language', lang);
29
+ this.translate.use(lang);
30
+ });
31
+ });
32
+ }
33
+ reloadComponent() {
34
+ let currentUrl = this.router.url;
35
+ this.router.routeReuseStrategy.shouldReuseRoute = () => false;
36
+ this.router.onSameUrlNavigation = 'reload';
37
+ this.router.navigate([currentUrl]);
38
+ }
39
+ changeLanguage(key) {
40
+ let params = new HttpParams();
41
+ params = params.append('UserId', this.authService.user.profile.id);
42
+ params = params.append('LanguageKey', key);
43
+ return this.http.post(this.ApiUrl + 'UpdateLanguage', null, null, params);
44
+ }
45
+ getUserClaims() {
46
+ return this.http.get(this.ApiUrl + 'GetUserClaims', null, null);
47
+ }
48
+ logError(error) {
49
+ let params = new HttpParams();
50
+ params = params.append('error', error);
51
+ return this.http.post(this.ApiUrl + 'LogError', null, null, params);
52
+ }
53
+ updateUserInfo() {
54
+ let isExternal = this.environmentService.getIsIdentityServerExternal().toLowerCase() == 'true';
55
+ if (isExternal)
56
+ return this.getUserClaims();
57
+ return this.http.get('/connect/userinfo');
58
+ }
59
+ switchRole(permissionSetID) {
60
+ this.updateRole(permissionSetID).subscribe((result) => {
61
+ this.updateUserInfo().subscribe((Value) => {
62
+ let UserInfoObject = Value;
63
+ this.authService.getUser();
64
+ this.authService.user.profile = Object.assign(this.authService.user.profile, UserInfoObject);
65
+ this.authService.storUser(this.authService.user);
66
+ });
67
+ });
68
+ }
69
+ updateRole(permissionSetID) {
70
+ let params = new HttpParams();
71
+ params = params.append('UserId', this.authService.user.profile.id);
72
+ params = params.append('RoleID', permissionSetID);
73
+ return this.http.post(this.ApiUrl + 'SwitchRole', null, null, params);
74
+ }
75
+ }
76
+ MasterLayoutService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MasterLayoutService, deps: [{ token: i1.Router }, { token: i2.RequestHandlerService }, { token: i3.AuthService }, { token: i4.StylesBundleService }, { token: i5.TranslateService }, { token: i6.EnvironmentService }], target: i0.ɵɵFactoryTarget.Injectable });
77
+ MasterLayoutService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MasterLayoutService, providedIn: 'root' });
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MasterLayoutService, decorators: [{
79
+ type: Injectable,
80
+ args: [{
81
+ providedIn: 'root',
82
+ }]
83
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.RequestHandlerService }, { type: i3.AuthService }, { type: i4.StylesBundleService }, { type: i5.TranslateService }, { type: i6.EnvironmentService }]; } });
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzdGVybGF5b3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLXV0aWxpdGllcy9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9tYXN0ZXJsYXlvdXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFXM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUU5QixZQUNVLE1BQWMsRUFDZCxJQUEyQixFQUMzQixXQUF3QixFQUN4QixtQkFBd0MsRUFDeEMsU0FBMkIsRUFDM0Isa0JBQXNDO1FBTHRDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxTQUFJLEdBQUosSUFBSSxDQUF1QjtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFQaEQsV0FBTSxHQUFHLFlBQVksQ0FBQztJQVFuQixDQUFDO0lBQ0osVUFBVSxDQUNSLElBQVksRUFDWixpQkFBeUIsRUFDekIsZ0JBQXdCO1FBRXhCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN4QyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxD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QU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQzdCLGNBQWMsQ0FDZixDQUFDO2dCQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVLENBQUMsZUFBdUI7UUFDeEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEUsQ0FBQzs7aUhBckZVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGhlbnRpY2F0aW9uL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4vZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJy4vcmVxdWVzdGhhbmRsZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0eWxlc0J1bmRsZVNlcnZpY2UgfSBmcm9tICcuL3N0eWxlc2J1bmRsZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXN0ZXJMYXlvdXRTZXJ2aWNlIHtcclxuICBBcGlVcmwgPSAnL2FwaS9Ib21lLyc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgc3R5bGVzQnVuZGxlU2VydmljZTogU3R5bGVzQnVuZGxlU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZVxyXG4gICkge31cclxuICBzd2l0Y2hMYW5nKFxyXG4gICAgbGFuZzogc3RyaW5nLFxyXG4gICAgYnVuZGxlRW5nbGlzaE5hbWU6IHN0cmluZyxcclxuICAgIGJ1bmRsZUFyYWJpY05hbWU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgdGhpcy5jaGFuZ2VMYW5ndWFnZShsYW5nKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVVzZXJJbmZvKCkuc3Vic2NyaWJlKChWYWx1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBVc2VySW5mb09iamVjdCA9IFZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlcigpO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UudXNlci5wcm9maWxlID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UudXNlci5wcm9maWxlLFxyXG4gICAgICAgICAgVXNlckluZm9PYmplY3RcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2Uuc3RvclVzZXIodGhpcy5hdXRoU2VydmljZS51c2VyKTtcclxuICAgICAgICB0aGlzLnN0eWxlc0J1bmRsZVNlcnZpY2UubG9hZFRoZW1lcyhcclxuICAgICAgICAgIGxhbmcsXHJcbiAgICAgICAgICBidW5kbGVFbmdsaXNoTmFtZSxcclxuICAgICAgICAgIGJ1bmRsZUFyYWJpY05hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsYW5ndWFnZScsIGxhbmcpO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbG9hZENvbXBvbmVudCgpIHtcclxuICAgIGxldCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcclxuICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtjdXJyZW50VXJsXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoYW5nZUxhbmd1YWdlKGtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ1VzZXJJZCcsIHRoaXMuYXV0aFNlcnZpY2UudXNlci5wcm9maWxlLmlkKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ0xhbmd1YWdlS2V5Jywga2V5KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkFwaVVybCArICdVcGRhdGVMYW5ndWFnZScsIG51bGwsIG51bGwsIHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQ2xhaW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5BcGlVcmwgKyAnR2V0VXNlckNsYWltcycsIG51bGwsIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgbG9nRXJyb3IoZXJyb3I6IHN0cmluZykge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdlcnJvcicsIGVycm9yKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkFwaVVybCArICdMb2dFcnJvcicsIG51bGwsIG51bGwsIHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVVzZXJJbmZvKCkge1xyXG4gICAgbGV0IGlzRXh0ZXJuYWwgPXRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldElzSWRlbnRpdHlTZXJ2ZXJFeHRlcm5hbCgpLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnO1xyXG4gICAgaWYgKGlzRXh0ZXJuYWwpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlckNsYWltcygpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoJy9jb25uZWN0L3VzZXJpbmZvJyk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hSb2xlKHBlcm1pc3Npb25TZXRJRDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVJvbGUocGVybWlzc2lvblNldElEKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVVzZXJJbmZvKCkuc3Vic2NyaWJlKChWYWx1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBVc2VySW5mb09iamVjdCA9IFZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlcigpO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UudXNlci5wcm9maWxlID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UudXNlci5wcm9maWxlLFxyXG4gICAgICAgICAgVXNlckluZm9PYmplY3RcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2Uuc3RvclVzZXIodGhpcy5hdXRoU2VydmljZS51c2VyKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUm9sZShwZXJtaXNzaW9uU2V0SUQ6IHN0cmluZykge1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdVc2VySWQnLCB0aGlzLmF1dGhTZXJ2aWNlLnVzZXIucHJvZmlsZS5pZCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdSb2xlSUQnLCBwZXJtaXNzaW9uU2V0SUQpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQXBpVXJsICsgJ1N3aXRjaFJvbGUnLCBudWxsLCBudWxsLCBwYXJhbXMpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,202 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpHeaders } from "@angular/common/http";
3
+ import { RequestOptionsModel } from '../models/RequestOptionsModel';
4
+ import { Observable, Subject, throwError } from 'rxjs';
5
+ import { map, takeUntil, tap } from 'rxjs/operators';
6
+ import { plainToClass } from 'class-transformer';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ import * as i2 from "../authentication/auth.service";
10
+ import * as i3 from "./environment.service";
11
+ import * as i4 from "./utility.service";
12
+ import * as i5 from "./translate.service";
13
+ import * as i6 from "@angular/router";
14
+ export class RequestHandlerService {
15
+ constructor(http, authService, environmentService, utilityService, bbsfTranslateService, router) {
16
+ //using localStorage to avoid call getCurrentLanguage() because it is not all to use async in constructor
17
+ this.http = http;
18
+ this.authService = authService;
19
+ this.environmentService = environmentService;
20
+ this.utilityService = utilityService;
21
+ this.bbsfTranslateService = bbsfTranslateService;
22
+ this.router = router;
23
+ this.requestOptions = new RequestOptionsModel();
24
+ this.currentLanguage = "";
25
+ this.onDestroy$ = new Subject();
26
+ this.bbsfTranslateService.onLangChange.subscribe((event) => {
27
+ if (this.currentLanguage != event.lang) {
28
+ this.currentLanguage = event.lang;
29
+ }
30
+ });
31
+ }
32
+ getLuckyNumber() {
33
+ return Observable.create((subject) => {
34
+ setInterval(() => {
35
+ const number = Math.floor(Math.random() * 10);
36
+ console.log(number);
37
+ subject.next(number);
38
+ }, 1000);
39
+ }).pipe(takeUntil(this.onDestroy$));
40
+ }
41
+ get(Url, params, responseType, requestOptions) {
42
+ if (requestOptions)
43
+ this.requestOptions = requestOptions;
44
+ let headers = this.getHeaders();
45
+ if (!this.requestOptions.disableBlockUI)
46
+ this.utilityService.startBlockUI();
47
+ let object;
48
+ return this.http.get(this.environmentService.getApiUrl() + Url, { headers: headers, params: params }).pipe(takeUntil(this.onDestroy$), tap((result) => {
49
+ if (!this.requestOptions.disableBlockUI)
50
+ this.utilityService.stopBlockUI();
51
+ }, error => {
52
+ if (!this.requestOptions.disableErrorHandler)
53
+ this.handleError(error);
54
+ }), map((data) => {
55
+ if (this.requestOptions.castResponsetoClass)
56
+ return plainToClass(responseType, data, { excludeExtraneousValues: true });
57
+ else
58
+ return data;
59
+ }));
60
+ }
61
+ post(Url, model, responseType, params, requestOptions) {
62
+ if (requestOptions)
63
+ this.requestOptions = requestOptions;
64
+ let headers = this.getHeaders();
65
+ if (!this.requestOptions.disableBlockUI)
66
+ this.utilityService.startBlockUI();
67
+ return this.http.post(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: this.requestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
68
+ if (!this.requestOptions.disableBlockUI)
69
+ this.utilityService.stopBlockUI();
70
+ }, error => {
71
+ if (!this.requestOptions.disableErrorHandler)
72
+ this.handleError(error);
73
+ }), map((data) => {
74
+ if (this.requestOptions.castResponsetoClass)
75
+ return plainToClass(responseType, data, { excludeExtraneousValues: true });
76
+ else
77
+ return data;
78
+ }));
79
+ }
80
+ delete(Url, deletedId, requestOptions, responseType, params) {
81
+ if (requestOptions)
82
+ this.requestOptions = requestOptions;
83
+ let headers = this.getHeaders();
84
+ if (!this.requestOptions.disableBlockUI)
85
+ this.utilityService.startBlockUI();
86
+ return this.http.delete(this.environmentService.getApiUrl() + Url + `/${deletedId}`, { headers: headers, params: params }).pipe(takeUntil(this.onDestroy$), tap((result) => {
87
+ if (!this.requestOptions.disableBlockUI)
88
+ this.utilityService.stopBlockUI();
89
+ }, error => {
90
+ if (!this.requestOptions.disableErrorHandler)
91
+ this.handleError(error);
92
+ }), map((data) => {
93
+ if (this.requestOptions.castResponsetoClass)
94
+ return plainToClass(responseType, data, { excludeExtraneousValues: true });
95
+ else
96
+ return data;
97
+ }));
98
+ }
99
+ put(Url, model, params, responseType, requestOptions) {
100
+ if (requestOptions)
101
+ this.requestOptions = requestOptions;
102
+ let headers = this.getHeaders();
103
+ if (!this.requestOptions.disableBlockUI)
104
+ this.utilityService.startBlockUI();
105
+ return this.http.put(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: this.requestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
106
+ if (!this.requestOptions.disableBlockUI)
107
+ this.utilityService.stopBlockUI();
108
+ }, error => {
109
+ if (!this.requestOptions.disableErrorHandler)
110
+ this.handleError(error);
111
+ }), map((data) => {
112
+ if (this.requestOptions.castResponsetoClass)
113
+ return plainToClass(responseType, data, { excludeExtraneousValues: true });
114
+ else
115
+ return data;
116
+ }));
117
+ }
118
+ patch(Url, model, responseType, params, requestOptions) {
119
+ if (requestOptions)
120
+ this.requestOptions = requestOptions;
121
+ let headers = new HttpHeaders({
122
+ 'Content-Type': 'application/json',
123
+ 'Authorization': this.authService.authorizationHeaderValue(),
124
+ });
125
+ this.currentLanguage = localStorage.getItem('language');
126
+ headers = headers.set('Accept-Language', this.currentLanguage.toString());
127
+ headers = headers.set('ignore-cookies', 'true');
128
+ if (!this.requestOptions.disableBlockUI)
129
+ this.utilityService.startBlockUI();
130
+ return this.http.patch(this.environmentService.getApiUrl() + Url, model, { headers: headers, params: params, responseType: this.requestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
131
+ if (!this.requestOptions.disableBlockUI)
132
+ this.utilityService.stopBlockUI();
133
+ }, error => {
134
+ if (!this.requestOptions.disableErrorHandler)
135
+ this.handleError(error);
136
+ }), map((data) => {
137
+ if (this.requestOptions.castResponsetoClass)
138
+ return plainToClass(responseType, data, { excludeExtraneousValues: true });
139
+ else
140
+ return data;
141
+ }));
142
+ }
143
+ download(Url, params, requestOptions) {
144
+ if (requestOptions)
145
+ this.requestOptions = requestOptions;
146
+ let headers = this.getHeaders();
147
+ if (!this.requestOptions.disableBlockUI)
148
+ this.utilityService.startBlockUI();
149
+ return this.http.get(this.environmentService.getApiUrl() + Url, { headers: headers, params: params, responseType: this.requestOptions.responseType }).pipe(takeUntil(this.onDestroy$), tap((result) => {
150
+ if (!this.requestOptions.disableBlockUI)
151
+ this.utilityService.stopBlockUI();
152
+ }, error => {
153
+ if (!this.requestOptions.disableErrorHandler)
154
+ this.handleError(error);
155
+ }));
156
+ }
157
+ destroyHandler() {
158
+ this.onDestroy$.next();
159
+ }
160
+ ngOnDestroy() {
161
+ console.log("clearInterval");
162
+ this.destroyHandler();
163
+ }
164
+ handleError(err) {
165
+ var isEnglish = this.utilityService.getCurrentLanguage() == "en";
166
+ if (err.error instanceof ErrorEvent) {
167
+ this.utilityService.notifyErrorMessage();
168
+ }
169
+ else {
170
+ if (err.status == 400)
171
+ throwError(err); //error 400 is thrown to be catch by the Form component to handle Fluent validation errors
172
+ else if (err.status == 401)
173
+ this.router.navigate(["/Admin/account/login"]);
174
+ else if (err.status == 403)
175
+ this.utilityService.notifyErrorMessage(isEnglish ? "Sorry, You're not authorized to access this action" : "عذرا ليس لديك الصلاحيه لهذا الطلب");
176
+ else if (err.status == 510)
177
+ this.utilityService.notifyErrorMessage(isEnglish ? "Can not delete this item as it is related to others" : "لا يمكن حذف هذا العنصر لأنه مرتبط بعناصر أخرى");
178
+ else if (err.status == 515)
179
+ this.utilityService.notifyErrorMessage((err.error ? err.error.Message : err.message));
180
+ else {
181
+ console.log(`error message is: ${err.error ? err.error.Message : err.message}`);
182
+ this.utilityService.notifyErrorMessage(this.utilityService.getResourceValue("ErrorMassage"));
183
+ }
184
+ }
185
+ this.utilityService.stopBlockUI();
186
+ }
187
+ getHeaders() {
188
+ return new HttpHeaders({
189
+ 'Content-Type': 'application/json',
190
+ 'Authorization': this.authService.authorizationHeaderValue(),
191
+ 'Client-Local-Time-Zone': Intl.DateTimeFormat().resolvedOptions().timeZone,
192
+ 'Accept-Language': localStorage.getItem('language'),
193
+ 'ignore-cookies': 'true'
194
+ });
195
+ }
196
+ }
197
+ RequestHandlerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RequestHandlerService, deps: [{ token: i1.HttpClient }, { token: i2.AuthService }, { token: i3.EnvironmentService }, { token: i4.UtilityService }, { token: i5.BBSFTranslateService }, { token: i6.Router }], target: i0.ɵɵFactoryTarget.Injectable });
198
+ RequestHandlerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RequestHandlerService });
199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RequestHandlerService, decorators: [{
200
+ type: Injectable
201
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.EnvironmentService }, { type: i4.UtilityService }, { type: i5.BBSFTranslateService }, { type: i6.Router }]; } });
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdGhhbmRsZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtdXRpbGl0aWVzL3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL3JlcXVlc3RoYW5kbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFpQyxXQUFXLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7OztBQUtqRCxNQUFNLE9BQU8scUJBQXFCO0lBSWhDLFlBRVksSUFBZ0IsRUFDaEIsV0FBd0IsRUFDeEIsa0JBQXNDLEVBQ3RDLGNBQThCLEVBQzlCLG9CQUEwQyxFQUMxQyxNQUFjO1FBRXhCLDBHQUEwRztRQVBoRyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVZsQixtQkFBYyxHQUF3QixJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDaEUsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDdEIsZUFBVSxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBWXJELElBQUksQ0FB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QyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO2dCQUMvRSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTthQUM3RjtTQUNKO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU8sVUFBVTtRQUNoQixPQUFPLElBQUksV0FBVyxDQUFDO1lBQ3JCLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUU7WUFDNUQsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVE7WUFDMUUsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDbkQsZ0JBQWdCLEVBQUUsTUFBTTtTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDOzttSEFsT1UscUJBQXFCO3VIQUFyQixxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgUmVxdWVzdE9wdGlvbnNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9SZXF1ZXN0T3B0aW9uc01vZGVsJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoZW50aWNhdGlvbi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuL2Vudmlyb25tZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi91dGlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCQlNGVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0T3B0aW9uc01vZGVsID0gbmV3IFJlcXVlc3RPcHRpb25zTW9kZWwoKTtcclxuICBwcml2YXRlIGN1cnJlbnRMYW5ndWFnZSA9IFwiXCI7XHJcbiAgcHVibGljIG9uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yXHJcbiAgICAoXHJcbiAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICAgKSB7XHJcbiAgICAvL3VzaW5nIGxvY2FsU3RvcmFnZSAgdG8gYXZvaWQgY2FsbCBnZXRDdXJyZW50TGFuZ3VhZ2UoKSBiZWNhdXNlIGl0IGlzIG5vdCBhbGwgdG8gdXNlIGFzeW5jIGluIGNvbnN0cnVjdG9yXHJcblxyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50TGFuZ3VhZ2UgIT0gZXZlbnQubGFuZykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlID0gZXZlbnQubGFuZztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRMdWNreU51bWJlcigpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cclxuICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgoc3ViamVjdDogU3ViamVjdDxudW1iZXI+KSA9PiB7XHJcbiAgICAgIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBjb25zdCBudW1iZXIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCk7XHJcbiAgICAgICAgY29uc29sZS5sb2cobnVtYmVyKVxyXG4gICAgICAgIHN1YmplY3QubmV4dChudW1iZXIpO1xyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKTtcclxuICB9XHJcblxyXG5cclxuICBnZXQ8VD4oVXJsOiBzdHJpbmcsIHBhcmFtcz86IEh0dHBQYXJhbXMsIHJlc3BvbnNlVHlwZT86IG5ldyAoKSA9PiBULCByZXF1ZXN0T3B0aW9ucz86IFJlcXVlc3RPcHRpb25zTW9kZWwpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmIChyZXF1ZXN0T3B0aW9ucylcclxuICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xyXG5cclxuICAgIGxldCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XHJcbiAgICBpZiAoIXRoaXMucmVxdWVzdE9wdGlvbnMuZGlzYWJsZUJsb2NrVUkpXHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICBsZXQgb2JqZWN0OiBUO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyBVcmwsIHsgaGVhZGVyczogaGVhZGVycywgcGFyYW1zOiBwYXJhbXMgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVFcnJvckhhbmRsZXIpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgfSksIG1hcCgoZGF0YTogVCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zLmNhc3RSZXNwb25zZXRvQ2xhc3MpXHJcbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKHJlc3BvbnNlVHlwZSwgZGF0YSwgeyBleGNsdWRlRXh0cmFuZW91c1ZhbHVlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICkgYXMgT2JzZXJ2YWJsZTxUPjtcclxuICB9XHJcblxyXG4gIHBvc3Q8VD4oVXJsOiBzdHJpbmcsIG1vZGVsPzogYW55LCByZXNwb25zZVR5cGU/OiBuZXcgKCkgPT4gVCwgcGFyYW1zPzogSHR0cFBhcmFtcywgcmVxdWVzdE9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc01vZGVsKTogT2JzZXJ2YWJsZTxUPiB7XHJcblxyXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zKVxyXG4gICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XHJcblxyXG4gICAgbGV0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIFVybCwgbW9kZWwsIHsgaGVhZGVyczogaGVhZGVycywgcGFyYW1zOiBwYXJhbXMsIHJlc3BvbnNlVHlwZTogdGhpcy5yZXF1ZXN0T3B0aW9ucy5yZXNwb25zZVR5cGUgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVFcnJvckhhbmRsZXIpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgfSksIG1hcCgoZGF0YTogVCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zLmNhc3RSZXNwb25zZXRvQ2xhc3MpXHJcbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKHJlc3BvbnNlVHlwZSwgZGF0YSwgeyBleGNsdWRlRXh0cmFuZW91c1ZhbHVlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZWxldGU8VD4oVXJsOiBzdHJpbmcsIGRlbGV0ZWRJZDogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IFJlcXVlc3RPcHRpb25zTW9kZWwsIHJlc3BvbnNlVHlwZT86IG5ldyAoKSA9PiBULCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAocmVxdWVzdE9wdGlvbnMpXHJcbiAgICAgIHRoaXMucmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0T3B0aW9ucztcclxuXHJcbiAgICBsZXQgaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycygpO1xyXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8VD4odGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyBVcmwgKyBgLyR7ZGVsZXRlZElkfWAsIHsgaGVhZGVyczogaGVhZGVycywgcGFyYW1zOiBwYXJhbXMgfSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXHJcbiAgICAgIHRhcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVFcnJvckhhbmRsZXIpXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcclxuICAgICAgfSksIG1hcCgoZGF0YTogVCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RPcHRpb25zLmNhc3RSZXNwb25zZXRvQ2xhc3MpXHJcbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKHJlc3BvbnNlVHlwZSwgZGF0YSwgeyBleGNsdWRlRXh0cmFuZW91c1ZhbHVlczogdHJ1ZSB9KTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdXQ8VD4oVXJsOiBzdHJpbmcsIG1vZGVsPzogYW55LCBwYXJhbXM/OiBIdHRwUGFyYW1zLCByZXNwb25zZVR5cGU/OiBuZXcgKCkgPT4gVCwgcmVxdWVzdE9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc01vZGVsKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAocmVxdWVzdE9wdGlvbnMpXHJcbiAgICAgIHRoaXMucmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0T3B0aW9ucztcclxuXHJcbiAgICBsZXQgaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycygpO1xyXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4odGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyBVcmwsIG1vZGVsLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zLCByZXNwb25zZVR5cGU6IHRoaXMucmVxdWVzdE9wdGlvbnMucmVzcG9uc2VUeXBlIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxyXG4gICAgICB0YXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlRXJyb3JIYW5kbGVyKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pLCBtYXAoKGRhdGE6IFQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucy5jYXN0UmVzcG9uc2V0b0NsYXNzKVxyXG4gICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhyZXNwb25zZVR5cGUsIGRhdGEsIHsgZXhjbHVkZUV4dHJhbmVvdXNWYWx1ZXM6IHRydWUgfSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcGF0Y2g8VD4oVXJsOiBzdHJpbmcsIG1vZGVsPzogYW55LCByZXNwb25zZVR5cGU/OiBuZXcgKCkgPT4gVCwgcGFyYW1zPzogSHR0cFBhcmFtcywgcmVxdWVzdE9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc01vZGVsKTogT2JzZXJ2YWJsZTxUPiB7XHJcblxyXG4gICAgaWYgKHJlcXVlc3RPcHRpb25zKVxyXG4gICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XHJcblxyXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAnQXV0aG9yaXphdGlvbic6IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCksXHJcblxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpO1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQtTGFuZ3VhZ2UnLCB0aGlzLmN1cnJlbnRMYW5ndWFnZS50b1N0cmluZygpKTtcclxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnaWdub3JlLWNvb2tpZXMnLCAndHJ1ZScpO1xyXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RPcHRpb25zLmRpc2FibGVCbG9ja1VJKVxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8VD4odGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyBVcmwsIG1vZGVsLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zLCByZXNwb25zZVR5cGU6IHRoaXMucmVxdWVzdE9wdGlvbnMucmVzcG9uc2VUeXBlIH0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxyXG4gICAgICB0YXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlQmxvY2tVSSlcclxuICAgICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5kaXNhYmxlRXJyb3JIYW5kbGVyKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pLCBtYXAoKGRhdGE6IFQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5yZXF1ZXN0T3B0aW9ucy5jYXN0UmVzcG9uc2V0b0NsYXNzKVxyXG4gICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhyZXNwb25zZVR5cGUsIGRhdGEsIHsgZXhjbHVkZUV4dHJhbmVvdXNWYWx1ZXM6IHRydWUgfSlcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIGRvd25sb2FkPFQ+KFVybDogc3RyaW5nLCBwYXJhbXM/OiBIdHRwUGFyYW1zLCByZXF1ZXN0T3B0aW9ucz86IFJlcXVlc3RPcHRpb25zTW9kZWwpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmIChyZXF1ZXN0T3B0aW9ucylcclxuICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucyA9IHJlcXVlc3RPcHRpb25zO1xyXG5cclxuICAgIGxldCBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKCk7XHJcbiAgICBpZiAoIXRoaXMucmVxdWVzdE9wdGlvbnMuZGlzYWJsZUJsb2NrVUkpXHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPih0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIFVybCwgeyBoZWFkZXJzOiBoZWFkZXJzLCBwYXJhbXM6IHBhcmFtcywgcmVzcG9uc2VUeXBlOiB0aGlzLnJlcXVlc3RPcHRpb25zLnJlc3BvbnNlVHlwZSB9KS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcclxuICAgICAgdGFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMucmVxdWVzdE9wdGlvbnMuZGlzYWJsZUJsb2NrVUkpXHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMucmVxdWVzdE9wdGlvbnMuZGlzYWJsZUVycm9ySGFuZGxlcilcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZXN0cm95SGFuZGxlcigpOiB2b2lkIHtcclxuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiY2xlYXJJbnRlcnZhbFwiKVxyXG4gICAgdGhpcy5kZXN0cm95SGFuZGxlcigpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycjogSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgIHZhciBpc0VuZ2xpc2ggPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpID09IFwiZW5cIjtcclxuICAgIGlmIChlcnIuZXJyb3IgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uubm90aWZ5RXJyb3JNZXNzYWdlKClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgIGlmIChlcnIuc3RhdHVzID09IDQwMClcclxuICAgICAgICB0aHJvd0Vycm9yKGVycik7Ly9lcnJvciA0MDAgaXMgdGhyb3duIHRvIGJlIGNhdGNoIGJ5IHRoZSBGb3JtIGNvbXBvbmVudCB0byBoYW5kbGUgRmx1ZW50IHZhbGlkYXRpb24gZXJyb3JzXHJcbiAgICAgIGVsc2UgaWYgKGVyci5zdGF0dXMgPT0gNDAxKVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9BZG1pbi9hY2NvdW50L2xvZ2luXCJdKVxyXG4gICAgICBlbHNlIGlmIChlcnIuc3RhdHVzID09IDQwMylcclxuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeUVycm9yTWVzc2FnZShpc0VuZ2xpc2ggPyBcIlNvcnJ5LCBZb3UncmUgbm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzIHRoaXMgYWN0aW9uXCIgOiBcIti52LDYsdinINmE2YrYsyDZhNiv2YrZgyDYp9mE2LXZhNin2K3ZitmHINmE2YfYsNinINin2YTYt9mE2KhcIilcclxuICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PSA1MTApXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlFcnJvck1lc3NhZ2UoaXNFbmdsaXNoID8gXCJDYW4gbm90IGRlbGV0ZSB0aGlzIGl0ZW0gYXMgaXQgaXMgcmVsYXRlZCB0byBvdGhlcnNcIiA6IFwi2YTYpyDZitmF2YPZhiDYrdiw2YEg2YfYsNinINin2YTYudmG2LXYsSDZhNij2YbZhyDZhdix2KrYqNi3INio2LnZhtin2LXYsSDYo9iu2LHZiVwiKVxyXG4gICAgICBlbHNlIGlmIChlcnIuc3RhdHVzID09IDUxNSlcclxuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeUVycm9yTWVzc2FnZSgoZXJyLmVycm9yID8gZXJyLmVycm9yLk1lc3NhZ2UgOiBlcnIubWVzc2FnZSkpXHJcbiAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgZXJyb3IgbWVzc2FnZSBpczogJHtlcnIuZXJyb3IgPyBlcnIuZXJyb3IuTWVzc2FnZSA6IGVyci5tZXNzYWdlfWApXHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeUVycm9yTWVzc2FnZSh0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFcnJvck1hc3NhZ2VcIikpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKCkge1xyXG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdBdXRob3JpemF0aW9uJzogdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKSxcclxuICAgICAgJ0NsaWVudC1Mb2NhbC1UaW1lLVpvbmUnOiBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUsXHJcbiAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSxcclxuICAgICAgJ2lnbm9yZS1jb29raWVzJzogJ3RydWUnXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19