ng-ipa-library 2.0.1 → 3.0.0
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/{esm2020 → esm2022}/lib/core/components/loading/loading.component.mjs +37 -37
- package/{esm2020 → esm2022}/lib/core/interceptors/error.interceptor.mjs +46 -46
- package/{esm2020 → esm2022}/lib/core/interceptors/loading.interceptor.mjs +58 -58
- package/{esm2020 → esm2022}/lib/core/interceptors/myIPAToken.interceptor.mjs +25 -25
- package/{esm2020 → esm2022}/lib/core/interceptors/token.interceptor.mjs +81 -81
- package/{esm2020 → esm2022}/lib/core/services/auth.service.mjs +62 -62
- package/{esm2020 → esm2022}/lib/core/services/error.service.mjs +55 -55
- package/{esm2020 → esm2022}/lib/core/services/loader.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/core/services/token.service.mjs +22 -22
- package/{esm2020 → esm2022}/lib/generate-form/generate-form.component.mjs +153 -153
- package/{esm2020 → esm2022}/lib/ipa-form/datepicker/datepicker.component.mjs +88 -88
- package/{esm2020 → esm2022}/lib/ipa-form/datepicker/gregorian-datepicker/gregorian-datepicker.component.mjs +27 -27
- package/{esm2020 → esm2022}/lib/ipa-form/datepicker/gregorian-datepicker/gregorian18n.mjs +38 -38
- package/{esm2020 → esm2022}/lib/ipa-form/datepicker/hijri-datepicker/IslamicI18n.mjs +38 -38
- package/{esm2020 → esm2022}/lib/ipa-form/datepicker/hijri-datepicker/hijri-datepicker.component.mjs +27 -27
- package/{esm2020 → esm2022}/lib/ipa-form/dropdown-input/dropdown-input.component.mjs +84 -84
- package/{esm2020 → esm2022}/lib/ipa-form/file-upload/file-upload.component.mjs +142 -142
- package/{esm2020 → esm2022}/lib/ipa-form/ipa-form.service.mjs +290 -290
- package/{esm2020 → esm2022}/lib/ipa-form/recaptcha/recaptcha.component.mjs +55 -55
- package/{esm2020 → esm2022}/lib/ipa-form/text-input/text-input.component.mjs +93 -93
- package/{esm2020 → esm2022}/lib/ipa-form/textarea-input/textarea-input.component.mjs +76 -76
- package/{esm2020 → esm2022}/lib/models/apiException.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/apiResponse.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/breadcrumbs.model.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/decodedToken.model.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/exceptionUrl.model.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/generateForm.model.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/pagedResult.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/user.model.mjs +1 -1
- package/{esm2020 → esm2022}/lib/ng-ipa-library.module.mjs +107 -107
- package/{esm2020 → esm2022}/lib/pipes/hijri-date.pipe.mjs +18 -18
- package/{esm2020 → esm2022}/lib/pipes/pipes.module.mjs +16 -16
- package/{esm2020 → esm2022}/lib/services/breadcrumbs.service.mjs +149 -149
- package/{esm2020 → esm2022}/lib/services/common.service.mjs +51 -51
- package/{esm2020 → esm2022}/lib/share-button/share-button.component.mjs +35 -35
- package/{esm2020 → esm2022}/lib/share-button/share-button.module.mjs +50 -50
- package/{esm2020 → esm2022}/ng-ipa-library.mjs +4 -4
- package/{esm2020 → esm2022}/public-api.mjs +41 -41
- package/{fesm2020 → fesm2022}/ng-ipa-library.mjs +1739 -1739
- package/fesm2022/ng-ipa-library.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/core/components/loading/loading.component.d.ts +13 -13
- package/lib/core/interceptors/error.interceptor.d.ts +12 -12
- package/lib/core/interceptors/loading.interceptor.d.ts +14 -14
- package/lib/core/interceptors/myIPAToken.interceptor.d.ts +11 -11
- package/lib/core/interceptors/token.interceptor.d.ts +19 -19
- package/lib/core/services/auth.service.d.ts +18 -18
- package/lib/core/services/error.service.d.ts +19 -19
- package/lib/core/services/loader.service.d.ts +12 -12
- package/lib/core/services/token.service.d.ts +10 -10
- package/lib/generate-form/generate-form.component.d.ts +34 -34
- package/lib/ipa-form/datepicker/datepicker.component.d.ts +37 -37
- package/lib/ipa-form/datepicker/gregorian-datepicker/gregorian-datepicker.component.d.ts +7 -7
- package/lib/ipa-form/datepicker/gregorian-datepicker/gregorian18n.d.ts +11 -11
- package/lib/ipa-form/datepicker/hijri-datepicker/IslamicI18n.d.ts +11 -11
- package/lib/ipa-form/datepicker/hijri-datepicker/hijri-datepicker.component.d.ts +7 -7
- package/lib/ipa-form/dropdown-input/dropdown-input.component.d.ts +34 -34
- package/lib/ipa-form/file-upload/file-upload.component.d.ts +40 -40
- package/lib/ipa-form/ipa-form.service.d.ts +51 -51
- package/lib/ipa-form/recaptcha/recaptcha.component.d.ts +22 -22
- package/lib/ipa-form/text-input/text-input.component.d.ts +35 -35
- package/lib/ipa-form/textarea-input/textarea-input.component.d.ts +32 -32
- package/lib/models/apiException.d.ts +5 -5
- package/lib/models/apiResponse.d.ts +5 -5
- package/lib/models/breadcrumbs.model.d.ts +4 -4
- package/lib/models/decodedToken.model.d.ts +6 -6
- package/lib/models/exceptionUrl.model.d.ts +4 -4
- package/lib/models/generateForm.model.d.ts +31 -31
- package/lib/models/pagedResult.d.ts +4 -4
- package/lib/models/user.model.d.ts +7 -7
- package/lib/ng-ipa-library.module.d.ts +25 -25
- package/lib/pipes/hijri-date.pipe.d.ts +7 -7
- package/lib/pipes/pipes.module.d.ts +7 -7
- package/lib/services/breadcrumbs.service.d.ts +18 -18
- package/lib/services/common.service.d.ts +11 -11
- package/lib/share-button/share-button.component.d.ts +11 -11
- package/lib/share-button/share-button.module.d.ts +13 -13
- package/package.json +12 -18
- package/public-api.d.ts +31 -31
- package/fesm2015/ng-ipa-library.mjs +0 -1867
- package/fesm2015/ng-ipa-library.mjs.map +0 -1
- package/fesm2020/ng-ipa-library.mjs.map +0 -1
|
@@ -1,153 +1,153 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
|
|
3
|
-
import { IPAFormService } from '../ipa-form/ipa-form.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../ipa-form/ipa-form.service";
|
|
6
|
-
import * as i2 from "@angular/common";
|
|
7
|
-
import * as i3 from "@angular/forms";
|
|
8
|
-
import * as i4 from "../ipa-form/text-input/text-input.component";
|
|
9
|
-
import * as i5 from "../ipa-form/textarea-input/textarea-input.component";
|
|
10
|
-
import * as i6 from "../ipa-form/dropdown-input/dropdown-input.component";
|
|
11
|
-
import * as i7 from "../ipa-form/file-upload/file-upload.component";
|
|
12
|
-
import * as i8 from "../ipa-form/recaptcha/recaptcha.component";
|
|
13
|
-
export class GenerateFormComponent {
|
|
14
|
-
constructor(validationService) {
|
|
15
|
-
this.validationService = validationService;
|
|
16
|
-
this.isArabicForm = true;
|
|
17
|
-
this.recaptchaSize = 'normal';
|
|
18
|
-
this.lang = 'ar';
|
|
19
|
-
this.recaptchaType = 'image';
|
|
20
|
-
this.theme = 'light';
|
|
21
|
-
this.useGlobalDomain = true;
|
|
22
|
-
// file upload outputs
|
|
23
|
-
this.successUpload = new EventEmitter();
|
|
24
|
-
this.fileAdded = new EventEmitter();
|
|
25
|
-
this.fileDeleted = new EventEmitter();
|
|
26
|
-
}
|
|
27
|
-
ngOnInit() {
|
|
28
|
-
this.changeDataValueForEngForm();
|
|
29
|
-
this.createForm();
|
|
30
|
-
}
|
|
31
|
-
getFormControls(formControlName) {
|
|
32
|
-
return this.generateForm.get('items' + formControlName);
|
|
33
|
-
}
|
|
34
|
-
getErrorMessage(formControlName) {
|
|
35
|
-
const formControl = this.generateForm.controls[formControlName];
|
|
36
|
-
this.errorMsg = this.validationService.getErrorMessage(formControl, '', this.isArabicForm);
|
|
37
|
-
return this.errorMsg;
|
|
38
|
-
}
|
|
39
|
-
SuccessUpload(event) {
|
|
40
|
-
this.successUpload.emit(event);
|
|
41
|
-
}
|
|
42
|
-
FileAdded(file, formControlName) {
|
|
43
|
-
this.generateForm.controls[formControlName].patchValue(file);
|
|
44
|
-
this.fileAdded.emit(file);
|
|
45
|
-
}
|
|
46
|
-
FileDeleted(event, formControlName) {
|
|
47
|
-
this.generateForm.controls[formControlName].patchValue(null);
|
|
48
|
-
this.fileDeleted.emit(event);
|
|
49
|
-
}
|
|
50
|
-
changeDataValueForEngForm() {
|
|
51
|
-
this.form.columns = this.form.columns.map((column) => {
|
|
52
|
-
return {
|
|
53
|
-
...column,
|
|
54
|
-
data: column.data?.map((item) => {
|
|
55
|
-
const value = item[column.textField];
|
|
56
|
-
return {
|
|
57
|
-
...item,
|
|
58
|
-
[column.textField]: this.isArabicForm
|
|
59
|
-
? value.split(',')[0]
|
|
60
|
-
: value.split(',')[1],
|
|
61
|
-
};
|
|
62
|
-
}),
|
|
63
|
-
};
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
createForm() {
|
|
67
|
-
this.form.columns.forEach((column) => {
|
|
68
|
-
if (column.type === 'checkbox') {
|
|
69
|
-
this.addCheckboxControl(column);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
this.generateForm.addControl(column.formControlName, new UntypedFormControl(column.type === 'file' && column.multipleFile > 1 ? [] : null, [
|
|
73
|
-
column.required ? Validators.required : Validators.nullValidator,
|
|
74
|
-
column.validationPattern
|
|
75
|
-
? Validators.pattern(column.validationPattern)
|
|
76
|
-
: Validators.nullValidator,
|
|
77
|
-
['select', 'radio', 'file', 'recaptcha'].indexOf(column.type) <=
|
|
78
|
-
-1
|
|
79
|
-
? Validators.maxLength(column.size)
|
|
80
|
-
: Validators.nullValidator,
|
|
81
|
-
column.type === 'number'
|
|
82
|
-
? Validators.min(1)
|
|
83
|
-
: Validators.nullValidator,
|
|
84
|
-
column.formControlName === 'email'
|
|
85
|
-
? IPAFormService.email
|
|
86
|
-
: Validators.nullValidator,
|
|
87
|
-
column.formControlName === 'mobileNo'
|
|
88
|
-
? IPAFormService.mobileNo
|
|
89
|
-
: Validators.nullValidator,
|
|
90
|
-
column.formControlName === 'userId'
|
|
91
|
-
? IPAFormService.checkID
|
|
92
|
-
: Validators.nullValidator,
|
|
93
|
-
]));
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
addCheckboxControl(column) {
|
|
98
|
-
let checkboxGroup = new UntypedFormArray(column.data.map((item) => {
|
|
99
|
-
return new UntypedFormGroup({
|
|
100
|
-
[column.valueField]: new UntypedFormControl(item[column.valueField]),
|
|
101
|
-
[column.textField]: new UntypedFormControl(item[column.textField]),
|
|
102
|
-
checkbox: new UntypedFormControl(false),
|
|
103
|
-
});
|
|
104
|
-
}));
|
|
105
|
-
this.generateForm.addControl(column.formControlName, new UntypedFormControl(null, column.required ? Validators.required : Validators.nullValidator));
|
|
106
|
-
this.generateForm.addControl('items' + column.formControlName, checkboxGroup);
|
|
107
|
-
checkboxGroup.valueChanges.subscribe((value) => {
|
|
108
|
-
let selectedItems = this.getCheckboxSelectedValues(value);
|
|
109
|
-
if (selectedItems) {
|
|
110
|
-
this.generateForm.controls[column.formControlName].patchValue(selectedItems.map((x) => x[column.textField]));
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
this.generateForm.controls[column.formControlName].patchValue(null);
|
|
114
|
-
this.generateForm.controls[column.formControlName].markAsTouched();
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
getCheckboxSelectedValues(items) {
|
|
119
|
-
let selectedItems = items.filter((item) => item.checkbox);
|
|
120
|
-
return selectedItems.length > 0 ? selectedItems : null;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
GenerateFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: GenerateFormComponent, deps: [{ token: i1.IPAFormService }], target: i0.ɵɵFactoryTarget.Component });
|
|
124
|
-
GenerateFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: GenerateFormComponent, selector: "ipa-generate-form", inputs: { generateForm: "generateForm", form: "form", isArabicForm: "isArabicForm", siteKey: "siteKey", recaptchaSize: "recaptchaSize", lang: "lang", recaptchaType: "recaptchaType", theme: "theme", useGlobalDomain: "useGlobalDomain" }, outputs: { successUpload: "successUpload", fileAdded: "fileAdded", fileDeleted: "fileDeleted" }, ngImport: i0, template: "<form [formGroup]=\"generateForm\">\r\n <ng-container *ngFor=\"let column of form.columns\">\r\n <div [ngSwitch]=\"column.type\">\r\n <!-- TEXTAREA -->\r\n <div *ngSwitchCase=\"'textArea'\">\r\n <ipa-textarea-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\" [required]=\"column.required\"\r\n [patternErrorMsg]=\"isArabicForm? column.patternArErrorMsg! : column.patternEnErrorMsg!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\">\r\n </ipa-textarea-input>\r\n </div>\r\n\r\n <!-- DROP DOWN LIST -->\r\n <div *ngSwitchCase=\"'select'\">\r\n <ipa-dropdown-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\" [items]=\"column.data!\"\r\n [valueField]=\"column.valueField!\" [textField]=\"column.textField!\" [required]=\"column.required\"\r\n [searchable]=\"column.searchable!\" [notFoundText]=\"column.notFoundText!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\" [fromGenerateForm]=\"true\">\r\n </ipa-dropdown-input>\r\n </div>\r\n\r\n <!-- CHECKBOX -->\r\n <div *ngSwitchCase=\"'checkbox'\" [class]=\"column.containerClasses\">\r\n <label>{{isArabicForm? column.arabicLabel : column.englishLabel}}</label>\r\n <ng-container [formArrayName]=\"'items'+ column.formControlName\"\r\n *ngFor=\"let control of getFormControls(column.formControlName).controls; let i = index\">\r\n <div class=\"form-check {{column.inputClasses}}\" [formGroupName]=\"i\">\r\n <input [id]=\"column.formControlName+control.value[column.valueField!]\" class=\"form-check-input\"\r\n type=\"checkbox\" formControlName=\"checkbox\">\r\n <label class=\"form-check-label\"\r\n [for]=\"column.formControlName+control.value[column.valueField!]\">\r\n {{control.value[column.textField!]}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.formControlName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- RADIO -->\r\n <div *ngSwitchCase=\"'radio'\" [class]=\"column.containerClasses\">\r\n <label>{{isArabicForm? column.arabicLabel : column.englishLabel}}</label>\r\n <ng-container *ngFor=\"let item of column.data; let i = index\">\r\n <div class=\"form-check {{column.inputClasses}}\">\r\n <input [id]=\"column.formControlName+item[column.valueField!]\" class=\"form-check-input\"\r\n type=\"radio\" [formControlName]=\"column.formControlName\" [value]=\"item[column.textField!]\">\r\n <label class=\"form-check-label\" [for]=\"column.formControlName+item[column.valueField!]\">\r\n {{item[column.textField!]}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.formControlName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- FILE UPLOAD -->\r\n <div *ngSwitchCase=\"'file'\" [class]=\"column.containerClasses\">\r\n <ipa-file-upload [isArabicForm]=\"isArabicForm\" [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\"\r\n [acceptedFiles]=\"column.acceptedFiles!\" [multiple]=\"column.multipleFile!\"\r\n [maxFileSize]=\"column.size!\" [method]=\"column.apiURlMethod!\" [autoUpload]=\"column.autoUploadFile!\"\r\n [apiUrl]=\"column.apiUrl?? 'apiUrl' \" [authorization]=\"column.authorization!\" ngDefaultControl\r\n [formControlName]=\"column.formControlName\" (successUpload)=\"SuccessUpload($event)\"\r\n (fileAdded)=\"FileAdded($event, column.formControlName)\"\r\n (fileDeleted)=\"FileDeleted($event, column.formControlName)\">\r\n </ipa-file-upload>\r\n </div>\r\n\r\n <!-- recaptcha -->\r\n <div *ngSwitchCase=\"'recaptcha'\" [class]=\"column.containerClasses\">\r\n <ipa-recaptcha [recaptchaSize]=\"recaptchaSize\" [lang]=\"isArabicForm? 'ar':'en'\" [theme]=\"theme\"\r\n [recaptchaType]=\"recaptchaType\" [useGlobalDomain]=\"useGlobalDomain\"\r\n formControlName=\"{{column.formControlName}}\">\r\n </ipa-recaptcha>\r\n </div>\r\n\r\n <!-- DEFAULT -->\r\n <div *ngSwitchDefault>\r\n <ipa-text-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [type]=\"column.type\" [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\"\r\n [required]=\"column.required\"\r\n [patternErrorMsg]=\"isArabicForm? column.patternArErrorMsg! : column.patternEnErrorMsg!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\">\r\n </ipa-text-input>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</form>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i4.TextInputComponent, selector: "ipa-text-input", inputs: ["id", "type", "placeholder", "label", "required", "patternErrorMsg", "onlyNumber", "pattern", "classes", "containerClasses", "isArabicForm"] }, { kind: "component", type: i5.TextareaInputComponent, selector: "ipa-textarea-input", inputs: ["id", "placeholder", "label", "required", "patternErrorMsg", "pattern", "classes", "containerClasses", "isArabicForm"] }, { kind: "component", type: i6.DropdownInputComponent, selector: "ipa-dropdown-input", inputs: ["id", "label", "items", "textField", "valueField", "required", "firstItemLabel", "searchable", "notFoundText", "classes", "containerClasses", "isArabicForm", "fromGenerateForm"] }, { kind: "component", type: i7.FileUploadComponent, selector: "ipa-file-upload", inputs: ["isArabicForm", "label", "required", "acceptedFiles", "multiple", "maxFileSize", "method", "autoUpload", "apiUrl", "authorization"], outputs: ["successUpload", "fileAdded", "fileDeleted"] }, { kind: "component", type: i8.RecaptchaComponent, selector: "ipa-recaptcha", inputs: ["siteKey", "recaptchaSize", "lang", "recaptchaType", "theme", "useGlobalDomain"] }] });
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
126
|
-
type: Component,
|
|
127
|
-
args: [{ selector: 'ipa-generate-form', template: "<form [formGroup]=\"generateForm\">\r\n <ng-container *ngFor=\"let column of form.columns\">\r\n <div [ngSwitch]=\"column.type\">\r\n <!-- TEXTAREA -->\r\n <div *ngSwitchCase=\"'textArea'\">\r\n <ipa-textarea-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\" [required]=\"column.required\"\r\n [patternErrorMsg]=\"isArabicForm? column.patternArErrorMsg! : column.patternEnErrorMsg!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\">\r\n </ipa-textarea-input>\r\n </div>\r\n\r\n <!-- DROP DOWN LIST -->\r\n <div *ngSwitchCase=\"'select'\">\r\n <ipa-dropdown-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\" [items]=\"column.data!\"\r\n [valueField]=\"column.valueField!\" [textField]=\"column.textField!\" [required]=\"column.required\"\r\n [searchable]=\"column.searchable!\" [notFoundText]=\"column.notFoundText!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\" [fromGenerateForm]=\"true\">\r\n </ipa-dropdown-input>\r\n </div>\r\n\r\n <!-- CHECKBOX -->\r\n <div *ngSwitchCase=\"'checkbox'\" [class]=\"column.containerClasses\">\r\n <label>{{isArabicForm? column.arabicLabel : column.englishLabel}}</label>\r\n <ng-container [formArrayName]=\"'items'+ column.formControlName\"\r\n *ngFor=\"let control of getFormControls(column.formControlName).controls; let i = index\">\r\n <div class=\"form-check {{column.inputClasses}}\" [formGroupName]=\"i\">\r\n <input [id]=\"column.formControlName+control.value[column.valueField!]\" class=\"form-check-input\"\r\n type=\"checkbox\" formControlName=\"checkbox\">\r\n <label class=\"form-check-label\"\r\n [for]=\"column.formControlName+control.value[column.valueField!]\">\r\n {{control.value[column.textField!]}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.formControlName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- RADIO -->\r\n <div *ngSwitchCase=\"'radio'\" [class]=\"column.containerClasses\">\r\n <label>{{isArabicForm? column.arabicLabel : column.englishLabel}}</label>\r\n <ng-container *ngFor=\"let item of column.data; let i = index\">\r\n <div class=\"form-check {{column.inputClasses}}\">\r\n <input [id]=\"column.formControlName+item[column.valueField!]\" class=\"form-check-input\"\r\n type=\"radio\" [formControlName]=\"column.formControlName\" [value]=\"item[column.textField!]\">\r\n <label class=\"form-check-label\" [for]=\"column.formControlName+item[column.valueField!]\">\r\n {{item[column.textField!]}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.formControlName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- FILE UPLOAD -->\r\n <div *ngSwitchCase=\"'file'\" [class]=\"column.containerClasses\">\r\n <ipa-file-upload [isArabicForm]=\"isArabicForm\" [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\"\r\n [acceptedFiles]=\"column.acceptedFiles!\" [multiple]=\"column.multipleFile!\"\r\n [maxFileSize]=\"column.size!\" [method]=\"column.apiURlMethod!\" [autoUpload]=\"column.autoUploadFile!\"\r\n [apiUrl]=\"column.apiUrl?? 'apiUrl' \" [authorization]=\"column.authorization!\" ngDefaultControl\r\n [formControlName]=\"column.formControlName\" (successUpload)=\"SuccessUpload($event)\"\r\n (fileAdded)=\"FileAdded($event, column.formControlName)\"\r\n (fileDeleted)=\"FileDeleted($event, column.formControlName)\">\r\n </ipa-file-upload>\r\n </div>\r\n\r\n <!-- recaptcha -->\r\n <div *ngSwitchCase=\"'recaptcha'\" [class]=\"column.containerClasses\">\r\n <ipa-recaptcha [recaptchaSize]=\"recaptchaSize\" [lang]=\"isArabicForm? 'ar':'en'\" [theme]=\"theme\"\r\n [recaptchaType]=\"recaptchaType\" [useGlobalDomain]=\"useGlobalDomain\"\r\n formControlName=\"{{column.formControlName}}\">\r\n </ipa-recaptcha>\r\n </div>\r\n\r\n <!-- DEFAULT -->\r\n <div *ngSwitchDefault>\r\n <ipa-text-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [type]=\"column.type\" [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\"\r\n [required]=\"column.required\"\r\n [patternErrorMsg]=\"isArabicForm? column.patternArErrorMsg! : column.patternEnErrorMsg!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\">\r\n </ipa-text-input>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</form>" }]
|
|
128
|
-
}], ctorParameters: function () { return [{ type: i1.IPAFormService }]; }, propDecorators: { generateForm: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], form: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], isArabicForm: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], siteKey: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], recaptchaSize: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], lang: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], recaptchaType: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], theme: [{
|
|
143
|
-
type: Input
|
|
144
|
-
}], useGlobalDomain: [{
|
|
145
|
-
type: Input
|
|
146
|
-
}], successUpload: [{
|
|
147
|
-
type: Output
|
|
148
|
-
}], fileAdded: [{
|
|
149
|
-
type: Output
|
|
150
|
-
}], fileDeleted: [{
|
|
151
|
-
type: Output
|
|
152
|
-
}] } });
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2dlbmVyYXRlLWZvcm0vZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2dlbmVyYXRlLWZvcm0vZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7QUFROUQsTUFBTSxPQUFPLHFCQUFxQjtJQW9CaEMsWUFBb0IsaUJBQWlDO1FBQWpDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBZ0I7UUFqQjVDLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBSXBCLGtCQUFhLEdBQXlCLFFBQVEsQ0FBQztRQUMvQyxTQUFJLEdBQWdCLElBQUksQ0FBQztRQUN6QixrQkFBYSxHQUFzQixPQUFPLENBQUM7UUFDM0MsVUFBSyxHQUFxQixPQUFPLENBQUM7UUFDbEMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFaEMsc0JBQXNCO1FBQ1osa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUlhLENBQUM7SUFFekQsUUFBUTtRQUNOLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FB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QVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDcEU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxLQUFZO1FBQzVDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxPQUFPLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDOztrSEF0SlUscUJBQXFCO3NHQUFyQixxQkFBcUIsc1lDVmxDLHdqTUE4Rk87MkZEcEZNLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUI7cUdBS3BCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSVBBRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9pcGEtZm9ybS9pcGEtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sdW1uLCBHZW5lcmF0ZUZvcm0gfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVGb3JtLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaXBhLWdlbmVyYXRlLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmF0ZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmF0ZS1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmF0ZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGdlbmVyYXRlRm9ybSE6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybSE6IEdlbmVyYXRlRm9ybTtcclxuICBASW5wdXQoKSBpc0FyYWJpY0Zvcm0gPSB0cnVlO1xyXG5cclxuICAvLyByZWNhcHRjaGEgaW5wdXRzXHJcbiAgQElucHV0KCkgc2l0ZUtleSE6IHN0cmluZztcclxuICBASW5wdXQoKSByZWNhcHRjaGFTaXplOiAnY29tcGFjdCcgfCAnbm9ybWFsJyA9ICdub3JtYWwnO1xyXG4gIEBJbnB1dCgpIGxhbmc6ICdhcicgfCAnZW4nID0gJ2FyJztcclxuICBASW5wdXQoKSByZWNhcHRjaGFUeXBlOiAnaW1hZ2UnIHwgJ2F1ZGlvJyA9ICdpbWFnZSc7XHJcbiAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnO1xyXG4gIEBJbnB1dCgpIHVzZUdsb2JhbERvbWFpbiA9IHRydWU7XHJcblxyXG4gIC8vIGZpbGUgdXBsb2FkIG91dHB1dHNcclxuICBAT3V0cHV0KCkgc3VjY2Vzc1VwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsZUFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlRGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZXJyb3JNc2chOiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBJUEFGb3JtU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZURhdGFWYWx1ZUZvckVuZ0Zvcm0oKTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUNvbnRyb2xzKGZvcm1Db250cm9sTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUZvcm0uZ2V0KCdpdGVtcycgKyBmb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvck1lc3NhZ2UoZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbXHJcbiAgICAgIGZvcm1Db250cm9sTmFtZVxyXG4gICAgXSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICB0aGlzLmVycm9yTXNnID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UoXHJcbiAgICAgIGZvcm1Db250cm9sLFxyXG4gICAgICAnJyxcclxuICAgICAgdGhpcy5pc0FyYWJpY0Zvcm1cclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5lcnJvck1zZztcclxuICB9XHJcblxyXG4gIFN1Y2Nlc3NVcGxvYWQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zdWNjZXNzVXBsb2FkLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgRmlsZUFkZGVkKGZpbGU6IGFueSwgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ2VuZXJhdGVGb3JtLmNvbnRyb2xzW2Zvcm1Db250cm9sTmFtZV0ucGF0Y2hWYWx1ZShmaWxlKTtcclxuICAgIHRoaXMuZmlsZUFkZGVkLmVtaXQoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBGaWxlRGVsZXRlZChldmVudDogYW55LCBmb3JtQ29udHJvbE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbZm9ybUNvbnRyb2xOYW1lXS5wYXRjaFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy5maWxlRGVsZXRlZC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlRGF0YVZhbHVlRm9yRW5nRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybS5jb2x1bW5zID0gdGhpcy5mb3JtLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5jb2x1bW4sXHJcbiAgICAgICAgZGF0YTogY29sdW1uLmRhdGE/Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbi50ZXh0RmllbGQhXTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICAgIFtjb2x1bW4udGV4dEZpZWxkIV06IHRoaXMuaXNBcmFiaWNGb3JtXHJcbiAgICAgICAgICAgICAgPyB2YWx1ZS5zcGxpdCgnLCcpWzBdXHJcbiAgICAgICAgICAgICAgOiB2YWx1ZS5zcGxpdCgnLCcpWzFdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5mb3JtLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgIHRoaXMuYWRkQ2hlY2tib3hDb250cm9sKGNvbHVtbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0uYWRkQ29udHJvbChcclxuICAgICAgICAgIGNvbHVtbi5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gJ2ZpbGUnICYmIGNvbHVtbi5tdWx0aXBsZUZpbGUhID4gMSA/IFtdIDogbnVsbCxcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBWYWxpZGF0b3JzLm51bGxWYWxpZGF0b3IsXHJcbiAgICAgICAgICAgICAgY29sdW1uLnZhbGlkYXRpb25QYXR0ZXJuXHJcbiAgICAgICAgICAgICAgICA/IFZhbGlkYXRvcnMucGF0dGVybihjb2x1bW4udmFsaWRhdGlvblBhdHRlcm4pXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBbJ3NlbGVjdCcsICdyYWRpbycsICdmaWxlJywgJ3JlY2FwdGNoYSddLmluZGV4T2YoY29sdW1uLnR5cGUpIDw9XHJcbiAgICAgICAgICAgICAgLTFcclxuICAgICAgICAgICAgICAgID8gVmFsaWRhdG9ycy5tYXhMZW5ndGgoY29sdW1uLnNpemUhKVxyXG4gICAgICAgICAgICAgICAgOiBWYWxpZGF0b3JzLm51bGxWYWxpZGF0b3IsXHJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09ICdudW1iZXInXHJcbiAgICAgICAgICAgICAgICA/IFZhbGlkYXRvcnMubWluKDEpXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lID09PSAnZW1haWwnXHJcbiAgICAgICAgICAgICAgICA/IElQQUZvcm1TZXJ2aWNlLmVtYWlsXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lID09PSAnbW9iaWxlTm8nXHJcbiAgICAgICAgICAgICAgICA/IElQQUZvcm1TZXJ2aWNlLm1vYmlsZU5vXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lID09PSAndXNlcklkJ1xyXG4gICAgICAgICAgICAgICAgPyBJUEFGb3JtU2VydmljZS5jaGVja0lEXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRDaGVja2JveENvbnRyb2woY29sdW1uOiBDb2x1bW4pIHtcclxuICAgIGxldCBjaGVja2JveEdyb3VwID0gbmV3IFVudHlwZWRGb3JtQXJyYXkoXHJcbiAgICAgIGNvbHVtbi5kYXRhIS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgW2NvbHVtbi52YWx1ZUZpZWxkIV06IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woaXRlbVtjb2x1bW4udmFsdWVGaWVsZCFdKSxcclxuICAgICAgICAgIFtjb2x1bW4udGV4dEZpZWxkIV06IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woaXRlbVtjb2x1bW4udGV4dEZpZWxkIV0pLFxyXG4gICAgICAgICAgY2hlY2tib3g6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmdlbmVyYXRlRm9ybS5hZGRDb250cm9sKFxyXG4gICAgICBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgY29sdW1uLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvclxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUZvcm0uYWRkQ29udHJvbChcclxuICAgICAgJ2l0ZW1zJyArIGNvbHVtbi5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgIGNoZWNrYm94R3JvdXBcclxuICAgICk7XHJcbiAgICBjaGVja2JveEdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnlbXSkgPT4ge1xyXG4gICAgICBsZXQgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0Q2hlY2tib3hTZWxlY3RlZFZhbHVlcyh2YWx1ZSk7XHJcbiAgICAgIGlmIChzZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbY29sdW1uLmZvcm1Db250cm9sTmFtZV0ucGF0Y2hWYWx1ZShcclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMubWFwKCh4KSA9PiB4W2NvbHVtbi50ZXh0RmllbGQhXSlcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGb3JtLmNvbnRyb2xzW2NvbHVtbi5mb3JtQ29udHJvbE5hbWVdLnBhdGNoVmFsdWUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbY29sdW1uLmZvcm1Db250cm9sTmFtZV0ubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2hlY2tib3hTZWxlY3RlZFZhbHVlcyhpdGVtczogYW55W10pOiBhbnlbXSB8IG51bGwge1xyXG4gICAgbGV0IHNlbGVjdGVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tib3gpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSXRlbXMgOiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImdlbmVyYXRlRm9ybVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZvcm0uY29sdW1uc1wiPlxyXG4gICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgICAgICAgICAgIDwhLS0gVEVYVEFSRUEgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0QXJlYSdcIj5cclxuICAgICAgICAgICAgICAgIDxpcGEtdGV4dGFyZWEtaW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lXCIgW2lkXT1cImNvbHVtbi5mb3JtQ29udHJvbE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpc0FyYWJpY0Zvcm0/IGNvbHVtbi5hcmFiaWNMYWJlbCA6IGNvbHVtbi5lbmdsaXNoTGFiZWxcIiBbcmVxdWlyZWRdPVwiY29sdW1uLnJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGF0dGVybkVycm9yTXNnXT1cImlzQXJhYmljRm9ybT8gY29sdW1uLnBhdHRlcm5BckVycm9yTXNnISA6IGNvbHVtbi5wYXR0ZXJuRW5FcnJvck1zZyFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc2VzXT1cImNvbHVtbi5pbnB1dENsYXNzZXMhXCIgW2NvbnRhaW5lckNsYXNzZXNdPVwiY29sdW1uLmNvbnRhaW5lckNsYXNzZXMhXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNBcmFiaWNGb3JtXT1cImlzQXJhYmljRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPC9pcGEtdGV4dGFyZWEtaW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBEUk9QIERPV04gTElTVCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cclxuICAgICAgICAgICAgICAgIDxpcGEtZHJvcGRvd24taW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lXCIgW2lkXT1cImNvbHVtbi5mb3JtQ29udHJvbE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpc0FyYWJpY0Zvcm0/IGNvbHVtbi5hcmFiaWNMYWJlbCA6IGNvbHVtbi5lbmdsaXNoTGFiZWxcIiBbaXRlbXNdPVwiY29sdW1uLmRhdGEhXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJjb2x1bW4udmFsdWVGaWVsZCFcIiBbdGV4dEZpZWxkXT1cImNvbHVtbi50ZXh0RmllbGQhXCIgW3JlcXVpcmVkXT1cImNvbHVtbi5yZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwiY29sdW1uLnNlYXJjaGFibGUhXCIgW25vdEZvdW5kVGV4dF09XCJjb2x1bW4ubm90Rm91bmRUZXh0IVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzZXNdPVwiY29sdW1uLmlucHV0Q2xhc3NlcyFcIiBbY29udGFpbmVyQ2xhc3Nlc109XCJjb2x1bW4uY29udGFpbmVyQ2xhc3NlcyFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc0FyYWJpY0Zvcm1dPVwiaXNBcmFiaWNGb3JtXCIgW2Zyb21HZW5lcmF0ZUZvcm1dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9pcGEtZHJvcGRvd24taW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDSEVDS0JPWCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIFtjbGFzc109XCJjb2x1bW4uY29udGFpbmVyQ2xhc3Nlc1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7aXNBcmFiaWNGb3JtPyBjb2x1bW4uYXJhYmljTGFiZWwgOiBjb2x1bW4uZW5nbGlzaExhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUFycmF5TmFtZV09XCInaXRlbXMnKyBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udHJvbCBvZiBnZXRGb3JtQ29udHJvbHMoY29sdW1uLmZvcm1Db250cm9sTmFtZSkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayB7e2NvbHVtbi5pbnB1dENsYXNzZXN9fVwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lK2NvbnRyb2wudmFsdWVbY29sdW1uLnZhbHVlRmllbGQhXVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiY29sdW1uLmZvcm1Db250cm9sTmFtZStjb250cm9sLnZhbHVlW2NvbHVtbi52YWx1ZUZpZWxkIV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29udHJvbC52YWx1ZVtjb2x1bW4udGV4dEZpZWxkIV19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiIHN0eWxlPVwiZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RXJyb3JNZXNzYWdlKGNvbHVtbi5mb3JtQ29udHJvbE5hbWUpICE9PSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tlcnJvck1zZ319XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFJBRElPIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCIgW2NsYXNzXT1cImNvbHVtbi5jb250YWluZXJDbGFzc2VzXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3tpc0FyYWJpY0Zvcm0/IGNvbHVtbi5hcmFiaWNMYWJlbCA6IGNvbHVtbi5lbmdsaXNoTGFiZWx9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbHVtbi5kYXRhOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sge3tjb2x1bW4uaW5wdXRDbGFzc2VzfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lK2l0ZW1bY29sdW1uLnZhbHVlRmllbGQhXVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5mb3JtQ29udHJvbE5hbWVcIiBbdmFsdWVdPVwiaXRlbVtjb2x1bW4udGV4dEZpZWxkIV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiY29sdW1uLmZvcm1Db250cm9sTmFtZStpdGVtW2NvbHVtbi52YWx1ZUZpZWxkIV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbVtjb2x1bW4udGV4dEZpZWxkIV19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiIHN0eWxlPVwiZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RXJyb3JNZXNzYWdlKGNvbHVtbi5mb3JtQ29udHJvbE5hbWUpICE9PSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tlcnJvck1zZ319XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEZJTEUgVVBMT0FEIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIiBbY2xhc3NdPVwiY29sdW1uLmNvbnRhaW5lckNsYXNzZXNcIj5cclxuICAgICAgICAgICAgICAgIDxpcGEtZmlsZS11cGxvYWQgW2lzQXJhYmljRm9ybV09XCJpc0FyYWJpY0Zvcm1cIiBbbGFiZWxdPVwiaXNBcmFiaWNGb3JtPyBjb2x1bW4uYXJhYmljTGFiZWwgOiBjb2x1bW4uZW5nbGlzaExhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICBbYWNjZXB0ZWRGaWxlc109XCJjb2x1bW4uYWNjZXB0ZWRGaWxlcyFcIiBbbXVsdGlwbGVdPVwiY29sdW1uLm11bHRpcGxlRmlsZSFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXhGaWxlU2l6ZV09XCJjb2x1bW4uc2l6ZSFcIiBbbWV0aG9kXT1cImNvbHVtbi5hcGlVUmxNZXRob2QhXCIgW2F1dG9VcGxvYWRdPVwiY29sdW1uLmF1dG9VcGxvYWRGaWxlIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FwaVVybF09XCJjb2x1bW4uYXBpVXJsPz8gJ2FwaVVybCcgXCIgW2F1dGhvcml6YXRpb25dPVwiY29sdW1uLmF1dGhvcml6YXRpb24hXCIgbmdEZWZhdWx0Q29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLmZvcm1Db250cm9sTmFtZVwiIChzdWNjZXNzVXBsb2FkKT1cIlN1Y2Nlc3NVcGxvYWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpbGVBZGRlZCk9XCJGaWxlQWRkZWQoJGV2ZW50LCBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpbGVEZWxldGVkKT1cIkZpbGVEZWxldGVkKCRldmVudCwgY29sdW1uLmZvcm1Db250cm9sTmFtZSlcIj5cclxuICAgICAgICAgICAgICAgIDwvaXBhLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gcmVjYXB0Y2hhIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIncmVjYXB0Y2hhJ1wiIFtjbGFzc109XCJjb2x1bW4uY29udGFpbmVyQ2xhc3Nlc1wiPlxyXG4gICAgICAgICAgICAgICAgPGlwYS1yZWNhcHRjaGEgW3JlY2FwdGNoYVNpemVdPVwicmVjYXB0Y2hhU2l6ZVwiIFtsYW5nXT1cImlzQXJhYmljRm9ybT8gJ2FyJzonZW4nXCIgW3RoZW1lXT1cInRoZW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVjYXB0Y2hhVHlwZV09XCJyZWNhcHRjaGFUeXBlXCIgW3VzZUdsb2JhbERvbWFpbl09XCJ1c2VHbG9iYWxEb21haW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7Y29sdW1uLmZvcm1Db250cm9sTmFtZX19XCI+XHJcbiAgICAgICAgICAgICAgICA8L2lwYS1yZWNhcHRjaGE+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBERUZBVUxUIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8aXBhLXRleHQtaW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lXCIgW2lkXT1cImNvbHVtbi5mb3JtQ29udHJvbE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImNvbHVtbi50eXBlXCIgW2xhYmVsXT1cImlzQXJhYmljRm9ybT8gY29sdW1uLmFyYWJpY0xhYmVsIDogY29sdW1uLmVuZ2xpc2hMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImNvbHVtbi5yZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhdHRlcm5FcnJvck1zZ109XCJpc0FyYWJpY0Zvcm0/IGNvbHVtbi5wYXR0ZXJuQXJFcnJvck1zZyEgOiBjb2x1bW4ucGF0dGVybkVuRXJyb3JNc2chXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Nlc109XCJjb2x1bW4uaW5wdXRDbGFzc2VzIVwiIFtjb250YWluZXJDbGFzc2VzXT1cImNvbHVtbi5jb250YWluZXJDbGFzc2VzIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzQXJhYmljRm9ybV09XCJpc0FyYWJpY0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgIDwvaXBhLXRleHQtaW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZm9ybT4iXX0=
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { UntypedFormArray, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
|
|
3
|
+
import { IPAFormService } from '../ipa-form/ipa-form.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../ipa-form/ipa-form.service";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "@angular/forms";
|
|
8
|
+
import * as i4 from "../ipa-form/text-input/text-input.component";
|
|
9
|
+
import * as i5 from "../ipa-form/textarea-input/textarea-input.component";
|
|
10
|
+
import * as i6 from "../ipa-form/dropdown-input/dropdown-input.component";
|
|
11
|
+
import * as i7 from "../ipa-form/file-upload/file-upload.component";
|
|
12
|
+
import * as i8 from "../ipa-form/recaptcha/recaptcha.component";
|
|
13
|
+
export class GenerateFormComponent {
|
|
14
|
+
constructor(validationService) {
|
|
15
|
+
this.validationService = validationService;
|
|
16
|
+
this.isArabicForm = true;
|
|
17
|
+
this.recaptchaSize = 'normal';
|
|
18
|
+
this.lang = 'ar';
|
|
19
|
+
this.recaptchaType = 'image';
|
|
20
|
+
this.theme = 'light';
|
|
21
|
+
this.useGlobalDomain = true;
|
|
22
|
+
// file upload outputs
|
|
23
|
+
this.successUpload = new EventEmitter();
|
|
24
|
+
this.fileAdded = new EventEmitter();
|
|
25
|
+
this.fileDeleted = new EventEmitter();
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
this.changeDataValueForEngForm();
|
|
29
|
+
this.createForm();
|
|
30
|
+
}
|
|
31
|
+
getFormControls(formControlName) {
|
|
32
|
+
return this.generateForm.get('items' + formControlName);
|
|
33
|
+
}
|
|
34
|
+
getErrorMessage(formControlName) {
|
|
35
|
+
const formControl = this.generateForm.controls[formControlName];
|
|
36
|
+
this.errorMsg = this.validationService.getErrorMessage(formControl, '', this.isArabicForm);
|
|
37
|
+
return this.errorMsg;
|
|
38
|
+
}
|
|
39
|
+
SuccessUpload(event) {
|
|
40
|
+
this.successUpload.emit(event);
|
|
41
|
+
}
|
|
42
|
+
FileAdded(file, formControlName) {
|
|
43
|
+
this.generateForm.controls[formControlName].patchValue(file);
|
|
44
|
+
this.fileAdded.emit(file);
|
|
45
|
+
}
|
|
46
|
+
FileDeleted(event, formControlName) {
|
|
47
|
+
this.generateForm.controls[formControlName].patchValue(null);
|
|
48
|
+
this.fileDeleted.emit(event);
|
|
49
|
+
}
|
|
50
|
+
changeDataValueForEngForm() {
|
|
51
|
+
this.form.columns = this.form.columns.map((column) => {
|
|
52
|
+
return {
|
|
53
|
+
...column,
|
|
54
|
+
data: column.data?.map((item) => {
|
|
55
|
+
const value = item[column.textField];
|
|
56
|
+
return {
|
|
57
|
+
...item,
|
|
58
|
+
[column.textField]: this.isArabicForm
|
|
59
|
+
? value.split(',')[0]
|
|
60
|
+
: value.split(',')[1],
|
|
61
|
+
};
|
|
62
|
+
}),
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
createForm() {
|
|
67
|
+
this.form.columns.forEach((column) => {
|
|
68
|
+
if (column.type === 'checkbox') {
|
|
69
|
+
this.addCheckboxControl(column);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.generateForm.addControl(column.formControlName, new UntypedFormControl(column.type === 'file' && column.multipleFile > 1 ? [] : null, [
|
|
73
|
+
column.required ? Validators.required : Validators.nullValidator,
|
|
74
|
+
column.validationPattern
|
|
75
|
+
? Validators.pattern(column.validationPattern)
|
|
76
|
+
: Validators.nullValidator,
|
|
77
|
+
['select', 'radio', 'file', 'recaptcha'].indexOf(column.type) <=
|
|
78
|
+
-1
|
|
79
|
+
? Validators.maxLength(column.size)
|
|
80
|
+
: Validators.nullValidator,
|
|
81
|
+
column.type === 'number'
|
|
82
|
+
? Validators.min(1)
|
|
83
|
+
: Validators.nullValidator,
|
|
84
|
+
column.formControlName === 'email'
|
|
85
|
+
? IPAFormService.email
|
|
86
|
+
: Validators.nullValidator,
|
|
87
|
+
column.formControlName === 'mobileNo'
|
|
88
|
+
? IPAFormService.mobileNo
|
|
89
|
+
: Validators.nullValidator,
|
|
90
|
+
column.formControlName === 'userId'
|
|
91
|
+
? IPAFormService.checkID
|
|
92
|
+
: Validators.nullValidator,
|
|
93
|
+
]));
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
addCheckboxControl(column) {
|
|
98
|
+
let checkboxGroup = new UntypedFormArray(column.data.map((item) => {
|
|
99
|
+
return new UntypedFormGroup({
|
|
100
|
+
[column.valueField]: new UntypedFormControl(item[column.valueField]),
|
|
101
|
+
[column.textField]: new UntypedFormControl(item[column.textField]),
|
|
102
|
+
checkbox: new UntypedFormControl(false),
|
|
103
|
+
});
|
|
104
|
+
}));
|
|
105
|
+
this.generateForm.addControl(column.formControlName, new UntypedFormControl(null, column.required ? Validators.required : Validators.nullValidator));
|
|
106
|
+
this.generateForm.addControl('items' + column.formControlName, checkboxGroup);
|
|
107
|
+
checkboxGroup.valueChanges.subscribe((value) => {
|
|
108
|
+
let selectedItems = this.getCheckboxSelectedValues(value);
|
|
109
|
+
if (selectedItems) {
|
|
110
|
+
this.generateForm.controls[column.formControlName].patchValue(selectedItems.map((x) => x[column.textField]));
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.generateForm.controls[column.formControlName].patchValue(null);
|
|
114
|
+
this.generateForm.controls[column.formControlName].markAsTouched();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
getCheckboxSelectedValues(items) {
|
|
119
|
+
let selectedItems = items.filter((item) => item.checkbox);
|
|
120
|
+
return selectedItems.length > 0 ? selectedItems : null;
|
|
121
|
+
}
|
|
122
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: GenerateFormComponent, deps: [{ token: i1.IPAFormService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
123
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: GenerateFormComponent, selector: "ipa-generate-form", inputs: { generateForm: "generateForm", form: "form", isArabicForm: "isArabicForm", siteKey: "siteKey", recaptchaSize: "recaptchaSize", lang: "lang", recaptchaType: "recaptchaType", theme: "theme", useGlobalDomain: "useGlobalDomain" }, outputs: { successUpload: "successUpload", fileAdded: "fileAdded", fileDeleted: "fileDeleted" }, ngImport: i0, template: "<form [formGroup]=\"generateForm\">\r\n <ng-container *ngFor=\"let column of form.columns\">\r\n <div [ngSwitch]=\"column.type\">\r\n <!-- TEXTAREA -->\r\n <div *ngSwitchCase=\"'textArea'\">\r\n <ipa-textarea-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\" [required]=\"column.required\"\r\n [patternErrorMsg]=\"isArabicForm? column.patternArErrorMsg! : column.patternEnErrorMsg!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\">\r\n </ipa-textarea-input>\r\n </div>\r\n\r\n <!-- DROP DOWN LIST -->\r\n <div *ngSwitchCase=\"'select'\">\r\n <ipa-dropdown-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\" [items]=\"column.data!\"\r\n [valueField]=\"column.valueField!\" [textField]=\"column.textField!\" [required]=\"column.required\"\r\n [searchable]=\"column.searchable!\" [notFoundText]=\"column.notFoundText!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\" [fromGenerateForm]=\"true\">\r\n </ipa-dropdown-input>\r\n </div>\r\n\r\n <!-- CHECKBOX -->\r\n <div *ngSwitchCase=\"'checkbox'\" [class]=\"column.containerClasses\">\r\n <label>{{isArabicForm? column.arabicLabel : column.englishLabel}}</label>\r\n <ng-container [formArrayName]=\"'items'+ column.formControlName\"\r\n *ngFor=\"let control of getFormControls(column.formControlName).controls; let i = index\">\r\n <div class=\"form-check {{column.inputClasses}}\" [formGroupName]=\"i\">\r\n <input [id]=\"column.formControlName+control.value[column.valueField!]\" class=\"form-check-input\"\r\n type=\"checkbox\" formControlName=\"checkbox\">\r\n <label class=\"form-check-label\"\r\n [for]=\"column.formControlName+control.value[column.valueField!]\">\r\n {{control.value[column.textField!]}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.formControlName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- RADIO -->\r\n <div *ngSwitchCase=\"'radio'\" [class]=\"column.containerClasses\">\r\n <label>{{isArabicForm? column.arabicLabel : column.englishLabel}}</label>\r\n <ng-container *ngFor=\"let item of column.data; let i = index\">\r\n <div class=\"form-check {{column.inputClasses}}\">\r\n <input [id]=\"column.formControlName+item[column.valueField!]\" class=\"form-check-input\"\r\n type=\"radio\" [formControlName]=\"column.formControlName\" [value]=\"item[column.textField!]\">\r\n <label class=\"form-check-label\" [for]=\"column.formControlName+item[column.valueField!]\">\r\n {{item[column.textField!]}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.formControlName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- FILE UPLOAD -->\r\n <div *ngSwitchCase=\"'file'\" [class]=\"column.containerClasses\">\r\n <ipa-file-upload [isArabicForm]=\"isArabicForm\" [required]=\"column.required\" [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\"\r\n [acceptedFiles]=\"column.acceptedFiles!\" [multiple]=\"column.multipleFile!\"\r\n [maxFileSize]=\"column.size!\" [method]=\"column.apiURlMethod!\" [autoUpload]=\"column.autoUploadFile!\"\r\n [apiUrl]=\"column.apiUrl?? 'apiUrl' \" [authorization]=\"column.authorization!\" ngDefaultControl\r\n [formControlName]=\"column.formControlName\" (successUpload)=\"SuccessUpload($event)\"\r\n (fileAdded)=\"FileAdded($event, column.formControlName)\"\r\n (fileDeleted)=\"FileDeleted($event, column.formControlName)\">\r\n </ipa-file-upload>\r\n </div>\r\n\r\n <!-- recaptcha -->\r\n <div *ngSwitchCase=\"'recaptcha'\" [class]=\"column.containerClasses\">\r\n <ipa-recaptcha [recaptchaSize]=\"recaptchaSize\" [lang]=\"isArabicForm? 'ar':'en'\" [theme]=\"theme\"\r\n [recaptchaType]=\"recaptchaType\" [useGlobalDomain]=\"useGlobalDomain\"\r\n formControlName=\"{{column.formControlName}}\">\r\n </ipa-recaptcha>\r\n </div>\r\n\r\n <!-- DEFAULT -->\r\n <div *ngSwitchDefault>\r\n <ipa-text-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [type]=\"column.type\" [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\"\r\n [required]=\"column.required\"\r\n [patternErrorMsg]=\"isArabicForm? column.patternArErrorMsg! : column.patternEnErrorMsg!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\">\r\n </ipa-text-input>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</form>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i4.TextInputComponent, selector: "ipa-text-input", inputs: ["id", "type", "placeholder", "label", "required", "patternErrorMsg", "onlyNumber", "pattern", "classes", "containerClasses", "isArabicForm"] }, { kind: "component", type: i5.TextareaInputComponent, selector: "ipa-textarea-input", inputs: ["id", "placeholder", "label", "required", "patternErrorMsg", "pattern", "classes", "containerClasses", "isArabicForm"] }, { kind: "component", type: i6.DropdownInputComponent, selector: "ipa-dropdown-input", inputs: ["id", "label", "items", "textField", "valueField", "required", "firstItemLabel", "searchable", "notFoundText", "classes", "containerClasses", "isArabicForm", "fromGenerateForm"] }, { kind: "component", type: i7.FileUploadComponent, selector: "ipa-file-upload", inputs: ["isArabicForm", "label", "required", "acceptedFiles", "multiple", "maxFileSize", "method", "autoUpload", "apiUrl", "authorization"], outputs: ["successUpload", "fileAdded", "fileDeleted"] }, { kind: "component", type: i8.RecaptchaComponent, selector: "ipa-recaptcha", inputs: ["siteKey", "recaptchaSize", "lang", "recaptchaType", "theme", "useGlobalDomain"] }] }); }
|
|
124
|
+
}
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: GenerateFormComponent, decorators: [{
|
|
126
|
+
type: Component,
|
|
127
|
+
args: [{ selector: 'ipa-generate-form', template: "<form [formGroup]=\"generateForm\">\r\n <ng-container *ngFor=\"let column of form.columns\">\r\n <div [ngSwitch]=\"column.type\">\r\n <!-- TEXTAREA -->\r\n <div *ngSwitchCase=\"'textArea'\">\r\n <ipa-textarea-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\" [required]=\"column.required\"\r\n [patternErrorMsg]=\"isArabicForm? column.patternArErrorMsg! : column.patternEnErrorMsg!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\">\r\n </ipa-textarea-input>\r\n </div>\r\n\r\n <!-- DROP DOWN LIST -->\r\n <div *ngSwitchCase=\"'select'\">\r\n <ipa-dropdown-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\" [items]=\"column.data!\"\r\n [valueField]=\"column.valueField!\" [textField]=\"column.textField!\" [required]=\"column.required\"\r\n [searchable]=\"column.searchable!\" [notFoundText]=\"column.notFoundText!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\" [fromGenerateForm]=\"true\">\r\n </ipa-dropdown-input>\r\n </div>\r\n\r\n <!-- CHECKBOX -->\r\n <div *ngSwitchCase=\"'checkbox'\" [class]=\"column.containerClasses\">\r\n <label>{{isArabicForm? column.arabicLabel : column.englishLabel}}</label>\r\n <ng-container [formArrayName]=\"'items'+ column.formControlName\"\r\n *ngFor=\"let control of getFormControls(column.formControlName).controls; let i = index\">\r\n <div class=\"form-check {{column.inputClasses}}\" [formGroupName]=\"i\">\r\n <input [id]=\"column.formControlName+control.value[column.valueField!]\" class=\"form-check-input\"\r\n type=\"checkbox\" formControlName=\"checkbox\">\r\n <label class=\"form-check-label\"\r\n [for]=\"column.formControlName+control.value[column.valueField!]\">\r\n {{control.value[column.textField!]}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.formControlName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- RADIO -->\r\n <div *ngSwitchCase=\"'radio'\" [class]=\"column.containerClasses\">\r\n <label>{{isArabicForm? column.arabicLabel : column.englishLabel}}</label>\r\n <ng-container *ngFor=\"let item of column.data; let i = index\">\r\n <div class=\"form-check {{column.inputClasses}}\">\r\n <input [id]=\"column.formControlName+item[column.valueField!]\" class=\"form-check-input\"\r\n type=\"radio\" [formControlName]=\"column.formControlName\" [value]=\"item[column.textField!]\">\r\n <label class=\"form-check-label\" [for]=\"column.formControlName+item[column.valueField!]\">\r\n {{item[column.textField!]}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n <div class=\"invalid-feedback\" style=\"display: block !important;\"\r\n *ngIf=\"getErrorMessage(column.formControlName) !== null\">\r\n {{errorMsg}}\r\n </div>\r\n </div>\r\n\r\n <!-- FILE UPLOAD -->\r\n <div *ngSwitchCase=\"'file'\" [class]=\"column.containerClasses\">\r\n <ipa-file-upload [isArabicForm]=\"isArabicForm\" [required]=\"column.required\" [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\"\r\n [acceptedFiles]=\"column.acceptedFiles!\" [multiple]=\"column.multipleFile!\"\r\n [maxFileSize]=\"column.size!\" [method]=\"column.apiURlMethod!\" [autoUpload]=\"column.autoUploadFile!\"\r\n [apiUrl]=\"column.apiUrl?? 'apiUrl' \" [authorization]=\"column.authorization!\" ngDefaultControl\r\n [formControlName]=\"column.formControlName\" (successUpload)=\"SuccessUpload($event)\"\r\n (fileAdded)=\"FileAdded($event, column.formControlName)\"\r\n (fileDeleted)=\"FileDeleted($event, column.formControlName)\">\r\n </ipa-file-upload>\r\n </div>\r\n\r\n <!-- recaptcha -->\r\n <div *ngSwitchCase=\"'recaptcha'\" [class]=\"column.containerClasses\">\r\n <ipa-recaptcha [recaptchaSize]=\"recaptchaSize\" [lang]=\"isArabicForm? 'ar':'en'\" [theme]=\"theme\"\r\n [recaptchaType]=\"recaptchaType\" [useGlobalDomain]=\"useGlobalDomain\"\r\n formControlName=\"{{column.formControlName}}\">\r\n </ipa-recaptcha>\r\n </div>\r\n\r\n <!-- DEFAULT -->\r\n <div *ngSwitchDefault>\r\n <ipa-text-input [formControlName]=\"column.formControlName\" [id]=\"column.formControlName\"\r\n [type]=\"column.type\" [label]=\"isArabicForm? column.arabicLabel : column.englishLabel\"\r\n [required]=\"column.required\"\r\n [patternErrorMsg]=\"isArabicForm? column.patternArErrorMsg! : column.patternEnErrorMsg!\"\r\n [classes]=\"column.inputClasses!\" [containerClasses]=\"column.containerClasses!\"\r\n [isArabicForm]=\"isArabicForm\">\r\n </ipa-text-input>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</form>" }]
|
|
128
|
+
}], ctorParameters: function () { return [{ type: i1.IPAFormService }]; }, propDecorators: { generateForm: [{
|
|
129
|
+
type: Input
|
|
130
|
+
}], form: [{
|
|
131
|
+
type: Input
|
|
132
|
+
}], isArabicForm: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], siteKey: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], recaptchaSize: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], lang: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], recaptchaType: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], theme: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], useGlobalDomain: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], successUpload: [{
|
|
147
|
+
type: Output
|
|
148
|
+
}], fileAdded: [{
|
|
149
|
+
type: Output
|
|
150
|
+
}], fileDeleted: [{
|
|
151
|
+
type: Output
|
|
152
|
+
}] } });
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2dlbmVyYXRlLWZvcm0vZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL2dlbmVyYXRlLWZvcm0vZ2VuZXJhdGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7QUFROUQsTUFBTSxPQUFPLHFCQUFxQjtJQW9CaEMsWUFBb0IsaUJBQWlDO1FBQWpDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBZ0I7UUFqQjVDLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBSXBCLGtCQUFhLEdBQXlCLFFBQVEsQ0FBQztRQUMvQyxTQUFJLEdBQWdCLElBQUksQ0FBQztRQUN6QixrQkFBYSxHQUFzQixPQUFPLENBQUM7UUFDM0MsVUFBSyxHQUFxQixPQUFPLENBQUM7UUFDbEMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFaEMsc0JBQXNCO1FBQ1osa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUlhLENBQUM7SUFFekQsUUFBUTtRQUNOLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FB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QVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDcEU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxLQUFZO1FBQzVDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxPQUFPLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDOzhHQXRKVSxxQkFBcUI7a0dBQXJCLHFCQUFxQixzWUNWbEMsdWxNQThGTzs7MkZEcEZNLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUI7cUdBS3BCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSVBBRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9pcGEtZm9ybS9pcGEtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sdW1uLCBHZW5lcmF0ZUZvcm0gfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVGb3JtLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaXBhLWdlbmVyYXRlLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmF0ZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmF0ZS1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmF0ZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGdlbmVyYXRlRm9ybSE6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybSE6IEdlbmVyYXRlRm9ybTtcclxuICBASW5wdXQoKSBpc0FyYWJpY0Zvcm0gPSB0cnVlO1xyXG5cclxuICAvLyByZWNhcHRjaGEgaW5wdXRzXHJcbiAgQElucHV0KCkgc2l0ZUtleSE6IHN0cmluZztcclxuICBASW5wdXQoKSByZWNhcHRjaGFTaXplOiAnY29tcGFjdCcgfCAnbm9ybWFsJyA9ICdub3JtYWwnO1xyXG4gIEBJbnB1dCgpIGxhbmc6ICdhcicgfCAnZW4nID0gJ2FyJztcclxuICBASW5wdXQoKSByZWNhcHRjaGFUeXBlOiAnaW1hZ2UnIHwgJ2F1ZGlvJyA9ICdpbWFnZSc7XHJcbiAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnO1xyXG4gIEBJbnB1dCgpIHVzZUdsb2JhbERvbWFpbiA9IHRydWU7XHJcblxyXG4gIC8vIGZpbGUgdXBsb2FkIG91dHB1dHNcclxuICBAT3V0cHV0KCkgc3VjY2Vzc1VwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsZUFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlRGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZXJyb3JNc2chOiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBJUEFGb3JtU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZURhdGFWYWx1ZUZvckVuZ0Zvcm0oKTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUNvbnRyb2xzKGZvcm1Db250cm9sTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUZvcm0uZ2V0KCdpdGVtcycgKyBmb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvck1lc3NhZ2UoZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbXHJcbiAgICAgIGZvcm1Db250cm9sTmFtZVxyXG4gICAgXSBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICB0aGlzLmVycm9yTXNnID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UoXHJcbiAgICAgIGZvcm1Db250cm9sLFxyXG4gICAgICAnJyxcclxuICAgICAgdGhpcy5pc0FyYWJpY0Zvcm1cclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5lcnJvck1zZztcclxuICB9XHJcblxyXG4gIFN1Y2Nlc3NVcGxvYWQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zdWNjZXNzVXBsb2FkLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgRmlsZUFkZGVkKGZpbGU6IGFueSwgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ2VuZXJhdGVGb3JtLmNvbnRyb2xzW2Zvcm1Db250cm9sTmFtZV0ucGF0Y2hWYWx1ZShmaWxlKTtcclxuICAgIHRoaXMuZmlsZUFkZGVkLmVtaXQoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBGaWxlRGVsZXRlZChldmVudDogYW55LCBmb3JtQ29udHJvbE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbZm9ybUNvbnRyb2xOYW1lXS5wYXRjaFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy5maWxlRGVsZXRlZC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlRGF0YVZhbHVlRm9yRW5nRm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybS5jb2x1bW5zID0gdGhpcy5mb3JtLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5jb2x1bW4sXHJcbiAgICAgICAgZGF0YTogY29sdW1uLmRhdGE/Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbi50ZXh0RmllbGQhXTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICAgIFtjb2x1bW4udGV4dEZpZWxkIV06IHRoaXMuaXNBcmFiaWNGb3JtXHJcbiAgICAgICAgICAgICAgPyB2YWx1ZS5zcGxpdCgnLCcpWzBdXHJcbiAgICAgICAgICAgICAgOiB2YWx1ZS5zcGxpdCgnLCcpWzFdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5mb3JtLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgIHRoaXMuYWRkQ2hlY2tib3hDb250cm9sKGNvbHVtbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0uYWRkQ29udHJvbChcclxuICAgICAgICAgIGNvbHVtbi5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gJ2ZpbGUnICYmIGNvbHVtbi5tdWx0aXBsZUZpbGUhID4gMSA/IFtdIDogbnVsbCxcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBWYWxpZGF0b3JzLm51bGxWYWxpZGF0b3IsXHJcbiAgICAgICAgICAgICAgY29sdW1uLnZhbGlkYXRpb25QYXR0ZXJuXHJcbiAgICAgICAgICAgICAgICA/IFZhbGlkYXRvcnMucGF0dGVybihjb2x1bW4udmFsaWRhdGlvblBhdHRlcm4pXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBbJ3NlbGVjdCcsICdyYWRpbycsICdmaWxlJywgJ3JlY2FwdGNoYSddLmluZGV4T2YoY29sdW1uLnR5cGUpIDw9XHJcbiAgICAgICAgICAgICAgLTFcclxuICAgICAgICAgICAgICAgID8gVmFsaWRhdG9ycy5tYXhMZW5ndGgoY29sdW1uLnNpemUhKVxyXG4gICAgICAgICAgICAgICAgOiBWYWxpZGF0b3JzLm51bGxWYWxpZGF0b3IsXHJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09ICdudW1iZXInXHJcbiAgICAgICAgICAgICAgICA/IFZhbGlkYXRvcnMubWluKDEpXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lID09PSAnZW1haWwnXHJcbiAgICAgICAgICAgICAgICA/IElQQUZvcm1TZXJ2aWNlLmVtYWlsXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lID09PSAnbW9iaWxlTm8nXHJcbiAgICAgICAgICAgICAgICA/IElQQUZvcm1TZXJ2aWNlLm1vYmlsZU5vXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lID09PSAndXNlcklkJ1xyXG4gICAgICAgICAgICAgICAgPyBJUEFGb3JtU2VydmljZS5jaGVja0lEXHJcbiAgICAgICAgICAgICAgICA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRDaGVja2JveENvbnRyb2woY29sdW1uOiBDb2x1bW4pIHtcclxuICAgIGxldCBjaGVja2JveEdyb3VwID0gbmV3IFVudHlwZWRGb3JtQXJyYXkoXHJcbiAgICAgIGNvbHVtbi5kYXRhIS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgW2NvbHVtbi52YWx1ZUZpZWxkIV06IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woaXRlbVtjb2x1bW4udmFsdWVGaWVsZCFdKSxcclxuICAgICAgICAgIFtjb2x1bW4udGV4dEZpZWxkIV06IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woaXRlbVtjb2x1bW4udGV4dEZpZWxkIV0pLFxyXG4gICAgICAgICAgY2hlY2tib3g6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmdlbmVyYXRlRm9ybS5hZGRDb250cm9sKFxyXG4gICAgICBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgY29sdW1uLnJlcXVpcmVkID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvclxyXG4gICAgICApXHJcbiAgICApO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUZvcm0uYWRkQ29udHJvbChcclxuICAgICAgJ2l0ZW1zJyArIGNvbHVtbi5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgIGNoZWNrYm94R3JvdXBcclxuICAgICk7XHJcbiAgICBjaGVja2JveEdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnlbXSkgPT4ge1xyXG4gICAgICBsZXQgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0Q2hlY2tib3hTZWxlY3RlZFZhbHVlcyh2YWx1ZSk7XHJcbiAgICAgIGlmIChzZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbY29sdW1uLmZvcm1Db250cm9sTmFtZV0ucGF0Y2hWYWx1ZShcclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMubWFwKCh4KSA9PiB4W2NvbHVtbi50ZXh0RmllbGQhXSlcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGb3JtLmNvbnRyb2xzW2NvbHVtbi5mb3JtQ29udHJvbE5hbWVdLnBhdGNoVmFsdWUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0uY29udHJvbHNbY29sdW1uLmZvcm1Db250cm9sTmFtZV0ubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2hlY2tib3hTZWxlY3RlZFZhbHVlcyhpdGVtczogYW55W10pOiBhbnlbXSB8IG51bGwge1xyXG4gICAgbGV0IHNlbGVjdGVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tib3gpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSXRlbXMgOiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImdlbmVyYXRlRm9ybVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZvcm0uY29sdW1uc1wiPlxyXG4gICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgICAgICAgICAgIDwhLS0gVEVYVEFSRUEgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0QXJlYSdcIj5cclxuICAgICAgICAgICAgICAgIDxpcGEtdGV4dGFyZWEtaW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lXCIgW2lkXT1cImNvbHVtbi5mb3JtQ29udHJvbE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpc0FyYWJpY0Zvcm0/IGNvbHVtbi5hcmFiaWNMYWJlbCA6IGNvbHVtbi5lbmdsaXNoTGFiZWxcIiBbcmVxdWlyZWRdPVwiY29sdW1uLnJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGF0dGVybkVycm9yTXNnXT1cImlzQXJhYmljRm9ybT8gY29sdW1uLnBhdHRlcm5BckVycm9yTXNnISA6IGNvbHVtbi5wYXR0ZXJuRW5FcnJvck1zZyFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc2VzXT1cImNvbHVtbi5pbnB1dENsYXNzZXMhXCIgW2NvbnRhaW5lckNsYXNzZXNdPVwiY29sdW1uLmNvbnRhaW5lckNsYXNzZXMhXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNBcmFiaWNGb3JtXT1cImlzQXJhYmljRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPC9pcGEtdGV4dGFyZWEtaW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBEUk9QIERPV04gTElTVCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cclxuICAgICAgICAgICAgICAgIDxpcGEtZHJvcGRvd24taW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lXCIgW2lkXT1cImNvbHVtbi5mb3JtQ29udHJvbE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJpc0FyYWJpY0Zvcm0/IGNvbHVtbi5hcmFiaWNMYWJlbCA6IGNvbHVtbi5lbmdsaXNoTGFiZWxcIiBbaXRlbXNdPVwiY29sdW1uLmRhdGEhXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJjb2x1bW4udmFsdWVGaWVsZCFcIiBbdGV4dEZpZWxkXT1cImNvbHVtbi50ZXh0RmllbGQhXCIgW3JlcXVpcmVkXT1cImNvbHVtbi5yZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwiY29sdW1uLnNlYXJjaGFibGUhXCIgW25vdEZvdW5kVGV4dF09XCJjb2x1bW4ubm90Rm91bmRUZXh0IVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzZXNdPVwiY29sdW1uLmlucHV0Q2xhc3NlcyFcIiBbY29udGFpbmVyQ2xhc3Nlc109XCJjb2x1bW4uY29udGFpbmVyQ2xhc3NlcyFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc0FyYWJpY0Zvcm1dPVwiaXNBcmFiaWNGb3JtXCIgW2Zyb21HZW5lcmF0ZUZvcm1dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9pcGEtZHJvcGRvd24taW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDSEVDS0JPWCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIFtjbGFzc109XCJjb2x1bW4uY29udGFpbmVyQ2xhc3Nlc1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7aXNBcmFiaWNGb3JtPyBjb2x1bW4uYXJhYmljTGFiZWwgOiBjb2x1bW4uZW5nbGlzaExhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUFycmF5TmFtZV09XCInaXRlbXMnKyBjb2x1bW4uZm9ybUNvbnRyb2xOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udHJvbCBvZiBnZXRGb3JtQ29udHJvbHMoY29sdW1uLmZvcm1Db250cm9sTmFtZSkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayB7e2NvbHVtbi5pbnB1dENsYXNzZXN9fVwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lK2NvbnRyb2wudmFsdWVbY29sdW1uLnZhbHVlRmllbGQhXVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiY29sdW1uLmZvcm1Db250cm9sTmFtZStjb250cm9sLnZhbHVlW2NvbHVtbi52YWx1ZUZpZWxkIV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29udHJvbC52YWx1ZVtjb2x1bW4udGV4dEZpZWxkIV19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiIHN0eWxlPVwiZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RXJyb3JNZXNzYWdlKGNvbHVtbi5mb3JtQ29udHJvbE5hbWUpICE9PSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tlcnJvck1zZ319XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFJBRElPIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCIgW2NsYXNzXT1cImNvbHVtbi5jb250YWluZXJDbGFzc2VzXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3tpc0FyYWJpY0Zvcm0/IGNvbHVtbi5hcmFiaWNMYWJlbCA6IGNvbHVtbi5lbmdsaXNoTGFiZWx9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbHVtbi5kYXRhOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sge3tjb2x1bW4uaW5wdXRDbGFzc2VzfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lK2l0ZW1bY29sdW1uLnZhbHVlRmllbGQhXVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5mb3JtQ29udHJvbE5hbWVcIiBbdmFsdWVdPVwiaXRlbVtjb2x1bW4udGV4dEZpZWxkIV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiY29sdW1uLmZvcm1Db250cm9sTmFtZStpdGVtW2NvbHVtbi52YWx1ZUZpZWxkIV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbVtjb2x1bW4udGV4dEZpZWxkIV19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiIHN0eWxlPVwiZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RXJyb3JNZXNzYWdlKGNvbHVtbi5mb3JtQ29udHJvbE5hbWUpICE9PSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tlcnJvck1zZ319XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEZJTEUgVVBMT0FEIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIiBbY2xhc3NdPVwiY29sdW1uLmNvbnRhaW5lckNsYXNzZXNcIj5cclxuICAgICAgICAgICAgICAgIDxpcGEtZmlsZS11cGxvYWQgW2lzQXJhYmljRm9ybV09XCJpc0FyYWJpY0Zvcm1cIiBbcmVxdWlyZWRdPVwiY29sdW1uLnJlcXVpcmVkXCIgW2xhYmVsXT1cImlzQXJhYmljRm9ybT8gY29sdW1uLmFyYWJpY0xhYmVsIDogY29sdW1uLmVuZ2xpc2hMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FjY2VwdGVkRmlsZXNdPVwiY29sdW1uLmFjY2VwdGVkRmlsZXMhXCIgW211bHRpcGxlXT1cImNvbHVtbi5tdWx0aXBsZUZpbGUhXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWF4RmlsZVNpemVdPVwiY29sdW1uLnNpemUhXCIgW21ldGhvZF09XCJjb2x1bW4uYXBpVVJsTWV0aG9kIVwiIFthdXRvVXBsb2FkXT1cImNvbHVtbi5hdXRvVXBsb2FkRmlsZSFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcGlVcmxdPVwiY29sdW1uLmFwaVVybD8/ICdhcGlVcmwnIFwiIFthdXRob3JpemF0aW9uXT1cImNvbHVtbi5hdXRob3JpemF0aW9uIVwiIG5nRGVmYXVsdENvbnRyb2xcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5mb3JtQ29udHJvbE5hbWVcIiAoc3VjY2Vzc1VwbG9hZCk9XCJTdWNjZXNzVXBsb2FkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmaWxlQWRkZWQpPVwiRmlsZUFkZGVkKCRldmVudCwgY29sdW1uLmZvcm1Db250cm9sTmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmaWxlRGVsZXRlZCk9XCJGaWxlRGVsZXRlZCgkZXZlbnQsIGNvbHVtbi5mb3JtQ29udHJvbE5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2lwYS1maWxlLXVwbG9hZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIHJlY2FwdGNoYSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3JlY2FwdGNoYSdcIiBbY2xhc3NdPVwiY29sdW1uLmNvbnRhaW5lckNsYXNzZXNcIj5cclxuICAgICAgICAgICAgICAgIDxpcGEtcmVjYXB0Y2hhIFtyZWNhcHRjaGFTaXplXT1cInJlY2FwdGNoYVNpemVcIiBbbGFuZ109XCJpc0FyYWJpY0Zvcm0/ICdhcic6J2VuJ1wiIFt0aGVtZV09XCJ0aGVtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlY2FwdGNoYVR5cGVdPVwicmVjYXB0Y2hhVHlwZVwiIFt1c2VHbG9iYWxEb21haW5dPVwidXNlR2xvYmFsRG9tYWluXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7e2NvbHVtbi5mb3JtQ29udHJvbE5hbWV9fVwiPlxyXG4gICAgICAgICAgICAgICAgPC9pcGEtcmVjYXB0Y2hhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gREVGQVVMVCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGlwYS10ZXh0LWlucHV0IFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLmZvcm1Db250cm9sTmFtZVwiIFtpZF09XCJjb2x1bW4uZm9ybUNvbnRyb2xOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJjb2x1bW4udHlwZVwiIFtsYWJlbF09XCJpc0FyYWJpY0Zvcm0/IGNvbHVtbi5hcmFiaWNMYWJlbCA6IGNvbHVtbi5lbmdsaXNoTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJjb2x1bW4ucmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwYXR0ZXJuRXJyb3JNc2ddPVwiaXNBcmFiaWNGb3JtPyBjb2x1bW4ucGF0dGVybkFyRXJyb3JNc2chIDogY29sdW1uLnBhdHRlcm5FbkVycm9yTXNnIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzZXNdPVwiY29sdW1uLmlucHV0Q2xhc3NlcyFcIiBbY29udGFpbmVyQ2xhc3Nlc109XCJjb2x1bW4uY29udGFpbmVyQ2xhc3NlcyFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc0FyYWJpY0Zvcm1dPVwiaXNBcmFiaWNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8L2lwYS10ZXh0LWlucHV0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L2Zvcm0+Il19
|