@valtimo/connector-management 4.23.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/esm2020/lib/components/add-connector-configure/add-connector-configure.component.mjs +67 -0
  2. package/esm2020/lib/components/add-connector-select/add-connector-select.component.mjs +67 -0
  3. package/esm2020/lib/components/connector-link-extension/connector-link-extension.component.mjs +98 -0
  4. package/esm2020/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.mjs +129 -0
  5. package/esm2020/lib/components/connector-management/connector-management.component.mjs +103 -0
  6. package/esm2020/lib/components/connector-modal/connector-modal.component.mjs +98 -0
  7. package/esm2020/lib/components/edit-connector-form/edit-connector-form.component.mjs +56 -0
  8. package/esm2020/lib/components/edit-connector-properties/edit-connector-properties.component.mjs +185 -0
  9. package/esm2020/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.mjs +169 -0
  10. package/esm2020/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.mjs +299 -0
  11. package/esm2020/lib/components/edit-taak-connector/edit-taak-connector.component.mjs +139 -0
  12. package/esm2020/lib/components/edit-taak-connector/edit-taak-connector.form.mjs +61 -0
  13. package/esm2020/lib/components/modify-connector/modify-connector.component.mjs +79 -0
  14. package/esm2020/lib/components/multi-value-connector-property/multi-value-connector-property.component.mjs +102 -0
  15. package/esm2020/lib/connector-management-routing.mjs +45 -0
  16. package/esm2020/lib/connector-management.module.mjs +153 -0
  17. package/esm2020/lib/extension/connector-management.extension.init.mjs +37 -0
  18. package/esm2020/lib/models/index.mjs +19 -0
  19. package/esm2020/lib/models/object-sync.mjs +2 -0
  20. package/esm2020/lib/services/connector-management/connector-management.service.mjs +56 -0
  21. package/esm2020/lib/services/connector-management-state/connector-management-state.service.mjs +152 -0
  22. package/esm2020/lib/services/object-api-sync/object-api-sync.service.mjs +47 -0
  23. package/esm2020/public-api.mjs +36 -0
  24. package/esm2020/valtimo-connector-management.mjs +5 -0
  25. package/fesm2015/valtimo-connector-management.mjs +2044 -0
  26. package/fesm2015/valtimo-connector-management.mjs.map +1 -0
  27. package/fesm2020/valtimo-connector-management.mjs +2041 -0
  28. package/fesm2020/valtimo-connector-management.mjs.map +1 -0
  29. package/lib/components/{add-connector/add-connector.component.d.ts → add-connector-configure/add-connector-configure.component.d.ts} +9 -9
  30. package/lib/components/add-connector-configure/add-connector-configure.component.d.ts.map +1 -0
  31. package/lib/components/add-connector-select/add-connector-select.component.d.ts +26 -0
  32. package/lib/components/add-connector-select/add-connector-select.component.d.ts.map +1 -0
  33. package/lib/components/connector-link-extension/connector-link-extension.component.d.ts +4 -0
  34. package/lib/components/connector-link-extension/connector-link-extension.component.d.ts.map +1 -0
  35. package/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.d.ts +5 -2
  36. package/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.d.ts.map +1 -0
  37. package/lib/components/connector-management/connector-management.component.d.ts +7 -2
  38. package/lib/components/connector-management/connector-management.component.d.ts.map +1 -0
  39. package/lib/components/connector-modal/connector-modal.component.d.ts +23 -7
  40. package/lib/components/connector-modal/connector-modal.component.d.ts.map +1 -0
  41. package/lib/components/edit-connector-form/edit-connector-form.component.d.ts +5 -0
  42. package/lib/components/edit-connector-form/edit-connector-form.component.d.ts.map +1 -0
  43. package/lib/components/edit-connector-properties/edit-connector-properties.component.d.ts +14 -2
  44. package/lib/components/edit-connector-properties/edit-connector-properties.component.d.ts.map +1 -0
  45. package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.d.ts +9 -1
  46. package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.d.ts.map +1 -0
  47. package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.d.ts +1 -0
  48. package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.d.ts.map +1 -0
  49. package/lib/components/edit-taak-connector/edit-taak-connector.component.d.ts +9 -1
  50. package/lib/components/edit-taak-connector/edit-taak-connector.component.d.ts.map +1 -0
  51. package/lib/components/edit-taak-connector/edit-taak-connector.form.d.ts +1 -0
  52. package/lib/components/edit-taak-connector/edit-taak-connector.form.d.ts.map +1 -0
  53. package/lib/components/modify-connector/modify-connector.component.d.ts +6 -0
  54. package/lib/components/modify-connector/modify-connector.component.d.ts.map +1 -0
  55. package/lib/components/multi-value-connector-property/multi-value-connector-property.component.d.ts +4 -0
  56. package/lib/components/multi-value-connector-property/multi-value-connector-property.component.d.ts.map +1 -0
  57. package/lib/connector-management-routing.d.ts +7 -0
  58. package/lib/connector-management-routing.d.ts.map +1 -0
  59. package/lib/connector-management.module.d.ts +23 -0
  60. package/lib/connector-management.module.d.ts.map +1 -0
  61. package/lib/extension/connector-management.extension.init.d.ts +1 -0
  62. package/lib/extension/connector-management.extension.init.d.ts.map +1 -0
  63. package/lib/models/index.d.ts +1 -0
  64. package/lib/models/index.d.ts.map +1 -0
  65. package/lib/models/object-sync.d.ts +1 -0
  66. package/lib/models/object-sync.d.ts.map +1 -0
  67. package/lib/services/connector-management/connector-management.service.d.ts +4 -0
  68. package/lib/services/connector-management/connector-management.service.d.ts.map +1 -0
  69. package/lib/services/connector-management-state/connector-management-state.service.d.ts +32 -2
  70. package/lib/services/connector-management-state/connector-management-state.service.d.ts.map +1 -0
  71. package/lib/services/object-api-sync/object-api-sync.service.d.ts +4 -0
  72. package/lib/services/object-api-sync/object-api-sync.service.d.ts.map +1 -0
  73. package/package.json +23 -10
  74. package/public-api.d.ts +5 -1
  75. package/public-api.d.ts.map +1 -0
  76. package/valtimo-connector-management.d.ts +2 -4
  77. package/valtimo-connector-management.d.ts.map +1 -0
  78. package/bundles/valtimo-connector-management.umd.js +0 -2118
  79. package/bundles/valtimo-connector-management.umd.js.map +0 -1
  80. package/bundles/valtimo-connector-management.umd.min.js +0 -16
  81. package/bundles/valtimo-connector-management.umd.min.js.map +0 -1
  82. package/esm2015/lib/components/add-connector/add-connector.component.js +0 -83
  83. package/esm2015/lib/components/connector-link-extension/connector-link-extension.component.js +0 -104
  84. package/esm2015/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.js +0 -138
  85. package/esm2015/lib/components/connector-management/connector-management.component.js +0 -103
  86. package/esm2015/lib/components/connector-modal/connector-modal.component.js +0 -58
  87. package/esm2015/lib/components/edit-connector-form/edit-connector-form.component.js +0 -44
  88. package/esm2015/lib/components/edit-connector-properties/edit-connector-properties.component.js +0 -144
  89. package/esm2015/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.js +0 -160
  90. package/esm2015/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.js +0 -301
  91. package/esm2015/lib/components/edit-taak-connector/edit-taak-connector.component.js +0 -129
  92. package/esm2015/lib/components/edit-taak-connector/edit-taak-connector.form.js +0 -63
  93. package/esm2015/lib/components/modify-connector/modify-connector.component.js +0 -75
  94. package/esm2015/lib/components/multi-value-connector-property/multi-value-connector-property.component.js +0 -96
  95. package/esm2015/lib/connector-management-routing.js +0 -41
  96. package/esm2015/lib/connector-management.module.js +0 -77
  97. package/esm2015/lib/extension/connector-management.extension.init.js +0 -39
  98. package/esm2015/lib/models/index.js +0 -19
  99. package/esm2015/lib/models/object-sync.js +0 -1
  100. package/esm2015/lib/services/connector-management/connector-management.service.js +0 -60
  101. package/esm2015/lib/services/connector-management-state/connector-management-state.service.js +0 -83
  102. package/esm2015/lib/services/object-api-sync/object-api-sync.service.js +0 -51
  103. package/esm2015/public-api.js +0 -33
  104. package/esm2015/valtimo-connector-management.js +0 -9
  105. package/fesm2015/valtimo-connector-management.js +0 -1791
  106. package/fesm2015/valtimo-connector-management.js.map +0 -1
  107. package/valtimo-connector-management.metadata.json +0 -1
@@ -0,0 +1,185 @@
1
+ /*
2
+ * Copyright 2015-2020 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
17
+ import { BehaviorSubject, combineLatest } from 'rxjs';
18
+ import { map, take } from 'rxjs/operators';
19
+ import { set, get, cloneDeep } from 'lodash';
20
+ import * as i0 from "@angular/core";
21
+ import * as i1 from "../../services/connector-management-state/connector-management-state.service";
22
+ import * as i2 from "../multi-value-connector-property/multi-value-connector-property.component";
23
+ import * as i3 from "@valtimo/user-interface";
24
+ import * as i4 from "@angular/common";
25
+ import * as i5 from "@ngx-translate/core";
26
+ export class EditConnectorPropertiesComponent {
27
+ constructor(stateService) {
28
+ this.stateService = stateService;
29
+ this.withDefaults = false;
30
+ this.showDeleteButton = false;
31
+ this.showSaveButton = true;
32
+ this.propertiesSave = new EventEmitter();
33
+ this.connectorDelete = new EventEmitter();
34
+ this.modifiedProperties$ = new BehaviorSubject(undefined);
35
+ this.editFields$ = new BehaviorSubject([]);
36
+ this.connectorName$ = new BehaviorSubject('');
37
+ this.saveButtonDisabled$ = this.stateService.saveButtonDisabled$;
38
+ this.disabled$ = this.stateService.inputDisabled$;
39
+ }
40
+ ngOnInit() {
41
+ this.setEditFields();
42
+ this.setName();
43
+ this.openSaveButtonDisabledSubscription();
44
+ this.openSaveSubscription();
45
+ this.openDeleteSubscription();
46
+ this.stateService.showModalSaveButton();
47
+ }
48
+ ngOnChanges() {
49
+ this.setEditFields();
50
+ this.setName();
51
+ }
52
+ ngOnDestroy() {
53
+ this.saveButtonDisabledSubscription?.unsubscribe();
54
+ this.saveSubscription?.unsubscribe();
55
+ this.deleteSubscription?.unsubscribe();
56
+ }
57
+ multiFieldValuesSet(event) {
58
+ this.modifiedProperties$.pipe(take(1)).subscribe(properties => {
59
+ set(properties, event.editFieldKey, event.values);
60
+ this.modifiedProperties$.next(properties);
61
+ });
62
+ }
63
+ onSingleValueChange(value, editField) {
64
+ this.modifiedProperties$.pipe(take(1)).subscribe(properties => {
65
+ set(properties, editField.key, editField.editType === 'string' ? value.trim() : parseInt(value, 10));
66
+ this.modifiedProperties$.next(properties);
67
+ });
68
+ }
69
+ onNameValueChange(value) {
70
+ this.connectorName$.next(value.trim());
71
+ }
72
+ onSave() {
73
+ this.stateService.disableInput();
74
+ combineLatest([this.modifiedProperties$, this.connectorName$])
75
+ .pipe(take(1))
76
+ .subscribe(([properties, name]) => {
77
+ this.propertiesSave.emit({ properties, name });
78
+ });
79
+ }
80
+ onDelete() {
81
+ this.stateService.disableInput();
82
+ this.connectorDelete.emit();
83
+ }
84
+ setName() {
85
+ if (this.withDefaults && this.defaultName) {
86
+ this.connectorName$.next(this.defaultName);
87
+ }
88
+ else {
89
+ this.connectorName$.next('');
90
+ }
91
+ }
92
+ setModifiedProperties(editFields) {
93
+ const propertiesCopy = cloneDeep(this.properties);
94
+ if (!this.withDefaults) {
95
+ editFields.forEach(editField => {
96
+ set(propertiesCopy, editField.key, undefined);
97
+ });
98
+ }
99
+ this.modifiedProperties$.next(propertiesCopy);
100
+ }
101
+ setEditFields() {
102
+ const editFields = [];
103
+ const keysToFilter = ['className'];
104
+ const handlePropertyLevel = (propertyLevel, previousKeys) => {
105
+ const propertyLevelKeys = Object.keys(propertyLevel).filter(key => !keysToFilter.includes(key));
106
+ propertyLevelKeys.forEach(key => {
107
+ const propertyValue = propertyLevel[key];
108
+ const baseEditField = {
109
+ key: previousKeys + key,
110
+ ...(this.withDefaults && { defaultValue: propertyValue }),
111
+ };
112
+ if (typeof propertyValue === 'number') {
113
+ editFields.push({ ...baseEditField, editType: 'number' });
114
+ }
115
+ else if (Array.isArray(propertyValue)) {
116
+ if (propertyValue[0] && typeof propertyValue[0] === 'number') {
117
+ editFields.push({ ...baseEditField, editType: 'number[]' });
118
+ }
119
+ else {
120
+ editFields.push({ ...baseEditField, editType: 'string[]' });
121
+ }
122
+ }
123
+ else if (typeof propertyValue === 'string') {
124
+ editFields.push({ ...baseEditField, editType: 'string' });
125
+ }
126
+ else if (typeof propertyValue === 'object') {
127
+ handlePropertyLevel(propertyValue, `${previousKeys}${key}.`);
128
+ }
129
+ });
130
+ };
131
+ handlePropertyLevel(this.properties, '');
132
+ this.editFields$.next(editFields);
133
+ this.setModifiedProperties(editFields);
134
+ }
135
+ openSaveButtonDisabledSubscription() {
136
+ this.saveButtonDisabledSubscription = combineLatest([
137
+ this.editFields$,
138
+ this.modifiedProperties$,
139
+ this.connectorName$,
140
+ ])
141
+ .pipe(map(([editFields, modifiedProperties, connectorName]) => {
142
+ const values = editFields.map(field => get(modifiedProperties, field.key));
143
+ const validValues = values.filter(value => Array.isArray(value) ? value.length > 0 : value === 0 || value);
144
+ const invalidProperties = editFields.length !== validValues.length || !connectorName;
145
+ if (invalidProperties) {
146
+ this.stateService.disableSaveButton();
147
+ }
148
+ else {
149
+ this.stateService.enableSaveButton();
150
+ }
151
+ }))
152
+ .subscribe();
153
+ }
154
+ openSaveSubscription() {
155
+ this.saveSubscription = this.stateService.save$.subscribe(() => {
156
+ this.onSave();
157
+ });
158
+ }
159
+ openDeleteSubscription() {
160
+ this.deleteSubscription = this.stateService.delete$.subscribe(() => {
161
+ this.onDelete();
162
+ });
163
+ }
164
+ }
165
+ EditConnectorPropertiesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EditConnectorPropertiesComponent, deps: [{ token: i1.ConnectorManagementStateService }], target: i0.ɵɵFactoryTarget.Component });
166
+ EditConnectorPropertiesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: EditConnectorPropertiesComponent, selector: "valtimo-edit-connector-properties", inputs: { properties: "properties", withDefaults: "withDefaults", showDeleteButton: "showDeleteButton", showSaveButton: "showSaveButton", defaultName: "defaultName" }, outputs: { propertiesSave: "propertiesSave", connectorDelete: "connectorDelete" }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"edit-fields\"\n *ngIf=\"{editFields: editFields$ | async, disabled: disabled$ | async} as obs\"\n>\n <ng-container *ngTemplateOutlet=\"nameInput; context: {disabled: obs.disabled}\"></ng-container>\n <ng-container *ngFor=\"let editField of obs.editFields\">\n <ng-container *ngIf=\"editField.editType === 'string' || editField.editType === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"singleInput; context: {editField: editField, disabled: obs.disabled}\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"editField.editType === 'string[]' || editField.editType === 'number[]'\">\n <valtimo-multi-value-connector-property\n [editField]=\"editField\"\n (valuesSet)=\"multiFieldValuesSet($event)\"\n [disabled]=\"obs.disabled\"\n [defaultValue]=\"withDefaults && editField.defaultValue\"\n >\n </valtimo-multi-value-connector-property>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"buttons; context: {disabled: obs.disabled}\"></ng-container>\n</div>\n\n<ng-template #nameInput let-disabled=\"disabled\">\n <v-input\n titleTranslationKey=\"connectorManagement.inputLabels.connectorName\"\n [defaultValue]=\"withDefaults && defaultName ? defaultName : ''\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [disabled]=\"disabled\"\n (valueChange)=\"onNameValueChange($event)\"\n ></v-input>\n</ng-template>\n\n<ng-template #singleInput let-editField=\"editField\" let-disabled=\"disabled\">\n <v-input\n *ngIf=\"editField.editType === 'string'\"\n [titleTranslationKey]=\"'connectorManagement.inputLabels.' + editField.key\"\n [defaultValue]=\"withDefaults ? editField.defaultValue : ''\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [disabled]=\"disabled\"\n (valueChange)=\"onSingleValueChange($event, editField)\"\n ></v-input>\n <v-input\n *ngIf=\"editField.editType === 'number'\"\n [titleTranslationKey]=\"'connectorManagement.inputLabels.' + editField.key\"\n [defaultValue]=\"withDefaults ? editField.defaultValue : ''\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [disabled]=\"disabled\"\n (valueChange)=\"onSingleValueChange($event, editField)\"\n [step]=\"1\"\n [min]=\"0\"\n ></v-input>\n</ng-template>\n\n<ng-template #buttons let-disabled=\"disabled\">\n <div class=\"border-top mt-3 pt-6\" *ngIf=\"showDeleteButton || showSaveButton\">\n <div class=\"button-container\">\n <button\n *ngIf=\"showSaveButton\"\n class=\"btn btn-primary\"\n [disabled]=\"disabled || (saveButtonDisabled$ | async)\"\n (click)=\"onSave()\"\n >\n <i class=\"icon mdi mdi-save mr-1\"></i>\n {{ 'connectorManagement.save' | translate }}\n </button>\n <button\n *ngIf=\"showDeleteButton\"\n class=\"btn btn-danger btn-space\"\n (click)=\"onDelete()\"\n [disabled]=\"disabled\"\n >\n <i class=\"icon mdi mdi-delete mr-1\"></i>\n {{ 'connectorManagement.remove' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.button-container{flex-flow:row-reverse;width:100%;display:flex;justify-content:space-between}\n"], components: [{ type: i2.MultiValueConnectorPropertyComponent, selector: "valtimo-multi-value-connector-property", inputs: ["editField", "disabled", "defaultValue"], outputs: ["valuesSet"] }, { type: i3.InputComponent, selector: "v-input", inputs: ["type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "disabled", "step", "min"], outputs: ["valueChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i4.AsyncPipe, "translate": i5.TranslatePipe } });
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EditConnectorPropertiesComponent, decorators: [{
168
+ type: Component,
169
+ args: [{ selector: 'valtimo-edit-connector-properties', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"edit-fields\"\n *ngIf=\"{editFields: editFields$ | async, disabled: disabled$ | async} as obs\"\n>\n <ng-container *ngTemplateOutlet=\"nameInput; context: {disabled: obs.disabled}\"></ng-container>\n <ng-container *ngFor=\"let editField of obs.editFields\">\n <ng-container *ngIf=\"editField.editType === 'string' || editField.editType === 'number'\">\n <ng-container\n *ngTemplateOutlet=\"singleInput; context: {editField: editField, disabled: obs.disabled}\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"editField.editType === 'string[]' || editField.editType === 'number[]'\">\n <valtimo-multi-value-connector-property\n [editField]=\"editField\"\n (valuesSet)=\"multiFieldValuesSet($event)\"\n [disabled]=\"obs.disabled\"\n [defaultValue]=\"withDefaults && editField.defaultValue\"\n >\n </valtimo-multi-value-connector-property>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"buttons; context: {disabled: obs.disabled}\"></ng-container>\n</div>\n\n<ng-template #nameInput let-disabled=\"disabled\">\n <v-input\n titleTranslationKey=\"connectorManagement.inputLabels.connectorName\"\n [defaultValue]=\"withDefaults && defaultName ? defaultName : ''\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [disabled]=\"disabled\"\n (valueChange)=\"onNameValueChange($event)\"\n ></v-input>\n</ng-template>\n\n<ng-template #singleInput let-editField=\"editField\" let-disabled=\"disabled\">\n <v-input\n *ngIf=\"editField.editType === 'string'\"\n [titleTranslationKey]=\"'connectorManagement.inputLabels.' + editField.key\"\n [defaultValue]=\"withDefaults ? editField.defaultValue : ''\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [disabled]=\"disabled\"\n (valueChange)=\"onSingleValueChange($event, editField)\"\n ></v-input>\n <v-input\n *ngIf=\"editField.editType === 'number'\"\n [titleTranslationKey]=\"'connectorManagement.inputLabels.' + editField.key\"\n [defaultValue]=\"withDefaults ? editField.defaultValue : ''\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [disabled]=\"disabled\"\n (valueChange)=\"onSingleValueChange($event, editField)\"\n [step]=\"1\"\n [min]=\"0\"\n ></v-input>\n</ng-template>\n\n<ng-template #buttons let-disabled=\"disabled\">\n <div class=\"border-top mt-3 pt-6\" *ngIf=\"showDeleteButton || showSaveButton\">\n <div class=\"button-container\">\n <button\n *ngIf=\"showSaveButton\"\n class=\"btn btn-primary\"\n [disabled]=\"disabled || (saveButtonDisabled$ | async)\"\n (click)=\"onSave()\"\n >\n <i class=\"icon mdi mdi-save mr-1\"></i>\n {{ 'connectorManagement.save' | translate }}\n </button>\n <button\n *ngIf=\"showDeleteButton\"\n class=\"btn btn-danger btn-space\"\n (click)=\"onDelete()\"\n [disabled]=\"disabled\"\n >\n <i class=\"icon mdi mdi-delete mr-1\"></i>\n {{ 'connectorManagement.remove' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.button-container{flex-flow:row-reverse;width:100%;display:flex;justify-content:space-between}\n"] }]
170
+ }], ctorParameters: function () { return [{ type: i1.ConnectorManagementStateService }]; }, propDecorators: { properties: [{
171
+ type: Input
172
+ }], withDefaults: [{
173
+ type: Input
174
+ }], showDeleteButton: [{
175
+ type: Input
176
+ }], showSaveButton: [{
177
+ type: Input
178
+ }], defaultName: [{
179
+ type: Input
180
+ }], propertiesSave: [{
181
+ type: Output
182
+ }], connectorDelete: [{
183
+ type: Output
184
+ }] } });
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jb25uZWN0b3ItcHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Nvbm5lY3Rvci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNvbm5lY3Rvci1wcm9wZXJ0aWVzL2VkaXQtY29ubmVjdG9yLXByb3BlcnRpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb25uZWN0b3ItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1jb25uZWN0b3ItcHJvcGVydGllcy9lZGl0LWNvbm5lY3Rvci1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNbkcsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQTJCLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sUUFBUSxDQUFDOzs7Ozs7O0FBUTNDLE1BQU0sT0FBTyxnQ0FBZ0M7SUF3QjNDLFlBQTZCLFlBQTZDO1FBQTdDLGlCQUFZLEdBQVosWUFBWSxDQUFpQztRQXRCakUsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBR3JCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFDckYsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FB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QWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzZIQWpMVSxnQ0FBZ0M7aUhBQWhDLGdDQUFnQyx5VkNoQzdDLCtzSEFrR0E7MkZEbEVhLGdDQUFnQztrQkFMNUMsU0FBUzsrQkFDRSxtQ0FBbUM7c0hBS3BDLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdG9yUHJvcGVydGllcyxcbiAgQ29ubmVjdG9yUHJvcGVydHlFZGl0RmllbGQsXG4gIENvbm5lY3RvclByb3BlcnR5VmFsdWVUeXBlLFxufSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtzZXQsIGdldCwgY2xvbmVEZWVwfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtDb25uZWN0b3JNYW5hZ2VtZW50U3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25uZWN0b3ItbWFuYWdlbWVudC1zdGF0ZS9jb25uZWN0b3ItbWFuYWdlbWVudC1zdGF0ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1lZGl0LWNvbm5lY3Rvci1wcm9wZXJ0aWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtY29ubmVjdG9yLXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0LWNvbm5lY3Rvci1wcm9wZXJ0aWVzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRDb25uZWN0b3JQcm9wZXJ0aWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHByb3BlcnRpZXM6IENvbm5lY3RvclByb3BlcnRpZXM7XG4gIEBJbnB1dCgpIHdpdGhEZWZhdWx0cyA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RGVsZXRlQnV0dG9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dTYXZlQnV0dG9uID0gdHJ1ZTtcbiAgQElucHV0KCkgZGVmYXVsdE5hbWUhOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIHByb3BlcnRpZXNTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx7cHJvcGVydGllczogQ29ubmVjdG9yUHJvcGVydGllczsgbmFtZTogc3RyaW5nfT4oKTtcbiAgQE91dHB1dCgpIGNvbm5lY3RvckRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHJlYWRvbmx5IGRpc2FibGVkJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgcmVhZG9ubHkgbW9kaWZpZWRQcm9wZXJ0aWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdG9yUHJvcGVydGllcz4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBlZGl0RmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q29ubmVjdG9yUHJvcGVydHlFZGl0RmllbGQ+PihbXSk7XG5cbiAgcmVhZG9ubHkgY29ubmVjdG9yTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IHNhdmVCdXR0b25EaXNhYmxlZCQgPSB0aGlzLnN0YXRlU2VydmljZS5zYXZlQnV0dG9uRGlzYWJsZWQkO1xuXG4gIHByaXZhdGUgc2F2ZUJ1dHRvbkRpc2FibGVkU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHNhdmVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZGVsZXRlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBDb25uZWN0b3JNYW5hZ2VtZW50U3RhdGVTZXJ2aWNlKSB7XG4gICAgdGhpcy5kaXNhYmxlZCQgPSB0aGlzLnN0YXRlU2VydmljZS5pbnB1dERpc2FibGVkJDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RWRpdEZpZWxkcygpO1xuICAgIHRoaXMuc2V0TmFtZSgpO1xuICAgIHRoaXMub3BlblNhdmVCdXR0b25EaXNhYmxlZFN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlblNhdmVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5EZWxldGVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zaG93TW9kYWxTYXZlQnV0dG9uKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNldEVkaXRGaWVsZHMoKTtcbiAgICB0aGlzLnNldE5hbWUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZUJ1dHRvbkRpc2FibGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc2F2ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRlbGV0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG11bHRpRmllbGRWYWx1ZXNTZXQoZXZlbnQ6IHtlZGl0RmllbGRLZXk6IHN0cmluZzsgdmFsdWVzOiBBcnJheTxzdHJpbmc+IHwgQXJyYXk8bnVtYmVyPn0pOiB2b2lkIHtcbiAgICB0aGlzLm1vZGlmaWVkUHJvcGVydGllcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocHJvcGVydGllcyA9PiB7XG4gICAgICBzZXQocHJvcGVydGllcywgZXZlbnQuZWRpdEZpZWxkS2V5LCBldmVudC52YWx1ZXMpO1xuICAgICAgdGhpcy5tb2RpZmllZFByb3BlcnRpZXMkLm5leHQocHJvcGVydGllcyk7XG4gICAgfSk7XG4gIH1cblxuICBvblNpbmdsZVZhbHVlQ2hhbmdlKHZhbHVlOiBhbnksIGVkaXRGaWVsZDogQ29ubmVjdG9yUHJvcGVydHlFZGl0RmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGlmaWVkUHJvcGVydGllcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocHJvcGVydGllcyA9PiB7XG4gICAgICBzZXQoXG4gICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgIGVkaXRGaWVsZC5rZXksXG4gICAgICAgIGVkaXRGaWVsZC5lZGl0VHlwZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS50cmltKCkgOiBwYXJzZUludCh2YWx1ZSwgMTApXG4gICAgICApO1xuICAgICAgdGhpcy5tb2RpZmllZFByb3BlcnRpZXMkLm5leHQocHJvcGVydGllcyk7XG4gICAgfSk7XG4gIH1cblxuICBvbk5hbWVWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0b3JOYW1lJC5uZXh0KHZhbHVlLnRyaW0oKSk7XG4gIH1cblxuICBvblNhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZGlzYWJsZUlucHV0KCk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLm1vZGlmaWVkUHJvcGVydGllcyQsIHRoaXMuY29ubmVjdG9yTmFtZSRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtwcm9wZXJ0aWVzLCBuYW1lXSkgPT4ge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXNTYXZlLmVtaXQoe3Byb3BlcnRpZXMsIG5hbWV9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb25EZWxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZGlzYWJsZUlucHV0KCk7XG4gICAgdGhpcy5jb25uZWN0b3JEZWxldGUuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXROYW1lKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndpdGhEZWZhdWx0cyAmJiB0aGlzLmRlZmF1bHROYW1lKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rvck5hbWUkLm5leHQodGhpcy5kZWZhdWx0TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29ubmVjdG9yTmFtZSQubmV4dCgnJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRNb2RpZmllZFByb3BlcnRpZXMoZWRpdEZpZWxkczogQXJyYXk8Q29ubmVjdG9yUHJvcGVydHlFZGl0RmllbGQ+KTogdm9pZCB7XG4gICAgY29uc3QgcHJvcGVydGllc0NvcHkgPSBjbG9uZURlZXAodGhpcy5wcm9wZXJ0aWVzKTtcblxuICAgIGlmICghdGhpcy53aXRoRGVmYXVsdHMpIHtcbiAgICAgIGVkaXRGaWVsZHMuZm9yRWFjaChlZGl0RmllbGQgPT4ge1xuICAgICAgICBzZXQocHJvcGVydGllc0NvcHksIGVkaXRGaWVsZC5rZXksIHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLm1vZGlmaWVkUHJvcGVydGllcyQubmV4dChwcm9wZXJ0aWVzQ29weSk7XG4gIH1cblxuICBwcml2YXRlIHNldEVkaXRGaWVsZHMoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdEZpZWxkczogQXJyYXk8Q29ubmVjdG9yUHJvcGVydHlFZGl0RmllbGQ+ID0gW107XG4gICAgY29uc3Qga2V5c1RvRmlsdGVyID0gWydjbGFzc05hbWUnXTtcblxuICAgIGNvbnN0IGhhbmRsZVByb3BlcnR5TGV2ZWwgPSAocHJvcGVydHlMZXZlbDogQ29ubmVjdG9yUHJvcGVydGllcywgcHJldmlvdXNLZXlzOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5TGV2ZWxLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydHlMZXZlbCkuZmlsdGVyKFxuICAgICAgICBrZXkgPT4gIWtleXNUb0ZpbHRlci5pbmNsdWRlcyhrZXkpXG4gICAgICApO1xuXG4gICAgICBwcm9wZXJ0eUxldmVsS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eUxldmVsW2tleV07XG4gICAgICAgIGNvbnN0IGJhc2VFZGl0RmllbGQgPSB7XG4gICAgICAgICAga2V5OiBwcmV2aW91c0tleXMgKyBrZXksXG4gICAgICAgICAgLi4uKHRoaXMud2l0aERlZmF1bHRzICYmIHtkZWZhdWx0VmFsdWU6IHByb3BlcnR5VmFsdWUgYXMgQ29ubmVjdG9yUHJvcGVydHlWYWx1ZVR5cGV9KSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgZWRpdEZpZWxkcy5wdXNoKHsuLi5iYXNlRWRpdEZpZWxkLCBlZGl0VHlwZTogJ251bWJlcid9KTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5VmFsdWUpKSB7XG4gICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWVbMF0gJiYgdHlwZW9mIHByb3BlcnR5VmFsdWVbMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBlZGl0RmllbGRzLnB1c2goey4uLmJhc2VFZGl0RmllbGQsIGVkaXRUeXBlOiAnbnVtYmVyW10nfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVkaXRGaWVsZHMucHVzaCh7Li4uYmFzZUVkaXRGaWVsZCwgZWRpdFR5cGU6ICdzdHJpbmdbXSd9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgZWRpdEZpZWxkcy5wdXNoKHsuLi5iYXNlRWRpdEZpZWxkLCBlZGl0VHlwZTogJ3N0cmluZyd9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBoYW5kbGVQcm9wZXJ0eUxldmVsKHByb3BlcnR5VmFsdWUsIGAke3ByZXZpb3VzS2V5c30ke2tleX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBoYW5kbGVQcm9wZXJ0eUxldmVsKHRoaXMucHJvcGVydGllcywgJycpO1xuXG4gICAgdGhpcy5lZGl0RmllbGRzJC5uZXh0KGVkaXRGaWVsZHMpO1xuICAgIHRoaXMuc2V0TW9kaWZpZWRQcm9wZXJ0aWVzKGVkaXRGaWVsZHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuU2F2ZUJ1dHRvbkRpc2FibGVkU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZUJ1dHRvbkRpc2FibGVkU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmVkaXRGaWVsZHMkLFxuICAgICAgdGhpcy5tb2RpZmllZFByb3BlcnRpZXMkLFxuICAgICAgdGhpcy5jb25uZWN0b3JOYW1lJCxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoW2VkaXRGaWVsZHMsIG1vZGlmaWVkUHJvcGVydGllcywgY29ubmVjdG9yTmFtZV0pID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBlZGl0RmllbGRzLm1hcChmaWVsZCA9PiBnZXQobW9kaWZpZWRQcm9wZXJ0aWVzLCBmaWVsZC5rZXkpKTtcbiAgICAgICAgICBjb25zdCB2YWxpZFZhbHVlcyA9IHZhbHVlcy5maWx0ZXIodmFsdWUgPT5cbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubGVuZ3RoID4gMCA6IHZhbHVlID09PSAwIHx8IHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBpbnZhbGlkUHJvcGVydGllcyA9IGVkaXRGaWVsZHMubGVuZ3RoICE9PSB2YWxpZFZhbHVlcy5sZW5ndGggfHwgIWNvbm5lY3Rvck5hbWU7XG5cbiAgICAgICAgICBpZiAoaW52YWxpZFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmRpc2FibGVTYXZlQnV0dG9uKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmVuYWJsZVNhdmVCdXR0b24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5TYXZlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZVN1YnNjcmlwdGlvbiA9IHRoaXMuc3RhdGVTZXJ2aWNlLnNhdmUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLm9uU2F2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRGVsZXRlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlU3Vic2NyaXB0aW9uID0gdGhpcy5zdGF0ZVNlcnZpY2UuZGVsZXRlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5vbkRlbGV0ZSgpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgY2xhc3M9XCJlZGl0LWZpZWxkc1wiXG4gICpuZ0lmPVwie2VkaXRGaWVsZHM6IGVkaXRGaWVsZHMkIHwgYXN5bmMsIGRpc2FibGVkOiBkaXNhYmxlZCQgfCBhc3luY30gYXMgb2JzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5hbWVJbnB1dDsgY29udGV4dDoge2Rpc2FibGVkOiBvYnMuZGlzYWJsZWR9XCI+PC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVkaXRGaWVsZCBvZiBvYnMuZWRpdEZpZWxkc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0RmllbGQuZWRpdFR5cGUgPT09ICdzdHJpbmcnIHx8IGVkaXRGaWVsZC5lZGl0VHlwZSA9PT0gJ251bWJlcidcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaW5nbGVJbnB1dDsgY29udGV4dDoge2VkaXRGaWVsZDogZWRpdEZpZWxkLCBkaXNhYmxlZDogb2JzLmRpc2FibGVkfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaWVsZC5lZGl0VHlwZSA9PT0gJ3N0cmluZ1tdJyB8fCBlZGl0RmllbGQuZWRpdFR5cGUgPT09ICdudW1iZXJbXSdcIj5cbiAgICAgIDx2YWx0aW1vLW11bHRpLXZhbHVlLWNvbm5lY3Rvci1wcm9wZXJ0eVxuICAgICAgICBbZWRpdEZpZWxkXT1cImVkaXRGaWVsZFwiXG4gICAgICAgICh2YWx1ZXNTZXQpPVwibXVsdGlGaWVsZFZhbHVlc1NldCgkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwid2l0aERlZmF1bHRzICYmIGVkaXRGaWVsZC5kZWZhdWx0VmFsdWVcIlxuICAgICAgPlxuICAgICAgPC92YWx0aW1vLW11bHRpLXZhbHVlLWNvbm5lY3Rvci1wcm9wZXJ0eT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zOyBjb250ZXh0OiB7ZGlzYWJsZWQ6IG9icy5kaXNhYmxlZH1cIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI25hbWVJbnB1dCBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICA8di1pbnB1dFxuICAgIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJjb25uZWN0b3JNYW5hZ2VtZW50LmlucHV0TGFiZWxzLmNvbm5lY3Rvck5hbWVcIlxuICAgIFtkZWZhdWx0VmFsdWVdPVwid2l0aERlZmF1bHRzICYmIGRlZmF1bHROYW1lID8gZGVmYXVsdE5hbWUgOiAnJ1wiXG4gICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cIm9uTmFtZVZhbHVlQ2hhbmdlKCRldmVudClcIlxuICA+PC92LWlucHV0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVJbnB1dCBsZXQtZWRpdEZpZWxkPVwiZWRpdEZpZWxkXCIgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgPHYtaW5wdXRcbiAgICAqbmdJZj1cImVkaXRGaWVsZC5lZGl0VHlwZSA9PT0gJ3N0cmluZydcIlxuICAgIFt0aXRsZVRyYW5zbGF0aW9uS2V5XT1cIidjb25uZWN0b3JNYW5hZ2VtZW50LmlucHV0TGFiZWxzLicgKyBlZGl0RmllbGQua2V5XCJcbiAgICBbZGVmYXVsdFZhbHVlXT1cIndpdGhEZWZhdWx0cyA/IGVkaXRGaWVsZC5kZWZhdWx0VmFsdWUgOiAnJ1wiXG4gICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cIm9uU2luZ2xlVmFsdWVDaGFuZ2UoJGV2ZW50LCBlZGl0RmllbGQpXCJcbiAgPjwvdi1pbnB1dD5cbiAgPHYtaW5wdXRcbiAgICAqbmdJZj1cImVkaXRGaWVsZC5lZGl0VHlwZSA9PT0gJ251bWJlcidcIlxuICAgIFt0aXRsZVRyYW5zbGF0aW9uS2V5XT1cIidjb25uZWN0b3JNYW5hZ2VtZW50LmlucHV0TGFiZWxzLicgKyBlZGl0RmllbGQua2V5XCJcbiAgICBbZGVmYXVsdFZhbHVlXT1cIndpdGhEZWZhdWx0cyA/IGVkaXRGaWVsZC5kZWZhdWx0VmFsdWUgOiAnJ1wiXG4gICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cIm9uU2luZ2xlVmFsdWVDaGFuZ2UoJGV2ZW50LCBlZGl0RmllbGQpXCJcbiAgICBbc3RlcF09XCIxXCJcbiAgICBbbWluXT1cIjBcIlxuICA+PC92LWlucHV0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gIDxkaXYgY2xhc3M9XCJib3JkZXItdG9wIG10LTMgcHQtNlwiICpuZ0lmPVwic2hvd0RlbGV0ZUJ1dHRvbiB8fCBzaG93U2F2ZUJ1dHRvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJidXR0b24tY29udGFpbmVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd1NhdmVCdXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCAoc2F2ZUJ1dHRvbkRpc2FibGVkJCB8IGFzeW5jKVwiXG4gICAgICAgIChjbGljayk9XCJvblNhdmUoKVwiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLXNhdmUgbXItMVwiPjwvaT5cbiAgICAgICAge3sgJ2Nvbm5lY3Rvck1hbmFnZW1lbnQuc2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dEZWxldGVCdXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi1zcGFjZVwiXG4gICAgICAgIChjbGljayk9XCJvbkRlbGV0ZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktZGVsZXRlIG1yLTFcIj48L2k+XG4gICAgICAgIHt7ICdjb25uZWN0b3JNYW5hZ2VtZW50LnJlbW92ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,169 @@
1
+ /*
2
+ * Copyright 2015-2021 Ritense BV, the Netherlands.
3
+ *
4
+ * Licensed under EUPL, Version 1.2 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" basis,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
17
+ import { editProductAanvragenConnectorForm } from './edit-product-aanvragen-connector.form';
18
+ import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
19
+ import { cloneDeep } from 'lodash';
20
+ import { map, switchMap, tap } from 'rxjs/operators';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "@valtimo/form";
23
+ import * as i2 from "@valtimo/document";
24
+ import * as i3 from "@ngx-translate/core";
25
+ import * as i4 from "../../services/connector-management/connector-management.service";
26
+ import * as i5 from "../../services/connector-management-state/connector-management-state.service";
27
+ import * as i6 from "@valtimo/components";
28
+ import * as i7 from "@angular/common";
29
+ import * as i8 from "@angular/flex-layout/extended";
30
+ export class EditProductAanvragenConnectorComponent {
31
+ constructor(formTranslationService, formMappingService, documentService, translateService, connectorManagementService, stateService) {
32
+ this.formTranslationService = formTranslationService;
33
+ this.formMappingService = formMappingService;
34
+ this.documentService = documentService;
35
+ this.translateService = translateService;
36
+ this.connectorManagementService = connectorManagementService;
37
+ this.stateService = stateService;
38
+ this.showDeleteButton = false;
39
+ this.propertiesSave = new EventEmitter();
40
+ this.connectorDelete = new EventEmitter();
41
+ this.formRefresh$ = new Subject();
42
+ this.formDefinition$ = new BehaviorSubject(undefined);
43
+ this.translatedFormDefinition$ = this.formDefinition$.pipe(map(definition => this.formTranslationService.translateForm(definition)));
44
+ this.caseDefinitionOptions = [];
45
+ this.processDocumentDefinitionOptions = {};
46
+ this.options = {
47
+ disableAlerts: true,
48
+ };
49
+ this.mapCaseDefinitionKeyComponent = (component) => {
50
+ if (component.key === 'caseDefinitionKey') {
51
+ return { ...component, disabled: false, data: { values: this.caseDefinitionOptions } };
52
+ }
53
+ return component;
54
+ };
55
+ }
56
+ ngOnInit() {
57
+ window['productRequestDefinitions'] = {};
58
+ this.openFormDefinitionSubscription();
59
+ this.openDeleteSubscription();
60
+ this.formDefinition$.next(editProductAanvragenConnectorForm);
61
+ this.loadConnectorNames();
62
+ this.loadDefinitions();
63
+ this.stateService.hideModalSaveButton();
64
+ }
65
+ ngOnDestroy() {
66
+ this.formDefinitionSubscription?.unsubscribe();
67
+ this.translateSubscription?.unsubscribe();
68
+ this.deleteSubscription?.unsubscribe();
69
+ }
70
+ onSubmit(event) {
71
+ const submission = event.data;
72
+ const properties = cloneDeep(this.properties);
73
+ properties.objectsApiConnectionName = submission.objectsApiConnectionName;
74
+ properties.openNotificatieConnectionName = submission.openNotificatieConnectionName;
75
+ properties.aanvragerRolTypeUrl = submission.applicantRoleTypeUrl;
76
+ properties.typeMapping = submission.productAanvraagTypes;
77
+ this.propertiesSave.emit({ properties, name: submission.connectorName });
78
+ }
79
+ onDelete() {
80
+ this.stateService.disableInput();
81
+ this.connectorDelete.emit();
82
+ }
83
+ openFormDefinitionSubscription() {
84
+ this.formDefinitionSubscription = combineLatest([
85
+ this.formDefinition$,
86
+ this.translateService.stream('key'),
87
+ ]).subscribe(([form]) => {
88
+ const translatedForm = this.formTranslationService.translateForm(form);
89
+ this.refreshForm({ form: translatedForm });
90
+ });
91
+ }
92
+ prefillForm() {
93
+ const properties = cloneDeep(this.properties);
94
+ const submission = {};
95
+ submission.objectsApiConnectionName = properties.objectsApiConnectionName;
96
+ submission.openNotificatieConnectionName = properties.openNotificatieConnectionName;
97
+ submission.applicantRoleTypeUrl = properties.aanvragerRolTypeUrl;
98
+ submission.productAanvraagTypes = properties.typeMapping;
99
+ submission.connectorName = this.defaultName;
100
+ this.refreshForm({ submission: { data: submission } });
101
+ }
102
+ refreshForm(refreshValue) {
103
+ this.formRefresh$.next(refreshValue);
104
+ }
105
+ loadDefinitions() {
106
+ let documentDefinitions;
107
+ this.documentService
108
+ .getAllDefinitions()
109
+ .pipe(tap(resDocumentDefinitions => (documentDefinitions = resDocumentDefinitions.content)), switchMap(resDocumentDefinitions => combineLatest(resDocumentDefinitions.content.map(definition => this.documentService.findProcessDocumentDefinitions(definition.id.name)))), tap(res => {
110
+ this.caseDefinitionOptions = documentDefinitions.map(documentDefinition => ({
111
+ label: documentDefinition.id.name,
112
+ value: documentDefinition.id.name,
113
+ }));
114
+ documentDefinitions.forEach((documentDefinition, index) => {
115
+ this.processDocumentDefinitionOptions[documentDefinition.id.name] = res[index].map(processDocumentDefinition => processDocumentDefinition.id.processDefinitionKey);
116
+ });
117
+ window['productRequestDefinitions'] = this.processDocumentDefinitionOptions;
118
+ const definitionWithCaseDefinitionOptions = this.formMappingService.mapComponents(this.formDefinition$.getValue(), this.mapCaseDefinitionKeyComponent);
119
+ this.formDefinition$.next(definitionWithCaseDefinitionOptions);
120
+ if (this.properties?.aanvragerRolTypeUrl) {
121
+ this.prefillForm();
122
+ }
123
+ }))
124
+ .subscribe();
125
+ }
126
+ loadConnectorNames() {
127
+ this.connectorManagementService
128
+ .getConnectorTypes()
129
+ .pipe(tap(res => {
130
+ res.forEach(connectorType => {
131
+ if (connectorType.name === 'ObjectsApi') {
132
+ this.loadConnectorNamesByType('objectApiConnectorNames', connectorType.id);
133
+ }
134
+ else if (connectorType.name === 'OpenNotificatie') {
135
+ this.loadConnectorNamesByType('openNotificatieConnectorNames', connectorType.id);
136
+ }
137
+ });
138
+ }))
139
+ .subscribe();
140
+ }
141
+ loadConnectorNamesByType(windowKey, connectorTypeId) {
142
+ this.connectorManagementService
143
+ .getConnectorInstancesByType(connectorTypeId)
144
+ .pipe(map(res => (window[windowKey] = res.content.map(connector => connector.name))))
145
+ .subscribe();
146
+ }
147
+ openDeleteSubscription() {
148
+ this.deleteSubscription = this.stateService.delete$.subscribe(() => {
149
+ this.onDelete();
150
+ });
151
+ }
152
+ }
153
+ EditProductAanvragenConnectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EditProductAanvragenConnectorComponent, deps: [{ token: i1.FormTranslationService }, { token: i1.FormMappingService }, { token: i2.DocumentService }, { token: i3.TranslateService }, { token: i4.ConnectorManagementService }, { token: i5.ConnectorManagementStateService }], target: i0.ɵɵFactoryTarget.Component });
154
+ EditProductAanvragenConnectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: EditProductAanvragenConnectorComponent, selector: "valtimo-edit-product-aanvragen-connector", inputs: { properties: "properties", defaultName: "defaultName", showDeleteButton: "showDeleteButton" }, outputs: { propertiesSave: "propertiesSave", connectorDelete: "connectorDelete" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2021 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"translatedFormDefinition$ | async as definition\"\n class=\"edit-product-request\"\n [ngClass]=\"{'has-delete': showDeleteButton}\"\n>\n <valtimo-form-io\n [form]=\"definition\"\n [formRefresh$]=\"formRefresh$\"\n [options]=\"options\"\n (submit)=\"onSubmit($event)\"\n >\n </valtimo-form-io>\n\n <button *ngIf=\"showDeleteButton\" class=\"btn btn-danger btn-space\" (click)=\"onDelete()\">\n <i class=\"icon mdi mdi-delete mr-1\"></i>\n {{ 'connectorManagement.remove' | translate }}\n </button>\n</div>\n", styles: ["/*!\n * Copyright 2015-2021 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.edit-product-request ::ng-deep .btn-wizard-nav-cancel{display:none}.edit-product-request ::ng-deep .list-inline{display:flex;flex-direction:row;justify-content:flex-end}.edit-product-request ::ng-deep .col-sm-2{flex:0 0 25%;max-width:25%}.edit-product-request ::ng-deep .edit-grid-component>label{display:none}.edit-product-request.has-delete ::ng-deep .list-inline{margin-bottom:-30px}.edit-product-request .btn-danger{position:relative}\n"], components: [{ type: i6.FormioComponent, selector: "valtimo-form-io", inputs: ["form", "options", "submission", "formRefresh$"], outputs: ["submit", "change"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }], pipes: { "async": i7.AsyncPipe, "translate": i3.TranslatePipe } });
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: EditProductAanvragenConnectorComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'valtimo-edit-product-aanvragen-connector', template: "<!--\n ~ Copyright 2015-2021 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"translatedFormDefinition$ | async as definition\"\n class=\"edit-product-request\"\n [ngClass]=\"{'has-delete': showDeleteButton}\"\n>\n <valtimo-form-io\n [form]=\"definition\"\n [formRefresh$]=\"formRefresh$\"\n [options]=\"options\"\n (submit)=\"onSubmit($event)\"\n >\n </valtimo-form-io>\n\n <button *ngIf=\"showDeleteButton\" class=\"btn btn-danger btn-space\" (click)=\"onDelete()\">\n <i class=\"icon mdi mdi-delete mr-1\"></i>\n {{ 'connectorManagement.remove' | translate }}\n </button>\n</div>\n", styles: ["/*!\n * Copyright 2015-2021 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.edit-product-request ::ng-deep .btn-wizard-nav-cancel{display:none}.edit-product-request ::ng-deep .list-inline{display:flex;flex-direction:row;justify-content:flex-end}.edit-product-request ::ng-deep .col-sm-2{flex:0 0 25%;max-width:25%}.edit-product-request ::ng-deep .edit-grid-component>label{display:none}.edit-product-request.has-delete ::ng-deep .list-inline{margin-bottom:-30px}.edit-product-request .btn-danger{position:relative}\n"] }]
158
+ }], ctorParameters: function () { return [{ type: i1.FormTranslationService }, { type: i1.FormMappingService }, { type: i2.DocumentService }, { type: i3.TranslateService }, { type: i4.ConnectorManagementService }, { type: i5.ConnectorManagementStateService }]; }, propDecorators: { properties: [{
159
+ type: Input
160
+ }], defaultName: [{
161
+ type: Input
162
+ }], showDeleteButton: [{
163
+ type: Input
164
+ }], propertiesSave: [{
165
+ type: Output
166
+ }], connectorDelete: [{
167
+ type: Output
168
+ }] } });
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb25uZWN0b3ItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb25uZWN0b3ItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUkxRixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFJM0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQVNuRCxNQUFNLE9BQU8sc0NBQXNDO0lBd0JqRCxZQUNtQixzQkFBOEMsRUFDOUMsa0JBQXNDLEVBQ3RDLGVBQWdDLEVBQ2hDLGdCQUFrQyxFQUNsQywwQkFBc0QsRUFDdEQsWUFBNkM7UUFMN0MsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5Qyx1QkFB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QztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSUE5S1Usc0NBQXNDO3VIQUF0QyxzQ0FBc0MsMlFDcENuRCxxckNBa0NBOzJGREVhLHNDQUFzQztrQkFMbEQsU0FBUzsrQkFDRSwwQ0FBMEM7a1NBSzNDLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjEgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtlZGl0UHJvZHVjdEFhbnZyYWdlbkNvbm5lY3RvckZvcm19IGZyb20gJy4vZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuZm9ybSc7XG5pbXBvcnQge0Zvcm1NYXBwaW5nU2VydmljZSwgRm9ybVRyYW5zbGF0aW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZm9ybSc7XG5pbXBvcnQge0RvY3VtZW50RGVmaW5pdGlvbiwgRG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0V4dGVuZGVkQ29tcG9uZW50U2NoZW1hfSBmcm9tICdmb3JtaW9qcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29ubmVjdG9yUHJvcGVydGllc30gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7Rm9ybWlvRm9ybSwgRm9ybWlvUmVmcmVzaFZhbHVlfSBmcm9tICdhbmd1bGFyLWZvcm1pbyc7XG5pbXBvcnQge0Zvcm1pb09wdGlvbnN9IGZyb20gJ2FuZ3VsYXItZm9ybWlvL2Zvcm1pby5jb21tb24nO1xuaW1wb3J0IHtjbG9uZURlZXB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Nvbm5lY3Rvck1hbmFnZW1lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25uZWN0b3ItbWFuYWdlbWVudC9jb25uZWN0b3ItbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7Q29ubmVjdG9yTWFuYWdlbWVudFN0YXRlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29ubmVjdG9yLW1hbmFnZW1lbnQtc3RhdGUvY29ubmVjdG9yLW1hbmFnZW1lbnQtc3RhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0LXByb2R1Y3QtYWFudnJhZ2VuLWNvbm5lY3Rvci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0UHJvZHVjdEFhbnZyYWdlbkNvbm5lY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcHJvcGVydGllczogQ29ubmVjdG9yUHJvcGVydGllcztcbiAgQElucHV0KCkgZGVmYXVsdE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dEZWxldGVCdXR0b24gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcHJvcGVydGllc1NhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHtwcm9wZXJ0aWVzOiBDb25uZWN0b3JQcm9wZXJ0aWVzOyBuYW1lOiBzdHJpbmd9PigpO1xuICBAT3V0cHV0KCkgY29ubmVjdG9yRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZm9ybVJlZnJlc2gkID0gbmV3IFN1YmplY3Q8Rm9ybWlvUmVmcmVzaFZhbHVlPigpO1xuICBmb3JtRGVmaW5pdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1pb0Zvcm0+KHVuZGVmaW5lZCk7XG4gIHRyYW5zbGF0ZWRGb3JtRGVmaW5pdGlvbiQgPSB0aGlzLmZvcm1EZWZpbml0aW9uJC5waXBlKFxuICAgIG1hcChkZWZpbml0aW9uID0+IHRoaXMuZm9ybVRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVGb3JtKGRlZmluaXRpb24pKVxuICApO1xuICBjYXNlRGVmaW5pdGlvbk9wdGlvbnM6IEFycmF5PHtsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nfT4gPSBbXTtcbiAgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbk9wdGlvbnM6IHtbY2FzZURlZmluaXRpb25JZDogc3RyaW5nXTogQXJyYXk8c3RyaW5nPn0gPSB7fTtcblxuICByZWFkb25seSBvcHRpb25zOiBGb3JtaW9PcHRpb25zID0ge1xuICAgIGRpc2FibGVBbGVydHM6IHRydWUsXG4gIH07XG5cbiAgcHJpdmF0ZSBmb3JtRGVmaW5pdGlvblN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZGVsZXRlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybVRyYW5zbGF0aW9uU2VydmljZTogRm9ybVRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1NYXBwaW5nU2VydmljZTogRm9ybU1hcHBpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdG9yTWFuYWdlbWVudFNlcnZpY2U6IENvbm5lY3Rvck1hbmFnZW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBDb25uZWN0b3JNYW5hZ2VtZW50U3RhdGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB3aW5kb3dbJ3Byb2R1Y3RSZXF1ZXN0RGVmaW5pdGlvbnMnXSA9IHt9O1xuICAgIHRoaXMub3BlbkZvcm1EZWZpbml0aW9uU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5vcGVuRGVsZXRlU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5mb3JtRGVmaW5pdGlvbiQubmV4dChlZGl0UHJvZHVjdEFhbnZyYWdlbkNvbm5lY3RvckZvcm0pO1xuICAgIHRoaXMubG9hZENvbm5lY3Rvck5hbWVzKCk7XG4gICAgdGhpcy5sb2FkRGVmaW5pdGlvbnMoKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5oaWRlTW9kYWxTYXZlQnV0dG9uKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1EZWZpbml0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudHJhbnNsYXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGVsZXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb25TdWJtaXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHN1Ym1pc3Npb24gPSBldmVudC5kYXRhO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBjbG9uZURlZXAodGhpcy5wcm9wZXJ0aWVzKTtcblxuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaUNvbm5lY3Rpb25OYW1lID0gc3VibWlzc2lvbi5vYmplY3RzQXBpQ29ubmVjdGlvbk5hbWU7XG4gICAgcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVDb25uZWN0aW9uTmFtZSA9IHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGllQ29ubmVjdGlvbk5hbWU7XG4gICAgcHJvcGVydGllcy5hYW52cmFnZXJSb2xUeXBlVXJsID0gc3VibWlzc2lvbi5hcHBsaWNhbnRSb2xlVHlwZVVybDtcbiAgICBwcm9wZXJ0aWVzLnR5cGVNYXBwaW5nID0gc3VibWlzc2lvbi5wcm9kdWN0QWFudnJhYWdUeXBlcztcblxuICAgIHRoaXMucHJvcGVydGllc1NhdmUuZW1pdCh7cHJvcGVydGllcywgbmFtZTogc3VibWlzc2lvbi5jb25uZWN0b3JOYW1lfSk7XG4gIH1cblxuICBvbkRlbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5kaXNhYmxlSW5wdXQoKTtcbiAgICB0aGlzLmNvbm5lY3RvckRlbGV0ZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Gb3JtRGVmaW5pdGlvblN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1EZWZpbml0aW9uU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmZvcm1EZWZpbml0aW9uJCxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICAgIF0pLnN1YnNjcmliZSgoW2Zvcm1dKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkRm9ybSA9IHRoaXMuZm9ybVRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVGb3JtKGZvcm0pO1xuICAgICAgdGhpcy5yZWZyZXNoRm9ybSh7Zm9ybTogdHJhbnNsYXRlZEZvcm19KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlZmlsbEZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IGNsb25lRGVlcCh0aGlzLnByb3BlcnRpZXMpO1xuICAgIGNvbnN0IHN1Ym1pc3Npb246IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cbiAgICBzdWJtaXNzaW9uLm9iamVjdHNBcGlDb25uZWN0aW9uTmFtZSA9IHByb3BlcnRpZXMub2JqZWN0c0FwaUNvbm5lY3Rpb25OYW1lO1xuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGllQ29ubmVjdGlvbk5hbWUgPSBwcm9wZXJ0aWVzLm9wZW5Ob3RpZmljYXRpZUNvbm5lY3Rpb25OYW1lO1xuICAgIHN1Ym1pc3Npb24uYXBwbGljYW50Um9sZVR5cGVVcmwgPSBwcm9wZXJ0aWVzLmFhbnZyYWdlclJvbFR5cGVVcmw7XG4gICAgc3VibWlzc2lvbi5wcm9kdWN0QWFudnJhYWdUeXBlcyA9IHByb3BlcnRpZXMudHlwZU1hcHBpbmc7XG4gICAgc3VibWlzc2lvbi5jb25uZWN0b3JOYW1lID0gdGhpcy5kZWZhdWx0TmFtZTtcblxuICAgIHRoaXMucmVmcmVzaEZvcm0oe3N1Ym1pc3Npb246IHtkYXRhOiBzdWJtaXNzaW9ufX0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBDYXNlRGVmaW5pdGlvbktleUNvbXBvbmVudCA9IChcbiAgICBjb21wb25lbnQ6IEV4dGVuZGVkQ29tcG9uZW50U2NoZW1hXG4gICk6IEV4dGVuZGVkQ29tcG9uZW50U2NoZW1hID0+IHtcbiAgICBpZiAoY29tcG9uZW50LmtleSA9PT0gJ2Nhc2VEZWZpbml0aW9uS2V5Jykge1xuICAgICAgcmV0dXJuIHsuLi5jb21wb25lbnQsIGRpc2FibGVkOiBmYWxzZSwgZGF0YToge3ZhbHVlczogdGhpcy5jYXNlRGVmaW5pdGlvbk9wdGlvbnN9fTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9O1xuXG4gIHByaXZhdGUgcmVmcmVzaEZvcm0ocmVmcmVzaFZhbHVlOiBGb3JtaW9SZWZyZXNoVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1SZWZyZXNoJC5uZXh0KHJlZnJlc2hWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREZWZpbml0aW9ucygpOiB2b2lkIHtcbiAgICBsZXQgZG9jdW1lbnREZWZpbml0aW9uczogQXJyYXk8RG9jdW1lbnREZWZpbml0aW9uPjtcblxuICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAuZ2V0QWxsRGVmaW5pdGlvbnMoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcChyZXNEb2N1bWVudERlZmluaXRpb25zID0+IChkb2N1bWVudERlZmluaXRpb25zID0gcmVzRG9jdW1lbnREZWZpbml0aW9ucy5jb250ZW50KSksXG4gICAgICAgIHN3aXRjaE1hcChyZXNEb2N1bWVudERlZmluaXRpb25zID0+XG4gICAgICAgICAgY29tYmluZUxhdGVzdChcbiAgICAgICAgICAgIHJlc0RvY3VtZW50RGVmaW5pdGlvbnMuY29udGVudC5tYXAoZGVmaW5pdGlvbiA9PlxuICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5maW5kUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbnMoZGVmaW5pdGlvbi5pZC5uYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5jYXNlRGVmaW5pdGlvbk9wdGlvbnMgPSBkb2N1bWVudERlZmluaXRpb25zLm1hcChkb2N1bWVudERlZmluaXRpb24gPT4gKHtcbiAgICAgICAgICAgIGxhYmVsOiBkb2N1bWVudERlZmluaXRpb24uaWQubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBkb2N1bWVudERlZmluaXRpb24uaWQubmFtZSxcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25zLmZvckVhY2goKGRvY3VtZW50RGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbk9wdGlvbnNbZG9jdW1lbnREZWZpbml0aW9uLmlkLm5hbWVdID0gcmVzW2luZGV4XS5tYXAoXG4gICAgICAgICAgICAgIHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24gPT4gcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbi5pZC5wcm9jZXNzRGVmaW5pdGlvbktleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHdpbmRvd1sncHJvZHVjdFJlcXVlc3REZWZpbml0aW9ucyddID0gdGhpcy5wcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uT3B0aW9ucztcblxuICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25XaXRoQ2FzZURlZmluaXRpb25PcHRpb25zID0gdGhpcy5mb3JtTWFwcGluZ1NlcnZpY2UubWFwQ29tcG9uZW50cyhcbiAgICAgICAgICAgIHRoaXMuZm9ybURlZmluaXRpb24kLmdldFZhbHVlKCksXG4gICAgICAgICAgICB0aGlzLm1hcENhc2VEZWZpbml0aW9uS2V5Q29tcG9uZW50XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuZm9ybURlZmluaXRpb24kLm5leHQoZGVmaW5pdGlvbldpdGhDYXNlRGVmaW5pdGlvbk9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcz8uYWFudnJhZ2VyUm9sVHlwZVVybCkge1xuICAgICAgICAgICAgdGhpcy5wcmVmaWxsRm9ybSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbm5lY3Rvck5hbWVzKCk6IHZvaWQge1xuICAgIHRoaXMuY29ubmVjdG9yTWFuYWdlbWVudFNlcnZpY2VcbiAgICAgIC5nZXRDb25uZWN0b3JUeXBlcygpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgICAgcmVzLmZvckVhY2goY29ubmVjdG9yVHlwZSA9PiB7XG4gICAgICAgICAgICBpZiAoY29ubmVjdG9yVHlwZS5uYW1lID09PSAnT2JqZWN0c0FwaScpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQ29ubmVjdG9yTmFtZXNCeVR5cGUoJ29iamVjdEFwaUNvbm5lY3Rvck5hbWVzJywgY29ubmVjdG9yVHlwZS5pZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbm5lY3RvclR5cGUubmFtZSA9PT0gJ09wZW5Ob3RpZmljYXRpZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQ29ubmVjdG9yTmFtZXNCeVR5cGUoJ29wZW5Ob3RpZmljYXRpZUNvbm5lY3Rvck5hbWVzJywgY29ubmVjdG9yVHlwZS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb25uZWN0b3JOYW1lc0J5VHlwZSh3aW5kb3dLZXk6IHN0cmluZywgY29ubmVjdG9yVHlwZUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbm5lY3Rvck1hbmFnZW1lbnRTZXJ2aWNlXG4gICAgICAuZ2V0Q29ubmVjdG9ySW5zdGFuY2VzQnlUeXBlKGNvbm5lY3RvclR5cGVJZClcbiAgICAgIC5waXBlKG1hcChyZXMgPT4gKHdpbmRvd1t3aW5kb3dLZXldID0gcmVzLmNvbnRlbnQubWFwKGNvbm5lY3RvciA9PiBjb25uZWN0b3IubmFtZSkpKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRlbGV0ZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuc3RhdGVTZXJ2aWNlLmRlbGV0ZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMub25EZWxldGUoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjEgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2XG4gICpuZ0lmPVwidHJhbnNsYXRlZEZvcm1EZWZpbml0aW9uJCB8IGFzeW5jIGFzIGRlZmluaXRpb25cIlxuICBjbGFzcz1cImVkaXQtcHJvZHVjdC1yZXF1ZXN0XCJcbiAgW25nQ2xhc3NdPVwieydoYXMtZGVsZXRlJzogc2hvd0RlbGV0ZUJ1dHRvbn1cIlxuPlxuICA8dmFsdGltby1mb3JtLWlvXG4gICAgW2Zvcm1dPVwiZGVmaW5pdGlvblwiXG4gICAgW2Zvcm1SZWZyZXNoJF09XCJmb3JtUmVmcmVzaCRcIlxuICAgIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxuICAgIChzdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gID5cbiAgPC92YWx0aW1vLWZvcm0taW8+XG5cbiAgPGJ1dHRvbiAqbmdJZj1cInNob3dEZWxldGVCdXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIGJ0bi1zcGFjZVwiIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+XG4gICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktZGVsZXRlIG1yLTFcIj48L2k+XG4gICAge3sgJ2Nvbm5lY3Rvck1hbmFnZW1lbnQucmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19