@valtimo/connector-management 4.15.2-next-main.8
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.
- package/README.md +24 -0
- package/bundles/valtimo-connector-management.umd.js +2087 -0
- package/bundles/valtimo-connector-management.umd.js.map +1 -0
- package/bundles/valtimo-connector-management.umd.min.js +16 -0
- package/bundles/valtimo-connector-management.umd.min.js.map +1 -0
- package/esm2015/lib/components/add-connector/add-connector.component.js +79 -0
- package/esm2015/lib/components/connector-link-extension/connector-link-extension.component.js +95 -0
- package/esm2015/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.js +136 -0
- package/esm2015/lib/components/connector-management/connector-management.component.js +95 -0
- package/esm2015/lib/components/connector-modal/connector-modal.component.js +58 -0
- package/esm2015/lib/components/edit-connector-form/edit-connector-form.component.js +42 -0
- package/esm2015/lib/components/edit-connector-properties/edit-connector-properties.component.js +140 -0
- package/esm2015/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.js +177 -0
- package/esm2015/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.js +494 -0
- package/esm2015/lib/components/modify-connector/modify-connector.component.js +73 -0
- package/esm2015/lib/components/multi-value-connector-property/multi-value-connector-property.component.js +92 -0
- package/esm2015/lib/connector-management-routing.js +44 -0
- package/esm2015/lib/connector-management.module.js +76 -0
- package/esm2015/lib/extension/connector-management.extension.init.js +39 -0
- package/esm2015/lib/services/connector-management/connector-management.service.js +60 -0
- package/esm2015/lib/services/connector-management-state/connector-management-state.service.js +83 -0
- package/esm2015/lib/services/object-api-sync/object-api-sync.service.js +51 -0
- package/esm2015/public-api.js +32 -0
- package/esm2015/valtimo-connector-management.js +8 -0
- package/fesm2015/valtimo-connector-management.js +1771 -0
- package/fesm2015/valtimo-connector-management.js.map +1 -0
- package/lib/components/add-connector/add-connector.component.d.ts +26 -0
- package/lib/components/connector-link-extension/connector-link-extension.component.d.ts +25 -0
- package/lib/components/connector-link-extension-modal/connector-link-extension-modal.component.d.ts +40 -0
- package/lib/components/connector-management/connector-management.component.d.ts +28 -0
- package/lib/components/connector-modal/connector-modal.component.d.ts +16 -0
- package/lib/components/edit-connector-form/edit-connector-form.component.d.ts +15 -0
- package/lib/components/edit-connector-properties/edit-connector-properties.component.d.ts +35 -0
- package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.component.d.ts +43 -0
- package/lib/components/edit-product-aanvragen-connector/edit-product-aanvragen-connector.form.d.ts +215 -0
- package/lib/components/modify-connector/modify-connector.component.d.ts +19 -0
- package/lib/components/multi-value-connector-property/multi-value-connector-property.component.d.ts +26 -0
- package/lib/connector-management-routing.d.ts +2 -0
- package/lib/connector-management.module.d.ts +2 -0
- package/lib/extension/connector-management.extension.init.d.ts +2 -0
- package/lib/services/connector-management/connector-management.service.d.ts +17 -0
- package/lib/services/connector-management-state/connector-management-state.service.d.ts +26 -0
- package/lib/services/object-api-sync/object-api-sync.service.d.ts +14 -0
- package/package.json +19 -0
- package/public-api.d.ts +13 -0
- package/valtimo-connector-management.d.ts +7 -0
- package/valtimo-connector-management.metadata.json +1 -0
|
@@ -0,0 +1,136 @@
|
|
|
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, ViewChild } from '@angular/core';
|
|
17
|
+
import { ModalComponent } from '@valtimo/components';
|
|
18
|
+
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
19
|
+
import { map, switchMap, take, tap } from 'rxjs/operators';
|
|
20
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
21
|
+
import { ActivatedRoute } from '@angular/router';
|
|
22
|
+
import { AlertService } from '@valtimo/components';
|
|
23
|
+
import { ConnectorManagementService } from '../../services/connector-management/connector-management.service';
|
|
24
|
+
import { ConnectorManagementStateService } from '../../services/connector-management-state/connector-management-state.service';
|
|
25
|
+
import { ObjectApiSyncService } from '../../services/object-api-sync/object-api-sync.service';
|
|
26
|
+
export class ConnectorLinkExtensionModalComponent {
|
|
27
|
+
constructor(connectorManagementService, translateService, stateService, objectApiSyncService, route, alertService) {
|
|
28
|
+
this.connectorManagementService = connectorManagementService;
|
|
29
|
+
this.translateService = translateService;
|
|
30
|
+
this.stateService = stateService;
|
|
31
|
+
this.objectApiSyncService = objectApiSyncService;
|
|
32
|
+
this.route = route;
|
|
33
|
+
this.alertService = alertService;
|
|
34
|
+
this.loading$ = new BehaviorSubject(true);
|
|
35
|
+
this.fields$ = new BehaviorSubject([]);
|
|
36
|
+
this.currentPageAndSize$ = new BehaviorSubject({
|
|
37
|
+
page: 0,
|
|
38
|
+
size: 10,
|
|
39
|
+
});
|
|
40
|
+
this.pageSizes$ = new BehaviorSubject({
|
|
41
|
+
collectionSize: 0,
|
|
42
|
+
maxPaginationItemSize: 5
|
|
43
|
+
});
|
|
44
|
+
this.pagination$ = combineLatest([this.currentPageAndSize$, this.pageSizes$])
|
|
45
|
+
.pipe(map(([currentPage, sizes]) => (Object.assign(Object.assign(Object.assign({}, currentPage), sizes), { page: currentPage.page + 1 }))));
|
|
46
|
+
this.connectorInstances$ = combineLatest([
|
|
47
|
+
this.currentPageAndSize$,
|
|
48
|
+
this.connectorManagementService.getConnectorTypes(),
|
|
49
|
+
this.translateService.stream('key'),
|
|
50
|
+
this.stateService.refresh$
|
|
51
|
+
])
|
|
52
|
+
.pipe(tap(() => this.setFields()), switchMap(([currentPage, types]) => this.connectorManagementService.getConnectorInstancesByType(types.find((type) => type.name.toLowerCase().includes('objectsapi')).id, { page: currentPage.page, size: currentPage.size })), tap((instanceRes) => {
|
|
53
|
+
this.pageSizes$.pipe(take(1)).subscribe((sizes) => {
|
|
54
|
+
this.pageSizes$.next(Object.assign(Object.assign({}, sizes), { collectionSize: instanceRes.totalElements }));
|
|
55
|
+
});
|
|
56
|
+
}), map((res) => res.content), tap(() => this.loading$.next(false)));
|
|
57
|
+
this.noObjectsApiConnectors$ = this.connectorInstances$.pipe(map((instances) => !instances || instances.length === 0));
|
|
58
|
+
this.disabled$ = this.stateService.inputDisabled$;
|
|
59
|
+
}
|
|
60
|
+
ngAfterViewInit() {
|
|
61
|
+
this.showSubscription = this.stateService.showExtensionModal$.subscribe((show) => {
|
|
62
|
+
if (show) {
|
|
63
|
+
this.show();
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.hide();
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
ngOnDestroy() {
|
|
71
|
+
var _a;
|
|
72
|
+
(_a = this.showSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
73
|
+
}
|
|
74
|
+
paginationClicked(newPageNumber) {
|
|
75
|
+
this.currentPageAndSize$.pipe(take(1)).subscribe((currentPage) => {
|
|
76
|
+
this.currentPageAndSize$.next(Object.assign(Object.assign({}, currentPage), { page: newPageNumber - 1 }));
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
paginationSet(newPageSize) {
|
|
80
|
+
if (newPageSize) {
|
|
81
|
+
this.currentPageAndSize$.pipe(take(1)).subscribe((currentPage) => {
|
|
82
|
+
this.currentPageAndSize$.next(Object.assign(Object.assign({}, currentPage), { size: newPageSize }));
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
rowClicked(instance) {
|
|
87
|
+
var _a, _b;
|
|
88
|
+
const connectorInstanceId = instance.id;
|
|
89
|
+
const enabled = true;
|
|
90
|
+
const documentDefinitionName = this.route.snapshot.paramMap.get('name');
|
|
91
|
+
const objectTypeUrl = (_b = (_a = instance.properties) === null || _a === void 0 ? void 0 : _a.objectType) === null || _b === void 0 ? void 0 : _b.url;
|
|
92
|
+
const splitObjectTypeUrl = objectTypeUrl === null || objectTypeUrl === void 0 ? void 0 : objectTypeUrl.split('/');
|
|
93
|
+
const objectTypeId = splitObjectTypeUrl[splitObjectTypeUrl.length - 1];
|
|
94
|
+
this.stateService.disableInput();
|
|
95
|
+
this.objectApiSyncService.createObjectSyncConfig({ connectorInstanceId, enabled, documentDefinitionName, objectTypeId })
|
|
96
|
+
.subscribe((res) => {
|
|
97
|
+
this.alertService.success(this.translateService.instant('connectorManagement.extension.addSyncSuccess'));
|
|
98
|
+
this.stateService.hideExtensionModal();
|
|
99
|
+
this.stateService.enableInput();
|
|
100
|
+
this.stateService.refresh();
|
|
101
|
+
this.stateService.setLastConfigIdAdded(res.objectSyncConfig.id);
|
|
102
|
+
}, () => {
|
|
103
|
+
this.stateService.enableInput();
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
setFields() {
|
|
107
|
+
const getTranslatedLabel = (key) => this.translateService.instant(`connectorManagement.labels.${key}`);
|
|
108
|
+
const keys = ['name'];
|
|
109
|
+
this.fields$.next(keys.map((key) => ({ label: getTranslatedLabel(key), key })));
|
|
110
|
+
}
|
|
111
|
+
show() {
|
|
112
|
+
this.modal.show();
|
|
113
|
+
}
|
|
114
|
+
hide() {
|
|
115
|
+
this.modal.hide();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
ConnectorLinkExtensionModalComponent.decorators = [
|
|
119
|
+
{ type: Component, args: [{
|
|
120
|
+
selector: 'valtimo-connector-link-extension-modal',
|
|
121
|
+
template: "<valtimo-modal #modal [title]=\"'connectorManagement.extension.buttonText'| translate\">\n <div class=\"mt-2\" body *ngIf=\"{\n connectorInstances: connectorInstances$ | async,\n fields: fields$ | async,\n pagination: pagination$ | async,\n loading: loading$ | async,\n disabled: disabled$ | async,\n noConnectors: noObjectsApiConnectors$ | async\n } as obs\">\n <div *ngIf=\"obs.loading === false; else loading\" [ngClass]=\"{disabled: obs.disabled }\">\n <ng-container *ngIf=\"!obs.noConnectors; else noConnectors\">\n <p class=\"lead\">{{'connectorManagement.extension.clickToSync' | translate}}</p>\n <valtimo-widget>\n <valtimo-list\n [items]=\"obs.connectorInstances\"\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [viewMode]=\"false\"\n [isSearchable]=\"false\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"connectorManagementList\"\n (paginationClicked)=\"paginationClicked($event)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"rowClicked($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">{{ 'connectorManagement.title' | translate }}</h3>\n <h5 class=\"list-header-description\">{{ 'connectorManagement.subtitle' | translate }}</h5>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </ng-container>\n </div>\n </div>\n</valtimo-modal>\n\n\n<ng-template #loading>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #noConnectors>\n <p class=\"lead\">{{'connectorManagement.extension.noConnectors' | translate}}</p>\n</ng-template>\n",
|
|
122
|
+
styles: [".disabled{filter:grayscale(1);opacity:.8;pointer-events:none}"]
|
|
123
|
+
},] }
|
|
124
|
+
];
|
|
125
|
+
ConnectorLinkExtensionModalComponent.ctorParameters = () => [
|
|
126
|
+
{ type: ConnectorManagementService },
|
|
127
|
+
{ type: TranslateService },
|
|
128
|
+
{ type: ConnectorManagementStateService },
|
|
129
|
+
{ type: ObjectApiSyncService },
|
|
130
|
+
{ type: ActivatedRoute },
|
|
131
|
+
{ type: AlertService }
|
|
132
|
+
];
|
|
133
|
+
ConnectorLinkExtensionModalComponent.propDecorators = {
|
|
134
|
+
modal: [{ type: ViewChild, args: ['modal',] }]
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdG9yLWxpbmstZXh0ZW5zaW9uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29ubmVjdG9yLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Nvbm5lY3Rvci1saW5rLWV4dGVuc2lvbi1tb2RhbC9jb25uZWN0b3ItbGluay1leHRlbnNpb24tbW9kYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFnQixTQUFTLEVBQWEsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBK0IsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFDNUcsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sOEVBQThFLENBQUM7QUFDN0gsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0RBQXdELENBQUM7QUFPNUYsTUFBTSxPQUFPLG9DQUFvQztJQW9EL0MsWUFDbUIsMEJBQXNELEVBQ3RELGdCQUFrQyxFQUNsQyxZQUE2QyxFQUM3QyxvQkFBMEMsRUFDMUMsS0FBcUIsRUFDckIsWUFBMEI7UUFMMUIsK0JBQTBCLEdB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RSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvRyxNQUFNLElBQUksR0FBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sSUFBSTtRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7O1lBcklGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsd0NBQXdDO2dCQUNsRCw4eERBQThEOzthQUUvRDs7O1lBUk8sMEJBQTBCO1lBSDFCLGdCQUFnQjtZQUloQiwrQkFBK0I7WUFDL0Isb0JBQW9CO1lBSnBCLGNBQWM7WUFDZCxZQUFZOzs7b0JBV2pCLFNBQVMsU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE9uRGVzdHJveSwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TW9kYWxDb21wb25lbnR9IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1BhZ2luYXRpb24sIENvbm5lY3Rvckluc3RhbmNlfSBmcm9tICdAdmFsdGltby9jb250cmFjdCc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QWxlcnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7Q29ubmVjdG9yTWFuYWdlbWVudFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvbm5lY3Rvci1tYW5hZ2VtZW50L2Nvbm5lY3Rvci1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtDb25uZWN0b3JNYW5hZ2VtZW50U3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25uZWN0b3ItbWFuYWdlbWVudC1zdGF0ZS9jb25uZWN0b3ItbWFuYWdlbWVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7T2JqZWN0QXBpU3luY1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29iamVjdC1hcGktc3luYy9vYmplY3QtYXBpLXN5bmMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tY29ubmVjdG9yLWxpbmstZXh0ZW5zaW9uLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nvbm5lY3Rvci1saW5rLWV4dGVuc2lvbi1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nvbm5lY3Rvci1saW5rLWV4dGVuc2lvbi1tb2RhbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvbm5lY3RvckxpbmtFeHRlbnNpb25Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ21vZGFsJykgbW9kYWw6IE1vZGFsQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgc2hvd1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICByZWFkb25seSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcmVhZG9ubHkgZmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8IHtrZXk6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9Pj4oW10pO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRQYWdlQW5kU2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcnRpYWw8UGFnaW5hdGlvbj4+KHtcbiAgICBwYWdlOiAwLFxuICAgIHNpemU6IDEwLFxuICB9KTtcblxuICByZWFkb25seSBwYWdlU2l6ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJ0aWFsPFBhZ2luYXRpb24+Pih7XG4gICAgY29sbGVjdGlvblNpemU6IDAsXG4gICAgbWF4UGFnaW5hdGlvbkl0ZW1TaXplOiA1XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRpb24kOiBPYnNlcnZhYmxlPFBhZ2luYXRpb24+ID0gY29tYmluZUxhdGVzdChbdGhpcy5jdXJyZW50UGFnZUFuZFNpemUkLCB0aGlzLnBhZ2VTaXplcyRdKVxuICAgIC5waXBlKG1hcCgoW2N1cnJlbnRQYWdlLCBzaXplc10pID0+ICh7Li4uY3VycmVudFBhZ2UsIC4uLnNpemVzLCBwYWdlOiBjdXJyZW50UGFnZS5wYWdlICsgMX0gYXMgUGFnaW5hdGlvbikpKTtcblxuICByZWFkb25seSBjb25uZWN0b3JJbnN0YW5jZXMkOiBPYnNlcnZhYmxlPEFycmF5PENvbm5lY3Rvckluc3RhbmNlPj4gPVxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUFuZFNpemUkLFxuICAgICAgdGhpcy5jb25uZWN0b3JNYW5hZ2VtZW50U2VydmljZS5nZXRDb25uZWN0b3JUeXBlcygpLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gICAgICB0aGlzLnN0YXRlU2VydmljZS5yZWZyZXNoJFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0RmllbGRzKCkpLFxuICAgICAgICBzd2l0Y2hNYXAoKFtjdXJyZW50UGFnZSwgdHlwZXNdKSA9PlxuICAgICAgICAgIHRoaXMuY29ubmVjdG9yTWFuYWdlbWVudFNlcnZpY2UuZ2V0Q29ubmVjdG9ySW5zdGFuY2VzQnlUeXBlKFxuICAgICAgICAgICAgdHlwZXMuZmluZCgodHlwZSkgPT4gdHlwZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ29iamVjdHNhcGknKSkuaWQsXG4gICAgICAgICAgICB7cGFnZTogY3VycmVudFBhZ2UucGFnZSwgc2l6ZTogY3VycmVudFBhZ2Uuc2l6ZX1cbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoaW5zdGFuY2VSZXMpID0+IHtcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHNpemVzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplcyQubmV4dCh7Li4uc2l6ZXMsIGNvbGxlY3Rpb25TaXplOiBpbnN0YW5jZVJlcy50b3RhbEVsZW1lbnRzfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKHJlcykgPT4gcmVzLmNvbnRlbnQpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKSlcbiAgICAgICk7XG5cbiAgcmVhZG9ubHkgbm9PYmplY3RzQXBpQ29ubmVjdG9ycyQgPSB0aGlzLmNvbm5lY3Rvckluc3RhbmNlcyQucGlwZShcbiAgICBtYXAoKGluc3RhbmNlcykgPT4gIWluc3RhbmNlcyB8fCBpbnN0YW5jZXMubGVuZ3RoID09PSAwKVxuICApO1xuXG4gIHJlYWRvbmx5IGRpc2FibGVkJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0b3JNYW5hZ2VtZW50U2VydmljZTogQ29ubmVjdG9yTWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBDb25uZWN0b3JNYW5hZ2VtZW50U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QXBpU3luY1NlcnZpY2U6IE9iamVjdEFwaVN5bmNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuZGlzYWJsZWQkID0gdGhpcy5zdGF0ZVNlcnZpY2UuaW5wdXREaXNhYmxlZCQ7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3Vic2NyaXB0aW9uID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc2hvd0V4dGVuc2lvbk1vZGFsJC5zdWJzY3JpYmUoKHNob3cpID0+IHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwYWdpbmF0aW9uQ2xpY2tlZChuZXdQYWdlTnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UGFnZUFuZFNpemUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjdXJyZW50UGFnZSkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUFuZFNpemUkLm5leHQoey4uLmN1cnJlbnRQYWdlLCBwYWdlOiBuZXdQYWdlTnVtYmVyIC0gMX0pO1xuICAgIH0pO1xuICB9XG5cbiAgcGFnaW5hdGlvblNldChuZXdQYWdlU2l6ZSk6IHZvaWQge1xuICAgIGlmIChuZXdQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUFuZFNpemUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjdXJyZW50UGFnZSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlQW5kU2l6ZSQubmV4dCh7Li4uY3VycmVudFBhZ2UsIHNpemU6IG5ld1BhZ2VTaXplfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByb3dDbGlja2VkKGluc3RhbmNlOiBDb25uZWN0b3JJbnN0YW5jZSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbm5lY3Rvckluc3RhbmNlSWQgPSBpbnN0YW5jZS5pZDtcbiAgICBjb25zdCBlbmFibGVkID0gdHJ1ZTtcbiAgICBjb25zdCBkb2N1bWVudERlZmluaXRpb25OYW1lID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBvYmplY3RUeXBlVXJsID0gKGluc3RhbmNlIGFzIGFueSkucHJvcGVydGllcz8ub2JqZWN0VHlwZT8udXJsO1xuICAgIGNvbnN0IHNwbGl0T2JqZWN0VHlwZVVybCA9IG9iamVjdFR5cGVVcmw/LnNwbGl0KCcvJyk7XG4gICAgY29uc3Qgb2JqZWN0VHlwZUlkID0gc3BsaXRPYmplY3RUeXBlVXJsW3NwbGl0T2JqZWN0VHlwZVVybC5sZW5ndGggLSAxXTtcblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmRpc2FibGVJbnB1dCgpO1xuXG4gICAgdGhpcy5vYmplY3RBcGlTeW5jU2VydmljZS5jcmVhdGVPYmplY3RTeW5jQ29uZmlnKHtjb25uZWN0b3JJbnN0YW5jZUlkLCBlbmFibGVkLCBkb2N1bWVudERlZmluaXRpb25OYW1lLCBvYmplY3RUeXBlSWR9KVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Nvbm5lY3Rvck1hbmFnZW1lbnQuZXh0ZW5zaW9uLmFkZFN5bmNTdWNjZXNzJykpO1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmhpZGVFeHRlbnNpb25Nb2RhbCgpO1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UucmVmcmVzaCgpO1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldExhc3RDb25maWdJZEFkZGVkKHJlcy5vYmplY3RTeW5jQ29uZmlnLmlkKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmVuYWJsZUlucHV0KCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldEZpZWxkcygpOiB2b2lkIHtcbiAgICBjb25zdCBnZXRUcmFuc2xhdGVkTGFiZWwgPSAoa2V5OiBzdHJpbmcpID0+IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBjb25uZWN0b3JNYW5hZ2VtZW50LmxhYmVscy4ke2tleX1gKTtcbiAgICBjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gWyduYW1lJ107XG4gICAgdGhpcy5maWVsZHMkLm5leHQoa2V5cy5tYXAoKGtleSkgPT4gKHtsYWJlbDogZ2V0VHJhbnNsYXRlZExhYmVsKGtleSksIGtleX0pKSk7XG4gIH1cblxuICBwcml2YXRlIHNob3coKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbC5zaG93KCk7XG4gIH1cblxuICBwcml2YXRlIGhpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbC5oaWRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,95 @@
|
|
|
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 } from '@angular/core';
|
|
17
|
+
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
18
|
+
import { map, switchMap, take, tap } from 'rxjs/operators';
|
|
19
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
20
|
+
import { ConnectorManagementService } from '../../services/connector-management/connector-management.service';
|
|
21
|
+
import { ConnectorManagementStateService } from '../../services/connector-management-state/connector-management-state.service';
|
|
22
|
+
export class ConnectorManagementComponent {
|
|
23
|
+
constructor(connectorManagementService, translateService, stateService) {
|
|
24
|
+
this.connectorManagementService = connectorManagementService;
|
|
25
|
+
this.translateService = translateService;
|
|
26
|
+
this.stateService = stateService;
|
|
27
|
+
this.loading$ = new BehaviorSubject(true);
|
|
28
|
+
this.fields$ = new BehaviorSubject([]);
|
|
29
|
+
this.currentPageAndSize$ = new BehaviorSubject({
|
|
30
|
+
page: 0,
|
|
31
|
+
size: 10,
|
|
32
|
+
});
|
|
33
|
+
this.pageSizes$ = new BehaviorSubject({
|
|
34
|
+
collectionSize: 0,
|
|
35
|
+
maxPaginationItemSize: 5
|
|
36
|
+
});
|
|
37
|
+
this.pagination$ = combineLatest([this.currentPageAndSize$, this.pageSizes$])
|
|
38
|
+
.pipe(map(([currentPage, sizes]) => (Object.assign(Object.assign(Object.assign({}, currentPage), sizes), { page: currentPage.page + 1 }))));
|
|
39
|
+
this.connectorInstances$ = combineLatest([this.currentPageAndSize$, this.translateService.stream('key'), this.stateService.refresh$])
|
|
40
|
+
.pipe(tap(() => this.setFields()), switchMap(([currentPage]) => combineLatest([
|
|
41
|
+
this.connectorManagementService.getConnectorInstances({ page: currentPage.page, size: currentPage.size }),
|
|
42
|
+
this.connectorManagementService.getConnectorTypes()
|
|
43
|
+
])), tap(([instanceRes]) => {
|
|
44
|
+
this.pageSizes$.pipe(take(1)).subscribe((sizes) => {
|
|
45
|
+
this.pageSizes$.next(Object.assign(Object.assign({}, sizes), { collectionSize: instanceRes.totalElements }));
|
|
46
|
+
});
|
|
47
|
+
}), map(([instanceRes, typesRes]) => instanceRes.content.map((instance) => {
|
|
48
|
+
var _a;
|
|
49
|
+
return Object.assign(Object.assign({}, instance), { typeName: (_a = typesRes.find((type) => type.id === instance.type.id)) === null || _a === void 0 ? void 0 : _a.name });
|
|
50
|
+
})), tap(() => this.loading$.next(false)));
|
|
51
|
+
this.modalType$ = new BehaviorSubject('add');
|
|
52
|
+
}
|
|
53
|
+
ngOnDestroy() {
|
|
54
|
+
this.stateService.hideModal();
|
|
55
|
+
}
|
|
56
|
+
paginationClicked(newPageNumber) {
|
|
57
|
+
this.currentPageAndSize$.pipe(take(1)).subscribe((currentPage) => {
|
|
58
|
+
this.currentPageAndSize$.next(Object.assign(Object.assign({}, currentPage), { page: newPageNumber - 1 }));
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
paginationSet(newPageSize) {
|
|
62
|
+
if (newPageSize) {
|
|
63
|
+
this.currentPageAndSize$.pipe(take(1)).subscribe((currentPage) => {
|
|
64
|
+
this.currentPageAndSize$.next(Object.assign(Object.assign({}, currentPage), { size: newPageSize }));
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
rowClicked(instance) {
|
|
69
|
+
this.modalType$.next('modify');
|
|
70
|
+
this.stateService.setConnectorInstance(instance);
|
|
71
|
+
this.stateService.showModal();
|
|
72
|
+
}
|
|
73
|
+
showAddModal() {
|
|
74
|
+
this.modalType$.next('add');
|
|
75
|
+
this.stateService.showModal();
|
|
76
|
+
}
|
|
77
|
+
setFields() {
|
|
78
|
+
const getTranslatedLabel = (key) => this.translateService.instant(`connectorManagement.labels.${key}`);
|
|
79
|
+
const keys = ['name', 'typeName'];
|
|
80
|
+
this.fields$.next(keys.map((key) => ({ label: getTranslatedLabel(key), key })));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
ConnectorManagementComponent.decorators = [
|
|
84
|
+
{ type: Component, args: [{
|
|
85
|
+
selector: 'valtimo-connector-management',
|
|
86
|
+
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 class=\"main-content pt-0\" *ngIf=\"{\n connectorInstances: connectorInstances$ | async,\n fields: fields$ | async,\n pagination: pagination$ | async,\n loading: loading$ | async\n } as obs\">\n <div class=\"container-fluid\">\n <ng-container *ngTemplateOutlet=\"buttons;context:{loading: obs.loading}\"></ng-container>\n <valtimo-widget *ngIf=\"obs.loading === false; else loading\">\n <valtimo-list\n [items]=\"obs.connectorInstances\"\n [fields]=\"obs.fields\"\n [header]=\"true\"\n [viewMode]=\"true\"\n [isSearchable]=\"false\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"connectorManagementList\"\n (paginationClicked)=\"paginationClicked($event)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"rowClicked($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">{{ 'connectorManagement.title' | translate }}</h3>\n <h5 class=\"list-header-description\">{{ 'connectorManagement.subtitle' | translate }}</h5>\n </div>\n </valtimo-list>\n </valtimo-widget>\n </div>\n</div>\n\n<valtimo-connector-modal [modalType]=\"modalType$ | async\">\n</valtimo-connector-modal>\n\n<ng-template #buttons let-loading=\"loading\">\n <div class=\"btn-group mt-m3px mb-3 float-right\">\n <button class=\"btn btn-primary btn-space mr-0\" [disabled]=\"loading\" (click)=\"showAddModal()\">\n <i class=\"icon mdi mdi-plus\"></i> \n {{ 'connectorManagement.add' | translate }}\n </button>\n </div>\n <div class=\"clearfix\"></div>\n</ng-template>\n\n<ng-template #loading>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n",
|
|
87
|
+
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 */"]
|
|
88
|
+
},] }
|
|
89
|
+
];
|
|
90
|
+
ConnectorManagementComponent.ctorParameters = () => [
|
|
91
|
+
{ type: ConnectorManagementService },
|
|
92
|
+
{ type: TranslateService },
|
|
93
|
+
{ type: ConnectorManagementStateService }
|
|
94
|
+
];
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdG9yLW1hbmFnZW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb25uZWN0b3ItbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvY29ubmVjdG9yLW1hbmFnZW1lbnQvY29ubmVjdG9yLW1hbmFnZW1lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUVoRSxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFDNUcsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sOEVBQThFLENBQUM7QUFPN0gsTUFBTSxPQUFPLDRCQUE0QjtJQTBDdkMsWUFDbUIsMEJBQXNELEVBQ3RELGdCQUFrQyxFQUNsQyxZQUE2QztRQUY3QywrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBQ3RELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsaUJBQVksR0FBWixZQUFZLENBQWlDO1FBM0N2RCxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFFOUMsWUFBTyxHQUFHLElBQUksZUFBZSxDQUF3QyxFQUFFLENBQUMsQ0FBQztRQUV6RSx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBc0I7WUFDdEUsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsRUFBRTtTQUNULENB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RDFCLGdCQUFnQjtZQUVoQiwrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29ubmVjdG9ySW5zdGFuY2UsIFBhZ2luYXRpb24sIENvbm5lY3Rvck1vZGFsfSBmcm9tICdAdmFsdGltby9jb250cmFjdCc7XG5pbXBvcnQge21hcCwgc3dpdGNoTWFwLCB0YWtlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0Nvbm5lY3Rvck1hbmFnZW1lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25uZWN0b3ItbWFuYWdlbWVudC9jb25uZWN0b3ItbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7Q29ubmVjdG9yTWFuYWdlbWVudFN0YXRlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29ubmVjdG9yLW1hbmFnZW1lbnQtc3RhdGUvY29ubmVjdG9yLW1hbmFnZW1lbnQtc3RhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tY29ubmVjdG9yLW1hbmFnZW1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29ubmVjdG9yLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb25uZWN0b3ItbWFuYWdlbWVudC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvbm5lY3Rvck1hbmFnZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHJlYWRvbmx5IGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICByZWFkb25seSBmaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTwge2tleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+PihbXSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFBhZ2VBbmRTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFydGlhbDxQYWdpbmF0aW9uPj4oe1xuICAgIHBhZ2U6IDAsXG4gICAgc2l6ZTogMTAsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VTaXplcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcnRpYWw8UGFnaW5hdGlvbj4+KHtcbiAgICBjb2xsZWN0aW9uU2l6ZTogMCxcbiAgICBtYXhQYWdpbmF0aW9uSXRlbVNpemU6IDVcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbiQ6IE9ic2VydmFibGU8UGFnaW5hdGlvbj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmN1cnJlbnRQYWdlQW5kU2l6ZSQsIHRoaXMucGFnZVNpemVzJF0pXG4gICAgLnBpcGUobWFwKChbY3VycmVudFBhZ2UsIHNpemVzXSkgPT4gKHsuLi5jdXJyZW50UGFnZSwgLi4uc2l6ZXMsIHBhZ2U6IGN1cnJlbnRQYWdlLnBhZ2UgKyAxfSBhcyBQYWdpbmF0aW9uKSkpO1xuXG4gIHJlYWRvbmx5IGNvbm5lY3Rvckluc3RhbmNlcyQ6IE9ic2VydmFibGU8QXJyYXk8Q29ubmVjdG9ySW5zdGFuY2U+PiA9XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5jdXJyZW50UGFnZUFuZFNpemUkLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSwgdGhpcy5zdGF0ZVNlcnZpY2UucmVmcmVzaCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldEZpZWxkcygpKSxcbiAgICAgICAgc3dpdGNoTWFwKChbY3VycmVudFBhZ2VdKSA9PlxuICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0b3JNYW5hZ2VtZW50U2VydmljZS5nZXRDb25uZWN0b3JJbnN0YW5jZXMoe3BhZ2U6IGN1cnJlbnRQYWdlLnBhZ2UsIHNpemU6IGN1cnJlbnRQYWdlLnNpemV9KSxcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdG9yTWFuYWdlbWVudFNlcnZpY2UuZ2V0Q29ubmVjdG9yVHlwZXMoKVxuICAgICAgICAgIF0pXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoW2luc3RhbmNlUmVzXSkgPT4ge1xuICAgICAgICAgIHRoaXMucGFnZVNpemVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoc2l6ZXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemVzJC5uZXh0KHsuLi5zaXplcywgY29sbGVjdGlvblNpemU6IGluc3RhbmNlUmVzLnRvdGFsRWxlbWVudHN9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgoW2luc3RhbmNlUmVzLCB0eXBlc1Jlc10pID0+IGluc3RhbmNlUmVzLmNvbnRlbnQubWFwKChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7Li4uaW5zdGFuY2UsIHR5cGVOYW1lOiB0eXBlc1Jlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmlkID09PSBpbnN0YW5jZS50eXBlLmlkKT8ubmFtZX07XG4gICAgICAgIH0pKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dChmYWxzZSkpXG4gICAgICApO1xuXG4gIHJlYWRvbmx5IG1vZGFsVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rvck1vZGFsPignYWRkJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0b3JNYW5hZ2VtZW50U2VydmljZTogQ29ubmVjdG9yTWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBDb25uZWN0b3JNYW5hZ2VtZW50U3RhdGVTZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuaGlkZU1vZGFsKCk7XG4gIH1cblxuICBwYWdpbmF0aW9uQ2xpY2tlZChuZXdQYWdlTnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UGFnZUFuZFNpemUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjdXJyZW50UGFnZSkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUFuZFNpemUkLm5leHQoey4uLmN1cnJlbnRQYWdlLCBwYWdlOiBuZXdQYWdlTnVtYmVyIC0gMX0pO1xuICAgIH0pO1xuICB9XG5cbiAgcGFnaW5hdGlvblNldChuZXdQYWdlU2l6ZSk6IHZvaWQge1xuICAgIGlmIChuZXdQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUFuZFNpemUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjdXJyZW50UGFnZSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlQW5kU2l6ZSQubmV4dCh7Li4uY3VycmVudFBhZ2UsIHNpemU6IG5ld1BhZ2VTaXplfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByb3dDbGlja2VkKGluc3RhbmNlOiBDb25uZWN0b3JJbnN0YW5jZSk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxUeXBlJC5uZXh0KCdtb2RpZnknKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRDb25uZWN0b3JJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2hvd01vZGFsKCk7XG4gIH1cblxuICBzaG93QWRkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFR5cGUkLm5leHQoJ2FkZCcpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNob3dNb2RhbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGaWVsZHMoKTogdm9pZCB7XG4gICAgY29uc3QgZ2V0VHJhbnNsYXRlZExhYmVsID0gKGtleTogc3RyaW5nKSA9PiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgY29ubmVjdG9yTWFuYWdlbWVudC5sYWJlbHMuJHtrZXl9YCk7XG4gICAgY29uc3Qga2V5czogQXJyYXk8c3RyaW5nPiA9IFsnbmFtZScsICd0eXBlTmFtZSddO1xuICAgIHRoaXMuZmllbGRzJC5uZXh0KGtleXMubWFwKChrZXkpID0+ICh7bGFiZWw6IGdldFRyYW5zbGF0ZWRMYWJlbChrZXkpLCBrZXl9KSkpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,58 @@
|
|
|
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, Input, ViewChild } from '@angular/core';
|
|
17
|
+
import { ModalComponent } from '@valtimo/components';
|
|
18
|
+
import { ConnectorManagementStateService } from '../../services/connector-management-state/connector-management-state.service';
|
|
19
|
+
export class ConnectorModalComponent {
|
|
20
|
+
constructor(stateService) {
|
|
21
|
+
this.stateService = stateService;
|
|
22
|
+
}
|
|
23
|
+
ngAfterViewInit() {
|
|
24
|
+
this.showSubscription = this.stateService.showModal$.subscribe((show) => {
|
|
25
|
+
if (show) {
|
|
26
|
+
this.show();
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this.hide();
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
ngOnDestroy() {
|
|
34
|
+
var _a;
|
|
35
|
+
(_a = this.showSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
36
|
+
}
|
|
37
|
+
show() {
|
|
38
|
+
this.modal.show();
|
|
39
|
+
}
|
|
40
|
+
hide() {
|
|
41
|
+
this.modal.hide();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
ConnectorModalComponent.decorators = [
|
|
45
|
+
{ type: Component, args: [{
|
|
46
|
+
selector: 'valtimo-connector-modal',
|
|
47
|
+
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<valtimo-modal #modal [title]=\"'connectorManagement.' + modalType | translate\">\n <div class=\"mt-2\" body>\n <valtimo-add-connector *ngIf=\"modalType === 'add'\"></valtimo-add-connector>\n <valtimo-modify-connector *ngIf=\"modalType === 'modify'\"></valtimo-modify-connector>\n </div>\n</valtimo-modal>\n",
|
|
48
|
+
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 */"]
|
|
49
|
+
},] }
|
|
50
|
+
];
|
|
51
|
+
ConnectorModalComponent.ctorParameters = () => [
|
|
52
|
+
{ type: ConnectorManagementStateService }
|
|
53
|
+
];
|
|
54
|
+
ConnectorModalComponent.propDecorators = {
|
|
55
|
+
modal: [{ type: ViewChild, args: ['modal',] }],
|
|
56
|
+
modalType: [{ type: Input }]
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdG9yLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29ubmVjdG9yLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Nvbm5lY3Rvci1tb2RhbC9jb25uZWN0b3ItbW9kYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFnQixTQUFTLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHbkQsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sOEVBQThFLENBQUM7QUFPN0gsTUFBTSxPQUFPLHVCQUF1QjtJQU9sQyxZQUNtQixZQUE2QztRQUE3QyxpQkFBWSxHQUFaLFlBQVksQ0FBaUM7SUFFaEUsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEUsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXOztRQUNULE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxXQUFXLEdBQUc7SUFDdkMsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDOzs7WUFyQ0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLHU5QkFBK0M7O2FBRWhEOzs7WUFOTywrQkFBK0I7OztvQkFRcEMsU0FBUyxTQUFDLE9BQU87d0JBRWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TW9kYWxDb21wb25lbnR9IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb25uZWN0b3JNb2RhbH0gZnJvbSAnQHZhbHRpbW8vY29udHJhY3QnO1xuaW1wb3J0IHtDb25uZWN0b3JNYW5hZ2VtZW50U3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25uZWN0b3ItbWFuYWdlbWVudC1zdGF0ZS9jb25uZWN0b3ItbWFuYWdlbWVudC1zdGF0ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1jb25uZWN0b3ItbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29ubmVjdG9yLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29ubmVjdG9yLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ29ubmVjdG9yTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdtb2RhbCcpIG1vZGFsOiBNb2RhbENvbXBvbmVudDtcblxuICBASW5wdXQoKSBtb2RhbFR5cGU6IENvbm5lY3Rvck1vZGFsO1xuXG4gIHNob3dTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVNlcnZpY2U6IENvbm5lY3Rvck1hbmFnZW1lbnRTdGF0ZVNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3Vic2NyaXB0aW9uID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc2hvd01vZGFsJC5zdWJzY3JpYmUoKHNob3cpID0+IHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNob3coKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbC5zaG93KCk7XG4gIH1cblxuICBwcml2YXRlIGhpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbC5oaWRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
export class EditConnectorFormComponent {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.withDefaults = false;
|
|
20
|
+
this.showDeleteButton = false;
|
|
21
|
+
this.propertiesSave = new EventEmitter();
|
|
22
|
+
this.connectorDelete = new EventEmitter();
|
|
23
|
+
this.productAanvragenName = 'ProductAanvragen';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
EditConnectorFormComponent.decorators = [
|
|
27
|
+
{ type: Component, args: [{
|
|
28
|
+
selector: 'valtimo-edit-connector-form',
|
|
29
|
+
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<valtimo-edit-connector-properties\n *ngIf=\"connectorName !== productAanvragenName\"\n [properties]=\"properties\"\n [withDefaults]=\"withDefaults\"\n [defaultName]=\"defaultName\"\n [showDeleteButton]=\"showDeleteButton\"\n (propertiesSave)=\"propertiesSave.emit($event)\"\n (connectorDelete)=\"connectorDelete.emit()\"\n>\n</valtimo-edit-connector-properties>\n\n<valtimo-edit-product-aanvragen-connector\n *ngIf=\"connectorName === productAanvragenName\"\n [defaultName]=\"defaultName\"\n [properties]=\"properties\"\n [showDeleteButton]=\"showDeleteButton\"\n (propertiesSave)=\"propertiesSave.emit($event)\"\n (connectorDelete)=\"connectorDelete.emit()\"\n>\n</valtimo-edit-product-aanvragen-connector>\n",
|
|
30
|
+
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 */"]
|
|
31
|
+
},] }
|
|
32
|
+
];
|
|
33
|
+
EditConnectorFormComponent.propDecorators = {
|
|
34
|
+
properties: [{ type: Input }],
|
|
35
|
+
withDefaults: [{ type: Input }],
|
|
36
|
+
showDeleteButton: [{ type: Input }],
|
|
37
|
+
defaultName: [{ type: Input }],
|
|
38
|
+
connectorName: [{ type: Input }],
|
|
39
|
+
propertiesSave: [{ type: Output }],
|
|
40
|
+
connectorDelete: [{ type: Output }]
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jb25uZWN0b3ItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Nvbm5lY3Rvci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNvbm5lY3Rvci1mb3JtL2VkaXQtY29ubmVjdG9yLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVFyRSxNQUFNLE9BQU8sMEJBQTBCO0lBTHZDO1FBT1csaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBSXhCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFDckYsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTNDLHlCQUFvQixHQUFHLGtCQUFrQixDQUFDO0lBQ3JELENBQUM7OztZQWhCQSxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtnQkFDdkMsKzJDQUFtRDs7YUFFcEQ7Ozt5QkFFRSxLQUFLOzJCQUNMLEtBQUs7K0JBQ0wsS0FBSzswQkFDTCxLQUFLOzRCQUNMLEtBQUs7NkJBRUwsTUFBTTs4QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Nvbm5lY3RvclByb3BlcnRpZXN9IGZyb20gJ0B2YWx0aW1vL2NvbnRyYWN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1lZGl0LWNvbm5lY3Rvci1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtY29ubmVjdG9yLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0LWNvbm5lY3Rvci1mb3JtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRWRpdENvbm5lY3RvckZvcm1Db21wb25lbnQge1xuICBASW5wdXQoKSBwcm9wZXJ0aWVzOiBDb25uZWN0b3JQcm9wZXJ0aWVzO1xuICBASW5wdXQoKSB3aXRoRGVmYXVsdHMgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0RlbGV0ZUJ1dHRvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWZhdWx0TmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgY29ubmVjdG9yTmFtZTogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBwcm9wZXJ0aWVzU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8e3Byb3BlcnRpZXM6IENvbm5lY3RvclByb3BlcnRpZXMsIG5hbWU6IHN0cmluZ30+KCk7XG4gIEBPdXRwdXQoKSBjb25uZWN0b3JEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICByZWFkb25seSBwcm9kdWN0QWFudnJhZ2VuTmFtZSA9ICdQcm9kdWN0QWFudnJhZ2VuJztcbn1cbiJdfQ==
|
package/esm2015/lib/components/edit-connector-properties/edit-connector-properties.component.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
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 { ConnectorManagementStateService } from '../../services/connector-management-state/connector-management-state.service';
|
|
21
|
+
export class EditConnectorPropertiesComponent {
|
|
22
|
+
constructor(stateService) {
|
|
23
|
+
this.stateService = stateService;
|
|
24
|
+
this.withDefaults = false;
|
|
25
|
+
this.showDeleteButton = false;
|
|
26
|
+
this.propertiesSave = new EventEmitter();
|
|
27
|
+
this.connectorDelete = new EventEmitter();
|
|
28
|
+
this.modifiedProperties$ = new BehaviorSubject(undefined);
|
|
29
|
+
this.editFields$ = new BehaviorSubject([]);
|
|
30
|
+
this.connectorName$ = new BehaviorSubject('');
|
|
31
|
+
this.saveButtonDisabled$ = combineLatest([this.editFields$, this.modifiedProperties$, this.connectorName$]).pipe(map(([editFields, modifiedProperties, connectorName]) => {
|
|
32
|
+
const values = editFields.map((field) => get(modifiedProperties, field.key));
|
|
33
|
+
const validValues = values.filter((value) => Array.isArray(value) ? value.length > 0 : value === 0 || value);
|
|
34
|
+
return (editFields.length !== validValues.length) || !connectorName;
|
|
35
|
+
}));
|
|
36
|
+
this.disabled$ = this.stateService.inputDisabled$;
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
this.setEditFields();
|
|
40
|
+
this.setName();
|
|
41
|
+
}
|
|
42
|
+
ngOnChanges() {
|
|
43
|
+
this.setEditFields();
|
|
44
|
+
this.setName();
|
|
45
|
+
}
|
|
46
|
+
multiFieldValuesSet(event) {
|
|
47
|
+
this.modifiedProperties$.pipe(take(1)).subscribe((properties) => {
|
|
48
|
+
set(properties, event.editFieldKey, event.values);
|
|
49
|
+
this.modifiedProperties$.next(properties);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
onSingleValueChange(value, editField) {
|
|
53
|
+
this.modifiedProperties$.pipe(take(1)).subscribe((properties) => {
|
|
54
|
+
set(properties, editField.key, editField.editType === 'string' ? value.trim() : parseInt(value, 10));
|
|
55
|
+
this.modifiedProperties$.next(properties);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
onNameValueChange(value) {
|
|
59
|
+
this.connectorName$.next(value.trim());
|
|
60
|
+
}
|
|
61
|
+
onSave() {
|
|
62
|
+
this.stateService.disableInput();
|
|
63
|
+
combineLatest([this.modifiedProperties$, this.connectorName$])
|
|
64
|
+
.pipe(take(1)).subscribe(([properties, name]) => {
|
|
65
|
+
this.propertiesSave.emit({ properties, name });
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
onDelete() {
|
|
69
|
+
this.stateService.disableInput();
|
|
70
|
+
this.connectorDelete.emit();
|
|
71
|
+
}
|
|
72
|
+
setName() {
|
|
73
|
+
if (this.withDefaults && this.defaultName) {
|
|
74
|
+
this.connectorName$.next(this.defaultName);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this.connectorName$.next('');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
setModifiedProperties(editFields) {
|
|
81
|
+
const propertiesCopy = cloneDeep(this.properties);
|
|
82
|
+
if (!this.withDefaults) {
|
|
83
|
+
editFields.forEach((editField) => {
|
|
84
|
+
set(propertiesCopy, editField.key, undefined);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
this.modifiedProperties$.next(propertiesCopy);
|
|
88
|
+
}
|
|
89
|
+
setEditFields() {
|
|
90
|
+
const editFields = [];
|
|
91
|
+
const keysToFilter = ['className'];
|
|
92
|
+
const handlePropertyLevel = (propertyLevel, previousKeys) => {
|
|
93
|
+
const propertyLevelKeys = Object.keys(propertyLevel)
|
|
94
|
+
.filter((key) => !keysToFilter.includes(key));
|
|
95
|
+
propertyLevelKeys.forEach((key) => {
|
|
96
|
+
const propertyValue = propertyLevel[key];
|
|
97
|
+
const baseEditField = Object.assign({ key: previousKeys + key }, (this.withDefaults && { defaultValue: propertyValue }));
|
|
98
|
+
if (typeof propertyValue === 'number') {
|
|
99
|
+
editFields.push(Object.assign(Object.assign({}, baseEditField), { editType: 'number' }));
|
|
100
|
+
}
|
|
101
|
+
else if (Array.isArray(propertyValue)) {
|
|
102
|
+
if (propertyValue[0] && typeof propertyValue[0] === 'number') {
|
|
103
|
+
editFields.push(Object.assign(Object.assign({}, baseEditField), { editType: 'number[]' }));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
editFields.push(Object.assign(Object.assign({}, baseEditField), { editType: 'string[]' }));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (typeof propertyValue === 'string') {
|
|
110
|
+
editFields.push(Object.assign(Object.assign({}, baseEditField), { editType: 'string' }));
|
|
111
|
+
}
|
|
112
|
+
else if (typeof propertyValue === 'object') {
|
|
113
|
+
handlePropertyLevel(propertyValue, `${previousKeys}${key}.`);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
handlePropertyLevel(this.properties, '');
|
|
118
|
+
this.editFields$.next(editFields);
|
|
119
|
+
this.setModifiedProperties(editFields);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
EditConnectorPropertiesComponent.decorators = [
|
|
123
|
+
{ type: Component, args: [{
|
|
124
|
+
selector: 'valtimo-edit-connector-properties',
|
|
125
|
+
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 class=\"edit-fields\" *ngIf=\"{editFields: editFields$ | async, disabled: disabled$ | async} as obs\">\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 *ngTemplateOutlet=\"singleInput;context:{editField: editField, disabled: obs.disabled}\"></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 <div class=\"form-group row\">\n <label class=\"col-3 col-form-label text-sm-right\">\n {{'connectorManagement.inputLabels.connectorName' | translate}}\n </label>\n <div class=\"col-7\">\n <input\n class=\"form-control\"\n type=\"text\"\n (input)=\"onNameValueChange($event.target.value)\"\n [disabled]=\"disabled\"\n [value]=\"(withDefaults && defaultName) ? defaultName : ''\"\n >\n </div>\n </div>\n</ng-template>\n\n<ng-template #singleInput let-editField=\"editField\" let-disabled=\"disabled\">\n <div class=\"form-group row\">\n <label class=\"col-3 col-form-label text-sm-right\">\n {{'connectorManagement.inputLabels.' + editField.key | translate}}\n </label>\n <div class=\"col-7\">\n <input\n *ngIf=\"editField.editType === 'string'\"\n class=\"form-control\"\n type=\"text\"\n (input)=\"onSingleValueChange($event.target.value, editField)\"\n [disabled]=\"disabled\"\n [value]=\"withDefaults ? editField.defaultValue : ''\"\n >\n <input\n *ngIf=\"editField.editType === 'number'\"\n class=\"form-control\"\n type=\"number\"\n step=\"1\"\n min=\"0\"\n oninput=\"validity.valid||(value='');\"\n (input)=\"onSingleValueChange($event.target.value, editField)\"\n [disabled]=\"disabled\"\n [value]=\"withDefaults ? editField.defaultValue : ''\"\n >\n </div>\n </div>\n</ng-template>\n\n<ng-template #buttons let-disabled=\"disabled\">\n <div class=\"border-top mt-3 pt-6\">\n <div class=\"button-container\">\n <button class=\"btn btn-primary\" [disabled]=\"disabled || (saveButtonDisabled$ | async)\" (click)=\"onSave()\">\n <i class=\"icon mdi mdi-save mr-1\"></i>\n {{'connectorManagement.save' | translate}}\n </button>\n <button *ngIf=\"showDeleteButton\" class=\"btn btn-danger btn-space\" (click)=\"onDelete()\" [disabled]=\"disabled\">\n <i class=\"icon mdi mdi-delete mr-1\"></i>\n {{'connectorManagement.remove' | translate}}\n </button>\n </div>\n </div>\n</ng-template>\n",
|
|
126
|
+
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{display:flex;flex-flow:row-reverse;justify-content:space-between;width:100%}"]
|
|
127
|
+
},] }
|
|
128
|
+
];
|
|
129
|
+
EditConnectorPropertiesComponent.ctorParameters = () => [
|
|
130
|
+
{ type: ConnectorManagementStateService }
|
|
131
|
+
];
|
|
132
|
+
EditConnectorPropertiesComponent.propDecorators = {
|
|
133
|
+
properties: [{ type: Input }],
|
|
134
|
+
withDefaults: [{ type: Input }],
|
|
135
|
+
showDeleteButton: [{ type: Input }],
|
|
136
|
+
defaultName: [{ type: Input }],
|
|
137
|
+
propertiesSave: [{ type: Output }],
|
|
138
|
+
connectorDelete: [{ type: Output }]
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jb25uZWN0b3ItcHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Nvbm5lY3Rvci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNvbm5lY3Rvci1wcm9wZXJ0aWVzL2VkaXQtY29ubmVjdG9yLXByb3BlcnRpZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDaEUsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0MsT0FBTyxFQUFDLCtCQUErQixFQUFDLE1BQU0sOEVBQThFLENBQUM7QUFPN0gsTUFBTSxPQUFPLGdDQUFnQztJQTBCM0MsWUFDbUIsWUFBNkM7UUFBN0MsaUJBQVksR0FBWixZQUFZLENBQWlDO1FBekJ2RCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFHeEIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBbUQsQ0FBQztRQUNyRixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFJM0Msd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQXNCLFNBQVMsQ0FBQyxDQUFDO1FBRTFFLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQW9DLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFD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LENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDOzs7WUEzSUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQ0FBbUM7Z0JBQzdDLDIxSEFBeUQ7O2FBRTFEOzs7WUFOTywrQkFBK0I7Ozt5QkFRcEMsS0FBSzsyQkFDTCxLQUFLOytCQUNMLEtBQUs7MEJBQ0wsS0FBSzs2QkFFTCxNQUFNOzhCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Nvbm5lY3RvclByb3BlcnRpZXMsIENvbm5lY3RvclByb3BlcnR5RWRpdEZpZWxkLCBDb25uZWN0b3JQcm9wZXJ0eVZhbHVlVHlwZX0gZnJvbSAnQHZhbHRpbW8vY29udHJhY3QnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7c2V0LCBnZXQsIGNsb25lRGVlcH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7Q29ubmVjdG9yTWFuYWdlbWVudFN0YXRlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29ubmVjdG9yLW1hbmFnZW1lbnQtc3RhdGUvY29ubmVjdG9yLW1hbmFnZW1lbnQtc3RhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZWRpdC1jb25uZWN0b3ItcHJvcGVydGllcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LWNvbm5lY3Rvci1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdC1jb25uZWN0b3ItcHJvcGVydGllcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRDb25uZWN0b3JQcm9wZXJ0aWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwcm9wZXJ0aWVzOiBDb25uZWN0b3JQcm9wZXJ0aWVzO1xuICBASW5wdXQoKSB3aXRoRGVmYXVsdHMgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0RlbGV0ZUJ1dHRvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWZhdWx0TmFtZSE6IHN0cmluZztcblxuICBAT3V0cHV0KCkgcHJvcGVydGllc1NhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHtwcm9wZXJ0aWVzOiBDb25uZWN0b3JQcm9wZXJ0aWVzLCBuYW1lOiBzdHJpbmd9PigpO1xuICBAT3V0cHV0KCkgY29ubmVjdG9yRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcmVhZG9ubHkgZGlzYWJsZWQkITogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICByZWFkb25seSBtb2RpZmllZFByb3BlcnRpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25uZWN0b3JQcm9wZXJ0aWVzPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IGVkaXRGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDb25uZWN0b3JQcm9wZXJ0eUVkaXRGaWVsZD4+KFtdKTtcblxuICByZWFkb25seSBjb25uZWN0b3JOYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgcmVhZG9ubHkgc2F2ZUJ1dHRvbkRpc2FibGVkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZWRpdEZpZWxkcyQsIHRoaXMubW9kaWZpZWRQcm9wZXJ0aWVzJCwgdGhpcy5jb25uZWN0b3JOYW1lJF0pLnBpcGUoXG4gICAgbWFwKChbZWRpdEZpZWxkcywgbW9kaWZpZWRQcm9wZXJ0aWVzLCBjb25uZWN0b3JOYW1lXSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVzID0gZWRpdEZpZWxkcy5tYXAoKGZpZWxkKSA9PiBnZXQobW9kaWZpZWRQcm9wZXJ0aWVzLCBmaWVsZC5rZXkpKTtcbiAgICAgIGNvbnN0IHZhbGlkVmFsdWVzID0gdmFsdWVzLmZpbHRlcigodmFsdWUpID0+IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubGVuZ3RoID4gMCA6IHZhbHVlID09PSAwIHx8IHZhbHVlKTtcblxuICAgICAgcmV0dXJuIChlZGl0RmllbGRzLmxlbmd0aCAhPT0gdmFsaWRWYWx1ZXMubGVuZ3RoKSB8fCAhY29ubmVjdG9yTmFtZTtcbiAgICB9KVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTZXJ2aWNlOiBDb25uZWN0b3JNYW5hZ2VtZW50U3RhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZGlzYWJsZWQkID0gdGhpcy5zdGF0ZVNlcnZpY2UuaW5wdXREaXNhYmxlZCQ7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEVkaXRGaWVsZHMoKTtcbiAgICB0aGlzLnNldE5hbWUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RWRpdEZpZWxkcygpO1xuICAgIHRoaXMuc2V0TmFtZSgpO1xuICB9XG5cbiAgbXVsdGlGaWVsZFZhbHVlc1NldChldmVudDogeyBlZGl0RmllbGRLZXk6IHN0cmluZywgdmFsdWVzOiBBcnJheTxzdHJpbmc+IHwgQXJyYXk8bnVtYmVyPiB9KTogdm9pZCB7XG4gICAgdGhpcy5tb2RpZmllZFByb3BlcnRpZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICBzZXQocHJvcGVydGllcywgZXZlbnQuZWRpdEZpZWxkS2V5LCBldmVudC52YWx1ZXMpO1xuICAgICAgdGhpcy5tb2RpZmllZFByb3BlcnRpZXMkLm5leHQocHJvcGVydGllcyk7XG4gICAgfSk7XG4gIH1cblxuICBvblNpbmdsZVZhbHVlQ2hhbmdlKHZhbHVlOiBhbnksIGVkaXRGaWVsZDogQ29ubmVjdG9yUHJvcGVydHlFZGl0RmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGlmaWVkUHJvcGVydGllcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHByb3BlcnRpZXMpID0+IHtcbiAgICAgIHNldChwcm9wZXJ0aWVzLCBlZGl0RmllbGQua2V5LCBlZGl0RmllbGQuZWRpdFR5cGUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogcGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgICB0aGlzLm1vZGlmaWVkUHJvcGVydGllcyQubmV4dChwcm9wZXJ0aWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTmFtZVZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rvck5hbWUkLm5leHQodmFsdWUudHJpbSgpKTtcbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5kaXNhYmxlSW5wdXQoKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMubW9kaWZpZWRQcm9wZXJ0aWVzJCwgdGhpcy5jb25uZWN0b3JOYW1lJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKFtwcm9wZXJ0aWVzLCBuYW1lXSkgPT4ge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXNTYXZlLmVtaXQoe3Byb3BlcnRpZXMsIG5hbWUgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmRpc2FibGVJbnB1dCgpO1xuICAgIHRoaXMuY29ubmVjdG9yRGVsZXRlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TmFtZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53aXRoRGVmYXVsdHMgJiYgdGhpcy5kZWZhdWx0TmFtZSkge1xuICAgICAgdGhpcy5jb25uZWN0b3JOYW1lJC5uZXh0KHRoaXMuZGVmYXVsdE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbm5lY3Rvck5hbWUkLm5leHQoJycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TW9kaWZpZWRQcm9wZXJ0aWVzKGVkaXRGaWVsZHM6IEFycmF5PENvbm5lY3RvclByb3BlcnR5RWRpdEZpZWxkPik6IHZvaWQge1xuICAgIGNvbnN0IHByb3BlcnRpZXNDb3B5ID0gY2xvbmVEZWVwKHRoaXMucHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMud2l0aERlZmF1bHRzKSB7XG4gICAgICBlZGl0RmllbGRzLmZvckVhY2goKGVkaXRGaWVsZCkgPT4ge1xuICAgICAgICBzZXQoXG4gICAgICAgICAgcHJvcGVydGllc0NvcHksXG4gICAgICAgICAgZWRpdEZpZWxkLmtleSxcbiAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMubW9kaWZpZWRQcm9wZXJ0aWVzJC5uZXh0KHByb3BlcnRpZXNDb3B5KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RWRpdEZpZWxkcygpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0RmllbGRzOiBBcnJheTxDb25uZWN0b3JQcm9wZXJ0eUVkaXRGaWVsZD4gPSBbXTtcbiAgICBjb25zdCBrZXlzVG9GaWx0ZXIgPSBbJ2NsYXNzTmFtZSddO1xuXG4gICAgY29uc3QgaGFuZGxlUHJvcGVydHlMZXZlbCA9IChwcm9wZXJ0eUxldmVsOiBDb25uZWN0b3JQcm9wZXJ0aWVzLCBwcmV2aW91c0tleXM6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHlMZXZlbEtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eUxldmVsKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+ICFrZXlzVG9GaWx0ZXIuaW5jbHVkZXMoa2V5KSk7XG5cbiAgICAgIHByb3BlcnR5TGV2ZWxLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlMZXZlbFtrZXldO1xuICAgICAgICBjb25zdCBiYXNlRWRpdEZpZWxkID0ge1xuICAgICAgICAgIGtleTogcHJldmlvdXNLZXlzICsga2V5LFxuICAgICAgICAgIC4uLih0aGlzLndpdGhEZWZhdWx0cyAmJiB7ZGVmYXVsdFZhbHVlOiAocHJvcGVydHlWYWx1ZSBhcyBDb25uZWN0b3JQcm9wZXJ0eVZhbHVlVHlwZSl9KVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBlZGl0RmllbGRzLnB1c2goey4uLmJhc2VFZGl0RmllbGQsIGVkaXRUeXBlOiAnbnVtYmVyJ30pO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHlWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAocHJvcGVydHlWYWx1ZVswXSAmJiB0eXBlb2YgcHJvcGVydHlWYWx1ZVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGVkaXRGaWVsZHMucHVzaCh7Li4uYmFzZUVkaXRGaWVsZCwgZWRpdFR5cGU6ICdudW1iZXJbXSd9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWRpdEZpZWxkcy5wdXNoKHsuLi5iYXNlRWRpdEZpZWxkLCBlZGl0VHlwZTogJ3N0cmluZ1tdJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBlZGl0RmllbGRzLnB1c2goey4uLmJhc2VFZGl0RmllbGQsIGVkaXRUeXBlOiAnc3RyaW5nJ30pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGhhbmRsZVByb3BlcnR5TGV2ZWwocHJvcGVydHlWYWx1ZSwgYCR7cHJldmlvdXNLZXlzfSR7a2V5fS5gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGhhbmRsZVByb3BlcnR5TGV2ZWwodGhpcy5wcm9wZXJ0aWVzLCAnJyk7XG5cbiAgICB0aGlzLmVkaXRGaWVsZHMkLm5leHQoZWRpdEZpZWxkcyk7XG4gICAgdGhpcy5zZXRNb2RpZmllZFByb3BlcnRpZXMoZWRpdEZpZWxkcyk7XG4gIH1cbn1cbiJdfQ==
|