@valtimo/object 10.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +31 -0
  2. package/esm2020/lib/components/object-detail-container/object-detail-container.component.mjs +60 -0
  3. package/esm2020/lib/components/object-detail-container/tabs/object-detail/object-detail.component.mjs +154 -0
  4. package/esm2020/lib/components/object-list/object-list.component.mjs +246 -0
  5. package/esm2020/lib/models/object.model.mjs +27 -0
  6. package/esm2020/lib/object-routing.module.mjs +52 -0
  7. package/esm2020/lib/object.module.mjs +91 -0
  8. package/esm2020/lib/services/object-column.service.mjs +50 -0
  9. package/esm2020/lib/services/object-state.service.mjs +59 -0
  10. package/esm2020/lib/services/object.service.mjs +55 -0
  11. package/esm2020/lib/services/tab.enum.mjs +20 -0
  12. package/esm2020/lib/services/tab.service.mjs +39 -0
  13. package/esm2020/public-api.mjs +21 -0
  14. package/esm2020/valtimo-object.mjs +5 -0
  15. package/fesm2015/valtimo-object.mjs +808 -0
  16. package/fesm2015/valtimo-object.mjs.map +1 -0
  17. package/fesm2020/valtimo-object.mjs +819 -0
  18. package/fesm2020/valtimo-object.mjs.map +1 -0
  19. package/index.d.ts +5 -0
  20. package/lib/components/object-detail-container/object-detail-container.component.d.ts +28 -0
  21. package/lib/components/object-detail-container/tabs/object-detail/object-detail.component.d.ts +43 -0
  22. package/lib/components/object-list/object-list.component.d.ts +57 -0
  23. package/lib/models/object.model.d.ts +20 -0
  24. package/lib/object-routing.module.d.ts +8 -0
  25. package/lib/object.module.d.ts +16 -0
  26. package/lib/services/object-column.service.d.ts +14 -0
  27. package/lib/services/object-state.service.d.ts +19 -0
  28. package/lib/services/object.service.d.ts +30 -0
  29. package/lib/services/tab.enum.d.ts +3 -0
  30. package/lib/services/tab.service.d.ts +10 -0
  31. package/package.json +31 -0
  32. package/public-api.d.ts +2 -0
package/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # Object
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version
4
+ 14.2.0.
5
+
6
+ ## Code scaffolding
7
+
8
+ Run `ng generate component component-name --project object` to generate a new component. You can
9
+ also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project object`.
10
+
11
+ > Note: Don't forget to add `--project object` or else it will be added to the default project in
12
+ > your `angular.json` file.
13
+
14
+ ## Build
15
+
16
+ Run `ng build object` to build the project. The build artifacts will be stored in the `dist/`
17
+ directory.
18
+
19
+ ## Publishing
20
+
21
+ After building your library with `ng build object`, go to the dist folder `cd dist/object` and run
22
+ `npm publish`.
23
+
24
+ ## Running unit tests
25
+
26
+ Run `ng test object` to execute the unit tests via [Karma](https://karma-runner.github.io).
27
+
28
+ ## Further help
29
+
30
+ To get more help on the Angular CLI use `ng help` or go check out the
31
+ [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,60 @@
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 { map } from 'rxjs';
18
+ import { TabEnum } from '../../services/tab.enum';
19
+ import * as i0 from "@angular/core";
20
+ import * as i1 from "../../services/object-state.service";
21
+ import * as i2 from "../../services/object.service";
22
+ import * as i3 from "@angular/router";
23
+ import * as i4 from "@valtimo/config";
24
+ import * as i5 from "../../services/tab.service";
25
+ import * as i6 from "@angular/common";
26
+ import * as i7 from "@valtimo/components";
27
+ import * as i8 from "./tabs/object-detail/object-detail.component";
28
+ import * as i9 from "@ngx-translate/core";
29
+ export class ObjectDetailContainerComponent {
30
+ constructor(objectState, objectService, route, configService, tabService) {
31
+ this.objectState = objectState;
32
+ this.objectService = objectService;
33
+ this.route = route;
34
+ this.configService = configService;
35
+ this.tabService = tabService;
36
+ this.TabEnum = TabEnum;
37
+ this.objectManagementId$ = this.route.params.pipe(map(params => params.objectManagementId));
38
+ this.caseListColumn = this.configService.config.featureToggles.caseListColumn;
39
+ }
40
+ ngOnInit() {
41
+ this.openCurrentTabSubscription();
42
+ }
43
+ displayBodyComponent(tab) {
44
+ this.tabService.currentTab = tab;
45
+ }
46
+ openCurrentTabSubscription() {
47
+ this.tabSubscription = this.tabService.currentTab$.subscribe(value => (this.currentTab = value));
48
+ }
49
+ ngOnDestroy() {
50
+ this.tabService.currentTab = TabEnum.GENERAL;
51
+ this.tabSubscription?.unsubscribe();
52
+ }
53
+ }
54
+ ObjectDetailContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectDetailContainerComponent, deps: [{ token: i1.ObjectStateService }, { token: i2.ObjectService }, { token: i3.ActivatedRoute }, { token: i4.ConfigService }, { token: i5.TabService }], target: i0.ɵɵFactoryTarget.Component });
55
+ ObjectDetailContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ObjectDetailContainerComponent, selector: "valtimo-object-detail-container", ngImport: i0, template: "<!--\n ~ Copyright 2015-2022 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\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-widget>\n <ng-container *ngTemplateOutlet=\"title\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabContent\"></ng-container>\n </valtimo-widget>\n </div>\n </div>\n</div>\n\n<ng-template #title>\n <div class=\"bg-light dossier-header\">\n <h3 class=\"dossier-title\">\n {{ 'object.header' | translate }}\n </h3>\n </div>\n</ng-template>\n\n<ng-template #tabs>\n <ul class=\"nav nav-tabs\">\n <li class=\"nav-item\">\n <a\n id=\"general-tab\"\n class=\"nav-link clickable active\"\n data-toggle=\"tab\"\n (click)=\"displayBodyComponent(TabEnum.GENERAL)\"\n >\n {{ 'object.tabs.general' | translate }}\n </a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabContent>\n <div class=\"pl-1 pr-1 pt-3 bg-white position-relative tab-container\">\n <div *ngIf=\"currentTab && currentTab === TabEnum.GENERAL\">\n <valtimo-object-detail></valtimo-object-detail>\n </div>\n </div>\n</ng-template>\n", styles: [".tab-container{min-height:300px}.dossier-header{height:80px;padding-top:21px;padding-left:18px;padding-right:18px;border-bottom:1px solid rgba(0,0,0,.125)}.dossier-title{margin-top:0;margin-bottom:7px}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i8.ObjectDetailComponent, selector: "valtimo-object-detail" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectDetailContainerComponent, decorators: [{
57
+ type: Component,
58
+ args: [{ selector: 'valtimo-object-detail-container', template: "<!--\n ~ Copyright 2015-2022 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\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-widget>\n <ng-container *ngTemplateOutlet=\"title\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabContent\"></ng-container>\n </valtimo-widget>\n </div>\n </div>\n</div>\n\n<ng-template #title>\n <div class=\"bg-light dossier-header\">\n <h3 class=\"dossier-title\">\n {{ 'object.header' | translate }}\n </h3>\n </div>\n</ng-template>\n\n<ng-template #tabs>\n <ul class=\"nav nav-tabs\">\n <li class=\"nav-item\">\n <a\n id=\"general-tab\"\n class=\"nav-link clickable active\"\n data-toggle=\"tab\"\n (click)=\"displayBodyComponent(TabEnum.GENERAL)\"\n >\n {{ 'object.tabs.general' | translate }}\n </a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabContent>\n <div class=\"pl-1 pr-1 pt-3 bg-white position-relative tab-container\">\n <div *ngIf=\"currentTab && currentTab === TabEnum.GENERAL\">\n <valtimo-object-detail></valtimo-object-detail>\n </div>\n </div>\n</ng-template>\n", styles: [".tab-container{min-height:300px}.dossier-header{height:80px;padding-top:21px;padding-left:18px;padding-right:18px;border-bottom:1px solid rgba(0,0,0,.125)}.dossier-title{margin-top:0;margin-bottom:7px}\n"] }]
59
+ }], ctorParameters: function () { return [{ type: i1.ObjectStateService }, { type: i2.ObjectService }, { type: i3.ActivatedRoute }, { type: i4.ConfigService }, { type: i5.TabService }]; } });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRldGFpbC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9vYmplY3Qvc3JjL2xpYi9jb21wb25lbnRzL29iamVjdC1kZXRhaWwtY29udGFpbmVyL29iamVjdC1kZXRhaWwtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vb2JqZWN0L3NyYy9saWIvY29tcG9uZW50cy9vYmplY3QtZGV0YWlsLWNvbnRhaW5lci9vYmplY3QtZGV0YWlsLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBQyxHQUFHLEVBQTJCLE1BQU0sTUFBTSxDQUFDO0FBSW5ELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFRaEQsTUFBTSxPQUFPLDhCQUE4QjtJQVl6QyxZQUNtQixXQUErQixFQUMvQixhQUE0QixFQUM1QixLQUFxQixFQUNyQixhQUE0QixFQUM1QixVQUFzQjtRQUp0QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVhoQyxZQUFPLEdBQUcsT0FBTyxDQUFDO1FBRWxCLHdCQUFtQixHQUF1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3ZFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUN6QyxDQUFDO1FBU0EsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQVk7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ25DLENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQzFELEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzdDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDdEMsQ0FBQzs7NEhBdkNVLDhCQUE4QjtnSEFBOUIsOEJBQThCLHVFQzlCM0MsdXpEQTBEQTs0RkQ1QmEsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHttYXAsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge09iamVjdFN0YXRlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvb2JqZWN0LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHtPYmplY3RTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vYmplY3Quc2VydmljZSc7XG5pbXBvcnQge1RhYkVudW19IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RhYi5lbnVtJztcbmltcG9ydCB7VGFiU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFiLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLW9iamVjdC1kZXRhaWwtY29udGFpbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29iamVjdC1kZXRhaWwtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LWRldGFpbC1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0RGV0YWlsQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgY3VycmVudFRhYjogVGFiRW51bTtcbiAgcHVibGljIGNhc2VMaXN0Q29sdW1uITogYm9vbGVhbjtcblxuICBwcml2YXRlIHRhYlN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHJlYWRvbmx5IFRhYkVudW0gPSBUYWJFbnVtO1xuXG4gIHJlYWRvbmx5IG9iamVjdE1hbmFnZW1lbnRJZCQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUoXG4gICAgbWFwKHBhcmFtcyA9PiBwYXJhbXMub2JqZWN0TWFuYWdlbWVudElkKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0U3RhdGU6IE9iamVjdFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdFNlcnZpY2U6IE9iamVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFiU2VydmljZTogVGFiU2VydmljZVxuICApIHtcbiAgICB0aGlzLmNhc2VMaXN0Q29sdW1uID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5mZWF0dXJlVG9nZ2xlcy5jYXNlTGlzdENvbHVtbjtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkN1cnJlbnRUYWJTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIGRpc3BsYXlCb2R5Q29tcG9uZW50KHRhYjogVGFiRW51bSk6IHZvaWQge1xuICAgIHRoaXMudGFiU2VydmljZS5jdXJyZW50VGFiID0gdGFiO1xuICB9XG5cbiAgb3BlbkN1cnJlbnRUYWJTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy50YWJTdWJzY3JpcHRpb24gPSB0aGlzLnRhYlNlcnZpY2UuY3VycmVudFRhYiQuc3Vic2NyaWJlKFxuICAgICAgdmFsdWUgPT4gKHRoaXMuY3VycmVudFRhYiA9IHZhbHVlKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYlNlcnZpY2UuY3VycmVudFRhYiA9IFRhYkVudW0uR0VORVJBTDtcbiAgICB0aGlzLnRhYlN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjIgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHB4LTAgbWItNVwiPlxuICAgICAgPHZhbHRpbW8td2lkZ2V0PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGl0bGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYkNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdmFsdGltby13aWRnZXQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdGl0bGU+XG4gIDxkaXYgY2xhc3M9XCJiZy1saWdodCBkb3NzaWVyLWhlYWRlclwiPlxuICAgIDxoMyBjbGFzcz1cImRvc3NpZXItdGl0bGVcIj5cbiAgICAgIHt7ICdvYmplY3QuaGVhZGVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvaDM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWJzPlxuICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIj5cbiAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgPGFcbiAgICAgICAgaWQ9XCJnZW5lcmFsLXRhYlwiXG4gICAgICAgIGNsYXNzPVwibmF2LWxpbmsgY2xpY2thYmxlIGFjdGl2ZVwiXG4gICAgICAgIGRhdGEtdG9nZ2xlPVwidGFiXCJcbiAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlCb2R5Q29tcG9uZW50KFRhYkVudW0uR0VORVJBTClcIlxuICAgICAgPlxuICAgICAgICB7eyAnb2JqZWN0LnRhYnMuZ2VuZXJhbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWJDb250ZW50PlxuICA8ZGl2IGNsYXNzPVwicGwtMSBwci0xIHB0LTMgYmctd2hpdGUgcG9zaXRpb24tcmVsYXRpdmUgdGFiLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50VGFiICYmIGN1cnJlbnRUYWIgPT09IFRhYkVudW0uR0VORVJBTFwiPlxuICAgICAgPHZhbHRpbW8tb2JqZWN0LWRldGFpbD48L3ZhbHRpbW8tb2JqZWN0LWRldGFpbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,154 @@
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, map, of, Subject, throwError } from 'rxjs';
18
+ import { catchError, finalize, switchMap, take, tap } from 'rxjs/operators';
19
+ import { FormType } from '../../../../models/object.model';
20
+ import * as i0 from "@angular/core";
21
+ import * as i1 from "../../../../services/object.service";
22
+ import * as i2 from "../../../../services/object-state.service";
23
+ import * as i3 from "@angular/router";
24
+ import * as i4 from "@ngx-translate/core";
25
+ import * as i5 from "ngx-toastr";
26
+ import * as i6 from "@angular/common";
27
+ import * as i7 from "carbon-components-angular";
28
+ import * as i8 from "@valtimo/components";
29
+ export class ObjectDetailComponent {
30
+ constructor(objectService, objectState, route, router, translate, toastr) {
31
+ this.objectService = objectService;
32
+ this.objectState = objectState;
33
+ this.route = route;
34
+ this.router = router;
35
+ this.translate = translate;
36
+ this.toastr = toastr;
37
+ this.loading$ = new BehaviorSubject(true);
38
+ this.submission$ = new BehaviorSubject({});
39
+ this.formValid$ = new BehaviorSubject(false);
40
+ this.showModal$ = new BehaviorSubject(false);
41
+ this.disableInput$ = new BehaviorSubject(false);
42
+ this.showDeleteModal$ = new Subject();
43
+ this.deleteObjectUrl$ = new BehaviorSubject('');
44
+ this.refreshObject$ = new BehaviorSubject(null);
45
+ this.objectManagementId$ = this.route.params.pipe(map(params => params.objectManagementId));
46
+ this.objectId$ = this.route.params.pipe(map(params => params.objectId));
47
+ this.formioFormSummary$ = combineLatest([
48
+ this.objectManagementId$,
49
+ this.objectId$,
50
+ this.refreshObject$,
51
+ ]).pipe(switchMap(([objectManagementId, objectId]) => this.objectService
52
+ .getPrefilledObjectFromObjectUrl({ objectManagementId, objectId, formType: FormType.SUMMARY })
53
+ .pipe(catchError(() => this.handleRetrievingFormError()))), map(res => res?.formDefinition), tap(() => this.loading$.next(false)));
54
+ this.formioFormEdit$ = combineLatest([
55
+ this.objectManagementId$,
56
+ this.objectId$,
57
+ this.refreshObject$,
58
+ ]).pipe(switchMap(([objectManagementId, objectId]) => this.objectService
59
+ .getPrefilledObjectFromObjectUrl({
60
+ objectManagementId,
61
+ objectId,
62
+ formType: FormType.EDITFORM,
63
+ })
64
+ .pipe(catchError(() => this.handleRetrievingFormError()))), map(res => res?.formDefinition), tap(() => this.loading$.next(false)));
65
+ }
66
+ saveObject() {
67
+ this.disableInput();
68
+ this.updateObject();
69
+ }
70
+ deleteObject() {
71
+ this.showDeleteModal$.next(true);
72
+ }
73
+ deleteObjectConfirmation() {
74
+ this.disableInput();
75
+ combineLatest([this.objectManagementId$, this.objectId$])
76
+ .pipe(take(1))
77
+ .subscribe(([objectManagementId, objectId]) => {
78
+ this.objectService
79
+ .deleteObject({ objectManagementId, objectId })
80
+ .pipe(take(1), catchError((error) => this.handleDeleteObjectError(error)), finalize(() => {
81
+ this.enableInput();
82
+ }))
83
+ .subscribe(() => {
84
+ this.closeModal();
85
+ this.toastr.success(this.translate.instant('object.messages.objectDeleted'));
86
+ this.router.navigate([`/objects/${objectManagementId}`]);
87
+ });
88
+ });
89
+ }
90
+ openModal() {
91
+ this.showModal$.next(true);
92
+ this.enableInput();
93
+ }
94
+ onFormioChange(formio) {
95
+ if (formio.data != null) {
96
+ this.submission$.next(formio.data);
97
+ this.formValid$.next(formio.isValid);
98
+ }
99
+ }
100
+ closeModal() {
101
+ this.showModal$.next(false);
102
+ }
103
+ updateObject() {
104
+ this.disableInput();
105
+ combineLatest([this.objectManagementId$, this.objectId$, this.submission$, this.formValid$])
106
+ .pipe(take(1))
107
+ .subscribe(([objectManagementId, objectId, submission, formValid]) => {
108
+ if (formValid) {
109
+ submission = this.objectService.removeEmptyStringValuesFromSubmission(submission);
110
+ this.objectService
111
+ .updateObject({ objectManagementId, objectId }, { ...submission })
112
+ .pipe(take(1), catchError((error) => this.handleUpdateObjectError(error)), finalize(() => {
113
+ this.enableInput();
114
+ }))
115
+ .subscribe(() => {
116
+ this.closeModal();
117
+ this.refreshObject();
118
+ this.toastr.success(this.translate.instant('object.messages.objectUpdated'));
119
+ });
120
+ }
121
+ });
122
+ }
123
+ refreshObject() {
124
+ this.refreshObject$.next(null);
125
+ }
126
+ disableInput() {
127
+ this.disableInput$.next(true);
128
+ }
129
+ enableInput() {
130
+ this.disableInput$.next(false);
131
+ }
132
+ handleRetrievingFormError() {
133
+ this.toastr.error(this.translate.instant('object.messages.objectRetrievingFormError'));
134
+ this.loading$.next(false);
135
+ return of(null);
136
+ }
137
+ handleUpdateObjectError(error) {
138
+ this.closeModal();
139
+ this.toastr.error(this.translate.instant('object.messages.objectUpdateError'));
140
+ return throwError(error);
141
+ }
142
+ handleDeleteObjectError(error) {
143
+ this.closeModal();
144
+ this.toastr.error(this.translate.instant('object.messages.objectDeleteError'));
145
+ return throwError(error);
146
+ }
147
+ }
148
+ ObjectDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectDetailComponent, deps: [{ token: i1.ObjectService }, { token: i2.ObjectStateService }, { token: i3.ActivatedRoute }, { token: i3.Router }, { token: i4.TranslateService }, { token: i5.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
149
+ ObjectDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ObjectDetailComponent, selector: "valtimo-object-detail", ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<ng-container\n *ngIf=\"{\n formioFormSummary: formioFormSummary$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"text-right\">\n <div class=\"btn-group mb-1\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"widget; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button (click)=\"openModal()\" ibmButton=\"primary\" size=\"md\">\n {{ 'object.editObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n\n <button (click)=\"deleteObject()\" ibmButton=\"danger\" size=\"md\" class=\"ml-3\">\n {{ 'object.deleteObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #widget let-obs=\"obs\">\n <valtimo-form-io [form]=\"obs.formioFormSummary\" [readOnly]=\"true\"></valtimo-form-io>\n</ng-template>\n\n<ng-template #createEditModal>\n <ibm-modal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n disableInput: disableInput$ | async,\n formioFormEdit: formioFormEdit$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{ 'object.editObject' | translate }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formioFormEdit\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"saveObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></div>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteObjectUrl$ | async\"\n (confirmEvent)=\"deleteObjectConfirmation()\"\n confirmButtonTextTranslationKey=\"object.deleteObject\"\n titleTranslationKey=\"object.deleteObject\"\n contentTranslationKey=\"object.deleteObjectConfirmation\"\n ></valtimo-confirmation-modal>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.row{margin:0}.object-schema{resize:none}valtimo-widget::ng-deep .card-border.card-full-default{border:none}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.Button, selector: "[ibmButton]", inputs: ["ibmButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i7.IconDirective, selector: "[ibmIcon]", inputs: ["ibmIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i7.Loading, selector: "ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i8.FormioComponent, selector: "valtimo-form-io", inputs: ["form", "options", "submission", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }, { kind: "component", type: i7.Modal, selector: "ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i7.ModalHeader, selector: "ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i7.ModalFooter, selector: "ibm-modal-footer" }, { kind: "directive", type: i7.ModalContent, selector: "[ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i7.ModalHeaderHeading, selector: "[ibmModalHeaderHeading]" }, { kind: "component", type: i8.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "cancelButtonText", "cancelButtonTextTranslationKey", "showModalSubject$", "outputOnConfirm"], outputs: ["confirmEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectDetailComponent, decorators: [{
151
+ type: Component,
152
+ args: [{ selector: 'valtimo-object-detail', 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<ng-container\n *ngIf=\"{\n formioFormSummary: formioFormSummary$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"text-right\">\n <div class=\"btn-group mb-1\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"widget; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button (click)=\"openModal()\" ibmButton=\"primary\" size=\"md\">\n {{ 'object.editObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n\n <button (click)=\"deleteObject()\" ibmButton=\"danger\" size=\"md\" class=\"ml-3\">\n {{ 'object.deleteObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #widget let-obs=\"obs\">\n <valtimo-form-io [form]=\"obs.formioFormSummary\" [readOnly]=\"true\"></valtimo-form-io>\n</ng-template>\n\n<ng-template #createEditModal>\n <ibm-modal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n disableInput: disableInput$ | async,\n formioFormEdit: formioFormEdit$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{ 'object.editObject' | translate }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formioFormEdit\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"saveObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></div>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteObjectUrl$ | async\"\n (confirmEvent)=\"deleteObjectConfirmation()\"\n confirmButtonTextTranslationKey=\"object.deleteObject\"\n titleTranslationKey=\"object.deleteObject\"\n contentTranslationKey=\"object.deleteObjectConfirmation\"\n ></valtimo-confirmation-modal>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.row{margin:0}.object-schema{resize:none}valtimo-widget::ng-deep .card-border.card-full-default{border:none}\n"] }]
153
+ }], ctorParameters: function () { return [{ type: i1.ObjectService }, { type: i2.ObjectStateService }, { type: i3.ActivatedRoute }, { type: i3.Router }, { type: i4.TranslateService }, { type: i5.ToastrService }]; } });
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL29iamVjdC9zcmMvbGliL2NvbXBvbmVudHMvb2JqZWN0LWRldGFpbC1jb250YWluZXIvdGFicy9vYmplY3QtZGV0YWlsL29iamVjdC1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9vYmplY3Qvc3JjL2xpYi9jb21wb25lbnRzL29iamVjdC1kZXRhaWwtY29udGFpbmVyL3RhYnMvb2JqZWN0LWRldGFpbC9vYmplY3QtZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUYsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUkxRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7QUFTekQsTUFBTSxPQUFPLHFCQUFxQjtJQWdEaEMsWUFDbUIsYUFBNEIsRUFDNUIsV0FBK0IsRUFDeEMsS0FBcUIsRUFDckIsTUFBYyxFQUNkLFNBQTJCLEVBQzNCLE1BQXFCO1FBTFosa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQ3hDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxjQUFTLEdBQVQsU0FB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bUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7bUhBOUpVLHFCQUFxQjt1R0FBckIscUJBQXFCLDZEQy9CbEMsa2xJQXdIQTs0RkR6RmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge09iamVjdFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL29iamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7T2JqZWN0U3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9vYmplY3Qtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0Zvcm1UeXBlfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvb2JqZWN0Lm1vZGVsJztcbmltcG9ydCB7VG9hc3RyU2VydmljZX0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLW9iamVjdC1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29iamVjdC1kZXRhaWwuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0RGV0YWlsQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBzdWJtaXNzaW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XG4gIHJlYWRvbmx5IGZvcm1WYWxpZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd01vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBkaXNhYmxlSW5wdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dEZWxldGVNb2RhbCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICByZWFkb25seSBkZWxldGVPYmplY3RVcmwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlZnJlc2hPYmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsPihudWxsKTtcblxuICByZWFkb25seSBvYmplY3RNYW5hZ2VtZW50SWQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zLm9iamVjdE1hbmFnZW1lbnRJZClcbiAgKTtcbiAgcmVhZG9ubHkgb2JqZWN0SWQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gcGFyYW1zLm9iamVjdElkKSk7XG5cbiAgcmVhZG9ubHkgZm9ybWlvRm9ybVN1bW1hcnkkOiBPYnNlcnZhYmxlPGFueT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLm9iamVjdE1hbmFnZW1lbnRJZCQsXG4gICAgdGhpcy5vYmplY3RJZCQsXG4gICAgdGhpcy5yZWZyZXNoT2JqZWN0JCxcbiAgXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtvYmplY3RNYW5hZ2VtZW50SWQsIG9iamVjdElkXSkgPT5cbiAgICAgIHRoaXMub2JqZWN0U2VydmljZVxuICAgICAgICAuZ2V0UHJlZmlsbGVkT2JqZWN0RnJvbU9iamVjdFVybCh7b2JqZWN0TWFuYWdlbWVudElkLCBvYmplY3RJZCwgZm9ybVR5cGU6IEZvcm1UeXBlLlNVTU1BUll9KVxuICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IHRoaXMuaGFuZGxlUmV0cmlldmluZ0Zvcm1FcnJvcigpKSlcbiAgICApLFxuICAgIG1hcChyZXMgPT4gcmVzPy5mb3JtRGVmaW5pdGlvbiksXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyQubmV4dChmYWxzZSkpXG4gICk7XG5cbiAgcmVhZG9ubHkgZm9ybWlvRm9ybUVkaXQkOiBPYnNlcnZhYmxlPGFueT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLm9iamVjdE1hbmFnZW1lbnRJZCQsXG4gICAgdGhpcy5vYmplY3RJZCQsXG4gICAgdGhpcy5yZWZyZXNoT2JqZWN0JCxcbiAgXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtvYmplY3RNYW5hZ2VtZW50SWQsIG9iamVjdElkXSkgPT5cbiAgICAgIHRoaXMub2JqZWN0U2VydmljZVxuICAgICAgICAuZ2V0UHJlZmlsbGVkT2JqZWN0RnJvbU9iamVjdFVybCh7XG4gICAgICAgICAgb2JqZWN0TWFuYWdlbWVudElkLFxuICAgICAgICAgIG9iamVjdElkLFxuICAgICAgICAgIGZvcm1UeXBlOiBGb3JtVHlwZS5FRElURk9STSxcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiB0aGlzLmhhbmRsZVJldHJpZXZpbmdGb3JtRXJyb3IoKSkpXG4gICAgKSxcbiAgICBtYXAocmVzID0+IHJlcz8uZm9ybURlZmluaXRpb24pLFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0U2VydmljZTogT2JqZWN0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdFN0YXRlOiBPYmplY3RTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZVxuICApIHt9XG5cbiAgc2F2ZU9iamVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuXG4gICAgdGhpcy51cGRhdGVPYmplY3QoKTtcbiAgfVxuXG4gIGRlbGV0ZU9iamVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEZWxldGVNb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIGRlbGV0ZU9iamVjdENvbmZpcm1hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMub2JqZWN0TWFuYWdlbWVudElkJCwgdGhpcy5vYmplY3RJZCRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtvYmplY3RNYW5hZ2VtZW50SWQsIG9iamVjdElkXSkgPT4ge1xuICAgICAgICB0aGlzLm9iamVjdFNlcnZpY2VcbiAgICAgICAgICAuZGVsZXRlT2JqZWN0KHtvYmplY3RNYW5hZ2VtZW50SWQsIG9iamVjdElkfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB0aGlzLmhhbmRsZURlbGV0ZU9iamVjdEVycm9yKGVycm9yKSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ29iamVjdC5tZXNzYWdlcy5vYmplY3REZWxldGVkJykpO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Avb2JqZWN0cy8ke29iamVjdE1hbmFnZW1lbnRJZH1gXSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG9wZW5Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNb2RhbCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gIH1cblxuICBvbkZvcm1pb0NoYW5nZShmb3JtaW8pOiB2b2lkIHtcbiAgICBpZiAoZm9ybWlvLmRhdGEgIT0gbnVsbCkge1xuICAgICAgdGhpcy5zdWJtaXNzaW9uJC5uZXh0KGZvcm1pby5kYXRhKTtcbiAgICAgIHRoaXMuZm9ybVZhbGlkJC5uZXh0KGZvcm1pby5pc1ZhbGlkKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01vZGFsJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT2JqZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0KCk7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5vYmplY3RNYW5hZ2VtZW50SWQkLCB0aGlzLm9iamVjdElkJCwgdGhpcy5zdWJtaXNzaW9uJCwgdGhpcy5mb3JtVmFsaWQkXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChbb2JqZWN0TWFuYWdlbWVudElkLCBvYmplY3RJZCwgc3VibWlzc2lvbiwgZm9ybVZhbGlkXSkgPT4ge1xuICAgICAgICBpZiAoZm9ybVZhbGlkKSB7XG4gICAgICAgICAgc3VibWlzc2lvbiA9IHRoaXMub2JqZWN0U2VydmljZS5yZW1vdmVFbXB0eVN0cmluZ1ZhbHVlc0Zyb21TdWJtaXNzaW9uKHN1Ym1pc3Npb24pO1xuICAgICAgICAgIHRoaXMub2JqZWN0U2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZU9iamVjdCh7b2JqZWN0TWFuYWdlbWVudElkLCBvYmplY3RJZH0sIHsuLi5zdWJtaXNzaW9ufSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB0aGlzLmhhbmRsZVVwZGF0ZU9iamVjdEVycm9yKGVycm9yKSksXG4gICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgICAgICAgICAgIHRoaXMucmVmcmVzaE9iamVjdCgpO1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ29iamVjdC5tZXNzYWdlcy5vYmplY3RVcGRhdGVkJykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoT2JqZWN0KCk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaE9iamVjdCQubmV4dChudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJldHJpZXZpbmdGb3JtRXJyb3IoKSB7XG4gICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy50cmFuc2xhdGUuaW5zdGFudCgnb2JqZWN0Lm1lc3NhZ2VzLm9iamVjdFJldHJpZXZpbmdGb3JtRXJyb3InKSk7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVwZGF0ZU9iamVjdEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgICB0aGlzLnRvYXN0ci5lcnJvcih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdvYmplY3QubWVzc2FnZXMub2JqZWN0VXBkYXRlRXJyb3InKSk7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEZWxldGVPYmplY3RFcnJvcihlcnJvcjogYW55KSB7XG4gICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy50cmFuc2xhdGUuaW5zdGFudCgnb2JqZWN0Lm1lc3NhZ2VzLm9iamVjdERlbGV0ZUVycm9yJykpO1xuICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBmb3JtaW9Gb3JtU3VtbWFyeTogZm9ybWlvRm9ybVN1bW1hcnkkIHwgYXN5bmNcbiAgfSBhcyBvYnNcIlxuPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHByLTAgcGwtMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIG1iLTFcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ3aWRnZXQ7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNyZWF0ZUVkaXRNb2RhbFwiPjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVsZXRlTW9kYWxcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnMgbGV0LW9icz1cIm9ic1wiPlxuICA8YnV0dG9uIChjbGljayk9XCJvcGVuTW9kYWwoKVwiIGlibUJ1dHRvbj1cInByaW1hcnlcIiBzaXplPVwibWRcIj5cbiAgICB7eyAnb2JqZWN0LmVkaXRPYmplY3QnIHwgdHJhbnNsYXRlIH19XG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgaWJtSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uIChjbGljayk9XCJkZWxldGVPYmplY3QoKVwiIGlibUJ1dHRvbj1cImRhbmdlclwiIHNpemU9XCJtZFwiIGNsYXNzPVwibWwtM1wiPlxuICAgIHt7ICdvYmplY3QuZGVsZXRlT2JqZWN0JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGlibUljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3dpZGdldCBsZXQtb2JzPVwib2JzXCI+XG4gIDx2YWx0aW1vLWZvcm0taW8gW2Zvcm1dPVwib2JzLmZvcm1pb0Zvcm1TdW1tYXJ5XCIgW3JlYWRPbmx5XT1cInRydWVcIj48L3ZhbHRpbW8tZm9ybS1pbz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3JlYXRlRWRpdE1vZGFsPlxuICA8aWJtLW1vZGFsXG4gICAgKm5nSWY9XCJ7XG4gICAgICBzaG93OiBzaG93TW9kYWwkIHwgYXN5bmMsXG4gICAgICBmb3JtVmFsaWQ6IGZvcm1WYWxpZCQgfCBhc3luYyxcbiAgICAgIGRpc2FibGVJbnB1dDogZGlzYWJsZUlucHV0JCB8IGFzeW5jLFxuICAgICAgZm9ybWlvRm9ybUVkaXQ6IGZvcm1pb0Zvcm1FZGl0JCB8IGFzeW5jXG4gICAgfSBhcyBtb2RhbE9ic1wiXG4gICAgW29wZW5dPVwibW9kYWxPYnMuc2hvd1wiXG4gID5cbiAgICA8aWJtLW1vZGFsLWhlYWRlciBbc2hvd0Nsb3NlQnV0dG9uXT1cInRydWVcIiAoY2xvc2VTZWxlY3QpPVwiY2xvc2VNb2RhbCgpXCI+XG4gICAgICA8aDMgaWJtTW9kYWxIZWFkZXJIZWFkaW5nPlxuICAgICAgICB7eyAnb2JqZWN0LmVkaXRPYmplY3QnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2gzPlxuICAgIDwvaWJtLW1vZGFsLWhlYWRlcj5cbiAgICA8c2VjdGlvbiBpYm1Nb2RhbENvbnRlbnQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWxDb250ZW50OyBjb250ZXh0OiB7bW9kYWxPYnM6IG1vZGFsT2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvc2VjdGlvbj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWxGb290ZXI7IGNvbnRleHQ6IHttb2RhbE9iczogbW9kYWxPYnN9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvaWJtLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RhbENvbnRlbnQgbGV0LW1vZGFsT2JzPVwibW9kYWxPYnNcIj5cbiAgPHZhbHRpbW8tZm9ybS1pb1xuICAgIFtmb3JtXT1cIm1vZGFsT2JzLmZvcm1pb0Zvcm1FZGl0XCJcbiAgICAoY2hhbmdlKT1cIm9uRm9ybWlvQ2hhbmdlKCRldmVudClcIlxuICA+PC92YWx0aW1vLWZvcm0taW8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vZGFsRm9vdGVyIGxldC1tb2RhbE9icz1cIm1vZGFsT2JzXCI+XG4gIDxpYm0tbW9kYWwtZm9vdGVyPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGlibUJ1dHRvbj1cInNlY29uZGFyeVwiXG4gICAgICAgIFthdHRyLm1vZGFsLXByaW1hcnktZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZU1vZGFsKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxPYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgID5cbiAgICAgICAge3sgJ29iamVjdC5jbG9zZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBpYm1CdXR0b249XCJwcmltYXJ5XCJcbiAgICAgICAgW2F0dHIubW9kYWwtcHJpbWFyeS1mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgKGNsaWNrKT1cInNhdmVPYmplY3QoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJtb2RhbE9icy5kaXNhYmxlSW5wdXQgfHwgbW9kYWxPYnMuZm9ybVZhbGlkID09PSBmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdvYmplY3Quc2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2libS1tb2RhbC1mb290ZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWljb25cIj48aWJtLWxvYWRpbmc+PC9pYm0tbG9hZGluZz48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVsZXRlTW9kYWw+XG4gIDx2YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbFxuICAgIFtzaG93TW9kYWxTdWJqZWN0JF09XCJzaG93RGVsZXRlTW9kYWwkXCJcbiAgICBbb3V0cHV0T25Db25maXJtXT1cImRlbGV0ZU9iamVjdFVybCQgfCBhc3luY1wiXG4gICAgKGNvbmZpcm1FdmVudCk9XCJkZWxldGVPYmplY3RDb25maXJtYXRpb24oKVwiXG4gICAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cIm9iamVjdC5kZWxldGVPYmplY3RcIlxuICAgIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJvYmplY3QuZGVsZXRlT2JqZWN0XCJcbiAgICBjb250ZW50VHJhbnNsYXRpb25LZXk9XCJvYmplY3QuZGVsZXRlT2JqZWN0Q29uZmlybWF0aW9uXCJcbiAgPjwvdmFsdGltby1jb25maXJtYXRpb24tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuIl19