@valtimo/connector-management 4.15.2-next-main.15 → 4.15.3-next-main.16

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 (47) hide show
  1. package/README.md +16 -7
  2. package/bundles/valtimo-connector-management.umd.js +2050 -1997
  3. package/bundles/valtimo-connector-management.umd.js.map +1 -1
  4. package/bundles/valtimo-connector-management.umd.min.js +1 -1
  5. package/bundles/valtimo-connector-management.umd.min.js.map +1 -1
  6. package/esm2015/lib/components/add-connector/add-connector.component.js +83 -79
  7. package/esm2015/lib/components/connector-link-extension/connector-link-extension.component.js +104 -95
  8. package/esm2015/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.js +138 -136
  9. package/esm2015/lib/components/connector-management/connector-management.component.js +103 -95
  10. package/esm2015/lib/components/connector-modal/connector-modal.component.js +58 -58
  11. package/esm2015/lib/components/edit-connector-form/edit-connector-form.component.js +42 -42
  12. package/esm2015/lib/components/edit-connector-properties/edit-connector-properties.component.js +144 -140
  13. package/esm2015/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.js +157 -150
  14. package/esm2015/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.js +500 -500
  15. package/esm2015/lib/components/modify-connector/modify-connector.component.js +75 -73
  16. package/esm2015/lib/components/multi-value-connector-property/multi-value-connector-property.component.js +96 -92
  17. package/esm2015/lib/connector-management-routing.js +41 -44
  18. package/esm2015/lib/connector-management.module.js +74 -76
  19. package/esm2015/lib/extension/connector-management.extension.init.js +39 -39
  20. package/esm2015/lib/services/connector-management/connector-management.service.js +60 -60
  21. package/esm2015/lib/services/connector-management-state/connector-management-state.service.js +83 -83
  22. package/esm2015/lib/services/object-api-sync/object-api-sync.service.js +51 -51
  23. package/esm2015/public-api.js +32 -32
  24. package/esm2015/valtimo-connector-management.js +8 -8
  25. package/fesm2015/valtimo-connector-management.js +1728 -1693
  26. package/fesm2015/valtimo-connector-management.js.map +1 -1
  27. package/lib/components/add-connector/add-connector.component.d.ts +26 -26
  28. package/lib/components/connector-link-extension/connector-link-extension.component.d.ts +25 -25
  29. package/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.d.ts +40 -40
  30. package/lib/components/connector-management/connector-management.component.d.ts +28 -28
  31. package/lib/components/connector-modal/connector-modal.component.d.ts +16 -16
  32. package/lib/components/edit-connector-form/edit-connector-form.component.d.ts +15 -15
  33. package/lib/components/edit-connector-properties/edit-connector-properties.component.d.ts +35 -35
  34. package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.d.ts +45 -45
  35. package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.d.ts +225 -225
  36. package/lib/components/modify-connector/modify-connector.component.d.ts +19 -19
  37. package/lib/components/multi-value-connector-property/multi-value-connector-property.component.d.ts +26 -26
  38. package/lib/connector-management-routing.d.ts +2 -2
  39. package/lib/connector-management.module.d.ts +2 -2
  40. package/lib/extension/connector-management.extension.init.d.ts +2 -2
  41. package/lib/services/connector-management/connector-management.service.d.ts +17 -17
  42. package/lib/services/connector-management-state/connector-management-state.service.d.ts +26 -26
  43. package/lib/services/object-api-sync/object-api-sync.service.d.ts +14 -14
  44. package/package.json +1 -1
  45. package/public-api.d.ts +13 -13
  46. package/valtimo-connector-management.d.ts +7 -7
  47. package/valtimo-connector-management.metadata.json +1 -1
@@ -1,150 +1,157 @@
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 { FormMappingService, FormTranslationService } from '@valtimo/form';
19
- import { DocumentService } from '@valtimo/document';
20
- import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
21
- import { cloneDeep } from 'lodash';
22
- import { TranslateService } from '@ngx-translate/core';
23
- import { map, switchMap, tap } from 'rxjs/operators';
24
- export class EditProductAanvragenConnectorComponent {
25
- constructor(formTranslationService, formMappingService, documentService, translateService) {
26
- this.formTranslationService = formTranslationService;
27
- this.formMappingService = formMappingService;
28
- this.documentService = documentService;
29
- this.translateService = translateService;
30
- this.showDeleteButton = false;
31
- this.propertiesSave = new EventEmitter();
32
- this.connectorDelete = new EventEmitter();
33
- this.formRefresh$ = new Subject();
34
- this.formDefinition$ = new BehaviorSubject(undefined);
35
- this.translatedFormDefinition$ = this.formDefinition$.pipe(map((definition) => this.formTranslationService.translateForm(definition)));
36
- this.caseDefinitionOptions = [];
37
- this.processDocumentDefinitionOptions = {};
38
- this.options = {
39
- disableAlerts: true
40
- };
41
- this.mapCaseDefinitionKeyComponent = (component) => {
42
- if (component.key === 'caseDefinitionKey') {
43
- return Object.assign(Object.assign({}, component), { disabled: false, data: { values: this.caseDefinitionOptions } });
44
- }
45
- return component;
46
- };
47
- }
48
- ngOnInit() {
49
- window['productRequestDefinitions'] = {};
50
- this.openFormDefinitionSubscription();
51
- this.formDefinition$.next(editProductAanvragenConnectorForm);
52
- this.loadDefinitions();
53
- }
54
- ngOnDestroy() {
55
- var _a, _b;
56
- (_a = this.formDefinitionSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
57
- (_b = this.translateSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
58
- }
59
- onSubmit(event) {
60
- const submission = event.data;
61
- const properties = cloneDeep(this.properties);
62
- properties.objectsApiProperties.objectsApi.url = submission.objectsApiUrl;
63
- properties.objectsApiProperties.objectsApi.token = submission.objectsApiToken;
64
- properties.objectsApiProperties.objectsTypeApi.url = submission.objectTypesApiUrl;
65
- properties.objectsApiProperties.objectsTypeApi.token = submission.objectTypesApiToken;
66
- properties.objectsApiProperties.objectType.name = submission.objectTypeName;
67
- properties.objectsApiProperties.objectType.title = submission.objectTypeTitle;
68
- properties.objectsApiProperties.objectType.url = submission.objectTypeUrl;
69
- properties.objectsApiProperties.objectType.typeVersion = submission.objectTypeVersion;
70
- properties.openNotificatieProperties.baseUrl = submission.openNotificationsBaseUrl;
71
- properties.openNotificatieProperties.clientId = submission.openNotificationsClientId;
72
- properties.openNotificatieProperties.secret = submission.openNotificationsSecret;
73
- properties.openNotificatieProperties.callbackBaseUrl = submission.openNotificationsCallbackBaseUrl;
74
- properties.aanvragerRolTypeUrl = submission.applicantRoleTypeUrl;
75
- properties.typeMapping = submission.productAanvraagTypes;
76
- this.propertiesSave.emit({ properties, name: submission.connectorName });
77
- }
78
- onDelete() {
79
- this.connectorDelete.emit();
80
- }
81
- openFormDefinitionSubscription() {
82
- this.formDefinitionSubscription = combineLatest([this.formDefinition$, this.translateService.stream('key')])
83
- .subscribe(([form]) => {
84
- const translatedForm = this.formTranslationService.translateForm(form);
85
- this.refreshForm({ form: translatedForm });
86
- });
87
- }
88
- prefillForm() {
89
- const properties = cloneDeep(this.properties);
90
- const submission = {};
91
- submission.objectsApiUrl = properties.objectsApiProperties.objectsApi.url;
92
- submission.objectsApiToken = properties.objectsApiProperties.objectsApi.token;
93
- submission.objectTypesApiUrl = properties.objectsApiProperties.objectsTypeApi.url;
94
- submission.objectTypesApiToken = properties.objectsApiProperties.objectsTypeApi.token;
95
- submission.objectTypeName = properties.objectsApiProperties.objectType.name;
96
- submission.objectTypeTitle = properties.objectsApiProperties.objectType.title;
97
- submission.objectTypeUrl = properties.objectsApiProperties.objectType.url;
98
- submission.objectTypeVersion = properties.objectsApiProperties.objectType.typeVersion;
99
- submission.openNotificationsBaseUrl = properties.openNotificatieProperties.baseUrl;
100
- submission.openNotificationsClientId = properties.openNotificatieProperties.clientId;
101
- submission.openNotificationsSecret = properties.openNotificatieProperties.secret;
102
- submission.openNotificationsCallbackBaseUrl = properties.openNotificatieProperties.callbackBaseUrl;
103
- submission.applicantRoleTypeUrl = properties.aanvragerRolTypeUrl;
104
- submission.productAanvraagTypes = properties.typeMapping;
105
- submission.connectorName = this.defaultName;
106
- this.refreshForm({ submission: { data: submission } });
107
- }
108
- refreshForm(refreshValue) {
109
- this.formRefresh$.next(refreshValue);
110
- }
111
- loadDefinitions() {
112
- let documentDefinitions;
113
- this.documentService.getAllDefinitions().pipe(tap((resDocumentDefinitions) => documentDefinitions = resDocumentDefinitions.content), switchMap((resDocumentDefinitions) => combineLatest(resDocumentDefinitions.content.map((definition) => this.documentService.findProcessDocumentDefinitions(definition.id.name)))), tap((res) => {
114
- var _a;
115
- this.caseDefinitionOptions = documentDefinitions.map((documentDefinition) => {
116
- return { label: documentDefinition.id.name, value: documentDefinition.id.name };
117
- });
118
- documentDefinitions.forEach((documentDefinition, index) => {
119
- this.processDocumentDefinitionOptions[documentDefinition.id.name] = res[index].map((processDocumentDefinition) => processDocumentDefinition.id.processDefinitionKey);
120
- });
121
- window['productRequestDefinitions'] = this.processDocumentDefinitionOptions;
122
- const definitionWithCaseDefinitionOptions = this.formMappingService.mapComponents(this.formDefinition$.getValue(), this.mapCaseDefinitionKeyComponent);
123
- this.formDefinition$.next(definitionWithCaseDefinitionOptions);
124
- if ((_a = this.properties) === null || _a === void 0 ? void 0 : _a.aanvragerRolTypeUrl) {
125
- this.prefillForm();
126
- }
127
- })).subscribe();
128
- }
129
- }
130
- EditProductAanvragenConnectorComponent.decorators = [
131
- { type: Component, args: [{
132
- selector: 'valtimo-edit-product-aanvragen-connector',
133
- 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\n",
134
- 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}"]
135
- },] }
136
- ];
137
- EditProductAanvragenConnectorComponent.ctorParameters = () => [
138
- { type: FormTranslationService },
139
- { type: FormMappingService },
140
- { type: DocumentService },
141
- { type: TranslateService }
142
- ];
143
- EditProductAanvragenConnectorComponent.propDecorators = {
144
- properties: [{ type: Input }],
145
- defaultName: [{ type: Input }],
146
- showDeleteButton: [{ type: Input }],
147
- propertiesSave: [{ type: Output }],
148
- connectorDelete: [{ type: Output }]
149
- };
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb25uZWN0b3ItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUFDLGtCQUFrQixFQUFFLHNCQUFzQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFJM0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQU9uRCxNQUFNLE9BQU8sc0NBQXNDO0lBdUJqRCxZQUNtQixzQkFBOEMsRUFDOUMsa0JBQXNDLEVBQ3RDLGVBQWdDLEVBQ2hDLGdCQUFrQztRQUhsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FB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QUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDO1lBRTVFLE1BQU0sbUNBQW1DLEdBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUU3RyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBRS9ELFVBQUksSUFBSSxDQUFDLFVBQVUsMENBQUUsbUJBQW1CLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNwQjtRQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEIsQ0FBQzs7O1lBN0pGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMENBQTBDO2dCQUNwRCwrckNBQWdFOzthQUVqRTs7O1lBZjJCLHNCQUFzQjtZQUExQyxrQkFBa0I7WUFDbEIsZUFBZTtZQU9mLGdCQUFnQjs7O3lCQVNyQixLQUFLOzBCQUNMLEtBQUs7K0JBQ0wsS0FBSzs2QkFFTCxNQUFNOzhCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMSBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2VkaXRQcm9kdWN0QWFudnJhZ2VuQ29ubmVjdG9yRm9ybX0gZnJvbSAnLi9lZGl0LXByb2R1Y3QtYWFudnJhZ2VuLWNvbm5lY3Rvci5mb3JtJztcbmltcG9ydCB7Rm9ybU1hcHBpbmdTZXJ2aWNlLCBGb3JtVHJhbnNsYXRpb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9mb3JtJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0V4dGVuZGVkQ29tcG9uZW50U2NoZW1hfSBmcm9tICdmb3JtaW9qcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29ubmVjdG9yUHJvcGVydGllcywgRG9jdW1lbnREZWZpbml0aW9uLCBEb2N1bWVudERlZmluaXRpb25zLCBQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ufSBmcm9tICdAdmFsdGltby9jb250cmFjdCc7XG5pbXBvcnQge0Zvcm1pb0Zvcm0sIEZvcm1pb1JlZnJlc2hWYWx1ZX0gZnJvbSAnYW5ndWxhci1mb3JtaW8nO1xuaW1wb3J0IHtGb3JtaW9PcHRpb25zfSBmcm9tICdhbmd1bGFyLWZvcm1pby9mb3JtaW8uY29tbW9uJztcbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7bWFwLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWVkaXQtcHJvZHVjdC1hYW52cmFnZW4tY29ubmVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtcHJvZHVjdC1hYW52cmFnZW4tY29ubmVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFZGl0UHJvZHVjdEFhbnZyYWdlbkNvbm5lY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcHJvcGVydGllczogQ29ubmVjdG9yUHJvcGVydGllcztcbiAgQElucHV0KCkgZGVmYXVsdE5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dEZWxldGVCdXR0b24gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcHJvcGVydGllc1NhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHtwcm9wZXJ0aWVzOiBDb25uZWN0b3JQcm9wZXJ0aWVzLCBuYW1lOiBzdHJpbmd9PigpO1xuICBAT3V0cHV0KCkgY29ubmVjdG9yRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZm9ybVJlZnJlc2gkID0gbmV3IFN1YmplY3Q8Rm9ybWlvUmVmcmVzaFZhbHVlPigpO1xuICBmb3JtRGVmaW5pdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZvcm1pb0Zvcm0+KHVuZGVmaW5lZCk7XG4gIHRyYW5zbGF0ZWRGb3JtRGVmaW5pdGlvbiQgPSB0aGlzLmZvcm1EZWZpbml0aW9uJC5waXBlKFxuICAgIG1hcCgoZGVmaW5pdGlvbikgPT4gdGhpcy5mb3JtVHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUZvcm0oZGVmaW5pdGlvbikpXG4gICk7XG4gIGNhc2VEZWZpbml0aW9uT3B0aW9uczogQXJyYXk8e2xhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd9PiA9IFtdO1xuICBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uT3B0aW9uczoge1tjYXNlRGVmaW5pdGlvbklkOiBzdHJpbmddOiBBcnJheTxzdHJpbmc+fSA9IHt9O1xuXG4gIHJlYWRvbmx5IG9wdGlvbnM6IEZvcm1pb09wdGlvbnMgPSB7XG4gICAgZGlzYWJsZUFsZXJ0czogdHJ1ZVxuICB9O1xuXG4gIHByaXZhdGUgZm9ybURlZmluaXRpb25TdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgdHJhbnNsYXRlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybVRyYW5zbGF0aW9uU2VydmljZTogRm9ybVRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1NYXBwaW5nU2VydmljZTogRm9ybU1hcHBpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgd2luZG93Wydwcm9kdWN0UmVxdWVzdERlZmluaXRpb25zJ10gPSB7fTtcbiAgICB0aGlzLm9wZW5Gb3JtRGVmaW5pdGlvblN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuZm9ybURlZmluaXRpb24kLm5leHQoZWRpdFByb2R1Y3RBYW52cmFnZW5Db25uZWN0b3JGb3JtKTtcbiAgICB0aGlzLmxvYWREZWZpbml0aW9ucygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRGVmaW5pdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uU3VibWl0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBzdWJtaXNzaW9uID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gY2xvbmVEZWVwKHRoaXMucHJvcGVydGllcyk7XG5cbiAgICBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNBcGkudXJsID0gc3VibWlzc2lvbi5vYmplY3RzQXBpVXJsO1xuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0c0FwaS50b2tlbiA9IHN1Ym1pc3Npb24ub2JqZWN0c0FwaVRva2VuO1xuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0c1R5cGVBcGkudXJsID0gc3VibWlzc2lvbi5vYmplY3RUeXBlc0FwaVVybDtcbiAgICBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNUeXBlQXBpLnRva2VuID0gc3VibWlzc2lvbi5vYmplY3RUeXBlc0FwaVRva2VuO1xuXG4gICAgcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RUeXBlLm5hbWUgPSBzdWJtaXNzaW9uLm9iamVjdFR5cGVOYW1lO1xuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS50aXRsZSA9IHN1Ym1pc3Npb24ub2JqZWN0VHlwZVRpdGxlO1xuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS51cmwgPSBzdWJtaXNzaW9uLm9iamVjdFR5cGVVcmw7XG4gICAgcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RUeXBlLnR5cGVWZXJzaW9uID0gc3VibWlzc2lvbi5vYmplY3RUeXBlVmVyc2lvbjtcblxuICAgIHByb3BlcnRpZXMub3Blbk5vdGlmaWNhdGllUHJvcGVydGllcy5iYXNlVXJsID0gc3VibWlzc2lvbi5vcGVuTm90aWZpY2F0aW9uc0Jhc2VVcmw7XG4gICAgcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmNsaWVudElkID0gc3VibWlzc2lvbi5vcGVuTm90aWZpY2F0aW9uc0NsaWVudElkO1xuICAgIHByb3BlcnRpZXMub3Blbk5vdGlmaWNhdGllUHJvcGVydGllcy5zZWNyZXQgPSBzdWJtaXNzaW9uLm9wZW5Ob3RpZmljYXRpb25zU2VjcmV0O1xuICAgIHByb3BlcnRpZXMub3Blbk5vdGlmaWNhdGllUHJvcGVydGllcy5jYWxsYmFja0Jhc2VVcmwgPSBzdWJtaXNzaW9uLm9wZW5Ob3RpZmljYXRpb25zQ2FsbGJhY2tCYXNlVXJsO1xuXG4gICAgcHJvcGVydGllcy5hYW52cmFnZXJSb2xUeXBlVXJsID0gc3VibWlzc2lvbi5hcHBsaWNhbnRSb2xlVHlwZVVybDtcblxuICAgIHByb3BlcnRpZXMudHlwZU1hcHBpbmcgPSBzdWJtaXNzaW9uLnByb2R1Y3RBYW52cmFhZ1R5cGVzO1xuXG4gICAgdGhpcy5wcm9wZXJ0aWVzU2F2ZS5lbWl0KHtwcm9wZXJ0aWVzLCBuYW1lOiBzdWJtaXNzaW9uLmNvbm5lY3Rvck5hbWV9KTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY29ubmVjdG9yRGVsZXRlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkZvcm1EZWZpbml0aW9uU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybURlZmluaXRpb25TdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZvcm1EZWZpbml0aW9uJCwgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyldKVxuICAgICAgLnN1YnNjcmliZSgoW2Zvcm1dKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRGb3JtID0gdGhpcy5mb3JtVHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUZvcm0oZm9ybSk7XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm0oe2Zvcm06IHRyYW5zbGF0ZWRGb3JtfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlZmlsbEZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IGNsb25lRGVlcCh0aGlzLnByb3BlcnRpZXMpO1xuICAgIGNvbnN0IHN1Ym1pc3Npb246IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cbiAgICBzdWJtaXNzaW9uLm9iamVjdHNBcGlVcmwgPSBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNBcGkudXJsO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0c0FwaVRva2VuID0gcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RzQXBpLnRva2VuO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0VHlwZXNBcGlVcmwgPSBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNUeXBlQXBpLnVybDtcbiAgICBzdWJtaXNzaW9uLm9iamVjdFR5cGVzQXBpVG9rZW4gPSBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNUeXBlQXBpLnRva2VuO1xuXG4gICAgc3VibWlzc2lvbi5vYmplY3RUeXBlTmFtZSA9IHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS5uYW1lO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0VHlwZVRpdGxlID0gcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RUeXBlLnRpdGxlO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0VHlwZVVybCA9IHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS51cmw7XG4gICAgc3VibWlzc2lvbi5vYmplY3RUeXBlVmVyc2lvbiA9IHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS50eXBlVmVyc2lvbjtcblxuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNCYXNlVXJsID0gcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmJhc2VVcmw7XG4gICAgc3VibWlzc2lvbi5vcGVuTm90aWZpY2F0aW9uc0NsaWVudElkID0gcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmNsaWVudElkO1xuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNTZWNyZXQgPSBwcm9wZXJ0aWVzLm9wZW5Ob3RpZmljYXRpZVByb3BlcnRpZXMuc2VjcmV0O1xuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNDYWxsYmFja0Jhc2VVcmwgPSBwcm9wZXJ0aWVzLm9wZW5Ob3RpZmljYXRpZVByb3BlcnRpZXMuY2FsbGJhY2tCYXNlVXJsO1xuXG4gICAgc3VibWlzc2lvbi5hcHBsaWNhbnRSb2xlVHlwZVVybCA9IHByb3BlcnRpZXMuYWFudnJhZ2VyUm9sVHlwZVVybDtcblxuICAgIHN1Ym1pc3Npb24ucHJvZHVjdEFhbnZyYWFnVHlwZXMgPSBwcm9wZXJ0aWVzLnR5cGVNYXBwaW5nO1xuXG4gICAgc3VibWlzc2lvbi5jb25uZWN0b3JOYW1lID0gdGhpcy5kZWZhdWx0TmFtZTtcblxuICAgIHRoaXMucmVmcmVzaEZvcm0oe3N1Ym1pc3Npb246IHtkYXRhOiBzdWJtaXNzaW9ufX0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBDYXNlRGVmaW5pdGlvbktleUNvbXBvbmVudCA9IChjb21wb25lbnQ6IEV4dGVuZGVkQ29tcG9uZW50U2NoZW1hKTogRXh0ZW5kZWRDb21wb25lbnRTY2hlbWEgPT4ge1xuICAgIGlmIChjb21wb25lbnQua2V5ID09PSAnY2FzZURlZmluaXRpb25LZXknKSB7XG4gICAgICByZXR1cm4gey4uLmNvbXBvbmVudCwgZGlzYWJsZWQ6IGZhbHNlLCBkYXRhOiB7dmFsdWVzOiB0aGlzLmNhc2VEZWZpbml0aW9uT3B0aW9uc319O1xuICAgIH1cblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hGb3JtKHJlZnJlc2hWYWx1ZTogRm9ybWlvUmVmcmVzaFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtUmVmcmVzaCQubmV4dChyZWZyZXNoVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGVmaW5pdGlvbnMoKTogdm9pZCB7XG4gICAgbGV0IGRvY3VtZW50RGVmaW5pdGlvbnM6IEFycmF5PERvY3VtZW50RGVmaW5pdGlvbj47XG5cbiAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXRBbGxEZWZpbml0aW9ucygpLnBpcGUoXG4gICAgICB0YXAoKHJlc0RvY3VtZW50RGVmaW5pdGlvbnMpID0+IGRvY3VtZW50RGVmaW5pdGlvbnMgPSByZXNEb2N1bWVudERlZmluaXRpb25zLmNvbnRlbnQpLFxuICAgICAgc3dpdGNoTWFwKChyZXNEb2N1bWVudERlZmluaXRpb25zKSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KHJlc0RvY3VtZW50RGVmaW5pdGlvbnMuY29udGVudC5tYXAoKGRlZmluaXRpb24pID0+XG4gICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZmluZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zKGRlZmluaXRpb24uaWQubmFtZSkpKVxuICAgICAgKSxcbiAgICAgIHRhcCgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuY2FzZURlZmluaXRpb25PcHRpb25zID0gZG9jdW1lbnREZWZpbml0aW9ucy5tYXAoKGRvY3VtZW50RGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiB7bGFiZWw6IGRvY3VtZW50RGVmaW5pdGlvbi5pZC5uYW1lLCB2YWx1ZTogZG9jdW1lbnREZWZpbml0aW9uLmlkLm5hbWV9O1xuICAgICAgICB9KTtcblxuICAgICAgICBkb2N1bWVudERlZmluaXRpb25zLmZvckVhY2goKGRvY3VtZW50RGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NEb2N1bWVudERlZmluaXRpb25PcHRpb25zW2RvY3VtZW50RGVmaW5pdGlvbi5pZC5uYW1lXSA9IHJlc1tpbmRleF0ubWFwKChwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKSA9PlxuICAgICAgICAgICAgcHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbi5pZC5wcm9jZXNzRGVmaW5pdGlvbktleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvd1sncHJvZHVjdFJlcXVlc3REZWZpbml0aW9ucyddID0gdGhpcy5wcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uT3B0aW9ucztcblxuICAgICAgICBjb25zdCBkZWZpbml0aW9uV2l0aENhc2VEZWZpbml0aW9uT3B0aW9ucyA9XG4gICAgICAgICAgdGhpcy5mb3JtTWFwcGluZ1NlcnZpY2UubWFwQ29tcG9uZW50cyh0aGlzLmZvcm1EZWZpbml0aW9uJC5nZXRWYWx1ZSgpLCB0aGlzLm1hcENhc2VEZWZpbml0aW9uS2V5Q29tcG9uZW50KTtcblxuICAgICAgICB0aGlzLmZvcm1EZWZpbml0aW9uJC5uZXh0KGRlZmluaXRpb25XaXRoQ2FzZURlZmluaXRpb25PcHRpb25zKTtcblxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzPy5hYW52cmFnZXJSb2xUeXBlVXJsKSB7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRm9ybSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==
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 { FormMappingService, FormTranslationService } from '@valtimo/form';
19
+ import { DocumentService } from '@valtimo/document';
20
+ import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
21
+ import { cloneDeep } from 'lodash';
22
+ import { TranslateService } from '@ngx-translate/core';
23
+ import { map, switchMap, tap } from 'rxjs/operators';
24
+ export class EditProductAanvragenConnectorComponent {
25
+ constructor(formTranslationService, formMappingService, documentService, translateService) {
26
+ this.formTranslationService = formTranslationService;
27
+ this.formMappingService = formMappingService;
28
+ this.documentService = documentService;
29
+ this.translateService = translateService;
30
+ this.showDeleteButton = false;
31
+ this.propertiesSave = new EventEmitter();
32
+ this.connectorDelete = new EventEmitter();
33
+ this.formRefresh$ = new Subject();
34
+ this.formDefinition$ = new BehaviorSubject(undefined);
35
+ this.translatedFormDefinition$ = this.formDefinition$.pipe(map(definition => this.formTranslationService.translateForm(definition)));
36
+ this.caseDefinitionOptions = [];
37
+ this.processDocumentDefinitionOptions = {};
38
+ this.options = {
39
+ disableAlerts: true,
40
+ };
41
+ this.mapCaseDefinitionKeyComponent = (component) => {
42
+ if (component.key === 'caseDefinitionKey') {
43
+ return Object.assign(Object.assign({}, component), { disabled: false, data: { values: this.caseDefinitionOptions } });
44
+ }
45
+ return component;
46
+ };
47
+ }
48
+ ngOnInit() {
49
+ window['productRequestDefinitions'] = {};
50
+ this.openFormDefinitionSubscription();
51
+ this.formDefinition$.next(editProductAanvragenConnectorForm);
52
+ this.loadDefinitions();
53
+ }
54
+ ngOnDestroy() {
55
+ var _a, _b;
56
+ (_a = this.formDefinitionSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
57
+ (_b = this.translateSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
58
+ }
59
+ onSubmit(event) {
60
+ const submission = event.data;
61
+ const properties = cloneDeep(this.properties);
62
+ properties.objectsApiProperties.objectsApi.url = submission.objectsApiUrl;
63
+ properties.objectsApiProperties.objectsApi.token = submission.objectsApiToken;
64
+ properties.objectsApiProperties.objectsTypeApi.url = submission.objectTypesApiUrl;
65
+ properties.objectsApiProperties.objectsTypeApi.token = submission.objectTypesApiToken;
66
+ properties.objectsApiProperties.objectType.name = submission.objectTypeName;
67
+ properties.objectsApiProperties.objectType.title = submission.objectTypeTitle;
68
+ properties.objectsApiProperties.objectType.url = submission.objectTypeUrl;
69
+ properties.objectsApiProperties.objectType.typeVersion = submission.objectTypeVersion;
70
+ properties.openNotificatieProperties.baseUrl = submission.openNotificationsBaseUrl;
71
+ properties.openNotificatieProperties.clientId = submission.openNotificationsClientId;
72
+ properties.openNotificatieProperties.secret = submission.openNotificationsSecret;
73
+ properties.openNotificatieProperties.callbackBaseUrl =
74
+ submission.openNotificationsCallbackBaseUrl;
75
+ properties.aanvragerRolTypeUrl = submission.applicantRoleTypeUrl;
76
+ properties.typeMapping = submission.productAanvraagTypes;
77
+ this.propertiesSave.emit({ properties, name: submission.connectorName });
78
+ }
79
+ onDelete() {
80
+ this.connectorDelete.emit();
81
+ }
82
+ openFormDefinitionSubscription() {
83
+ this.formDefinitionSubscription = combineLatest([
84
+ this.formDefinition$,
85
+ this.translateService.stream('key'),
86
+ ]).subscribe(([form]) => {
87
+ const translatedForm = this.formTranslationService.translateForm(form);
88
+ this.refreshForm({ form: translatedForm });
89
+ });
90
+ }
91
+ prefillForm() {
92
+ const properties = cloneDeep(this.properties);
93
+ const submission = {};
94
+ submission.objectsApiUrl = properties.objectsApiProperties.objectsApi.url;
95
+ submission.objectsApiToken = properties.objectsApiProperties.objectsApi.token;
96
+ submission.objectTypesApiUrl = properties.objectsApiProperties.objectsTypeApi.url;
97
+ submission.objectTypesApiToken = properties.objectsApiProperties.objectsTypeApi.token;
98
+ submission.objectTypeName = properties.objectsApiProperties.objectType.name;
99
+ submission.objectTypeTitle = properties.objectsApiProperties.objectType.title;
100
+ submission.objectTypeUrl = properties.objectsApiProperties.objectType.url;
101
+ submission.objectTypeVersion = properties.objectsApiProperties.objectType.typeVersion;
102
+ submission.openNotificationsBaseUrl = properties.openNotificatieProperties.baseUrl;
103
+ submission.openNotificationsClientId = properties.openNotificatieProperties.clientId;
104
+ submission.openNotificationsSecret = properties.openNotificatieProperties.secret;
105
+ submission.openNotificationsCallbackBaseUrl =
106
+ properties.openNotificatieProperties.callbackBaseUrl;
107
+ submission.applicantRoleTypeUrl = properties.aanvragerRolTypeUrl;
108
+ submission.productAanvraagTypes = properties.typeMapping;
109
+ submission.connectorName = this.defaultName;
110
+ this.refreshForm({ submission: { data: submission } });
111
+ }
112
+ refreshForm(refreshValue) {
113
+ this.formRefresh$.next(refreshValue);
114
+ }
115
+ loadDefinitions() {
116
+ let documentDefinitions;
117
+ this.documentService
118
+ .getAllDefinitions()
119
+ .pipe(tap(resDocumentDefinitions => (documentDefinitions = resDocumentDefinitions.content)), switchMap(resDocumentDefinitions => combineLatest(resDocumentDefinitions.content.map(definition => this.documentService.findProcessDocumentDefinitions(definition.id.name)))), tap(res => {
120
+ var _a;
121
+ this.caseDefinitionOptions = documentDefinitions.map(documentDefinition => {
122
+ return { label: documentDefinition.id.name, value: documentDefinition.id.name };
123
+ });
124
+ documentDefinitions.forEach((documentDefinition, index) => {
125
+ this.processDocumentDefinitionOptions[documentDefinition.id.name] = res[index].map(processDocumentDefinition => processDocumentDefinition.id.processDefinitionKey);
126
+ });
127
+ window['productRequestDefinitions'] = this.processDocumentDefinitionOptions;
128
+ const definitionWithCaseDefinitionOptions = this.formMappingService.mapComponents(this.formDefinition$.getValue(), this.mapCaseDefinitionKeyComponent);
129
+ this.formDefinition$.next(definitionWithCaseDefinitionOptions);
130
+ if ((_a = this.properties) === null || _a === void 0 ? void 0 : _a.aanvragerRolTypeUrl) {
131
+ this.prefillForm();
132
+ }
133
+ }))
134
+ .subscribe();
135
+ }
136
+ }
137
+ EditProductAanvragenConnectorComponent.decorators = [
138
+ { type: Component, args: [{
139
+ selector: 'valtimo-edit-product-aanvragen-connector',
140
+ 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",
141
+ 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}"]
142
+ },] }
143
+ ];
144
+ EditProductAanvragenConnectorComponent.ctorParameters = () => [
145
+ { type: FormTranslationService },
146
+ { type: FormMappingService },
147
+ { type: DocumentService },
148
+ { type: TranslateService }
149
+ ];
150
+ EditProductAanvragenConnectorComponent.propDecorators = {
151
+ properties: [{ type: Input }],
152
+ defaultName: [{ type: Input }],
153
+ showDeleteButton: [{ type: Input }],
154
+ propertiesSave: [{ type: Output }],
155
+ connectorDelete: [{ type: Output }]
156
+ };
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkQ6L1dvcmtzcGFjZS92YWx0aW1vL3ZhbHRpbW8tZnJvbnRlbmQtbGlicmFyaWVzL3Byb2plY3RzL3ZhbHRpbW8vY29ubmVjdG9yLW1hbmFnZW1lbnQvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IvZWRpdC1wcm9kdWN0LWFhbnZyYWdlbi1jb25uZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUFDLGtCQUFrQixFQUFFLHNCQUFzQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFTM0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQU9uRCxNQUFNLE9BQU8sc0NBQXNDO0lBdUJqRCxZQUNtQixzQkFBOEMsRUFDOUMsa0JBQXNDLEVBQ3RDLGVBQWdDLEVBQ2hDLGdCQUFrQztRQUhsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFD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LENBQy9FLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztZQUU1RSxNQUFNLG1DQUFtQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQy9FLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQy9CLElBQUksQ0FBQyw2QkFBNkIsQ0FDbkMsQ0FBQztZQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFFL0QsVUFBSSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxtQkFBbUIsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOzs7WUEzS0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwwQ0FBMEM7Z0JBQ3BELCtyQ0FBZ0U7O2FBRWpFOzs7WUFwQjJCLHNCQUFzQjtZQUExQyxrQkFBa0I7WUFDbEIsZUFBZTtZQVlmLGdCQUFnQjs7O3lCQVNyQixLQUFLOzBCQUNMLEtBQUs7K0JBQ0wsS0FBSzs2QkFFTCxNQUFNOzhCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMSBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2VkaXRQcm9kdWN0QWFudnJhZ2VuQ29ubmVjdG9yRm9ybX0gZnJvbSAnLi9lZGl0LXByb2R1Y3QtYWFudnJhZ2VuLWNvbm5lY3Rvci5mb3JtJztcbmltcG9ydCB7Rm9ybU1hcHBpbmdTZXJ2aWNlLCBGb3JtVHJhbnNsYXRpb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9mb3JtJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0V4dGVuZGVkQ29tcG9uZW50U2NoZW1hfSBmcm9tICdmb3JtaW9qcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENvbm5lY3RvclByb3BlcnRpZXMsXG4gIERvY3VtZW50RGVmaW5pdGlvbixcbiAgRG9jdW1lbnREZWZpbml0aW9ucyxcbiAgUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbixcbn0gZnJvbSAnQHZhbHRpbW8vY29udHJhY3QnO1xuaW1wb3J0IHtGb3JtaW9Gb3JtLCBGb3JtaW9SZWZyZXNoVmFsdWV9IGZyb20gJ2FuZ3VsYXItZm9ybWlvJztcbmltcG9ydCB7Rm9ybWlvT3B0aW9uc30gZnJvbSAnYW5ndWxhci1mb3JtaW8vZm9ybWlvLmNvbW1vbic7XG5pbXBvcnQge2Nsb25lRGVlcH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge21hcCwgc3dpdGNoTWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1lZGl0LXByb2R1Y3QtYWFudnJhZ2VuLWNvbm5lY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LXByb2R1Y3QtYWFudnJhZ2VuLWNvbm5lY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQtcHJvZHVjdC1hYW52cmFnZW4tY29ubmVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRQcm9kdWN0QWFudnJhZ2VuQ29ubmVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwcm9wZXJ0aWVzOiBDb25uZWN0b3JQcm9wZXJ0aWVzO1xuICBASW5wdXQoKSBkZWZhdWx0TmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgc2hvd0RlbGV0ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBwcm9wZXJ0aWVzU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8e3Byb3BlcnRpZXM6IENvbm5lY3RvclByb3BlcnRpZXM7IG5hbWU6IHN0cmluZ30+KCk7XG4gIEBPdXRwdXQoKSBjb25uZWN0b3JEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBmb3JtUmVmcmVzaCQgPSBuZXcgU3ViamVjdDxGb3JtaW9SZWZyZXNoVmFsdWU+KCk7XG4gIGZvcm1EZWZpbml0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybWlvRm9ybT4odW5kZWZpbmVkKTtcbiAgdHJhbnNsYXRlZEZvcm1EZWZpbml0aW9uJCA9IHRoaXMuZm9ybURlZmluaXRpb24kLnBpcGUoXG4gICAgbWFwKGRlZmluaXRpb24gPT4gdGhpcy5mb3JtVHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUZvcm0oZGVmaW5pdGlvbikpXG4gICk7XG4gIGNhc2VEZWZpbml0aW9uT3B0aW9uczogQXJyYXk8e2xhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmd9PiA9IFtdO1xuICBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uT3B0aW9uczoge1tjYXNlRGVmaW5pdGlvbklkOiBzdHJpbmddOiBBcnJheTxzdHJpbmc+fSA9IHt9O1xuXG4gIHJlYWRvbmx5IG9wdGlvbnM6IEZvcm1pb09wdGlvbnMgPSB7XG4gICAgZGlzYWJsZUFsZXJ0czogdHJ1ZSxcbiAgfTtcblxuICBwcml2YXRlIGZvcm1EZWZpbml0aW9uU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHRyYW5zbGF0ZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1UcmFuc2xhdGlvblNlcnZpY2U6IEZvcm1UcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtTWFwcGluZ1NlcnZpY2U6IEZvcm1NYXBwaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgd2luZG93Wydwcm9kdWN0UmVxdWVzdERlZmluaXRpb25zJ10gPSB7fTtcbiAgICB0aGlzLm9wZW5Gb3JtRGVmaW5pdGlvblN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuZm9ybURlZmluaXRpb24kLm5leHQoZWRpdFByb2R1Y3RBYW52cmFnZW5Db25uZWN0b3JGb3JtKTtcbiAgICB0aGlzLmxvYWREZWZpbml0aW9ucygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtRGVmaW5pdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uU3VibWl0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBzdWJtaXNzaW9uID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gY2xvbmVEZWVwKHRoaXMucHJvcGVydGllcyk7XG5cbiAgICBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNBcGkudXJsID0gc3VibWlzc2lvbi5vYmplY3RzQXBpVXJsO1xuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0c0FwaS50b2tlbiA9IHN1Ym1pc3Npb24ub2JqZWN0c0FwaVRva2VuO1xuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0c1R5cGVBcGkudXJsID0gc3VibWlzc2lvbi5vYmplY3RUeXBlc0FwaVVybDtcbiAgICBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNUeXBlQXBpLnRva2VuID0gc3VibWlzc2lvbi5vYmplY3RUeXBlc0FwaVRva2VuO1xuXG4gICAgcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RUeXBlLm5hbWUgPSBzdWJtaXNzaW9uLm9iamVjdFR5cGVOYW1lO1xuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS50aXRsZSA9IHN1Ym1pc3Npb24ub2JqZWN0VHlwZVRpdGxlO1xuICAgIHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS51cmwgPSBzdWJtaXNzaW9uLm9iamVjdFR5cGVVcmw7XG4gICAgcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RUeXBlLnR5cGVWZXJzaW9uID0gc3VibWlzc2lvbi5vYmplY3RUeXBlVmVyc2lvbjtcblxuICAgIHByb3BlcnRpZXMub3Blbk5vdGlmaWNhdGllUHJvcGVydGllcy5iYXNlVXJsID0gc3VibWlzc2lvbi5vcGVuTm90aWZpY2F0aW9uc0Jhc2VVcmw7XG4gICAgcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmNsaWVudElkID0gc3VibWlzc2lvbi5vcGVuTm90aWZpY2F0aW9uc0NsaWVudElkO1xuICAgIHByb3BlcnRpZXMub3Blbk5vdGlmaWNhdGllUHJvcGVydGllcy5zZWNyZXQgPSBzdWJtaXNzaW9uLm9wZW5Ob3RpZmljYXRpb25zU2VjcmV0O1xuICAgIHByb3BlcnRpZXMub3Blbk5vdGlmaWNhdGllUHJvcGVydGllcy5jYWxsYmFja0Jhc2VVcmwgPVxuICAgICAgc3VibWlzc2lvbi5vcGVuTm90aWZpY2F0aW9uc0NhbGxiYWNrQmFzZVVybDtcblxuICAgIHByb3BlcnRpZXMuYWFudnJhZ2VyUm9sVHlwZVVybCA9IHN1Ym1pc3Npb24uYXBwbGljYW50Um9sZVR5cGVVcmw7XG5cbiAgICBwcm9wZXJ0aWVzLnR5cGVNYXBwaW5nID0gc3VibWlzc2lvbi5wcm9kdWN0QWFudnJhYWdUeXBlcztcblxuICAgIHRoaXMucHJvcGVydGllc1NhdmUuZW1pdCh7cHJvcGVydGllcywgbmFtZTogc3VibWlzc2lvbi5jb25uZWN0b3JOYW1lfSk7XG4gIH1cblxuICBvbkRlbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3RvckRlbGV0ZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Gb3JtRGVmaW5pdGlvblN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1EZWZpbml0aW9uU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmZvcm1EZWZpbml0aW9uJCxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICAgIF0pLnN1YnNjcmliZSgoW2Zvcm1dKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkRm9ybSA9IHRoaXMuZm9ybVRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVGb3JtKGZvcm0pO1xuICAgICAgdGhpcy5yZWZyZXNoRm9ybSh7Zm9ybTogdHJhbnNsYXRlZEZvcm19KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlZmlsbEZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IGNsb25lRGVlcCh0aGlzLnByb3BlcnRpZXMpO1xuICAgIGNvbnN0IHN1Ym1pc3Npb246IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG5cbiAgICBzdWJtaXNzaW9uLm9iamVjdHNBcGlVcmwgPSBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNBcGkudXJsO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0c0FwaVRva2VuID0gcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RzQXBpLnRva2VuO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0VHlwZXNBcGlVcmwgPSBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNUeXBlQXBpLnVybDtcbiAgICBzdWJtaXNzaW9uLm9iamVjdFR5cGVzQXBpVG9rZW4gPSBwcm9wZXJ0aWVzLm9iamVjdHNBcGlQcm9wZXJ0aWVzLm9iamVjdHNUeXBlQXBpLnRva2VuO1xuXG4gICAgc3VibWlzc2lvbi5vYmplY3RUeXBlTmFtZSA9IHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS5uYW1lO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0VHlwZVRpdGxlID0gcHJvcGVydGllcy5vYmplY3RzQXBpUHJvcGVydGllcy5vYmplY3RUeXBlLnRpdGxlO1xuICAgIHN1Ym1pc3Npb24ub2JqZWN0VHlwZVVybCA9IHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS51cmw7XG4gICAgc3VibWlzc2lvbi5vYmplY3RUeXBlVmVyc2lvbiA9IHByb3BlcnRpZXMub2JqZWN0c0FwaVByb3BlcnRpZXMub2JqZWN0VHlwZS50eXBlVmVyc2lvbjtcblxuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNCYXNlVXJsID0gcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmJhc2VVcmw7XG4gICAgc3VibWlzc2lvbi5vcGVuTm90aWZpY2F0aW9uc0NsaWVudElkID0gcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmNsaWVudElkO1xuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNTZWNyZXQgPSBwcm9wZXJ0aWVzLm9wZW5Ob3RpZmljYXRpZVByb3BlcnRpZXMuc2VjcmV0O1xuICAgIHN1Ym1pc3Npb24ub3Blbk5vdGlmaWNhdGlvbnNDYWxsYmFja0Jhc2VVcmwgPVxuICAgICAgcHJvcGVydGllcy5vcGVuTm90aWZpY2F0aWVQcm9wZXJ0aWVzLmNhbGxiYWNrQmFzZVVybDtcblxuICAgIHN1Ym1pc3Npb24uYXBwbGljYW50Um9sZVR5cGVVcmwgPSBwcm9wZXJ0aWVzLmFhbnZyYWdlclJvbFR5cGVVcmw7XG5cbiAgICBzdWJtaXNzaW9uLnByb2R1Y3RBYW52cmFhZ1R5cGVzID0gcHJvcGVydGllcy50eXBlTWFwcGluZztcblxuICAgIHN1Ym1pc3Npb24uY29ubmVjdG9yTmFtZSA9IHRoaXMuZGVmYXVsdE5hbWU7XG5cbiAgICB0aGlzLnJlZnJlc2hGb3JtKHtzdWJtaXNzaW9uOiB7ZGF0YTogc3VibWlzc2lvbn19KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQ2FzZURlZmluaXRpb25LZXlDb21wb25lbnQgPSAoXG4gICAgY29tcG9uZW50OiBFeHRlbmRlZENvbXBvbmVudFNjaGVtYVxuICApOiBFeHRlbmRlZENvbXBvbmVudFNjaGVtYSA9PiB7XG4gICAgaWYgKGNvbXBvbmVudC5rZXkgPT09ICdjYXNlRGVmaW5pdGlvbktleScpIHtcbiAgICAgIHJldHVybiB7Li4uY29tcG9uZW50LCBkaXNhYmxlZDogZmFsc2UsIGRhdGE6IHt2YWx1ZXM6IHRoaXMuY2FzZURlZmluaXRpb25PcHRpb25zfX07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfTtcblxuICBwcml2YXRlIHJlZnJlc2hGb3JtKHJlZnJlc2hWYWx1ZTogRm9ybWlvUmVmcmVzaFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtUmVmcmVzaCQubmV4dChyZWZyZXNoVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGVmaW5pdGlvbnMoKTogdm9pZCB7XG4gICAgbGV0IGRvY3VtZW50RGVmaW5pdGlvbnM6IEFycmF5PERvY3VtZW50RGVmaW5pdGlvbj47XG5cbiAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgLmdldEFsbERlZmluaXRpb25zKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAocmVzRG9jdW1lbnREZWZpbml0aW9ucyA9PiAoZG9jdW1lbnREZWZpbml0aW9ucyA9IHJlc0RvY3VtZW50RGVmaW5pdGlvbnMuY29udGVudCkpLFxuICAgICAgICBzd2l0Y2hNYXAocmVzRG9jdW1lbnREZWZpbml0aW9ucyA9PlxuICAgICAgICAgIGNvbWJpbmVMYXRlc3QoXG4gICAgICAgICAgICByZXNEb2N1bWVudERlZmluaXRpb25zLmNvbnRlbnQubWFwKGRlZmluaXRpb24gPT5cbiAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZmluZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zKGRlZmluaXRpb24uaWQubmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICAgIHRoaXMuY2FzZURlZmluaXRpb25PcHRpb25zID0gZG9jdW1lbnREZWZpbml0aW9ucy5tYXAoZG9jdW1lbnREZWZpbml0aW9uID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7bGFiZWw6IGRvY3VtZW50RGVmaW5pdGlvbi5pZC5uYW1lLCB2YWx1ZTogZG9jdW1lbnREZWZpbml0aW9uLmlkLm5hbWV9O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9ucy5mb3JFYWNoKChkb2N1bWVudERlZmluaXRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NEb2N1bWVudERlZmluaXRpb25PcHRpb25zW2RvY3VtZW50RGVmaW5pdGlvbi5pZC5uYW1lXSA9IHJlc1tpbmRleF0ubWFwKFxuICAgICAgICAgICAgICBwcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uID0+IHByb2Nlc3NEb2N1bWVudERlZmluaXRpb24uaWQucHJvY2Vzc0RlZmluaXRpb25LZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB3aW5kb3dbJ3Byb2R1Y3RSZXF1ZXN0RGVmaW5pdGlvbnMnXSA9IHRoaXMucHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbk9wdGlvbnM7XG5cbiAgICAgICAgICBjb25zdCBkZWZpbml0aW9uV2l0aENhc2VEZWZpbml0aW9uT3B0aW9ucyA9IHRoaXMuZm9ybU1hcHBpbmdTZXJ2aWNlLm1hcENvbXBvbmVudHMoXG4gICAgICAgICAgICB0aGlzLmZvcm1EZWZpbml0aW9uJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgdGhpcy5tYXBDYXNlRGVmaW5pdGlvbktleUNvbXBvbmVudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmZvcm1EZWZpbml0aW9uJC5uZXh0KGRlZmluaXRpb25XaXRoQ2FzZURlZmluaXRpb25PcHRpb25zKTtcblxuICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXM/LmFhbnZyYWdlclJvbFR5cGVVcmwpIHtcbiAgICAgICAgICAgIHRoaXMucHJlZmlsbEZvcm0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==