@valtimo/decision 12.19.0 → 13.0.1-next-minor.81

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 (43) hide show
  1. package/fesm2022/valtimo-decision.mjs +497 -420
  2. package/fesm2022/valtimo-decision.mjs.map +1 -1
  3. package/lib/decision-deploy/decision-deploy.component.d.ts +18 -7
  4. package/lib/decision-deploy/decision-deploy.component.d.ts.map +1 -1
  5. package/lib/decision-display/decision-display.component.d.ts +5 -7
  6. package/lib/decision-display/decision-display.component.d.ts.map +1 -1
  7. package/lib/decision-list/decision-list.component.d.ts +16 -9
  8. package/lib/decision-list/decision-list.component.d.ts.map +1 -1
  9. package/lib/decision-modeler/decision-modeler.component.d.ts +31 -13
  10. package/lib/decision-modeler/decision-modeler.component.d.ts.map +1 -1
  11. package/lib/decision-routing.module.d.ts.map +1 -1
  12. package/lib/decision.module.d.ts +11 -12
  13. package/lib/decision.module.d.ts.map +1 -1
  14. package/lib/models/decision-management.model.d.ts +6 -0
  15. package/lib/models/decision-management.model.d.ts.map +1 -0
  16. package/lib/models/index.d.ts +1 -0
  17. package/lib/models/index.d.ts.map +1 -1
  18. package/lib/services/decision.service.d.ts +25 -0
  19. package/lib/services/decision.service.d.ts.map +1 -0
  20. package/lib/services/index.d.ts +1 -0
  21. package/lib/services/index.d.ts.map +1 -1
  22. package/package.json +6 -8
  23. package/public-api.d.ts +3 -1
  24. package/public-api.d.ts.map +1 -1
  25. package/esm2022/lib/decision-deploy/decision-deploy.component.mjs +0 -54
  26. package/esm2022/lib/decision-display/decision-display.component.mjs +0 -74
  27. package/esm2022/lib/decision-list/decision-list.component.mjs +0 -74
  28. package/esm2022/lib/decision-modeler/decision-modeler.component.mjs +0 -213
  29. package/esm2022/lib/decision-modeler/empty-decision.mjs +0 -41
  30. package/esm2022/lib/decision-routing.module.mjs +0 -65
  31. package/esm2022/lib/decision.component.mjs +0 -35
  32. package/esm2022/lib/decision.module.mjs +0 -87
  33. package/esm2022/lib/decision.service.mjs +0 -54
  34. package/esm2022/lib/models/decision.model.mjs +0 -17
  35. package/esm2022/lib/models/index.mjs +0 -17
  36. package/esm2022/lib/services/decision-state.service.mjs +0 -38
  37. package/esm2022/lib/services/index.mjs +0 -17
  38. package/esm2022/public-api.mjs +0 -23
  39. package/esm2022/valtimo-decision.mjs +0 -5
  40. package/lib/decision.component.d.ts +0 -12
  41. package/lib/decision.component.d.ts.map +0 -1
  42. package/lib/decision.service.d.ts +0 -19
  43. package/lib/decision.service.d.ts.map +0 -1
@@ -1,163 +1,30 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, EventEmitter, ViewChild, Output, Component, ViewEncapsulation, NgModule } from '@angular/core';
3
- import * as i1 from '@valtimo/config';
4
- import { ROLE_ADMIN } from '@valtimo/config';
5
- import { Subject, startWith, BehaviorSubject, switchMap, map, tap, filter, combineLatest, from, take, catchError, of } from 'rxjs';
6
- import { Upload16 } from '@carbon/icons';
7
- import * as i2 from '@angular/common/http';
8
- import * as i2$1 from 'carbon-components-angular';
9
- import { ButtonModule, IconModule } from 'carbon-components-angular';
10
- import * as i2$2 from '@angular/router';
2
+ import { Injectable, Component, ViewEncapsulation, EventEmitter, Output, ViewChild, NgModule } from '@angular/core';
3
+ import * as i2 from '@angular/router';
11
4
  import { RouterModule } from '@angular/router';
12
- import * as i6 from '@angular/common';
5
+ import * as i7 from '@angular/common';
13
6
  import { CommonModule } from '@angular/common';
14
- import * as i3 from '@valtimo/components';
15
- import { WidgetModule, ListModule, ModalModule, SelectModule, SpinnerModule, CarbonListModule } from '@valtimo/components';
16
- import * as i4 from '@ngx-translate/core';
17
- import { TranslateModule } from '@ngx-translate/core';
18
7
  import { AuthGuardService } from '@valtimo/security';
8
+ import * as i6 from '@valtimo/shared';
9
+ import { BaseApiService, InterceptorSkip, getCaseManagementRouteParams, getContextObservable, ROLE_ADMIN } from '@valtimo/shared';
19
10
  import DmnJS from 'dmn-js/dist/dmn-modeler.development.js';
20
11
  import { migrateDiagram } from '@bpmn-io/dmn-migrate';
21
- import * as i5 from '@valtimo/layout';
12
+ import { BehaviorSubject, map, combineLatest, switchMap, tap, filter, take, from, of, catchError, Subject, startWith } from 'rxjs';
13
+ import * as i4 from '@valtimo/components';
14
+ import { PendingChangesComponent, WidgetModule, SelectModule as SelectModule$1, RenderInPageHeaderDirective, FitPageDirective, CarbonListModule, ModalModule as ModalModule$1, SpinnerModule } from '@valtimo/components';
15
+ import * as i3 from '@ngx-translate/core';
16
+ import { TranslateModule } from '@ngx-translate/core';
17
+ import * as i6$1 from 'carbon-components-angular';
18
+ import { ModalModule, SelectModule, ButtonModule, IconModule, DialogModule, LayerModule, FileUploaderModule } from 'carbon-components-angular';
19
+ import { Deploy16, Download16, ArrowLeft16, Upload16 } from '@carbon/icons';
20
+ import * as i1 from '@angular/common/http';
21
+ import { HttpHeaders } from '@angular/common/http';
22
22
  import DmnViewer from 'dmn-js';
23
- import * as i3$1 from 'ngx-toastr';
24
- import { FormsModule } from '@angular/forms';
25
-
26
- /*
27
- * Copyright 2015-2024 Ritense BV, the Netherlands.
28
- *
29
- * Licensed under EUPL, Version 1.2 (the "License");
30
- * you may not use this file except in compliance with the License.
31
- * You may obtain a copy of the License at
32
- *
33
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
34
- *
35
- * Unless required by applicable law or agreed to in writing, software
36
- * distributed under the License is distributed on an "AS IS" basis,
37
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
38
- * See the License for the specific language governing permissions and
39
- * limitations under the License.
40
- */
41
-
42
- /*
43
- * Copyright 2015-2024 Ritense BV, the Netherlands.
44
- *
45
- * Licensed under EUPL, Version 1.2 (the "License");
46
- * you may not use this file except in compliance with the License.
47
- * You may obtain a copy of the License at
48
- *
49
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
50
- *
51
- * Unless required by applicable law or agreed to in writing, software
52
- * distributed under the License is distributed on an "AS IS" basis,
53
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
54
- * See the License for the specific language governing permissions and
55
- * limitations under the License.
56
- */
57
-
58
- /*
59
- * Copyright 2015-2024 Ritense BV, the Netherlands.
60
- *
61
- * Licensed under EUPL, Version 1.2 (the "License");
62
- * you may not use this file except in compliance with the License.
63
- * You may obtain a copy of the License at
64
- *
65
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
66
- *
67
- * Unless required by applicable law or agreed to in writing, software
68
- * distributed under the License is distributed on an "AS IS" basis,
69
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
70
- * See the License for the specific language governing permissions and
71
- * limitations under the License.
72
- */
73
- class DecisionService {
74
- constructor(configService, http) {
75
- this.configService = configService;
76
- this.http = http;
77
- this.valtimoApiConfig = configService.config.valtimoApi;
78
- }
79
- deployDmn(dmn) {
80
- const formData = new FormData();
81
- formData.append('file', dmn);
82
- formData.append('deployment-name', 'dmnTableDeploy');
83
- formData.append('deployment-source', 'process application');
84
- return this.http.post(`${this.valtimoApiConfig.endpointUri}v1/process/definition/deployment`, formData);
85
- }
86
- getDecisions() {
87
- return this.http.get(`${this.valtimoApiConfig.endpointUri}camunda-rest/engine/default/decision-definition`);
88
- }
89
- getDecisionById(decisionId) {
90
- return this.http.get(`${this.valtimoApiConfig.endpointUri}camunda-rest/engine/default/decision-definition/${decisionId}`);
91
- }
92
- getLatestDecisionByKey(decisionKey) {
93
- return this.http.get(`${this.valtimoApiConfig.endpointUri}camunda-rest/engine/default/decision-definition/key/${decisionKey}`);
94
- }
95
- getDecisionXml(decisionId) {
96
- return this.http.get(`${this.valtimoApiConfig.endpointUri}camunda-rest/engine/default/decision-definition/${decisionId}/xml`);
97
- }
98
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionService, deps: [{ token: i1.ConfigService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
99
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionService, providedIn: 'root' }); }
100
- }
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionService, decorators: [{
102
- type: Injectable,
103
- args: [{
104
- providedIn: 'root',
105
- }]
106
- }], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.HttpClient }] });
107
-
108
- /*
109
- * Copyright 2015-2024 Ritense BV, the Netherlands.
110
- *
111
- * Licensed under EUPL, Version 1.2 (the "License");
112
- * you may not use this file except in compliance with the License.
113
- * You may obtain a copy of the License at
114
- *
115
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
116
- *
117
- * Unless required by applicable law or agreed to in writing, software
118
- * distributed under the License is distributed on an "AS IS" basis,
119
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120
- * See the License for the specific language governing permissions and
121
- * limitations under the License.
122
- */
123
- class DecisionStateService {
124
- constructor() {
125
- this._refreshDecisions$ = new Subject();
126
- }
127
- get refreshDecisions$() {
128
- return this._refreshDecisions$.asObservable().pipe(startWith(null));
129
- }
130
- refreshDecisions() {
131
- this._refreshDecisions$.next(null);
132
- }
133
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
134
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionStateService, providedIn: 'root' }); }
135
- }
136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionStateService, decorators: [{
137
- type: Injectable,
138
- args: [{
139
- providedIn: 'root',
140
- }]
141
- }] });
142
-
143
- /*
144
- * Copyright 2015-2024 Ritense BV, the Netherlands.
145
- *
146
- * Licensed under EUPL, Version 1.2 (the "License");
147
- * you may not use this file except in compliance with the License.
148
- * You may obtain a copy of the License at
149
- *
150
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
151
- *
152
- * Unless required by applicable law or agreed to in writing, software
153
- * distributed under the License is distributed on an "AS IS" basis,
154
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
155
- * See the License for the specific language governing permissions and
156
- * limitations under the License.
157
- */
23
+ import * as i3$1 from '@angular/forms';
24
+ import { Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
158
25
 
159
26
  /*
160
- * Copyright 2015-2024 Ritense BV, the Netherlands.
27
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
161
28
  *
162
29
  * Licensed under EUPL, Version 1.2 (the "License");
163
30
  * you may not use this file except in compliance with the License.
@@ -171,41 +38,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
171
38
  * See the License for the specific language governing permissions and
172
39
  * limitations under the License.
173
40
  */
174
- class DecisionDeployComponent {
175
- constructor(decisionService, stateService) {
176
- this.decisionService = decisionService;
177
- this.stateService = stateService;
178
- this.dmn = null;
179
- this.deploySuccessful = new EventEmitter();
180
- }
181
- onChange(files) {
182
- this.dmn = files.item(0);
183
- }
184
- deployDmn() {
185
- this.decisionService.deployDmn(this.dmn).subscribe(() => {
186
- this.modal.hide();
187
- this.deploySuccessful.emit();
188
- this.stateService.refreshDecisions();
189
- });
190
- }
191
- openModal() {
192
- this.modal.show();
193
- }
194
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionDeployComponent, deps: [{ token: DecisionService }, { token: DecisionStateService }], target: i0.ɵɵFactoryTarget.Component }); }
195
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DecisionDeployComponent, selector: "valtimo-decision-deploy", outputs: { deploySuccessful: "deploySuccessful" }, viewQueries: [{ propertyName: "modal", first: true, predicate: ["decisionDeployModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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\n #decisionDeployModal\n elementId=\"decisionDeployModal\"\n title=\"Upload Decision table\"\n [showFooter]=\"true\"\n>\n <div body>\n <div class=\"mt-3\">{{ 'decisions.upload.description' | translate }}</div>\n <div class=\"form-group mt-3 mb-3\">\n <input type=\"file\" id=\"file\" accept=\".dmn\" (change)=\"onChange($event.target.files)\" />\n </div>\n </div>\n <div footer>\n <div class=\"mb-0 p-3 text-right\">\n <button\n [disabled]=\"!dmn\"\n class=\"btn btn-primary btn-space\"\n type=\"button\"\n (click)=\"deployDmn()\"\n >\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'Upload' | translate }}\n </button>\n </div>\n </div>\n</valtimo-modal>\n", styles: ["/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "component", type: i3.ModalComponent, selector: "valtimo-modal", inputs: ["elementId", "title", "subtitle", "templateBelowSubtitle", "showFooter"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
196
- }
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionDeployComponent, decorators: [{
198
- type: Component,
199
- args: [{ selector: 'valtimo-decision-deploy', template: "<!--\n ~ Copyright 2015-2024 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\n #decisionDeployModal\n elementId=\"decisionDeployModal\"\n title=\"Upload Decision table\"\n [showFooter]=\"true\"\n>\n <div body>\n <div class=\"mt-3\">{{ 'decisions.upload.description' | translate }}</div>\n <div class=\"form-group mt-3 mb-3\">\n <input type=\"file\" id=\"file\" accept=\".dmn\" (change)=\"onChange($event.target.files)\" />\n </div>\n </div>\n <div footer>\n <div class=\"mb-0 p-3 text-right\">\n <button\n [disabled]=\"!dmn\"\n class=\"btn btn-primary btn-space\"\n type=\"button\"\n (click)=\"deployDmn()\"\n >\n <i class=\"icon mdi mdi-upload mr-1\"></i>\n {{ 'Upload' | translate }}\n </button>\n </div>\n </div>\n</valtimo-modal>\n", styles: ["/*!\n * Copyright 2015-2024 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"] }]
200
- }], ctorParameters: () => [{ type: DecisionService }, { type: DecisionStateService }], propDecorators: { deploySuccessful: [{
201
- type: Output
202
- }], modal: [{
203
- type: ViewChild,
204
- args: ['decisionDeployModal']
205
- }] } });
206
41
 
207
42
  /*
208
- * Copyright 2015-2024 Ritense BV, the Netherlands.
43
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
209
44
  *
210
45
  * Licensed under EUPL, Version 1.2 (the "License");
211
46
  * you may not use this file except in compliance with the License.
@@ -219,54 +54,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
219
54
  * See the License for the specific language governing permissions and
220
55
  * limitations under the License.
221
56
  */
222
- class DecisionListComponent {
223
- constructor(decisionService, iconService, router, configService, stateService) {
224
- this.decisionService = decisionService;
225
- this.iconService = iconService;
226
- this.router = router;
227
- this.configService = configService;
228
- this.stateService = stateService;
229
- this.fields = [
230
- { key: 'key', label: 'Key' },
231
- { key: 'name', label: 'Name' },
232
- { key: 'version', label: 'Version' },
233
- ];
234
- this.loading$ = new BehaviorSubject(true);
235
- this.decisionsLatestVersions$ = this.stateService.refreshDecisions$.pipe(switchMap(() => this.decisionService.getDecisions()), map(decisions => decisions.reduce((acc, curr) => {
236
- const findInAcc = acc.find(decision => decision.key === curr.key);
237
- if (findInAcc && findInAcc.version > curr.version) {
238
- return acc;
239
- }
240
- else if (findInAcc && findInAcc.version < curr.version) {
241
- const newAcc = acc.filter(decision => decision.key !== curr.key);
242
- return [...newAcc, curr];
243
- }
244
- return [...acc, curr];
245
- }, [])), tap(() => this.loading$.next(false)));
246
- this.iconService.registerAll([Upload16]);
247
- this.experimentalEditing = this.configService.config.featureToggles.experimentalDmnEditing;
248
- }
249
- viewDecisionTable(decision) {
250
- if (this.experimentalEditing) {
251
- this.router.navigate(['/decision-tables/edit', decision.id]);
252
- }
253
- else {
254
- this.router.navigate(['/decision-tables', decision.id]);
255
- }
256
- }
257
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionListComponent, deps: [{ token: DecisionService }, { token: i2$1.IconService }, { token: i2$2.Router }, { token: i1.ConfigService }, { token: DecisionStateService }], target: i0.ɵɵFactoryTarget.Component }); }
258
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DecisionListComponent, selector: "valtimo-decision-list", viewQueries: [{ propertyName: "deploy", first: true, predicate: ["decisionDeploy"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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<ng-container *ngIf=\"decisionsLatestVersions$ | async as decisions\">\n <ng-container *ngIf=\"(loading$ | async) === false\">\n <valtimo-carbon-list\n [items]=\"decisions\"\n [fields]=\"fields\"\n (rowClicked)=\"viewDecisionTable($event)\"\n [header]=\"false\"\n [isSearchable]=\"true\"\n >\n <ng-container carbonToolbarContent>\n <button cdsButton=\"primary\" (click)=\"this.deploy.openModal()\">\n {{ 'Upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </ng-container>\n </valtimo-carbon-list>\n </ng-container>\n</ng-container>\n\n<valtimo-decision-deploy #decisionDeploy></valtimo-decision-deploy>\n\n<ng-container *ngIf=\"loading$ | async\">\n <valtimo-carbon-list [loading]=\"true\"> </valtimo-carbon-list>\n</ng-container>\n", styles: ["/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "directive", type: i2$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: DecisionDeployComponent, selector: "valtimo-decision-deploy", outputs: ["deploySuccessful"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] }); }
259
- }
260
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionListComponent, decorators: [{
261
- type: Component,
262
- args: [{ selector: 'valtimo-decision-list', template: "<!--\n ~ Copyright 2015-2024 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<ng-container *ngIf=\"decisionsLatestVersions$ | async as decisions\">\n <ng-container *ngIf=\"(loading$ | async) === false\">\n <valtimo-carbon-list\n [items]=\"decisions\"\n [fields]=\"fields\"\n (rowClicked)=\"viewDecisionTable($event)\"\n [header]=\"false\"\n [isSearchable]=\"true\"\n >\n <ng-container carbonToolbarContent>\n <button cdsButton=\"primary\" (click)=\"this.deploy.openModal()\">\n {{ 'Upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </ng-container>\n </valtimo-carbon-list>\n </ng-container>\n</ng-container>\n\n<valtimo-decision-deploy #decisionDeploy></valtimo-decision-deploy>\n\n<ng-container *ngIf=\"loading$ | async\">\n <valtimo-carbon-list [loading]=\"true\"> </valtimo-carbon-list>\n</ng-container>\n", styles: ["/*!\n * Copyright 2015-2024 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"] }]
263
- }], ctorParameters: () => [{ type: DecisionService }, { type: i2$1.IconService }, { type: i2$2.Router }, { type: i1.ConfigService }, { type: DecisionStateService }], propDecorators: { deploy: [{
264
- type: ViewChild,
265
- args: ['decisionDeploy']
266
- }] } });
267
57
 
268
58
  /*
269
- * Copyright 2015-2024 Ritense BV, the Netherlands.
59
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
270
60
  *
271
61
  * Licensed under EUPL, Version 1.2 (the "License");
272
62
  * you may not use this file except in compliance with the License.
@@ -280,24 +70,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
280
70
  * See the License for the specific language governing permissions and
281
71
  * limitations under the License.
282
72
  */
283
- class DecisionComponent {
284
- constructor(configService) {
285
- this.configService = configService;
286
- this.experimentalEditing = this.configService.config.featureToggles.experimentalDmnEditing;
287
- }
288
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionComponent, deps: [{ token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
289
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DecisionComponent, selector: "valtimo-decision", viewQueries: [{ propertyName: "list", first: true, predicate: ["decisionList"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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\">\n <div class=\"container-fluid\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3\">\n <!-- <button-->\n <!-- *ngIf=\"experimentalEditing\"-->\n <!-- class=\"btn btn-primary btn-space\"-->\n <!-- [routerLink]=\"'edit/create'\"-->\n <!-- >-->\n <!-- <i class=\"icon mdi mdi-plus mr-1\"></i>-->\n <!-- {{ 'Create decision table' | translate }}-->\n <!-- </button>-->\n </div>\n </div>\n <valtimo-decision-list #decisionList></valtimo-decision-list>\n </div>\n</div>\n", styles: ["/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "component", type: DecisionListComponent, selector: "valtimo-decision-list" }] }); }
290
- }
291
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionComponent, decorators: [{
292
- type: Component,
293
- args: [{ selector: 'valtimo-decision', template: "<!--\n ~ Copyright 2015-2024 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\">\n <div class=\"container-fluid\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3\">\n <!-- <button-->\n <!-- *ngIf=\"experimentalEditing\"-->\n <!-- class=\"btn btn-primary btn-space\"-->\n <!-- [routerLink]=\"'edit/create'\"-->\n <!-- >-->\n <!-- <i class=\"icon mdi mdi-plus mr-1\"></i>-->\n <!-- {{ 'Create decision table' | translate }}-->\n <!-- </button>-->\n </div>\n </div>\n <valtimo-decision-list #decisionList></valtimo-decision-list>\n </div>\n</div>\n", styles: ["/*!\n * Copyright 2015-2024 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"] }]
294
- }], ctorParameters: () => [{ type: i1.ConfigService }], propDecorators: { list: [{
295
- type: ViewChild,
296
- args: ['decisionList']
297
- }] } });
298
73
 
299
74
  /*
300
- * Copyright 2015-2024 Ritense BV, the Netherlands.
75
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
301
76
  *
302
77
  * Licensed under EUPL, Version 1.2 (the "License");
303
78
  * you may not use this file except in compliance with the License.
@@ -336,15 +111,82 @@ const EMPTY_DECISION = {
336
111
  `,
337
112
  };
338
113
 
339
- class DecisionModelerComponent {
340
- constructor(decisionService, route, router, alertService, translateService, layoutService, pageTitleService) {
114
+ /*
115
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
116
+ *
117
+ * Licensed under EUPL, Version 1.2 (the "License");
118
+ * you may not use this file except in compliance with the License.
119
+ * You may obtain a copy of the License at
120
+ *
121
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
122
+ *
123
+ * Unless required by applicable law or agreed to in writing, software
124
+ * distributed under the License is distributed on an "AS IS" basis,
125
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
126
+ * See the License for the specific language governing permissions and
127
+ * limitations under the License.
128
+ */
129
+ class DecisionService extends BaseApiService {
130
+ constructor(httpClient, configService) {
131
+ super(httpClient, configService);
132
+ this.httpClient = httpClient;
133
+ this.configService = configService;
134
+ }
135
+ deployDmn(dmn) {
136
+ const formData = new FormData();
137
+ formData.append('file', dmn);
138
+ formData.append('deployment-name', 'dmnTableDeploy');
139
+ formData.append('deployment-source', 'process application');
140
+ return this.httpClient.post(this.getApiUrl('/v1/process/definition/deployment'), formData);
141
+ }
142
+ getDecisions() {
143
+ return this.httpClient.get(this.getApiUrl('/operaton-rest/engine/default/decision-definition'));
144
+ }
145
+ getDecisionById(decisionId) {
146
+ return this.httpClient.get(this.getApiUrl(`/operaton-rest/engine/default/decision-definition/${decisionId}`));
147
+ }
148
+ getLatestDecisionByKey(decisionKey) {
149
+ return this.httpClient.get(this.getApiUrl(`/operaton-rest/engine/default/decision-definition/key/${decisionKey}`));
150
+ }
151
+ getDecisionXml(decisionId) {
152
+ return this.httpClient.get(this.getApiUrl(`/operaton-rest/engine/default/decision-definition/${decisionId}/xml`));
153
+ }
154
+ listCaseDecisionDefinitions(caseDefinitionKey, versionTag) {
155
+ return this.httpClient.get(this.getApiUrl(`/management/v1/case-definition/${caseDefinitionKey}/version/${versionTag}/decision-definition`));
156
+ }
157
+ deployCaseDecisionDefinition(caseDefinitionKey, versionTag, dmn) {
158
+ const formData = new FormData();
159
+ formData.append('file', dmn);
160
+ return this.httpClient.post(this.getApiUrl(`/management/v1/case-definition/${caseDefinitionKey}/version/${versionTag}/decision-definition`), formData, {
161
+ headers: new HttpHeaders().set(InterceptorSkip, '204'),
162
+ });
163
+ }
164
+ deleteCaseDecisionDefinition(caseDefinitionKey, versionTag, decisionDefinitionKey) {
165
+ return this.httpClient.delete(this.getApiUrl(`/management/v1/case-definition/${caseDefinitionKey}/version/${versionTag}/decision-definition/${decisionDefinitionKey}`));
166
+ }
167
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionService, deps: [{ token: i1.HttpClient }, { token: i6.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
168
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionService, providedIn: 'root' }); }
169
+ }
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionService, decorators: [{
171
+ type: Injectable,
172
+ args: [{
173
+ providedIn: 'root',
174
+ }]
175
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i6.ConfigService }] });
176
+
177
+ class DecisionModelerComponent extends PendingChangesComponent {
178
+ constructor(decisionService, route, router, translateService, pageTitleService, breadcrumbService, iconService, pageHeaderService, notificationService, editPermissionsService) {
179
+ super();
341
180
  this.decisionService = decisionService;
342
181
  this.route = route;
343
182
  this.router = router;
344
- this.alertService = alertService;
345
183
  this.translateService = translateService;
346
- this.layoutService = layoutService;
347
184
  this.pageTitleService = pageTitleService;
185
+ this.breadcrumbService = breadcrumbService;
186
+ this.iconService = iconService;
187
+ this.pageHeaderService = pageHeaderService;
188
+ this.notificationService = notificationService;
189
+ this.editPermissionsService = editPermissionsService;
348
190
  this.CLASS_NAMES = {
349
191
  drd: 'dmn-icon-lasso-tool',
350
192
  decisionTable: 'dmn-icon-decision-table',
@@ -352,123 +194,73 @@ class DecisionModelerComponent {
352
194
  };
353
195
  this.versionSelectionDisabled$ = new BehaviorSubject(true);
354
196
  this.isCreating$ = new BehaviorSubject(false);
355
- this.decisionId$ = this.route.params.pipe(map(params => params?.id), tap(decisionId => this.isCreating$.next(decisionId === 'create')), filter(decisionId => !!decisionId && decisionId !== 'create'), tap(() => this.versionSelectionDisabled$.next(true)));
356
197
  this.selectionId$ = new BehaviorSubject('');
357
- this.decision$ = this.decisionId$.pipe(switchMap(decisionId => this.decisionService.getDecisionById(decisionId)), tap(decision => {
358
- if (decision) {
198
+ this.caseManagementRouteParams$ = getCaseManagementRouteParams(this.route);
199
+ this.context$ = getContextObservable(this.route);
200
+ this.isIndependent$ = this.context$.pipe(map(context => context === 'independent'));
201
+ this.compactMode$ = this.pageHeaderService.compactMode$;
202
+ this.hasEditPermissions$ = combineLatest([
203
+ this.caseManagementRouteParams$,
204
+ this.context$,
205
+ ]).pipe(switchMap(([params, context]) => this.editPermissionsService.hasPermissionsToEditBasedOnContext(params?.caseDefinitionKey ?? '', params?.caseDefinitionVersionTag ?? '', context ?? '')));
206
+ this.decisionId$ = this.route.params.pipe(map(params => params?.id), tap(id => {
207
+ this.isCreating$.next(id === 'create');
208
+ this.versionSelectionDisabled$.next(true);
209
+ }), filter(id => !!id && id !== 'create'));
210
+ this.decision$ = this.decisionId$.pipe(switchMap(id => this.decisionService.getDecisionById(id)), tap(decision => {
211
+ this._fileName = decision.resource;
212
+ if (decision)
359
213
  this.selectionId$.next(decision.id);
360
- }
361
- }));
362
- this.decisionTitle$ = this.decision$.pipe(map(decision => decision?.key || ''), tap(decisionTitle => {
363
- this.pageTitleService.setCustomPageTitle(decisionTitle);
364
214
  }));
365
- this.createdDecisionVersionSelectItems$ = new BehaviorSubject([]);
366
- this.decisionVersionSelectItems$ = combineLatest([
367
- this.decision$,
368
- this.decisionService.getDecisions(),
369
- this.createdDecisionVersionSelectItems$,
370
- ]).pipe(map(([currentDecision, decisions, createdDecisionVersionSelectItems]) => {
371
- const decisionsWithKey = decisions.filter(decision => decision.key === currentDecision.key);
372
- return [
373
- ...decisionsWithKey.map(decision => ({
374
- id: decision.id,
375
- text: decision.version.toString(),
376
- })),
377
- ...createdDecisionVersionSelectItems,
378
- ].sort((a, b) => Number(b.text) - Number(a.text));
215
+ this.decisionTitle$ = this.decision$.pipe(map(d => d?.name || d?.key || '-'), tap(title => this.pageTitleService.setCustomPageTitle(title)));
216
+ this._refreshDecisionSelectItems$ = new BehaviorSubject(null);
217
+ this.decisionVersionSelectItems$ = this._refreshDecisionSelectItems$.pipe(switchMap(() => combineLatest([this.decision$, this.decisionService.getDecisions()])), map(([current, list]) => {
218
+ const filtered = list.filter(d => d.key === current.key);
219
+ return [...filtered.map(d => ({ id: d.id, text: d.version.toString() }))].sort((a, b) => +(b.text ?? '') - +(a.text ?? ''));
379
220
  }), tap(() => this.versionSelectionDisabled$.next(false)));
380
- this.decisionXml$ = this.decisionId$.pipe(switchMap(decisionId => this.decisionService.getDecisionXml(decisionId)), tap(decisionXml => {
381
- if (decisionXml) {
382
- this.loadDecisionXml(decisionXml);
383
- }
384
- }));
385
- this.setTabEvents = () => {
386
- const $tabs = this.$tabs;
387
- const dmnModeler = this.dmnModeler;
388
- $tabs.delegate('.tab', 'click', async function (e) {
389
- // get index of view from clicked tab
390
- const viewIdx = parseInt(this.getAttribute('data-id'), 10);
391
- // get view using index
392
- const view = dmnModeler.getViews()[viewIdx];
393
- // open view
394
- try {
395
- await dmnModeler.open(view);
396
- }
397
- catch (err) {
398
- console.error('error opening tab', err);
399
- }
400
- });
401
- };
402
- this.setModelerEvents = () => {
403
- const $tabs = this.$tabs;
404
- const CLASS_NAMES = this.CLASS_NAMES;
405
- this.dmnModeler.on('views.changed', function (event) {
406
- // get views from event
407
- const { views, activeView } = event;
408
- // clear tabs
409
- $tabs.empty();
410
- // create a new tab for each view
411
- views.forEach(function (v, idx) {
412
- const className = CLASS_NAMES[v.type];
413
- const tab = $(`
414
- <div class="tab ${v === activeView ? 'active' : ''}" data-id="${idx}">
415
- <span class="${className}"></span>
416
- ${v.element.name || v.element.id}
417
- </div>
418
- `);
419
- $tabs.append(tab);
420
- });
421
- });
422
- };
221
+ this.decisionXml$ = this.decisionId$.pipe(switchMap(id => this.decisionService.getDecisionXml(id)), tap(xml => xml && this.loadDecisionXml(xml)));
222
+ this.iconService.registerAll([Deploy16, Download16, ArrowLeft16]);
223
+ }
224
+ ngOnInit() {
225
+ this.pageTitleService.disableReset();
226
+ }
227
+ ngOnDestroy() {
228
+ this.pageTitleService.enableReset();
423
229
  }
424
230
  ngAfterViewInit() {
425
231
  this.setProperties();
426
232
  this.setTabEvents();
427
233
  this.setModelerEvents();
234
+ combineLatest([this.caseManagementRouteParams$, this.context$])
235
+ .pipe(take(1))
236
+ .subscribe(([params, context]) => {
237
+ if (!params || !context)
238
+ return;
239
+ this.initBreadcrumbs(params, context);
240
+ });
428
241
  }
429
242
  switchVersion(decisionId) {
430
- if (decisionId) {
431
- this.router.navigate(['/decision-tables/edit', decisionId]);
432
- }
243
+ if (!decisionId)
244
+ return;
245
+ this.router.navigate(['../', decisionId], { relativeTo: this.route });
246
+ this._refreshDecisionSelectItems$.next(null);
433
247
  }
434
248
  deploy() {
435
249
  from(this.dmnModeler.saveXML({ format: true }))
436
- .pipe(map(result => result.xml), map(xml => new File([xml], 'decision.dmn', {
437
- type: 'text/xml',
438
- })), switchMap(file => this.decisionService.deployDmn(file)), tap(res => {
439
- const deployedDefinitions = res.deployedDecisionDefinitions;
440
- const deployedDecisionDefinition = deployedDefinitions[Object.keys(deployedDefinitions)[0]];
441
- const deployedId = deployedDecisionDefinition.id;
442
- this.createdDecisionVersionSelectItems$
443
- .pipe(take(1))
444
- .subscribe(createdDecisionVersionSelectItems => {
445
- if (deployedDecisionDefinition) {
446
- this.createdDecisionVersionSelectItems$.next([
447
- ...createdDecisionVersionSelectItems,
448
- {
449
- id: deployedId,
450
- text: deployedDecisionDefinition.version.toString(),
451
- },
452
- ]);
453
- }
454
- if (deployedId) {
455
- setTimeout(() => {
456
- this.switchVersion(deployedId);
457
- this.alertService.success(this.translateService.instant('decisions.deploySuccess'));
458
- });
459
- }
460
- });
250
+ .pipe(map(result => new File([result.xml], this._fileName, { type: 'text/xml' })), switchMap(file => combineLatest([of(file), this.context$])), switchMap(([file, context]) => context === 'independent'
251
+ ? this.decisionService.deployDmn(file)
252
+ : this.caseManagementRouteParams$.pipe(switchMap(params => this.decisionService.deployCaseDecisionDefinition(params?.caseDefinitionKey ?? '', params?.caseDefinitionVersionTag ?? '', file)))), tap((res) => {
253
+ this.switchVersion(res.identifier);
254
+ this.showNotification('success', 'decisions.deploySuccess');
461
255
  }), catchError(() => {
462
- this.alertService.error(this.translateService.instant('decisions.deployFailure'));
256
+ this.showNotification('error', 'decisions.deployFailure');
463
257
  return of(null);
464
258
  }))
465
259
  .subscribe();
466
260
  }
467
261
  download() {
468
262
  from(this.dmnModeler.saveXML({ format: true }))
469
- .pipe(map(result => result.xml), map(xml => new File([xml], 'decision.dmn', {
470
- type: 'text/xml',
471
- })), tap(file => {
263
+ .pipe(map(result => new File([result.xml], 'decision.dmn', { type: 'text/xml' })), tap(file => {
472
264
  const link = document.createElement('a');
473
265
  link.download = 'diagram.dmn';
474
266
  link.href = window.URL.createObjectURL(file);
@@ -478,6 +270,21 @@ class DecisionModelerComponent {
478
270
  }))
479
271
  .subscribe();
480
272
  }
273
+ navigateBack(notification, message) {
274
+ this.router.navigate(['../'], { relativeTo: this.route });
275
+ if (!notification)
276
+ return;
277
+ this.showNotification(notification, message);
278
+ }
279
+ showNotification(notification, message) {
280
+ if (!notification)
281
+ return;
282
+ this.notificationService.showToast({
283
+ caption: this.translateService.instant(message),
284
+ type: notification,
285
+ title: this.translateService.instant(`interface.${notification}`),
286
+ });
287
+ }
481
288
  setProperties() {
482
289
  const isCreating = this.isCreating$.getValue();
483
290
  this.$container = $('.editor-container');
@@ -486,22 +293,40 @@ class DecisionModelerComponent {
486
293
  container: this.$container,
487
294
  height: 500,
488
295
  width: '100%',
489
- keyboard: {
490
- bindTo: window,
491
- },
296
+ keyboard: { bindTo: window },
492
297
  });
493
- if (isCreating) {
298
+ if (isCreating)
494
299
  this.loadEmptyDecisionTable();
495
- }
496
300
  }
497
301
  loadEmptyDecisionTable() {
498
302
  this.loadDecisionXml(EMPTY_DECISION);
499
303
  }
304
+ setTabEvents() {
305
+ this.$tabs.delegate('.tab', 'click', async (event) => {
306
+ const index = +event.currentTarget.getAttribute('data-id');
307
+ const view = this.dmnModeler.getViews()[index];
308
+ try {
309
+ await this.dmnModeler.open(view);
310
+ }
311
+ catch (err) {
312
+ console.error('tab open error', err);
313
+ }
314
+ });
315
+ }
316
+ setModelerEvents() {
317
+ this.dmnModeler.on('views.changed', event => {
318
+ const { views, activeView } = event;
319
+ this.$tabs.empty();
320
+ views.forEach((v, i) => {
321
+ const className = this.CLASS_NAMES[v.type];
322
+ const tab = $(`<div class="tab ${v === activeView ? 'active' : ''}" data-id="${i}"><span class="${className}"></span>${v.element.name || v.element.id}</div>`);
323
+ this.$tabs.append(tab);
324
+ });
325
+ });
326
+ }
500
327
  loadDecisionXml(decision) {
501
328
  from(this.dmnModeler.importXML(decision.dmnXml))
502
- .pipe(tap(() => {
503
- this.setEditor();
504
- }), catchError(() => {
329
+ .pipe(tap(() => this.setEditor()), catchError(() => {
505
330
  this.migrateAndLoadDecisionXml(decision);
506
331
  return of(null);
507
332
  }))
@@ -509,36 +334,58 @@ class DecisionModelerComponent {
509
334
  }
510
335
  migrateAndLoadDecisionXml(decision) {
511
336
  from(migrateDiagram(decision.dmnXml))
512
- .pipe(switchMap(decisionXml => this.dmnModeler.importXML(decisionXml)), tap(() => {
513
- this.setEditor();
514
- }), catchError(() => {
515
- this.alertService.error(this.translateService.instant('decisions.loadFailure'));
337
+ .pipe(switchMap(xml => this.dmnModeler.importXML(xml)), tap(() => this.setEditor()), catchError(() => {
338
+ this.showNotification('error', 'decisions.loadFailure');
516
339
  return of(null);
517
340
  }))
518
341
  .subscribe();
519
342
  }
520
343
  setEditor() {
521
- const dmnModeler = this.dmnModeler;
522
- const activeView = dmnModeler.getActiveView();
523
- // apply initial logic in DRD view
524
- if (activeView.type === 'drd') {
525
- const activeEditor = dmnModeler.getActiveViewer();
526
- // access active editor components
527
- const canvas = activeEditor.get('canvas');
528
- // zoom to fit full viewport
344
+ const view = this.dmnModeler.getActiveView();
345
+ if (view?.type === 'drd') {
346
+ const canvas = this.dmnModeler.getActiveViewer().get('canvas');
529
347
  canvas.zoom('fit-viewport');
530
348
  }
531
349
  }
532
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionModelerComponent, deps: [{ token: DecisionService }, { token: i2$2.ActivatedRoute }, { token: i2$2.Router }, { token: i3.AlertService }, { token: i4.TranslateService }, { token: i5.LayoutService }, { token: i3.PageTitleService }], target: i0.ɵɵFactoryTarget.Component }); }
533
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DecisionModelerComponent, selector: "valtimo-decision-modeler", ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n [ngClass]=\"{'main-content pt-0': !layoutService.isFullscreen}\"\n class=\"mb-5\"\n *ngIf=\"{\n decisionXml: decisionXml$ | async,\n decisionTitle: decisionTitle$ | async,\n } as obs\"\n>\n <div [ngClass]=\"{'container-fluid': !layoutService.isFullscreen}\">\n <ng-container *ngTemplateOutlet=\"buttons\"></ng-container>\n <ng-container *ngTemplateOutlet=\"createButtons\"></ng-container>\n <div [ngClass]=\"{'mt-4': !layoutService.isFullscreen}\" class=\"modeler pl-3 pr-3 mb-3\">\n <ng-container *ngTemplateOutlet=\"diagramHeader\"></ng-container>\n <ng-container *ngTemplateOutlet=\"diagram\"></ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #buttons>\n <div\n class=\"text-right\"\n *ngIf=\"(isCreating$ | async) === false && {selectionId: selectionId$ | async} as obs\"\n >\n <div class=\"btn-group mt-m3px mb-3\" *ngIf=\"obs.selectionId && !layoutService.isFullscreen\">\n <button class=\"btn btn-primary btn-space\" (click)=\"download()\">\n <i class=\"icon mdi mdi-download mr-1\"></i>{{ 'processManagement.download' | translate }}\n </button>\n <button\n class=\"btn btn-success btn-space\"\n (click)=\"deploy()\"\n [ngClass]=\"{'mr-0': obs.selectionId !== null}\"\n >\n <i class=\"icon mdi mdi-upload mr-1\"></i>{{ 'decisions.deploy' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #createButtons>\n <div class=\"text-right\" *ngIf=\"isCreating$ | async\">\n <div class=\"btn-group mt-m3px mb-3\" *ngIf=\"!layoutService.isFullscreen\">\n <button class=\"btn btn-success btn-space\" (click)=\"deploy()\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>{{ 'decisions.deploy' | translate }}\n </button>\n <!-- <button-->\n <!-- *ngIf=\"selectedVersion === null\"-->\n <!-- class=\"btn btn-danger btn-space mr-0\"-->\n <!-- (click)=\"reset()\"-->\n <!-- >-->\n <!-- <i class=\"icon mdi mdi-delete mr-1\"></i>{{ 'processManagement.clear' | translate }}-->\n <!-- </button>-->\n </div>\n </div>\n</ng-template>\n\n<ng-template #diagramHeader>\n <div class=\"row pt-4 pb-3 bg-light diagram-header justify-content-between\">\n <ng-container *ngTemplateOutlet=\"versionSelection\"></ng-container>\n <ng-container *ngTemplateOutlet=\"fullScreenToggle\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #versionSelection>\n <div class=\"col-md-2 d-flex justify-content-center align-items-center\">\n <ng-container\n *ngIf=\"\n (isCreating$ | async) === false && {\n versionSelectItems: decisionVersionSelectItems$ | async,\n defaultSelectionId: selectionId$ | async,\n disabled: versionSelectionDisabled$ | async,\n } as obs\n \"\n >\n <v-select\n name=\"version\"\n [title]=\"'decisions.version' | translate\"\n [disabled]=\"obs.disabled\"\n [clearable]=\"false\"\n [loading]=\"!obs.versionSelectItems\"\n [items]=\"obs.versionSelectItems\"\n [defaultSelectionId]=\"obs.defaultSelectionId\"\n [widthInPx]=\"100\"\n (selectedChange)=\"switchVersion($event)\"\n ></v-select>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #fullScreenToggle>\n <div class=\"col-md-2 d-flex fullscreen-toggle align-items-start justify-content-end\">\n <i\n (click)=\"layoutService.toggleFullscreen()\"\n [ngClass]=\"{\n 'mdi-fullscreen': !layoutService.isFullscreen,\n 'mdi-fullscreen-exit': layoutService.isFullscreen,\n }\"\n class=\"mdi\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #diagram>\n <div class=\"row bg-white diagram mb-3\">\n <div class=\"dmn-modeler\">\n <div class=\"test-container\">\n <div class=\"editor-parent\">\n <div class=\"editor-container\"></div>\n <div class=\"editor-tabs\"></div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["#save-button{position:absolute;bottom:10px;left:10px;background:#fff;border:solid 1px #ccc;border-radius:2px;padding:8px;font-family:Arial,sans-serif;font-weight:700;cursor:default;font-size:14px;color:#444}.dmn-modeler{display:flex;flex-direction:column;width:100%;padding:1rem}.diagram,.diagram-header{border:1px solid #dee2e6}.decision-title{color:#6b6b6b;font-size:1.5rem;margin:0}.fullscreen-toggle{font-size:2rem}.fullscreen-toggle>i{cursor:pointer}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i3.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline", "dataTestId"], outputs: ["selectedChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] }); }
350
+ initBreadcrumbs(params, context) {
351
+ if (context === 'independent')
352
+ return;
353
+ const route = `/case-management/case/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}`;
354
+ this.breadcrumbService.setThirdBreadcrumb({
355
+ route: [route],
356
+ content: `${params.caseDefinitionKey} (${params.caseDefinitionVersionTag})`,
357
+ href: route,
358
+ });
359
+ const routeWithDecisions = `${route}/decisions`;
360
+ this.breadcrumbService.setFourthBreadcrumb({
361
+ route: [routeWithDecisions],
362
+ content: this.translateService.instant('caseManagement.tabs.decision'),
363
+ href: routeWithDecisions,
364
+ });
365
+ }
366
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionModelerComponent, deps: [{ token: DecisionService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.TranslateService }, { token: i4.PageTitleService }, { token: i4.BreadcrumbService }, { token: i6$1.IconService }, { token: i4.PageHeaderService }, { token: i6.GlobalNotificationService }, { token: i6.EditPermissionsService }], target: i0.ɵɵFactoryTarget.Component }); }
367
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: DecisionModelerComponent, isStandalone: true, selector: "valtimo-decision-modeler", usesInheritance: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n decisionXml: decisionXml$ | async,\n decisionTitle: decisionTitle$ | async,\n } as obs\"\n fitPage\n [disableOverflow]=\"true\"\n class=\"dmn-editor\"\n>\n <ng-container *ngTemplateOutlet=\"diagram\"></ng-container>\n</div>\n\n<ng-template #diagram>\n <div class=\"editor-parent\">\n <div class=\"editor-container\"></div>\n <div class=\"editor-tabs\"></div>\n </div>\n</ng-template>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <div\n *ngIf=\"{\n selectionId: selectionId$ | async,\n isCreating: isCreating$ | async,\n context: context$ | async,\n compactMode: compactMode$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n class=\"decision-modeler-actions\"\n >\n <ng-container *ngTemplateOutlet=\"versionSelection\"></ng-container>\n\n <button\n *ngIf=\"obs.context === 'case'\"\n cdsButton=\"secondary\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n (click)=\"navigateBack(null)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"arrow--left\" size=\"16\"></svg>\n\n <span>{{ 'interface.back' | translate }}</span>\n </button>\n\n @if (obs.selectionId && !obs.isCreating) {\n <button\n *ngIf=\"obs.hasEditPermissions\"\n cdsButton=\"primary\"\n (click)=\"deploy()\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n >\n {{ 'decisions.deploy' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"deploy\" size=\"16\"></svg>\n </button>\n\n <cds-overflow-menu class=\"overflow-button\">\n <cds-overflow-menu-option (selected)=\"download()\"\n >{{ 'interface.export' | translate }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n } @else {\n <button class=\"btn btn-success btn-space\" (click)=\"deploy()\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>{{ 'decisions.deploy' | translate }}\n </button>\n }\n </div>\n </ng-template>\n</ng-container>\n\n<ng-template #versionSelection>\n <ng-container\n *ngIf=\"{\n selectItems: (decisionVersionSelectItems$ | async) || [],\n isIndependent: isIndependent$ | async,\n versionSelectionDisabled: versionSelectionDisabled$ | async,\n selectionId: selectionId$ | async,\n } as obs\"\n >\n <v-select\n *ngIf=\"obs.isIndependent\"\n name=\"version\"\n [title]=\"'decisions.version' | translate\"\n [disabled]=\"obs.versionSelectionDisabled\"\n [clearable]=\"false\"\n [loading]=\"obs.selectItems.length === 0\"\n [items]=\"obs.selectItems\"\n [defaultSelectionId]=\"obs.selectionId\"\n [widthInPx]=\"120\"\n (selectedChange)=\"switchVersion($event)\"\n ></v-select>\n </ng-container>\n</ng-template>\n", styles: ["#save-button{position:absolute;bottom:10px;left:10px;background:#fff;border:solid 1px #ccc;border-radius:2px;padding:8px;font-family:Arial,sans-serif;font-weight:700;cursor:default;font-size:14px;color:#444}.dmn-modeler{display:flex;flex-direction:column;width:100%;padding:1rem}.diagram,.diagram-header{border:1px solid #dee2e6}.decision-title{color:#6b6b6b;font-size:1.5rem;margin:0}.fullscreen-toggle{font-size:2rem}.fullscreen-toggle>i{cursor:pointer}.dmn-editor{background-color:var(--cds-layer);outline:1px solid var(--cds-border-subtle);outline-offset:-1px;padding:16px}.decision-modeler-actions{display:flex;width:100%;justify-content:flex-end;align-items:flex-end;gap:16px}\n/*!\n * Copyright 2015-2025 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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: ModalModule }, { kind: "ngmodule", type: SelectModule }, { kind: "ngmodule", type: WidgetModule }, { kind: "ngmodule", type: SelectModule$1 }, { kind: "component", type: i4.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "invalid", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "clearable", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline", "dataTestId"], outputs: ["selectedChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "directive", type: RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i6$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: FitPageDirective, selector: "[fitPage]", inputs: ["extraSpace", "disabled", "disableOverflow"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i6$1.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "description", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i6$1.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }] }); }
534
368
  }
535
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionModelerComponent, decorators: [{
369
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionModelerComponent, decorators: [{
536
370
  type: Component,
537
- args: [{ selector: 'valtimo-decision-modeler', template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n [ngClass]=\"{'main-content pt-0': !layoutService.isFullscreen}\"\n class=\"mb-5\"\n *ngIf=\"{\n decisionXml: decisionXml$ | async,\n decisionTitle: decisionTitle$ | async,\n } as obs\"\n>\n <div [ngClass]=\"{'container-fluid': !layoutService.isFullscreen}\">\n <ng-container *ngTemplateOutlet=\"buttons\"></ng-container>\n <ng-container *ngTemplateOutlet=\"createButtons\"></ng-container>\n <div [ngClass]=\"{'mt-4': !layoutService.isFullscreen}\" class=\"modeler pl-3 pr-3 mb-3\">\n <ng-container *ngTemplateOutlet=\"diagramHeader\"></ng-container>\n <ng-container *ngTemplateOutlet=\"diagram\"></ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #buttons>\n <div\n class=\"text-right\"\n *ngIf=\"(isCreating$ | async) === false && {selectionId: selectionId$ | async} as obs\"\n >\n <div class=\"btn-group mt-m3px mb-3\" *ngIf=\"obs.selectionId && !layoutService.isFullscreen\">\n <button class=\"btn btn-primary btn-space\" (click)=\"download()\">\n <i class=\"icon mdi mdi-download mr-1\"></i>{{ 'processManagement.download' | translate }}\n </button>\n <button\n class=\"btn btn-success btn-space\"\n (click)=\"deploy()\"\n [ngClass]=\"{'mr-0': obs.selectionId !== null}\"\n >\n <i class=\"icon mdi mdi-upload mr-1\"></i>{{ 'decisions.deploy' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #createButtons>\n <div class=\"text-right\" *ngIf=\"isCreating$ | async\">\n <div class=\"btn-group mt-m3px mb-3\" *ngIf=\"!layoutService.isFullscreen\">\n <button class=\"btn btn-success btn-space\" (click)=\"deploy()\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>{{ 'decisions.deploy' | translate }}\n </button>\n <!-- <button-->\n <!-- *ngIf=\"selectedVersion === null\"-->\n <!-- class=\"btn btn-danger btn-space mr-0\"-->\n <!-- (click)=\"reset()\"-->\n <!-- >-->\n <!-- <i class=\"icon mdi mdi-delete mr-1\"></i>{{ 'processManagement.clear' | translate }}-->\n <!-- </button>-->\n </div>\n </div>\n</ng-template>\n\n<ng-template #diagramHeader>\n <div class=\"row pt-4 pb-3 bg-light diagram-header justify-content-between\">\n <ng-container *ngTemplateOutlet=\"versionSelection\"></ng-container>\n <ng-container *ngTemplateOutlet=\"fullScreenToggle\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #versionSelection>\n <div class=\"col-md-2 d-flex justify-content-center align-items-center\">\n <ng-container\n *ngIf=\"\n (isCreating$ | async) === false && {\n versionSelectItems: decisionVersionSelectItems$ | async,\n defaultSelectionId: selectionId$ | async,\n disabled: versionSelectionDisabled$ | async,\n } as obs\n \"\n >\n <v-select\n name=\"version\"\n [title]=\"'decisions.version' | translate\"\n [disabled]=\"obs.disabled\"\n [clearable]=\"false\"\n [loading]=\"!obs.versionSelectItems\"\n [items]=\"obs.versionSelectItems\"\n [defaultSelectionId]=\"obs.defaultSelectionId\"\n [widthInPx]=\"100\"\n (selectedChange)=\"switchVersion($event)\"\n ></v-select>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #fullScreenToggle>\n <div class=\"col-md-2 d-flex fullscreen-toggle align-items-start justify-content-end\">\n <i\n (click)=\"layoutService.toggleFullscreen()\"\n [ngClass]=\"{\n 'mdi-fullscreen': !layoutService.isFullscreen,\n 'mdi-fullscreen-exit': layoutService.isFullscreen,\n }\"\n class=\"mdi\"\n ></i>\n </div>\n</ng-template>\n\n<ng-template #diagram>\n <div class=\"row bg-white diagram mb-3\">\n <div class=\"dmn-modeler\">\n <div class=\"test-container\">\n <div class=\"editor-parent\">\n <div class=\"editor-container\"></div>\n <div class=\"editor-tabs\"></div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["#save-button{position:absolute;bottom:10px;left:10px;background:#fff;border:solid 1px #ccc;border-radius:2px;padding:8px;font-family:Arial,sans-serif;font-weight:700;cursor:default;font-size:14px;color:#444}.dmn-modeler{display:flex;flex-direction:column;width:100%;padding:1rem}.diagram,.diagram-header{border:1px solid #dee2e6}.decision-title{color:#6b6b6b;font-size:1.5rem;margin:0}.fullscreen-toggle{font-size:2rem}.fullscreen-toggle>i{cursor:pointer}\n/*!\n * Copyright 2015-2024 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"] }]
538
- }], ctorParameters: () => [{ type: DecisionService }, { type: i2$2.ActivatedRoute }, { type: i2$2.Router }, { type: i3.AlertService }, { type: i4.TranslateService }, { type: i5.LayoutService }, { type: i3.PageTitleService }] });
371
+ args: [{ selector: 'valtimo-decision-modeler', standalone: true, imports: [
372
+ CommonModule,
373
+ RouterModule,
374
+ ModalModule,
375
+ SelectModule,
376
+ WidgetModule,
377
+ SelectModule$1,
378
+ TranslateModule,
379
+ RenderInPageHeaderDirective,
380
+ ButtonModule,
381
+ IconModule,
382
+ FitPageDirective,
383
+ DialogModule,
384
+ ], template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n *ngIf=\"{\n decisionXml: decisionXml$ | async,\n decisionTitle: decisionTitle$ | async,\n } as obs\"\n fitPage\n [disableOverflow]=\"true\"\n class=\"dmn-editor\"\n>\n <ng-container *ngTemplateOutlet=\"diagram\"></ng-container>\n</div>\n\n<ng-template #diagram>\n <div class=\"editor-parent\">\n <div class=\"editor-container\"></div>\n <div class=\"editor-tabs\"></div>\n </div>\n</ng-template>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <div\n *ngIf=\"{\n selectionId: selectionId$ | async,\n isCreating: isCreating$ | async,\n context: context$ | async,\n compactMode: compactMode$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n class=\"decision-modeler-actions\"\n >\n <ng-container *ngTemplateOutlet=\"versionSelection\"></ng-container>\n\n <button\n *ngIf=\"obs.context === 'case'\"\n cdsButton=\"secondary\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n (click)=\"navigateBack(null)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"arrow--left\" size=\"16\"></svg>\n\n <span>{{ 'interface.back' | translate }}</span>\n </button>\n\n @if (obs.selectionId && !obs.isCreating) {\n <button\n *ngIf=\"obs.hasEditPermissions\"\n cdsButton=\"primary\"\n (click)=\"deploy()\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n >\n {{ 'decisions.deploy' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"deploy\" size=\"16\"></svg>\n </button>\n\n <cds-overflow-menu class=\"overflow-button\">\n <cds-overflow-menu-option (selected)=\"download()\"\n >{{ 'interface.export' | translate }}\n </cds-overflow-menu-option>\n </cds-overflow-menu>\n } @else {\n <button class=\"btn btn-success btn-space\" (click)=\"deploy()\">\n <i class=\"icon mdi mdi-upload mr-1\"></i>{{ 'decisions.deploy' | translate }}\n </button>\n }\n </div>\n </ng-template>\n</ng-container>\n\n<ng-template #versionSelection>\n <ng-container\n *ngIf=\"{\n selectItems: (decisionVersionSelectItems$ | async) || [],\n isIndependent: isIndependent$ | async,\n versionSelectionDisabled: versionSelectionDisabled$ | async,\n selectionId: selectionId$ | async,\n } as obs\"\n >\n <v-select\n *ngIf=\"obs.isIndependent\"\n name=\"version\"\n [title]=\"'decisions.version' | translate\"\n [disabled]=\"obs.versionSelectionDisabled\"\n [clearable]=\"false\"\n [loading]=\"obs.selectItems.length === 0\"\n [items]=\"obs.selectItems\"\n [defaultSelectionId]=\"obs.selectionId\"\n [widthInPx]=\"120\"\n (selectedChange)=\"switchVersion($event)\"\n ></v-select>\n </ng-container>\n</ng-template>\n", styles: ["#save-button{position:absolute;bottom:10px;left:10px;background:#fff;border:solid 1px #ccc;border-radius:2px;padding:8px;font-family:Arial,sans-serif;font-weight:700;cursor:default;font-size:14px;color:#444}.dmn-modeler{display:flex;flex-direction:column;width:100%;padding:1rem}.diagram,.diagram-header{border:1px solid #dee2e6}.decision-title{color:#6b6b6b;font-size:1.5rem;margin:0}.fullscreen-toggle{font-size:2rem}.fullscreen-toggle>i{cursor:pointer}.dmn-editor{background-color:var(--cds-layer);outline:1px solid var(--cds-border-subtle);outline-offset:-1px;padding:16px}.decision-modeler-actions{display:flex;width:100%;justify-content:flex-end;align-items:flex-end;gap:16px}\n/*!\n * Copyright 2015-2025 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"] }]
385
+ }], ctorParameters: () => [{ type: DecisionService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.TranslateService }, { type: i4.PageTitleService }, { type: i4.BreadcrumbService }, { type: i6$1.IconService }, { type: i4.PageHeaderService }, { type: i6.GlobalNotificationService }, { type: i6.EditPermissionsService }] });
539
386
 
540
387
  /*
541
- * Copyright 2015-2024 Ritense BV, the Netherlands.
388
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
542
389
  *
543
390
  * Licensed under EUPL, Version 1.2 (the "License");
544
391
  * you may not use this file except in compliance with the License.
@@ -553,10 +400,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
553
400
  * limitations under the License.
554
401
  */
555
402
  class DecisionDisplayComponent {
556
- constructor(decisionService, route, toasterService) {
403
+ constructor(decisionService, route) {
557
404
  this.decisionService = decisionService;
558
405
  this.route = route;
559
- this.toasterService = toasterService;
560
406
  }
561
407
  ngOnInit() {
562
408
  this.viewer = new DmnViewer({
@@ -580,7 +426,7 @@ class DecisionDisplayComponent {
580
426
  if (decisionXml) {
581
427
  this.viewer.importXML(decisionXml, error => {
582
428
  if (error) {
583
- console.log('error');
429
+ console.error('Error importing migrated XML', error);
584
430
  }
585
431
  });
586
432
  this.decisionXml = decisionXml;
@@ -595,16 +441,232 @@ class DecisionDisplayComponent {
595
441
  window.URL.revokeObjectURL(link.href);
596
442
  link.remove();
597
443
  }
598
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionDisplayComponent, deps: [{ token: DecisionService }, { token: i2$2.ActivatedRoute }, { token: i3$1.ToastrService }], target: i0.ɵɵFactoryTarget.Component }); }
599
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DecisionDisplayComponent, selector: "valtimo-decision-display", ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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\">\n <div class=\"container-fluid\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3\">\n <button (click)=\"download()\" class=\"btn btn-primary btn-space mr-0\">\n <i class=\"fa fa-save\"></i> &nbsp;\n <span>{{ 'Download' | translate }}</span>\n </button>\n </div>\n </div>\n <div id=\"canvas\" class=\"canvas-dmn\"></div>\n </div>\n</div>\n", styles: [".canvas-dmn{height:70vh}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "pipe", type: i4.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
444
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionDisplayComponent, deps: [{ token: DecisionService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
445
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: DecisionDisplayComponent, isStandalone: true, selector: "valtimo-decision-display", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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\">\n <div class=\"container-fluid\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3\">\n <button (click)=\"download()\" class=\"btn btn-primary btn-space mr-0\">\n <i class=\"fa fa-save\"></i> &nbsp;\n <span>{{ 'Download' | translate }}</span>\n </button>\n </div>\n </div>\n <div id=\"canvas\" class=\"canvas-dmn\"></div>\n </div>\n</div>\n", styles: [".canvas-dmn{height:70vh}\n/*!\n * Copyright 2015-2025 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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
600
446
  }
601
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionDisplayComponent, decorators: [{
447
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionDisplayComponent, decorators: [{
602
448
  type: Component,
603
- args: [{ selector: 'valtimo-decision-display', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 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\">\n <div class=\"container-fluid\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3\">\n <button (click)=\"download()\" class=\"btn btn-primary btn-space mr-0\">\n <i class=\"fa fa-save\"></i> &nbsp;\n <span>{{ 'Download' | translate }}</span>\n </button>\n </div>\n </div>\n <div id=\"canvas\" class=\"canvas-dmn\"></div>\n </div>\n</div>\n", styles: [".canvas-dmn{height:70vh}\n/*!\n * Copyright 2015-2024 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"] }]
604
- }], ctorParameters: () => [{ type: DecisionService }, { type: i2$2.ActivatedRoute }, { type: i3$1.ToastrService }] });
449
+ args: [{ selector: 'valtimo-decision-display', standalone: true, encapsulation: ViewEncapsulation.None, imports: [CommonModule, RouterModule, TranslateModule], template: "<!--\n ~ Copyright 2015-2025 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\">\n <div class=\"container-fluid\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3\">\n <button (click)=\"download()\" class=\"btn btn-primary btn-space mr-0\">\n <i class=\"fa fa-save\"></i> &nbsp;\n <span>{{ 'Download' | translate }}</span>\n </button>\n </div>\n </div>\n <div id=\"canvas\" class=\"canvas-dmn\"></div>\n </div>\n</div>\n", styles: [".canvas-dmn{height:70vh}\n/*!\n * Copyright 2015-2025 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"] }]
450
+ }], ctorParameters: () => [{ type: DecisionService }, { type: i2.ActivatedRoute }] });
451
+
452
+ /*
453
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
454
+ *
455
+ * Licensed under EUPL, Version 1.2 (the "License");
456
+ * you may not use this file except in compliance with the License.
457
+ * You may obtain a copy of the License at
458
+ *
459
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
460
+ *
461
+ * Unless required by applicable law or agreed to in writing, software
462
+ * distributed under the License is distributed on an "AS IS" basis,
463
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
464
+ * See the License for the specific language governing permissions and
465
+ * limitations under the License.
466
+ */
467
+ class DecisionStateService {
468
+ constructor() {
469
+ this._refreshDecisions$ = new Subject();
470
+ }
471
+ get refreshDecisions$() {
472
+ return this._refreshDecisions$.asObservable().pipe(startWith(null));
473
+ }
474
+ refreshDecisions() {
475
+ this._refreshDecisions$.next(null);
476
+ }
477
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
478
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionStateService, providedIn: 'root' }); }
479
+ }
480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionStateService, decorators: [{
481
+ type: Injectable,
482
+ args: [{
483
+ providedIn: 'root',
484
+ }]
485
+ }] });
605
486
 
606
487
  /*
607
- * Copyright 2015-2024 Ritense BV, the Netherlands.
488
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
489
+ *
490
+ * Licensed under EUPL, Version 1.2 (the "License");
491
+ * you may not use this file except in compliance with the License.
492
+ * You may obtain a copy of the License at
493
+ *
494
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
495
+ *
496
+ * Unless required by applicable law or agreed to in writing, software
497
+ * distributed under the License is distributed on an "AS IS" basis,
498
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
499
+ * See the License for the specific language governing permissions and
500
+ * limitations under the License.
501
+ */
502
+
503
+ /*
504
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
505
+ *
506
+ * Licensed under EUPL, Version 1.2 (the "License");
507
+ * you may not use this file except in compliance with the License.
508
+ * You may obtain a copy of the License at
509
+ *
510
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
511
+ *
512
+ * Unless required by applicable law or agreed to in writing, software
513
+ * distributed under the License is distributed on an "AS IS" basis,
514
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
515
+ * See the License for the specific language governing permissions and
516
+ * limitations under the License.
517
+ */
518
+ class DecisionDeployComponent {
519
+ constructor(decisionService, stateService, route, formBuilder) {
520
+ this.decisionService = decisionService;
521
+ this.stateService = stateService;
522
+ this.route = route;
523
+ this.formBuilder = formBuilder;
524
+ this.deploySuccessful = new EventEmitter();
525
+ this.dmn = null;
526
+ this.modalOpen$ = new BehaviorSubject(false);
527
+ this.caseManagementRouteParams$ = getCaseManagementRouteParams(this.route);
528
+ this.context$ = getContextObservable(this.route);
529
+ this.ACCEPTED_FILES = ['dmn'];
530
+ this.form = this.formBuilder.group({
531
+ file: this.formBuilder.control(new Set(), [Validators.required]),
532
+ });
533
+ }
534
+ get selectedDmnFile() {
535
+ const fileSet = this.form.value?.file;
536
+ return fileSet?.size ? fileSet.values().next().value?.file || null : null;
537
+ }
538
+ onChange(files) {
539
+ this.dmn = files.item(0);
540
+ }
541
+ deployDmn() {
542
+ const dmnFile = this.selectedDmnFile;
543
+ if (!dmnFile)
544
+ return;
545
+ combineLatest([this.caseManagementRouteParams$, this.context$])
546
+ .pipe(take(1), switchMap(([params, context]) => context === 'case'
547
+ ? this.decisionService.deployCaseDecisionDefinition(params.caseDefinitionKey, params.caseDefinitionVersionTag, dmnFile)
548
+ : this.decisionService.deployDmn(dmnFile)))
549
+ .subscribe(() => {
550
+ this.closeModal();
551
+ this.deploySuccessful.emit();
552
+ this.stateService.refreshDecisions();
553
+ });
554
+ }
555
+ openModal() {
556
+ this.modalOpen$.next(true);
557
+ }
558
+ closeModal() {
559
+ this.modalOpen$.next(false);
560
+ }
561
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionDeployComponent, deps: [{ token: DecisionService }, { token: DecisionStateService }, { token: i2.ActivatedRoute }, { token: i3$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
562
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: DecisionDeployComponent, isStandalone: true, selector: "valtimo-decision-deploy", outputs: { deploySuccessful: "deploySuccessful" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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<cds-modal showFooter=\"true\" valtimoCdsModal [open]=\"modalOpen$ | async\" (close)=\"closeModal()\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'decisions.upload.title' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"ACCEPTED_FILES\"\n [multiple]=\"false\"\n buttonType=\"primary\"\n [title]=\"'decisions.upload.fileUploaderTitle' | translate\"\n [description]=\"'decisions.upload.fileUploaderDescription' | translate\"\n [buttonText]=\"'decisions.upload.fileUploaderButton' | translate\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"closeModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"!selectedDmnFile\" (click)=\"deployDmn()\">\n {{ 'interface.upload' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: ["/*!\n * Copyright 2015-2025 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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i6$1.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i6$1.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i6$1.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i6$1.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i6$1.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i6$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: FileUploaderModule }, { kind: "component", type: i6$1.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
563
+ }
564
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionDeployComponent, decorators: [{
565
+ type: Component,
566
+ args: [{ selector: 'valtimo-decision-deploy', standalone: true, imports: [
567
+ CommonModule,
568
+ FormsModule,
569
+ TranslateModule,
570
+ ModalModule,
571
+ ButtonModule,
572
+ LayerModule,
573
+ FileUploaderModule,
574
+ ReactiveFormsModule,
575
+ ], template: "<!--\n ~ Copyright 2015-2025 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<cds-modal showFooter=\"true\" valtimoCdsModal [open]=\"modalOpen$ | async\" (close)=\"closeModal()\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>{{ 'decisions.upload.title' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"ACCEPTED_FILES\"\n [multiple]=\"false\"\n buttonType=\"primary\"\n [title]=\"'decisions.upload.fileUploaderTitle' | translate\"\n [description]=\"'decisions.upload.fileUploaderDescription' | translate\"\n [buttonText]=\"'decisions.upload.fileUploaderButton' | translate\"\n formControlName=\"file\"\n >\n </cds-file-uploader>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"closeModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"!selectedDmnFile\" (click)=\"deployDmn()\">\n {{ 'interface.upload' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: ["/*!\n * Copyright 2015-2025 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"] }]
576
+ }], ctorParameters: () => [{ type: DecisionService }, { type: DecisionStateService }, { type: i2.ActivatedRoute }, { type: i3$1.FormBuilder }], propDecorators: { deploySuccessful: [{
577
+ type: Output
578
+ }] } });
579
+
580
+ /*
581
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
582
+ *
583
+ * Licensed under EUPL, Version 1.2 (the "License");
584
+ * you may not use this file except in compliance with the License.
585
+ * You may obtain a copy of the License at
586
+ *
587
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
588
+ *
589
+ * Unless required by applicable law or agreed to in writing, software
590
+ * distributed under the License is distributed on an "AS IS" basis,
591
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
592
+ * See the License for the specific language governing permissions and
593
+ * limitations under the License.
594
+ */
595
+ class DecisionListComponent {
596
+ constructor(decisionService, iconService, router, configService, stateService, route, cdr, editPermissionsService) {
597
+ this.decisionService = decisionService;
598
+ this.iconService = iconService;
599
+ this.router = router;
600
+ this.configService = configService;
601
+ this.stateService = stateService;
602
+ this.route = route;
603
+ this.cdr = cdr;
604
+ this.editPermissionsService = editPermissionsService;
605
+ this.fields = [
606
+ { key: 'key', label: 'Key' },
607
+ { key: 'name', label: 'Name' },
608
+ { key: 'version', label: 'Version' },
609
+ ];
610
+ this.loading$ = new BehaviorSubject(true);
611
+ this.caseManagementRouteParams$ = getCaseManagementRouteParams(this.route);
612
+ this.context$ = getContextObservable(this.route);
613
+ this.decisionsLatestVersions$ = this.stateService.refreshDecisions$.pipe(switchMap(() => this.context$), switchMap(context => context === 'case'
614
+ ? this.caseManagementRouteParams$.pipe(switchMap(params => this.decisionService.listCaseDecisionDefinitions(params.caseDefinitionKey, params.caseDefinitionVersionTag)))
615
+ : this.decisionService.getDecisions()), map(decisions => decisions.reduce((acc, curr) => {
616
+ const existing = acc.find(d => d.key === curr.key);
617
+ if (existing && existing.version > curr.version)
618
+ return acc;
619
+ if (existing && existing.version < curr.version)
620
+ return [...acc.filter(d => d.key !== curr.key), curr];
621
+ return [...acc, curr];
622
+ }, [])), tap(() => {
623
+ this.loading$.next(false);
624
+ this.cdr.detectChanges();
625
+ }));
626
+ this.hasEditPermissions$ = combineLatest([
627
+ this.caseManagementRouteParams$,
628
+ this.context$,
629
+ ]).pipe(switchMap(([params, context]) => {
630
+ return this.editPermissionsService.hasPermissionsToEditBasedOnContext(params?.caseDefinitionKey, params?.caseDefinitionVersionTag, context);
631
+ }));
632
+ this.iconService.registerAll([Upload16]);
633
+ this.experimentalEditing = this.configService.config.featureToggles.experimentalDmnEditing;
634
+ }
635
+ viewDecisionTable(decision) {
636
+ this.context$.pipe(take(1)).subscribe(context => {
637
+ if (context === 'independent') {
638
+ const basePath = this.experimentalEditing ? '/decision-tables/edit/' : '/decision-tables/';
639
+ this.router.navigate([basePath + decision.id]);
640
+ }
641
+ else {
642
+ this.caseManagementRouteParams$.pipe(take(1)).subscribe(params => {
643
+ this.router.navigateByUrl(`case-management/case/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}/decisions/${decision.id}`);
644
+ });
645
+ }
646
+ });
647
+ }
648
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionListComponent, deps: [{ token: DecisionService }, { token: i6$1.IconService }, { token: i2.Router }, { token: i6.ConfigService }, { token: DecisionStateService }, { token: i2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i6.EditPermissionsService }], target: i0.ɵɵFactoryTarget.Component }); }
649
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: DecisionListComponent, isStandalone: true, selector: "valtimo-decision-list", viewQueries: [{ propertyName: "deploy", first: true, predicate: ["decisionDeploy"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 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-carbon-list\n [items]=\"(decisionsLatestVersions$ | async) || []\"\n [loading]=\"loading$ | async\"\n [fields]=\"fields\"\n (rowClicked)=\"viewDecisionTable($event)\"\n [header]=\"false\"\n [isSearchable]=\"true\"\n>\n <ng-container carbonToolbarContent>\n <button\n *ngIf=\"hasEditPermissions$ | async\"\n cdsButton=\"primary\"\n (click)=\"this.deploy.openModal()\"\n >\n {{ 'Upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </ng-container>\n</valtimo-carbon-list>\n\n<valtimo-decision-deploy #decisionDeploy></valtimo-decision-deploy>\n", styles: ["/*!\n * Copyright 2015-2025 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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i4.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i6$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: WidgetModule }, { kind: "component", type: DecisionDeployComponent, selector: "valtimo-decision-deploy", outputs: ["deploySuccessful"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }] }); }
650
+ }
651
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionListComponent, decorators: [{
652
+ type: Component,
653
+ args: [{ selector: 'valtimo-decision-list', standalone: true, imports: [
654
+ CommonModule,
655
+ RouterModule,
656
+ CarbonListModule,
657
+ IconModule,
658
+ WidgetModule,
659
+ DecisionDeployComponent,
660
+ TranslateModule,
661
+ ButtonModule,
662
+ ], template: "<!--\n ~ Copyright 2015-2025 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-carbon-list\n [items]=\"(decisionsLatestVersions$ | async) || []\"\n [loading]=\"loading$ | async\"\n [fields]=\"fields\"\n (rowClicked)=\"viewDecisionTable($event)\"\n [header]=\"false\"\n [isSearchable]=\"true\"\n>\n <ng-container carbonToolbarContent>\n <button\n *ngIf=\"hasEditPermissions$ | async\"\n cdsButton=\"primary\"\n (click)=\"this.deploy.openModal()\"\n >\n {{ 'Upload' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n </ng-container>\n</valtimo-carbon-list>\n\n<valtimo-decision-deploy #decisionDeploy></valtimo-decision-deploy>\n", styles: ["/*!\n * Copyright 2015-2025 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"] }]
663
+ }], ctorParameters: () => [{ type: DecisionService }, { type: i6$1.IconService }, { type: i2.Router }, { type: i6.ConfigService }, { type: DecisionStateService }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i6.EditPermissionsService }], propDecorators: { deploy: [{
664
+ type: ViewChild,
665
+ args: ['decisionDeploy']
666
+ }] } });
667
+
668
+ /*
669
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
608
670
  *
609
671
  * Licensed under EUPL, Version 1.2 (the "License");
610
672
  * you may not use this file except in compliance with the License.
@@ -621,35 +683,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
621
683
  const routes = [
622
684
  {
623
685
  path: 'decision-tables',
624
- component: DecisionComponent,
686
+ component: DecisionListComponent,
625
687
  canActivate: [AuthGuardService],
626
- data: { title: 'Decision tables', roles: [ROLE_ADMIN] },
688
+ data: {
689
+ title: 'Decision tables',
690
+ roles: [ROLE_ADMIN],
691
+ context: 'independent',
692
+ },
627
693
  },
628
694
  {
629
695
  path: 'decision-tables/:id',
630
696
  component: DecisionDisplayComponent,
631
697
  canActivate: [AuthGuardService],
632
- data: { title: 'Decision tables', roles: [ROLE_ADMIN] },
698
+ data: {
699
+ title: 'Decision tables',
700
+ roles: [ROLE_ADMIN],
701
+ context: 'independent',
702
+ },
633
703
  },
634
704
  {
635
705
  path: 'decision-tables/edit/:id',
636
706
  component: DecisionModelerComponent,
637
707
  canActivate: [AuthGuardService],
638
- data: { title: 'Edit decision table', roles: [ROLE_ADMIN], customPageTitle: true },
708
+ data: {
709
+ title: 'Edit decision table',
710
+ roles: [ROLE_ADMIN],
711
+ customPageTitle: true,
712
+ context: 'independent',
713
+ },
639
714
  },
640
715
  {
641
716
  path: 'decision-tables/edit/create',
642
717
  component: DecisionModelerComponent,
643
718
  canActivate: [AuthGuardService],
644
- data: { title: 'Create decision table', roles: [ROLE_ADMIN] },
719
+ data: {
720
+ title: 'Create decision table',
721
+ roles: [ROLE_ADMIN],
722
+ context: 'independent',
723
+ },
645
724
  },
646
725
  ];
647
726
  class DecisionRoutingModule {
648
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
649
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: DecisionRoutingModule, imports: [CommonModule, i2$2.RouterModule], exports: [RouterModule] }); }
650
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionRoutingModule, imports: [CommonModule, RouterModule.forChild(routes), RouterModule] }); }
727
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
728
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: DecisionRoutingModule, imports: [CommonModule, i2.RouterModule], exports: [RouterModule] }); }
729
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionRoutingModule, imports: [CommonModule, RouterModule.forChild(routes), RouterModule] }); }
651
730
  }
652
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionRoutingModule, decorators: [{
731
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionRoutingModule, decorators: [{
653
732
  type: NgModule,
654
733
  args: [{
655
734
  declarations: [],
@@ -659,7 +738,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
659
738
  }] });
660
739
 
661
740
  /*
662
- * Copyright 2015-2024 Ritense BV, the Netherlands.
741
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
663
742
  *
664
743
  * Licensed under EUPL, Version 1.2 (the "License");
665
744
  * you may not use this file except in compliance with the License.
@@ -674,66 +753,64 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
674
753
  * limitations under the License.
675
754
  */
676
755
  class DecisionModule {
677
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
678
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: DecisionModule, declarations: [DecisionComponent,
679
- DecisionDeployComponent,
680
- DecisionDisplayComponent,
681
- DecisionListComponent,
682
- DecisionModelerComponent], imports: [DecisionRoutingModule,
756
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
757
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: DecisionModule, imports: [DecisionRoutingModule,
683
758
  WidgetModule,
684
- ListModule,
685
759
  TranslateModule,
686
- ModalModule,
760
+ ModalModule$1,
687
761
  CommonModule,
688
762
  FormsModule,
689
- SelectModule,
763
+ SelectModule$1,
690
764
  SpinnerModule,
691
765
  CarbonListModule,
692
766
  ButtonModule,
693
- IconModule], exports: [DecisionComponent, DecisionModelerComponent] }); }
694
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionModule, imports: [DecisionRoutingModule,
767
+ IconModule,
768
+ DecisionDeployComponent,
769
+ DecisionModelerComponent,
770
+ DecisionListComponent,
771
+ DecisionDisplayComponent], exports: [DecisionModelerComponent] }); }
772
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionModule, imports: [DecisionRoutingModule,
695
773
  WidgetModule,
696
- ListModule,
697
774
  TranslateModule,
698
- ModalModule,
775
+ ModalModule$1,
699
776
  CommonModule,
700
777
  FormsModule,
701
- SelectModule,
778
+ SelectModule$1,
702
779
  SpinnerModule,
703
780
  CarbonListModule,
704
781
  ButtonModule,
705
- IconModule] }); }
782
+ IconModule,
783
+ DecisionDeployComponent,
784
+ DecisionModelerComponent,
785
+ DecisionListComponent,
786
+ DecisionDisplayComponent] }); }
706
787
  }
707
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecisionModule, decorators: [{
788
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DecisionModule, decorators: [{
708
789
  type: NgModule,
709
790
  args: [{
710
- declarations: [
711
- DecisionComponent,
712
- DecisionDeployComponent,
713
- DecisionDisplayComponent,
714
- DecisionListComponent,
715
- DecisionModelerComponent,
716
- ],
717
791
  imports: [
718
792
  DecisionRoutingModule,
719
793
  WidgetModule,
720
- ListModule,
721
794
  TranslateModule,
722
- ModalModule,
795
+ ModalModule$1,
723
796
  CommonModule,
724
797
  FormsModule,
725
- SelectModule,
798
+ SelectModule$1,
726
799
  SpinnerModule,
727
800
  CarbonListModule,
728
801
  ButtonModule,
729
802
  IconModule,
803
+ DecisionDeployComponent,
804
+ DecisionModelerComponent,
805
+ DecisionListComponent,
806
+ DecisionDisplayComponent,
730
807
  ],
731
- exports: [DecisionComponent, DecisionModelerComponent],
808
+ exports: [DecisionModelerComponent],
732
809
  }]
733
810
  }] });
734
811
 
735
812
  /*
736
- * Copyright 2015-2024 Ritense BV, the Netherlands.
813
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
737
814
  *
738
815
  * Licensed under EUPL, Version 1.2 (the "License");
739
816
  * you may not use this file except in compliance with the License.
@@ -755,5 +832,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
755
832
  * Generated bundle index. Do not edit.
756
833
  */
757
834
 
758
- export { DecisionComponent, DecisionModelerComponent, DecisionModule };
835
+ export { DecisionDeployComponent, DecisionDisplayComponent, DecisionListComponent, DecisionModelerComponent, DecisionModule };
759
836
  //# sourceMappingURL=valtimo-decision.mjs.map