geonetwork-ui 2.4.0-dev.e7ff1d25 → 2.4.0-dev.e97caaf2

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 (165) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.mjs +1 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +4 -2
  3. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +11 -1
  4. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +11 -1
  5. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  6. package/esm2022/libs/common/domain/src/lib/model/user/user.model.mjs +1 -1
  7. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  8. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  9. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +6 -1
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +4 -1
  11. package/esm2022/libs/feature/editor/src/lib/components/contact-card/contact-card.component.mjs +3 -3
  12. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +78 -0
  13. package/esm2022/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.mjs +44 -79
  14. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +35 -41
  15. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +19 -41
  16. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +10 -8
  17. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.mjs +101 -0
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.mjs +22 -25
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +14 -7
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.mjs +10 -6
  21. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +11 -11
  22. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.mjs +9 -8
  23. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +111 -5
  24. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.mjs +49 -53
  25. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +16 -14
  26. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +34 -64
  27. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +5 -3
  28. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +8 -2
  29. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +5 -1
  30. package/esm2022/libs/ui/elements/src/lib/sortable-list/sortable-list.component.mjs +3 -11
  31. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  32. package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +26 -24
  33. package/esm2022/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.mjs +32 -0
  34. package/esm2022/libs/ui/map/src/lib/ui-map.module.mjs +3 -3
  35. package/esm2022/translations/de.json +12 -0
  36. package/esm2022/translations/en.json +12 -0
  37. package/esm2022/translations/es.json +12 -0
  38. package/esm2022/translations/fr.json +14 -2
  39. package/esm2022/translations/it.json +12 -0
  40. package/esm2022/translations/nl.json +12 -0
  41. package/esm2022/translations/pt.json +12 -0
  42. package/fesm2022/geonetwork-ui.mjs +846 -521
  43. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  44. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts +2 -6
  45. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts.map +1 -1
  46. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  47. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  48. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +1 -0
  49. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  50. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +1 -0
  51. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  52. package/libs/common/domain/src/lib/model/user/user.model.d.ts +1 -1
  53. package/libs/common/domain/src/lib/model/user/user.model.d.ts.map +1 -1
  54. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -0
  55. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  56. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +1 -0
  57. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  58. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +5 -0
  59. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  60. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +1 -0
  61. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  62. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts +32 -0
  63. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts.map +1 -0
  64. package/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.d.ts +13 -13
  65. package/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.d.ts.map +1 -1
  66. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts +10 -13
  67. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts.map +1 -1
  68. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts +8 -19
  69. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
  70. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +6 -4
  71. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -1
  72. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts +22 -0
  73. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.d.ts.map +1 -0
  74. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts +10 -12
  75. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts.map +1 -1
  76. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts +5 -3
  77. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -1
  78. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts +4 -3
  79. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.d.ts.map +1 -1
  80. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts +4 -4
  81. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -1
  82. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.d.ts +4 -3
  83. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.d.ts.map +1 -1
  84. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts +23 -0
  85. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -1
  86. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts +15 -17
  87. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts.map +1 -1
  88. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +5 -5
  89. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -1
  90. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +15 -27
  91. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  92. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts +3 -2
  93. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -1
  94. package/libs/feature/editor/src/lib/fields.config.d.ts +1 -0
  95. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  96. package/libs/feature/editor/src/lib/services/editor.service.d.ts +1 -0
  97. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  98. package/libs/ui/elements/src/lib/sortable-list/sortable-list.component.d.ts +1 -6
  99. package/libs/ui/elements/src/lib/sortable-list/sortable-list.component.d.ts.map +1 -1
  100. package/libs/ui/inputs/src/index.d.ts +1 -0
  101. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  102. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +5 -3
  103. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -1
  104. package/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.d.ts +17 -0
  105. package/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.d.ts.map +1 -0
  106. package/package.json +1 -1
  107. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +6 -1
  108. package/src/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.ts +2 -6
  109. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +3 -1
  110. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +12 -1
  111. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +43 -12
  112. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +1 -0
  113. package/src/libs/common/domain/src/lib/model/user/user.model.ts +1 -1
  114. package/src/libs/common/domain/src/lib/platform.service.interface.ts +4 -0
  115. package/src/libs/common/fixtures/src/lib/organisations.fixture.ts +10 -0
  116. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +2 -0
  117. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +15 -0
  118. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +4 -0
  119. package/src/libs/feature/editor/src/lib/components/contact-card/contact-card.component.html +4 -2
  120. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.css +0 -0
  121. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +26 -0
  122. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.ts +89 -0
  123. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.html +1 -1
  124. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.ts +46 -94
  125. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +63 -85
  126. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.html +7 -17
  127. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +18 -51
  128. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +13 -5
  129. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.css +0 -0
  130. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.html +4 -0
  131. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-map-container/form-field-map-container.component.ts +128 -0
  132. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.html +1 -1
  133. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.ts +18 -29
  134. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.html +1 -1
  135. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +16 -5
  136. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.html +2 -2
  137. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.ts +9 -3
  138. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.html +2 -2
  139. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +13 -7
  140. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.html +5 -3
  141. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.ts +11 -4
  142. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +15 -1
  143. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +156 -1
  144. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.html +9 -2
  145. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.ts +59 -71
  146. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +17 -15
  147. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +99 -81
  148. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +37 -66
  149. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +1 -0
  150. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +7 -2
  151. package/src/libs/feature/editor/src/lib/fields.config.ts +8 -1
  152. package/src/libs/feature/editor/src/lib/services/editor.service.ts +7 -0
  153. package/src/libs/ui/elements/src/lib/sortable-list/sortable-list.component.html +0 -9
  154. package/src/libs/ui/elements/src/lib/sortable-list/sortable-list.component.ts +0 -4
  155. package/src/libs/ui/inputs/src/index.ts +1 -0
  156. package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +40 -26
  157. package/src/libs/ui/map/src/lib/ui-map.module.ts +1 -1
  158. package/translations/de.json +12 -0
  159. package/translations/en.json +12 -0
  160. package/translations/es.json +12 -0
  161. package/translations/fr.json +14 -2
  162. package/translations/it.json +12 -0
  163. package/translations/nl.json +12 -0
  164. package/translations/pt.json +12 -0
  165. package/translations/sk.json +12 -0
@@ -0,0 +1,78 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
3
+ import { PlatformServiceInterface } from '../../../../../../../libs/common/domain/src/lib/platform.service.interface';
4
+ import { AutocompleteComponent, DropdownSelectorComponent, UiInputsModule, } from '../../../../../../../libs/ui/inputs/src';
5
+ import { UiWidgetsModule } from '../../../../../../../libs/ui/widgets/src';
6
+ import { map } from 'rxjs';
7
+ import { MatIconModule } from '@angular/material/icon';
8
+ import { TranslateModule } from '@ngx-translate/core';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../../../../../../../libs/common/domain/src/lib/platform.service.interface";
11
+ import * as i2 from "../../../../../../ui/inputs/src/lib/badge/badge.component";
12
+ import * as i3 from "@angular/common";
13
+ import * as i4 from "@angular/material/icon";
14
+ import * as i5 from "@ngx-translate/core";
15
+ export class GenericKeywordsComponent {
16
+ constructor(platformService) {
17
+ this.platformService = platformService;
18
+ this.changedKeywords = new EventEmitter();
19
+ this.addedKeyword = new EventEmitter();
20
+ this.deletedKeyword = new EventEmitter();
21
+ this.displayWithFn = (item) => {
22
+ return `${item.title} (${item.value.thesaurus?.name})`;
23
+ };
24
+ this.autoCompleteAction = (query) => {
25
+ return this.platformService.searchKeywords(query, this.keywordTypes).pipe(map((keywords) => keywords.map((keyword) => {
26
+ return { title: keyword.label, value: keyword };
27
+ })));
28
+ };
29
+ }
30
+ handleItemSelection(item) {
31
+ this.addKeyword(item.value);
32
+ }
33
+ addKeyword(keyword) {
34
+ const duplicatedKeyword = this.keywords.find((k) => k.label === keyword.label);
35
+ if (!duplicatedKeyword) {
36
+ this.keywords = [...this.keywords, keyword];
37
+ this.changedKeywords.emit(this.keywords);
38
+ this.addedKeyword.emit(keyword);
39
+ }
40
+ }
41
+ removeKeyword(keyword) {
42
+ this.keywords = this.keywords.filter((k) => k.label !== keyword.label);
43
+ this.changedKeywords.emit(this.keywords);
44
+ this.deletedKeyword.emit(keyword);
45
+ }
46
+ isPlaceWithoutExtent(keyword) {
47
+ if (keyword.type !== 'place')
48
+ return false;
49
+ return !keyword.bbox;
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GenericKeywordsComponent, deps: [{ token: i1.PlatformServiceInterface }], target: i0.ɵɵFactoryTarget.Component }); }
52
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GenericKeywordsComponent, isStandalone: true, selector: "gn-ui-generic-keywords", inputs: { keywords: "keywords", keywordTypes: "keywordTypes", placeholder: "placeholder" }, outputs: { changedKeywords: "changedKeywords", addedKeyword: "addedKeyword", deletedKeyword: "deletedKeyword" }, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"true\"\n [minCharacterCount]=\"0\"\n [allowSubmit]=\"false\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <mat-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.form.placeKeywordWithoutExtent' | translate\"\n class=\"material-symbols-outlined\"\n >warning</mat-icon\n >\n </gn-ui-badge>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: i2.BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GenericKeywordsComponent, decorators: [{
55
+ type: Component,
56
+ args: [{ selector: 'gn-ui-generic-keywords', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
57
+ DropdownSelectorComponent,
58
+ UiInputsModule,
59
+ CommonModule,
60
+ UiWidgetsModule,
61
+ AutocompleteComponent,
62
+ MatIconModule,
63
+ TranslateModule,
64
+ ], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"true\"\n [minCharacterCount]=\"0\"\n [allowSubmit]=\"false\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <mat-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.form.placeKeywordWithoutExtent' | translate\"\n class=\"material-symbols-outlined\"\n >warning</mat-icon\n >\n </gn-ui-badge>\n </div>\n</div>\n" }]
65
+ }], ctorParameters: function () { return [{ type: i1.PlatformServiceInterface }]; }, propDecorators: { keywords: [{
66
+ type: Input
67
+ }], keywordTypes: [{
68
+ type: Input
69
+ }], placeholder: [{
70
+ type: Input
71
+ }], changedKeywords: [{
72
+ type: Output
73
+ }], addedKeyword: [{
74
+ type: Output
75
+ }], deletedKeyword: [{
76
+ type: Output
77
+ }] } });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1rZXl3b3Jkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ZlYXR1cmUvZWRpdG9yL3NyYy9saWIvY29tcG9uZW50cy9nZW5lcmljLWtleXdvcmRzL2dlbmVyaWMta2V5d29yZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL2VkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvZ2VuZXJpYy1rZXl3b3Jkcy9nZW5lcmljLWtleXdvcmRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0RUFBNEUsQ0FBQTtBQUNySCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixjQUFjLEdBQ2YsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFDMUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUcxQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7Ozs7O0FBb0JyRCxNQUFNLE9BQU8sd0JBQXdCO0lBc0JuQyxZQUFvQixlQUF5QztRQUF6QyxvQkFBZSxHQUFmLGVBQWUsQ0FBMEI7UUFsQm5ELG9CQUFlLEdBQTRCLElBQUksWUFBWSxFQUFFLENBQUE7UUFDN0QsaUJBQVksR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUN4RCxtQkFBYyxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBRXBFLGtCQUFhLEdBQUcsQ0FBQyxJQUFzQixFQUFFLEVBQUU7WUFDekMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUE7UUFDeEQsQ0FBQyxDQUFBO1FBRUQsdUJBQWtCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUN2RSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNmLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQTtZQUNqRCxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUE7UUFDSCxDQUFDLENBQUE7SUFFK0QsQ0FBQztJQUVqRSxtQkFBbUIsQ0FBQyxJQUFzQjtRQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWdCO1FBQ3pCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQzFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQ2pDLENBQUE7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7U0FDaEM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWdCO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBZ0I7UUFDbkMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUMxQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtJQUN0QixDQUFDOytHQWhEVSx3QkFBd0I7bUdBQXhCLHdCQUF3QiwrUkN2Q3JDLDB6QkEwQkEseURES0ksY0FBYyw0S0FDZCxZQUFZLCtQQUNaLGVBQWUsK0JBQ2YscUJBQXFCLDJSQUNyQixhQUFhLG1MQUNiLGVBQWU7OzRGQUdOLHdCQUF3QjtrQkFoQnBDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCx5QkFBeUI7d0JBQ3pCLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsYUFBYTt3QkFDYixlQUFlO3FCQUNoQjsrR0FHUSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL3BsYXRmb3JtLnNlcnZpY2UuaW50ZXJmYWNlJ1xuaW1wb3J0IHtcbiAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICBEcm9wZG93blNlbGVjdG9yQ29tcG9uZW50LFxuICBVaUlucHV0c01vZHVsZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9pbnB1dHMvc3JjJ1xuaW1wb3J0IHsgVWlXaWRnZXRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS93aWRnZXRzL3NyYydcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBLZXl3b3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHsgS2V5d29yZFR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC90aGVzYXVydXMnXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbidcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5cbnR5cGUgQXV0b2NvbXBsZXRlSXRlbSA9IHsgdGl0bGU6IHN0cmluZzsgdmFsdWU6IEtleXdvcmQgfVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbi11aS1nZW5lcmljLWtleXdvcmRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyaWMta2V5d29yZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmljLWtleXdvcmRzLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBEcm9wZG93blNlbGVjdG9yQ29tcG9uZW50LFxuICAgIFVpSW5wdXRzTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBVaVdpZGdldHNNb2R1bGUsXG4gICAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmljS2V5d29yZHNDb21wb25lbnQge1xuICBASW5wdXQoKSBrZXl3b3JkczogS2V5d29yZFtdXG4gIEBJbnB1dCgpIGtleXdvcmRUeXBlczogS2V5d29yZFR5cGVbXVxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nXG4gIEBPdXRwdXQoKSBjaGFuZ2VkS2V5d29yZHM6IEV2ZW50RW1pdHRlcjxLZXl3b3JkW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBhZGRlZEtleXdvcmQ6IEV2ZW50RW1pdHRlcjxLZXl3b3JkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgZGVsZXRlZEtleXdvcmQ6IEV2ZW50RW1pdHRlcjxLZXl3b3JkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIGRpc3BsYXlXaXRoRm4gPSAoaXRlbTogQXV0b2NvbXBsZXRlSXRlbSkgPT4ge1xuICAgIHJldHVybiBgJHtpdGVtLnRpdGxlfSAoJHtpdGVtLnZhbHVlLnRoZXNhdXJ1cz8ubmFtZX0pYFxuICB9XG5cbiAgYXV0b0NvbXBsZXRlQWN0aW9uID0gKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVNlcnZpY2Uuc2VhcmNoS2V5d29yZHMocXVlcnksIHRoaXMua2V5d29yZFR5cGVzKS5waXBlKFxuICAgICAgbWFwKChrZXl3b3JkcykgPT5cbiAgICAgICAga2V5d29yZHMubWFwKChrZXl3b3JkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgdGl0bGU6IGtleXdvcmQubGFiZWwsIHZhbHVlOiBrZXl3b3JkIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlKSB7fVxuXG4gIGhhbmRsZUl0ZW1TZWxlY3Rpb24oaXRlbTogQXV0b2NvbXBsZXRlSXRlbSkge1xuICAgIHRoaXMuYWRkS2V5d29yZChpdGVtLnZhbHVlKVxuICB9XG5cbiAgYWRkS2V5d29yZChrZXl3b3JkOiBLZXl3b3JkKSB7XG4gICAgY29uc3QgZHVwbGljYXRlZEtleXdvcmQgPSB0aGlzLmtleXdvcmRzLmZpbmQoXG4gICAgICAoaykgPT4gay5sYWJlbCA9PT0ga2V5d29yZC5sYWJlbFxuICAgIClcbiAgICBpZiAoIWR1cGxpY2F0ZWRLZXl3b3JkKSB7XG4gICAgICB0aGlzLmtleXdvcmRzID0gWy4uLnRoaXMua2V5d29yZHMsIGtleXdvcmRdXG4gICAgICB0aGlzLmNoYW5nZWRLZXl3b3Jkcy5lbWl0KHRoaXMua2V5d29yZHMpXG4gICAgICB0aGlzLmFkZGVkS2V5d29yZC5lbWl0KGtleXdvcmQpXG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlS2V5d29yZChrZXl3b3JkOiBLZXl3b3JkKSB7XG4gICAgdGhpcy5rZXl3b3JkcyA9IHRoaXMua2V5d29yZHMuZmlsdGVyKChrKSA9PiBrLmxhYmVsICE9PSBrZXl3b3JkLmxhYmVsKVxuICAgIHRoaXMuY2hhbmdlZEtleXdvcmRzLmVtaXQodGhpcy5rZXl3b3JkcylcbiAgICB0aGlzLmRlbGV0ZWRLZXl3b3JkLmVtaXQoa2V5d29yZClcbiAgfVxuXG4gIGlzUGxhY2VXaXRob3V0RXh0ZW50KGtleXdvcmQ6IEtleXdvcmQpOiBib29sZWFuIHtcbiAgICBpZiAoa2V5d29yZC50eXBlICE9PSAncGxhY2UnKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gIWtleXdvcmQuYmJveFxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICA8Z24tdWktYXV0b2NvbXBsZXRlXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbZGlzcGxheVdpdGhGbl09XCJkaXNwbGF5V2l0aEZuXCJcbiAgICBbYWN0aW9uXT1cImF1dG9Db21wbGV0ZUFjdGlvblwiXG4gICAgKGl0ZW1TZWxlY3RlZCk9XCJoYW5kbGVJdGVtU2VsZWN0aW9uKCRldmVudClcIlxuICAgIFtwcmV2ZW50Q29tcGxldGVPblNlbGVjdGlvbl09XCJ0cnVlXCJcbiAgICBbbWluQ2hhcmFjdGVyQ291bnRdPVwiMFwiXG4gICAgW2FsbG93U3VibWl0XT1cImZhbHNlXCJcbiAgPjwvZ24tdWktYXV0b2NvbXBsZXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBmbGV4LXdyYXBcIj5cbiAgICA8Z24tdWktYmFkZ2VcbiAgICAgICpuZ0Zvcj1cImxldCBrZXl3b3JkIG9mIGtleXdvcmRzXCJcbiAgICAgIFtyZW1vdmFibGVdPVwidHJ1ZVwiXG4gICAgICAoYmFkZ2VSZW1vdmVDbGlja2VkKT1cInJlbW92ZUtleXdvcmQoa2V5d29yZClcIlxuICAgICAgPnt7IGtleXdvcmQubGFiZWwgfX1cblxuICAgICAgPG1hdC1pY29uXG4gICAgICAgICpuZ0lmPVwiaXNQbGFjZVdpdGhvdXRFeHRlbnQoa2V5d29yZClcIlxuICAgICAgICBbdGl0bGVdPVwiJ2VkaXRvci5mb3JtLnBsYWNlS2V5d29yZFdpdGhvdXRFeHRlbnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgPndhcm5pbmc8L21hdC1pY29uXG4gICAgICA+XG4gICAgPC9nbi11aS1iYWRnZT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,58 +1,59 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, } from '@angular/core';
2
1
  import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
3
3
  import { RecordsApiService } from '../../../../../../../libs/data-access/gn4/src';
4
+ import { NotificationsService } from '../../../../../../../libs/feature/notifications/src';
4
5
  import { UiInputsModule } from '../../../../../../../libs/ui/inputs/src';
5
- import { FormControl } from '@angular/forms';
6
+ import { TranslateService } from '@ngx-translate/core';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "../../../../../../../libs/data-access/gn4/src";
8
- import * as i2 from "../../../../../../ui/inputs/src/lib/image-input/image-input.component";
9
+ import * as i2 from "../../../../../../../libs/feature/notifications/src";
10
+ import * as i3 from "@ngx-translate/core";
11
+ import * as i4 from "../../../../../../ui/inputs/src/lib/image-input/image-input.component";
9
12
  export class OverviewUploadComponent {
10
- constructor(recordsApiService, cd) {
13
+ set overview(value) {
14
+ this._overview = value;
15
+ if (this._overview) {
16
+ this.recordsApiService.getAllResources(this.metadataUuid).subscribe({
17
+ next: (resources) => {
18
+ const resource = resources.find((r) => r.url === this._overview.url.toString());
19
+ if (resource) {
20
+ this.resourceFileName = resource.filename;
21
+ }
22
+ },
23
+ error: this.errorHandle,
24
+ });
25
+ this.resourceUrl = this._overview.url.toString();
26
+ this.altText = this._overview.description;
27
+ }
28
+ else {
29
+ this.resourceUrl = '';
30
+ this.resourceFileName = '';
31
+ this.altText = '';
32
+ }
33
+ }
34
+ constructor(recordsApiService, notificationsService, translateService) {
11
35
  this.recordsApiService = recordsApiService;
12
- this.cd = cd;
36
+ this.notificationsService = notificationsService;
37
+ this.translateService = translateService;
13
38
  this.overviewChange = new EventEmitter();
14
- this.altTextChange = new EventEmitter();
15
39
  this.errorHandle = (error) => {
16
- console.error(error);
17
- this.resourceUrl = '';
18
- this.resourceAltText = '';
19
- this.resourceFileName = '';
20
- this.overviewChange.emit(null);
21
- this.cd.markForCheck();
40
+ this.notificationsService.showNotification({
41
+ type: 'error',
42
+ title: this.translateService.instant('editor.record.resourceError.title'),
43
+ text: `${this.translateService.instant('editor.record.resourceError.body')} ${error.message}`,
44
+ closeMessage: this.translateService.instant('editor.record.resourceError.closeMessage'),
45
+ });
22
46
  };
23
47
  }
24
- ngOnInit() {
25
- this.recordsApiService.getAllResources(this.metadataUuid).subscribe({
26
- next: (resources) => {
27
- if (resources && resources.length > 0) {
28
- this.resourceUrl = resources[0].url;
29
- this.resourceFileName = resources[0].filename;
30
- if (!this.resourceAltText) {
31
- this.resourceAltText = this.resourceFileName;
32
- }
33
- }
34
- else {
35
- this.resourceUrl = '';
36
- this.resourceAltText = '';
37
- this.resourceFileName = '';
38
- }
39
- this.cd.markForCheck();
40
- },
41
- error: this.errorHandle,
42
- });
43
- }
44
48
  handleFileChange(file) {
45
49
  this.recordsApiService
46
50
  .putResource(this.metadataUuid, file, 'public')
47
51
  .subscribe({
48
52
  next: (resource) => {
49
- this.resourceUrl = resource.url;
50
- this.resourceAltText = resource.filename;
51
53
  this.overviewChange.emit({
52
54
  url: new URL(resource.url),
53
55
  description: resource.filename,
54
56
  });
55
- this.cd.markForCheck();
56
57
  },
57
58
  error: this.errorHandle,
58
59
  });
@@ -62,70 +63,34 @@ export class OverviewUploadComponent {
62
63
  .putResourceFromURL(this.metadataUuid, url, 'public')
63
64
  .subscribe({
64
65
  next: (resource) => {
65
- this.resourceUrl = resource.url;
66
- this.resourceAltText = resource.filename;
67
66
  this.overviewChange.emit({
68
67
  url: new URL(resource.url),
69
68
  description: resource.filename,
70
69
  });
71
- this.cd.markForCheck();
72
70
  },
73
71
  error: this.errorHandle,
74
72
  });
75
73
  }
76
74
  handleAltTextChange(newAltText) {
77
- this.resourceAltText = newAltText;
78
75
  this.overviewChange.emit({
79
76
  url: new URL(this.resourceUrl),
80
- description: this.resourceAltText,
77
+ description: newAltText,
81
78
  });
82
- this.cd.markForCheck();
83
79
  }
84
80
  handleDelete() {
85
- //this.formControl.markAsDirty()
86
- this.recordsApiService
87
- .delResource(this.metadataUuid, this.resourceFileName)
88
- .subscribe({
89
- next: () => {
90
- this.resourceAltText = '';
91
- this.resourceUrl = '';
92
- this.overviewChange.emit(null);
93
- this.cd.markForCheck();
94
- },
95
- error: this.errorHandle,
96
- });
81
+ this.overviewChange.emit(null);
97
82
  }
98
- ngOnChanges(changes) {
99
- const overviewChanges = changes['formControl'];
100
- if (overviewChanges &&
101
- overviewChanges.currentValue !== overviewChanges.previousValue) {
102
- let overview;
103
- if (overviewChanges.currentValue.value &&
104
- overviewChanges.currentValue.value.length > 0) {
105
- overview = overviewChanges.currentValue.value[0];
106
- }
107
- else {
108
- return;
109
- }
110
- if (overview.description) {
111
- this.resourceAltText = overview.description;
112
- this.cd.markForCheck();
113
- }
114
- }
115
- }
116
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OverviewUploadComponent, deps: [{ token: i1.RecordsApiService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
117
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OverviewUploadComponent, isStandalone: true, selector: "gn-ui-overview-upload", inputs: { metadataUuid: "metadataUuid", formControl: "formControl" }, outputs: { overviewChange: "overviewChange", altTextChange: "altTextChange" }, usesOnChanges: true, ngImport: i0, template: "<gn-ui-image-input\n [maxSizeMB]=\"5\"\n [previewUrl]=\"resourceUrl\"\n [altText]=\"resourceAltText\"\n (fileChange)=\"handleFileChange($event)\"\n (urlChange)=\"handleUrlChange($event)\"\n (altTextChange)=\"handleAltTextChange($event)\"\n (delete)=\"handleDelete()\"\n></gn-ui-image-input>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: i2.ImageInputComponent, selector: "gn-ui-image-input", inputs: ["maxSizeMB", "previewUrl", "altText", "uploadProgress", "uploadError"], outputs: ["fileChange", "urlChange", "uploadCancel", "delete", "altTextChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
83
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OverviewUploadComponent, deps: [{ token: i1.RecordsApiService }, { token: i2.NotificationsService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
84
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OverviewUploadComponent, isStandalone: true, selector: "gn-ui-overview-upload", inputs: { metadataUuid: "metadataUuid", overview: "overview" }, outputs: { overviewChange: "overviewChange" }, ngImport: i0, template: "<gn-ui-image-input\n [maxSizeMB]=\"5\"\n [previewUrl]=\"resourceUrl\"\n [altText]=\"altText\"\n (fileChange)=\"handleFileChange($event)\"\n (urlChange)=\"handleUrlChange($event)\"\n (altTextChange)=\"handleAltTextChange($event)\"\n (delete)=\"handleDelete()\"\n></gn-ui-image-input>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: i4.ImageInputComponent, selector: "gn-ui-image-input", inputs: ["maxSizeMB", "previewUrl", "altText", "uploadProgress", "uploadError"], outputs: ["fileChange", "urlChange", "uploadCancel", "delete", "altTextChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
118
85
  }
119
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OverviewUploadComponent, decorators: [{
120
87
  type: Component,
121
- args: [{ selector: 'gn-ui-overview-upload', standalone: true, imports: [CommonModule, UiInputsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-image-input\n [maxSizeMB]=\"5\"\n [previewUrl]=\"resourceUrl\"\n [altText]=\"resourceAltText\"\n (fileChange)=\"handleFileChange($event)\"\n (urlChange)=\"handleUrlChange($event)\"\n (altTextChange)=\"handleAltTextChange($event)\"\n (delete)=\"handleDelete()\"\n></gn-ui-image-input>\n" }]
122
- }], ctorParameters: function () { return [{ type: i1.RecordsApiService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { metadataUuid: [{
88
+ args: [{ selector: 'gn-ui-overview-upload', standalone: true, imports: [CommonModule, UiInputsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-image-input\n [maxSizeMB]=\"5\"\n [previewUrl]=\"resourceUrl\"\n [altText]=\"altText\"\n (fileChange)=\"handleFileChange($event)\"\n (urlChange)=\"handleUrlChange($event)\"\n (altTextChange)=\"handleAltTextChange($event)\"\n (delete)=\"handleDelete()\"\n></gn-ui-image-input>\n" }]
89
+ }], ctorParameters: function () { return [{ type: i1.RecordsApiService }, { type: i2.NotificationsService }, { type: i3.TranslateService }]; }, propDecorators: { metadataUuid: [{
123
90
  type: Input
124
- }], formControl: [{
91
+ }], overview: [{
125
92
  type: Input
126
93
  }], overviewChange: [{
127
94
  type: Output
128
- }], altTextChange: [{
129
- type: Output
130
95
  }] } });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnZpZXctdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZmVhdHVyZS9lZGl0b3Ivc3JjL2xpYi9jb21wb25lbnRzL292ZXJ2aWV3LXVwbG9hZC9vdmVydmlldy11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL2VkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvb3ZlcnZpZXctdXBsb2FkL292ZXJ2aWV3LXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtDQUErQyxDQUFBO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7Ozs7QUFXNUMsTUFBTSxPQUFPLHVCQUF1QjtJQVVsQyxZQUNVLGlCQUFvQyxFQUNwQyxFQUFxQjtRQURyQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBVHJCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUE7UUFDM0Qsa0JBQWEsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQWtHMUQsZ0JBQVcsR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7WUFFcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFF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QUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQW9CLENBQUE7YUFDcEU7aUJBQU07Z0JBQ0wsT0FBTTthQUNQO1lBQ0QsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO2dCQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUE7Z0JBQzNDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUE7YUFDdkI7U0FDRjtJQUNILENBQUM7K0dBdElVLHVCQUF1QjttR0FBdkIsdUJBQXVCLDJQQ3pCcEMsNlNBU0EseUREV1ksWUFBWSw4QkFBRSxjQUFjOzs0RkFLM0IsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLG1CQUd0Qix1QkFBdUIsQ0FBQyxNQUFNO3dJQUd0QyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBSZWNvcmRzQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGF0YS1hY2Nlc3MvZ240L3NyYydcbmltcG9ydCB7IFVpSW5wdXRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9pbnB1dHMvc3JjJ1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IEdyYXBoaWNPdmVydmlldyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktb3ZlcnZpZXctdXBsb2FkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVWlJbnB1dHNNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vb3ZlcnZpZXctdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb3ZlcnZpZXctdXBsb2FkLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE92ZXJ2aWV3VXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBtZXRhZGF0YVV1aWQ6IHN0cmluZ1xuICBASW5wdXQoKSBmb3JtQ29udHJvbCE6IEZvcm1Db250cm9sXG4gIEBPdXRwdXQoKSBvdmVydmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R3JhcGhpY092ZXJ2aWV3IHwgbnVsbD4oKVxuICBAT3V0cHV0KCkgYWx0VGV4dENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICByZXNvdXJjZUFsdFRleHQ6IHN0cmluZ1xuICByZXNvdXJjZUZpbGVOYW1lOiBzdHJpbmdcbiAgcmVzb3VyY2VVcmw6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVjb3Jkc0FwaVNlcnZpY2U6IFJlY29yZHNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZHNBcGlTZXJ2aWNlLmdldEFsbFJlc291cmNlcyh0aGlzLm1ldGFkYXRhVXVpZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNvdXJjZXMpID0+IHtcbiAgICAgICAgaWYgKHJlc291cmNlcyAmJiByZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucmVzb3VyY2VVcmwgPSByZXNvdXJjZXNbMF0udXJsXG4gICAgICAgICAgdGhpcy5yZXNvdXJjZUZpbGVOYW1lID0gcmVzb3VyY2VzWzBdLmZpbGVuYW1lXG4gICAgICAgICAgaWYgKCF0aGlzLnJlc291cmNlQWx0VGV4dCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZUFsdFRleHQgPSB0aGlzLnJlc291cmNlRmlsZU5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNvdXJjZVVybCA9ICcnXG4gICAgICAgICAgdGhpcy5yZXNvdXJjZUFsdFRleHQgPSAnJ1xuICAgICAgICAgIHRoaXMucmVzb3VyY2VGaWxlTmFtZSA9ICcnXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHRoaXMuZXJyb3JIYW5kbGUsXG4gICAgfSlcbiAgfVxuXG4gIGhhbmRsZUZpbGVDaGFuZ2UoZmlsZTogRmlsZSkge1xuICAgIHRoaXMucmVjb3Jkc0FwaVNlcnZpY2VcbiAgICAgIC5wdXRSZXNvdXJjZSh0aGlzLm1ldGFkYXRhVXVpZCwgZmlsZSwgJ3B1YmxpYycpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc291cmNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXNvdXJjZVVybCA9IHJlc291cmNlLnVybFxuICAgICAgICAgIHRoaXMucmVzb3VyY2VBbHRUZXh0ID0gcmVzb3VyY2UuZmlsZW5hbWVcblxuICAgICAgICAgIHRoaXMub3ZlcnZpZXdDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICB1cmw6IG5ldyBVUkwocmVzb3VyY2UudXJsKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiByZXNvdXJjZS5maWxlbmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogdGhpcy5lcnJvckhhbmRsZSxcbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVVcmxDaGFuZ2UodXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlY29yZHNBcGlTZXJ2aWNlXG4gICAgICAucHV0UmVzb3VyY2VGcm9tVVJMKHRoaXMubWV0YWRhdGFVdWlkLCB1cmwsICdwdWJsaWMnKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNvdXJjZSkgPT4ge1xuICAgICAgICAgIHRoaXMucmVzb3VyY2VVcmwgPSByZXNvdXJjZS51cmxcbiAgICAgICAgICB0aGlzLnJlc291cmNlQWx0VGV4dCA9IHJlc291cmNlLmZpbGVuYW1lXG5cbiAgICAgICAgICB0aGlzLm92ZXJ2aWV3Q2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdXJsOiBuZXcgVVJMKHJlc291cmNlLnVybCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzb3VyY2UuZmlsZW5hbWUsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKClcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3JIYW5kbGUsXG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlQWx0VGV4dENoYW5nZShuZXdBbHRUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc291cmNlQWx0VGV4dCA9IG5ld0FsdFRleHRcblxuICAgIHRoaXMub3ZlcnZpZXdDaGFuZ2UuZW1pdCh7XG4gICAgICB1cmw6IG5ldyBVUkwodGhpcy5yZXNvdXJjZVVybCksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5yZXNvdXJjZUFsdFRleHQsXG4gICAgfSlcblxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKClcbiAgfVxuXG4gIGhhbmRsZURlbGV0ZSgpIHtcbiAgICAvL3RoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKVxuICAgIHRoaXMucmVjb3Jkc0FwaVNlcnZpY2VcbiAgICAgIC5kZWxSZXNvdXJjZSh0aGlzLm1ldGFkYXRhVXVpZCwgdGhpcy5yZXNvdXJjZUZpbGVOYW1lKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlc291cmNlQWx0VGV4dCA9ICcnXG4gICAgICAgICAgdGhpcy5yZXNvdXJjZVVybCA9ICcnXG5cbiAgICAgICAgICB0aGlzLm92ZXJ2aWV3Q2hhbmdlLmVtaXQobnVsbClcblxuICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKClcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3JIYW5kbGUsXG4gICAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBlcnJvckhhbmRsZSA9IChlcnJvcjogbmV2ZXIpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuXG4gICAgdGhpcy5yZXNvdXJjZVVybCA9ICcnXG4gICAgdGhpcy5yZXNvdXJjZUFsdFRleHQgPSAnJ1xuICAgIHRoaXMucmVzb3VyY2VGaWxlTmFtZSA9ICcnXG5cbiAgICB0aGlzLm92ZXJ2aWV3Q2hhbmdlLmVtaXQobnVsbClcblxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBvdmVydmlld0NoYW5nZXMgPSBjaGFuZ2VzWydmb3JtQ29udHJvbCddXG4gICAgaWYgKFxuICAgICAgb3ZlcnZpZXdDaGFuZ2VzICYmXG4gICAgICBvdmVydmlld0NoYW5nZXMuY3VycmVudFZhbHVlICE9PSBvdmVydmlld0NoYW5nZXMucHJldmlvdXNWYWx1ZVxuICAgICkge1xuICAgICAgbGV0IG92ZXJ2aWV3OiBHcmFwaGljT3ZlcnZpZXdcbiAgICAgIGlmIChcbiAgICAgICAgb3ZlcnZpZXdDaGFuZ2VzLmN1cnJlbnRWYWx1ZS52YWx1ZSAmJlxuICAgICAgICBvdmVydmlld0NoYW5nZXMuY3VycmVudFZhbHVlLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBvdmVydmlldyA9IG92ZXJ2aWV3Q2hhbmdlcy5jdXJyZW50VmFsdWUudmFsdWVbMF0gYXMgR3JhcGhpY092ZXJ2aWV3XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChvdmVydmlldy5kZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnJlc291cmNlQWx0VGV4dCA9IG92ZXJ2aWV3LmRlc2NyaXB0aW9uXG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxnbi11aS1pbWFnZS1pbnB1dFxuICBbbWF4U2l6ZU1CXT1cIjVcIlxuICBbcHJldmlld1VybF09XCJyZXNvdXJjZVVybFwiXG4gIFthbHRUZXh0XT1cInJlc291cmNlQWx0VGV4dFwiXG4gIChmaWxlQ2hhbmdlKT1cImhhbmRsZUZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICh1cmxDaGFuZ2UpPVwiaGFuZGxlVXJsQ2hhbmdlKCRldmVudClcIlxuICAoYWx0VGV4dENoYW5nZSk9XCJoYW5kbGVBbHRUZXh0Q2hhbmdlKCRldmVudClcIlxuICAoZGVsZXRlKT1cImhhbmRsZURlbGV0ZSgpXCJcbj48L2duLXVpLWltYWdlLWlucHV0PlxuIl19
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnZpZXctdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZmVhdHVyZS9lZGl0b3Ivc3JjL2xpYi9jb21wb25lbnRzL292ZXJ2aWV3LXVwbG9hZC9vdmVydmlldy11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL2VkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvb3ZlcnZpZXctdXBsb2FkL292ZXJ2aWV3LXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUE7QUFFdEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUE7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scURBQXFELENBQUE7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7Ozs7QUFVdEQsTUFBTSxPQUFPLHVCQUF1QjtJQUdsQyxJQUNJLFFBQVEsQ0FBQyxLQUE2QjtRQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNsRSxJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDbEIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElB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LENBQUM7WUFDdkIsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDOUIsV0FBVyxFQUFFLFVBQVU7U0FDeEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoQyxDQUFDOytHQTVFVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixnTUN0QnBDLHFTQVNBLHlERFFZLFlBQVksOEJBQUUsY0FBYzs7NEZBSzNCLHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxtQkFHdEIsdUJBQXVCLENBQUMsTUFBTTswS0FHdEMsWUFBWTtzQkFBcEIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7Z0JBd0JJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBHcmFwaGljT3ZlcnZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQgeyBSZWNvcmRzQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGF0YS1hY2Nlc3MvZ240L3NyYydcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL25vdGlmaWNhdGlvbnMvc3JjJ1xuaW1wb3J0IHsgVWlJbnB1dHNNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2lucHV0cy9zcmMnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktb3ZlcnZpZXctdXBsb2FkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVWlJbnB1dHNNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vb3ZlcnZpZXctdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb3ZlcnZpZXctdXBsb2FkLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE92ZXJ2aWV3VXBsb2FkQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbWV0YWRhdGFVdWlkOiBzdHJpbmdcbiAgX292ZXJ2aWV3OiBHcmFwaGljT3ZlcnZpZXcgfCBudWxsXG4gIEBJbnB1dCgpXG4gIHNldCBvdmVydmlldyh2YWx1ZTogR3JhcGhpY092ZXJ2aWV3IHwgbnVsbCkge1xuICAgIHRoaXMuX292ZXJ2aWV3ID0gdmFsdWVcbiAgICBpZiAodGhpcy5fb3ZlcnZpZXcpIHtcbiAgICAgIHRoaXMucmVjb3Jkc0FwaVNlcnZpY2UuZ2V0QWxsUmVzb3VyY2VzKHRoaXMubWV0YWRhdGFVdWlkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzb3VyY2VzKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSByZXNvdXJjZXMuZmluZChcbiAgICAgICAgICAgIChyKSA9PiByLnVybCA9PT0gdGhpcy5fb3ZlcnZpZXcudXJsLnRvU3RyaW5nKClcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc291cmNlRmlsZU5hbWUgPSByZXNvdXJjZS5maWxlbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3JIYW5kbGUsXG4gICAgICB9KVxuICAgICAgdGhpcy5yZXNvdXJjZVVybCA9IHRoaXMuX292ZXJ2aWV3LnVybC50b1N0cmluZygpXG4gICAgICB0aGlzLmFsdFRleHQgPSB0aGlzLl9vdmVydmlldy5kZXNjcmlwdGlvblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc291cmNlVXJsID0gJydcbiAgICAgIHRoaXMucmVzb3VyY2VGaWxlTmFtZSA9ICcnXG4gICAgICB0aGlzLmFsdFRleHQgPSAnJ1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBvdmVydmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R3JhcGhpY092ZXJ2aWV3IHwgbnVsbD4oKVxuXG4gIHJlc291cmNlVXJsOiBzdHJpbmdcbiAgcmVzb3VyY2VGaWxlTmFtZTogc3RyaW5nXG4gIGFsdFRleHQ6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVjb3Jkc0FwaVNlcnZpY2U6IFJlY29yZHNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uc1NlcnZpY2U6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgaGFuZGxlRmlsZUNoYW5nZShmaWxlOiBGaWxlKSB7XG4gICAgdGhpcy5yZWNvcmRzQXBpU2VydmljZVxuICAgICAgLnB1dFJlc291cmNlKHRoaXMubWV0YWRhdGFVdWlkLCBmaWxlLCAncHVibGljJylcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzb3VyY2UpID0+IHtcbiAgICAgICAgICB0aGlzLm92ZXJ2aWV3Q2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdXJsOiBuZXcgVVJMKHJlc291cmNlLnVybCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzb3VyY2UuZmlsZW5hbWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3JIYW5kbGUsXG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlVXJsQ2hhbmdlKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5yZWNvcmRzQXBpU2VydmljZVxuICAgICAgLnB1dFJlc291cmNlRnJvbVVSTCh0aGlzLm1ldGFkYXRhVXVpZCwgdXJsLCAncHVibGljJylcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzb3VyY2UpID0+IHtcbiAgICAgICAgICB0aGlzLm92ZXJ2aWV3Q2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdXJsOiBuZXcgVVJMKHJlc291cmNlLnVybCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzb3VyY2UuZmlsZW5hbWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3JIYW5kbGUsXG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlQWx0VGV4dENoYW5nZShuZXdBbHRUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLm92ZXJ2aWV3Q2hhbmdlLmVtaXQoe1xuICAgICAgdXJsOiBuZXcgVVJMKHRoaXMucmVzb3VyY2VVcmwpLFxuICAgICAgZGVzY3JpcHRpb246IG5ld0FsdFRleHQsXG4gICAgfSlcbiAgfVxuXG4gIGhhbmRsZURlbGV0ZSgpIHtcbiAgICB0aGlzLm92ZXJ2aWV3Q2hhbmdlLmVtaXQobnVsbClcbiAgfVxuXG4gIHByaXZhdGUgZXJyb3JIYW5kbGUgPSAoZXJyb3IpID0+IHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnNob3dOb3RpZmljYXRpb24oe1xuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZWRpdG9yLnJlY29yZC5yZXNvdXJjZUVycm9yLnRpdGxlJyksXG4gICAgICB0ZXh0OiBgJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgJ2VkaXRvci5yZWNvcmQucmVzb3VyY2VFcnJvci5ib2R5J1xuICAgICAgKX0gJHtlcnJvci5tZXNzYWdlfWAsXG4gICAgICBjbG9zZU1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAnZWRpdG9yLnJlY29yZC5yZXNvdXJjZUVycm9yLmNsb3NlTWVzc2FnZSdcbiAgICAgICksXG4gICAgfSlcbiAgfVxufVxuIiwiPGduLXVpLWltYWdlLWlucHV0XG4gIFttYXhTaXplTUJdPVwiNVwiXG4gIFtwcmV2aWV3VXJsXT1cInJlc291cmNlVXJsXCJcbiAgW2FsdFRleHRdPVwiYWx0VGV4dFwiXG4gIChmaWxlQ2hhbmdlKT1cImhhbmRsZUZpbGVDaGFuZ2UoJGV2ZW50KVwiXG4gICh1cmxDaGFuZ2UpPVwiaGFuZGxlVXJsQ2hhbmdlKCRldmVudClcIlxuICAoYWx0VGV4dENoYW5nZSk9XCJoYW5kbGVBbHRUZXh0Q2hhbmdlKCRldmVudClcIlxuICAoZGVsZXRlKT1cImhhbmRsZURlbGV0ZSgpXCJcbj48L2duLXVpLWltYWdlLWlucHV0PlxuIl19
@@ -1,17 +1,16 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core';
3
- import { FormControl } from '@angular/forms';
4
- import { AutocompleteComponent, DropdownSelectorComponent, UiInputsModule, } from '../../../../../../../../../libs/ui/inputs/src';
5
- import { UiWidgetsModule } from '../../../../../../../../../libs/ui/widgets/src';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
6
3
  import { RoleLabels, } from '../../../../../../../../../libs/common/domain/src/lib/model/record';
7
- import { TranslateModule } from '@ngx-translate/core';
8
- import { debounceTime, distinctUntilChanged, firstValueFrom, Subscription, switchMap, } from 'rxjs';
9
- import { PlatformServiceInterface } from '../../../../../../../../../libs/common/domain/src/lib/platform.service.interface';
10
4
  import { OrganizationsServiceInterface } from '../../../../../../../../../libs/common/domain/src/lib/organizations.service.interface';
11
- import { ContactCardComponent } from '../../../contact-card/contact-card.component';
5
+ import { PlatformServiceInterface } from '../../../../../../../../../libs/common/domain/src/lib/platform.service.interface';
12
6
  import { SortableListComponent, } from '../../../../../../../../../libs/ui/elements/src';
7
+ import { AutocompleteComponent, DropdownSelectorComponent, UiInputsModule, } from '../../../../../../../../../libs/ui/inputs/src';
8
+ import { UiWidgetsModule } from '../../../../../../../../../libs/ui/widgets/src';
13
9
  import { createFuzzyFilter } from '../../../../../../../../../libs/util/shared/src';
10
+ import { TranslateModule } from '@ngx-translate/core';
11
+ import { debounceTime, distinctUntilChanged, firstValueFrom, switchMap, } from 'rxjs';
14
12
  import { map } from 'rxjs/operators';
13
+ import { ContactCardComponent } from '../../../contact-card/contact-card.component';
15
14
  import * as i0 from "@angular/core";
16
15
  import * as i1 from "../../../../../../../../../libs/common/domain/src/lib/platform.service.interface";
17
16
  import * as i2 from "../../../../../../../../../libs/common/domain/src/lib/organizations.service.interface";
@@ -19,11 +18,10 @@ import * as i3 from "../../../../../../../../ui/inputs/src/lib/button/button.com
19
18
  import * as i4 from "@angular/common";
20
19
  import * as i5 from "@ngx-translate/core";
21
20
  export class FormFieldContactsForResourceComponent {
22
- constructor(platformServiceInterface, organizationsServiceInterface, changeDetectorRef) {
21
+ constructor(platformServiceInterface, organizationsServiceInterface) {
23
22
  this.platformServiceInterface = platformServiceInterface;
24
23
  this.organizationsServiceInterface = organizationsServiceInterface;
25
- this.changeDetectorRef = changeDetectorRef;
26
- this.subscription = new Subscription();
24
+ this.valueChange = new EventEmitter();
27
25
  this.contactsForRessourceByRole = new Map();
28
26
  this.contactsAsDynElemByRole = new Map();
29
27
  this.rolesToPick = [
@@ -44,24 +42,21 @@ export class FormFieldContactsForResourceComponent {
44
42
  */
45
43
  this.autoCompleteAction = (query) => {
46
44
  const fuzzyFilter = createFuzzyFilter(query);
47
- return this.allUsers$.pipe(switchMap((users) => [
45
+ return this.platformServiceInterface.getUsers().pipe(switchMap((users) => [
48
46
  users.filter((user) => fuzzyFilter(user.username)),
49
47
  ]), map((results) => results.slice(0, 10)), debounceTime(300), distinctUntilChanged());
50
48
  };
51
- this.allUsers$ = this.platformServiceInterface.getUsers();
49
+ }
50
+ ngOnChanges() {
51
+ this.updateContactsForRessource();
52
+ this.manageRoleSectionsToDisplay(this.value);
53
+ this.filterRolesToPick();
52
54
  }
53
55
  async ngOnInit() {
54
56
  this.allOrganizations = new Map((await firstValueFrom(this.organizationsServiceInterface.organisations$)).map((organization) => [organization.name, organization]));
55
57
  this.updateContactsForRessource();
56
- this.manageRoleSectionsToDisplay(this.control.value);
58
+ this.manageRoleSectionsToDisplay(this.value);
57
59
  this.filterRolesToPick();
58
- this.changeDetectorRef.markForCheck();
59
- this.subscription.add(this.control.valueChanges.subscribe((contactsForResource) => {
60
- this.updateContactsForRessource();
61
- this.manageRoleSectionsToDisplay(contactsForResource);
62
- this.filterRolesToPick();
63
- this.changeDetectorRef.markForCheck();
64
- }));
65
60
  }
66
61
  addRoleToDisplay(roleToAdd) {
67
62
  this.roleSectionsToDisplay.push(roleToAdd);
@@ -71,7 +66,7 @@ export class FormFieldContactsForResourceComponent {
71
66
  this.rolesToPick = this.rolesToPick.filter((role) => !this.roleSectionsToDisplay.includes(role));
72
67
  }
73
68
  updateContactsForRessource() {
74
- this.contactsForRessourceByRole = this.control.value.reduce((acc, contact) => {
69
+ this.contactsForRessourceByRole = this.value.reduce((acc, contact) => {
75
70
  const completeOrganization = this.allOrganizations.get(contact.organization.name);
76
71
  const updatedContact = {
77
72
  ...contact,
@@ -84,7 +79,7 @@ export class FormFieldContactsForResourceComponent {
84
79
  acc.get(contact.role).push(updatedContact);
85
80
  return acc;
86
81
  }, new Map());
87
- this.contactsAsDynElemByRole = this.control.value.reduce((acc, contact) => {
82
+ this.contactsAsDynElemByRole = this.value.reduce((acc, contact) => {
88
83
  const completeOrganization = this.allOrganizations.get(contact.organization.name);
89
84
  const updatedContact = {
90
85
  ...contact,
@@ -104,7 +99,6 @@ export class FormFieldContactsForResourceComponent {
104
99
  acc.get(contact.role).push(contactAsDynElem);
105
100
  return acc;
106
101
  }, new Map());
107
- this.changeDetectorRef.markForCheck();
108
102
  }
109
103
  manageRoleSectionsToDisplay(contactsForResource) {
110
104
  const roles = contactsForResource.map((contact) => contact.role);
@@ -115,15 +109,15 @@ export class FormFieldContactsForResourceComponent {
115
109
  });
116
110
  }
117
111
  removeContact(index) {
118
- const newContactsforRessource = this.control.value.filter((_, i) => i !== index);
119
- this.control.setValue(newContactsforRessource);
112
+ const newContactsforRessource = this.value.filter((_, i) => i !== index);
113
+ this.valueChange.emit(newContactsforRessource);
120
114
  }
121
115
  handleContactsChanged(event) {
122
116
  const newContactsOrdered = event.map((contactAsDynElem) => contactAsDynElem.inputs['contact']);
123
117
  const role = newContactsOrdered[0].role;
124
118
  this.contactsForRessourceByRole.set(role, newContactsOrdered);
125
119
  const newControlValue = Array.from(this.contactsForRessourceByRole.values()).flat();
126
- this.control.setValue(newControlValue);
120
+ this.valueChange.emit(newControlValue);
127
121
  }
128
122
  roleToLabel(role) {
129
123
  return RoleLabels.get(role);
@@ -132,25 +126,23 @@ export class FormFieldContactsForResourceComponent {
132
126
  * gn-ui-autocomplete
133
127
  */
134
128
  addContact(contact, role) {
129
+ const newContact = contact;
135
130
  const newContactsForRessource = {
136
- firstName: contact.name ?? '',
137
- lastName: contact.surname ?? '',
138
- organization: this.allOrganizations.get(contact.organisation) ??
139
- { name: contact.organisation },
140
- email: contact.email ?? '',
131
+ firstName: newContact.name ?? '',
132
+ lastName: newContact.surname ?? '',
133
+ organization: this.allOrganizations.get(newContact.organisation) ??
134
+ { name: newContact.organisation },
135
+ email: newContact.email ?? '',
141
136
  role,
142
137
  address: '',
143
138
  phone: '',
144
139
  position: '',
145
140
  };
146
- const newControlValue = [...this.control.value, newContactsForRessource];
147
- this.control.setValue(newControlValue);
148
- }
149
- ngOnDestroy() {
150
- this.subscription.unsubscribe();
141
+ const newControlValue = [...this.value, newContactsForRessource];
142
+ this.valueChange.emit(newControlValue);
151
143
  }
152
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldContactsForResourceComponent, deps: [{ token: i1.PlatformServiceInterface }, { token: i2.OrganizationsServiceInterface }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldContactsForResourceComponent, isStandalone: true, selector: "gn-ui-form-field-contacts-for-resource", inputs: { control: "control" }, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n <ng-container *ngFor=\"let role of rolesToPick\">\n <gn-ui-button\n extraClass=\"px-2 py-1.5\"\n (buttonClick)=\"addRoleToDisplay(role)\"\n >\n <div class=\"flex flex-row gap-1 items-center\">\n <span class=\"text-primary text-[20px] leading-[0] font-bold pb-[5px]\"\n >&#8330;</span\n >\n <span class=\"font-bold\" translate>{{ roleToLabel(role) }}</span>\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n <div\n class=\"mt-8\"\n *ngIf=\"\n roleSectionsToDisplay && roleSectionsToDisplay.length > 0;\n else noContact\n \"\n data-test=\"displayedRoles\"\n >\n <div\n *ngFor=\"\n let role of roleSectionsToDisplay;\n let index = index;\n let isLast = last\n \"\n class=\"flex flex-col gap-4\"\n >\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n\n <gn-ui-autocomplete\n [placeholder]=\"'Choose a contact'\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contactsForRessourceByRole.get(role) as contacts\">\n <ng-container *ngIf=\"contacts.length > 1\">\n <gn-ui-sortable-list\n [elements]=\"contactsAsDynElemByRole.get(role)\"\n (elementsChange)=\"handleContactsChanged($event)\"\n ></gn-ui-sortable-list>\n </ng-container>\n <ng-container *ngIf=\"contacts.length === 1\">\n <ng-container *ngFor=\"let contact of contacts\">\n <gn-ui-contact-card\n [contact]=\"contact\"\n (contactRemoved)=\"removeContact(index)\"\n ></gn-ui-contact-card> </ng-container\n ></ng-container>\n </ng-container>\n\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" *ngIf=\"!isLast\" />\n </div>\n </div>\n <ng-template #noContact>\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: i3.ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact", "removable"], outputs: ["contactRemoved"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elements", "addOptions"], outputs: ["elementsChange", "add"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldContactsForResourceComponent, deps: [{ token: i1.PlatformServiceInterface }, { token: i2.OrganizationsServiceInterface }], target: i0.ɵɵFactoryTarget.Component }); }
145
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldContactsForResourceComponent, isStandalone: true, selector: "gn-ui-form-field-contacts-for-resource", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n <ng-container *ngFor=\"let role of rolesToPick\">\n <gn-ui-button\n extraClass=\"px-2 py-1.5\"\n (buttonClick)=\"addRoleToDisplay(role)\"\n >\n <div class=\"flex flex-row gap-1 items-center\">\n <span class=\"text-primary text-[20px] leading-[0] font-bold pb-[5px]\"\n >&#8330;</span\n >\n <span class=\"font-bold\" translate>{{ roleToLabel(role) }}</span>\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n <div\n class=\"mt-8\"\n *ngIf=\"\n roleSectionsToDisplay && roleSectionsToDisplay.length > 0;\n else noContact\n \"\n data-test=\"displayedRoles\"\n >\n <div\n *ngFor=\"\n let role of roleSectionsToDisplay;\n let index = index;\n let isLast = last\n \"\n class=\"flex flex-col gap-4\"\n >\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n\n <gn-ui-autocomplete\n [placeholder]=\"'Choose a contact'\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contactsForRessourceByRole.get(role) as contacts\">\n <ng-container *ngIf=\"contacts.length > 1\">\n <gn-ui-sortable-list\n [elements]=\"contactsAsDynElemByRole.get(role)\"\n (elementsChange)=\"handleContactsChanged($event)\"\n ></gn-ui-sortable-list>\n </ng-container>\n <ng-container *ngIf=\"contacts.length === 1\">\n <ng-container *ngFor=\"let contact of contacts\">\n <gn-ui-contact-card\n [contact]=\"contact\"\n (contactRemoved)=\"removeContact(index)\"\n ></gn-ui-contact-card> </ng-container\n ></ng-container>\n </ng-container>\n\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" *ngIf=\"!isLast\" />\n </div>\n </div>\n <ng-template #noContact>\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: i3.ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact", "removable"], outputs: ["contactRemoved"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elements"], outputs: ["elementsChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
146
  }
155
147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldContactsForResourceComponent, decorators: [{
156
148
  type: Component,
@@ -164,7 +156,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
164
156
  ContactCardComponent,
165
157
  SortableListComponent,
166
158
  ], template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n <ng-container *ngFor=\"let role of rolesToPick\">\n <gn-ui-button\n extraClass=\"px-2 py-1.5\"\n (buttonClick)=\"addRoleToDisplay(role)\"\n >\n <div class=\"flex flex-row gap-1 items-center\">\n <span class=\"text-primary text-[20px] leading-[0] font-bold pb-[5px]\"\n >&#8330;</span\n >\n <span class=\"font-bold\" translate>{{ roleToLabel(role) }}</span>\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n <div\n class=\"mt-8\"\n *ngIf=\"\n roleSectionsToDisplay && roleSectionsToDisplay.length > 0;\n else noContact\n \"\n data-test=\"displayedRoles\"\n >\n <div\n *ngFor=\"\n let role of roleSectionsToDisplay;\n let index = index;\n let isLast = last\n \"\n class=\"flex flex-col gap-4\"\n >\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n\n <gn-ui-autocomplete\n [placeholder]=\"'Choose a contact'\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contactsForRessourceByRole.get(role) as contacts\">\n <ng-container *ngIf=\"contacts.length > 1\">\n <gn-ui-sortable-list\n [elements]=\"contactsAsDynElemByRole.get(role)\"\n (elementsChange)=\"handleContactsChanged($event)\"\n ></gn-ui-sortable-list>\n </ng-container>\n <ng-container *ngIf=\"contacts.length === 1\">\n <ng-container *ngFor=\"let contact of contacts\">\n <gn-ui-contact-card\n [contact]=\"contact\"\n (contactRemoved)=\"removeContact(index)\"\n ></gn-ui-contact-card> </ng-container\n ></ng-container>\n </ng-container>\n\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" *ngIf=\"!isLast\" />\n </div>\n </div>\n <ng-template #noContact>\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n </ng-template>\n</div>\n" }]
167
- }], ctorParameters: function () { return [{ type: i1.PlatformServiceInterface }, { type: i2.OrganizationsServiceInterface }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { control: [{
159
+ }], ctorParameters: function () { return [{ type: i1.PlatformServiceInterface }, { type: i2.OrganizationsServiceInterface }]; }, propDecorators: { value: [{
168
160
  type: Input
161
+ }], valueChange: [{
162
+ type: Output
169
163
  }] } });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1jb250YWN0cy1mb3ItcmVzb3VyY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL2VkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvcmVjb3JkLWZvcm0vZm9ybS1maWVsZC9mb3JtLWZpZWxkLWNvbnRhY3RzLWZvci1yZXNvdXJjZS9mb3JtLWZpZWxkLWNvbnRhY3RzLWZvci1yZXNvdXJjZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ZlYXR1cmUvZWRpdG9yL3NyYy9saWIvY29tcG9uZW50cy9yZWNvcmQtZm9ybS9mb3JtLWZpZWxkL2Zvcm0tZmllbGQtY29udGFjdHMtZm9yLXJlc291cmNlL2Zvcm0tZmllbGQtY29udGFjdHMtZm9yLXJlc291cmNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixjQUFjLEdBQ2YsTUFBTSwrQ0FBK0MsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0RBQWdELENBQUE7QUFDaEYsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLG9FQUFvRSxDQUFBO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNyRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixjQUFjLEVBRWQsWUFBWSxFQUNaLFNBQVMsR0FD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QUNmLHFCQUFxQiwyUkFDckIsZUFBZSxzS0FDZixvQkFBb0IsOEhBQ3BCLHFCQUFxQjs7NEZBR1oscUNBQXFDO2tCQWpCakQsU0FBUzsrQkFDRSx3Q0FBd0MsbUJBR2pDLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLHlCQUF5Qjt3QkFDekIsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIscUJBQXFCO3FCQUN0QjsyTEFLUSxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7XG4gIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgRHJvcGRvd25TZWxlY3RvckNvbXBvbmVudCxcbiAgVWlJbnB1dHNNb2R1bGUsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvaW5wdXRzL3NyYydcbmltcG9ydCB7IFVpV2lkZ2V0c01vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvd2lkZ2V0cy9zcmMnXG5pbXBvcnQge1xuICBJbmRpdmlkdWFsLFxuICBPcmdhbml6YXRpb24sXG4gIFJvbGUsXG4gIFJvbGVMYWJlbHMsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaXJzdFZhbHVlRnJvbSxcbiAgT2JzZXJ2YWJsZSxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG59IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBVc2VyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC91c2VyJ1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcGxhdGZvcm0uc2VydmljZS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBPcmdhbml6YXRpb25zU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL29yZ2FuaXphdGlvbnMuc2VydmljZS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBDb250YWN0Q2FyZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbnRhY3QtY2FyZC9jb250YWN0LWNhcmQuY29tcG9uZW50J1xuaW1wb3J0IHtcbiAgRHluYW1pY0VsZW1lbnQsXG4gIFNvcnRhYmxlTGlzdENvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9lbGVtZW50cy9zcmMnXG5pbXBvcnQgeyBjcmVhdGVGdXp6eUZpbHRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9zaGFyZWQvc3JjJ1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLWZvcm0tZmllbGQtY29udGFjdHMtZm9yLXJlc291cmNlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZmllbGQtY29udGFjdHMtZm9yLXJlc291cmNlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1maWVsZC1jb250YWN0cy1mb3ItcmVzb3VyY2UuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIERyb3Bkb3duU2VsZWN0b3JDb21wb25lbnQsXG4gICAgVWlJbnB1dHNNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFVpV2lkZ2V0c01vZHVsZSxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIENvbnRhY3RDYXJkQ29tcG9uZW50LFxuICAgIFNvcnRhYmxlTGlzdENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUZpZWxkQ29udGFjdHNGb3JSZXNvdXJjZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpIGNvbnRyb2w6IEZvcm1Db250cm9sPEluZGl2aWR1YWxbXT5cblxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKVxuXG4gIGFsbFVzZXJzJDogT2JzZXJ2YWJsZTxVc2VyTW9kZWxbXT5cblxuICBjb250YWN0c0ZvclJlc3NvdXJjZUJ5Um9sZTogTWFwPFJvbGUsIEluZGl2aWR1YWxbXT4gPSBuZXcgTWFwKClcblxuICBjb250YWN0c0FzRHluRWxlbUJ5Um9sZTogTWFwPFJvbGUsIER5bmFtaWNFbGVtZW50W10+ID0gbmV3IE1hcCgpXG5cbiAgcm9sZXNUb1BpY2s6IFJvbGVbXSA9IFtcbiAgICAncmVzb3VyY2VfcHJvdmlkZXInLFxuICAgICdjdXN0b2RpYW4nLFxuICAgICdvd25lcicsXG4gICAgJ3BvaW50X29mX2NvbnRhY3QnLFxuICAgICdhdXRob3InLFxuICBdXG5cbiAgcm9sZVNlY3Rpb25zVG9EaXNwbGF5OiBSb2xlW10gPSBbXVxuXG4gIGFsbE9yZ2FuaXphdGlvbnM6IE1hcDxzdHJpbmcsIE9yZ2FuaXphdGlvbj4gPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBsYXRmb3JtU2VydmljZUludGVyZmFjZTogUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgb3JnYW5pemF0aW9uc1NlcnZpY2VJbnRlcmZhY2U6IE9yZ2FuaXphdGlvbnNTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuYWxsVXNlcnMkID0gdGhpcy5wbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2UuZ2V0VXNlcnMoKVxuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hbGxPcmdhbml6YXRpb25zID0gbmV3IE1hcDxzdHJpbmcsIE9yZ2FuaXphdGlvbj4oXG4gICAgICAoXG4gICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMub3JnYW5pemF0aW9uc1NlcnZpY2VJbnRlcmZhY2Uub3JnYW5pc2F0aW9ucyQpXG4gICAgICApLm1hcCgob3JnYW5pemF0aW9uKSA9PiBbb3JnYW5pemF0aW9uLm5hbWUsIG9yZ2FuaXphdGlvbl0pXG4gICAgKVxuICAgIHRoaXMudXBkYXRlQ29udGFjdHNGb3JSZXNzb3VyY2UoKVxuICAgIHRoaXMubWFuYWdlUm9sZVNlY3Rpb25zVG9EaXNwbGF5KHRoaXMuY29udHJvbC52YWx1ZSlcbiAgICB0aGlzLmZpbHRlclJvbGVzVG9QaWNrKClcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKClcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChjb250YWN0c0ZvclJlc291cmNlKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29udGFjdHNGb3JSZXNzb3VyY2UoKVxuICAgICAgICB0aGlzLm1hbmFnZVJvbGVTZWN0aW9uc1RvRGlzcGxheShjb250YWN0c0ZvclJlc291cmNlKVxuICAgICAgICB0aGlzLmZpbHRlclJvbGVzVG9QaWNrKClcblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGFkZFJvbGVUb0Rpc3BsYXkocm9sZVRvQWRkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJvbGVTZWN0aW9uc1RvRGlzcGxheS5wdXNoKHJvbGVUb0FkZClcbiAgICB0aGlzLmZpbHRlclJvbGVzVG9QaWNrKClcbiAgfVxuXG4gIGZpbHRlclJvbGVzVG9QaWNrKCkge1xuICAgIHRoaXMucm9sZXNUb1BpY2sgPSB0aGlzLnJvbGVzVG9QaWNrLmZpbHRlcihcbiAgICAgIChyb2xlKSA9PiAhdGhpcy5yb2xlU2VjdGlvbnNUb0Rpc3BsYXkuaW5jbHVkZXMocm9sZSlcbiAgICApXG4gIH1cblxuICB1cGRhdGVDb250YWN0c0ZvclJlc3NvdXJjZSgpIHtcbiAgICB0aGlzLmNvbnRhY3RzRm9yUmVzc291cmNlQnlSb2xlID0gdGhpcy5jb250cm9sLnZhbHVlLnJlZHVjZShcbiAgICAgIChhY2MsIGNvbnRhY3QpID0+IHtcbiAgICAgICAgY29uc3QgY29tcGxldGVPcmdhbml6YXRpb24gPSB0aGlzLmFsbE9yZ2FuaXphdGlvbnMuZ2V0KFxuICAgICAgICAgIGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWVcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb250YWN0ID0ge1xuICAgICAgICAgIC4uLmNvbnRhY3QsXG4gICAgICAgICAgb3JnYW5pemF0aW9uOlxuICAgICAgICAgICAgY29tcGxldGVPcmdhbml6YXRpb24gPz9cbiAgICAgICAgICAgICh7IG5hbWU6IGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWUgfSBhcyBPcmdhbml6YXRpb24pLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhY2MuaGFzKGNvbnRhY3Qucm9sZSkpIHtcbiAgICAgICAgICBhY2Muc2V0KGNvbnRhY3Qucm9sZSwgW10pXG4gICAgICAgIH1cblxuICAgICAgICBhY2MuZ2V0KGNvbnRhY3Qucm9sZSkucHVzaCh1cGRhdGVkQ29udGFjdClcblxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LFxuICAgICAgbmV3IE1hcDxSb2xlLCBJbmRpdmlkdWFsW10+KClcbiAgICApXG5cbiAgICB0aGlzLmNvbnRhY3RzQXNEeW5FbGVtQnlSb2xlID0gdGhpcy5jb250cm9sLnZhbHVlLnJlZHVjZSgoYWNjLCBjb250YWN0KSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV0ZU9yZ2FuaXphdGlvbiA9IHRoaXMuYWxsT3JnYW5pemF0aW9ucy5nZXQoXG4gICAgICAgIGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWVcbiAgICAgIClcblxuICAgICAgY29uc3QgdXBkYXRlZENvbnRhY3QgPSB7XG4gICAgICAgIC4uLmNvbnRhY3QsXG4gICAgICAgIG9yZ2FuaXphdGlvbjpcbiAgICAgICAgICBjb21wbGV0ZU9yZ2FuaXphdGlvbiA/P1xuICAgICAgICAgICh7IG5hbWU6IGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWUgfSBhcyBPcmdhbml6YXRpb24pLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250YWN0QXNEeW5FbGVtID0ge1xuICAgICAgICBjb21wb25lbnQ6IENvbnRhY3RDYXJkQ29tcG9uZW50LFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBjb250YWN0OiB1cGRhdGVkQ29udGFjdCxcbiAgICAgICAgICByZW1vdmFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBEeW5hbWljRWxlbWVudFxuXG4gICAgICBpZiAoIWFjYy5oYXMoY29udGFjdC5yb2xlKSkge1xuICAgICAgICBhY2Muc2V0KGNvbnRhY3Qucm9sZSwgW10pXG4gICAgICB9XG5cbiAgICAgIGFjYy5nZXQoY29udGFjdC5yb2xlKS5wdXNoKGNvbnRhY3RBc0R5bkVsZW0pXG5cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCBuZXcgTWFwPFJvbGUsIER5bmFtaWNFbGVtZW50W10+KCkpXG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpXG4gIH1cblxuICBtYW5hZ2VSb2xlU2VjdGlvbnNUb0Rpc3BsYXkoY29udGFjdHNGb3JSZXNvdXJjZTogSW5kaXZpZHVhbFtdKSB7XG4gICAgY29uc3Qgcm9sZXMgPSBjb250YWN0c0ZvclJlc291cmNlLm1hcChcbiAgICAgIChjb250YWN0OiBJbmRpdmlkdWFsKSA9PiBjb250YWN0LnJvbGVcbiAgICApIGFzIFJvbGVbXVxuXG4gICAgcm9sZXMuZm9yRWFjaCgocm9sZTogUm9sZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnJvbGVTZWN0aW9uc1RvRGlzcGxheS5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICB0aGlzLnJvbGVTZWN0aW9uc1RvRGlzcGxheS5wdXNoKHJvbGUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJlbW92ZUNvbnRhY3QoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IG5ld0NvbnRhY3RzZm9yUmVzc291cmNlID0gdGhpcy5jb250cm9sLnZhbHVlLmZpbHRlcihcbiAgICAgIChfLCBpKSA9PiBpICE9PSBpbmRleFxuICAgIClcbiAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUobmV3Q29udGFjdHNmb3JSZXNzb3VyY2UpXG4gIH1cblxuICBoYW5kbGVDb250YWN0c0NoYW5nZWQoZXZlbnQ6IER5bmFtaWNFbGVtZW50W10pIHtcbiAgICBjb25zdCBuZXdDb250YWN0c09yZGVyZWQgPSBldmVudC5tYXAoXG4gICAgICAoY29udGFjdEFzRHluRWxlbSkgPT4gY29udGFjdEFzRHluRWxlbS5pbnB1dHNbJ2NvbnRhY3QnXVxuICAgICkgYXMgSW5kaXZpZHVhbFtdXG5cbiAgICBjb25zdCByb2xlID0gbmV3Q29udGFjdHNPcmRlcmVkWzBdLnJvbGVcblxuICAgIHRoaXMuY29udGFjdHNGb3JSZXNzb3VyY2VCeVJvbGUuc2V0KHJvbGUsIG5ld0NvbnRhY3RzT3JkZXJlZClcblxuICAgIGNvbnN0IG5ld0NvbnRyb2xWYWx1ZSA9IEFycmF5LmZyb20oXG4gICAgICB0aGlzLmNvbnRhY3RzRm9yUmVzc291cmNlQnlSb2xlLnZhbHVlcygpXG4gICAgKS5mbGF0KClcblxuICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShuZXdDb250cm9sVmFsdWUpXG4gIH1cblxuICBwcm90ZWN0ZWQgcm9sZVRvTGFiZWwocm9sZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUm9sZUxhYmVscy5nZXQocm9sZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBnbi11aS1hdXRvY29tcGxldGVcbiAgICovXG4gIGRpc3BsYXlXaXRoRm46ICh1c2VyOiBVc2VyTW9kZWwpID0+IHN0cmluZyA9ICh1c2VyKSA9PlxuICAgIGAke3VzZXIubmFtZX0gJHt1c2VyLnN1cm5hbWV9ICR7XG4gICAgICB1c2VyLm9yZ2FuaXNhdGlvbiA/IGAoJHt1c2VyLm9yZ2FuaXNhdGlvbn0pYCA6ICcnXG4gICAgfWBcblxuICAvKipcbiAgICogZ24tdWktYXV0b2NvbXBsZXRlXG4gICAqL1xuICBhdXRvQ29tcGxldGVBY3Rpb24gPSAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZ1enp5RmlsdGVyID0gY3JlYXRlRnV6enlGaWx0ZXIocXVlcnkpXG4gICAgcmV0dXJuIHRoaXMuYWxsVXNlcnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHVzZXJzKSA9PiBbXG4gICAgICAgIHVzZXJzLmZpbHRlcigodXNlcikgPT4gZnV6enlGaWx0ZXIodXNlci51c2VybmFtZSkpLFxuICAgICAgXSksXG4gICAgICBtYXAoKHJlc3VsdHMpID0+IHJlc3VsdHMuc2xpY2UoMCwgMTApKSxcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBnbi11aS1hdXRvY29tcGxldGVcbiAgICovXG4gIGFkZENvbnRhY3QoY29udGFjdDogVXNlck1vZGVsLCByb2xlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXdDb250YWN0c0ZvclJlc3NvdXJjZSA9IHtcbiAgICAgIGZpcnN0TmFtZTogY29udGFjdC5uYW1lID8/ICcnLFxuICAgICAgbGFzdE5hbWU6IGNvbnRhY3Quc3VybmFtZSA/PyAnJyxcbiAgICAgIG9yZ2FuaXphdGlvbjpcbiAgICAgICAgdGhpcy5hbGxPcmdhbml6YXRpb25zLmdldChjb250YWN0Lm9yZ2FuaXNhdGlvbikgPz9cbiAgICAgICAgKHsgbmFtZTogY29udGFjdC5vcmdhbmlzYXRpb24gfSBhcyBPcmdhbml6YXRpb24pLFxuICAgICAgZW1haWw6IGNvbnRhY3QuZW1haWwgPz8gJycsXG4gICAgICByb2xlLFxuICAgICAgYWRkcmVzczogJycsXG4gICAgICBwaG9uZTogJycsXG4gICAgICBwb3NpdGlvbjogJycsXG4gICAgfSBhcyBJbmRpdmlkdWFsXG5cbiAgICBjb25zdCBuZXdDb250cm9sVmFsdWUgPSBbLi4udGhpcy5jb250cm9sLnZhbHVlLCBuZXdDb250YWN0c0ZvclJlc3NvdXJjZV1cblxuICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShuZXdDb250cm9sVmFsdWUpXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBnYXAtMlwiIGRhdGEtdGVzdD1cInJvbGVzVG9QaWNrXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm9sZSBvZiByb2xlc1RvUGlja1wiPlxuICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICBleHRyYUNsYXNzPVwicHgtMiBweS0xLjVcIlxuICAgICAgICAoYnV0dG9uQ2xpY2spPVwiYWRkUm9sZVRvRGlzcGxheShyb2xlKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0xIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5IHRleHQtWzIwcHhdIGxlYWRpbmctWzBdIGZvbnQtYm9sZCBwYi1bNXB4XVwiXG4gICAgICAgICAgICA+JiM4MzMwOzwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiIHRyYW5zbGF0ZT57eyByb2xlVG9MYWJlbChyb2xlKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2duLXVpLWJ1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm10LThcIlxuICAgICpuZ0lmPVwiXG4gICAgICByb2xlU2VjdGlvbnNUb0Rpc3BsYXkgJiYgcm9sZVNlY3Rpb25zVG9EaXNwbGF5Lmxlbmd0aCA+IDA7XG4gICAgICBlbHNlIG5vQ29udGFjdFxuICAgIFwiXG4gICAgZGF0YS10ZXN0PVwiZGlzcGxheWVkUm9sZXNcIlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCByb2xlIG9mIHJvbGVTZWN0aW9uc1RvRGlzcGxheTtcbiAgICAgICAgbGV0IGluZGV4ID0gaW5kZXg7XG4gICAgICAgIGxldCBpc0xhc3QgPSBsYXN0XG4gICAgICBcIlxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00XCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGQgdGV4dC1iYXNlXCIgdHJhbnNsYXRlPnt7XG4gICAgICAgICAgcm9sZVRvTGFiZWwocm9sZSlcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGduLXVpLWF1dG9jb21wbGV0ZVxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Nob29zZSBhIGNvbnRhY3QnXCJcbiAgICAgICAgW2FjdGlvbl09XCJhdXRvQ29tcGxldGVBY3Rpb25cIlxuICAgICAgICAoaXRlbVNlbGVjdGVkKT1cImFkZENvbnRhY3QoJGV2ZW50LCByb2xlKVwiXG4gICAgICAgIFtkaXNwbGF5V2l0aEZuXT1cImRpc3BsYXlXaXRoRm5cIlxuICAgICAgICBbbWluQ2hhcmFjdGVyQ291bnRdPVwiMVwiXG4gICAgICAgIFtjbGVhck9uU2VsZWN0aW9uXT1cInRydWVcIlxuICAgICAgPlxuICAgICAgPC9nbi11aS1hdXRvY29tcGxldGU+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250YWN0c0ZvclJlc3NvdXJjZUJ5Um9sZS5nZXQocm9sZSkgYXMgY29udGFjdHNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRhY3RzLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICA8Z24tdWktc29ydGFibGUtbGlzdFxuICAgICAgICAgICAgW2VsZW1lbnRzXT1cImNvbnRhY3RzQXNEeW5FbGVtQnlSb2xlLmdldChyb2xlKVwiXG4gICAgICAgICAgICAoZWxlbWVudHNDaGFuZ2UpPVwiaGFuZGxlQ29udGFjdHNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgID48L2duLXVpLXNvcnRhYmxlLWxpc3Q+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGFjdHMubGVuZ3RoID09PSAxXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29udGFjdCBvZiBjb250YWN0c1wiPlxuICAgICAgICAgICAgPGduLXVpLWNvbnRhY3QtY2FyZFxuICAgICAgICAgICAgICBbY29udGFjdF09XCJjb250YWN0XCJcbiAgICAgICAgICAgICAgKGNvbnRhY3RSZW1vdmVkKT1cInJlbW92ZUNvbnRhY3QoaW5kZXgpXCJcbiAgICAgICAgICAgID48L2duLXVpLWNvbnRhY3QtY2FyZD4gPC9uZy1jb250YWluZXJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxociBjbGFzcz1cImJvcmRlci10LVsjRDZEM0QxXSBtdC00IG1iLTZcIiAqbmdJZj1cIiFpc0xhc3RcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNub0NvbnRhY3Q+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwLTQgYm9yZGVyIGJvcmRlci1wcmltYXJ5IGJnLXByaW1hcnktbGlnaHRlc3Qgcm91bmRlZC1sZ1wiXG4gICAgICB0cmFuc2xhdGVcbiAgICA+XG4gICAgICBlZGl0b3IucmVjb3JkLmZvcm0uZmllbGQuY29udGFjdHNGb3JSZXNvdXJjZS5ub0NvbnRhY3RcbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1jb250YWN0cy1mb3ItcmVzb3VyY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9mZWF0dXJlL2VkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvcmVjb3JkLWZvcm0vZm9ybS1maWVsZC9mb3JtLWZpZWxkLWNvbnRhY3RzLWZvci1yZXNvdXJjZS9mb3JtLWZpZWxkLWNvbnRhY3RzLWZvci1yZXNvdXJjZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ZlYXR1cmUvZWRpdG9yL3NyYy9saWIvY29tcG9uZW50cy9yZWNvcmQtZm9ybS9mb3JtLWZpZWxkL2Zvcm0tZmllbGQtY29udGFjdHMtZm9yLXJlc291cmNlL2Zvcm0tZmllbGQtY29udGFjdHMtZm9yLXJlc291cmNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBSUwsVUFBVSxHQUNYLE1BQU0sb0VBQW9FLENBQUE7QUFFM0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUZBQXVGLENBQUE7QUFDckksT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0ZBQWtGLENBQUE7QUFDM0gsT0FBTyxFQUVMLHFCQUFxQixHQUN0QixNQUFNLGlEQUFpRCxDQUFBO0FBQ3hELE9BQU8sRUFDTCxxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLGNBQWMsR0FDZixNQUFNLCtDQUErQyxDQUFBO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQTtBQUNoRixPQUFP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LE9BQU8sSUFBSSxFQUFFO1lBQ2xDLFlBQVksRUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7Z0JBQ2pELEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQW1CO1lBQ3JELEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDN0IsSUFBSTtZQUNKLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNDLENBQUE7UUFFZixNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxDQUFBO1FBRWhFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7K0dBNUxVLHFDQUFxQzttR0FBckMscUNBQXFDLDRMQzNEbEQsaThFQTRFQSx5REQxQkksY0FBYywrS0FDZCxZQUFZLCtQQUNaLGVBQWUsK0JBQ2YscUJBQXFCLDJSQUNyQixlQUFlLHNLQUNmLG9CQUFvQiw4SEFDcEIscUJBQXFCOzs0RkFHWixxQ0FBcUM7a0JBakJqRCxTQUFTOytCQUNFLHdDQUF3QyxtQkFHakMsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AseUJBQXlCO3dCQUN6QixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixxQkFBcUI7cUJBQ3RCOzJKQUtRLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBJbmRpdmlkdWFsLFxuICBPcmdhbml6YXRpb24sXG4gIFJvbGUsXG4gIFJvbGVMYWJlbHMsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFVzZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3VzZXInXG5pbXBvcnQgeyBPcmdhbml6YXRpb25zU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL29yZ2FuaXphdGlvbnMuc2VydmljZS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9wbGF0Zm9ybS5zZXJ2aWNlLmludGVyZmFjZSdcbmltcG9ydCB7XG4gIER5bmFtaWNFbGVtZW50LFxuICBTb3J0YWJsZUxpc3RDb21wb25lbnQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjJ1xuaW1wb3J0IHtcbiAgQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICBEcm9wZG93blNlbGVjdG9yQ29tcG9uZW50LFxuICBVaUlucHV0c01vZHVsZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9pbnB1dHMvc3JjJ1xuaW1wb3J0IHsgVWlXaWRnZXRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS93aWRnZXRzL3NyYydcbmltcG9ydCB7IGNyZWF0ZUZ1enp5RmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlyc3RWYWx1ZUZyb20sXG4gIE9ic2VydmFibGUsXG4gIHN3aXRjaE1hcCxcbn0gZnJvbSAncnhqcydcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgQ29udGFjdENhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb250YWN0LWNhcmQvY29udGFjdC1jYXJkLmNvbXBvbmVudCdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktZm9ybS1maWVsZC1jb250YWN0cy1mb3ItcmVzb3VyY2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1maWVsZC1jb250YWN0cy1mb3ItcmVzb3VyY2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWZpZWxkLWNvbnRhY3RzLWZvci1yZXNvdXJjZS5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRHJvcGRvd25TZWxlY3RvckNvbXBvbmVudCxcbiAgICBVaUlucHV0c01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVWlXaWRnZXRzTW9kdWxlLFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQ29udGFjdENhcmRDb21wb25lbnQsXG4gICAgU29ydGFibGVMaXN0Q29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGRDb250YWN0c0ZvclJlc291cmNlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXRcbntcbiAgQElucHV0KCkgdmFsdWU6IEluZGl2aWR1YWxbXVxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJbmRpdmlkdWFsW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgY29udGFjdHNGb3JSZXNzb3VyY2VCeVJvbGU6IE1hcDxSb2xlLCBJbmRpdmlkdWFsW10+ID0gbmV3IE1hcCgpXG5cbiAgY29udGFjdHNBc0R5bkVsZW1CeVJvbGU6IE1hcDxSb2xlLCBEeW5hbWljRWxlbWVudFtdPiA9IG5ldyBNYXAoKVxuXG4gIHJvbGVzVG9QaWNrOiBSb2xlW10gPSBbXG4gICAgJ3Jlc291cmNlX3Byb3ZpZGVyJyxcbiAgICAnY3VzdG9kaWFuJyxcbiAgICAnb3duZXInLFxuICAgICdwb2ludF9vZl9jb250YWN0JyxcbiAgICAnYXV0aG9yJyxcbiAgXVxuXG4gIHJvbGVTZWN0aW9uc1RvRGlzcGxheTogUm9sZVtdID0gW11cblxuICBhbGxPcmdhbml6YXRpb25zOiBNYXA8c3RyaW5nLCBPcmdhbml6YXRpb24+ID0gbmV3IE1hcCgpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2U6IFBsYXRmb3JtU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvbnNTZXJ2aWNlSW50ZXJmYWNlOiBPcmdhbml6YXRpb25zU2VydmljZUludGVyZmFjZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy51cGRhdGVDb250YWN0c0ZvclJlc3NvdXJjZSgpXG4gICAgdGhpcy5tYW5hZ2VSb2xlU2VjdGlvbnNUb0Rpc3BsYXkodGhpcy52YWx1ZSlcbiAgICB0aGlzLmZpbHRlclJvbGVzVG9QaWNrKClcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYWxsT3JnYW5pemF0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBPcmdhbml6YXRpb24+KFxuICAgICAgKFxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm9yZ2FuaXphdGlvbnNTZXJ2aWNlSW50ZXJmYWNlLm9yZ2FuaXNhdGlvbnMkKVxuICAgICAgKS5tYXAoKG9yZ2FuaXphdGlvbikgPT4gW29yZ2FuaXphdGlvbi5uYW1lLCBvcmdhbml6YXRpb25dKVxuICAgIClcbiAgICB0aGlzLnVwZGF0ZUNvbnRhY3RzRm9yUmVzc291cmNlKClcbiAgICB0aGlzLm1hbmFnZVJvbGVTZWN0aW9uc1RvRGlzcGxheSh0aGlzLnZhbHVlKVxuICAgIHRoaXMuZmlsdGVyUm9sZXNUb1BpY2soKVxuICB9XG5cbiAgYWRkUm9sZVRvRGlzcGxheShyb2xlVG9BZGQ6IHN0cmluZykge1xuICAgIHRoaXMucm9sZVNlY3Rpb25zVG9EaXNwbGF5LnB1c2gocm9sZVRvQWRkKVxuICAgIHRoaXMuZmlsdGVyUm9sZXNUb1BpY2soKVxuICB9XG5cbiAgZmlsdGVyUm9sZXNUb1BpY2soKSB7XG4gICAgdGhpcy5yb2xlc1RvUGljayA9IHRoaXMucm9sZXNUb1BpY2suZmlsdGVyKFxuICAgICAgKHJvbGUpID0+ICF0aGlzLnJvbGVTZWN0aW9uc1RvRGlzcGxheS5pbmNsdWRlcyhyb2xlKVxuICAgIClcbiAgfVxuXG4gIHVwZGF0ZUNvbnRhY3RzRm9yUmVzc291cmNlKCkge1xuICAgIHRoaXMuY29udGFjdHNGb3JSZXNzb3VyY2VCeVJvbGUgPSB0aGlzLnZhbHVlLnJlZHVjZSgoYWNjLCBjb250YWN0KSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV0ZU9yZ2FuaXphdGlvbiA9IHRoaXMuYWxsT3JnYW5pemF0aW9ucy5nZXQoXG4gICAgICAgIGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWVcbiAgICAgIClcblxuICAgICAgY29uc3QgdXBkYXRlZENvbnRhY3QgPSB7XG4gICAgICAgIC4uLmNvbnRhY3QsXG4gICAgICAgIG9yZ2FuaXphdGlvbjpcbiAgICAgICAgICBjb21wbGV0ZU9yZ2FuaXphdGlvbiA/P1xuICAgICAgICAgICh7IG5hbWU6IGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWUgfSBhcyBPcmdhbml6YXRpb24pLFxuICAgICAgfVxuXG4gICAgICBpZiAoIWFjYy5oYXMoY29udGFjdC5yb2xlKSkge1xuICAgICAgICBhY2Muc2V0KGNvbnRhY3Qucm9sZSwgW10pXG4gICAgICB9XG5cbiAgICAgIGFjYy5nZXQoY29udGFjdC5yb2xlKS5wdXNoKHVwZGF0ZWRDb250YWN0KVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwgbmV3IE1hcDxSb2xlLCBJbmRpdmlkdWFsW10+KCkpXG5cbiAgICB0aGlzLmNvbnRhY3RzQXNEeW5FbGVtQnlSb2xlID0gdGhpcy52YWx1ZS5yZWR1Y2UoKGFjYywgY29udGFjdCkgPT4ge1xuICAgICAgY29uc3QgY29tcGxldGVPcmdhbml6YXRpb24gPSB0aGlzLmFsbE9yZ2FuaXphdGlvbnMuZ2V0KFxuICAgICAgICBjb250YWN0Lm9yZ2FuaXphdGlvbi5uYW1lXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRDb250YWN0ID0ge1xuICAgICAgICAuLi5jb250YWN0LFxuICAgICAgICBvcmdhbml6YXRpb246XG4gICAgICAgICAgY29tcGxldGVPcmdhbml6YXRpb24gPz9cbiAgICAgICAgICAoeyBuYW1lOiBjb250YWN0Lm9yZ2FuaXphdGlvbi5uYW1lIH0gYXMgT3JnYW5pemF0aW9uKSxcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGFjdEFzRHluRWxlbSA9IHtcbiAgICAgICAgY29tcG9uZW50OiBDb250YWN0Q2FyZENvbXBvbmVudCxcbiAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgY29udGFjdDogdXBkYXRlZENvbnRhY3QsXG4gICAgICAgICAgcmVtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgRHluYW1pY0VsZW1lbnRcblxuICAgICAgaWYgKCFhY2MuaGFzKGNvbnRhY3Qucm9sZSkpIHtcbiAgICAgICAgYWNjLnNldChjb250YWN0LnJvbGUsIFtdKVxuICAgICAgfVxuXG4gICAgICBhY2MuZ2V0KGNvbnRhY3Qucm9sZSkucHVzaChjb250YWN0QXNEeW5FbGVtKVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwgbmV3IE1hcDxSb2xlLCBEeW5hbWljRWxlbWVudFtdPigpKVxuICB9XG5cbiAgbWFuYWdlUm9sZVNlY3Rpb25zVG9EaXNwbGF5KGNvbnRhY3RzRm9yUmVzb3VyY2U6IEluZGl2aWR1YWxbXSkge1xuICAgIGNvbnN0IHJvbGVzID0gY29udGFjdHNGb3JSZXNvdXJjZS5tYXAoXG4gICAgICAoY29udGFjdDogSW5kaXZpZHVhbCkgPT4gY29udGFjdC5yb2xlXG4gICAgKSBhcyBSb2xlW11cblxuICAgIHJvbGVzLmZvckVhY2goKHJvbGU6IFJvbGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5yb2xlU2VjdGlvbnNUb0Rpc3BsYXkuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgdGhpcy5yb2xlU2VjdGlvbnNUb0Rpc3BsYXkucHVzaChyb2xlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZW1vdmVDb250YWN0KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBuZXdDb250YWN0c2ZvclJlc3NvdXJjZSA9IHRoaXMudmFsdWUuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleClcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobmV3Q29udGFjdHNmb3JSZXNzb3VyY2UpXG4gIH1cblxuICBoYW5kbGVDb250YWN0c0NoYW5nZWQoZXZlbnQ6IER5bmFtaWNFbGVtZW50W10pIHtcbiAgICBjb25zdCBuZXdDb250YWN0c09yZGVyZWQgPSBldmVudC5tYXAoXG4gICAgICAoY29udGFjdEFzRHluRWxlbSkgPT4gY29udGFjdEFzRHluRWxlbS5pbnB1dHNbJ2NvbnRhY3QnXVxuICAgICkgYXMgSW5kaXZpZHVhbFtdXG5cbiAgICBjb25zdCByb2xlID0gbmV3Q29udGFjdHNPcmRlcmVkWzBdLnJvbGVcblxuICAgIHRoaXMuY29udGFjdHNGb3JSZXNzb3VyY2VCeVJvbGUuc2V0KHJvbGUsIG5ld0NvbnRhY3RzT3JkZXJlZClcblxuICAgIGNvbnN0IG5ld0NvbnRyb2xWYWx1ZSA9IEFycmF5LmZyb20oXG4gICAgICB0aGlzLmNvbnRhY3RzRm9yUmVzc291cmNlQnlSb2xlLnZhbHVlcygpXG4gICAgKS5mbGF0KClcblxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXdDb250cm9sVmFsdWUpXG4gIH1cblxuICBwcm90ZWN0ZWQgcm9sZVRvTGFiZWwocm9sZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUm9sZUxhYmVscy5nZXQocm9sZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBnbi11aS1hdXRvY29tcGxldGVcbiAgICovXG4gIGRpc3BsYXlXaXRoRm46ICh1c2VyOiBVc2VyTW9kZWwpID0+IHN0cmluZyA9ICh1c2VyKSA9PlxuICAgIGAke3VzZXIubmFtZX0gJHt1c2VyLnN1cm5hbWV9ICR7XG4gICAgICB1c2VyLm9yZ2FuaXNhdGlvbiA/IGAoJHt1c2VyLm9yZ2FuaXNhdGlvbn0pYCA6ICcnXG4gICAgfWBcblxuICAvKipcbiAgICogZ24tdWktYXV0b2NvbXBsZXRlXG4gICAqL1xuICBhdXRvQ29tcGxldGVBY3Rpb24gPSAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZ1enp5RmlsdGVyID0gY3JlYXRlRnV6enlGaWx0ZXIocXVlcnkpXG4gICAgcmV0dXJuIHRoaXMucGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlLmdldFVzZXJzKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodXNlcnMpID0+IFtcbiAgICAgICAgdXNlcnMuZmlsdGVyKCh1c2VyKSA9PiBmdXp6eUZpbHRlcih1c2VyLnVzZXJuYW1lKSksXG4gICAgICBdKSxcbiAgICAgIG1hcCgocmVzdWx0cykgPT4gcmVzdWx0cy5zbGljZSgwLCAxMCkpLFxuICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIGduLXVpLWF1dG9jb21wbGV0ZVxuICAgKi9cbiAgYWRkQ29udGFjdChjb250YWN0OiB1bmtub3duLCByb2xlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXdDb250YWN0ID0gY29udGFjdCBhcyBVc2VyTW9kZWxcbiAgICBjb25zdCBuZXdDb250YWN0c0ZvclJlc3NvdXJjZSA9IHtcbiAgICAgIGZpcnN0TmFtZTogbmV3Q29udGFjdC5uYW1lID8/ICcnLFxuICAgICAgbGFzdE5hbWU6IG5ld0NvbnRhY3Quc3VybmFtZSA/PyAnJyxcbiAgICAgIG9yZ2FuaXphdGlvbjpcbiAgICAgICAgdGhpcy5hbGxPcmdhbml6YXRpb25zLmdldChuZXdDb250YWN0Lm9yZ2FuaXNhdGlvbikgPz9cbiAgICAgICAgKHsgbmFtZTogbmV3Q29udGFjdC5vcmdhbmlzYXRpb24gfSBhcyBPcmdhbml6YXRpb24pLFxuICAgICAgZW1haWw6IG5ld0NvbnRhY3QuZW1haWwgPz8gJycsXG4gICAgICByb2xlLFxuICAgICAgYWRkcmVzczogJycsXG4gICAgICBwaG9uZTogJycsXG4gICAgICBwb3NpdGlvbjogJycsXG4gICAgfSBhcyBJbmRpdmlkdWFsXG5cbiAgICBjb25zdCBuZXdDb250cm9sVmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgbmV3Q29udGFjdHNGb3JSZXNzb3VyY2VdXG5cbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobmV3Q29udHJvbFZhbHVlKVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAgZ2FwLTJcIiBkYXRhLXRlc3Q9XCJyb2xlc1RvUGlja1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvbGUgb2Ygcm9sZXNUb1BpY2tcIj5cbiAgICAgIDxnbi11aS1idXR0b25cbiAgICAgICAgZXh0cmFDbGFzcz1cInB4LTIgcHktMS41XCJcbiAgICAgICAgKGJ1dHRvbkNsaWNrKT1cImFkZFJvbGVUb0Rpc3BsYXkocm9sZSlcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMSBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcHJpbWFyeSB0ZXh0LVsyMHB4XSBsZWFkaW5nLVswXSBmb250LWJvbGQgcGItWzVweF1cIlxuICAgICAgICAgICAgPiYjODMzMDs8L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIiB0cmFuc2xhdGU+e3sgcm9sZVRvTGFiZWwocm9sZSkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9nbi11aS1idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJtdC04XCJcbiAgICAqbmdJZj1cIlxuICAgICAgcm9sZVNlY3Rpb25zVG9EaXNwbGF5ICYmIHJvbGVTZWN0aW9uc1RvRGlzcGxheS5sZW5ndGggPiAwO1xuICAgICAgZWxzZSBub0NvbnRhY3RcbiAgICBcIlxuICAgIGRhdGEtdGVzdD1cImRpc3BsYXllZFJvbGVzXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cIlxuICAgICAgICBsZXQgcm9sZSBvZiByb2xlU2VjdGlvbnNUb0Rpc3BsYXk7XG4gICAgICAgIGxldCBpbmRleCA9IGluZGV4O1xuICAgICAgICBsZXQgaXNMYXN0ID0gbGFzdFxuICAgICAgXCJcbiAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtYmFzZVwiIHRyYW5zbGF0ZT57e1xuICAgICAgICAgIHJvbGVUb0xhYmVsKHJvbGUpXG4gICAgICAgIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxnbi11aS1hdXRvY29tcGxldGVcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidDaG9vc2UgYSBjb250YWN0J1wiXG4gICAgICAgIFthY3Rpb25dPVwiYXV0b0NvbXBsZXRlQWN0aW9uXCJcbiAgICAgICAgKGl0ZW1TZWxlY3RlZCk9XCJhZGRDb250YWN0KCRldmVudCwgcm9sZSlcIlxuICAgICAgICBbZGlzcGxheVdpdGhGbl09XCJkaXNwbGF5V2l0aEZuXCJcbiAgICAgICAgW21pbkNoYXJhY3RlckNvdW50XT1cIjFcIlxuICAgICAgICBbY2xlYXJPblNlbGVjdGlvbl09XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgIDwvZ24tdWktYXV0b2NvbXBsZXRlPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGFjdHNGb3JSZXNzb3VyY2VCeVJvbGUuZ2V0KHJvbGUpIGFzIGNvbnRhY3RzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250YWN0cy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgPGduLXVpLXNvcnRhYmxlLWxpc3RcbiAgICAgICAgICAgIFtlbGVtZW50c109XCJjb250YWN0c0FzRHluRWxlbUJ5Um9sZS5nZXQocm9sZSlcIlxuICAgICAgICAgICAgKGVsZW1lbnRzQ2hhbmdlKT1cImhhbmRsZUNvbnRhY3RzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9nbi11aS1zb3J0YWJsZS1saXN0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRhY3RzLmxlbmd0aCA9PT0gMVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbnRhY3Qgb2YgY29udGFjdHNcIj5cbiAgICAgICAgICAgIDxnbi11aS1jb250YWN0LWNhcmRcbiAgICAgICAgICAgICAgW2NvbnRhY3RdPVwiY29udGFjdFwiXG4gICAgICAgICAgICAgIChjb250YWN0UmVtb3ZlZCk9XCJyZW1vdmVDb250YWN0KGluZGV4KVwiXG4gICAgICAgICAgICA+PC9nbi11aS1jb250YWN0LWNhcmQ+IDwvbmctY29udGFpbmVyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8aHIgY2xhc3M9XCJib3JkZXItdC1bI0Q2RDNEMV0gbXQtNCBtYi02XCIgKm5nSWY9XCIhaXNMYXN0XCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9Db250YWN0PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicC00IGJvcmRlciBib3JkZXItcHJpbWFyeSBiZy1wcmltYXJ5LWxpZ2h0ZXN0IHJvdW5kZWQtbGdcIlxuICAgICAgdHJhbnNsYXRlXG4gICAgPlxuICAgICAgZWRpdG9yLnJlY29yZC5mb3JtLmZpZWxkLmNvbnRhY3RzRm9yUmVzb3VyY2Uubm9Db250YWN0XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==