@qbs-origin/origin-form 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/action-step-handler.mjs +163 -0
  3. package/esm2022/lib/auth-client.service.mjs +69 -0
  4. package/esm2022/lib/enums/label.keys.mjs +721 -0
  5. package/esm2022/lib/form-css.helper.mjs +367 -0
  6. package/esm2022/lib/formly/baseFormlyControlComponent.mjs +52 -0
  7. package/esm2022/lib/formly/baseFormlyStepComponent.mjs +59 -0
  8. package/esm2022/lib/formly/custom-section-separator.component.mjs +32 -0
  9. package/esm2022/lib/formly/form-section-separator.component.mjs +36 -0
  10. package/esm2022/lib/formly/formly-action.mjs +56 -0
  11. package/esm2022/lib/formly/formly-checkbox/formly-checkbox.component.mjs +52 -0
  12. package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +261 -0
  13. package/esm2022/lib/formly/formly-download-documents/formly-download-documents.component.mjs +126 -0
  14. package/esm2022/lib/formly/formly-enrol-card/formly-enrol-card.component.mjs +120 -0
  15. package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +762 -0
  16. package/esm2022/lib/formly/formly-generate-documents/formly-generate-documents.component.mjs +57 -0
  17. package/esm2022/lib/formly/formly-identification.component.mjs +84 -0
  18. package/esm2022/lib/formly/formly-open-banking/formly-open-banking.component.mjs +590 -0
  19. package/esm2022/lib/formly/formly-paragraph/formly-paragraph.component.mjs +35 -0
  20. package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +49 -0
  21. package/esm2022/lib/formly/formly-row-fille.mjs +12 -0
  22. package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +284 -0
  23. package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +173 -0
  24. package/esm2022/lib/formly/formly-upload-documents/formly-upload-documents.component.mjs +198 -0
  25. package/esm2022/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.mjs +124 -0
  26. package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +245 -0
  27. package/esm2022/lib/formly/formly-view-offers/formly-view-offers.component.mjs +160 -0
  28. package/esm2022/lib/model-population.helper.mjs +265 -0
  29. package/esm2022/lib/models/application-type.model.mjs +12 -0
  30. package/esm2022/lib/models/application.model.mjs +30 -0
  31. package/esm2022/lib/models/auth/users.model.mjs +2 -0
  32. package/esm2022/lib/models/dictionary.model.mjs +20 -0
  33. package/esm2022/lib/models/flux.model.mjs +105 -0
  34. package/esm2022/lib/models/forms.model.mjs +572 -0
  35. package/esm2022/lib/models/label-info.model.mjs +2 -0
  36. package/esm2022/lib/models/label.model.mjs +2 -0
  37. package/esm2022/lib/models/language.model.mjs +3 -0
  38. package/esm2022/lib/models/list.model.mjs +2 -0
  39. package/esm2022/lib/models/partner.model.mjs +3 -0
  40. package/esm2022/lib/models/treeview.model.mjs +15 -0
  41. package/esm2022/lib/origin-form-auth.service.mjs +40 -0
  42. package/esm2022/lib/origin-form-config.model.mjs +2 -0
  43. package/esm2022/lib/origin-form-token.interceptor.mjs +35 -0
  44. package/esm2022/lib/origin-form.component.mjs +2391 -0
  45. package/esm2022/lib/origin-form.module.mjs +479 -0
  46. package/esm2022/lib/origin-form.service.mjs +14 -0
  47. package/esm2022/lib/others/check-list.database.mjs +55 -0
  48. package/esm2022/lib/others/config-service.mjs +42 -0
  49. package/esm2022/lib/others/dictionary-label-info.mjs +3 -0
  50. package/esm2022/lib/others/environment-type.mjs +21 -0
  51. package/esm2022/lib/others/external-link.directive.mjs +49 -0
  52. package/esm2022/lib/others/flux-helper.mjs +1397 -0
  53. package/esm2022/lib/others/picker.component.mjs +119 -0
  54. package/esm2022/lib/others/translation.pipe.mjs +21 -0
  55. package/esm2022/lib/others/translations-helper.mjs +258 -0
  56. package/esm2022/lib/others/utils.mjs +272 -0
  57. package/esm2022/lib/services/applicationData.service.mjs +145 -0
  58. package/esm2022/lib/services/auth-http.service.mjs +80 -0
  59. package/esm2022/lib/services/dialog.service.mjs +56 -0
  60. package/esm2022/lib/services/dictionary.service.mjs +198 -0
  61. package/esm2022/lib/services/forms.service.mjs +47 -0
  62. package/esm2022/lib/services/labels.service.mjs +29 -0
  63. package/esm2022/lib/services/language.service.mjs +24 -0
  64. package/esm2022/lib/services/open-banking.service.mjs +194 -0
  65. package/esm2022/lib/services/origin-form-signalr-handler.service.mjs +107 -0
  66. package/esm2022/lib/services/origin-form-signalr.service.mjs +105 -0
  67. package/esm2022/lib/services/otp.service.mjs +28 -0
  68. package/esm2022/lib/services/proxy.service.mjs +79 -0
  69. package/esm2022/lib/services/scroll-to-error.service.mjs +369 -0
  70. package/esm2022/lib/services/translation.service.mjs +27 -0
  71. package/esm2022/lib/shared-components/confirmation.component.mjs +34 -0
  72. package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +301 -0
  73. package/esm2022/lib/shared-components/grid.component.mjs +241 -0
  74. package/esm2022/lib/shared-components/treeview/treeview.component.mjs +224 -0
  75. package/esm2022/lib/theme-css.mjs +2254 -0
  76. package/esm2022/lib/theme-injector.service.mjs +26 -0
  77. package/esm2022/public-api.mjs +4 -0
  78. package/esm2022/qbs-origin-origin-form.mjs +5 -0
  79. package/fesm2022/qbs-origin-origin-form.mjs +15215 -0
  80. package/fesm2022/qbs-origin-origin-form.mjs.map +1 -0
  81. package/index.d.ts +5 -0
  82. package/lib/action-step-handler.d.ts +49 -0
  83. package/lib/auth-client.service.d.ts +17 -0
  84. package/lib/enums/label.keys.d.ts +720 -0
  85. package/lib/form-css.helper.d.ts +28 -0
  86. package/lib/formly/baseFormlyControlComponent.d.ts +25 -0
  87. package/lib/formly/baseFormlyStepComponent.d.ts +29 -0
  88. package/lib/formly/custom-section-separator.component.d.ts +6 -0
  89. package/lib/formly/form-section-separator.component.d.ts +10 -0
  90. package/lib/formly/formly-action.d.ts +13 -0
  91. package/lib/formly/formly-checkbox/formly-checkbox.component.d.ts +15 -0
  92. package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +45 -0
  93. package/lib/formly/formly-download-documents/formly-download-documents.component.d.ts +22 -0
  94. package/lib/formly/formly-enrol-card/formly-enrol-card.component.d.ts +114 -0
  95. package/lib/formly/formly-field-stepper/formly-field-stepper.component.d.ts +79 -0
  96. package/lib/formly/formly-generate-documents/formly-generate-documents.component.d.ts +17 -0
  97. package/lib/formly/formly-identification.component.d.ts +19 -0
  98. package/lib/formly/formly-open-banking/formly-open-banking.component.d.ts +119 -0
  99. package/lib/formly/formly-paragraph/formly-paragraph.component.d.ts +10 -0
  100. package/lib/formly/formly-radio/formly-radio-component.d.ts +15 -0
  101. package/lib/formly/formly-row-fille.d.ts +6 -0
  102. package/lib/formly/formly-scan-id/formly-scan-id.component.d.ts +41 -0
  103. package/lib/formly/formly-sign/formly-sign.component.d.ts +36 -0
  104. package/lib/formly/formly-upload-documents/formly-upload-documents.component.d.ts +25 -0
  105. package/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.d.ts +79 -0
  106. package/lib/formly/formly-view-documents/formly-view-documents.component.d.ts +33 -0
  107. package/lib/formly/formly-view-offers/formly-view-offers.component.d.ts +23 -0
  108. package/lib/model-population.helper.d.ts +8 -0
  109. package/lib/models/application-type.model.d.ts +27 -0
  110. package/lib/models/application.model.d.ts +107 -0
  111. package/lib/models/auth/users.model.d.ts +20 -0
  112. package/lib/models/dictionary.model.d.ts +77 -0
  113. package/lib/models/flux.model.d.ts +101 -0
  114. package/lib/models/forms.model.d.ts +504 -0
  115. package/lib/models/label-info.model.d.ts +10 -0
  116. package/lib/models/label.model.d.ts +4 -0
  117. package/lib/models/language.model.d.ts +5 -0
  118. package/lib/models/list.model.d.ts +8 -0
  119. package/lib/models/partner.model.d.ts +12 -0
  120. package/lib/models/treeview.model.d.ts +17 -0
  121. package/lib/origin-form-auth.service.d.ts +15 -0
  122. package/lib/origin-form-config.model.d.ts +12 -0
  123. package/lib/origin-form-token.interceptor.d.ts +12 -0
  124. package/lib/origin-form.component.d.ts +231 -0
  125. package/lib/origin-form.module.d.ts +84 -0
  126. package/lib/origin-form.service.d.ts +6 -0
  127. package/lib/others/check-list.database.d.ts +16 -0
  128. package/lib/others/config-service.d.ts +22 -0
  129. package/lib/others/dictionary-label-info.d.ts +6 -0
  130. package/lib/others/environment-type.d.ts +8 -0
  131. package/lib/others/external-link.directive.d.ts +12 -0
  132. package/lib/others/flux-helper.d.ts +115 -0
  133. package/lib/others/picker.component.d.ts +36 -0
  134. package/lib/others/translation.pipe.d.ts +10 -0
  135. package/lib/others/translations-helper.d.ts +31 -0
  136. package/lib/others/utils.d.ts +37 -0
  137. package/lib/services/applicationData.service.d.ts +35 -0
  138. package/lib/services/auth-http.service.d.ts +21 -0
  139. package/lib/services/dialog.service.d.ts +20 -0
  140. package/lib/services/dictionary.service.d.ts +89 -0
  141. package/lib/services/forms.service.d.ts +17 -0
  142. package/lib/services/labels.service.d.ts +13 -0
  143. package/lib/services/language.service.d.ts +14 -0
  144. package/lib/services/open-banking.service.d.ts +137 -0
  145. package/lib/services/origin-form-signalr-handler.service.d.ts +29 -0
  146. package/lib/services/origin-form-signalr.service.d.ts +24 -0
  147. package/lib/services/otp.service.d.ts +22 -0
  148. package/lib/services/proxy.service.d.ts +29 -0
  149. package/lib/services/scroll-to-error.service.d.ts +54 -0
  150. package/lib/services/translation.service.d.ts +10 -0
  151. package/lib/shared-components/confirmation.component.d.ts +77 -0
  152. package/lib/shared-components/dictionaries-tree.component.d.ts +51 -0
  153. package/lib/shared-components/grid.component.d.ts +138 -0
  154. package/lib/shared-components/treeview/treeview.component.d.ts +121 -0
  155. package/lib/theme-css.d.ts +2 -0
  156. package/lib/theme-injector.service.d.ts +8 -0
  157. package/package.json +42 -0
  158. package/public-api.d.ts +3 -0
  159. package/schematics-compiled/collection.json +10 -0
  160. package/schematics-compiled/ng-add/index.d.ts +2 -0
  161. package/schematics-compiled/ng-add/index.js +67 -0
  162. package/schematics-compiled/ng-add/index.js.map +1 -0
  163. package/schematics-compiled/ng-add/schema.json +8 -0
  164. package/src/lib/assets/fonts/Figtree-Bold.ttf +0 -0
  165. package/src/lib/assets/fonts/Figtree-Light.ttf +0 -0
  166. package/src/lib/assets/fonts/Figtree-Regular.ttf +0 -0
  167. package/src/lib/assets/fonts/Sora-ExtraBold.ttf +0 -0
  168. package/src/lib/assets/fonts/Sora-Light.ttf +0 -0
  169. package/src/lib/assets/fonts/Sora-Regular.ttf +0 -0
  170. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff +0 -0
  171. package/src/lib/assets/fonts/ttrounds-bold-webfont.woff2 +0 -0
  172. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff +0 -0
  173. package/src/lib/assets/fonts/ttrounds-regular-webfont.woff2 +0 -0
  174. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff +0 -0
  175. package/src/lib/assets/fonts/ttrounds-thin-webfont.woff2 +0 -0
  176. package/src/lib/assets/images/flag/icon-flag-de.svg +10 -0
  177. package/src/lib/assets/images/flag/icon-flag-en.svg +1 -0
  178. package/src/lib/assets/images/flag/icon-flag-es.svg +11 -0
  179. package/src/lib/assets/images/flag/icon-flag-fr.svg +1 -0
  180. package/src/lib/assets/images/flag/icon-flag-ro.svg +11 -0
  181. package/src/lib/assets/images/flag/origin-form/new-id-card.png +0 -0
  182. package/src/lib/assets/images/flag/origin-form/old-id-card.png +0 -0
@@ -0,0 +1,56 @@
1
+ import { Component, EventEmitter, Output, } from '@angular/core';
2
+ import { BaseFormlyStepComponent } from './baseFormlyStepComponent';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/material/progress-spinner";
6
+ export class FormlyActionComponent extends BaseFormlyStepComponent {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.actionCompleted = new EventEmitter();
10
+ this.loading = true;
11
+ }
12
+ ngOnChanges(changes) {
13
+ this.loading = false;
14
+ setTimeout(() => {
15
+ this.cdr.detectChanges();
16
+ }, 0);
17
+ }
18
+ ngAfterViewInit() { }
19
+ onPageSelected() {
20
+ this.onActionCompleted();
21
+ }
22
+ onActionCompleted() {
23
+ if (this.props['action']) {
24
+ this.props['action']().subscribe(() => {
25
+ this.loading = false;
26
+ this.actionCompleted.emit();
27
+ setTimeout(() => {
28
+ this.cdr.detectChanges();
29
+ }, 100);
30
+ });
31
+ }
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyActionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyActionComponent, selector: "formly-field-action", outputs: { actionCompleted: "actionCompleted" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
35
+ <div class="loader-container">
36
+ <mat-spinner *ngIf="loading" class="l-x-auto"></mat-spinner>
37
+ </div>
38
+ <ng-container *ngIf="!loading">
39
+ <ng-template #fieldComponent></ng-template>
40
+ </ng-container>
41
+ `, isInline: true, styles: [".loader-container{display:flex;justify-content:center;align-items:center;padding-top:5vh;padding-bottom:5vh}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyActionComponent, decorators: [{
44
+ type: Component,
45
+ args: [{ selector: 'formly-field-action', template: `
46
+ <div class="loader-container">
47
+ <mat-spinner *ngIf="loading" class="l-x-auto"></mat-spinner>
48
+ </div>
49
+ <ng-container *ngIf="!loading">
50
+ <ng-template #fieldComponent></ng-template>
51
+ </ng-container>
52
+ `, styles: [".loader-container{display:flex;justify-content:center;align-items:center;padding-top:5vh;padding-bottom:5vh}\n"] }]
53
+ }], propDecorators: { actionCompleted: [{
54
+ type: Output
55
+ }] } });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvZm9ybWx5L2Zvcm1seS1hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxZQUFZLEVBQ1osTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBd0JwRSxNQUFNLE9BQU8scUJBQ1gsU0FBUSx1QkFBdUI7SUF2QmpDOztRQTBCWSxvQkFBZSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3pFLFlBQU8sR0FBWSxJQUFJLENBQUM7S0EwQnpCO0lBeEJDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsZUFBZSxLQUFJLENBQUM7SUFFWCxjQUFjO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0E5QlUscUJBQXFCO21HQUFyQixxQkFBcUIsd0pBcEJ0Qjs7Ozs7OztHQU9UOzs0RkFhVSxxQkFBcUI7a0JBdEJqQyxTQUFTOytCQUNFLHFCQUFxQixZQUNyQjs7Ozs7OztHQU9UOzhCQWlCUyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUZvcm1seVN0ZXBDb21wb25lbnQgfSBmcm9tICcuL2Jhc2VGb3JtbHlTdGVwQ29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm9ybWx5LWZpZWxkLWFjdGlvbicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImxvYWRlci1jb250YWluZXJcIj5cbiAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImwteC1hdXRvXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZmllbGRDb21wb25lbnQ+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmxvYWRlci1jb250YWluZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZy10b3A6IDV2aDtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDV2aDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlBY3Rpb25Db21wb25lbnRcbiAgZXh0ZW5kcyBCYXNlRm9ybWx5U3RlcENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzXG57XG4gIEBPdXRwdXQoKSBhY3Rpb25Db21wbGV0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge31cblxuICBvdmVycmlkZSBvblBhZ2VTZWxlY3RlZCgpIHtcbiAgICB0aGlzLm9uQWN0aW9uQ29tcGxldGVkKCk7XG4gIH1cblxuICBvbkFjdGlvbkNvbXBsZXRlZCgpIHtcbiAgICBpZiAodGhpcy5wcm9wc1snYWN0aW9uJ10pIHtcbiAgICAgIHRoaXMucHJvcHNbJ2FjdGlvbiddKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uQ29tcGxldGVkLmVtaXQoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,52 @@
1
+ import { Component } from '@angular/core';
2
+ import { FieldType } from '@ngx-formly/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "ngx-markdown";
7
+ import * as i4 from "@angular/material/checkbox";
8
+ import * as i5 from "../../others/external-link.directive";
9
+ export class FormlyCheckboxComponent extends FieldType {
10
+ constructor(cd) {
11
+ super();
12
+ this.cd = cd;
13
+ }
14
+ ngOnInit() {
15
+ this.checkbox = this.form.get(this.field.key);
16
+ if (this.props['checked'] !== undefined) {
17
+ this.checkbox?.setValue(this.props['checked'], { emitEvent: false });
18
+ this.checkbox?.updateValueAndValidity();
19
+ }
20
+ if (this.props['required']) {
21
+ this.addCheckboxValidator();
22
+ }
23
+ }
24
+ addCheckboxValidator() {
25
+ this.requiredMessage =
26
+ this.field.validation?.messages?.['required'] || 'This field is required';
27
+ this.field.validators = {
28
+ ...this.field.validators,
29
+ checkboxRequired: {
30
+ expression: (control) => {
31
+ return control.value === true;
32
+ },
33
+ message: this.requiredMessage,
34
+ },
35
+ };
36
+ this.options?.build?.(this.field);
37
+ this.checkbox?.updateValueAndValidity();
38
+ }
39
+ updateValue(value) {
40
+ if (this.checkbox) {
41
+ this.checkbox.setValue(value, { emitEvent: false });
42
+ this.cd.detectChanges();
43
+ }
44
+ }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
46
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyCheckboxComponent, selector: "formly-checkbox", usesInheritance: true, ngImport: i0, template: "<div class=\"mat-mdc-text-field-wrapper mdc-checkbox-field\" appExternalLink>\n <mat-checkbox [formControl]=\"checkbox\">\n <markdown [data]=\"props['label']\"></markdown>\n </mat-checkbox>\n\n <div *ngIf=\"showError\" class=\"text-error m-l-20\">\n {{ requiredMessage }}\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i5.ExternalLinkDirective, selector: "[appExternalLink]" }] }); }
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyCheckboxComponent, decorators: [{
49
+ type: Component,
50
+ args: [{ selector: 'formly-checkbox', template: "<div class=\"mat-mdc-text-field-wrapper mdc-checkbox-field\" appExternalLink>\n <mat-checkbox [formControl]=\"checkbox\">\n <markdown [data]=\"props['label']\"></markdown>\n </mat-checkbox>\n\n <div *ngIf=\"showError\" class=\"text-error m-l-20\">\n {{ requiredMessage }}\n </div>\n</div>\n" }]
51
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvZm9ybWx5L2Zvcm1seS1jaGVja2JveC9mb3JtbHktY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWNoZWNrYm94L2Zvcm1seS1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUFRN0MsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFNBQVM7SUFJcEQsWUFBb0IsRUFBcUI7UUFDdkMsS0FBSyxFQUFFLENBQUM7UUFEVSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtJQUV6QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFhLENBQWdCLENBQUM7UUFFdkUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsUUFBUSxFQUFFLHNCQUFzQixFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxlQUFlO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLHdCQUF3QixDQUFDO1FBRTVFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHO1lBQ3RCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQ3hCLGdCQUFnQixFQUFFO2dCQUNoQixVQUFVLEVBQUUsQ0FBQyxPQUF3QixFQUFFLEVBQUU7b0JBQ3ZDLE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlO2FBQzlCO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQzsrR0EzQ1UsdUJBQXVCO21HQUF2Qix1QkFBdUIsOEVDVHBDLDhTQVNBOzs0RkRBYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm1seS1jaGVja2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtbHktY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtbHktY2hlY2tib3guY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5Q2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGUgaW1wbGVtZW50cyBPbkluaXQge1xuICBjaGVja2JveDogRm9ybUNvbnRyb2w7XG4gIHJlcXVpcmVkTWVzc2FnZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tib3ggPSB0aGlzLmZvcm0uZ2V0KHRoaXMuZmllbGQua2V5IGFzIHN0cmluZykgYXMgRm9ybUNvbnRyb2w7XG5cbiAgICBpZiAodGhpcy5wcm9wc1snY2hlY2tlZCddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hlY2tib3g/LnNldFZhbHVlKHRoaXMucHJvcHNbJ2NoZWNrZWQnXSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5jaGVja2JveD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzWydyZXF1aXJlZCddKSB7XG4gICAgICB0aGlzLmFkZENoZWNrYm94VmFsaWRhdG9yKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRDaGVja2JveFZhbGlkYXRvcigpOiB2b2lkIHtcbiAgICB0aGlzLnJlcXVpcmVkTWVzc2FnZSA9XG4gICAgICB0aGlzLmZpZWxkLnZhbGlkYXRpb24/Lm1lc3NhZ2VzPy5bJ3JlcXVpcmVkJ10gfHwgJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnO1xuXG4gICAgdGhpcy5maWVsZC52YWxpZGF0b3JzID0ge1xuICAgICAgLi4udGhpcy5maWVsZC52YWxpZGF0b3JzLFxuICAgICAgY2hlY2tib3hSZXF1aXJlZDoge1xuICAgICAgICBleHByZXNzaW9uOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgPT09IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMucmVxdWlyZWRNZXNzYWdlLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMub3B0aW9ucz8uYnVpbGQ/Lih0aGlzLmZpZWxkKTtcbiAgICB0aGlzLmNoZWNrYm94Py51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tib3gpIHtcbiAgICAgIHRoaXMuY2hlY2tib3guc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIG1kYy1jaGVja2JveC1maWVsZFwiIGFwcEV4dGVybmFsTGluaz5cbiAgPG1hdC1jaGVja2JveCBbZm9ybUNvbnRyb2xdPVwiY2hlY2tib3hcIj5cbiAgICA8bWFya2Rvd24gW2RhdGFdPVwicHJvcHNbJ2xhYmVsJ11cIj48L21hcmtkb3duPlxuICA8L21hdC1jaGVja2JveD5cblxuICA8ZGl2ICpuZ0lmPVwic2hvd0Vycm9yXCIgY2xhc3M9XCJ0ZXh0LWVycm9yIG0tbC0yMFwiPlxuICAgIHt7IHJlcXVpcmVkTWVzc2FnZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,261 @@
1
+ import { Component, Input, Output, ViewChild, } from '@angular/core';
2
+ import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
3
+ import { FieldType } from '@ngx-formly/core';
4
+ import { take } from 'rxjs';
5
+ import { EnvironmentType } from '../../others/environment-type';
6
+ import { LabelKeys } from '../../enums/label.keys';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../services/dictionary.service";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "@angular/forms";
11
+ import * as i4 from "@angular/material/input";
12
+ import * as i5 from "@angular/material/form-field";
13
+ import * as i6 from "@angular/material/autocomplete";
14
+ import * as i7 from "@angular/material/core";
15
+ import * as i8 from "@angular/material/icon";
16
+ import * as i9 from "@ngx-formly/core";
17
+ import * as i10 from "../../shared-components/dictionaries-tree.component";
18
+ import * as i11 from "../../others/translation.pipe";
19
+ export class FormlyDictionaryDropdownTreeComponent extends FieldType {
20
+ constructor(dictionaryService, cdRef) {
21
+ super();
22
+ this.dictionaryService = dictionaryService;
23
+ this.cdRef = cdRef;
24
+ this.formlyKeys = LabelKeys.formly;
25
+ this.selectedValueText = '';
26
+ this.labelStyle = {};
27
+ this.selectedValueIds = [];
28
+ this.valuesIdsToShow = [];
29
+ this.selectedRelatedDictionaries = [];
30
+ this.dictionaryLabels = {};
31
+ // NEW: Properties for preloaded dictionary data
32
+ this.preloadedDictionary = null;
33
+ this.preloadedDictionaries = null;
34
+ this.usePreloadedData = false;
35
+ }
36
+ ngOnInit() {
37
+ if (this.props['dictionaryId']) {
38
+ this.dictionaryId = this.props['dictionaryId'];
39
+ }
40
+ if (this.props['valuesIdsToShow']) {
41
+ this.valuesIdsToShow = this.props['valuesIdsToShow'];
42
+ }
43
+ if (this.props['value']) {
44
+ this.selectedValueText = this.props['value'];
45
+ }
46
+ if (this.props['selectedRelatedDictionaries']) {
47
+ this.selectedRelatedDictionaries =
48
+ this.props['selectedRelatedDictionaries'];
49
+ }
50
+ if (this.props['dictionaryLabels']) {
51
+ this.dictionaryLabels = this.props['dictionaryLabels'];
52
+ }
53
+ // NEW: Initialize preloaded dictionary data
54
+ if (this.props['dictionaryData']) {
55
+ this.preloadedDictionary = this.props['dictionaryData'];
56
+ this.usePreloadedData = true;
57
+ }
58
+ if (this.props['preloadedDictionaries']) {
59
+ this.preloadedDictionaries = this.props['preloadedDictionaries'];
60
+ }
61
+ this.label = this.props['label'];
62
+ if (this.props.required) {
63
+ this.label += ' *';
64
+ }
65
+ this.currentLanguageIso = this.props['currentLanguageIso'];
66
+ this.currentLanguageId = this.props['currentLanguageId'];
67
+ if (this.props['design']) {
68
+ this.labelStyle = this.props['design']['.component-data-label'] || {};
69
+ }
70
+ if (this.props['selectedValueIds'] &&
71
+ Array.isArray(this.props['selectedValueIds'])) {
72
+ this.selectedValueIds = this.props['selectedValueIds'];
73
+ }
74
+ const initialControlValue = this.formControl.value;
75
+ const dictionaryDefaultValueId = this.props['dictionaryDefaultValueId'];
76
+ if (initialControlValue == null &&
77
+ dictionaryDefaultValueId != null &&
78
+ this.dictionaryId) {
79
+ const dictionary = this.props['dictionaryData'];
80
+ this.formControl.setValue(dictionaryDefaultValueId, {
81
+ emitEvent: false,
82
+ });
83
+ if (dictionary) {
84
+ const defaultValueDto = dictionary.values?.find((v) => v.id === dictionaryDefaultValueId);
85
+ if (defaultValueDto) {
86
+ const valueToSet = {
87
+ id: defaultValueDto.id,
88
+ name: defaultValueDto.name,
89
+ translations: defaultValueDto.valueTranslations?.map((t) => {
90
+ const languages = this.props['languages'];
91
+ const lang = languages?.find((l) => l.id === t.languageId);
92
+ return {
93
+ languageId: t.languageId,
94
+ languageIso: lang?.iso ?? '',
95
+ value: t.value,
96
+ };
97
+ }) || [],
98
+ active: defaultValueDto.active,
99
+ locked: defaultValueDto.locked,
100
+ childDictionaryId: defaultValueDto.childDictionaryId,
101
+ childDictionaryUUID: defaultValueDto.childDictionaryUUID,
102
+ referenceValues: [],
103
+ };
104
+ this.formControl.setValue(valueToSet, { emitEvent: false });
105
+ this.selectedValueIds = [defaultValueDto.id];
106
+ this.selectedValue = valueToSet;
107
+ this.updateSelectedValueText();
108
+ this.cdRef.markForCheck();
109
+ }
110
+ else {
111
+ this.updateSelectedValueText();
112
+ }
113
+ }
114
+ else {
115
+ console.warn('Dictionary data not preloaded, falling back to API call for:', this.dictionaryId);
116
+ this.dictionaryService
117
+ .getDictionary(this.dictionaryId, EnvironmentType.Config)
118
+ .pipe(take(1))
119
+ .subscribe((dto) => {
120
+ const defaultValueDto = dto.values?.find((v) => v.id === dictionaryDefaultValueId);
121
+ if (defaultValueDto) {
122
+ const valueToSet = {
123
+ id: defaultValueDto.id,
124
+ name: defaultValueDto.name,
125
+ translations: defaultValueDto.valueTranslations?.map((t) => {
126
+ const languages = this.props['languages'];
127
+ const lang = languages?.find((l) => l.id === t.languageId);
128
+ return {
129
+ languageId: t.languageId,
130
+ languageIso: lang?.iso ?? '',
131
+ value: t.value,
132
+ };
133
+ }) || [],
134
+ active: defaultValueDto.active,
135
+ locked: defaultValueDto.locked,
136
+ childDictionaryId: defaultValueDto.childDictionaryId,
137
+ childDictionaryUUID: defaultValueDto.childDictionaryUUID,
138
+ referenceValues: [],
139
+ };
140
+ this.formControl.setValue(valueToSet, { emitEvent: false });
141
+ this.selectedValueIds = [defaultValueDto.id];
142
+ this.selectedValue = valueToSet;
143
+ this.updateSelectedValueText();
144
+ this.cdRef.markForCheck();
145
+ }
146
+ else {
147
+ this.updateSelectedValueText();
148
+ }
149
+ }, (error) => {
150
+ console.error('Formly Dict: Failed to fetch details for default value', error);
151
+ this.updateSelectedValueText();
152
+ });
153
+ }
154
+ }
155
+ else {
156
+ this.updateSelectedValueText();
157
+ }
158
+ }
159
+ ngOnChanges(changes) {
160
+ if (changes['model'] || changes['formControl']) {
161
+ this.updateSelectedValueIds();
162
+ }
163
+ }
164
+ updateSelectedValueIds() {
165
+ const modelValue = this.formControl?.value;
166
+ if (modelValue && Array.isArray(modelValue.selectedValueIds)) {
167
+ this.selectedValueIds = modelValue.selectedValueIds;
168
+ }
169
+ else if (modelValue && modelValue.id) {
170
+ this.selectedValueIds = [modelValue.id];
171
+ }
172
+ }
173
+ onSelectedValueChanged(dictionaryValue) {
174
+ if (this.props['onSelectedValueChanged']) {
175
+ this.props['onSelectedValueChanged'](dictionaryValue);
176
+ }
177
+ this.updateSelectedValueText();
178
+ }
179
+ onSelectedDictionaryValuesChanged(values) {
180
+ if (values && values.length > 0) {
181
+ this.selectedValue = values[0];
182
+ if (this.autocompleteTrigger) {
183
+ this.autocompleteTrigger.closePanel();
184
+ }
185
+ this.onSelectedValueChanged(this.selectedValue);
186
+ if (this.autoInput) {
187
+ this.autoInput.nativeElement.value = this.filteredText = '';
188
+ }
189
+ }
190
+ }
191
+ filterChanged($event) {
192
+ if ($event.target) {
193
+ this.filteredText = $event.target.value;
194
+ }
195
+ }
196
+ toggleAutocomplete(event) {
197
+ event.stopPropagation();
198
+ if (this.autocompleteTrigger) {
199
+ if (this.autocompleteTrigger.panelOpen) {
200
+ this.autocompleteTrigger.closePanel();
201
+ }
202
+ else {
203
+ this.autocompleteTrigger.openPanel();
204
+ if (this.autoInput) {
205
+ this.autoInput.nativeElement.focus();
206
+ }
207
+ }
208
+ }
209
+ }
210
+ openAutocomplete() {
211
+ if (this.autocompleteTrigger && !this.autocompleteTrigger.panelOpen) {
212
+ this.autocompleteTrigger.openPanel();
213
+ }
214
+ }
215
+ updateSelectedValueText() {
216
+ if (!this.selectedValue) {
217
+ const formValue = this.formControl?.value;
218
+ if (formValue && typeof formValue === 'object' && formValue.id) {
219
+ this.selectedValue = formValue;
220
+ }
221
+ else {
222
+ const specificData = this.props?.['specificData'];
223
+ if (specificData && specificData.isMandatory !== true) {
224
+ this.props['required'] = specificData.isMandatory;
225
+ this.formControl.updateValueAndValidity();
226
+ this.formControl.setErrors(null);
227
+ }
228
+ this.selectedValueText = '';
229
+ return;
230
+ }
231
+ }
232
+ const translation = this.selectedValue.translations?.find((t) => t.languageId === this.currentLanguageId ||
233
+ t.languageIso === this.currentLanguageIso);
234
+ if (translation) {
235
+ this.selectedValueText = translation.value;
236
+ }
237
+ else {
238
+ this.selectedValueText = this.selectedValue.name || '';
239
+ }
240
+ }
241
+ getDictionaryLabel(dictionaryId) {
242
+ return this.dictionaryLabels[dictionaryId] || '';
243
+ }
244
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyDictionaryDropdownTreeComponent, deps: [{ token: i1.DictionaryService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
245
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyDictionaryDropdownTreeComponent, selector: "formly-dictionary-dropdown-tree", inputs: { dictionaryId: "dictionaryId" }, outputs: { selectedValue: "selectedValue" }, viewQueries: [{ propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autoInput", first: true, predicate: ["autoInput"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<form>\n <mat-label class=\"component-data-label m-l-2\" [ngStyle]=\"labelStyle\">\n {{ label }}</mat-label\n >\n <mat-form-field class=\"full-width\">\n <input\n type=\"text\"\n placeholder=\"{{ selectedValueText }}\"\n #autoInput\n aria-label=\"Text\"\n matInput\n [matAutocomplete]=\"auto\"\n (input)=\"filterChanged($event)\"\n (focus)=\"openAutocomplete()\"\n />\n <mat-icon matSuffix (click)=\"toggleAutocomplete($event)\"\n >keyboard_arrow_down</mat-icon\n >\n <mat-autocomplete\n #matAutocomplete=\"matAutocomplete\"\n #auto=\"matAutocomplete\"\n autoActiveFirstOption\n (optionSelected)=\"\n onSelectedDictionaryValuesChanged([$event.option.value])\n \"\n >\n <mat-option disabled>{{\n formlyKeys.selectAnItem | translate\n }}</mat-option>\n <app-dictionaries-tree\n [allowCheckItems]=\"false\"\n [drawReferenceDictionariesAsSeparateNode]=\"false\"\n [drawChildDictionariesAsSeparateNode]=\"false\"\n [drawRootNode]=\"false\"\n [filterText]=\"filteredText\"\n [allowSelectNonLeafNodes]=\"true\"\n [selectedValueIds]=\"selectedValueIds\"\n [languageId]=\"currentLanguageId\"\n [valuesIdsToShow]=\"valuesIdsToShow\"\n [selectedRelatedDictionaries]=\"selectedRelatedDictionaries\"\n [dictionaryLabels]=\"dictionaryLabels\"\n [preloadedDictionary]=\"preloadedDictionary\"\n [preloadedDictionaries]=\"preloadedDictionaries\"\n [usePreloadedData]=\"usePreloadedData\"\n (selectedDictionaryValuesChanged)=\"\n onSelectedDictionaryValuesChanged($event)\n \"\n >\n </app-dictionaries-tree>\n </mat-autocomplete>\n </mat-form-field>\n\n <formly-validation-message *ngIf=\"showError\" [field]=\"field\">\n </formly-validation-message>\n</form>\n", styles: ["formly-validation-message{color:red;font-size:12px}::ng-deep .mat-mdc-autocomplete-panel>app-dictionaries-tree>app-treeview>cdk-virtual-scroll-viewport{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "component", type: i10.DictionariesTreeComponent, selector: "app-dictionaries-tree", inputs: ["dictionaryId", "selectedValueIds", "allowCheckItems", "allowFilter", "drawReferenceDictionariesAsSeparateNode", "drawChildDictionariesAsSeparateNode", "drawRootNode", "filterText", "allowSelectNonLeafNodes", "languageId", "valuesIdsToShow", "hideParentArrow", "preloadedDictionary", "preloadedDictionaries", "usePreloadedData"], outputs: ["selectedDictionaryValuesChanged"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] }); }
246
+ }
247
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyDictionaryDropdownTreeComponent, decorators: [{
248
+ type: Component,
249
+ args: [{ selector: 'formly-dictionary-dropdown-tree', template: "<form>\n <mat-label class=\"component-data-label m-l-2\" [ngStyle]=\"labelStyle\">\n {{ label }}</mat-label\n >\n <mat-form-field class=\"full-width\">\n <input\n type=\"text\"\n placeholder=\"{{ selectedValueText }}\"\n #autoInput\n aria-label=\"Text\"\n matInput\n [matAutocomplete]=\"auto\"\n (input)=\"filterChanged($event)\"\n (focus)=\"openAutocomplete()\"\n />\n <mat-icon matSuffix (click)=\"toggleAutocomplete($event)\"\n >keyboard_arrow_down</mat-icon\n >\n <mat-autocomplete\n #matAutocomplete=\"matAutocomplete\"\n #auto=\"matAutocomplete\"\n autoActiveFirstOption\n (optionSelected)=\"\n onSelectedDictionaryValuesChanged([$event.option.value])\n \"\n >\n <mat-option disabled>{{\n formlyKeys.selectAnItem | translate\n }}</mat-option>\n <app-dictionaries-tree\n [allowCheckItems]=\"false\"\n [drawReferenceDictionariesAsSeparateNode]=\"false\"\n [drawChildDictionariesAsSeparateNode]=\"false\"\n [drawRootNode]=\"false\"\n [filterText]=\"filteredText\"\n [allowSelectNonLeafNodes]=\"true\"\n [selectedValueIds]=\"selectedValueIds\"\n [languageId]=\"currentLanguageId\"\n [valuesIdsToShow]=\"valuesIdsToShow\"\n [selectedRelatedDictionaries]=\"selectedRelatedDictionaries\"\n [dictionaryLabels]=\"dictionaryLabels\"\n [preloadedDictionary]=\"preloadedDictionary\"\n [preloadedDictionaries]=\"preloadedDictionaries\"\n [usePreloadedData]=\"usePreloadedData\"\n (selectedDictionaryValuesChanged)=\"\n onSelectedDictionaryValuesChanged($event)\n \"\n >\n </app-dictionaries-tree>\n </mat-autocomplete>\n </mat-form-field>\n\n <formly-validation-message *ngIf=\"showError\" [field]=\"field\">\n </formly-validation-message>\n</form>\n", styles: ["formly-validation-message{color:red;font-size:12px}::ng-deep .mat-mdc-autocomplete-panel>app-dictionaries-tree>app-treeview>cdk-virtual-scroll-viewport{overflow:hidden}\n"] }]
250
+ }], ctorParameters: () => [{ type: i1.DictionaryService }, { type: i0.ChangeDetectorRef }], propDecorators: { autocompleteTrigger: [{
251
+ type: ViewChild,
252
+ args: [MatAutocompleteTrigger]
253
+ }], autoInput: [{
254
+ type: ViewChild,
255
+ args: ['autoInput']
256
+ }], dictionaryId: [{
257
+ type: Input
258
+ }], selectedValue: [{
259
+ type: Output
260
+ }] } });
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL2Zvcm1seS9mb3JtbHktZGljdGlvbmFyeS1kcm9wZG93bi10cmVlL2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZS9mb3JtbHktZGljdGlvbmFyeS1kcm9wZG93bi10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVFuRCxNQUFNLE9BQU8scUNBQ1gsU0FBUSxTQUFTO0lBeUJqQixZQUNVLGlCQUFvQyxFQUNwQyxLQUF3QjtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQUhBLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFsQmxDLGVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBSTlCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUMvQixlQUFV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TUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUN2RCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsaUJBQWlCO1lBQ3ZDLENBQUMsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUM1QyxDQUFDO1FBQ0YsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxZQUFvQjtRQUNyQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkQsQ0FBQzsrR0EvUlUscUNBQXFDO21HQUFyQyxxQ0FBcUMsbU5BSXJDLHNCQUFzQixxTEM3Qm5DLGkzREF1REE7OzRGRDlCYSxxQ0FBcUM7a0JBTGpELFNBQVM7K0JBQ0UsaUNBQWlDO3NIQVMzQyxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUVULFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYixZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGljdGlvbmFyeVZhbHVlLCBUcmFuc2xhdGlvbkR0bywgVHJhbnNsYXRpb24sIERpY3Rpb25hcnlWYWx1ZUR0bywgRGljdGlvbmFyeUR0byB9IGZyb20gJy4uLy4uL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xhbmd1YWdlLm1vZGVsJztcbmltcG9ydCB7IEVudmlyb25tZW50VHlwZSB9IGZyb20gJy4uLy4uL290aGVycy9lbnZpcm9ubWVudC10eXBlJztcbmltcG9ydCB7IERpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGljdGlvbmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IExhYmVsS2V5cyB9IGZyb20gJy4uLy4uL2VudW1zL2xhYmVsLmtleXMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5RGljdGlvbmFyeURyb3Bkb3duVHJlZUNvbXBvbmVudFxuICBleHRlbmRzIEZpZWxkVHlwZVxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpXG4gIGF1dG9jb21wbGV0ZVRyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG4gIEBWaWV3Q2hpbGQoJ2F1dG9JbnB1dCcpIGF1dG9JbnB1dDogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgZGljdGlvbmFyeUlkOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZFZhbHVlOiBEaWN0aW9uYXJ5VmFsdWU7XG4gIGZpbHRlcmVkVGV4dDogc3RyaW5nO1xuICBmb3JtbHlLZXlzID0gTGFiZWxLZXlzLmZvcm1seTtcbiAgbGFiZWw6IHN0cmluZztcbiAgY3VycmVudExhbmd1YWdlSXNvOiBzdHJpbmc7XG4gIGN1cnJlbnRMYW5ndWFnZUlkOiBudW1iZXI7XG4gIHNlbGVjdGVkVmFsdWVUZXh0OiBzdHJpbmcgPSAnJztcbiAgbGFiZWxTdHlsZTogYW55ID0ge307XG4gIHNlbGVjdGVkVmFsdWVJZHM6IG51bWJlcltdID0gW107XG4gIHZhbHVlc0lkc1RvU2hvdzogbnVtYmVyW10gPSBbXTtcbiAgc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICBkaWN0aW9uYXJ5TGFiZWxzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgLy8gTkVXOiBQcm9wZXJ0aWVzIGZvciBwcmVsb2FkZWQgZGljdGlvbmFyeSBkYXRhXG4gIHByZWxvYWRlZERpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8gfCBudWxsID0gbnVsbDtcbiAgcHJlbG9hZGVkRGljdGlvbmFyaWVzOiBNYXA8c3RyaW5nLCBEaWN0aW9uYXJ5RHRvPiB8IG51bGwgPSBudWxsO1xuICB1c2VQcmVsb2FkZWREYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkaWN0aW9uYXJ5U2VydmljZTogRGljdGlvbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzWydkaWN0aW9uYXJ5SWQnXSkge1xuICAgICAgdGhpcy5kaWN0aW9uYXJ5SWQgPSB0aGlzLnByb3BzWydkaWN0aW9uYXJ5SWQnXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHNbJ3ZhbHVlc0lkc1RvU2hvdyddKSB7XG4gICAgICB0aGlzLnZhbHVlc0lkc1RvU2hvdyA9IHRoaXMucHJvcHNbJ3ZhbHVlc0lkc1RvU2hvdyddO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wc1sndmFsdWUnXSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlVGV4dCA9IHRoaXMucHJvcHNbJ3ZhbHVlJ107XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzWydzZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMnXSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMgPVxuICAgICAgICB0aGlzLnByb3BzWydzZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMnXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlMYWJlbHMnXSkge1xuICAgICAgdGhpcy5kaWN0aW9uYXJ5TGFiZWxzID0gdGhpcy5wcm9wc1snZGljdGlvbmFyeUxhYmVscyddO1xuICAgIH1cblxuICAgIC8vIE5FVzogSW5pdGlhbGl6ZSBwcmVsb2FkZWQgZGljdGlvbmFyeSBkYXRhXG4gICAgaWYgKHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlEYXRhJ10pIHtcbiAgICAgIHRoaXMucHJlbG9hZGVkRGljdGlvbmFyeSA9IHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlEYXRhJ107XG4gICAgICB0aGlzLnVzZVByZWxvYWRlZERhdGEgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wc1sncHJlbG9hZGVkRGljdGlvbmFyaWVzJ10pIHtcbiAgICAgIHRoaXMucHJlbG9hZGVkRGljdGlvbmFyaWVzID0gdGhpcy5wcm9wc1sncHJlbG9hZGVkRGljdGlvbmFyaWVzJ107XG4gICAgfVxuXG4gICAgdGhpcy5sYWJlbCA9IHRoaXMucHJvcHNbJ2xhYmVsJ10gYXMgc3RyaW5nO1xuICAgIGlmICh0aGlzLnByb3BzLnJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmxhYmVsICs9ICcgKic7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvID0gdGhpcy5wcm9wc1snY3VycmVudExhbmd1YWdlSXNvJ10gYXMgc3RyaW5nO1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlSWQgPSB0aGlzLnByb3BzWydjdXJyZW50TGFuZ3VhZ2VJZCddIGFzIG51bWJlcjtcblxuICAgIGlmICh0aGlzLnByb3BzWydkZXNpZ24nXSkge1xuICAgICAgdGhpcy5sYWJlbFN0eWxlID0gdGhpcy5wcm9wc1snZGVzaWduJ11bJy5jb21wb25lbnQtZGF0YS1sYWJlbCddIHx8IHt9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzWydzZWxlY3RlZFZhbHVlSWRzJ10gJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5wcm9wc1snc2VsZWN0ZWRWYWx1ZUlkcyddKVxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlSWRzID0gdGhpcy5wcm9wc1snc2VsZWN0ZWRWYWx1ZUlkcyddO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxDb250cm9sVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgIGNvbnN0IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCA9IHRoaXMucHJvcHNbJ2RpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCddIGFzXG4gICAgICB8IG51bWJlclxuICAgICAgfCBudWxsO1xuXG4gICAgaWYgKFxuICAgICAgaW5pdGlhbENvbnRyb2xWYWx1ZSA9PSBudWxsICYmXG4gICAgICBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgIT0gbnVsbCAmJlxuICAgICAgdGhpcy5kaWN0aW9uYXJ5SWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLnByb3BzWydkaWN0aW9uYXJ5RGF0YSddO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQsIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGljdGlvbmFyeSkge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVEdG8gPSBkaWN0aW9uYXJ5LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAodjogRGljdGlvbmFyeVZhbHVlRHRvKSA9PiB2LmlkID09PSBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZUR0bykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlVG9TZXQ6IERpY3Rpb25hcnlWYWx1ZSA9IHtcbiAgICAgICAgICAgIGlkOiBkZWZhdWx0VmFsdWVEdG8uaWQsXG4gICAgICAgICAgICBuYW1lOiBkZWZhdWx0VmFsdWVEdG8ubmFtZSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uczpcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlRHRvLnZhbHVlVHJhbnNsYXRpb25zPy5tYXAoXG4gICAgICAgICAgICAgICAgKHQ6IFRyYW5zbGF0aW9uRHRvKTogVHJhbnNsYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2VzID0gdGhpcy5wcm9wc1snbGFuZ3VhZ2VzJ10gYXNcbiAgICAgICAgICAgICAgICAgICAgfCBMYW5ndWFnZVtdXG4gICAgICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGFuZyA9IGxhbmd1YWdlcz8uZmluZCgobCkgPT4gbC5pZCA9PT0gdC5sYW5ndWFnZUlkKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlSWQ6IHQubGFuZ3VhZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VJc286IGxhbmc/LmlzbyA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSB8fCBbXSxcbiAgICAgICAgICAgIGFjdGl2ZTogZGVmYXVsdFZhbHVlRHRvLmFjdGl2ZSxcbiAgICAgICAgICAgIGxvY2tlZDogZGVmYXVsdFZhbHVlRHRvLmxvY2tlZCxcbiAgICAgICAgICAgIGNoaWxkRGljdGlvbmFyeUlkOiBkZWZhdWx0VmFsdWVEdG8uY2hpbGREaWN0aW9uYXJ5SWQsXG4gICAgICAgICAgICBjaGlsZERpY3Rpb25hcnlVVUlEOiBkZWZhdWx0VmFsdWVEdG8uY2hpbGREaWN0aW9uYXJ5VVVJRCxcbiAgICAgICAgICAgIHJlZmVyZW5jZVZhbHVlczogW10sXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWVUb1NldCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUlkcyA9IFtkZWZhdWx0VmFsdWVEdG8uaWRdO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlVG9TZXQ7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlVGV4dCgpO1xuICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlVGV4dCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ0RpY3Rpb25hcnkgZGF0YSBub3QgcHJlbG9hZGVkLCBmYWxsaW5nIGJhY2sgdG8gQVBJIGNhbGwgZm9yOicsXG4gICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5SWRcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlXG4gICAgICAgICAgLmdldERpY3Rpb25hcnkodGhpcy5kaWN0aW9uYXJ5SWQsIEVudmlyb25tZW50VHlwZS5Db25maWcpXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGR0bykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVEdG8gPSBkdG8udmFsdWVzPy5maW5kKFxuICAgICAgICAgICAgICAgICh2OiBEaWN0aW9uYXJ5VmFsdWVEdG8pID0+IHYuaWQgPT09IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlRHRvKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVUb1NldDogRGljdGlvbmFyeVZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgaWQ6IGRlZmF1bHRWYWx1ZUR0by5pZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGRlZmF1bHRWYWx1ZUR0by5uYW1lLFxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVEdG8udmFsdWVUcmFuc2xhdGlvbnM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAodDogVHJhbnNsYXRpb25EdG8pOiBUcmFuc2xhdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYW5ndWFnZXMgPSB0aGlzLnByb3BzWydsYW5ndWFnZXMnXSBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8IExhbmd1YWdlW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYW5nID0gbGFuZ3VhZ2VzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAobCkgPT4gbC5pZCA9PT0gdC5sYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VJZDogdC5sYW5ndWFnZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUlzbzogbGFuZz8uaXNvID8/ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApIHx8IFtdLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlOiBkZWZhdWx0VmFsdWVEdG8uYWN0aXZlLFxuICAgICAgICAgICAgICAgICAgbG9ja2VkOiBkZWZhdWx0VmFsdWVEdG8ubG9ja2VkLFxuICAgICAgICAgICAgICAgICAgY2hpbGREaWN0aW9uYXJ5SWQ6IGRlZmF1bHRWYWx1ZUR0by5jaGlsZERpY3Rpb25hcnlJZCxcbiAgICAgICAgICAgICAgICAgIGNoaWxkRGljdGlvbmFyeVVVSUQ6IGRlZmF1bHRWYWx1ZUR0by5jaGlsZERpY3Rpb25hcnlVVUlELFxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlVmFsdWVzOiBbXSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZVRvU2V0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlSWRzID0gW2RlZmF1bHRWYWx1ZUR0by5pZF07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVUb1NldDtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnRm9ybWx5IERpY3Q6IEZhaWxlZCB0byBmZXRjaCBkZXRhaWxzIGZvciBkZWZhdWx0IHZhbHVlJyxcbiAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlVGV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snbW9kZWwnXSB8fCBjaGFuZ2VzWydmb3JtQ29udHJvbCddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVJZHMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTZWxlY3RlZFZhbHVlSWRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLmZvcm1Db250cm9sPy52YWx1ZTtcblxuICAgIGlmIChtb2RlbFZhbHVlICYmIEFycmF5LmlzQXJyYXkobW9kZWxWYWx1ZS5zZWxlY3RlZFZhbHVlSWRzKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlSWRzID0gbW9kZWxWYWx1ZS5zZWxlY3RlZFZhbHVlSWRzO1xuICAgIH0gZWxzZSBpZiAobW9kZWxWYWx1ZSAmJiBtb2RlbFZhbHVlLmlkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVJZHMgPSBbbW9kZWxWYWx1ZS5pZF07XG4gICAgfVxuICB9XG5cbiAgb25TZWxlY3RlZFZhbHVlQ2hhbmdlZChkaWN0aW9uYXJ5VmFsdWU6IERpY3Rpb25hcnlWYWx1ZSkge1xuICAgIGlmICh0aGlzLnByb3BzWydvblNlbGVjdGVkVmFsdWVDaGFuZ2VkJ10pIHtcbiAgICAgIHRoaXMucHJvcHNbJ29uU2VsZWN0ZWRWYWx1ZUNoYW5nZWQnXShkaWN0aW9uYXJ5VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVUZXh0KCk7XG4gIH1cblxuICBvblNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQodmFsdWVzOiBEaWN0aW9uYXJ5VmFsdWVbXSkge1xuICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlc1swXTtcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIpIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyLmNsb3NlUGFuZWwoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25TZWxlY3RlZFZhbHVlQ2hhbmdlZCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuXG4gICAgICBpZiAodGhpcy5hdXRvSW5wdXQpIHtcbiAgICAgICAgdGhpcy5hdXRvSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuZmlsdGVyZWRUZXh0ID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyQ2hhbmdlZCgkZXZlbnQ6IGFueSkge1xuICAgIGlmICgkZXZlbnQudGFyZ2V0KSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVGV4dCA9ICRldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQXV0b2NvbXBsZXRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlcikge1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5wYW5lbE9wZW4pIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyLmNsb3NlUGFuZWwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5vcGVuUGFuZWwoKTtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0lucHV0KSB7XG4gICAgICAgICAgdGhpcy5hdXRvSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3BlbkF1dG9jb21wbGV0ZSgpIHtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyICYmICF0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIub3BlblBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFZhbHVlVGV4dCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5mb3JtQ29udHJvbD8udmFsdWU7XG4gICAgICBpZiAoZm9ybVZhbHVlICYmIHR5cGVvZiBmb3JtVmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1WYWx1ZS5pZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBmb3JtVmFsdWUgYXMgRGljdGlvbmFyeVZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRhID0gdGhpcy5wcm9wcz8uWydzcGVjaWZpY0RhdGEnXTtcbiAgICAgICAgaWYgKHNwZWNpZmljRGF0YSAmJiBzcGVjaWZpY0RhdGEuaXNNYW5kYXRvcnkgIT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnByb3BzWydyZXF1aXJlZCddID0gc3BlY2lmaWNEYXRhLmlzTWFuZGF0b3J5O1xuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZVRleHQgPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5zZWxlY3RlZFZhbHVlLnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICh0KSA9PlxuICAgICAgICB0Lmxhbmd1YWdlSWQgPT09IHRoaXMuY3VycmVudExhbmd1YWdlSWQgfHxcbiAgICAgICAgdC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICApO1xuICAgIGlmICh0cmFuc2xhdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlVGV4dCA9IHRyYW5zbGF0aW9uLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVUZXh0ID0gdGhpcy5zZWxlY3RlZFZhbHVlLm5hbWUgfHwgJyc7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGljdGlvbmFyeUxhYmVsKGRpY3Rpb25hcnlJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5TGFiZWxzW2RpY3Rpb25hcnlJZF0gfHwgJyc7XG4gIH1cbn1cbiIsIjxmb3JtPlxuICA8bWF0LWxhYmVsIGNsYXNzPVwiY29tcG9uZW50LWRhdGEtbGFiZWwgbS1sLTJcIiBbbmdTdHlsZV09XCJsYWJlbFN0eWxlXCI+XG4gICAge3sgbGFiZWwgfX08L21hdC1sYWJlbFxuICA+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIj5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHBsYWNlaG9sZGVyPVwie3sgc2VsZWN0ZWRWYWx1ZVRleHQgfX1cIlxuICAgICAgI2F1dG9JbnB1dFxuICAgICAgYXJpYS1sYWJlbD1cIlRleHRcIlxuICAgICAgbWF0SW5wdXRcbiAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAoaW5wdXQpPVwiZmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvcGVuQXV0b2NvbXBsZXRlKClcIlxuICAgIC8+XG4gICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAoY2xpY2spPVwidG9nZ2xlQXV0b2NvbXBsZXRlKCRldmVudClcIlxuICAgICAgPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uXG4gICAgPlxuICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAjbWF0QXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgIGF1dG9BY3RpdmVGaXJzdE9wdGlvblxuICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIlxuICAgICAgICBvblNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQoWyRldmVudC5vcHRpb24udmFsdWVdKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZD57e1xuICAgICAgICBmb3JtbHlLZXlzLnNlbGVjdEFuSXRlbSB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1vcHRpb24+XG4gICAgICA8YXBwLWRpY3Rpb25hcmllcy10cmVlXG4gICAgICAgIFthbGxvd0NoZWNrSXRlbXNdPVwiZmFsc2VcIlxuICAgICAgICBbZHJhd1JlZmVyZW5jZURpY3Rpb25hcmllc0FzU2VwYXJhdGVOb2RlXT1cImZhbHNlXCJcbiAgICAgICAgW2RyYXdDaGlsZERpY3Rpb25hcmllc0FzU2VwYXJhdGVOb2RlXT1cImZhbHNlXCJcbiAgICAgICAgW2RyYXdSb290Tm9kZV09XCJmYWxzZVwiXG4gICAgICAgIFtmaWx0ZXJUZXh0XT1cImZpbHRlcmVkVGV4dFwiXG4gICAgICAgIFthbGxvd1NlbGVjdE5vbkxlYWZOb2Rlc109XCJ0cnVlXCJcbiAgICAgICAgW3NlbGVjdGVkVmFsdWVJZHNdPVwic2VsZWN0ZWRWYWx1ZUlkc1wiXG4gICAgICAgIFtsYW5ndWFnZUlkXT1cImN1cnJlbnRMYW5ndWFnZUlkXCJcbiAgICAgICAgW3ZhbHVlc0lkc1RvU2hvd109XCJ2YWx1ZXNJZHNUb1Nob3dcIlxuICAgICAgICBbc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzXT1cInNlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllc1wiXG4gICAgICAgIFtkaWN0aW9uYXJ5TGFiZWxzXT1cImRpY3Rpb25hcnlMYWJlbHNcIlxuICAgICAgICBbcHJlbG9hZGVkRGljdGlvbmFyeV09XCJwcmVsb2FkZWREaWN0aW9uYXJ5XCJcbiAgICAgICAgW3ByZWxvYWRlZERpY3Rpb25hcmllc109XCJwcmVsb2FkZWREaWN0aW9uYXJpZXNcIlxuICAgICAgICBbdXNlUHJlbG9hZGVkRGF0YV09XCJ1c2VQcmVsb2FkZWREYXRhXCJcbiAgICAgICAgKHNlbGVjdGVkRGljdGlvbmFyeVZhbHVlc0NoYW5nZWQpPVwiXG4gICAgICAgICAgb25TZWxlY3RlZERpY3Rpb25hcnlWYWx1ZXNDaGFuZ2VkKCRldmVudClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgIDwvYXBwLWRpY3Rpb25hcmllcy10cmVlPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8Zm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZSAqbmdJZj1cInNob3dFcnJvclwiIFtmaWVsZF09XCJmaWVsZFwiPlxuICA8L2Zvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2U+XG48L2Zvcm0+XG4iXX0=
@@ -0,0 +1,126 @@
1
+ import { Component } from '@angular/core';
2
+ import { saveAs } from 'file-saver';
3
+ import { Utils } from '../../others/utils';
4
+ import { BaseFormlyControlComponent } from '../baseFormlyControlComponent';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../services/applicationData.service";
7
+ import * as i2 from "../../services/dialog.service";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "@angular/material/button";
10
+ import * as i5 from "@angular/material/icon";
11
+ import * as i6 from "@angular/material/progress-spinner";
12
+ import * as i7 from "../../others/translation.pipe";
13
+ export class FormlyDownloadDocumentsComponent extends BaseFormlyControlComponent {
14
+ constructor(appDataService, dialog, cdr) {
15
+ super(cdr);
16
+ this.appDataService = appDataService;
17
+ this.dialog = dialog;
18
+ }
19
+ onInit() {
20
+ if (this.isDisplayMode === true) {
21
+ this.getDownloadableDocuments();
22
+ }
23
+ }
24
+ getDownloadableDocuments() {
25
+ const configDocs = this.controlData?.specificControlData?.documents;
26
+ if (configDocs) {
27
+ this.isLoading = true;
28
+ let cmd = {
29
+ appDataId: this.props['appDataId'],
30
+ controlId: this.controlData.identifier,
31
+ isDisplayMode: this.isDisplayMode,
32
+ appConfigurationUUID: this.appId,
33
+ environment: this.env,
34
+ };
35
+ this.appDataService.getGenerateDocuments(cmd).subscribe({
36
+ next: (result) => {
37
+ this.documents = this.orderDocumentsAsConfigured(result);
38
+ this.isLoading = false;
39
+ this.cdr.detectChanges();
40
+ },
41
+ error: (err) => {
42
+ this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'failToDownload');
43
+ this.isLoading = false;
44
+ this.cdr.detectChanges();
45
+ },
46
+ });
47
+ }
48
+ this.cdr.detectChanges();
49
+ }
50
+ orderDocumentsAsConfigured(documents) {
51
+ let list = [];
52
+ if (documents) {
53
+ const configuredDocuments = this.controlData?.specificControlData?.documents;
54
+ if (configuredDocuments) {
55
+ configuredDocuments.forEach((d) => {
56
+ const found = documents.find((f) => f.documentId === d.id);
57
+ if (found) {
58
+ list.push(found);
59
+ }
60
+ });
61
+ }
62
+ }
63
+ return list;
64
+ }
65
+ retry() {
66
+ this.getDownloadableDocuments();
67
+ }
68
+ onPageSelected() {
69
+ this.getDownloadableDocuments();
70
+ }
71
+ async downloadDocument(doc, index) {
72
+ this.isDownloading = true;
73
+ this.docIndex = index;
74
+ if (doc.isApiDocument === true) {
75
+ let apiRequest = {
76
+ appDataId: this.appDataId,
77
+ documentId: doc.documentId,
78
+ };
79
+ this.appDataService.doDocumentRequest(apiRequest).subscribe({
80
+ next: (docs) => {
81
+ if (docs?.length > 0) {
82
+ const match = docs.find((d) => d.documentId === doc.documentId);
83
+ if (match) {
84
+ const blob = Utils.base64toBlob(match.content);
85
+ saveAs(blob, match.name);
86
+ this.isDownloading = false;
87
+ this.cdr.detectChanges();
88
+ }
89
+ }
90
+ else {
91
+ this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'noDocumentsToDownload');
92
+ this.isDownloading = false;
93
+ this.cdr.detectChanges();
94
+ }
95
+ },
96
+ error: (err) => {
97
+ this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'failToDownload');
98
+ this.isDownloading = false;
99
+ this.cdr.detectChanges();
100
+ },
101
+ });
102
+ }
103
+ else {
104
+ this.appDataService
105
+ .downloadFile(this.props['appDataId'], doc.documentId, doc.fileName)
106
+ .subscribe({
107
+ next: (data) => {
108
+ saveAs(data, doc.fileName), (this.isDownloading = false);
109
+ this.cdr.detectChanges();
110
+ },
111
+ error: (err) => {
112
+ this.dialog.popErrorTranslation(this.controlData.errorsTranslations, this.langIso, 'failToDownload');
113
+ this.isDownloading = false;
114
+ this.cdr.detectChanges();
115
+ },
116
+ });
117
+ }
118
+ }
119
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyDownloadDocumentsComponent, deps: [{ token: i1.ApplicationDataService }, { token: i2.DialogService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormlyDownloadDocumentsComponent, selector: "app-formly-download-documents", usesInheritance: true, ngImport: i0, template: "<p *ngIf=\"title\">\n {{ title }}\n</p>\n<p *ngIf=\"isLoading === false && (!documents || documents.length === 0)\">\n {{ getErrorTranslationMessage(\"noDocumentsToDownload\") }}\n</p>\n<mat-spinner *ngIf=\"isLoading === true\" class=\"m-x-auto\"></mat-spinner>\n<table *ngIf=\"isLoading === false && documents\">\n <thead class=\"table-head\">\n <tr>\n <th>\n {{ \"document\" | translate }}\n </th>\n <th>\n {{ \"common.actions.download\" | translate }}\n </th>\n </tr>\n </thead>\n <tbody class=\"table-detail\">\n <tr *ngFor=\"let doc of documents; let i = index\">\n <td class=\"text-center\">\n {{ doc.name }}\n </td>\n <td class=\"text-center d-flex justify-content-center align-items-center\">\n <button\n (click)=\"downloadDocument(doc, i)\"\n mat-stroked-button\n color=\"primary\"\n class=\"custom-field\"\n >\n <mat-icon>download</mat-icon>\n {{ \"common.actions.download\" | translate }}\n </button>\n <div class=\"m-x-1 upload-spinner\">\n <mat-spinner\n *ngIf=\"isDownloading && docIndex === i\"\n mode=\"indeterminate\"\n [diameter]=\"30\"\n ></mat-spinner>\n </div>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [".upload-spinner{width:30px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
121
+ }
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyDownloadDocumentsComponent, decorators: [{
123
+ type: Component,
124
+ args: [{ selector: 'app-formly-download-documents', template: "<p *ngIf=\"title\">\n {{ title }}\n</p>\n<p *ngIf=\"isLoading === false && (!documents || documents.length === 0)\">\n {{ getErrorTranslationMessage(\"noDocumentsToDownload\") }}\n</p>\n<mat-spinner *ngIf=\"isLoading === true\" class=\"m-x-auto\"></mat-spinner>\n<table *ngIf=\"isLoading === false && documents\">\n <thead class=\"table-head\">\n <tr>\n <th>\n {{ \"document\" | translate }}\n </th>\n <th>\n {{ \"common.actions.download\" | translate }}\n </th>\n </tr>\n </thead>\n <tbody class=\"table-detail\">\n <tr *ngFor=\"let doc of documents; let i = index\">\n <td class=\"text-center\">\n {{ doc.name }}\n </td>\n <td class=\"text-center d-flex justify-content-center align-items-center\">\n <button\n (click)=\"downloadDocument(doc, i)\"\n mat-stroked-button\n color=\"primary\"\n class=\"custom-field\"\n >\n <mat-icon>download</mat-icon>\n {{ \"common.actions.download\" | translate }}\n </button>\n <div class=\"m-x-1 upload-spinner\">\n <mat-spinner\n *ngIf=\"isDownloading && docIndex === i\"\n mode=\"indeterminate\"\n [diameter]=\"30\"\n ></mat-spinner>\n </div>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [".upload-spinner{width:30px!important}\n"] }]
125
+ }], ctorParameters: () => [{ type: i1.ApplicationDataService }, { type: i2.DialogService }, { type: i0.ChangeDetectorRef }] });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWRvd25sb2FkLWRvY3VtZW50cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL2Zvcm1seS9mb3JtbHktZG93bmxvYWQtZG9jdW1lbnRzL2Zvcm1seS1kb3dubG9hZC1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWRvd25sb2FkLWRvY3VtZW50cy9mb3JtbHktZG93bmxvYWQtZG9jdW1lbnRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUTdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFPM0UsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLDBCQUEwQjtJQUk5RSxZQUNVLGNBQXNDLEVBQ3RDLE1BQXFCLEVBQzdCLEdBQXNCO1FBRXRCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUpILG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFlO0lBSS9CLENBQUM7SUFFUSxNQUFNO1FBQ2IsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxDQUFDO1FBQ3BFLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLEdBQUcsR0FBd0M7Z0JBQzdDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDbEMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtnQkFDdEMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUNqQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDaEMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHO2FBQ3RCLENBQUM7WUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDdEQsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3pELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMzQixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQ25DLElBQUksQ0FBQyxPQUFPLEVBQ1osZ0JBQWdCLENBQ2pCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsMEJBQTBCLENBQ3hCLFNBQThCO1FBRTlCLElBQUksSUFBSSxHQUF3QixFQUFFLENBQUM7UUFDbkMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sbUJBQW1CLEdBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxDQUFDO1lBQ25ELElBQUksbUJBQW1CLEVBQUUsQ0FBQztnQkFDeEIsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMzRCxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRVEsY0FBYztRQUNyQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQXNCLEVBQUUsS0FBYTtRQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLEdBQUcsQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDL0IsSUFBSSxVQUFVLEdBQXVCO2dCQUNuQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTthQUMzQixDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzFELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNiLElBQUksSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2hFLElBQUksS0FBSyxFQUFFLENBQUM7NEJBQ1YsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQy9DLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzs0QkFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDM0IsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFDWix1QkFBdUIsQ0FDeEIsQ0FBQzt3QkFDRixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDM0IsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQ25DLElBQUksQ0FBQyxPQUFPLEVBQ1osZ0JBQWdCLENBQ2pCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxjQUFjO2lCQUNoQixZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUM7aUJBQ25FLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDYixNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUM7b0JBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFDWixnQkFBZ0IsQ0FDakIsQ0FBQztvQkFDRixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDOytHQXRJVSxnQ0FBZ0M7bUdBQWhDLGdDQUFnQyw0RkNqQjdDLDZ6Q0E0Q0E7OzRGRDNCYSxnQ0FBZ0M7a0JBTDVDLFNBQVM7K0JBQ0UsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25EYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uRGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQXBpRG9jdW1lbnRSZXF1ZXN0LFxuICBBcHBsaWNhdGlvbkdldEdlbmVyYXRlZERvY3VtZW50c0R0byxcbiAgR2VuZXJhdGVkRG9jdW1lbnQsXG59IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uL290aGVycy91dGlscyc7XG5pbXBvcnQgeyBCYXNlRm9ybWx5Q29udHJvbENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2VGb3JtbHlDb250cm9sQ29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWZvcm1seS1kb3dubG9hZC1kb2N1bWVudHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LWRvd25sb2FkLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9mb3JtbHktZG93bmxvYWQtZG9jdW1lbnRzLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5RG93bmxvYWREb2N1bWVudHNDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybWx5Q29udHJvbENvbXBvbmVudCB7XG4gIGRvY3VtZW50czogR2VuZXJhdGVkRG9jdW1lbnRbXTtcbiAgaXNEb3dubG9hZGluZzogYm9vbGVhbjtcbiAgZG9jSW5kZXg6IG51bWJlcjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBEYXRhU2VydmljZTogQXBwbGljYXRpb25EYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZSxcbiAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGNkcik7XG4gIH1cblxuICBvdmVycmlkZSBvbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5nZXREb3dubG9hZGFibGVEb2N1bWVudHMoKTtcbiAgICB9XG4gIH1cblxuICBnZXREb3dubG9hZGFibGVEb2N1bWVudHMoKSB7XG4gICAgY29uc3QgY29uZmlnRG9jcyA9IHRoaXMuY29udHJvbERhdGE/LnNwZWNpZmljQ29udHJvbERhdGE/LmRvY3VtZW50cztcbiAgICBpZiAoY29uZmlnRG9jcykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgbGV0IGNtZDogQXBwbGljYXRpb25HZXRHZW5lcmF0ZWREb2N1bWVudHNEdG8gPSB7XG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5wcm9wc1snYXBwRGF0YUlkJ10sXG4gICAgICAgIGNvbnRyb2xJZDogdGhpcy5jb250cm9sRGF0YS5pZGVudGlmaWVyLFxuICAgICAgICBpc0Rpc3BsYXlNb2RlOiB0aGlzLmlzRGlzcGxheU1vZGUsXG4gICAgICAgIGFwcENvbmZpZ3VyYXRpb25VVUlEOiB0aGlzLmFwcElkLFxuICAgICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnYsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFwcERhdGFTZXJ2aWNlLmdldEdlbmVyYXRlRG9jdW1lbnRzKGNtZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRzID0gdGhpcy5vcmRlckRvY3VtZW50c0FzQ29uZmlndXJlZChyZXN1bHQpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZGlhbG9nLnBvcEVycm9yVHJhbnNsYXRpb24oXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xEYXRhLmVycm9yc1RyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIHRoaXMubGFuZ0lzbyxcbiAgICAgICAgICAgICdmYWlsVG9Eb3dubG9hZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9yZGVyRG9jdW1lbnRzQXNDb25maWd1cmVkKFxuICAgIGRvY3VtZW50czogR2VuZXJhdGVkRG9jdW1lbnRbXVxuICApOiBHZW5lcmF0ZWREb2N1bWVudFtdIHtcbiAgICBsZXQgbGlzdDogR2VuZXJhdGVkRG9jdW1lbnRbXSA9IFtdO1xuICAgIGlmIChkb2N1bWVudHMpIHtcbiAgICAgIGNvbnN0IGNvbmZpZ3VyZWREb2N1bWVudHMgPVxuICAgICAgICB0aGlzLmNvbnRyb2xEYXRhPy5zcGVjaWZpY0NvbnRyb2xEYXRhPy5kb2N1bWVudHM7XG4gICAgICBpZiAoY29uZmlndXJlZERvY3VtZW50cykge1xuICAgICAgICBjb25maWd1cmVkRG9jdW1lbnRzLmZvckVhY2goKGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gZG9jdW1lbnRzLmZpbmQoKGYpID0+IGYuZG9jdW1lbnRJZCA9PT0gZC5pZCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICBsaXN0LnB1c2goZm91bmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgcmV0cnkoKSB7XG4gICAgdGhpcy5nZXREb3dubG9hZGFibGVEb2N1bWVudHMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uUGFnZVNlbGVjdGVkKCkge1xuICAgIHRoaXMuZ2V0RG93bmxvYWRhYmxlRG9jdW1lbnRzKCk7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZERvY3VtZW50KGRvYzogR2VuZXJhdGVkRG9jdW1lbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmlzRG93bmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZG9jSW5kZXggPSBpbmRleDtcbiAgICBpZiAoZG9jLmlzQXBpRG9jdW1lbnQgPT09IHRydWUpIHtcbiAgICAgIGxldCBhcGlSZXF1ZXN0OiBBcGlEb2N1bWVudFJlcXVlc3QgPSB7XG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhSWQsXG4gICAgICAgIGRvY3VtZW50SWQ6IGRvYy5kb2N1bWVudElkLFxuICAgICAgfTtcbiAgICAgIHRoaXMuYXBwRGF0YVNlcnZpY2UuZG9Eb2N1bWVudFJlcXVlc3QoYXBpUmVxdWVzdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRvY3MpID0+IHtcbiAgICAgICAgICBpZiAoZG9jcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBkb2NzLmZpbmQoKGQpID0+IGQuZG9jdW1lbnRJZCA9PT0gZG9jLmRvY3VtZW50SWQpO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBVdGlscy5iYXNlNjR0b0Jsb2IobWF0Y2guY29udGVudCk7XG4gICAgICAgICAgICAgIHNhdmVBcyhibG9iLCBtYXRjaC5uYW1lKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0Rvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3JUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sRGF0YS5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgIHRoaXMubGFuZ0lzbyxcbiAgICAgICAgICAgICAgJ25vRG9jdW1lbnRzVG9Eb3dubG9hZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmlzRG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3JUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHRoaXMuY29udHJvbERhdGEuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgdGhpcy5sYW5nSXNvLFxuICAgICAgICAgICAgJ2ZhaWxUb0Rvd25sb2FkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5pc0Rvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwRGF0YVNlcnZpY2VcbiAgICAgICAgLmRvd25sb2FkRmlsZSh0aGlzLnByb3BzWydhcHBEYXRhSWQnXSwgZG9jLmRvY3VtZW50SWQsIGRvYy5maWxlTmFtZSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHNhdmVBcyhkYXRhLCBkb2MuZmlsZU5hbWUpLCAodGhpcy5pc0Rvd25sb2FkaW5nID0gZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLnBvcEVycm9yVHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbERhdGEuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICB0aGlzLmxhbmdJc28sXG4gICAgICAgICAgICAgICdmYWlsVG9Eb3dubG9hZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmlzRG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxwICpuZ0lmPVwidGl0bGVcIj5cbiAge3sgdGl0bGUgfX1cbjwvcD5cbjxwICpuZ0lmPVwiaXNMb2FkaW5nID09PSBmYWxzZSAmJiAoIWRvY3VtZW50cyB8fCBkb2N1bWVudHMubGVuZ3RoID09PSAwKVwiPlxuICB7eyBnZXRFcnJvclRyYW5zbGF0aW9uTWVzc2FnZShcIm5vRG9jdW1lbnRzVG9Eb3dubG9hZFwiKSB9fVxuPC9wPlxuPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNMb2FkaW5nID09PSB0cnVlXCIgY2xhc3M9XCJtLXgtYXV0b1wiPjwvbWF0LXNwaW5uZXI+XG48dGFibGUgKm5nSWY9XCJpc0xvYWRpbmcgPT09IGZhbHNlICYmIGRvY3VtZW50c1wiPlxuICA8dGhlYWQgY2xhc3M9XCJ0YWJsZS1oZWFkXCI+XG4gICAgPHRyPlxuICAgICAgPHRoPlxuICAgICAgICB7eyBcImRvY3VtZW50XCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGg+XG4gICAgICA8dGg+XG4gICAgICAgIHt7IFwiY29tbW9uLmFjdGlvbnMuZG93bmxvYWRcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHkgY2xhc3M9XCJ0YWJsZS1kZXRhaWxcIj5cbiAgICA8dHIgKm5nRm9yPVwibGV0IGRvYyBvZiBkb2N1bWVudHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgIHt7IGRvYy5uYW1lIH19XG4gICAgICA8L3RkPlxuICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWREb2N1bWVudChkb2MsIGkpXCJcbiAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWZpZWxkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICAgICAge3sgXCJjb21tb24uYWN0aW9ucy5kb3dubG9hZFwiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS14LTEgdXBsb2FkLXNwaW5uZXJcIj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNEb3dubG9hZGluZyAmJiBkb2NJbmRleCA9PT0gaVwiXG4gICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMzBcIlxuICAgICAgICAgID48L21hdC1zcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4iXX0=