@piserve-tech/form-submission 0.0.0-watch
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/README.md +24 -0
- package/element-type/element-type.module.d.ts +12 -0
- package/element-type/form-elements/form-elements.component.d.ts +7 -0
- package/element-type/question/question.component.d.ts +14 -0
- package/element-type/sub-form/sub-form.component.d.ts +6 -0
- package/esm2022/element-type/element-type.module.mjs +36 -0
- package/esm2022/element-type/form-elements/form-elements.component.mjs +23 -0
- package/esm2022/element-type/question/question.component.mjs +52 -0
- package/esm2022/element-type/sub-form/sub-form.component.mjs +17 -0
- package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +198 -0
- package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +155 -0
- package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +147 -0
- package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +77 -0
- package/esm2022/form-fields/form-fields.module.mjs +154 -0
- package/esm2022/form-fields/location-fields/location-fields.component.mjs +79 -0
- package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +75 -0
- package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +81 -0
- package/esm2022/form-fields/number-fields/number-fields.component.mjs +59 -0
- package/esm2022/form-fields/password-fields/password-fields.component.mjs +172 -0
- package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +129 -0
- package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +89 -0
- package/esm2022/form-fields/section-fields/section-fields.component.mjs +16 -0
- package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +27 -0
- package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +29 -0
- package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +60 -0
- package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +27 -0
- package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +61 -0
- package/esm2022/form-fields/text-fields/text-fields.component.mjs +86 -0
- package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +42 -0
- package/esm2022/form-fields/url-fields/url-fields.component.mjs +59 -0
- package/esm2022/form-submission/form-submission.module.mjs +42 -0
- package/esm2022/form-submission/header/header.component.mjs +16 -0
- package/esm2022/form-submission/logic/logic.component.mjs +17 -0
- package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +27 -0
- package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +42 -0
- package/esm2022/form-submission/submit-form/submit-form.component.mjs +157 -0
- package/esm2022/lib/form-submission.component.mjs +23 -0
- package/esm2022/lib/form-submission.module.mjs +45 -0
- package/esm2022/lib/form-submission.service.mjs +14 -0
- package/esm2022/logic/logic/logic.component.mjs +17 -0
- package/esm2022/logic/logic.module.mjs +20 -0
- package/esm2022/models/appearance.model.mjs +2 -0
- package/esm2022/models/elementOptionAPI.model.mjs +2 -0
- package/esm2022/models/elementOptionAPIData.model.mjs +2 -0
- package/esm2022/models/elementOptionDB.model.mjs +2 -0
- package/esm2022/models/elementOptionDBCriteria.model.mjs +2 -0
- package/esm2022/models/enum/condition.enum.mjs +18 -0
- package/esm2022/models/enum/elementType .enum.mjs +24 -0
- package/esm2022/models/enum/entityType.enum.mjs +12 -0
- package/esm2022/models/formConfiguration.model.mjs +2 -0
- package/esm2022/models/formElement.model.mjs +2 -0
- package/esm2022/models/formElementType.model.mjs +2 -0
- package/esm2022/models/grid.model.mjs +2 -0
- package/esm2022/models/logic.model.mjs +2 -0
- package/esm2022/models/option.model.mjs +2 -0
- package/esm2022/models/page.model.mjs +2 -0
- package/esm2022/models/publicForm.model.mjs +2 -0
- package/esm2022/models/question.model.mjs +2 -0
- package/esm2022/models/row.model.mjs +2 -0
- package/esm2022/models/section.model.mjs +2 -0
- package/esm2022/models/subForm.model.mjs +2 -0
- package/esm2022/models/validation.model.mjs +2 -0
- package/esm2022/piserve-tech-form-submission.mjs +5 -0
- package/esm2022/public-api.mjs +7 -0
- package/esm2022/services/countryService.mjs +65 -0
- package/esm2022/services/data.service.mjs +26 -0
- package/esm2022/services/form.service.mjs +43 -0
- package/esm2022/services/mapper.service.mjs +256 -0
- package/fesm2022/piserve-tech-form-submission.mjs +2558 -0
- package/fesm2022/piserve-tech-form-submission.mjs.map +1 -0
- package/form-fields/check-box-fields/check-box-fields.component.d.ts +42 -0
- package/form-fields/date-time-fields/date-time-fields.component.d.ts +41 -0
- package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +45 -0
- package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +24 -0
- package/form-fields/form-fields.module.d.ts +36 -0
- package/form-fields/location-fields/location-fields.component.d.ts +24 -0
- package/form-fields/mail-fields/mail-fields.component.d.ts +21 -0
- package/form-fields/mobile-fields/mobile-fields.component.d.ts +45 -0
- package/form-fields/number-fields/number-fields.component.d.ts +22 -0
- package/form-fields/password-fields/password-fields.component.d.ts +35 -0
- package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +39 -0
- package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +24 -0
- package/form-fields/section-fields/section-fields.component.d.ts +6 -0
- package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +10 -0
- package/form-fields/signature-fields/signature-fields.component.d.ts +12 -0
- package/form-fields/slider-fields/slider-fields.component.d.ts +25 -0
- package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +10 -0
- package/form-fields/text-area-fields/text-area-fields.component.d.ts +22 -0
- package/form-fields/text-fields/text-fields.component.d.ts +30 -0
- package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +16 -0
- package/form-fields/url-fields/url-fields.component.d.ts +22 -0
- package/form-submission/form-submission.module.d.ts +14 -0
- package/form-submission/header/header.component.d.ts +6 -0
- package/form-submission/logic/logic.component.d.ts +6 -0
- package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +10 -0
- package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +15 -0
- package/form-submission/submit-form/submit-form.component.d.ts +43 -0
- package/index.d.ts +5 -0
- package/lib/form-submission.component.d.ts +10 -0
- package/lib/form-submission.module.d.ts +14 -0
- package/lib/form-submission.service.d.ts +6 -0
- package/logic/logic/logic.component.d.ts +6 -0
- package/logic/logic.module.d.ts +8 -0
- package/models/appearance.model.d.ts +48 -0
- package/models/elementOptionAPI.model.d.ts +11 -0
- package/models/elementOptionAPIData.model.d.ts +5 -0
- package/models/elementOptionDB.model.d.ts +7 -0
- package/models/elementOptionDBCriteria.model.d.ts +7 -0
- package/models/enum/condition.enum.d.ts +16 -0
- package/models/enum/elementType .enum.d.ts +22 -0
- package/models/enum/entityType.enum.d.ts +10 -0
- package/models/formConfiguration.model.d.ts +16 -0
- package/models/formElement.model.d.ts +12 -0
- package/models/formElementType.model.d.ts +5 -0
- package/models/grid.model.d.ts +8 -0
- package/models/logic.model.d.ts +8 -0
- package/models/option.model.d.ts +11 -0
- package/models/page.model.d.ts +5 -0
- package/models/publicForm.model.d.ts +7 -0
- package/models/question.model.d.ts +14 -0
- package/models/row.model.d.ts +4 -0
- package/models/section.model.d.ts +5 -0
- package/models/subForm.model.d.ts +8 -0
- package/models/validation.model.d.ts +44 -0
- package/package.json +43 -0
- package/public-api.d.ts +3 -0
- package/services/countryService.d.ts +21 -0
- package/services/data.service.d.ts +13 -0
- package/services/form.service.d.ts +17 -0
- package/services/mapper.service.d.ts +10 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# FormSubmission
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project formSubmission` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project formSubmission`.
|
|
8
|
+
> Note: Don't forget to add `--project formSubmission` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build formSubmission` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build formSubmission`, go to the dist folder `cd dist/form-submission` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test formSubmission` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./form-elements/form-elements.component";
|
|
3
|
+
import * as i2 from "./question/question.component";
|
|
4
|
+
import * as i3 from "./sub-form/sub-form.component";
|
|
5
|
+
import * as i4 from "@angular/common";
|
|
6
|
+
import * as i5 from "../form-fields/form-fields.module";
|
|
7
|
+
import * as i6 from "../logic/logic.module";
|
|
8
|
+
export declare class ElementTypeModule {
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ElementTypeModule, never>;
|
|
10
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ElementTypeModule, [typeof i1.FormElementsComponent, typeof i2.QuestionComponent, typeof i3.SubFormComponent], [typeof i4.CommonModule, typeof i5.FormFieldsModule, typeof i6.LogicModule], [typeof i1.FormElementsComponent, typeof i2.QuestionComponent, typeof i3.SubFormComponent]>;
|
|
11
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<ElementTypeModule>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class FormElementsComponent {
|
|
3
|
+
grid: any;
|
|
4
|
+
currentPageIndex: number;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FormElementsComponent, never>;
|
|
6
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormElementsComponent, "lib-form-elements", never, { "grid": { "alias": "grid"; "required": false; }; "currentPageIndex": { "alias": "currentPageIndex"; "required": false; }; }, {}, never, never, false, never>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChangeDetectorRef, EventEmitter, OnInit } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class QuestionComponent implements OnInit {
|
|
4
|
+
private cdr;
|
|
5
|
+
question: any;
|
|
6
|
+
ngOnInit(): void;
|
|
7
|
+
constructor(cdr: ChangeDetectorRef);
|
|
8
|
+
validations: any;
|
|
9
|
+
currentPageIndex: number;
|
|
10
|
+
emitValidations: EventEmitter<any>;
|
|
11
|
+
handleValidation(validation: any): void;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuestionComponent, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<QuestionComponent, "lib-question", never, { "question": { "alias": "question"; "required": false; }; "currentPageIndex": { "alias": "currentPageIndex"; "required": false; }; }, { "emitValidations": "emitValidations"; }, never, never, false, never>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class SubFormComponent {
|
|
3
|
+
subForm: any;
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SubFormComponent, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SubFormComponent, "lib-sub-form", never, { "subForm": { "alias": "subForm"; "required": false; }; }, {}, never, never, false, never>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormElementsComponent } from './form-elements/form-elements.component';
|
|
4
|
+
import { QuestionComponent } from './question/question.component';
|
|
5
|
+
import { SubFormComponent } from './sub-form/sub-form.component';
|
|
6
|
+
import { FormFieldsModule } from '../form-fields/form-fields.module';
|
|
7
|
+
import { LogicModule } from '../logic/logic.module';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class ElementTypeModule {
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElementTypeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
11
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: ElementTypeModule, declarations: [FormElementsComponent, QuestionComponent, SubFormComponent], imports: [CommonModule,
|
|
12
|
+
FormFieldsModule,
|
|
13
|
+
LogicModule], exports: [FormElementsComponent,
|
|
14
|
+
QuestionComponent,
|
|
15
|
+
SubFormComponent] }); }
|
|
16
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElementTypeModule, imports: [CommonModule,
|
|
17
|
+
FormFieldsModule,
|
|
18
|
+
LogicModule] }); }
|
|
19
|
+
}
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElementTypeModule, decorators: [{
|
|
21
|
+
type: NgModule,
|
|
22
|
+
args: [{
|
|
23
|
+
declarations: [FormElementsComponent, QuestionComponent, SubFormComponent],
|
|
24
|
+
imports: [
|
|
25
|
+
CommonModule,
|
|
26
|
+
FormFieldsModule,
|
|
27
|
+
LogicModule
|
|
28
|
+
],
|
|
29
|
+
exports: [
|
|
30
|
+
FormElementsComponent,
|
|
31
|
+
QuestionComponent,
|
|
32
|
+
SubFormComponent
|
|
33
|
+
]
|
|
34
|
+
}]
|
|
35
|
+
}] });
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC10eXBlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tc3VibWlzc2lvbi9zcmMvZWxlbWVudC10eXBlL2VsZW1lbnQtdHlwZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWlCcEQsTUFBTSxPQUFPLGlCQUFpQjsrR0FBakIsaUJBQWlCO2dIQUFqQixpQkFBaUIsaUJBWmIscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLGFBRXZFLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsV0FBVyxhQUdYLHFCQUFxQjtZQUNyQixpQkFBaUI7WUFDakIsZ0JBQWdCO2dIQUdQLGlCQUFpQixZQVYxQixZQUFZO1lBQ1osZ0JBQWdCO1lBQ2hCLFdBQVc7OzRGQVFGLGlCQUFpQjtrQkFiN0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQztvQkFDMUUsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixXQUFXO3FCQUNaO29CQUNELE9BQU8sRUFBRTt3QkFDUCxxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3FCQUNqQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUVsZW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtLWVsZW1lbnRzL2Zvcm0tZWxlbWVudHMuY29tcG9uZW50JztcbmltcG9ydCB7IFF1ZXN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9xdWVzdGlvbi9xdWVzdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vc3ViLWZvcm0vc3ViLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1GaWVsZHNNb2R1bGUgfSBmcm9tICcuLi9mb3JtLWZpZWxkcy9mb3JtLWZpZWxkcy5tb2R1bGUnO1xuaW1wb3J0IHsgTG9naWNNb2R1bGUgfSBmcm9tICcuLi9sb2dpYy9sb2dpYy5tb2R1bGUnO1xuXG5cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbRm9ybUVsZW1lbnRzQ29tcG9uZW50LCBRdWVzdGlvbkNvbXBvbmVudCwgU3ViRm9ybUNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybUZpZWxkc01vZHVsZSxcbiAgICBMb2dpY01vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRm9ybUVsZW1lbnRzQ29tcG9uZW50LFxuICAgIFF1ZXN0aW9uQ29tcG9uZW50LFxuICAgIFN1YkZvcm1Db21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFbGVtZW50VHlwZU1vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Component, Input, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "../../form-fields/section-fields/section-fields.component";
|
|
5
|
+
import * as i3 from "../question/question.component";
|
|
6
|
+
import * as i4 from "../sub-form/sub-form.component";
|
|
7
|
+
export class FormElementsComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.grid = {};
|
|
10
|
+
this.currentPageIndex = 0;
|
|
11
|
+
}
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormElementsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
13
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormElementsComponent, selector: "lib-form-elements", inputs: { grid: "grid", currentPageIndex: "currentPageIndex" }, ngImport: i0, template: "<div *ngIf=\"grid.entityType === 'QUESTION'\">\r\n <lib-question [question]=\"grid?.formElementType\"\r\n [currentPageIndex]=\"currentPageIndex\"\r\n ></lib-question>\r\n</div>\r\n<div *ngIf=\"grid.entityType === 'SECTION'\">\r\n <lib-section-fields [section]=\"grid.formElementType\"></lib-section-fields>\r\n</div>\r\n<div *ngIf=\"grid.entityType === 'SUBFORM'\">\r\n <lib-sub-form [subForm]=\"grid.formElementType\"></lib-sub-form>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SectionFieldsComponent, selector: "lib-section-fields", inputs: ["section"] }, { kind: "component", type: i3.QuestionComponent, selector: "lib-question", inputs: ["question", "currentPageIndex"], outputs: ["emitValidations"] }, { kind: "component", type: i4.SubFormComponent, selector: "lib-sub-form", inputs: ["subForm"] }] }); }
|
|
14
|
+
}
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormElementsComponent, decorators: [{
|
|
16
|
+
type: Component,
|
|
17
|
+
args: [{ selector: 'lib-form-elements', template: "<div *ngIf=\"grid.entityType === 'QUESTION'\">\r\n <lib-question [question]=\"grid?.formElementType\"\r\n [currentPageIndex]=\"currentPageIndex\"\r\n ></lib-question>\r\n</div>\r\n<div *ngIf=\"grid.entityType === 'SECTION'\">\r\n <lib-section-fields [section]=\"grid.formElementType\"></lib-section-fields>\r\n</div>\r\n<div *ngIf=\"grid.entityType === 'SUBFORM'\">\r\n <lib-sub-form [subForm]=\"grid.formElementType\"></lib-sub-form>\r\n</div>\r\n" }]
|
|
18
|
+
}], propDecorators: { grid: [{
|
|
19
|
+
type: Input
|
|
20
|
+
}], currentPageIndex: [{
|
|
21
|
+
type: Input
|
|
22
|
+
}] } });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2VsZW1lbnQtdHlwZS9mb3JtLWVsZW1lbnRzL2Zvcm0tZWxlbWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9lbGVtZW50LXR5cGUvZm9ybS1lbGVtZW50cy9mb3JtLWVsZW1lbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFPdkIsTUFBTSxPQUFPLHFCQUFxQjtJQUxsQztRQU1XLFNBQUksR0FBUSxFQUFFLENBQUM7UUFDZixxQkFBZ0IsR0FBVyxDQUFDLENBQUM7S0FDdkM7K0dBSFkscUJBQXFCO21HQUFyQixxQkFBcUIseUhDYmxDLHVjQVdBOzs0RkRFYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsbUJBQW1COzhCQUtwQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1mb3JtLWVsZW1lbnRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1lbGVtZW50cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1lbGVtZW50cy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUVsZW1lbnRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBncmlkOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBjdXJyZW50UGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJncmlkLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTidcIj5cclxuICA8bGliLXF1ZXN0aW9uIFtxdWVzdGlvbl09XCJncmlkPy5mb3JtRWxlbWVudFR5cGVcIlxyXG4gIFtjdXJyZW50UGFnZUluZGV4XT1cImN1cnJlbnRQYWdlSW5kZXhcIlxyXG4gID48L2xpYi1xdWVzdGlvbj5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJncmlkLmVudGl0eVR5cGUgPT09ICdTRUNUSU9OJ1wiPlxyXG4gIDxsaWItc2VjdGlvbi1maWVsZHMgW3NlY3Rpb25dPVwiZ3JpZC5mb3JtRWxlbWVudFR5cGVcIj48L2xpYi1zZWN0aW9uLWZpZWxkcz5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJncmlkLmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJ1wiPlxyXG4gIDxsaWItc3ViLWZvcm0gW3N1YkZvcm1dPVwiZ3JpZC5mb3JtRWxlbWVudFR5cGVcIj48L2xpYi1zdWItZm9ybT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "../../form-fields/check-box-fields/check-box-fields.component";
|
|
5
|
+
import * as i3 from "../../form-fields/date-time-fields/date-time-fields.component";
|
|
6
|
+
import * as i4 from "../../form-fields/drop-down-fields/drop-down-fields.component";
|
|
7
|
+
import * as i5 from "../../form-fields/file-picker-fields/file-picker-fields.component";
|
|
8
|
+
import * as i6 from "../../form-fields/location-fields/location-fields.component";
|
|
9
|
+
import * as i7 from "../../form-fields/mail-fields/mail-fields.component";
|
|
10
|
+
import * as i8 from "../../form-fields/mobile-fields/mobile-fields.component";
|
|
11
|
+
import * as i9 from "../../form-fields/number-fields/number-fields.component";
|
|
12
|
+
import * as i10 from "../../form-fields/password-fields/password-fields.component";
|
|
13
|
+
import * as i11 from "../../form-fields/radio-button-fields/radio-button-fields.component";
|
|
14
|
+
import * as i12 from "../../form-fields/rich-text-editor-fields/rich-text-editor-fields.component";
|
|
15
|
+
import * as i13 from "../../form-fields/selection-matrix-fields/selection-matrix-fields.component";
|
|
16
|
+
import * as i14 from "../../form-fields/signature-fields/signature-fields.component";
|
|
17
|
+
import * as i15 from "../../form-fields/slider-fields/slider-fields.component";
|
|
18
|
+
import * as i16 from "../../form-fields/terms-and-condition-fields/terms-and-condition-fields.component";
|
|
19
|
+
import * as i17 from "../../form-fields/text-area-fields/text-area-fields.component";
|
|
20
|
+
import * as i18 from "../../form-fields/text-fields/text-fields.component";
|
|
21
|
+
import * as i19 from "../../form-fields/toggle-switch-fields/toggle-switch-fields.component";
|
|
22
|
+
import * as i20 from "../../form-fields/url-fields/url-fields.component";
|
|
23
|
+
import * as i21 from "../../logic/logic/logic.component";
|
|
24
|
+
export class QuestionComponent {
|
|
25
|
+
ngOnInit() { }
|
|
26
|
+
constructor(cdr) {
|
|
27
|
+
this.cdr = cdr;
|
|
28
|
+
this.question = {};
|
|
29
|
+
this.validations = [];
|
|
30
|
+
this.currentPageIndex = 0;
|
|
31
|
+
this.emitValidations = new EventEmitter();
|
|
32
|
+
}
|
|
33
|
+
handleValidation(validation) {
|
|
34
|
+
this.validations.push(validation);
|
|
35
|
+
// Update validationStatus array
|
|
36
|
+
this.emitValidations.emit(this.validations);
|
|
37
|
+
this.cdr.detectChanges();
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QuestionComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: QuestionComponent, selector: "lib-question", inputs: { question: "question", currentPageIndex: "currentPageIndex" }, outputs: { emitValidations: "emitValidations" }, ngImport: i0, template: "<div>\r\n <lib-check-box-fields\r\n *ngIf=\"question.formElement.elementType === 'CHECK_BOX'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-check-box-fields>\r\n <lib-date-time-fields\r\n *ngIf=\"question.formElement.elementType === 'DATE_TIME'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-date-time-fields>\r\n <lib-drop-down-fields\r\n *ngIf=\"question.formElement.elementType === 'DROP_DOWN'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngIf=\"question.formElement.elementType === 'FILE_PICKER'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-file-picker-fields>\r\n <lib-location-fields\r\n *ngIf=\"question.formElement.elementType === 'LOCATION'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-location-fields>\r\n\r\n <lib-mail-fields\r\n *ngIf=\"question.formElement.elementType === 'EMAIL'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\">\r\n </lib-mail-fields>\r\n <lib-mobile-fields\r\n *ngIf=\"question.formElement.elementType === 'MOBILE'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\">\r\n </lib-mobile-fields>\r\n <lib-number-fields\r\n *ngIf=\"question.formElement.elementType === 'NUMBER'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\">\r\n </lib-number-fields>\r\n <lib-password-fields\r\n *ngIf=\"question.formElement.elementType === 'PASSWORD'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\">\r\n </lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngIf=\"question.formElement.elementType === 'RADIO_BUTTON'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngIf=\"question.formElement.elementType === 'RICH_TEXT_EDITOR'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngIf=\"question.formElement.elementType === 'SELECTION_MATRIX'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-selection-matrix-fields>\r\n <lib-signature-fields\r\n *ngIf=\"question.formElement.elementType === 'SIGNATURE'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-signature-fields>\r\n <lib-slider-fields\r\n *ngIf=\"question.formElement.elementType === 'SLIDER'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngIf=\"question.formElement.elementType === 'TERMS_AND_CONDITION'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-terms-and-condition-fields>\r\n <lib-text-area-fields\r\n *ngIf=\"question.formElement.elementType === 'TEXT_AREA'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-text-area-fields>\r\n <lib-text-fields\r\n *ngIf=\"question.formElement.elementType === 'TEXT_BOX'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngIf=\"question.formElement.elementType === 'TOGGLE_SWITCH'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-toggle-switch-fields>\r\n <lib-url-fields\r\n *ngIf=\"question.formElement.elementType === 'URL'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-url-fields>\r\n <lib-logic *ngIf=\"question.childLogics\"\r\n [childLogics]=\"question.childLogics\"></lib-logic>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CheckBoxFieldsComponent, selector: "lib-check-box-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i3.DateTimeFieldsComponent, selector: "lib-date-time-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i4.DropDownFieldsComponent, selector: "lib-drop-down-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i5.FilePickerFieldsComponent, selector: "lib-file-picker-fields", inputs: ["question"] }, { kind: "component", type: i6.LocationFieldsComponent, selector: "lib-location-fields", inputs: ["question"] }, { kind: "component", type: i7.MailFieldsComponent, selector: "lib-mail-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i8.MobileFieldsComponent, selector: "lib-mobile-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i9.NumberFieldsComponent, selector: "lib-number-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i10.PasswordFieldsComponent, selector: "lib-password-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i11.RadioButtonFieldsComponent, selector: "lib-radio-button-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i12.RichTextEditorFieldsComponent, selector: "lib-rich-text-editor-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i13.SelectionMatrixFieldsComponent, selector: "lib-selection-matrix-fields", inputs: ["question"] }, { kind: "component", type: i14.SignatureFieldsComponent, selector: "lib-signature-fields", inputs: ["question"] }, { kind: "component", type: i15.SliderFieldsComponent, selector: "lib-slider-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i16.TermsAndConditionFieldsComponent, selector: "lib-terms-and-condition-fields", inputs: ["question"] }, { kind: "component", type: i17.TextAreaFieldsComponent, selector: "lib-text-area-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i18.TextFieldsComponent, selector: "lib-text-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i19.ToggleSwitchFieldsComponent, selector: "lib-toggle-switch-fields", inputs: ["question"] }, { kind: "component", type: i20.UrlFieldsComponent, selector: "lib-url-fields", inputs: ["question"], outputs: ["validate"] }, { kind: "component", type: i21.LogicComponent, selector: "lib-logic", inputs: ["childLogics"] }] }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QuestionComponent, decorators: [{
|
|
43
|
+
type: Component,
|
|
44
|
+
args: [{ selector: 'lib-question', template: "<div>\r\n <lib-check-box-fields\r\n *ngIf=\"question.formElement.elementType === 'CHECK_BOX'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-check-box-fields>\r\n <lib-date-time-fields\r\n *ngIf=\"question.formElement.elementType === 'DATE_TIME'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-date-time-fields>\r\n <lib-drop-down-fields\r\n *ngIf=\"question.formElement.elementType === 'DROP_DOWN'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-drop-down-fields>\r\n <lib-file-picker-fields\r\n *ngIf=\"question.formElement.elementType === 'FILE_PICKER'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-file-picker-fields>\r\n <lib-location-fields\r\n *ngIf=\"question.formElement.elementType === 'LOCATION'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-location-fields>\r\n\r\n <lib-mail-fields\r\n *ngIf=\"question.formElement.elementType === 'EMAIL'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\">\r\n </lib-mail-fields>\r\n <lib-mobile-fields\r\n *ngIf=\"question.formElement.elementType === 'MOBILE'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\">\r\n </lib-mobile-fields>\r\n <lib-number-fields\r\n *ngIf=\"question.formElement.elementType === 'NUMBER'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\">\r\n </lib-number-fields>\r\n <lib-password-fields\r\n *ngIf=\"question.formElement.elementType === 'PASSWORD'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\">\r\n </lib-password-fields>\r\n <lib-radio-button-fields\r\n *ngIf=\"question.formElement.elementType === 'RADIO_BUTTON'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-radio-button-fields>\r\n <lib-rich-text-editor-fields\r\n *ngIf=\"question.formElement.elementType === 'RICH_TEXT_EDITOR'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-rich-text-editor-fields>\r\n <lib-selection-matrix-fields\r\n *ngIf=\"question.formElement.elementType === 'SELECTION_MATRIX'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-selection-matrix-fields>\r\n <lib-signature-fields\r\n *ngIf=\"question.formElement.elementType === 'SIGNATURE'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-signature-fields>\r\n <lib-slider-fields\r\n *ngIf=\"question.formElement.elementType === 'SLIDER'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-slider-fields>\r\n <lib-terms-and-condition-fields\r\n *ngIf=\"question.formElement.elementType === 'TERMS_AND_CONDITION'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-terms-and-condition-fields>\r\n <lib-text-area-fields\r\n *ngIf=\"question.formElement.elementType === 'TEXT_AREA'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-text-area-fields>\r\n <lib-text-fields\r\n *ngIf=\"question.formElement.elementType === 'TEXT_BOX'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-text-fields>\r\n <lib-toggle-switch-fields\r\n *ngIf=\"question.formElement.elementType === 'TOGGLE_SWITCH'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-toggle-switch-fields>\r\n <lib-url-fields\r\n *ngIf=\"question.formElement.elementType === 'URL'\"\r\n [question]=\"question\"\r\n (validate)=\"handleValidation($event)\"></lib-url-fields>\r\n <lib-logic *ngIf=\"question.childLogics\"\r\n [childLogics]=\"question.childLogics\"></lib-logic>\r\n</div>\r\n" }]
|
|
45
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { question: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], currentPageIndex: [{
|
|
48
|
+
type: Input
|
|
49
|
+
}], emitValidations: [{
|
|
50
|
+
type: Output
|
|
51
|
+
}] } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9lbGVtZW50LXR5cGUvcXVlc3Rpb24vcXVlc3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9lbGVtZW50LXR5cGUvcXVlc3Rpb24vcXVlc3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWxHLE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsUUFBUSxLQUFJLENBQUM7SUFFYixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUpqQyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBTTVCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ2IscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBQzVCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUpQLENBQUM7SUFXOUMsZ0JBQWdCLENBQUMsVUFBZTtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsQyxnQ0FBZ0M7UUFJaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQzsrR0ExQlksaUJBQWlCO21HQUFqQixpQkFBaUIsNktDUjlCLDJ5SEFxRkE7OzRGRDdFYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsY0FBYzt3R0FLZixRQUFRO3NCQUFoQixLQUFLO2dCQU9HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9xdWVzdGlvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcXVlc3Rpb246IGFueSA9IHt9O1xyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgdmFsaWRhdGlvbnM6IGFueSA9IFtdO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgQE91dHB1dCgpIGVtaXRWYWxpZGF0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHJcbiAgXHJcblxyXG4gIFxyXG5cclxuICBoYW5kbGVWYWxpZGF0aW9uKHZhbGlkYXRpb246IGFueSkge1xyXG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHZhbGlkYXRpb24pO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uU3RhdHVzIGFycmF5XHJcblxyXG4gICAgXHJcblxyXG4gICAgdGhpcy5lbWl0VmFsaWRhdGlvbnMuZW1pdCh0aGlzLnZhbGlkYXRpb25zKTtcclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7IFxyXG59XHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGRpdj5cclxuICA8bGliLWNoZWNrLWJveC1maWVsZHNcclxuICAgICpuZ0lmPVwicXVlc3Rpb24uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdDSEVDS19CT1gnXCJcclxuICAgIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAodmFsaWRhdGUpPVwiaGFuZGxlVmFsaWRhdGlvbigkZXZlbnQpXCI+PC9saWItY2hlY2stYm94LWZpZWxkcz5cclxuICA8bGliLWRhdGUtdGltZS1maWVsZHNcclxuICAgICpuZ0lmPVwicXVlc3Rpb24uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdEQVRFX1RJTUUnXCJcclxuICAgIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAodmFsaWRhdGUpPVwiaGFuZGxlVmFsaWRhdGlvbigkZXZlbnQpXCI+PC9saWItZGF0ZS10aW1lLWZpZWxkcz5cclxuICA8bGliLWRyb3AtZG93bi1maWVsZHNcclxuICAgICpuZ0lmPVwicXVlc3Rpb24uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdEUk9QX0RPV04nXCJcclxuICAgIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAodmFsaWRhdGUpPVwiaGFuZGxlVmFsaWRhdGlvbigkZXZlbnQpXCI+PC9saWItZHJvcC1kb3duLWZpZWxkcz5cclxuICA8bGliLWZpbGUtcGlja2VyLWZpZWxkc1xyXG4gICAgKm5nSWY9XCJxdWVzdGlvbi5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJ1wiXHJcbiAgICBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIlxyXG4gICAgKHZhbGlkYXRlKT1cImhhbmRsZVZhbGlkYXRpb24oJGV2ZW50KVwiPjwvbGliLWZpbGUtcGlja2VyLWZpZWxkcz5cclxuICA8bGliLWxvY2F0aW9uLWZpZWxkc1xyXG4gICAgKm5nSWY9XCJxdWVzdGlvbi5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0xPQ0FUSU9OJ1wiXHJcbiAgICBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIlxyXG4gICAgKHZhbGlkYXRlKT1cImhhbmRsZVZhbGlkYXRpb24oJGV2ZW50KVwiPjwvbGliLWxvY2F0aW9uLWZpZWxkcz5cclxuXHJcbiAgPGxpYi1tYWlsLWZpZWxkc1xyXG4gICAgKm5nSWY9XCJxdWVzdGlvbi5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0VNQUlMJ1wiXHJcbiAgICBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIlxyXG4gICAgKHZhbGlkYXRlKT1cImhhbmRsZVZhbGlkYXRpb24oJGV2ZW50KVwiPlxyXG4gIDwvbGliLW1haWwtZmllbGRzPlxyXG4gIDxsaWItbW9iaWxlLWZpZWxkc1xyXG4gICAgKm5nSWY9XCJxdWVzdGlvbi5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ01PQklMRSdcIlxyXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICh2YWxpZGF0ZSk9XCJoYW5kbGVWYWxpZGF0aW9uKCRldmVudClcIj5cclxuICA8L2xpYi1tb2JpbGUtZmllbGRzPlxyXG4gIDxsaWItbnVtYmVyLWZpZWxkc1xyXG4gICAgKm5nSWY9XCJxdWVzdGlvbi5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ05VTUJFUidcIlxyXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICh2YWxpZGF0ZSk9XCJoYW5kbGVWYWxpZGF0aW9uKCRldmVudClcIj5cclxuICA8L2xpYi1udW1iZXItZmllbGRzPlxyXG4gIDxsaWItcGFzc3dvcmQtZmllbGRzXHJcbiAgICAqbmdJZj1cInF1ZXN0aW9uLmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnUEFTU1dPUkQnXCJcclxuICAgIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAodmFsaWRhdGUpPVwiaGFuZGxlVmFsaWRhdGlvbigkZXZlbnQpXCI+XHJcbiAgPC9saWItcGFzc3dvcmQtZmllbGRzPlxyXG4gIDxsaWItcmFkaW8tYnV0dG9uLWZpZWxkc1xyXG4gICAgKm5nSWY9XCJxdWVzdGlvbi5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ1JBRElPX0JVVFRPTidcIlxyXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICh2YWxpZGF0ZSk9XCJoYW5kbGVWYWxpZGF0aW9uKCRldmVudClcIj48L2xpYi1yYWRpby1idXR0b24tZmllbGRzPlxyXG4gIDxsaWItcmljaC10ZXh0LWVkaXRvci1maWVsZHNcclxuICAgICpuZ0lmPVwicXVlc3Rpb24uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdSSUNIX1RFWFRfRURJVE9SJ1wiXHJcbiAgICBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIlxyXG4gICAgKHZhbGlkYXRlKT1cImhhbmRsZVZhbGlkYXRpb24oJGV2ZW50KVwiPjwvbGliLXJpY2gtdGV4dC1lZGl0b3ItZmllbGRzPlxyXG4gIDxsaWItc2VsZWN0aW9uLW1hdHJpeC1maWVsZHNcclxuICAgICpuZ0lmPVwicXVlc3Rpb24uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdTRUxFQ1RJT05fTUFUUklYJ1wiXHJcbiAgICBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIlxyXG4gICAgKHZhbGlkYXRlKT1cImhhbmRsZVZhbGlkYXRpb24oJGV2ZW50KVwiPjwvbGliLXNlbGVjdGlvbi1tYXRyaXgtZmllbGRzPlxyXG4gIDxsaWItc2lnbmF0dXJlLWZpZWxkc1xyXG4gICAgKm5nSWY9XCJxdWVzdGlvbi5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ1NJR05BVFVSRSdcIlxyXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICh2YWxpZGF0ZSk9XCJoYW5kbGVWYWxpZGF0aW9uKCRldmVudClcIj48L2xpYi1zaWduYXR1cmUtZmllbGRzPlxyXG4gIDxsaWItc2xpZGVyLWZpZWxkc1xyXG4gICAgKm5nSWY9XCJxdWVzdGlvbi5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ1NMSURFUidcIlxyXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICh2YWxpZGF0ZSk9XCJoYW5kbGVWYWxpZGF0aW9uKCRldmVudClcIj48L2xpYi1zbGlkZXItZmllbGRzPlxyXG4gIDxsaWItdGVybXMtYW5kLWNvbmRpdGlvbi1maWVsZHNcclxuICAgICpuZ0lmPVwicXVlc3Rpb24uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdURVJNU19BTkRfQ09ORElUSU9OJ1wiXHJcbiAgICBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIlxyXG4gICAgKHZhbGlkYXRlKT1cImhhbmRsZVZhbGlkYXRpb24oJGV2ZW50KVwiPjwvbGliLXRlcm1zLWFuZC1jb25kaXRpb24tZmllbGRzPlxyXG4gIDxsaWItdGV4dC1hcmVhLWZpZWxkc1xyXG4gICAgKm5nSWY9XCJxdWVzdGlvbi5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ1RFWFRfQVJFQSdcIlxyXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICh2YWxpZGF0ZSk9XCJoYW5kbGVWYWxpZGF0aW9uKCRldmVudClcIj48L2xpYi10ZXh0LWFyZWEtZmllbGRzPlxyXG4gIDxsaWItdGV4dC1maWVsZHNcclxuICAgICpuZ0lmPVwicXVlc3Rpb24uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdURVhUX0JPWCdcIlxyXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICh2YWxpZGF0ZSk9XCJoYW5kbGVWYWxpZGF0aW9uKCRldmVudClcIj48L2xpYi10ZXh0LWZpZWxkcz5cclxuICA8bGliLXRvZ2dsZS1zd2l0Y2gtZmllbGRzXHJcbiAgICAqbmdJZj1cInF1ZXN0aW9uLmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnVE9HR0xFX1NXSVRDSCdcIlxyXG4gICAgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICh2YWxpZGF0ZSk9XCJoYW5kbGVWYWxpZGF0aW9uKCRldmVudClcIj48L2xpYi10b2dnbGUtc3dpdGNoLWZpZWxkcz5cclxuICA8bGliLXVybC1maWVsZHNcclxuICAgICpuZ0lmPVwicXVlc3Rpb24uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdVUkwnXCJcclxuICAgIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAodmFsaWRhdGUpPVwiaGFuZGxlVmFsaWRhdGlvbigkZXZlbnQpXCI+PC9saWItdXJsLWZpZWxkcz5cclxuICA8bGliLWxvZ2ljICpuZ0lmPVwicXVlc3Rpb24uY2hpbGRMb2dpY3NcIlxyXG4gICAgW2NoaWxkTG9naWNzXT1cInF1ZXN0aW9uLmNoaWxkTG9naWNzXCI+PC9saWItbG9naWM+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class SubFormComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.subForm = {};
|
|
7
|
+
}
|
|
8
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SubFormComponent, selector: "lib-sub-form", inputs: { subForm: "subForm" }, ngImport: i0, template: "<div class=\"outer-container mb-4 px-3\">\r\n <div class=\"body container pt-3 pb-3 px-3\">\r\n <div class=\"tab-content pt-4 pb-3 px-3\">\r\n <p class=\"sectionTitle\">{{subForm.title}}</p>\r\n <p class=\"description mb-5\">{{subForm.description}}</p>\r\n <div *ngFor=\"let formElement of subForm.formElements\">\r\n <!-- <lib-form-elements [grid]=\"formElement\"></lib-form-elements> -->\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".outer-container{background-color:#fff;padding:20px;position:relative;margin-top:25px}@media (max-width: 576px){.outer-container{padding:8px}}.body{position:relative;z-index:1;background:#efefef;border-radius:6px}.tab-content{background-color:#fff}.sectionTitle{font-size:15px;font-weight:500}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
|
|
10
|
+
}
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SubFormComponent, decorators: [{
|
|
12
|
+
type: Component,
|
|
13
|
+
args: [{ selector: 'lib-sub-form', template: "<div class=\"outer-container mb-4 px-3\">\r\n <div class=\"body container pt-3 pb-3 px-3\">\r\n <div class=\"tab-content pt-4 pb-3 px-3\">\r\n <p class=\"sectionTitle\">{{subForm.title}}</p>\r\n <p class=\"description mb-5\">{{subForm.description}}</p>\r\n <div *ngFor=\"let formElement of subForm.formElements\">\r\n <!-- <lib-form-elements [grid]=\"formElement\"></lib-form-elements> -->\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".outer-container{background-color:#fff;padding:20px;position:relative;margin-top:25px}@media (max-width: 576px){.outer-container{padding:8px}}.body{position:relative;z-index:1;background:#efefef;border-radius:6px}.tab-content{background-color:#fff}.sectionTitle{font-size:15px;font-weight:500}\n"] }]
|
|
14
|
+
}], propDecorators: { subForm: [{
|
|
15
|
+
type: Input
|
|
16
|
+
}] } });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9lbGVtZW50LXR5cGUvc3ViLWZvcm0vc3ViLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9lbGVtZW50LXR5cGUvc3ViLWZvcm0vc3ViLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU9qRCxNQUFNLE9BQU8sZ0JBQWdCO0lBTDdCO1FBTVcsWUFBTyxHQUFLLEVBQUUsQ0FBQztLQUN6QjsrR0FGWSxnQkFBZ0I7bUdBQWhCLGdCQUFnQixvRkNQN0IsbWVBV0E7OzRGREphLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjOzhCQUtmLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXN1Yi1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3ViLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3N1Yi1mb3JtLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFN1YkZvcm1Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHN1YkZvcm06YW55PXt9O1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJvdXRlci1jb250YWluZXIgbWItNCBweC0zXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJvZHkgY29udGFpbmVyIHB0LTMgcGItMyBweC0zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgcHQtNCBwYi0zIHB4LTNcIj5cclxuICAgICAgPHAgY2xhc3M9XCJzZWN0aW9uVGl0bGVcIj57e3N1YkZvcm0udGl0bGV9fTwvcD5cclxuICAgICAgPHAgY2xhc3M9XCJkZXNjcmlwdGlvbiBtYi01XCI+e3tzdWJGb3JtLmRlc2NyaXB0aW9ufX08L3A+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZm9ybUVsZW1lbnQgb2Ygc3ViRm9ybS5mb3JtRWxlbWVudHNcIj5cclxuICAgICAgICAgICAgPCEtLSA8bGliLWZvcm0tZWxlbWVudHMgW2dyaWRdPVwiZm9ybUVsZW1lbnRcIj48L2xpYi1mb3JtLWVsZW1lbnRzPiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../services/form.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
export class CheckBoxFieldsComponent {
|
|
6
|
+
constructor(formService) {
|
|
7
|
+
this.formService = formService;
|
|
8
|
+
this.question = {};
|
|
9
|
+
this.count = 0;
|
|
10
|
+
this.required = false;
|
|
11
|
+
this.hint = '';
|
|
12
|
+
this.selectionType = '';
|
|
13
|
+
this.optionType = '';
|
|
14
|
+
this.lookupTable = {};
|
|
15
|
+
this.customOptions = [];
|
|
16
|
+
this.database = {};
|
|
17
|
+
this.api = {};
|
|
18
|
+
this.apiOptions = []; // Assuming you have a property to store API options
|
|
19
|
+
this.selectedOptions = [];
|
|
20
|
+
this.validationFailed = false;
|
|
21
|
+
this.validationMessage = '';
|
|
22
|
+
this.validate = new EventEmitter();
|
|
23
|
+
}
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
this.valueAssigned();
|
|
26
|
+
}
|
|
27
|
+
valueAssigned() {
|
|
28
|
+
this.count = this.question.count;
|
|
29
|
+
this.required = this.question.required;
|
|
30
|
+
this.hint = this.question.hint;
|
|
31
|
+
this.selectionType = this.question.formElement.appearance.selectionType;
|
|
32
|
+
this.minimumSelection =
|
|
33
|
+
this.question.formElement.validation.minimumSelection;
|
|
34
|
+
this.maximumSelection =
|
|
35
|
+
this.question.formElement.validation.maximumSelection;
|
|
36
|
+
this.optionType = this.question.formElement.option.optionType;
|
|
37
|
+
switch (this.optionType) {
|
|
38
|
+
case 'OPTION':
|
|
39
|
+
this.customOptions = this.question.formElement.option.customOptions;
|
|
40
|
+
break;
|
|
41
|
+
case 'LOOKUP':
|
|
42
|
+
this.lookupTable = this.question.formElement.option.lookupTable;
|
|
43
|
+
this.fetchDataFromLookup();
|
|
44
|
+
break;
|
|
45
|
+
case 'DATABASE':
|
|
46
|
+
this.database = this.question.formElement.option.database;
|
|
47
|
+
this.fetchDataFromDatabase();
|
|
48
|
+
break;
|
|
49
|
+
case 'API':
|
|
50
|
+
this.api = this.question.formElement.option.api;
|
|
51
|
+
this.fetchDataFromAPI();
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
console.warn('Unknown option type:', this.optionType);
|
|
55
|
+
}
|
|
56
|
+
// If selectionType is 'SINGLE', set minimumSelection and maximumSelection to 1
|
|
57
|
+
if (this.selectionType === 'SINGLE') {
|
|
58
|
+
this.minimumSelection = 1;
|
|
59
|
+
this.maximumSelection = 1;
|
|
60
|
+
}
|
|
61
|
+
// If selectionType is 'MULTIPLE' and minSelection and maxSelection are not specified, set them to undefined
|
|
62
|
+
if (this.selectionType === 'MULTIPLE' &&
|
|
63
|
+
!this.minimumSelection &&
|
|
64
|
+
!this.maximumSelection) {
|
|
65
|
+
this.minimumSelection = undefined;
|
|
66
|
+
this.maximumSelection = undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
onCheckboxChange(option, event) {
|
|
70
|
+
if (this.selectionType === 'SINGLE') {
|
|
71
|
+
// Clear previously selected options for single selection type
|
|
72
|
+
this.selectedOptions = [];
|
|
73
|
+
}
|
|
74
|
+
if (event.target.checked) {
|
|
75
|
+
// Add the selected option if it's not already in the list
|
|
76
|
+
if (!this.selectedOptions.includes(option)) {
|
|
77
|
+
this.selectedOptions.push(option);
|
|
78
|
+
this.isMinimumSelectionValid();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Remove the selected option
|
|
83
|
+
this.selectedOptions = this.selectedOptions.filter((item) => item !== option);
|
|
84
|
+
this.isMinimumSelectionValid();
|
|
85
|
+
}
|
|
86
|
+
// Check if the number of selected options exceeds the maximum allowed
|
|
87
|
+
if (this.maximumSelection !== undefined &&
|
|
88
|
+
this.selectedOptions.length > this.maximumSelection) {
|
|
89
|
+
// If exceeded, uncheck the last selected option
|
|
90
|
+
event.target.checked = false;
|
|
91
|
+
// Remove the unchecked option from the selectedOptions array
|
|
92
|
+
this.selectedOptions = this.selectedOptions.filter((item) => item !== option);
|
|
93
|
+
// You can add a message to inform the user about the maximum selection limit if needed
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
fetchDataFromLookup() {
|
|
97
|
+
this.formService.fetchDataFromLookup(this.lookupTable).subscribe((response) => {
|
|
98
|
+
this.customOptions = response.result.values.map((item) => ({
|
|
99
|
+
value: item.value,
|
|
100
|
+
label: item.label,
|
|
101
|
+
}));
|
|
102
|
+
}, (error) => {
|
|
103
|
+
console.error('HTTP Error:', error);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
fetchDataFromDatabase() {
|
|
107
|
+
const transformedDatabase = this.transformDatabaseObject(this.database);
|
|
108
|
+
this.formService.fetchDataFromDatabase(transformedDatabase).subscribe((response) => {
|
|
109
|
+
if (response.success) {
|
|
110
|
+
this.customOptions = response.result.map((item) => ({
|
|
111
|
+
value: item.value,
|
|
112
|
+
label: item.label,
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.error('Error fetching data from database:', response.message);
|
|
117
|
+
}
|
|
118
|
+
}, (error) => {
|
|
119
|
+
console.error('HTTP Error:', error);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
transformDatabaseObject(database) {
|
|
123
|
+
return {
|
|
124
|
+
tableName: database.tableName,
|
|
125
|
+
valueField: database.valueField,
|
|
126
|
+
labelField: database.labelField,
|
|
127
|
+
criteria: database.criteria.map((criteria) => ({
|
|
128
|
+
field: criteria.field,
|
|
129
|
+
condition: criteria.condition,
|
|
130
|
+
value: criteria.inputValue,
|
|
131
|
+
logicalOperator: criteria.logicalOperator,
|
|
132
|
+
})),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
fetchDataFromAPI() {
|
|
136
|
+
const apiConfig = this.api;
|
|
137
|
+
this.formService.fetchDataFromExternalAPI(apiConfig.url).subscribe((response) => {
|
|
138
|
+
const data = this.extractDataByPath(response, apiConfig.pathToValue);
|
|
139
|
+
this.customOptions = data.map((item) => ({
|
|
140
|
+
value: item[apiConfig.valueField],
|
|
141
|
+
label: item[apiConfig.labelField],
|
|
142
|
+
}));
|
|
143
|
+
}, (error) => {
|
|
144
|
+
console.error('HTTP Error:', error);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
extractDataByPath(data, path) {
|
|
148
|
+
return path.split('.').reduce((acc, part) => acc && acc[part], data);
|
|
149
|
+
}
|
|
150
|
+
isMinimumSelectionValid() {
|
|
151
|
+
this.validationFailed = false;
|
|
152
|
+
if (this.selectedOptions.length == 0 && this.required) {
|
|
153
|
+
this.validationFailed = true;
|
|
154
|
+
this.validationMessage = 'This is a required question';
|
|
155
|
+
this.validate.emit(this.validationFailed);
|
|
156
|
+
}
|
|
157
|
+
else if (this.minimumSelection !== undefined) {
|
|
158
|
+
if (this.selectedOptions.length < this.minimumSelection) {
|
|
159
|
+
this.validationFailed = true;
|
|
160
|
+
this.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;
|
|
161
|
+
this.validate.emit(this.validationFailed);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this.validate.emit(this.validationFailed);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
getOptions() {
|
|
169
|
+
if (this.optionType === 'OPTION') {
|
|
170
|
+
return this.customOptions;
|
|
171
|
+
}
|
|
172
|
+
else if (this.optionType === 'LOOKUP') {
|
|
173
|
+
return Object.values(this.lookupTable);
|
|
174
|
+
}
|
|
175
|
+
else if (this.optionType === 'API') {
|
|
176
|
+
return this.apiOptions.map((option) => option.valueField);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
return [];
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
isOptionDisabled(option) {
|
|
183
|
+
return (this.maximumSelection !== undefined &&
|
|
184
|
+
this.selectedOptions.length >= this.maximumSelection &&
|
|
185
|
+
!this.selectedOptions.includes(option));
|
|
186
|
+
}
|
|
187
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckBoxFieldsComponent, deps: [{ token: i1.FormService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
188
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CheckBoxFieldsComponent, selector: "lib-check-box-fields", inputs: { question: "question" }, outputs: { validate: "validate" }, ngImport: i0, template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\r\n <div class=\"input-wrapper mb-2\">\r\n <label>{{ question.question }}</label\r\n > \r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"form-check\" *ngFor=\"let option of customOptions\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [id]=\"option.value + 'Checkbox'\"\r\n [name]=\"option.value + 'Checkbox'\"\r\n [value]=\"option.value\"\r\n (change)=\"onCheckboxChange(option, $event)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [checked]=\"selectedOptions.includes(option.value)\"\r\n />\r\n <label\r\n class=\"formCheckLabel ms-2 mb-2\"\r\n [for]=\"option.value + 'Checkbox'\"\r\n *ngIf=\"optionType == 'OPTION'\"\r\n >{{ option.value }}</label\r\n >\r\n <label\r\n class=\"formCheckLabel ms-2 mb-2\"\r\n [for]=\"option.value + 'Checkbox'\"\r\n *ngIf=\"optionType == 'LOOKUP' || 'DATABASE' || 'API'\"\r\n >{{ option.label }}</label\r\n >\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger\">\r\n <svg\r\n class=\"validationSvg\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\r\n fill=\"#FF0000\"\r\n stroke=\"#FF0000\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 12.75L12 7.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\r\n </svg>\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-left:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;white-space:nowrap}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.form-check-input,.form-check-label{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
189
|
+
}
|
|
190
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CheckBoxFieldsComponent, decorators: [{
|
|
191
|
+
type: Component,
|
|
192
|
+
args: [{ selector: 'lib-check-box-fields', template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\r\n <div class=\"input-wrapper mb-2\">\r\n <label>{{ question.question }}</label\r\n > \r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"form-check\" *ngFor=\"let option of customOptions\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [id]=\"option.value + 'Checkbox'\"\r\n [name]=\"option.value + 'Checkbox'\"\r\n [value]=\"option.value\"\r\n (change)=\"onCheckboxChange(option, $event)\"\r\n [disabled]=\"isOptionDisabled(option)\"\r\n [checked]=\"selectedOptions.includes(option.value)\"\r\n />\r\n <label\r\n class=\"formCheckLabel ms-2 mb-2\"\r\n [for]=\"option.value + 'Checkbox'\"\r\n *ngIf=\"optionType == 'OPTION'\"\r\n >{{ option.value }}</label\r\n >\r\n <label\r\n class=\"formCheckLabel ms-2 mb-2\"\r\n [for]=\"option.value + 'Checkbox'\"\r\n *ngIf=\"optionType == 'LOOKUP' || 'DATABASE' || 'API'\"\r\n >{{ option.label }}</label\r\n >\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger\">\r\n <svg\r\n class=\"validationSvg\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\r\n fill=\"#FF0000\"\r\n stroke=\"#FF0000\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 12.75L12 7.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\r\n </svg>\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-left:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;white-space:nowrap}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.form-check-input,.form-check-label{cursor:pointer}\n"] }]
|
|
193
|
+
}], ctorParameters: function () { return [{ type: i1.FormService }]; }, propDecorators: { question: [{
|
|
194
|
+
type: Input
|
|
195
|
+
}], validate: [{
|
|
196
|
+
type: Output
|
|
197
|
+
}] } });
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2NoZWNrLWJveC1maWVsZHMvY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2NoZWNrLWJveC1maWVsZHMvY2hlY2stYm94LWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUXZFLE1BQU0sT0FBTyx1QkFBdUI7SUFvQmxDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBbkJuQyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQzVCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRzNCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFDdEIsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFDMUIsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUNuQixRQUFHLEdBQVEsRUFBRSxDQUFDO1FBQ2QsZUFBVSxHQUFVLEVBQUUsQ0FBQyxDQUFDLG9EQUFvRDtRQUM1RSxvQkFBZSxHQUFVLEVBQUUsQ0FBQztRQUM1QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsc0JBQWlCLEdBQVcsRUFBRSxDQUFDO1FBRXJCLGFBQVEsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUV6QixDQUFDO0lBRWhELFFBQVE7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Q0FBQyxnQkFBZ0IsS0FBSyxTQUFTO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0I7WUFDcEQsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDdkMsQ0FBQztJQUNKLENBQUM7K0dBdk5VLHVCQUF1QjttR0FBdkIsdUJBQXVCLGlJQ1JwQyxzdEhBb0dBOzs0RkQ1RmEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHNCQUFzQjtrR0FLdkIsUUFBUTtzQkFBaEIsS0FBSztnQkFpQkksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNoZWNrLWJveC1maWVsZHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVjay1ib3gtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGVjay1ib3gtZmllbGRzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGVja0JveEZpZWxkc0NvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgcXVlc3Rpb246IGFueSA9IHt9O1xyXG4gIGNvdW50OiBudW1iZXIgPSAwO1xyXG4gIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGludDogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0aW9uVHlwZTogc3RyaW5nID0gJyc7XHJcbiAgbWluaW11bVNlbGVjdGlvbj86IG51bWJlcjtcclxuICBtYXhpbXVtU2VsZWN0aW9uPzogbnVtYmVyO1xyXG4gIG9wdGlvblR5cGU6IHN0cmluZyA9ICcnO1xyXG4gIGxvb2t1cFRhYmxlOiBhbnkgPSB7fTtcclxuICBjdXN0b21PcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGRhdGFiYXNlOiBhbnkgPSB7fTtcclxuICBhcGk6IGFueSA9IHt9O1xyXG4gIGFwaU9wdGlvbnM6IGFueVtdID0gW107IC8vIEFzc3VtaW5nIHlvdSBoYXZlIGEgcHJvcGVydHkgdG8gc3RvcmUgQVBJIG9wdGlvbnNcclxuICBzZWxlY3RlZE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgdmFsaWRhdGlvbkZhaWxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQE91dHB1dCgpIHZhbGlkYXRlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudmFsdWVBc3NpZ25lZCgpO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVBc3NpZ25lZCgpIHtcclxuICAgIHRoaXMuY291bnQgPSB0aGlzLnF1ZXN0aW9uLmNvdW50O1xyXG4gICAgdGhpcy5yZXF1aXJlZCA9IHRoaXMucXVlc3Rpb24ucmVxdWlyZWQ7XHJcbiAgICB0aGlzLmhpbnQgPSB0aGlzLnF1ZXN0aW9uLmhpbnQ7XHJcbiAgICB0aGlzLnNlbGVjdGlvblR5cGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2Uuc2VsZWN0aW9uVHlwZTtcclxuICAgIHRoaXMubWluaW11bVNlbGVjdGlvbiA9XHJcbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5taW5pbXVtU2VsZWN0aW9uO1xyXG4gICAgdGhpcy5tYXhpbXVtU2VsZWN0aW9uID1cclxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1heGltdW1TZWxlY3Rpb247XHJcbiAgICB0aGlzLm9wdGlvblR5cGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5vcHRpb25UeXBlO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25UeXBlKSB7XHJcbiAgICAgIGNhc2UgJ09QVElPTic6XHJcbiAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24uY3VzdG9tT3B0aW9ucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnTE9PS1VQJzpcclxuICAgICAgICB0aGlzLmxvb2t1cFRhYmxlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24ubG9va3VwVGFibGU7XHJcbiAgICAgICAgdGhpcy5mZXRjaERhdGFGcm9tTG9va3VwKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0RBVEFCQVNFJzpcclxuICAgICAgICB0aGlzLmRhdGFiYXNlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24uZGF0YWJhc2U7XHJcbiAgICAgICAgdGhpcy5mZXRjaERhdGFGcm9tRGF0YWJhc2UoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQVBJJzpcclxuICAgICAgICB0aGlzLmFwaSA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQub3B0aW9uLmFwaTtcclxuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21BUEkoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gb3B0aW9uIHR5cGU6JywgdGhpcy5vcHRpb25UeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBzZWxlY3Rpb25UeXBlIGlzICdTSU5HTEUnLCBzZXQgbWluaW11bVNlbGVjdGlvbiBhbmQgbWF4aW11bVNlbGVjdGlvbiB0byAxXHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSAnU0lOR0xFJykge1xyXG4gICAgICB0aGlzLm1pbmltdW1TZWxlY3Rpb24gPSAxO1xyXG4gICAgICB0aGlzLm1heGltdW1TZWxlY3Rpb24gPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHNlbGVjdGlvblR5cGUgaXMgJ01VTFRJUExFJyBhbmQgbWluU2VsZWN0aW9uIGFuZCBtYXhTZWxlY3Rpb24gYXJlIG5vdCBzcGVjaWZpZWQsIHNldCB0aGVtIHRvIHVuZGVmaW5lZFxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdNVUxUSVBMRScgJiZcclxuICAgICAgIXRoaXMubWluaW11bVNlbGVjdGlvbiAmJlxyXG4gICAgICAhdGhpcy5tYXhpbXVtU2VsZWN0aW9uXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5taW5pbXVtU2VsZWN0aW9uID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLm1heGltdW1TZWxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrYm94Q2hhbmdlKG9wdGlvbjogYW55LCBldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSAnU0lOR0xFJykge1xyXG4gICAgICAvLyBDbGVhciBwcmV2aW91c2x5IHNlbGVjdGVkIG9wdGlvbnMgZm9yIHNpbmdsZSBzZWxlY3Rpb24gdHlwZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAvLyBBZGQgdGhlIHNlbGVjdGVkIG9wdGlvbiBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHRoZSBsaXN0XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICB0aGlzLmlzTWluaW11bVNlbGVjdGlvblZhbGlkKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlbW92ZSB0aGUgc2VsZWN0ZWQgb3B0aW9uXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgIChpdGVtKSA9PiBpdGVtICE9PSBvcHRpb25cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pc01pbmltdW1TZWxlY3Rpb25WYWxpZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgb3B0aW9ucyBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWRcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5tYXhpbXVtU2VsZWN0aW9uICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gdGhpcy5tYXhpbXVtU2VsZWN0aW9uXHJcbiAgICApIHtcclxuICAgICAgLy8gSWYgZXhjZWVkZWQsIHVuY2hlY2sgdGhlIGxhc3Qgc2VsZWN0ZWQgb3B0aW9uXHJcbiAgICAgIGV2ZW50LnRhcmdldC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIC8vIFJlbW92ZSB0aGUgdW5jaGVja2VkIG9wdGlvbiBmcm9tIHRoZSBzZWxlY3RlZE9wdGlvbnMgYXJyYXlcclxuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0gIT09IG9wdGlvblxyXG4gICAgICApO1xyXG4gICAgICAvLyBZb3UgY2FuIGFkZCBhIG1lc3NhZ2UgdG8gaW5mb3JtIHRoZSB1c2VyIGFib3V0IHRoZSBtYXhpbXVtIHNlbGVjdGlvbiBsaW1pdCBpZiBuZWVkZWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZldGNoRGF0YUZyb21Mb29rdXAoKSB7XHJcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZldGNoRGF0YUZyb21Mb29rdXAodGhpcy5sb29rdXBUYWJsZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSByZXNwb25zZS5yZXN1bHQudmFsdWVzLm1hcChcclxuICAgICAgICAgIChpdGVtOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSkgPT4gKHtcclxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdIVFRQIEVycm9yOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZldGNoRGF0YUZyb21EYXRhYmFzZSgpIHtcclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YWJhc2UgPSB0aGlzLnRyYW5zZm9ybURhdGFiYXNlT2JqZWN0KHRoaXMuZGF0YWJhc2UpO1xyXG4gICAgdGhpcy5mb3JtU2VydmljZS5mZXRjaERhdGFGcm9tRGF0YWJhc2UodHJhbnNmb3JtZWREYXRhYmFzZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gcmVzcG9uc2UucmVzdWx0Lm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9KSA9PiAoe1xyXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YSBmcm9tIGRhdGFiYXNlOicsIHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignSFRUUCBFcnJvcjonLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1EYXRhYmFzZU9iamVjdChkYXRhYmFzZTogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YWJsZU5hbWU6IGRhdGFiYXNlLnRhYmxlTmFtZSxcclxuICAgICAgdmFsdWVGaWVsZDogZGF0YWJhc2UudmFsdWVGaWVsZCxcclxuICAgICAgbGFiZWxGaWVsZDogZGF0YWJhc2UubGFiZWxGaWVsZCxcclxuICAgICAgY3JpdGVyaWE6IGRhdGFiYXNlLmNyaXRlcmlhLm1hcCgoY3JpdGVyaWE6IGFueSkgPT4gKHtcclxuICAgICAgICBmaWVsZDogY3JpdGVyaWEuZmllbGQsXHJcbiAgICAgICAgY29uZGl0aW9uOiBjcml0ZXJpYS5jb25kaXRpb24sXHJcbiAgICAgICAgdmFsdWU6IGNyaXRlcmlhLmlucHV0VmFsdWUsXHJcbiAgICAgICAgbG9naWNhbE9wZXJhdG9yOiBjcml0ZXJpYS5sb2dpY2FsT3BlcmF0b3IsXHJcbiAgICAgIH0pKSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmZXRjaERhdGFGcm9tQVBJKCkge1xyXG4gICAgY29uc3QgYXBpQ29uZmlnID0gdGhpcy5hcGk7XHJcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZldGNoRGF0YUZyb21FeHRlcm5hbEFQSShhcGlDb25maWcudXJsKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmV4dHJhY3REYXRhQnlQYXRoKHJlc3BvbnNlLCBhcGlDb25maWcucGF0aFRvVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IGRhdGEubWFwKChpdGVtOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICB2YWx1ZTogaXRlbVthcGlDb25maWcudmFsdWVGaWVsZF0sXHJcbiAgICAgICAgICBsYWJlbDogaXRlbVthcGlDb25maWcubGFiZWxGaWVsZF0sXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdIVFRQIEVycm9yOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGV4dHJhY3REYXRhQnlQYXRoKGRhdGE6IGFueSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGlzTWluaW11bVNlbGVjdGlvblZhbGlkKCkge1xyXG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09IDAgJiYgdGhpcy5yZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XHJcbiAgICAgIHRoaXMudmFsaWRhdGUuZW1pdCh0aGlzLnZhbGlkYXRpb25GYWlsZWQpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1pbmltdW1TZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoIDwgdGhpcy5taW5pbXVtU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gYE1pbmltdW0gJHt0aGlzLm1pbmltdW1TZWxlY3Rpb259ICBzZWxlY3Rpb24ocykgcmVxdWlyZWQuYDtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlLmVtaXQodGhpcy52YWxpZGF0aW9uRmFpbGVkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZS5lbWl0KHRoaXMudmFsaWRhdGlvbkZhaWxlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRPcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMub3B0aW9uVHlwZSA9PT0gJ09QVElPTicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tT3B0aW9ucztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25UeXBlID09PSAnTE9PS1VQJykge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmxvb2t1cFRhYmxlKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25UeXBlID09PSAnQVBJJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5hcGlPcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWVGaWVsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc09wdGlvbkRpc2FibGVkKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLm1heGltdW1TZWxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPj0gdGhpcy5tYXhpbXVtU2VsZWN0aW9uICYmXHJcbiAgICAgICF0aGlzLnNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtuZ0NsYXNzXT1cIidjb2wtJyArIGNvdW50XCIgY2xhc3M9XCJtYi01IHB4LTNcIj5cclxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlciBtYi0yXCI+XHJcbiAgICA8bGFiZWw+e3sgcXVlc3Rpb24ucXVlc3Rpb24gfX08L2xhYmVsXHJcbiAgICA+Jm5ic3A7XHJcbiAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJyZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwic3ZnLXdyYXBwZXIgbWItMiBoaW50SWNvblwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiaGludFwiXHJcbiAgICAgICpuZ0lmPVwiaGludFwiXHJcbiAgICA+XHJcbiAgICAgIDxzdmdcclxuICAgICAgICBjbGFzcz1cImhpbnRTdmdcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMzAgMzBcIlxyXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICBkPVwiTTE1IDI2LjI1VjI2LjI1QzguNzg2MjUgMjYuMjUgMy43NSAyMS4yMTM4IDMuNzUgMTVWMTVDMy43NSA4Ljc4NjI1IDguNzg2MjUgMy43NSAxNSAzLjc1VjMuNzVDMjEuMjEzOCAzLjc1IDI2LjI1IDguNzg2MjUgMjYuMjUgMTVWMTVDMjYuMjUgMjEuMjEzOCAyMS4yMTM4IDI2LjI1IDE1IDI2LjI1WlwiXHJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcclxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTE1IDE2LjU2MjNWMTYuMjQ5OEMxNSAxNS4yMjg1IDE1LjYzMTIgMTQuNjc0OCAxNi4yNjM3IDE0LjI0OThDMTYuODgxMiAxMy44MzM1IDE3LjUgMTMuMjkxIDE3LjUgMTIuMjkxQzE3LjUgMTAuOTA5OCAxNi4zODEzIDkuNzkxMDIgMTUgOS43OTEwMkMxMy42MTg3IDkuNzkxMDIgMTIuNSAxMC45MDk4IDEyLjUgMTIuMjkxXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxyXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNMTQuOTk4OCAyMEMxNC44MjYzIDIwIDE0LjY4NjMgMjAuMTQgMTQuNjg3NSAyMC4zMTI1QzE0LjY4NzUgMjAuNDg1IDE0LjgyNzUgMjAuNjI1IDE1IDIwLjYyNUMxNS4xNzI1IDIwLjYyNSAxNS4zMTI1IDIwLjQ4NSAxNS4zMTI1IDIwLjMxMjVDMTUuMzEyNSAyMC4xNCAxNS4xNzI1IDIwIDE0Ljk5ODggMjBcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXHJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY3VzdG9tT3B0aW9uc1wiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgIFtpZF09XCJvcHRpb24udmFsdWUgKyAnQ2hlY2tib3gnXCJcclxuICAgICAgW25hbWVdPVwib3B0aW9uLnZhbHVlICsgJ0NoZWNrYm94J1wiXHJcbiAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxyXG4gICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2Uob3B0aW9uLCAkZXZlbnQpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKVwiXHJcbiAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXCJcclxuICAgIC8+XHJcbiAgICA8bGFiZWxcclxuICAgICAgY2xhc3M9XCJmb3JtQ2hlY2tMYWJlbCBtcy0yIG1iLTJcIlxyXG4gICAgICBbZm9yXT1cIm9wdGlvbi52YWx1ZSArICdDaGVja2JveCdcIlxyXG4gICAgICAqbmdJZj1cIm9wdGlvblR5cGUgPT0gJ09QVElPTidcIlxyXG4gICAgICA+e3sgb3B0aW9uLnZhbHVlIH19PC9sYWJlbFxyXG4gICAgPlxyXG4gICAgPGxhYmVsXHJcbiAgICAgIGNsYXNzPVwiZm9ybUNoZWNrTGFiZWwgbXMtMiBtYi0yXCJcclxuICAgICAgW2Zvcl09XCJvcHRpb24udmFsdWUgKyAnQ2hlY2tib3gnXCJcclxuICAgICAgKm5nSWY9XCJvcHRpb25UeXBlID09ICdMT09LVVAnIHx8ICdEQVRBQkFTRScgfHwgJ0FQSSdcIlxyXG4gICAgICA+e3sgb3B0aW9uLmxhYmVsIH19PC9sYWJlbFxyXG4gICAgPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPlxyXG4gICAgPHN2Z1xyXG4gICAgICBjbGFzcz1cInZhbGlkYXRpb25TdmdcIlxyXG4gICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICA+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZD1cIk0xMi4wMDEgMTYuNzVDMTIuMTM5IDE2Ljc1IDEyLjI1MSAxNi42MzggMTIuMjUgMTYuNUMxMi4yNSAxNi4zNjIgMTIuMTM4IDE2LjI1IDEyIDE2LjI1QzExLjg2MiAxNi4yNSAxMS43NSAxNi4zNjIgMTEuNzUgMTYuNUMxMS43NSAxNi42MzggMTEuODYyIDE2Ljc1IDEyLjAwMSAxNi43NVwiXHJcbiAgICAgICAgc3Ryb2tlPVwid2hpdGVcIlxyXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAvPlxyXG4gICAgICA8cGF0aFxyXG4gICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgIGQ9XCJNMTIgMjFDNy4wMjkgMjEgMyAxNi45NzEgMyAxMkMzIDcuMDI5IDcuMDI5IDMgMTIgM0MxNi45NzEgMyAyMSA3LjAyOSAyMSAxMkMyMSAxNi45NzEgMTYuOTcxIDIxIDEyIDIxWlwiXHJcbiAgICAgICAgZmlsbD1cIiNGRjAwMDBcIlxyXG4gICAgICAgIHN0cm9rZT1cIiNGRjAwMDBcIlxyXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAvPlxyXG4gICAgICA8cGF0aFxyXG4gICAgICAgIGQ9XCJNMTIgMTIuNzVMMTIgNy43NVwiXHJcbiAgICAgICAgc3Ryb2tlPVwid2hpdGVcIlxyXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAvPlxyXG4gICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjE2XCIgcj1cIjFcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgPC9zdmc+XHJcbiAgICB7eyB2YWxpZGF0aW9uTWVzc2FnZSB9fVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|