survery-lib 0.1.59 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +52 -52
  2. package/assets/style.css +398 -398
  3. package/esm2022/lib/components/question-boolean-template/question-boolean-template.component.mjs +59 -54
  4. package/esm2022/lib/components/question-cascade-template/question-cascade-template.component.mjs +46 -20
  5. package/esm2022/lib/components/question-check-box-template/question-check-box-template.component.mjs +65 -55
  6. package/esm2022/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.mjs +62 -52
  7. package/esm2022/lib/components/question-dropdown-template/question-dropdown-template.component.mjs +54 -36
  8. package/esm2022/lib/components/question-matrix-template/question-matrix-template.component.mjs +67 -55
  9. package/esm2022/lib/components/question-radio-button-template/question-radio-button-template.component.mjs +62 -52
  10. package/esm2022/lib/components/question-text-template/question-text-template.component.mjs +77 -69
  11. package/esm2022/lib/core/states/entites/question-group.entity.mjs +8 -0
  12. package/esm2022/lib/core/states/entites/question.entity.mjs +8 -0
  13. package/esm2022/lib/core/states/entites/rule.entity.mjs +8 -0
  14. package/esm2022/lib/core/states/survey-store/question-group.selector.mjs +9 -0
  15. package/esm2022/lib/core/states/survey-store/question.selector.mjs +22 -0
  16. package/esm2022/lib/core/states/survey-store/survey.action.mjs +18 -0
  17. package/esm2022/lib/core/states/survey-store/survey.reducer.mjs +102 -0
  18. package/esm2022/lib/core/states/survey-store/survey.selector.mjs +33 -0
  19. package/esm2022/lib/directives/masked-for-min-max.directive.mjs +9 -6
  20. package/esm2022/lib/pipes/default-question-answer.pipe.mjs +1 -1
  21. package/esm2022/lib/pipes/default-question-answers.pipe.mjs +1 -1
  22. package/esm2022/lib/pipes/filter-question.pipe.mjs +3 -3
  23. package/esm2022/lib/pipes/find-question.pipe.mjs +19 -0
  24. package/esm2022/lib/pipes/text-box-type-attr.pipe.mjs +1 -1
  25. package/esm2022/lib/services/api.service.mjs +1 -1
  26. package/esm2022/lib/services/survey-lib.service.mjs +100 -51
  27. package/esm2022/lib/survery-lib.component.mjs +80 -285
  28. package/esm2022/lib/survery-lib.module.mjs +21 -7
  29. package/esm2022/lib/usecases/check-rule-exps.usecase.mjs +1 -1
  30. package/esm2022/public-api.mjs +1 -1
  31. package/esm2022/shared/form-interfaces/survery-lib.form-interface.mjs +1 -1
  32. package/fesm2022/survery-lib.mjs +840 -714
  33. package/fesm2022/survery-lib.mjs.map +1 -1
  34. package/lib/components/question-boolean-template/question-boolean-template.component.d.ts +7 -6
  35. package/lib/components/question-cascade-template/question-cascade-template.component.d.ts +9 -6
  36. package/lib/components/question-check-box-template/question-check-box-template.component.d.ts +7 -6
  37. package/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.d.ts +6 -6
  38. package/lib/components/question-dropdown-template/question-dropdown-template.component.d.ts +5 -2
  39. package/lib/components/question-matrix-template/question-matrix-template.component.d.ts +7 -6
  40. package/lib/components/question-radio-button-template/question-radio-button-template.component.d.ts +7 -6
  41. package/lib/components/question-text-template/question-text-template.component.d.ts +8 -7
  42. package/lib/core/states/entites/question-group.entity.d.ts +11 -0
  43. package/lib/core/states/entites/question.entity.d.ts +27 -0
  44. package/lib/core/states/entites/rule.entity.d.ts +8 -0
  45. package/lib/core/states/survey-store/question-group.selector.d.ts +4 -0
  46. package/lib/core/states/survey-store/question.selector.d.ts +7 -0
  47. package/lib/core/states/survey-store/survey.action.d.ts +54 -0
  48. package/lib/core/states/survey-store/survey.reducer.d.ts +12 -0
  49. package/lib/core/states/survey-store/survey.selector.d.ts +9 -0
  50. package/lib/pipes/filter-question.pipe.d.ts +2 -3
  51. package/lib/pipes/find-question.pipe.d.ts +8 -0
  52. package/lib/services/survey-lib.service.d.ts +4 -32
  53. package/lib/survery-lib.component.d.ts +15 -23
  54. package/lib/survery-lib.module.d.ts +9 -6
  55. package/lib/usecases/check-rule-exps.usecase.d.ts +2 -3
  56. package/package.json +1 -1
  57. package/shared/form-interfaces/survery-lib.form-interface.d.ts +3 -3
@@ -1,12 +1,15 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, Input } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
3
  import { QuestionTypeEnum } from '../../../shared/enums/question-type.enum';
4
- import { debounceTime, filter, map } from 'rxjs';
4
+ import { debounceTime, distinctUntilChanged, filter, map, pairwise } from 'rxjs';
5
5
  import { v4 as guidGenerator } from 'uuid';
6
+ import { surveyActions } from '../../core/states/survey-store/survey.action';
7
+ import { questionSelectors } from '../../core/states/survey-store/question.selector';
6
8
  import * as i0 from "@angular/core";
7
9
  import * as i1 from "@ng-stack/forms";
8
10
  import * as i2 from "../../services/survey-lib.service";
9
- import * as i3 from "@angular/common";
11
+ import * as i3 from "@ngrx/store";
12
+ import * as i4 from "@angular/common";
10
13
  export class QuestionBooleanTemplateComponent {
11
14
  get fCtrls() {
12
15
  return this.rForm.controls;
@@ -15,34 +18,35 @@ export class QuestionBooleanTemplateComponent {
15
18
  return QuestionTypeEnum;
16
19
  }
17
20
  set setQuestion(value) {
18
- this.surveyQuestion = value;
19
- this.rForm.patchValue({
20
- id: value.questionId,
21
- name: value.questionName,
22
- title: value.questionTitle,
23
- typeId: value.questionTypeId,
24
- description: value.questionDescription,
25
- isDisabled: value.isReadOnly,
26
- isShow: value.isVisable
27
- });
28
- console.log(value.surveyAnswers);
29
- value.surveyAnswers.forEach(surveryAnswer => {
30
- this.fCtrls.answerArray.push(this._formBuilder.group({
31
- id: [surveryAnswer.answerId],
32
- title: [surveryAnswer.answerTitle],
33
- isSelected: [false]
34
- }));
35
- });
36
- if (value.isRequired == true) {
37
- this.fCtrls.answer.addValidators([Validators.required]);
38
- this.fCtrls.answer.updateValueAndValidity();
21
+ if (!this.surveyQuestion) {
22
+ this.surveyQuestion = value.questionAllInfo;
23
+ this.rForm.patchValue({
24
+ id: value.questionId,
25
+ name: value.questionAllInfo.questionName,
26
+ title: value.questionAllInfo.questionTitle,
27
+ typeId: value.questionAllInfo.questionTypeId,
28
+ description: value.questionAllInfo.questionDescription,
29
+ isDisabled: value.questionAllInfo.isReadOnly,
30
+ isShow: value.questionAllInfo.isVisable
31
+ });
32
+ value.questionAllInfo.surveyAnswers.forEach(surveryAnswer => {
33
+ this.fCtrls.answerArray.push(this._formBuilder.group({
34
+ id: [surveryAnswer.answerId],
35
+ title: [surveryAnswer.answerTitle],
36
+ isSelected: [false]
37
+ }));
38
+ });
39
+ if (value.isRequired == true) {
40
+ this.fCtrls.answer.addValidators([Validators.required]);
41
+ this.fCtrls.answer.updateValueAndValidity();
42
+ }
39
43
  }
40
44
  }
41
- constructor(_formBuilder, _surveyLibService) {
45
+ constructor(_formBuilder, _surveyLibService, _Store) {
42
46
  this._formBuilder = _formBuilder;
43
47
  this._surveyLibService = _surveyLibService;
48
+ this._Store = _Store;
44
49
  this.elemId = guidGenerator();
45
- this.emitter = new EventEmitter();
46
50
  this.rForm = this._formBuilder.group({
47
51
  id: [null],
48
52
  name: [null],
@@ -56,30 +60,33 @@ export class QuestionBooleanTemplateComponent {
56
60
  });
57
61
  }
58
62
  ngOnInit() {
59
- this.fCtrls.answer.valueChanges.pipe().pipe(debounceTime(200)).subscribe(value => {
63
+ this.fCtrls.answer.valueChanges.pipe().pipe(debounceTime(200), distinctUntilChanged()).subscribe(value => {
60
64
  const formValue = this.rForm.value;
61
- this.emitter.emit({
62
- QuestionId: formValue.id,
63
- IsValid: this.fCtrls.answer.valid,
64
- Answer: value
65
- });
65
+ this._Store.dispatch(surveyActions.updateQuestionAnswer({
66
+ questionId: formValue.id,
67
+ answer: value,
68
+ isValid: this.fCtrls.answer.valid
69
+ }));
66
70
  });
67
- this.fCtrls.answer.setValue(null);
68
- this._surveyLibService.surveyAnswersObsrv
69
- .pipe(map(x => x.defaultAnswers.filter(x => x.QuestionId == this.fCtrls.id.value)))
70
- .pipe(filter(x => x.length > 0)).pipe(map(x => x.at(0)))
71
- .subscribe(answer => {
72
- this.fCtrls.answer.setValue(answer.AnswerId);
73
- const groupIndex = this.fCtrls.answerArray.value.findIndex(x => x.id == answer.AnswerId);
74
- if (groupIndex > -1) {
75
- this.fCtrls.answerArray.at(groupIndex).controls.isSelected.setValue(true);
71
+ this._Store.select(questionSelectors.pageQuestions).pipe(map(arr => arr.find(x => x.questionId == this.fCtrls.id.value)))
72
+ .pipe(filter(x => x != null), pairwise()).subscribe(value => {
73
+ const oldValue = value[0];
74
+ const newValue = value[1];
75
+ //updated answer
76
+ if (oldValue?.answerId != newValue?.answerId) {
77
+ this.fCtrls.answer.setValue(newValue?.answerId, { emitEvent: false });
78
+ }
79
+ //updated isDisabled
80
+ if (oldValue?.isDisabled != newValue?.isDisabled) {
81
+ this.fCtrls.isDisabled.setValue(newValue?.isDisabled);
82
+ }
83
+ //updated isShow
84
+ if (oldValue?.isShow != newValue?.isShow) {
85
+ this.fCtrls.isShow.setValue(newValue?.isShow);
86
+ if (newValue?.isShow == false) {
87
+ this.fCtrls.answer.setValue(null);
88
+ }
76
89
  }
77
- });
78
- this._surveyLibService.questionIsDisabledObsrv.pipe(filter(x => x.questionId == this.fCtrls.id.value)).subscribe(x => {
79
- this.fCtrls.isDisabled.setValue(x.isDisabled);
80
- });
81
- this._surveyLibService.questionIsShowObsrv.pipe(filter(x => x.questionId == this.fCtrls.id.value)).subscribe(x => {
82
- this.fCtrls.isShow.setValue(x.isShow);
83
90
  });
84
91
  }
85
92
  onChangeAnswer(item) {
@@ -88,15 +95,13 @@ export class QuestionBooleanTemplateComponent {
88
95
  convertToFormControl(element) {
89
96
  return element;
90
97
  }
91
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: QuestionBooleanTemplateComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SurveyLibService }], target: i0.ɵɵFactoryTarget.Component }); }
92
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: QuestionBooleanTemplateComponent, selector: "lib-question-boolean-template", inputs: { setQuestion: "setQuestion" }, outputs: { emitter: "emitter" }, ngImport: i0, template: "<div class=\"quastion\" [attr.id]=\"'question_'+fCtrls.id.value\"\n [ngClass]=\"{'invalid-question': fCtrls.answer.invalid , 'd-none':fCtrls.isShow.value != true}\">\n <h3 class=\"quastion-title \">\n <span [innerHTML]=\"fCtrls.title.value\"></span>\n <span style=\"color: red;\" *ngIf=\"surveyQuestion.isRequired\">*</span>\n </h3>\n <div class=\"radio-button-quastion\">\n <div class=\"form-check form-check-radio form-check-inline\"\n *ngFor=\"let item of fCtrls.answerArray.controls ;let i = index\">\n <input class=\"form-check-input\" type=\"radio\" (change)=\"onChangeAnswer(item.value)\"\n [disabled]=\"fCtrls.isDisabled.value\" name=\"{{elemId}}__radio-btn-option\"\n id=\"{{elemId}}__radio-btn_{{i}}\" [checked]=\"item.value.isSelected == true? true : null\">\n <label class=\"form-check-label\" for=\"{{elemId}}__radio-btn_{{i}}\">{{item.value.title}}</label>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: QuestionBooleanTemplateComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SurveyLibService }, { token: i3.Store }], target: i0.ɵɵFactoryTarget.Component }); }
99
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: QuestionBooleanTemplateComponent, selector: "lib-question-boolean-template", inputs: { setQuestion: "setQuestion" }, ngImport: i0, template: "<div class=\"quastion\" [attr.id]=\"'question_'+fCtrls.id.value\"\r\n [ngClass]=\"{'invalid-question': fCtrls.answer.invalid , 'd-none':fCtrls.isShow.value != true}\">\r\n <h3 class=\"quastion-title \">\r\n <span [innerHTML]=\"fCtrls.title.value\"></span>\r\n <span style=\"color: red;\" *ngIf=\"surveyQuestion.isRequired\">*</span>\r\n </h3>\r\n <div class=\"radio-button-quastion\">\r\n <div class=\"form-check form-check-radio form-check-inline\"\r\n *ngFor=\"let item of fCtrls.answerArray.controls ;let i = index\">\r\n <input class=\"form-check-input\" type=\"radio\" (change)=\"onChangeAnswer(item.value)\"\r\n [disabled]=\"fCtrls.isDisabled.value\" name=\"{{elemId}}__radio-btn-option\"\r\n id=\"{{elemId}}__radio-btn_{{i}}\" [checked]=\"item.value.isSelected == true? true : null\">\r\n <label class=\"form-check-label\" for=\"{{elemId}}__radio-btn_{{i}}\">{{item.value.title}}</label>\r\n </div>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
93
100
  }
94
101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: QuestionBooleanTemplateComponent, decorators: [{
95
102
  type: Component,
96
- args: [{ selector: 'lib-question-boolean-template', template: "<div class=\"quastion\" [attr.id]=\"'question_'+fCtrls.id.value\"\n [ngClass]=\"{'invalid-question': fCtrls.answer.invalid , 'd-none':fCtrls.isShow.value != true}\">\n <h3 class=\"quastion-title \">\n <span [innerHTML]=\"fCtrls.title.value\"></span>\n <span style=\"color: red;\" *ngIf=\"surveyQuestion.isRequired\">*</span>\n </h3>\n <div class=\"radio-button-quastion\">\n <div class=\"form-check form-check-radio form-check-inline\"\n *ngFor=\"let item of fCtrls.answerArray.controls ;let i = index\">\n <input class=\"form-check-input\" type=\"radio\" (change)=\"onChangeAnswer(item.value)\"\n [disabled]=\"fCtrls.isDisabled.value\" name=\"{{elemId}}__radio-btn-option\"\n id=\"{{elemId}}__radio-btn_{{i}}\" [checked]=\"item.value.isSelected == true? true : null\">\n <label class=\"form-check-label\" for=\"{{elemId}}__radio-btn_{{i}}\">{{item.value.title}}</label>\n </div>\n </div>\n</div>" }]
97
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SurveyLibService }]; }, propDecorators: { emitter: [{
98
- type: Output
99
- }], setQuestion: [{
103
+ args: [{ selector: 'lib-question-boolean-template', template: "<div class=\"quastion\" [attr.id]=\"'question_'+fCtrls.id.value\"\r\n [ngClass]=\"{'invalid-question': fCtrls.answer.invalid , 'd-none':fCtrls.isShow.value != true}\">\r\n <h3 class=\"quastion-title \">\r\n <span [innerHTML]=\"fCtrls.title.value\"></span>\r\n <span style=\"color: red;\" *ngIf=\"surveyQuestion.isRequired\">*</span>\r\n </h3>\r\n <div class=\"radio-button-quastion\">\r\n <div class=\"form-check form-check-radio form-check-inline\"\r\n *ngFor=\"let item of fCtrls.answerArray.controls ;let i = index\">\r\n <input class=\"form-check-input\" type=\"radio\" (change)=\"onChangeAnswer(item.value)\"\r\n [disabled]=\"fCtrls.isDisabled.value\" name=\"{{elemId}}__radio-btn-option\"\r\n id=\"{{elemId}}__radio-btn_{{i}}\" [checked]=\"item.value.isSelected == true? true : null\">\r\n <label class=\"form-check-label\" for=\"{{elemId}}__radio-btn_{{i}}\">{{item.value.title}}</label>\r\n </div>\r\n </div>\r\n</div>" }]
104
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SurveyLibService }, { type: i3.Store }]; }, propDecorators: { setQuestion: [{
100
105
  type: Input
101
106
  }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS9xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N1cnZlcnktbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlL3F1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHNUUsT0FBTyxFQUFFLFlBQVksRUFBd0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2RSxPQUFPLEVBQUUsRUFBRSxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFVM0MsTUFBTSxPQUFPLGdDQUFnQztJQUszQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFJRCxJQUFhLFdBQVcsQ0FBQyxLQUF3QjtRQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNwQixFQUFFLEVBQUUsS0FBSyxD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Q0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUEsRUFBRTtZQUM1RyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUF1RDtRQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFZO1FBQy9CLE9BQU8sT0FBc0IsQ0FBQztJQUNoQyxDQUFDOzhHQS9GVSxnQ0FBZ0M7a0dBQWhDLGdDQUFnQyw4SUNuQjdDLDYrQkFlTTs7MkZESU8sZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLCtCQUErQjtpSUFpQi9CLE9BQU87c0JBQWhCLE1BQU07Z0JBRU0sV0FBVztzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHRvIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2R0b3Mvc3VydmV5LXF1ZXN0aW9uLmR0byc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZW51bXMvcXVlc3Rpb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgUXVlc3Rpb25SYWRpb0J1dHRvblRlbXBsYXRlRm9ybUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mb3JtLWludGVyZmFjZXMvcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlLmZvcm0taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUXVlc3Rpb25BbnN3ZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvcXVlc3Rpb24tYW5zd2VyLm1vZGVsJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQW5zd2VyQ2hpbGRPZlF1ZXN0aW9uQm9vbGVhblRlbXBsYXRlRm9ybUludGVyZmFjZSwgUXVlc3Rpb25Cb29sZWFuVGVtcGxhdGVGb3JtSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Zvcm0taW50ZXJmYWNlcy9xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlLmZvcm0taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0BuZy1zdGFjay9mb3Jtcyc7XHJcbmltcG9ydCB7IHY0IGFzIGd1aWRHZW5lcmF0b3IgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgU3VydmV5QW5zd2VyRHRvIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2R0b3Mvc3VydmV5LWFuc3dlci5kdG8nO1xyXG5pbXBvcnQgeyBEZWZhdWx0UXVlc3Rpb25BbnN3ZXJEdG8gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZHRvcy9kZWZhdWx0LXF1ZXN0aW9uLWFuc3dlcnMuZHRvJztcclxuaW1wb3J0IHsgU3VydmV5TGliU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N1cnZleS1saWIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZWxlbUlkID0gZ3VpZEdlbmVyYXRvcigpIGFzIHN0cmluZztcclxuICBzdXJ2ZXlRdWVzdGlvbjogU3VydmV5UXVlc3Rpb25EdG87XHJcbiAgckZvcm06IEZvcm1Hcm91cDxRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUZvcm1JbnRlcmZhY2U+O1xyXG5cclxuICBnZXQgZkN0cmxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuckZvcm0uY29udHJvbHM7XHJcbiAgfVxyXG5cclxuICBnZXQgcXVlc3Rpb25UeXBlRW51bSgpIHtcclxuICAgIHJldHVybiBRdWVzdGlvblR5cGVFbnVtO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXN0aW9uQW5zd2VyTW9kZWw+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzZXRRdWVzdGlvbih2YWx1ZTogU3VydmV5UXVlc3Rpb25EdG8pIHtcclxuICAgIHRoaXMuc3VydmV5UXVlc3Rpb24gPSB2YWx1ZTtcclxuICAgIHRoaXMuckZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIGlkOiB2YWx1ZS5xdWVzdGlvbklkLFxyXG4gICAgICBuYW1lOiB2YWx1ZS5xdWVzdGlvbk5hbWUsXHJcbiAgICAgIHRpdGxlOiB2YWx1ZS5xdWVzdGlvblRpdGxlLFxyXG4gICAgICB0eXBlSWQ6IHZhbHVlLnF1ZXN0aW9uVHlwZUlkLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdmFsdWUucXVlc3Rpb25EZXNjcmlwdGlvbiAsXHJcbiAgICAgIGlzRGlzYWJsZWQ6IHZhbHVlLmlzUmVhZE9ubHksXHJcbiAgICAgIGlzU2hvdzogdmFsdWUuaXNWaXNhYmxlXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyh2YWx1ZS5zdXJ2ZXlBbnN3ZXJzKTtcclxuICAgIHZhbHVlLnN1cnZleUFuc3dlcnMuZm9yRWFjaChzdXJ2ZXJ5QW5zd2VyID0+IHtcclxuICAgICAgdGhpcy5mQ3RybHMuYW5zd2VyQXJyYXkucHVzaCh0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxBbnN3ZXJDaGlsZE9mUXVlc3Rpb25Cb29sZWFuVGVtcGxhdGVGb3JtSW50ZXJmYWNlPih7XHJcbiAgICAgICAgaWQ6IFtzdXJ2ZXJ5QW5zd2VyLmFuc3dlcklkXSxcclxuICAgICAgICB0aXRsZTogW3N1cnZlcnlBbnN3ZXIuYW5zd2VyVGl0bGVdLFxyXG4gICAgICAgIGlzU2VsZWN0ZWQ6IFtmYWxzZV1cclxuICAgICAgfSkpXHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh2YWx1ZS5pc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgdGhpcy5mQ3RybHMuYW5zd2VyLmFkZFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuICAgICAgdGhpcy5mQ3RybHMuYW5zd2VyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciAgLCBwcml2YXRlIF9zdXJ2ZXlMaWJTZXJ2aWNlOlN1cnZleUxpYlNlcnZpY2UpIHtcclxuICAgIHRoaXMuckZvcm0gPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUZvcm1JbnRlcmZhY2U+KHtcclxuICAgICAgaWQ6IFtudWxsXSxcclxuICAgICAgbmFtZTogW251bGxdLFxyXG4gICAgICB0aXRsZTogW251bGxdLFxyXG4gICAgICB0eXBlSWQ6IFtudWxsXSxcclxuICAgICAgZGVzY3JpcHRpb246IFtudWxsXSxcclxuICAgICAgYW5zd2VyOiBbbnVsbF0sXHJcbiAgICAgIGFuc3dlckFycmF5OiB0aGlzLl9mb3JtQnVpbGRlci5hcnJheTxBbnN3ZXJDaGlsZE9mUXVlc3Rpb25Cb29sZWFuVGVtcGxhdGVGb3JtSW50ZXJmYWNlPihbXSkgLFxyXG4gICAgICBpc0Rpc2FibGVkOltmYWxzZV0sXHJcbiAgICAgIGlzU2hvdyA6IFt0cnVlXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZkN0cmxzLmFuc3dlci52YWx1ZUNoYW5nZXMucGlwZSgpLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuckZvcm0udmFsdWU7XHJcbiAgICAgIHRoaXMuZW1pdHRlci5lbWl0KHtcclxuICAgICAgICBRdWVzdGlvbklkOiBmb3JtVmFsdWUuaWQsXHJcbiAgICAgICAgSXNWYWxpZDogdGhpcy5mQ3RybHMuYW5zd2VyLnZhbGlkLFxyXG4gICAgICAgIEFuc3dlcjogdmFsdWVcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZkN0cmxzLmFuc3dlci5zZXRWYWx1ZShudWxsKTtcclxuXHJcbiAgICB0aGlzLl9zdXJ2ZXlMaWJTZXJ2aWNlLnN1cnZleUFuc3dlcnNPYnNydlxyXG4gICAgLnBpcGUobWFwKHg9PiB4LmRlZmF1bHRBbnN3ZXJzLmZpbHRlcih4PT54LlF1ZXN0aW9uSWQgPT0gdGhpcy5mQ3RybHMuaWQudmFsdWUpKSlcclxuICAgIC5waXBlKGZpbHRlcih4PT54Lmxlbmd0aCAgPiAwKSkucGlwZShtYXAoeD0+IHguYXQoMCkpKVxyXG4gICAgLnN1YnNjcmliZShhbnN3ZXI9PntcclxuICAgICAgdGhpcy5mQ3RybHMuYW5zd2VyLnNldFZhbHVlKGFuc3dlci5BbnN3ZXJJZCk7XHJcblxyXG4gICAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5mQ3RybHMuYW5zd2VyQXJyYXkudmFsdWUuZmluZEluZGV4KHggPT4geC5pZCA9PSBhbnN3ZXIuQW5zd2VySWQpO1xyXG4gICAgICBpZihncm91cEluZGV4ID4gLTEpe1xyXG4gICAgICB0aGlzLmZDdHJscy5hbnN3ZXJBcnJheS5hdChncm91cEluZGV4KS5jb250cm9scy5pc1NlbGVjdGVkLnNldFZhbHVlKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdXJ2ZXlMaWJTZXJ2aWNlLnF1ZXN0aW9uSXNEaXNhYmxlZE9ic3J2LnBpcGUoZmlsdGVyKHg9PngucXVlc3Rpb25JZCA9PSB0aGlzLmZDdHJscy5pZC52YWx1ZSkpLnN1YnNjcmliZSh4PT57XHJcbiAgICAgIHRoaXMuZkN0cmxzLmlzRGlzYWJsZWQuc2V0VmFsdWUoeC5pc0Rpc2FibGVkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3N1cnZleUxpYlNlcnZpY2UucXVlc3Rpb25Jc1Nob3dPYnNydi5waXBlKGZpbHRlcih4PT54LnF1ZXN0aW9uSWQgPT0gdGhpcy5mQ3RybHMuaWQudmFsdWUpKS5zdWJzY3JpYmUoeD0+e1xyXG4gICAgICB0aGlzLmZDdHJscy5pc1Nob3cuc2V0VmFsdWUoeC5pc1Nob3cpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUFuc3dlcihpdGVtOiBBbnN3ZXJDaGlsZE9mUXVlc3Rpb25Cb29sZWFuVGVtcGxhdGVGb3JtSW50ZXJmYWNlKSB7XHJcbiAgICB0aGlzLmZDdHJscy5hbnN3ZXIuc2V0VmFsdWUoaXRlbS5pZCk7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9Gb3JtQ29udHJvbChlbGVtZW50OiBhbnkpIHtcclxuICAgIHJldHVybiBlbGVtZW50IGFzIEZvcm1Db250cm9sO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicXVhc3Rpb25cIiBbYXR0ci5pZF09XCIncXVlc3Rpb25fJytmQ3RybHMuaWQudmFsdWVcIlxuICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1xdWVzdGlvbic6IGZDdHJscy5hbnN3ZXIuaW52YWxpZCAgLCAnZC1ub25lJzpmQ3RybHMuaXNTaG93LnZhbHVlICE9IHRydWV9XCI+XG4gICAgPGgzIGNsYXNzPVwicXVhc3Rpb24tdGl0bGUgXCI+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZkN0cmxzLnRpdGxlLnZhbHVlXCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiByZWQ7XCIgKm5nSWY9XCJzdXJ2ZXlRdWVzdGlvbi5pc1JlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICA8L2gzPlxuICAgIDxkaXYgY2xhc3M9XCJyYWRpby1idXR0b24tcXVhc3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1yYWRpbyBmb3JtLWNoZWNrLWlubGluZVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmQ3RybHMuYW5zd2VyQXJyYXkuY29udHJvbHMgO2xldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwicmFkaW9cIiAoY2hhbmdlKT1cIm9uQ2hhbmdlQW5zd2VyKGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZkN0cmxzLmlzRGlzYWJsZWQudmFsdWVcIiBuYW1lPVwie3tlbGVtSWR9fV9fcmFkaW8tYnRuLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJ7e2VsZW1JZH19X19yYWRpby1idG5fe3tpfX1cIiBbY2hlY2tlZF09XCJpdGVtLnZhbHVlLmlzU2VsZWN0ZWQgPT0gdHJ1ZT8gdHJ1ZSA6IG51bGxcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJ7e2VsZW1JZH19X19yYWRpby1idG5fe3tpfX1cIj57e2l0ZW0udmFsdWUudGl0bGV9fTwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS9xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N1cnZlcnktbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlL3F1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsS0FBSyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQVEsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd2RixPQUFPLEVBQUUsRUFBRSxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU0zQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7OztBQU9yRixNQUFNLE9BQU8sZ0NBQWdDO0lBSzNDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQWEsV0FBVyxDQUFDLEtBQXdCO1FB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QUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRTlDLElBQUksUUFBUSxFQUFFLE1BQU0sSUFBSSxLQUFLLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDbkM7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUF1RDtRQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFZO1FBQy9CLE9BQU8sT0FBc0IsQ0FBQztJQUNoQyxDQUFDOzhHQWxHVSxnQ0FBZ0M7a0dBQWhDLGdDQUFnQyw2R0N2QjdDLDJnQ0FlTTs7MkZEUU8sZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLCtCQUErQjtxSkFpQjVCLFdBQVc7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkR0byB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kdG9zL3N1cnZleS1xdWVzdGlvbi5kdG8nO1xyXG5pbXBvcnQgeyBRdWVzdGlvblR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2VudW1zL3F1ZXN0aW9uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uUmFkaW9CdXR0b25UZW1wbGF0ZUZvcm1JbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS1pbnRlcmZhY2VzL3F1ZXN0aW9uLXJhZGlvLWJ1dHRvbi10ZW1wbGF0ZS5mb3JtLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uQW5zd2VyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL3F1ZXN0aW9uLWFuc3dlci5tb2RlbCc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmluZCwgbWFwLCBwYWlyd2lzZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBbnN3ZXJDaGlsZE9mUXVlc3Rpb25Cb29sZWFuVGVtcGxhdGVGb3JtSW50ZXJmYWNlLCBRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUZvcm1JbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS1pbnRlcmZhY2VzL3F1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGUuZm9ybS1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQG5nLXN0YWNrL2Zvcm1zJztcclxuaW1wb3J0IHsgdjQgYXMgZ3VpZEdlbmVyYXRvciB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlBbnN3ZXJEdG8gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZHRvcy9zdXJ2ZXktYW5zd2VyLmR0byc7XHJcbmltcG9ydCB7IERlZmF1bHRRdWVzdGlvbkFuc3dlckR0byB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kdG9zL2RlZmF1bHQtcXVlc3Rpb24tYW5zd2Vycy5kdG8nO1xyXG5pbXBvcnQgeyBTdXJ2ZXlMaWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3VydmV5LWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUXVlc3Rpb25OZ3J4TW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL3N0YXRlcy9lbnRpdGVzL3F1ZXN0aW9uLmVudGl0eSc7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5pbXBvcnQgeyBzdXJ2ZXlBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdGF0ZXMvc3VydmV5LXN0b3JlL3N1cnZleS5hY3Rpb24nO1xyXG5pbXBvcnQgeyBxdWVzdGlvblNlbGVjdG9ycyB9IGZyb20gJy4uLy4uL2NvcmUvc3RhdGVzL3N1cnZleS1zdG9yZS9xdWVzdGlvbi5zZWxlY3Rvcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZWxlbUlkID0gZ3VpZEdlbmVyYXRvcigpIGFzIHN0cmluZztcclxuICBzdXJ2ZXlRdWVzdGlvbjogU3VydmV5UXVlc3Rpb25EdG87XHJcbiAgckZvcm06IEZvcm1Hcm91cDxRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUZvcm1JbnRlcmZhY2U+O1xyXG5cclxuICBnZXQgZkN0cmxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuckZvcm0uY29udHJvbHM7XHJcbiAgfVxyXG5cclxuICBnZXQgcXVlc3Rpb25UeXBlRW51bSgpIHtcclxuICAgIHJldHVybiBRdWVzdGlvblR5cGVFbnVtO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHNldFF1ZXN0aW9uKHZhbHVlOiBRdWVzdGlvbk5ncnhNb2RlbCkge1xyXG4gICAgaWYgKCF0aGlzLnN1cnZleVF1ZXN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3VydmV5UXVlc3Rpb24gPSB2YWx1ZS5xdWVzdGlvbkFsbEluZm87XHJcbiAgICAgIHRoaXMuckZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgaWQ6IHZhbHVlLnF1ZXN0aW9uSWQsXHJcbiAgICAgICAgbmFtZTogdmFsdWUucXVlc3Rpb25BbGxJbmZvLnF1ZXN0aW9uTmFtZSxcclxuICAgICAgICB0aXRsZTogdmFsdWUucXVlc3Rpb25BbGxJbmZvLnF1ZXN0aW9uVGl0bGUsXHJcbiAgICAgICAgdHlwZUlkOiB2YWx1ZS5xdWVzdGlvbkFsbEluZm8ucXVlc3Rpb25UeXBlSWQsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IHZhbHVlLnF1ZXN0aW9uQWxsSW5mby5xdWVzdGlvbkRlc2NyaXB0aW9uLFxyXG4gICAgICAgIGlzRGlzYWJsZWQ6IHZhbHVlLnF1ZXN0aW9uQWxsSW5mby5pc1JlYWRPbmx5LFxyXG4gICAgICAgIGlzU2hvdzogdmFsdWUucXVlc3Rpb25BbGxJbmZvLmlzVmlzYWJsZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHZhbHVlLnF1ZXN0aW9uQWxsSW5mby5zdXJ2ZXlBbnN3ZXJzLmZvckVhY2goc3VydmVyeUFuc3dlciA9PiB7XHJcbiAgICAgICAgdGhpcy5mQ3RybHMuYW5zd2VyQXJyYXkucHVzaCh0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxBbnN3ZXJDaGlsZE9mUXVlc3Rpb25Cb29sZWFuVGVtcGxhdGVGb3JtSW50ZXJmYWNlPih7XHJcbiAgICAgICAgICBpZDogW3N1cnZlcnlBbnN3ZXIuYW5zd2VySWRdLFxyXG4gICAgICAgICAgdGl0bGU6IFtzdXJ2ZXJ5QW5zd2VyLmFuc3dlclRpdGxlXSxcclxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IFtmYWxzZV1cclxuICAgICAgICB9KSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmICh2YWx1ZS5pc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICB0aGlzLmZDdHJscy5hbnN3ZXIuYWRkVmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICAgIHRoaXMuZkN0cmxzLmFuc3dlci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBfc3VydmV5TGliU2VydmljZTogU3VydmV5TGliU2VydmljZSxcclxuICAgIHByaXZhdGUgX1N0b3JlOiBTdG9yZSkge1xyXG4gICAgdGhpcy5yRm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFF1ZXN0aW9uQm9vbGVhblRlbXBsYXRlRm9ybUludGVyZmFjZT4oe1xyXG4gICAgICBpZDogW251bGxdLFxyXG4gICAgICBuYW1lOiBbbnVsbF0sXHJcbiAgICAgIHRpdGxlOiBbbnVsbF0sXHJcbiAgICAgIHR5cGVJZDogW251bGxdLFxyXG4gICAgICBkZXNjcmlwdGlvbjogW251bGxdLFxyXG4gICAgICBhbnN3ZXI6IFtudWxsXSxcclxuICAgICAgYW5zd2VyQXJyYXk6IHRoaXMuX2Zvcm1CdWlsZGVyLmFycmF5PEFuc3dlckNoaWxkT2ZRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUZvcm1JbnRlcmZhY2U+KFtdKSxcclxuICAgICAgaXNEaXNhYmxlZDogW2ZhbHNlXSxcclxuICAgICAgaXNTaG93OiBbdHJ1ZV1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZDdHJscy5hbnN3ZXIudmFsdWVDaGFuZ2VzLnBpcGUoKS5waXBlKGRlYm91bmNlVGltZSgyMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnJGb3JtLnZhbHVlO1xyXG4gICAgICB0aGlzLl9TdG9yZS5kaXNwYXRjaChzdXJ2ZXlBY3Rpb25zLnVwZGF0ZVF1ZXN0aW9uQW5zd2VyKHtcclxuICAgICAgICBxdWVzdGlvbklkOiBmb3JtVmFsdWUuaWQsXHJcbiAgICAgICAgYW5zd2VyOiB2YWx1ZSxcclxuICAgICAgICBpc1ZhbGlkOiB0aGlzLmZDdHJscy5hbnN3ZXIudmFsaWRcclxuICAgICAgfSkpXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9TdG9yZS5zZWxlY3QocXVlc3Rpb25TZWxlY3RvcnMucGFnZVF1ZXN0aW9ucykucGlwZShtYXAoYXJyID0+IGFyci5maW5kKHggPT4geC5xdWVzdGlvbklkID09IHRoaXMuZkN0cmxzLmlkLnZhbHVlKSkpXHJcbiAgICAgIC5waXBlKGZpbHRlcih4ID0+IHggIT0gbnVsbCksIHBhaXJ3aXNlKCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB2YWx1ZVswXTtcclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHZhbHVlWzFdO1xyXG5cclxuICAgICAgICAvL3VwZGF0ZWQgYW5zd2VyXHJcbiAgICAgICAgaWYgKG9sZFZhbHVlPy5hbnN3ZXJJZCAhPSBuZXdWYWx1ZT8uYW5zd2VySWQpIHtcclxuICAgICAgICAgIHRoaXMuZkN0cmxzLmFuc3dlci5zZXRWYWx1ZShuZXdWYWx1ZT8uYW5zd2VySWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdXBkYXRlZCBpc0Rpc2FibGVkXHJcbiAgICAgICAgaWYgKG9sZFZhbHVlPy5pc0Rpc2FibGVkICE9IG5ld1ZhbHVlPy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZDdHJscy5pc0Rpc2FibGVkLnNldFZhbHVlKG5ld1ZhbHVlPy5pc0Rpc2FibGVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vdXBkYXRlZCBpc1Nob3dcclxuICAgICAgICBpZiAob2xkVmFsdWU/LmlzU2hvdyAhPSBuZXdWYWx1ZT8uaXNTaG93KSB7XHJcbiAgICAgICAgICB0aGlzLmZDdHJscy5pc1Nob3cuc2V0VmFsdWUobmV3VmFsdWU/LmlzU2hvdyk7XHJcblxyXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy5pc1Nob3cgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5mQ3RybHMuYW5zd2VyLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlQW5zd2VyKGl0ZW06IEFuc3dlckNoaWxkT2ZRdWVzdGlvbkJvb2xlYW5UZW1wbGF0ZUZvcm1JbnRlcmZhY2UpIHtcclxuICAgIHRoaXMuZkN0cmxzLmFuc3dlci5zZXRWYWx1ZShpdGVtLmlkKTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0Zvcm1Db250cm9sKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQgYXMgRm9ybUNvbnRyb2w7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJxdWFzdGlvblwiIFthdHRyLmlkXT1cIidxdWVzdGlvbl8nK2ZDdHJscy5pZC52YWx1ZVwiXHJcbiAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtcXVlc3Rpb24nOiBmQ3RybHMuYW5zd2VyLmludmFsaWQgICwgJ2Qtbm9uZSc6ZkN0cmxzLmlzU2hvdy52YWx1ZSAhPSB0cnVlfVwiPlxyXG4gICAgPGgzIGNsYXNzPVwicXVhc3Rpb24tdGl0bGUgXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJmQ3RybHMudGl0bGUudmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkO1wiICpuZ0lmPVwic3VydmV5UXVlc3Rpb24uaXNSZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICA8L2gzPlxyXG4gICAgPGRpdiBjbGFzcz1cInJhZGlvLWJ1dHRvbi1xdWFzdGlvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2stcmFkaW8gZm9ybS1jaGVjay1pbmxpbmVcIlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmQ3RybHMuYW5zd2VyQXJyYXkuY29udHJvbHMgO2xldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIChjaGFuZ2UpPVwib25DaGFuZ2VBbnN3ZXIoaXRlbS52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZDdHJscy5pc0Rpc2FibGVkLnZhbHVlXCIgbmFtZT1cInt7ZWxlbUlkfX1fX3JhZGlvLWJ0bi1vcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJ7e2VsZW1JZH19X19yYWRpby1idG5fe3tpfX1cIiBbY2hlY2tlZF09XCJpdGVtLnZhbHVlLmlzU2VsZWN0ZWQgPT0gdHJ1ZT8gdHJ1ZSA6IG51bGxcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInt7ZWxlbUlkfX1fX3JhZGlvLWJ0bl97e2l9fVwiPnt7aXRlbS52YWx1ZS50aXRsZX19PC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
@@ -1,12 +1,16 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, Input } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
3
  import { QuestionTypeEnum } from '../../../shared/enums/question-type.enum';
4
+ import { surveyActions } from '../../core/states/survey-store/survey.action';
5
+ import { questionSelectors } from '../../core/states/survey-store/question.selector';
4
6
  import * as i0 from "@angular/core";
5
7
  import * as i1 from "@ng-stack/forms";
6
8
  import * as i2 from "../../services/survey-lib.service";
7
9
  import * as i3 from "../../services/api.service";
8
- import * as i4 from "@angular/common";
9
- import * as i5 from "../question-dropdown-template/question-dropdown-template.component";
10
+ import * as i4 from "@ngrx/store";
11
+ import * as i5 from "@angular/common";
12
+ import * as i6 from "../question-dropdown-template/question-dropdown-template.component";
13
+ import * as i7 from "../../pipes/find-question.pipe";
10
14
  export class QuestionCascadeTemplateComponent {
11
15
  get fCtrls() {
12
16
  return this.rForm.controls;
@@ -18,15 +22,19 @@ export class QuestionCascadeTemplateComponent {
18
22
  return this.fCtrls.questionArr;
19
23
  }
20
24
  set setQuestion(value) {
21
- this.setQuestions(value);
25
+ if (this.surveyQuestionArr?.length == 0) {
26
+ this.setQuestions(value.questionAllInfo);
27
+ }
22
28
  }
23
- constructor(_formBuilder, _surveyLibService, _ApiService) {
29
+ constructor(_formBuilder, _surveyLibService, _ApiService, _Store) {
24
30
  this._formBuilder = _formBuilder;
25
31
  this._surveyLibService = _surveyLibService;
26
32
  this._ApiService = _ApiService;
33
+ this._Store = _Store;
27
34
  this.surveyQuestionArr = [];
28
- this.emitter = new EventEmitter();
29
- this.pageIndex = null;
35
+ this.pageQuestions$ = this._Store.select(questionSelectors.pageQuestions);
36
+ this.pageId = null;
37
+ this.questionGroupId = null;
30
38
  this.isPre = false;
31
39
  this.surveyLanguageId = null;
32
40
  this.applicantKey = null;
@@ -35,9 +43,9 @@ export class QuestionCascadeTemplateComponent {
35
43
  });
36
44
  }
37
45
  ngOnInit() {
38
- this.fCtrls.questionArr.statusChanges.subscribe(v => {
39
- console.log(v);
40
- });
46
+ // this.fCtrls.questionArr.statusChanges.subscribe(v => {
47
+ // console.log(v);
48
+ // })
41
49
  }
42
50
  onUpdateAnswer(model) {
43
51
  if (this.surveyQuestionArr.length > 1) {
@@ -50,7 +58,7 @@ export class QuestionCascadeTemplateComponent {
50
58
  for (let index = 0; index < sortDeletedArr.length; index++) {
51
59
  const elementIndex = sortDeletedArr[index];
52
60
  const questionId = this.surveyQuestionArr[elementIndex].questionId;
53
- this._surveyLibService.setRemoveQuestion(questionId);
61
+ this._Store.dispatch(surveyActions.removeQuestion({ questionId: questionId }));
54
62
  this.surveyQuestionArr = this.surveyQuestionArr.filter(x => x.questionId != questionId);
55
63
  this.questionFormArray.removeAt(elementIndex);
56
64
  }
@@ -63,12 +71,29 @@ export class QuestionCascadeTemplateComponent {
63
71
  surveyLanguageId: this.surveyLanguageId
64
72
  }).subscribe(res => {
65
73
  if (res.errors.filter(x => x.code == 17).length == 0) {
74
+ this._Store.dispatch(surveyActions.addQuestion({ question: {
75
+ surveyPageId: this.pageId,
76
+ questionId: res.questionId,
77
+ questionType: res.questionTypeId,
78
+ inputTypeId: res.surveyAnswers[0].inputTypeId,
79
+ isMatrixGroup: false,
80
+ answerId: null,
81
+ answerIdArr: null,
82
+ answerText: null,
83
+ isRequired: res.isRequired,
84
+ isValid: null,
85
+ isDisabled: res.isReadOnly,
86
+ isShow: res.isVisable,
87
+ isDisabled_default: res.isReadOnly,
88
+ isShow_default: res.isVisable,
89
+ questionGroupId: this.questionGroupId,
90
+ parentQuestionId: model.QuestionId,
91
+ questionAllInfo: res
92
+ } }));
66
93
  this.setQuestions(res);
67
- this._surveyLibService.setAddQuestion(res, this.pageIndex);
68
94
  }
69
95
  });
70
96
  }
71
- this.emitter.emit(model);
72
97
  }
73
98
  identify(index, item) {
74
99
  return item.id;
@@ -85,16 +110,17 @@ export class QuestionCascadeTemplateComponent {
85
110
  group.controls.answer.updateValueAndValidity();
86
111
  }
87
112
  this.fCtrls.questionArr.push(group);
113
+ console.log(this.fCtrls.questionArr.value);
88
114
  }
89
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: QuestionCascadeTemplateComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SurveyLibService }, { token: i3.ApiService }], target: i0.ɵɵFactoryTarget.Component }); }
90
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: QuestionCascadeTemplateComponent, selector: "lib-question-cascade-template", inputs: { pageIndex: "pageIndex", isPre: "isPre", surveyLanguageId: "surveyLanguageId", applicantKey: "applicantKey", setQuestion: "setQuestion" }, outputs: { emitter: "emitter" }, ngImport: i0, template: "<ng-container *ngFor=\"let item of questionFormArray.value ; trackBy:identify ; let i = index\">\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"surveyQuestionArr[i]\"\n (emitter)=\"onUpdateAnswer($event)\" >\n </lib-question-dropdown-template>\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.QuestionDropdownTemplateComponent, selector: "lib-question-dropdown-template", inputs: ["setQuestion"], outputs: ["emitter"] }] }); }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: QuestionCascadeTemplateComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SurveyLibService }, { token: i3.ApiService }, { token: i4.Store }], target: i0.ɵɵFactoryTarget.Component }); }
116
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: QuestionCascadeTemplateComponent, selector: "lib-question-cascade-template", inputs: { pageId: "pageId", questionGroupId: "questionGroupId", isPre: "isPre", surveyLanguageId: "surveyLanguageId", applicantKey: "applicantKey", setQuestion: "setQuestion" }, ngImport: i0, template: "<ng-container *ngFor=\"let item of questionFormArray.value ; trackBy:identify ; let i = index\">\r\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"(pageQuestions$ |async) |findQuestion :item.id \"\r\n (emitter)=\"onUpdateAnswer($event)\" >\r\n </lib-question-dropdown-template> \r\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i6.QuestionDropdownTemplateComponent, selector: "lib-question-dropdown-template", inputs: ["setQuestion"], outputs: ["emitter"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.FindQuestionPipe, name: "findQuestion" }] }); }
91
117
  }
92
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: QuestionCascadeTemplateComponent, decorators: [{
93
119
  type: Component,
94
- args: [{ selector: 'lib-question-cascade-template', template: "<ng-container *ngFor=\"let item of questionFormArray.value ; trackBy:identify ; let i = index\">\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"surveyQuestionArr[i]\"\n (emitter)=\"onUpdateAnswer($event)\" >\n </lib-question-dropdown-template>\n</ng-container>" }]
95
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SurveyLibService }, { type: i3.ApiService }]; }, propDecorators: { emitter: [{
96
- type: Output
97
- }], pageIndex: [{
120
+ args: [{ selector: 'lib-question-cascade-template', template: "<ng-container *ngFor=\"let item of questionFormArray.value ; trackBy:identify ; let i = index\">\r\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"(pageQuestions$ |async) |findQuestion :item.id \"\r\n (emitter)=\"onUpdateAnswer($event)\" >\r\n </lib-question-dropdown-template> \r\n</ng-container>" }]
121
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SurveyLibService }, { type: i3.ApiService }, { type: i4.Store }]; }, propDecorators: { pageId: [{
122
+ type: Input
123
+ }], questionGroupId: [{
98
124
  type: Input
99
125
  }], isPre: [{
100
126
  type: Input
@@ -105,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
105
131
  }], setQuestion: [{
106
132
  type: Input
107
133
  }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZS9xdWVzdGlvbi1jYXNjYWRlLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N1cnZlcnktbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbi1jYXNjYWRlLXRlbXBsYXRlL3F1ZXN0aW9uLWNhc2NhZGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7QUFVNUUsTUFBTSxPQUFPLGdDQUFnQztJQUkzQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBO0lBQ2hDLENBQUM7SUFTRCxJQUFhLFdBQVcsQ0FBQyxLQUF3QjtRQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFvQixZQUF5QixFQUFVLGlCQUFtQyxFQUNoRixXQUF1QjtRQURiLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQVUsc0JBQWlCLEdBQWpC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LE9BQU87c0JBQWhCLE1BQU07Z0JBRUUsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRU8sV0FBVztzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0BuZy1zdGFjay9mb3Jtcyc7XG5pbXBvcnQgeyBRdWVzdGlvbkNhc2NhZGVUZW1wbGF0ZUZvcm1JbnRlcmZhY2UsIFF1ZXN0aW9uR3JvdXBDaGlsZE9mUXVlc3Rpb25DYXNjYWRlVGVtcGxhdGVGb3JtSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Zvcm0taW50ZXJmYWNlcy9xdWVzdGlvbi1jYXNjYWRlLmZvcm0taW50ZXJmYWNlJztcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHRvIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2R0b3Mvc3VydmV5LXF1ZXN0aW9uLmR0byc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2VudW1zL3F1ZXN0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBRdWVzdGlvbkFuc3dlck1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL21vZGVscy9xdWVzdGlvbi1hbnN3ZXIubW9kZWwnO1xuaW1wb3J0IHsgU3VydmV5TGliU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N1cnZleS1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBpLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVzdGlvbi1jYXNjYWRlLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ2FzY2FkZVRlbXBsYXRlQ29tcG9uZW50IHtcbiAgc3VydmV5UXVlc3Rpb25BcnI6IFN1cnZleVF1ZXN0aW9uRHRvW10gPSBbXTtcbiAgckZvcm06IEZvcm1Hcm91cDxRdWVzdGlvbkNhc2NhZGVUZW1wbGF0ZUZvcm1JbnRlcmZhY2U+O1xuXG4gIGdldCBmQ3RybHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuckZvcm0uY29udHJvbHM7XG4gIH1cblxuICBnZXQgcXVlc3Rpb25UeXBlRW51bSgpIHtcbiAgICByZXR1cm4gUXVlc3Rpb25UeXBlRW51bTtcbiAgfVxuXG4gIGdldCBxdWVzdGlvbkZvcm1BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJcbiAgfVxuXG4gIEBPdXRwdXQoKSBlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxRdWVzdGlvbkFuc3dlck1vZGVsPigpO1xuXG4gIEBJbnB1dCgpIHBhZ2VJbmRleDogbnVtYmVyID0gbnVsbDtcbiAgQElucHV0KCkgaXNQcmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VydmV5TGFuZ3VhZ2VJZDogbnVtYmVyID0gbnVsbDtcbiAgQElucHV0KCkgYXBwbGljYW50S2V5OiBzdHJpbmcgPSBudWxsO1xuXG4gIEBJbnB1dCgpIHNldCBzZXRRdWVzdGlvbih2YWx1ZTogU3VydmV5UXVlc3Rpb25EdG8pIHtcbiAgICB0aGlzLnNldFF1ZXN0aW9ucyh2YWx1ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9mb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgX3N1cnZleUxpYlNlcnZpY2U6IFN1cnZleUxpYlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfQXBpU2VydmljZTogQXBpU2VydmljZSkge1xuICAgIHRoaXMuckZvcm0gPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxRdWVzdGlvbkNhc2NhZGVUZW1wbGF0ZUZvcm1JbnRlcmZhY2U+KHtcbiAgICAgIHF1ZXN0aW9uQXJyOiB0aGlzLl9mb3JtQnVpbGRlci5hcnJheTxRdWVzdGlvbkdyb3VwQ2hpbGRPZlF1ZXN0aW9uQ2FzY2FkZVRlbXBsYXRlRm9ybUludGVyZmFjZT4oW10pXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZDdHJscy5xdWVzdGlvbkFyci5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHYpO1xuICAgIH0pXG4gIH1cblxuICBvblVwZGF0ZUFuc3dlcihtb2RlbDogUXVlc3Rpb25BbnN3ZXJNb2RlbCkge1xuICAgIGlmICh0aGlzLnN1cnZleVF1ZXN0aW9uQXJyLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IHN1cnZleVF1ZXN0aW9uSW5kZXggPSB0aGlzLnN1cnZleVF1ZXN0aW9uQXJyLmZpbmRJbmRleChjID0+IGMucXVlc3Rpb25JZCA9PSBtb2RlbC5RdWVzdGlvbklkKTtcblxuICAgICAgdmFyIGRlbGV0ZWRRdWVzdGlvbnMgPSBbXVxuICAgICAgZm9yIChsZXQgaW5kZXggPSBzdXJ2ZXlRdWVzdGlvbkluZGV4ICsgMTsgaW5kZXggPCB0aGlzLnN1cnZleVF1ZXN0aW9uQXJyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBkZWxldGVkUXVlc3Rpb25zLnB1c2goaW5kZXgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc29ydERlbGV0ZWRBcnIgPSBkZWxldGVkUXVlc3Rpb25zLnNvcnQoKGEsIGIpID0+IChhID4gYiA/IC0xIDogMSkpO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNvcnREZWxldGVkQXJyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBlbGVtZW50SW5kZXggPSBzb3J0RGVsZXRlZEFycltpbmRleF07XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSB0aGlzLnN1cnZleVF1ZXN0aW9uQXJyW2VsZW1lbnRJbmRleF0ucXVlc3Rpb25JZDtcbiAgICAgICAgdGhpcy5fc3VydmV5TGliU2VydmljZS5zZXRSZW1vdmVRdWVzdGlvbihxdWVzdGlvbklkKTtcbiAgICAgICAgdGhpcy5zdXJ2ZXlRdWVzdGlvbkFyciA9IHRoaXMuc3VydmV5UXVlc3Rpb25BcnIuZmlsdGVyKHg9PngucXVlc3Rpb25JZCAhPSBxdWVzdGlvbklkKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkZvcm1BcnJheS5yZW1vdmVBdChlbGVtZW50SW5kZXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlbC5BbnN3ZXIpIHtcbiAgICAgIHRoaXMuX0FwaVNlcnZpY2UuZ2V0TmV4dFF1ZXN0aW9uKHtcbiAgICAgICAgYW5zd2VySWQ6IG1vZGVsLkFuc3dlcixcbiAgICAgICAgYXBwbGljYW50S2V5OiB0aGlzLmFwcGxpY2FudEtleSxcbiAgICAgICAgaXNQcmU6IHRoaXMuaXNQcmUsXG4gICAgICAgIHN1cnZleUxhbmd1YWdlSWQ6IHRoaXMuc3VydmV5TGFuZ3VhZ2VJZFxuICAgICAgfSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIGlmIChyZXMuZXJyb3JzLmZpbHRlcih4ID0+IHguY29kZSA9PSAxNykubGVuZ3RoID09IDApIHtcbiAgICAgICAgICB0aGlzLnNldFF1ZXN0aW9ucyhyZXMpO1xuICAgICAgICAgIHRoaXMuX3N1cnZleUxpYlNlcnZpY2Uuc2V0QWRkUXVlc3Rpb24ocmVzLCB0aGlzLnBhZ2VJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdHRlci5lbWl0KG1vZGVsKTtcbiAgfVxuXG4gIGlkZW50aWZ5KGluZGV4LCBpdGVtOiBRdWVzdGlvbkdyb3VwQ2hpbGRPZlF1ZXN0aW9uQ2FzY2FkZVRlbXBsYXRlRm9ybUludGVyZmFjZSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRRdWVzdGlvbnModmFsdWU6IFN1cnZleVF1ZXN0aW9uRHRvKSB7XG4gICAgdGhpcy5zdXJ2ZXlRdWVzdGlvbkFyci5wdXNoKHZhbHVlKTtcblxuICAgIHZhciBncm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFF1ZXN0aW9uR3JvdXBDaGlsZE9mUXVlc3Rpb25DYXNjYWRlVGVtcGxhdGVGb3JtSW50ZXJmYWNlPih7XG4gICAgICBpZDogW3ZhbHVlLnF1ZXN0aW9uSWRdLFxuICAgICAgdHlwZUlkOiBbdmFsdWUucXVlc3Rpb25UeXBlSWRdLFxuICAgICAgYW5zd2VyOiBudWxsXG4gICAgfSk7XG5cbiAgICBpZiAodmFsdWUuaXNSZXF1aXJlZCA9PSB0cnVlKSB7XG4gICAgICBncm91cC5jb250cm9scy5hbnN3ZXIuYWRkVmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZ3JvdXAuY29udHJvbHMuYW5zd2VyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZDdHJscy5xdWVzdGlvbkFyci5wdXNoKGdyb3VwKTtcbiAgfVxuXG59XG4iLCI8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uRm9ybUFycmF5LnZhbHVlIDsgdHJhY2tCeTppZGVudGlmeSA7IGxldCBpID0gaW5kZXhcIj5cbiAgICA8bGliLXF1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlICNxdWVzdGlvbkRyb3Bkb3duVGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInN1cnZleVF1ZXN0aW9uQXJyW2ldXCJcbiAgICAgICAgKGVtaXR0ZXIpPVwib25VcGRhdGVBbnN3ZXIoJGV2ZW50KVwiID5cbiAgICA8L2xpYi1xdWVzdGlvbi1kcm9wZG93bi10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZS9xdWVzdGlvbi1jYXNjYWRlLXRlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N1cnZlcnktbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbi1jYXNjYWRlLXRlbXBsYXRlL3F1ZXN0aW9uLWNhc2NhZGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQU01RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7OztBQU9yRixNQUFNLE9BQU8sZ0NBQWdDO0lBTTNDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUE7SUFDaEMsQ0FBQztJQVNELElBQWEsV0FBVyxDQUFDLEtBQXdCO1FBQy9DLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdkMsSUFBSSxD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eyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQG5nLXN0YWNrL2Zvcm1zJztcclxuaW1wb3J0IHsgUXVlc3Rpb25DYXNjYWRlVGVtcGxhdGVGb3JtSW50ZXJmYWNlLCBRdWVzdGlvbkdyb3VwQ2hpbGRPZlF1ZXN0aW9uQ2FzY2FkZVRlbXBsYXRlRm9ybUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mb3JtLWludGVyZmFjZXMvcXVlc3Rpb24tY2FzY2FkZS5mb3JtLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHRvIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2R0b3Mvc3VydmV5LXF1ZXN0aW9uLmR0byc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZW51bXMvcXVlc3Rpb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgUXVlc3Rpb25BbnN3ZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvcXVlc3Rpb24tYW5zd2VyLm1vZGVsJztcclxuaW1wb3J0IHsgU3VydmV5TGliU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N1cnZleS1saWIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uTmdyeE1vZGVsIH0gZnJvbSAnLi4vLi4vY29yZS9zdGF0ZXMvZW50aXRlcy9xdWVzdGlvbi5lbnRpdHknO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgc3VydmV5QWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RhdGVzL3N1cnZleS1zdG9yZS9zdXJ2ZXkuYWN0aW9uJztcclxuaW1wb3J0IHsgcXVlc3Rpb25TZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0YXRlcy9zdXJ2ZXktc3RvcmUvcXVlc3Rpb24uc2VsZWN0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9uLWNhc2NhZGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9uLWNhc2NhZGUtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DYXNjYWRlVGVtcGxhdGVDb21wb25lbnQge1xyXG4gIHN1cnZleVF1ZXN0aW9uQXJyOiBTdXJ2ZXlRdWVzdGlvbkR0b1tdID0gW107XHJcbiAgckZvcm06IEZvcm1Hcm91cDxRdWVzdGlvbkNhc2NhZGVUZW1wbGF0ZUZvcm1JbnRlcmZhY2U+O1xyXG5cclxuICBwYWdlUXVlc3Rpb25zJCA9IHRoaXMuX1N0b3JlLnNlbGVjdChxdWVzdGlvblNlbGVjdG9ycy5wYWdlUXVlc3Rpb25zKTtcclxuXHJcbiAgZ2V0IGZDdHJscygpIHtcclxuICAgIHJldHVybiB0aGlzLnJGb3JtLmNvbnRyb2xzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHF1ZXN0aW9uVHlwZUVudW0oKSB7XHJcbiAgICByZXR1cm4gUXVlc3Rpb25UeXBlRW51bTtcclxuICB9XHJcblxyXG4gIGdldCBxdWVzdGlvbkZvcm1BcnJheSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZDdHJscy5xdWVzdGlvbkFyclxyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpIHBhZ2VJZDogbnVtYmVyID0gbnVsbDtcclxuICBASW5wdXQoKSBxdWVzdGlvbkdyb3VwSWQ6bnVtYmVyID0gbnVsbDtcclxuICBASW5wdXQoKSBpc1ByZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHN1cnZleUxhbmd1YWdlSWQ6IG51bWJlciA9IG51bGw7XHJcbiAgQElucHV0KCkgYXBwbGljYW50S2V5OiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBzZXQgc2V0UXVlc3Rpb24odmFsdWU6IFF1ZXN0aW9uTmdyeE1vZGVsKSB7XHJcbiAgICBpZiAodGhpcy5zdXJ2ZXlRdWVzdGlvbkFycj8ubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5zZXRRdWVzdGlvbnModmFsdWUucXVlc3Rpb25BbGxJbmZvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBfc3VydmV5TGliU2VydmljZTogU3VydmV5TGliU2VydmljZSxcclxuICAgIHByaXZhdGUgX0FwaVNlcnZpY2U6IEFwaVNlcnZpY2UgLCBwcml2YXRlIF9TdG9yZTpTdG9yZSkge1xyXG4gICAgdGhpcy5yRm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFF1ZXN0aW9uQ2FzY2FkZVRlbXBsYXRlRm9ybUludGVyZmFjZT4oe1xyXG4gICAgICBxdWVzdGlvbkFycjogdGhpcy5fZm9ybUJ1aWxkZXIuYXJyYXk8UXVlc3Rpb25Hcm91cENoaWxkT2ZRdWVzdGlvbkNhc2NhZGVUZW1wbGF0ZUZvcm1JbnRlcmZhY2U+KFtdKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyh2KTtcclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICBvblVwZGF0ZUFuc3dlcihtb2RlbDogUXVlc3Rpb25BbnN3ZXJNb2RlbCkge1xyXG4gICAgaWYgKHRoaXMuc3VydmV5UXVlc3Rpb25BcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBzdXJ2ZXlRdWVzdGlvbkluZGV4ID0gdGhpcy5zdXJ2ZXlRdWVzdGlvbkFyci5maW5kSW5kZXgoYyA9PiBjLnF1ZXN0aW9uSWQgPT0gbW9kZWwuUXVlc3Rpb25JZCk7XHJcblxyXG4gICAgICB2YXIgZGVsZXRlZFF1ZXN0aW9ucyA9IFtdXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gc3VydmV5UXVlc3Rpb25JbmRleCArIDE7IGluZGV4IDwgdGhpcy5zdXJ2ZXlRdWVzdGlvbkFyci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBkZWxldGVkUXVlc3Rpb25zLnB1c2goaW5kZXgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgc29ydERlbGV0ZWRBcnIgPSBkZWxldGVkUXVlc3Rpb25zLnNvcnQoKGEsIGIpID0+IChhID4gYiA/IC0xIDogMSkpO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc29ydERlbGV0ZWRBcnIubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudEluZGV4ID0gc29ydERlbGV0ZWRBcnJbaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSB0aGlzLnN1cnZleVF1ZXN0aW9uQXJyW2VsZW1lbnRJbmRleF0ucXVlc3Rpb25JZDtcclxuXHJcbiAgICAgICAgdGhpcy5fU3RvcmUuZGlzcGF0Y2goc3VydmV5QWN0aW9ucy5yZW1vdmVRdWVzdGlvbih7cXVlc3Rpb25JZCA6IHF1ZXN0aW9uSWR9KSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VydmV5UXVlc3Rpb25BcnIgPSB0aGlzLnN1cnZleVF1ZXN0aW9uQXJyLmZpbHRlcih4ID0+IHgucXVlc3Rpb25JZCAhPSBxdWVzdGlvbklkKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uRm9ybUFycmF5LnJlbW92ZUF0KGVsZW1lbnRJbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobW9kZWwuQW5zd2VyKSB7XHJcbiAgICAgIHRoaXMuX0FwaVNlcnZpY2UuZ2V0TmV4dFF1ZXN0aW9uKHtcclxuICAgICAgICBhbnN3ZXJJZDogbW9kZWwuQW5zd2VyLFxyXG4gICAgICAgIGFwcGxpY2FudEtleTogdGhpcy5hcHBsaWNhbnRLZXksXHJcbiAgICAgICAgaXNQcmU6IHRoaXMuaXNQcmUsXHJcbiAgICAgICAgc3VydmV5TGFuZ3VhZ2VJZDogdGhpcy5zdXJ2ZXlMYW5ndWFnZUlkXHJcbiAgICAgIH0pLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuZXJyb3JzLmZpbHRlcih4ID0+IHguY29kZSA9PSAxNykubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIHRoaXMuX1N0b3JlLmRpc3BhdGNoKHN1cnZleUFjdGlvbnMuYWRkUXVlc3Rpb24oeyBxdWVzdGlvbiA6IHtcclxuICAgICAgICAgICAgc3VydmV5UGFnZUlkOiB0aGlzLnBhZ2VJZCxcclxuICAgICAgICAgICAgcXVlc3Rpb25JZDogcmVzLnF1ZXN0aW9uSWQsXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogcmVzLnF1ZXN0aW9uVHlwZUlkLFxyXG4gICAgICAgICAgICBpbnB1dFR5cGVJZDogcmVzLnN1cnZleUFuc3dlcnNbMF0uaW5wdXRUeXBlSWQsXHJcbiAgICAgICAgICAgIGlzTWF0cml4R3JvdXA6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbnN3ZXJJZDogbnVsbCxcclxuICAgICAgICAgICAgYW5zd2VySWRBcnI6IG51bGwsXHJcbiAgICAgICAgICAgIGFuc3dlclRleHQ6IG51bGwsXHJcbiAgICAgICAgICAgIGlzUmVxdWlyZWQ6IHJlcy5pc1JlcXVpcmVkLFxyXG4gICAgICAgICAgICBpc1ZhbGlkOiBudWxsLFxyXG4gICAgICAgICAgICBpc0Rpc2FibGVkOiByZXMuaXNSZWFkT25seSxcclxuICAgICAgICAgICAgaXNTaG93OiByZXMuaXNWaXNhYmxlLFxyXG4gICAgICAgICAgICBpc0Rpc2FibGVkX2RlZmF1bHQ6IHJlcy5pc1JlYWRPbmx5LFxyXG4gICAgICAgICAgICBpc1Nob3dfZGVmYXVsdDogcmVzLmlzVmlzYWJsZSxcclxuICAgICAgICAgICAgcXVlc3Rpb25Hcm91cElkIDogdGhpcy5xdWVzdGlvbkdyb3VwSWQsXHJcbiAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6IG1vZGVsLlF1ZXN0aW9uSWQgLFxyXG4gICAgICAgICAgICBxdWVzdGlvbkFsbEluZm8gOnJlc1xyXG4gICAgICAgICAgfX0pKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNldFF1ZXN0aW9ucyhyZXMpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWRlbnRpZnkoaW5kZXgsIGl0ZW06IFF1ZXN0aW9uR3JvdXBDaGlsZE9mUXVlc3Rpb25DYXNjYWRlVGVtcGxhdGVGb3JtSW50ZXJmYWNlKSB7XHJcbiAgICByZXR1cm4gaXRlbS5pZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UXVlc3Rpb25zKHZhbHVlOiBTdXJ2ZXlRdWVzdGlvbkR0bykge1xyXG4gICAgdGhpcy5zdXJ2ZXlRdWVzdGlvbkFyci5wdXNoKHZhbHVlKTtcclxuXHJcbiAgICB2YXIgZ3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxRdWVzdGlvbkdyb3VwQ2hpbGRPZlF1ZXN0aW9uQ2FzY2FkZVRlbXBsYXRlRm9ybUludGVyZmFjZT4oe1xyXG4gICAgICBpZDogW3ZhbHVlLnF1ZXN0aW9uSWRdLFxyXG4gICAgICB0eXBlSWQ6IFt2YWx1ZS5xdWVzdGlvblR5cGVJZF0sXHJcbiAgICAgIGFuc3dlcjogbnVsbFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHZhbHVlLmlzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICBncm91cC5jb250cm9scy5hbnN3ZXIuYWRkVmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICBncm91cC5jb250cm9scy5hbnN3ZXIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyLnB1c2goZ3JvdXApO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyLnZhbHVlKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb25Gb3JtQXJyYXkudmFsdWUgOyB0cmFja0J5OmlkZW50aWZ5IDsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8bGliLXF1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlICNxdWVzdGlvbkRyb3Bkb3duVGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cIihwYWdlUXVlc3Rpb25zJCAgfGFzeW5jKSB8ZmluZFF1ZXN0aW9uIDppdGVtLmlkIFwiXHJcbiAgICAgICAgKGVtaXR0ZXIpPVwib25VcGRhdGVBbnN3ZXIoJGV2ZW50KVwiID5cclxuICAgIDwvbGliLXF1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlPiAgXHJcbjwvbmctY29udGFpbmVyPiJdfQ==