@valtimo/process-link 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +32 -0
  2. package/fesm2022/valtimo-process-link.mjs +2985 -0
  3. package/fesm2022/valtimo-process-link.mjs.map +1 -0
  4. package/index.d.ts +6 -0
  5. package/lib/components/choose-process-link-type/choose-process-link-type.component.d.ts +12 -0
  6. package/lib/components/choose-process-link-type/choose-process-link-type.component.d.ts.map +1 -0
  7. package/lib/components/choose-process-link-type/index.d.ts +2 -0
  8. package/lib/components/choose-process-link-type/index.d.ts.map +1 -0
  9. package/lib/components/form-display-configuration/form-display-configuration.component.d.ts +42 -0
  10. package/lib/components/form-display-configuration/form-display-configuration.component.d.ts.map +1 -0
  11. package/lib/components/form-flow/form-flow.component.d.ts +54 -0
  12. package/lib/components/form-flow/form-flow.component.d.ts.map +1 -0
  13. package/lib/components/form-flow-configuration-container/form-flow-configuration-container.component.d.ts +30 -0
  14. package/lib/components/form-flow-configuration-container/form-flow-configuration-container.component.d.ts.map +1 -0
  15. package/lib/components/form-flow-configuration-container/index.d.ts +2 -0
  16. package/lib/components/form-flow-configuration-container/index.d.ts.map +1 -0
  17. package/lib/components/form-link-process-diagram/form-link-process-diagram.component.d.ts +34 -0
  18. package/lib/components/form-link-process-diagram/form-link-process-diagram.component.d.ts.map +1 -0
  19. package/lib/components/import-plugin-configuration/import-plugin-configuration.component.d.ts +48 -0
  20. package/lib/components/import-plugin-configuration/import-plugin-configuration.component.d.ts.map +1 -0
  21. package/lib/components/plugin-action-configuration/plugin-action-configuration.component.d.ts +39 -0
  22. package/lib/components/plugin-action-configuration/plugin-action-configuration.component.d.ts.map +1 -0
  23. package/lib/components/process-link/process-link.component.d.ts +14 -0
  24. package/lib/components/process-link/process-link.component.d.ts.map +1 -0
  25. package/lib/components/process-link-modal/process-link-modal.component.d.ts +38 -0
  26. package/lib/components/process-link-modal/process-link-modal.component.d.ts.map +1 -0
  27. package/lib/components/select-form/index.d.ts +2 -0
  28. package/lib/components/select-form/index.d.ts.map +1 -0
  29. package/lib/components/select-form/select-form.component.d.ts +42 -0
  30. package/lib/components/select-form/select-form.component.d.ts.map +1 -0
  31. package/lib/components/select-form-flow/index.d.ts +2 -0
  32. package/lib/components/select-form-flow/index.d.ts.map +1 -0
  33. package/lib/components/select-form-flow/select-form-flow.component.d.ts +40 -0
  34. package/lib/components/select-form-flow/select-form-flow.component.d.ts.map +1 -0
  35. package/lib/components/select-plugin-action/select-plugin-action.component.d.ts +29 -0
  36. package/lib/components/select-plugin-action/select-plugin-action.component.d.ts.map +1 -0
  37. package/lib/components/select-plugin-configuration/select-plugin-configuration.component.d.ts +29 -0
  38. package/lib/components/select-plugin-configuration/select-plugin-configuration.component.d.ts.map +1 -0
  39. package/lib/components/select-ui-component/select-ui-component.component.d.ts +28 -0
  40. package/lib/components/select-ui-component/select-ui-component.component.d.ts.map +1 -0
  41. package/lib/constants/index.d.ts +3 -0
  42. package/lib/constants/index.d.ts.map +1 -0
  43. package/lib/constants/injection-tokens.d.ts +6 -0
  44. package/lib/constants/injection-tokens.d.ts.map +1 -0
  45. package/lib/constants/process.link.d.ts +5 -0
  46. package/lib/constants/process.link.d.ts.map +1 -0
  47. package/lib/models/form-custom-component.model.d.ts +16 -0
  48. package/lib/models/form-custom-component.model.d.ts.map +1 -0
  49. package/lib/models/form-flow.model.d.ts +18 -0
  50. package/lib/models/form-flow.model.d.ts.map +1 -0
  51. package/lib/models/form-link.model.d.ts +57 -0
  52. package/lib/models/form-link.model.d.ts.map +1 -0
  53. package/lib/models/index.d.ts +5 -0
  54. package/lib/models/index.d.ts.map +1 -0
  55. package/lib/models/process-link-url.model.d.ts +5 -0
  56. package/lib/models/process-link-url.model.d.ts.map +1 -0
  57. package/lib/models/process-link.model.d.ts +178 -0
  58. package/lib/models/process-link.model.d.ts.map +1 -0
  59. package/lib/process-link-routing.module.d.ts +8 -0
  60. package/lib/process-link-routing.module.d.ts.map +1 -0
  61. package/lib/process-link.module.d.ts +28 -0
  62. package/lib/process-link.module.d.ts.map +1 -0
  63. package/lib/services/form-flow-component.service.d.ts +13 -0
  64. package/lib/services/form-flow-component.service.d.ts.map +1 -0
  65. package/lib/services/form-flow.service.d.ts +20 -0
  66. package/lib/services/form-flow.service.d.ts.map +1 -0
  67. package/lib/services/index.d.ts +10 -0
  68. package/lib/services/index.d.ts.map +1 -0
  69. package/lib/services/plugin-state.service.d.ts +29 -0
  70. package/lib/services/plugin-state.service.d.ts.map +1 -0
  71. package/lib/services/process-link-button.service.d.ts +37 -0
  72. package/lib/services/process-link-button.service.d.ts.map +1 -0
  73. package/lib/services/process-link-state.service.d.ts +66 -0
  74. package/lib/services/process-link-state.service.d.ts.map +1 -0
  75. package/lib/services/process-link-step.service.d.ts +44 -0
  76. package/lib/services/process-link-step.service.d.ts.map +1 -0
  77. package/lib/services/process-link.service.d.ts +28 -0
  78. package/lib/services/process-link.service.d.ts.map +1 -0
  79. package/lib/services/url-resolver.service.d.ts +7 -0
  80. package/lib/services/url-resolver.service.d.ts.map +1 -0
  81. package/lib/services/url-validator.service.d.ts +11 -0
  82. package/lib/services/url-validator.service.d.ts.map +1 -0
  83. package/package.json +24 -0
  84. package/public-api.d.ts +12 -0
  85. package/public-api.d.ts.map +1 -0
  86. package/valtimo-process-link.d.ts.map +1 -0
@@ -0,0 +1,2985 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, InjectionToken, Optional, Inject, Component, EventEmitter, Output, Input, ViewChild, ChangeDetectionStrategy, NgModule, ViewContainerRef } from '@angular/core';
3
+ import * as i2 from '@valtimo/shared';
4
+ import { BaseApiService, getCaseManagementRouteParams, ROLE_ADMIN } from '@valtimo/shared';
5
+ import * as i1 from '@angular/common/http';
6
+ import { HttpParams, HttpHeaders } from '@angular/common/http';
7
+ import { BehaviorSubject, Subject, switchMap, of, combineLatest, map as map$1, filter, Subscription, startWith, mergeMap, tap, take as take$1 } from 'rxjs';
8
+ import { map, take, switchMap as switchMap$1, tap as tap$1 } from 'rxjs/operators';
9
+ import * as i1$1 from '@valtimo/plugin';
10
+ import { PluginTranslatePipeModule, PluginConfigurationContainerModule } from '@valtimo/plugin';
11
+ import * as i2$1 from '@ngx-translate/core';
12
+ import { TranslateModule } from '@ngx-translate/core';
13
+ import * as i3 from '@angular/common';
14
+ import { CommonModule } from '@angular/common';
15
+ import * as i4 from 'carbon-components-angular';
16
+ import { ModalModule as ModalModule$1, ProgressIndicatorModule, ButtonModule, IconModule, ComboBoxModule, InputModule, LoadingModule, StructuredListModule, TilesModule, SelectModule, ToggleModule, LayerModule, ToggletipModule } from 'carbon-components-angular';
17
+ import * as i1$2 from '@angular/forms';
18
+ import { FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
19
+ import { Upload16 } from '@carbon/icons';
20
+ import * as i2$2 from '@valtimo/components';
21
+ import { FormioOptionsImpl, ModalModule, SearchableDropdownSelectModule, StepperModule, VModalModule, ParagraphModule, TooltipModule, TooltipIconModule, FormIoModule, ValtimoCdsModalDirective, RenderInPageHeaderDirective, CarbonMultiInputModule, RemoveClassnamesDirective } from '@valtimo/components';
22
+ import * as i5 from 'carbon-components-angular/dropdown';
23
+ import BpmnViewer from 'bpmn-js';
24
+ import * as i1$3 from '@valtimo/process';
25
+ import * as i3$1 from '@angular/router';
26
+ import { RouterModule } from '@angular/router';
27
+ import { AuthGuardService } from '@valtimo/security';
28
+ import * as i1$4 from '@valtimo/form';
29
+ import * as i1$5 from '@valtimo/form-flow-management';
30
+
31
+ /*
32
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
33
+ *
34
+ * Licensed under EUPL, Version 1.2 (the "License");
35
+ * you may not use this file except in compliance with the License.
36
+ * You may obtain a copy of the License at
37
+ *
38
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
39
+ *
40
+ * Unless required by applicable law or agreed to in writing, software
41
+ * distributed under the License is distributed on an "AS IS" basis,
42
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
43
+ * See the License for the specific language governing permissions and
44
+ * limitations under the License.
45
+ */
46
+ class FormFlowService extends BaseApiService {
47
+ constructor(httpClient, configService) {
48
+ super(httpClient, configService);
49
+ this.httpClient = httpClient;
50
+ this.configService = configService;
51
+ }
52
+ createInstanceForNewProcess(processDefinitionKey, request) {
53
+ return this.httpClient.post(this.getApiUrl(`v1/process-definition/${processDefinitionKey}/form-flow`), request);
54
+ }
55
+ getFormFlowStep(formFlowInstanceId) {
56
+ return this.httpClient.get(this.getApiUrl(`v1/form-flow/instance/${formFlowInstanceId}`));
57
+ }
58
+ submitStep(formFlowInstanceId, stepInstanceId, submissionData) {
59
+ return this.httpClient.post(this.getApiUrl(`v1/form-flow/instance/${formFlowInstanceId}/step/instance/${stepInstanceId}`), submissionData);
60
+ }
61
+ back(formFlowInstanceId, submissionData) {
62
+ return this.httpClient.post(this.getApiUrl(`v1/form-flow/instance/${formFlowInstanceId}/back`), submissionData);
63
+ }
64
+ save(formFlowInstanceId, submissionData) {
65
+ return this.httpClient.post(this.getApiUrl(`v1/form-flow/instance/${formFlowInstanceId}/save`), submissionData);
66
+ }
67
+ getBreadcrumbs(formFlowInstanceId) {
68
+ return this.httpClient.get(this.getApiUrl(`v1/form-flow/instance/${formFlowInstanceId}/breadcrumbs`));
69
+ }
70
+ navigateToStep(instanceId, currentStepInstanceId, targetStepInstanceId, submissionData) {
71
+ return this.httpClient.post(this.getApiUrl(`v1/form-flow/instance/${instanceId}/step/instance/${currentStepInstanceId}/to/step/instance/${targetStepInstanceId}`), submissionData);
72
+ }
73
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
74
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowService, providedIn: 'root' }); }
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowService, decorators: [{
77
+ type: Injectable,
78
+ args: [{
79
+ providedIn: 'root',
80
+ }]
81
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
82
+
83
+ /*
84
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
85
+ *
86
+ * Licensed under EUPL, Version 1.2 (the "License");
87
+ * you may not use this file except in compliance with the License.
88
+ * You may obtain a copy of the License at
89
+ *
90
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
91
+ *
92
+ * Unless required by applicable law or agreed to in writing, software
93
+ * distributed under the License is distributed on an "AS IS" basis,
94
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
95
+ * See the License for the specific language governing permissions and
96
+ * limitations under the License.
97
+ */
98
+ class PluginStateService {
99
+ constructor(pluginManagementService, pluginService) {
100
+ this.pluginManagementService = pluginManagementService;
101
+ this.pluginService = pluginService;
102
+ this._selectedPluginDefinition$ = new BehaviorSubject(undefined);
103
+ this._selectedPluginConfiguration$ = new BehaviorSubject(undefined);
104
+ this._selectedPluginFunction$ = new BehaviorSubject(undefined);
105
+ this._save$ = new Subject();
106
+ this._selectedProcessLink$ = new BehaviorSubject(undefined);
107
+ }
108
+ get selectedPluginDefinition$() {
109
+ return this._selectedPluginDefinition$.asObservable();
110
+ }
111
+ get selectedPluginConfiguration$() {
112
+ return this._selectedPluginConfiguration$.asObservable();
113
+ }
114
+ get selectedPluginFunction$() {
115
+ return this._selectedPluginFunction$.asObservable();
116
+ }
117
+ get save$() {
118
+ return this._save$.asObservable();
119
+ }
120
+ get functionKey$() {
121
+ return this._selectedProcessLink$.pipe(switchMap(processLink => !processLink
122
+ ? this._selectedPluginFunction$.pipe(map(pluginFunction => pluginFunction?.key))
123
+ : of(processLink?.pluginActionDefinitionKey)));
124
+ }
125
+ get pluginDefinitionKey$() {
126
+ return this._selectedProcessLink$.pipe(switchMap(selectedProcesLink => !selectedProcesLink
127
+ ? this._selectedPluginConfiguration$.pipe(map(configuration => configuration?.pluginDefinition.key))
128
+ : combineLatest([
129
+ this._selectedProcessLink$,
130
+ this.pluginService.pluginSpecifications$,
131
+ ]).pipe(map(([processLink, pluginSpecifications]) => {
132
+ const pluginSpecification = pluginSpecifications.find(specification => {
133
+ const functionKeys = specification?.functionConfigurationComponents &&
134
+ Object.keys(specification.functionConfigurationComponents);
135
+ return functionKeys?.includes(processLink?.pluginActionDefinitionKey);
136
+ });
137
+ return pluginSpecification?.pluginId;
138
+ }))));
139
+ }
140
+ selectPluginDefinition(definition) {
141
+ this._selectedPluginDefinition$.next(definition);
142
+ }
143
+ selectPluginConfiguration(configuration) {
144
+ this._selectedPluginConfiguration$.next(configuration);
145
+ }
146
+ selectPluginFunction(pluginFunction) {
147
+ this._selectedPluginFunction$.next(pluginFunction);
148
+ }
149
+ selectProcessLink(processLink) {
150
+ this._selectedProcessLink$.next(processLink);
151
+ }
152
+ deselectProcessLink() {
153
+ this._selectedProcessLink$.next(undefined);
154
+ }
155
+ save() {
156
+ this._save$.next(null);
157
+ }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginStateService, deps: [{ token: i1$1.PluginManagementService }, { token: i1$1.PluginService }], target: i0.ɵɵFactoryTarget.Injectable }); }
159
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginStateService, providedIn: 'root' }); }
160
+ }
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginStateService, decorators: [{
162
+ type: Injectable,
163
+ args: [{
164
+ providedIn: 'root',
165
+ }]
166
+ }], ctorParameters: () => [{ type: i1$1.PluginManagementService }, { type: i1$1.PluginService }] });
167
+
168
+ /*
169
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
170
+ *
171
+ * Licensed under EUPL, Version 1.2 (the "License");
172
+ * you may not use this file except in compliance with the License.
173
+ * You may obtain a copy of the License at
174
+ *
175
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
176
+ *
177
+ * Unless required by applicable law or agreed to in writing, software
178
+ * distributed under the License is distributed on an "AS IS" basis,
179
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
180
+ * See the License for the specific language governing permissions and
181
+ * limitations under the License.
182
+ */
183
+ class ProcessLinkService {
184
+ constructor(configService, http) {
185
+ this.configService = configService;
186
+ this.http = http;
187
+ this.VALTIMO_ENDPOINT_URI = this.configService.config.valtimoApi.endpointUri;
188
+ }
189
+ getTasksWithProcessLinks(processInstanceId) {
190
+ return this.http
191
+ .get(`${this.VALTIMO_ENDPOINT_URI}v1/process/${processInstanceId}/tasks/process-link`, {})
192
+ .pipe(map$1(res => res || []));
193
+ }
194
+ getProcessLink(getProcessLinkRequest) {
195
+ var params = new HttpParams().set('processDefinitionId', getProcessLinkRequest.processDefinitionId);
196
+ if (getProcessLinkRequest.activityId !== undefined)
197
+ params = params.set('activityId', getProcessLinkRequest.activityId);
198
+ return this.http.get(`${this.VALTIMO_ENDPOINT_URI}v1/process-link`, {
199
+ params,
200
+ });
201
+ }
202
+ updateProcessLink(updateProcessLinkRequest) {
203
+ return this.http.put(`${this.VALTIMO_ENDPOINT_URI}v1/process-link`, this.emptyStringToNull(updateProcessLinkRequest));
204
+ }
205
+ saveProcessLink(saveProcessLinkRequest) {
206
+ return this.http.post(`${this.VALTIMO_ENDPOINT_URI}v1/process-link`, this.emptyStringToNull(saveProcessLinkRequest));
207
+ }
208
+ deleteProcessLink(id) {
209
+ return this.http.delete(`${this.VALTIMO_ENDPOINT_URI}v1/process-link/${id}`);
210
+ }
211
+ getProcessLinkCandidates(activityType) {
212
+ return this.http.get(`${this.VALTIMO_ENDPOINT_URI}v1/process-link/types?activityType=${activityType}`);
213
+ }
214
+ deployProcessWithProcessLinks(processLinks = [], processDefinitionId, processXml) {
215
+ const formData = new FormData();
216
+ const processLinksBlob = new Blob([JSON.stringify(processLinks.map(processLink => this.emptyStringToNull(processLink)))], { type: 'application/json' });
217
+ if (processXml)
218
+ formData.append('file', new File([processXml], 'process.bpmn'));
219
+ if (processDefinitionId)
220
+ formData.append('processDefinitionId', processDefinitionId);
221
+ formData.append('processLinks', processLinksBlob);
222
+ return this.http.post(`${this.VALTIMO_ENDPOINT_URI}management/v1/process-definition`, formData);
223
+ }
224
+ deployProcessWithProcessLinksForCase(processLinks = [], processDefinitionId, processXml, caseDefinitionKey, caseDefinitionVersionTag, canInitializeDocument = false, startableByUser = false) {
225
+ const formData = new FormData();
226
+ const processLinksBlob = new Blob([JSON.stringify(processLinks.map(processLink => this.emptyStringToNull(processLink)))], { type: 'application/json' });
227
+ if (processXml)
228
+ formData.append('file', new File([processXml], 'process.bpmn'));
229
+ if (processDefinitionId)
230
+ formData.append('processDefinitionId', processDefinitionId);
231
+ formData.append('processLinks', processLinksBlob);
232
+ formData.append('canInitializeDocument', String(canInitializeDocument));
233
+ formData.append('startableByUser', String(startableByUser));
234
+ return this.http.post(`${this.VALTIMO_ENDPOINT_URI}management/v1/case-definition/${caseDefinitionKey}/version/${caseDefinitionVersionTag}/process-definition`, formData);
235
+ }
236
+ submitForm(processLinkId, formData, documentId, taskInstanceId, documentDefinitionName) {
237
+ let params = new HttpParams();
238
+ if (documentId) {
239
+ params = params.set('documentId', documentId);
240
+ }
241
+ if (taskInstanceId) {
242
+ params = params.set('taskInstanceId', taskInstanceId);
243
+ }
244
+ if (documentDefinitionName) {
245
+ params = params.set('documentDefinitionName', documentDefinitionName);
246
+ }
247
+ const httpOptions = {
248
+ headers: new HttpHeaders().set('Content-Type', 'application/json'),
249
+ params,
250
+ };
251
+ return this.http.post(`${this.VALTIMO_ENDPOINT_URI}v1/process-link/${processLinkId}/form/submission`, formData, httpOptions);
252
+ }
253
+ submitURLProcessLink(processLinkId, documentId, taskInstanceId, documentDefinitionName) {
254
+ let params = new HttpParams();
255
+ if (documentId) {
256
+ params = params.set('documentId', documentId);
257
+ }
258
+ if (taskInstanceId) {
259
+ params = params.set('taskInstanceId', taskInstanceId);
260
+ }
261
+ if (documentDefinitionName) {
262
+ params = params.set('documentDefinitionName', documentDefinitionName);
263
+ }
264
+ const httpOptions = {
265
+ headers: new HttpHeaders().set('Content-Type', 'application/json'),
266
+ params,
267
+ };
268
+ return this.http.post(`${this.VALTIMO_ENDPOINT_URI}v1/process-link/url/${processLinkId}`, {}, httpOptions);
269
+ }
270
+ getVariables() {
271
+ return this.http.get(`${this.VALTIMO_ENDPOINT_URI}v1/process-link/url/variables`);
272
+ }
273
+ getCompatiblePluginProcessLinks(pluginActionDefinitionKey) {
274
+ return this.http.get(`${this.VALTIMO_ENDPOINT_URI}v1/process-link/plugin?pluginActionDefinitionKey=${pluginActionDefinitionKey}`);
275
+ }
276
+ emptyStringToNull(object) {
277
+ if (object && typeof object === 'object') {
278
+ Object.keys(object).forEach(key => {
279
+ const typedKey = key;
280
+ const value = object[typedKey];
281
+ if (typeof value === 'object' && value !== null) {
282
+ this.emptyStringToNull(value);
283
+ }
284
+ else if (value === '') {
285
+ object[typedKey] = null;
286
+ }
287
+ });
288
+ }
289
+ return object;
290
+ }
291
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkService, deps: [{ token: i2.ConfigService }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
292
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkService, providedIn: 'root' }); }
293
+ }
294
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkService, decorators: [{
295
+ type: Injectable,
296
+ args: [{
297
+ providedIn: 'root',
298
+ }]
299
+ }], ctorParameters: () => [{ type: i2.ConfigService }, { type: i1.HttpClient }] });
300
+
301
+ /*
302
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
303
+ *
304
+ * Licensed under EUPL, Version 1.2 (the "License");
305
+ * you may not use this file except in compliance with the License.
306
+ * You may obtain a copy of the License at
307
+ *
308
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
309
+ *
310
+ * Unless required by applicable law or agreed to in writing, software
311
+ * distributed under the License is distributed on an "AS IS" basis,
312
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
313
+ * See the License for the specific language governing permissions and
314
+ * limitations under the License.
315
+ */
316
+
317
+ var ProcessLinkEditMode;
318
+ (function (ProcessLinkEditMode) {
319
+ ProcessLinkEditMode[ProcessLinkEditMode["SAVE_TO_BACKEND"] = 0] = "SAVE_TO_BACKEND";
320
+ ProcessLinkEditMode[ProcessLinkEditMode["EMIT_EVENTS"] = 1] = "EMIT_EVENTS";
321
+ })(ProcessLinkEditMode || (ProcessLinkEditMode = {}));
322
+
323
+ /*
324
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
325
+ *
326
+ * Licensed under EUPL, Version 1.2 (the "License");
327
+ * you may not use this file except in compliance with the License.
328
+ * You may obtain a copy of the License at
329
+ *
330
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
331
+ *
332
+ * Unless required by applicable law or agreed to in writing, software
333
+ * distributed under the License is distributed on an "AS IS" basis,
334
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
335
+ * See the License for the specific language governing permissions and
336
+ * limitations under the License.
337
+ */
338
+
339
+ /*
340
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
341
+ *
342
+ * Licensed under EUPL, Version 1.2 (the "License");
343
+ * you may not use this file except in compliance with the License.
344
+ * You may obtain a copy of the License at
345
+ *
346
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
347
+ *
348
+ * Unless required by applicable law or agreed to in writing, software
349
+ * distributed under the License is distributed on an "AS IS" basis,
350
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
351
+ * See the License for the specific language governing permissions and
352
+ * limitations under the License.
353
+ */
354
+
355
+ /*
356
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
357
+ *
358
+ * Licensed under EUPL, Version 1.2 (the "License");
359
+ * you may not use this file except in compliance with the License.
360
+ * You may obtain a copy of the License at
361
+ *
362
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
363
+ *
364
+ * Unless required by applicable law or agreed to in writing, software
365
+ * distributed under the License is distributed on an "AS IS" basis,
366
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
367
+ * See the License for the specific language governing permissions and
368
+ * limitations under the License.
369
+ */
370
+
371
+ /*
372
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
373
+ *
374
+ * Licensed under EUPL, Version 1.2 (the "License");
375
+ * you may not use this file except in compliance with the License.
376
+ * You may obtain a copy of the License at
377
+ *
378
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
379
+ *
380
+ * Unless required by applicable law or agreed to in writing, software
381
+ * distributed under the License is distributed on an "AS IS" basis,
382
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
383
+ * See the License for the specific language governing permissions and
384
+ * limitations under the License.
385
+ */
386
+ const FORM_FLOW_COMPONENT_TOKEN = new InjectionToken('Supported form-flow Angular components', { factory: () => [] });
387
+ const FORM_CUSTOM_COMPONENT_TOKEN = new InjectionToken('Custom component that can be used instead of FormIO or form-flow');
388
+
389
+ /*
390
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
391
+ *
392
+ * Licensed under EUPL, Version 1.2 (the "License");
393
+ * you may not use this file except in compliance with the License.
394
+ * You may obtain a copy of the License at
395
+ *
396
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
397
+ *
398
+ * Unless required by applicable law or agreed to in writing, software
399
+ * distributed under the License is distributed on an "AS IS" basis,
400
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
401
+ * See the License for the specific language governing permissions and
402
+ * limitations under the License.
403
+ */
404
+ const formSizeToCarbonModalSizeMap = {
405
+ extraSmall: 'xs',
406
+ small: 'sm',
407
+ medium: 'md',
408
+ large: 'lg',
409
+ };
410
+
411
+ /*
412
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
413
+ *
414
+ * Licensed under EUPL, Version 1.2 (the "License");
415
+ * you may not use this file except in compliance with the License.
416
+ * You may obtain a copy of the License at
417
+ *
418
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
419
+ *
420
+ * Unless required by applicable law or agreed to in writing, software
421
+ * distributed under the License is distributed on an "AS IS" basis,
422
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
423
+ * See the License for the specific language governing permissions and
424
+ * limitations under the License.
425
+ */
426
+
427
+ /*
428
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
429
+ *
430
+ * Licensed under EUPL, Version 1.2 (the "License");
431
+ * you may not use this file except in compliance with the License.
432
+ * You may obtain a copy of the License at
433
+ *
434
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
435
+ *
436
+ * Unless required by applicable law or agreed to in writing, software
437
+ * distributed under the License is distributed on an "AS IS" basis,
438
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
439
+ * See the License for the specific language governing permissions and
440
+ * limitations under the License.
441
+ */
442
+ class ProcessLinkButtonService {
443
+ constructor() {
444
+ this._showSaveButton$ = new BehaviorSubject(false);
445
+ this._enableSaveButton$ = new BehaviorSubject(false);
446
+ this._enableNextButton$ = new BehaviorSubject(false);
447
+ this._showBackButton$ = new BehaviorSubject(false);
448
+ this._showNextButton$ = new BehaviorSubject(false);
449
+ this._backButtonClick$ = new Subject();
450
+ this._saveButtonClick$ = new Subject();
451
+ this._nextButtonClick$ = new Subject();
452
+ }
453
+ get showSaveButton$() {
454
+ return this._showSaveButton$.asObservable();
455
+ }
456
+ get enableSaveButton$() {
457
+ return this._enableSaveButton$.asObservable();
458
+ }
459
+ get showNextButton$() {
460
+ return this._showNextButton$.asObservable();
461
+ }
462
+ get enableNextButton$() {
463
+ return this._enableNextButton$.asObservable();
464
+ }
465
+ get showBackButton$() {
466
+ return this._showBackButton$.asObservable();
467
+ }
468
+ get backButtonClick$() {
469
+ return this._backButtonClick$.asObservable();
470
+ }
471
+ get saveButtonClick$() {
472
+ return this._saveButtonClick$.asObservable();
473
+ }
474
+ get nextButtonClick$() {
475
+ return this._nextButtonClick$.asObservable();
476
+ }
477
+ showSaveButton() {
478
+ this._showSaveButton$.next(true);
479
+ }
480
+ hideSaveButton() {
481
+ this._showSaveButton$.next(false);
482
+ }
483
+ showNextButton() {
484
+ this._showNextButton$.next(true);
485
+ }
486
+ hideNextButton() {
487
+ this._showNextButton$.next(false);
488
+ }
489
+ enableNextButton() {
490
+ this._enableNextButton$.next(true);
491
+ }
492
+ disableNextButton() {
493
+ this._enableNextButton$.next(false);
494
+ }
495
+ enableSaveButton() {
496
+ this._enableSaveButton$.next(true);
497
+ }
498
+ disableSaveButton() {
499
+ this._enableSaveButton$.next(false);
500
+ }
501
+ showBackButton() {
502
+ this._showBackButton$.next(true);
503
+ }
504
+ hideBackButton() {
505
+ this._showBackButton$.next(false);
506
+ }
507
+ clickBackButton() {
508
+ this._backButtonClick$.next(null);
509
+ }
510
+ clickSaveButton() {
511
+ this._saveButtonClick$.next(null);
512
+ }
513
+ clickNextButton() {
514
+ this._nextButtonClick$.next(null);
515
+ }
516
+ resetButtons() {
517
+ this.disableSaveButton();
518
+ this.hideBackButton();
519
+ this.hideSaveButton();
520
+ this.hideNextButton();
521
+ this.disableNextButton();
522
+ }
523
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkButtonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
524
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkButtonService, providedIn: 'root' }); }
525
+ }
526
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkButtonService, decorators: [{
527
+ type: Injectable,
528
+ args: [{
529
+ providedIn: 'root',
530
+ }]
531
+ }] });
532
+
533
+ /*
534
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
535
+ *
536
+ * Licensed under EUPL, Version 1.2 (the "License");
537
+ * you may not use this file except in compliance with the License.
538
+ * You may obtain a copy of the License at
539
+ *
540
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
541
+ *
542
+ * Unless required by applicable law or agreed to in writing, software
543
+ * distributed under the License is distributed on an "AS IS" basis,
544
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
545
+ * See the License for the specific language governing permissions and
546
+ * limitations under the License.
547
+ */
548
+ class ProcessLinkStepService {
549
+ get steps$() {
550
+ return combineLatest([
551
+ this._steps$,
552
+ this._disableSteps$,
553
+ this.translateService.stream('key'),
554
+ ]).pipe(filter(([steps]) => !!steps), map$1(([steps, disableSteps]) => steps.map(step => ({
555
+ ...step,
556
+ disabled: disableSteps,
557
+ label: this.translateService.instant(`processLinkSteps.${step.label}`),
558
+ ...(step.secondaryLabel && {
559
+ secondaryLabel: this.translateService.instant(step.secondaryLabel),
560
+ }),
561
+ }))));
562
+ }
563
+ get currentStepIndex$() {
564
+ return this._currentStepIndex$.asObservable();
565
+ }
566
+ get currentStepId$() {
567
+ return combineLatest([this._steps$, this.currentStepIndex$]).pipe(filter(([steps, currentStepIndex]) => !!steps && typeof currentStepIndex === 'number'), map$1(([steps, currentStepIndex]) => steps.length > 0 ? steps[currentStepIndex]?.label : ''));
568
+ }
569
+ get hasOneProcessLinkType$() {
570
+ return this._hasOneProcessLinkType$.asObservable();
571
+ }
572
+ constructor(translateService, buttonService, pluginStateService, pluginTranslateService) {
573
+ this.translateService = translateService;
574
+ this.buttonService = buttonService;
575
+ this.pluginStateService = pluginStateService;
576
+ this.pluginTranslateService = pluginTranslateService;
577
+ this._steps$ = new BehaviorSubject(undefined);
578
+ this._currentStepIndex$ = new BehaviorSubject(0);
579
+ this._disableSteps$ = new BehaviorSubject(false);
580
+ this._hasOneProcessLinkType$ = new BehaviorSubject(false);
581
+ }
582
+ reset() {
583
+ this._currentStepIndex$.next(0);
584
+ this._steps$.next([]);
585
+ }
586
+ setInitialSteps(availableProcessLinkTypes) {
587
+ if (availableProcessLinkTypes.length > 1) {
588
+ this.setChoiceSteps();
589
+ }
590
+ }
591
+ setFormSteps() {
592
+ this._steps$.next([
593
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.form' },
594
+ { label: 'selectForm' },
595
+ ]);
596
+ this._currentStepIndex$.next(1);
597
+ }
598
+ setSingleFormStep() {
599
+ this._steps$.next([{ label: 'selectForm' }]);
600
+ this._currentStepIndex$.next(0);
601
+ }
602
+ setUIComponentStep() {
603
+ this._steps$.next([
604
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.ui-component' },
605
+ { label: 'uiComponent' },
606
+ ]);
607
+ this._currentStepIndex$.next(1);
608
+ }
609
+ setFormFlowSteps() {
610
+ this._steps$.next([
611
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.form-flow' },
612
+ { label: 'selectFormFlow' },
613
+ ]);
614
+ this._currentStepIndex$.next(1);
615
+ }
616
+ setSingleFormFlowStep() {
617
+ this._steps$.next([{ label: 'selectFormFlow' }]);
618
+ this._currentStepIndex$.next(0);
619
+ }
620
+ setChoosePluginConfigurationSteps() {
621
+ this._steps$.next([
622
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
623
+ { label: 'choosePluginConfiguration' },
624
+ { label: 'choosePluginAction', disabled: true },
625
+ { label: 'configurePluginAction', disabled: true },
626
+ ]);
627
+ this._currentStepIndex$.next(1);
628
+ }
629
+ setSingleChoosePluginConfigurationSteps() {
630
+ this._steps$.next([
631
+ { label: 'choosePluginConfiguration' },
632
+ { label: 'choosePluginAction', disabled: true },
633
+ { label: 'configurePluginAction', disabled: true },
634
+ ]);
635
+ this._currentStepIndex$.next(0);
636
+ }
637
+ setChoosePluginActionSteps() {
638
+ combineLatest([
639
+ this._hasOneProcessLinkType$,
640
+ this.pluginStateService.selectedPluginConfiguration$,
641
+ ])
642
+ .pipe(take(1))
643
+ .subscribe(([hasOneType, selectedConfiguration]) => {
644
+ if (hasOneType) {
645
+ this._steps$.next([
646
+ { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
647
+ { label: 'choosePluginAction' },
648
+ { label: 'configurePluginAction', disabled: true },
649
+ ]);
650
+ this._currentStepIndex$.next(1);
651
+ this.buttonService.showNextButton();
652
+ this.buttonService.showBackButton();
653
+ this.buttonService.hideSaveButton();
654
+ this.buttonService.disableNextButton();
655
+ }
656
+ else {
657
+ this._steps$.next([
658
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
659
+ { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
660
+ { label: 'choosePluginAction' },
661
+ { label: 'configurePluginAction', disabled: true },
662
+ ]);
663
+ this._currentStepIndex$.next(2);
664
+ this.buttonService.showNextButton();
665
+ this.buttonService.showBackButton();
666
+ this.buttonService.hideSaveButton();
667
+ this.buttonService.disableNextButton();
668
+ }
669
+ });
670
+ }
671
+ setConfigurePluginActionSteps() {
672
+ combineLatest([
673
+ this._hasOneProcessLinkType$,
674
+ this.pluginStateService.selectedPluginConfiguration$,
675
+ this.pluginStateService.selectedPluginFunction$,
676
+ ])
677
+ .pipe(take(1))
678
+ .subscribe(([hasOneType, selectedConfiguration, selectedFunction]) => {
679
+ const selectedFunctionTranslation = this.pluginTranslateService.instant(selectedFunction.key, selectedConfiguration.pluginDefinition.key);
680
+ if (hasOneType) {
681
+ this._steps$.next([
682
+ { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
683
+ { label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
684
+ { label: 'configurePluginAction' },
685
+ ]);
686
+ this._currentStepIndex$.next(2);
687
+ this.buttonService.hideNextButton();
688
+ this.buttonService.showSaveButton();
689
+ }
690
+ else {
691
+ this._steps$.next([
692
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
693
+ { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
694
+ { label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
695
+ { label: 'configurePluginAction' },
696
+ ]);
697
+ this._currentStepIndex$.next(3);
698
+ this.buttonService.hideNextButton();
699
+ this.buttonService.showSaveButton();
700
+ }
701
+ });
702
+ }
703
+ setURLSteps() {
704
+ this._steps$.next([
705
+ { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.url' },
706
+ { label: 'selectURL' },
707
+ ]);
708
+ this._currentStepIndex$.next(1);
709
+ }
710
+ setSingleURLStep() {
711
+ this._steps$.next([{ label: 'selectURL' }]);
712
+ this._currentStepIndex$.next(0);
713
+ }
714
+ disableSteps() {
715
+ this._disableSteps$.next(true);
716
+ }
717
+ enableSteps() {
718
+ this._disableSteps$.next(false);
719
+ }
720
+ setHasOneProcessLinkType(hasOne) {
721
+ this._hasOneProcessLinkType$.next(hasOne);
722
+ }
723
+ setProcessLinkTypeSteps(processLinkTypeId, hasOneOption) {
724
+ switch (processLinkTypeId) {
725
+ case 'form':
726
+ if (hasOneOption) {
727
+ this.setSingleFormStep();
728
+ this.buttonService.hideBackButton();
729
+ }
730
+ else {
731
+ this.setFormSteps();
732
+ this.buttonService.showBackButton();
733
+ }
734
+ this.buttonService.showSaveButton();
735
+ break;
736
+ case 'form-flow':
737
+ if (hasOneOption) {
738
+ this.setSingleFormFlowStep();
739
+ this.buttonService.hideSaveButton();
740
+ this.buttonService.hideBackButton();
741
+ }
742
+ else {
743
+ this.setFormFlowSteps();
744
+ this.buttonService.showSaveButton();
745
+ this.buttonService.showBackButton();
746
+ }
747
+ break;
748
+ case 'plugin':
749
+ if (hasOneOption) {
750
+ this.setSingleChoosePluginConfigurationSteps();
751
+ this.buttonService.hideBackButton();
752
+ this.buttonService.showNextButton();
753
+ }
754
+ else {
755
+ this.setChoosePluginConfigurationSteps();
756
+ this.buttonService.showBackButton();
757
+ this.buttonService.showNextButton();
758
+ }
759
+ break;
760
+ case 'url':
761
+ if (hasOneOption) {
762
+ this.setSingleURLStep();
763
+ this.buttonService.hideBackButton();
764
+ this.buttonService.showSaveButton();
765
+ }
766
+ else {
767
+ this.setURLSteps();
768
+ this.buttonService.showBackButton();
769
+ this.buttonService.showSaveButton();
770
+ }
771
+ break;
772
+ case 'ui-component':
773
+ this.setUIComponentStep();
774
+ this.buttonService.showBackButton();
775
+ this.buttonService.showSaveButton();
776
+ break;
777
+ }
778
+ }
779
+ setChoiceSteps() {
780
+ this._steps$.next([
781
+ { label: 'chooseProcessLinkType' },
782
+ { label: 'empty', disabled: true },
783
+ { label: 'empty', disabled: true },
784
+ ]);
785
+ this._currentStepIndex$.next(0);
786
+ }
787
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStepService, deps: [{ token: i2$1.TranslateService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: i1$1.PluginTranslationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
788
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStepService, providedIn: 'root' }); }
789
+ }
790
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStepService, decorators: [{
791
+ type: Injectable,
792
+ args: [{
793
+ providedIn: 'root',
794
+ }]
795
+ }], ctorParameters: () => [{ type: i2$1.TranslateService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: i1$1.PluginTranslationService }] });
796
+
797
+ /*
798
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
799
+ *
800
+ * Licensed under EUPL, Version 1.2 (the "License");
801
+ * you may not use this file except in compliance with the License.
802
+ * You may obtain a copy of the License at
803
+ *
804
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
805
+ *
806
+ * Unless required by applicable law or agreed to in writing, software
807
+ * distributed under the License is distributed on an "AS IS" basis,
808
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
809
+ * See the License for the specific language governing permissions and
810
+ * limitations under the License.
811
+ */
812
+ class ProcessLinkStateService {
813
+ get processLinkUpdateEvents$() {
814
+ return this._processLinkUpdateEvents$.asObservable();
815
+ }
816
+ get processLinkCreateEvents$() {
817
+ return this._processLinkCreateEvents$.asObservable();
818
+ }
819
+ get processLinkDeleteEvents$() {
820
+ return this._processLinkDeleteEvents$.asObservable();
821
+ }
822
+ get showModal$() {
823
+ return this._showModal$.asObservable();
824
+ }
825
+ get elementName$() {
826
+ return this._elementName$.asObservable();
827
+ }
828
+ get availableProcessLinkTypes$() {
829
+ return this._availableProcessLinkTypes$.pipe(map$1(types => (!this.formCustomComponentConfig
830
+ ? types.map(type => ({
831
+ ...type,
832
+ enabled: type.processLinkType === 'ui-component' ? false : type.enabled,
833
+ }))
834
+ : types).filter(type => type.processLinkType !== 'url')));
835
+ }
836
+ get hideProgressIndicator$() {
837
+ return this._availableProcessLinkTypes$
838
+ .asObservable()
839
+ .pipe(map$1(availableTypes => Array.isArray(availableTypes) &&
840
+ availableTypes.length === 1 &&
841
+ (availableTypes[0]?.processLinkType === 'form' ||
842
+ availableTypes[0]?.processLinkType === 'form-flow')));
843
+ }
844
+ get selectedProcessLinkTypeId$() {
845
+ return this._selectedProcessLinkTypeId$.asObservable();
846
+ }
847
+ get saving$() {
848
+ return this._saving$.asObservable();
849
+ }
850
+ get modalParams$() {
851
+ return this._modalParams$.asObservable();
852
+ }
853
+ get selectedProcessLink$() {
854
+ return this._selectedProcessLink$.asObservable();
855
+ }
856
+ get typeOfSelectedProcessLink$() {
857
+ return this.selectedProcessLink$.pipe(map$1(processLink => processLink?.processLinkType || ''));
858
+ }
859
+ get processLinkEditMode() {
860
+ return this._processLinkEditMode$.getValue();
861
+ }
862
+ get viewModelEnabled$() {
863
+ return this._viewModelEnabled$.asObservable();
864
+ }
865
+ get url$() {
866
+ return this._url$.asObservable();
867
+ }
868
+ constructor(processLinkStepService, buttonService, pluginStateService, formCustomComponentConfig) {
869
+ this.processLinkStepService = processLinkStepService;
870
+ this.buttonService = buttonService;
871
+ this.pluginStateService = pluginStateService;
872
+ this.formCustomComponentConfig = formCustomComponentConfig;
873
+ this._showModal$ = new BehaviorSubject(false);
874
+ this._availableProcessLinkTypes$ = new BehaviorSubject([]);
875
+ this._elementName$ = new BehaviorSubject('');
876
+ this._selectedProcessLinkTypeId$ = new BehaviorSubject('');
877
+ this._viewModelEnabled$ = new BehaviorSubject(false);
878
+ this._url$ = new BehaviorSubject('');
879
+ this._saving$ = new BehaviorSubject(false);
880
+ this._modalParams$ = new BehaviorSubject(undefined);
881
+ this._selectedProcessLink$ = new BehaviorSubject(undefined);
882
+ this._processLinkEditMode$ = new BehaviorSubject(ProcessLinkEditMode.SAVE_TO_BACKEND);
883
+ this._processLinkUpdateEvents$ = new Subject();
884
+ this._processLinkCreateEvents$ = new Subject();
885
+ this._processLinkDeleteEvents$ = new Subject();
886
+ this.openAvailableProcessLinkTypesSubscription();
887
+ }
888
+ ngOnDestroy() {
889
+ this._availableProcessLinkTypesSubscription?.unsubscribe();
890
+ }
891
+ setAvailableProcessLinkTypes(processLinkTypes) {
892
+ const hasOneOption = processLinkTypes.length === 1;
893
+ this._availableProcessLinkTypes$.next(processLinkTypes);
894
+ this.processLinkStepService.setHasOneProcessLinkType(hasOneOption);
895
+ if (hasOneOption) {
896
+ this.selectProcessLinkType(processLinkTypes[0].processLinkType, hasOneOption);
897
+ }
898
+ }
899
+ setElementName(name) {
900
+ this._elementName$.next(name);
901
+ }
902
+ showModal() {
903
+ this._showModal$.next(true);
904
+ }
905
+ closeModal() {
906
+ this._showModal$.next(false);
907
+ setTimeout(() => {
908
+ this.reset();
909
+ }, 240);
910
+ }
911
+ selectProcessLinkType(processLinkTypeId, hasOneOption) {
912
+ this._selectedProcessLinkTypeId$.next(processLinkTypeId);
913
+ this.processLinkStepService.setProcessLinkTypeSteps(processLinkTypeId, hasOneOption);
914
+ }
915
+ setViewModelEnabled(viewModelEnabled) {
916
+ this._viewModelEnabled$.next(viewModelEnabled);
917
+ }
918
+ clearSelectedProcessLinkType() {
919
+ this._selectedProcessLinkTypeId$.next('');
920
+ }
921
+ startSaving() {
922
+ this._saving$.next(true);
923
+ this.processLinkStepService.disableSteps();
924
+ }
925
+ stopSaving() {
926
+ this._saving$.next(false);
927
+ this.processLinkStepService.enableSteps();
928
+ }
929
+ setInitial() {
930
+ const availableTypes = this._availableProcessLinkTypes$.getValue();
931
+ this.buttonService.resetButtons();
932
+ this.processLinkStepService.setInitialSteps(availableTypes);
933
+ }
934
+ setModalParams(params) {
935
+ this._modalParams$.next(params);
936
+ }
937
+ selectProcessLink(processLink) {
938
+ if (!processLink)
939
+ return;
940
+ this._selectedProcessLink$.next(processLink);
941
+ this.pluginStateService.selectProcessLink(processLink);
942
+ this.setViewModelEnabled(processLink.viewModelEnabled ?? false);
943
+ this._url$.next(processLink.url ?? '');
944
+ }
945
+ deselectProcessLink() {
946
+ this._selectedProcessLink$.next(undefined);
947
+ this.pluginStateService.deselectProcessLink();
948
+ }
949
+ setEditMode(editMode) {
950
+ this._processLinkEditMode$.next(editMode);
951
+ }
952
+ sendProcessLinkUpdateEvent(event) {
953
+ this._processLinkUpdateEvents$.next(event);
954
+ }
955
+ sendProcessLinkCreateEvent(event) {
956
+ this._processLinkCreateEvents$.next(event);
957
+ }
958
+ sendProcessLinkDeleteEvent(event) {
959
+ this._processLinkDeleteEvents$.next(event);
960
+ }
961
+ openAvailableProcessLinkTypesSubscription() {
962
+ this._availableProcessLinkTypesSubscription = this._availableProcessLinkTypes$.subscribe(availableProcessLinkTypes => {
963
+ if (availableProcessLinkTypes.length > 1) {
964
+ this.setInitial();
965
+ }
966
+ });
967
+ }
968
+ reset() {
969
+ this.setAvailableProcessLinkTypes([]);
970
+ this.processLinkStepService.reset();
971
+ this.stopSaving();
972
+ this.buttonService.resetButtons();
973
+ this.clearSelectedProcessLinkType();
974
+ this.deselectProcessLink();
975
+ }
976
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStateService, deps: [{ token: ProcessLinkStepService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
977
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStateService, providedIn: 'root' }); }
978
+ }
979
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkStateService, decorators: [{
980
+ type: Injectable,
981
+ args: [{
982
+ providedIn: 'root',
983
+ }]
984
+ }], ctorParameters: () => [{ type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: undefined, decorators: [{
985
+ type: Optional
986
+ }, {
987
+ type: Inject,
988
+ args: [FORM_CUSTOM_COMPONENT_TOKEN]
989
+ }] }] });
990
+
991
+ /*
992
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
993
+ *
994
+ * Licensed under EUPL, Version 1.2 (the "License");
995
+ * you may not use this file except in compliance with the License.
996
+ * You may obtain a copy of the License at
997
+ *
998
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
999
+ *
1000
+ * Unless required by applicable law or agreed to in writing, software
1001
+ * distributed under the License is distributed on an "AS IS" basis,
1002
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1003
+ * See the License for the specific language governing permissions and
1004
+ * limitations under the License.
1005
+ */
1006
+ class FormFlowComponentService {
1007
+ get supportedComponents$() {
1008
+ return this._supportedComponents$.pipe(filter(components => !!components));
1009
+ }
1010
+ constructor(supportedCustomComponents) {
1011
+ this.supportedCustomComponents = supportedCustomComponents;
1012
+ this._supportedComponents$ = new BehaviorSubject(null);
1013
+ this.setSupportedComponents(supportedCustomComponents);
1014
+ }
1015
+ setSupportedComponents(supportedComponents) {
1016
+ this._supportedComponents$.next(supportedComponents);
1017
+ }
1018
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponentService, deps: [{ token: FORM_FLOW_COMPONENT_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
1019
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponentService, providedIn: 'root' }); }
1020
+ }
1021
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponentService, decorators: [{
1022
+ type: Injectable,
1023
+ args: [{
1024
+ providedIn: 'root',
1025
+ }]
1026
+ }], ctorParameters: () => [{ type: Array, decorators: [{
1027
+ type: Inject,
1028
+ args: [FORM_FLOW_COMPONENT_TOKEN]
1029
+ }] }] });
1030
+
1031
+ /*
1032
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1033
+ *
1034
+ * Licensed under EUPL, Version 1.2 (the "License");
1035
+ * you may not use this file except in compliance with the License.
1036
+ * You may obtain a copy of the License at
1037
+ *
1038
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1039
+ *
1040
+ * Unless required by applicable law or agreed to in writing, software
1041
+ * distributed under the License is distributed on an "AS IS" basis,
1042
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1043
+ * See the License for the specific language governing permissions and
1044
+ * limitations under the License.
1045
+ */
1046
+ class UrlResolverService {
1047
+ resolveUrlVariables(url, variables) {
1048
+ let resolvingUrl = url;
1049
+ Object.keys(variables).forEach(key => {
1050
+ let value = variables[key];
1051
+ resolvingUrl = resolvingUrl.replace('<' + key + '>', value);
1052
+ });
1053
+ return resolvingUrl;
1054
+ }
1055
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1056
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlResolverService }); }
1057
+ }
1058
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlResolverService, decorators: [{
1059
+ type: Injectable
1060
+ }] });
1061
+
1062
+ class UrlValidatorService {
1063
+ constructor(urlResolverService) {
1064
+ this.urlResolverService = urlResolverService;
1065
+ }
1066
+ urlValidator(variables) {
1067
+ return (control) => {
1068
+ const url = this.urlResolverService.resolveUrlVariables(control.value, variables);
1069
+ try {
1070
+ new URL(url);
1071
+ return null;
1072
+ }
1073
+ catch (_) {
1074
+ return { invalidUrl: url };
1075
+ }
1076
+ };
1077
+ }
1078
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlValidatorService, deps: [{ token: UrlResolverService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1079
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlValidatorService }); }
1080
+ }
1081
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: UrlValidatorService, decorators: [{
1082
+ type: Injectable
1083
+ }], ctorParameters: () => [{ type: UrlResolverService }] });
1084
+
1085
+ /*
1086
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1087
+ *
1088
+ * Licensed under EUPL, Version 1.2 (the "License");
1089
+ * you may not use this file except in compliance with the License.
1090
+ * You may obtain a copy of the License at
1091
+ *
1092
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1093
+ *
1094
+ * Unless required by applicable law or agreed to in writing, software
1095
+ * distributed under the License is distributed on an "AS IS" basis,
1096
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1097
+ * See the License for the specific language governing permissions and
1098
+ * limitations under the License.
1099
+ */
1100
+
1101
+ /*
1102
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1103
+ *
1104
+ * Licensed under EUPL, Version 1.2 (the "License");
1105
+ * you may not use this file except in compliance with the License.
1106
+ * You may obtain a copy of the License at
1107
+ *
1108
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1109
+ *
1110
+ * Unless required by applicable law or agreed to in writing, software
1111
+ * distributed under the License is distributed on an "AS IS" basis,
1112
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1113
+ * See the License for the specific language governing permissions and
1114
+ * limitations under the License.
1115
+ */
1116
+ class SelectPluginConfigurationComponent {
1117
+ constructor(pluginManagementService, pluginStateService, pluginService, stateService, buttonService, stepService) {
1118
+ this.pluginManagementService = pluginManagementService;
1119
+ this.pluginStateService = pluginStateService;
1120
+ this.pluginService = pluginService;
1121
+ this.stateService = stateService;
1122
+ this.buttonService = buttonService;
1123
+ this.stepService = stepService;
1124
+ this.pluginConfigurations$ = this.stateService.modalParams$.pipe(switchMap$1(modalData => combineLatest([
1125
+ modalData?.element?.type
1126
+ ? this.pluginManagementService.getAllPluginConfigurationsWithLogos(modalData?.element?.activityListenerType)
1127
+ : of(undefined),
1128
+ this.pluginService.availablePluginIds$,
1129
+ ]).pipe(map(([pluginConfigurations, availablePluginIds]) => pluginConfigurations?.filter(configuration => availablePluginIds.includes(configuration.pluginDefinition.key))))));
1130
+ this.selectedPluginConfiguration$ = this.pluginStateService.selectedPluginConfiguration$;
1131
+ this._subscriptions = new Subscription();
1132
+ }
1133
+ ngOnInit() {
1134
+ this.openBackButtonSubscription();
1135
+ this.openNextButtonSubscription();
1136
+ }
1137
+ ngOnDestroy() {
1138
+ this._subscriptions.unsubscribe();
1139
+ }
1140
+ selected(event) {
1141
+ this.selectConfiguration(event.value);
1142
+ this.buttonService.enableNextButton();
1143
+ }
1144
+ selectConfiguration(configuration) {
1145
+ this.pluginStateService.selectPluginDefinition({ key: configuration.pluginDefinition.key });
1146
+ this.pluginStateService.selectPluginConfiguration(configuration);
1147
+ }
1148
+ openBackButtonSubscription() {
1149
+ this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
1150
+ this.stateService.setInitial();
1151
+ }));
1152
+ }
1153
+ openNextButtonSubscription() {
1154
+ this._subscriptions.add(this.buttonService.nextButtonClick$.subscribe(() => {
1155
+ this.stepService.setChoosePluginActionSteps();
1156
+ }));
1157
+ }
1158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectPluginConfigurationComponent, deps: [{ token: i1$1.PluginManagementService }, { token: PluginStateService }, { token: i1$1.PluginService }, { token: ProcessLinkStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }], target: i0.ɵɵFactoryTarget.Component }); }
1159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectPluginConfigurationComponent, isStandalone: false, selector: "valtimo-select-plugin-configuration", 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<ng-container *ngIf=\"pluginConfigurations$ | async as pluginConfigurations; else loading\">\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.choosePluginConfigurationDescription' | translate }}\n </p>\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"selected($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">{{\n 'pluginManagement.labels.configurationName' | translate\n }}</cds-list-column>\n <cds-list-column>{{\n 'processLinkConfiguration.pluginDescription' | translate\n }}</cds-list-column>\n </cds-list-header>\n <cds-list-row\n *ngFor=\"let pluginConfiguration of pluginConfigurations\"\n [value]=\"pluginConfiguration\"\n >\n <cds-list-column>\n <div *ngIf=\"pluginConfiguration.pluginLogoBase64\">\n <img\n [src]=\"pluginConfiguration.pluginLogoBase64\"\n [title]=\"'title' | pluginTranslate: pluginConfiguration.pluginDefinition.key | async\"\n class=\"plugin-configuration-logo\"\n /></div\n ></cds-list-column>\n <cds-list-column>{{ pluginConfiguration.title }}</cds-list-column>\n <cds-list-column>\n {{ 'description' | pluginTranslate: pluginConfiguration.pluginDefinition.key | async }}\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n", styles: [".btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-configuration-logo{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.list-container{margin-top:32px;margin-bottom:32px}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\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: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i4.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i4.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i4.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i4.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1$1.PluginTranslatePipe, name: "pluginTranslate" }] }); }
1160
+ }
1161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectPluginConfigurationComponent, decorators: [{
1162
+ type: Component,
1163
+ args: [{ standalone: false, selector: 'valtimo-select-plugin-configuration', 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<ng-container *ngIf=\"pluginConfigurations$ | async as pluginConfigurations; else loading\">\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.choosePluginConfigurationDescription' | translate }}\n </p>\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"selected($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">{{\n 'pluginManagement.labels.configurationName' | translate\n }}</cds-list-column>\n <cds-list-column>{{\n 'processLinkConfiguration.pluginDescription' | translate\n }}</cds-list-column>\n </cds-list-header>\n <cds-list-row\n *ngFor=\"let pluginConfiguration of pluginConfigurations\"\n [value]=\"pluginConfiguration\"\n >\n <cds-list-column>\n <div *ngIf=\"pluginConfiguration.pluginLogoBase64\">\n <img\n [src]=\"pluginConfiguration.pluginLogoBase64\"\n [title]=\"'title' | pluginTranslate: pluginConfiguration.pluginDefinition.key | async\"\n class=\"plugin-configuration-logo\"\n /></div\n ></cds-list-column>\n <cds-list-column>{{ pluginConfiguration.title }}</cds-list-column>\n <cds-list-column>\n {{ 'description' | pluginTranslate: pluginConfiguration.pluginDefinition.key | async }}\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n", styles: [".btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-configuration-logo{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.list-container{margin-top:32px;margin-bottom:32px}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\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"] }]
1164
+ }], ctorParameters: () => [{ type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: i1$1.PluginService }, { type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }] });
1165
+
1166
+ /*
1167
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1168
+ *
1169
+ * Licensed under EUPL, Version 1.2 (the "License");
1170
+ * you may not use this file except in compliance with the License.
1171
+ * You may obtain a copy of the License at
1172
+ *
1173
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1174
+ *
1175
+ * Unless required by applicable law or agreed to in writing, software
1176
+ * distributed under the License is distributed on an "AS IS" basis,
1177
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1178
+ * See the License for the specific language governing permissions and
1179
+ * limitations under the License.
1180
+ */
1181
+ class SelectPluginActionComponent {
1182
+ constructor(buttonService, pluginManagementService, stateService, stepService, processLinkStateService) {
1183
+ this.buttonService = buttonService;
1184
+ this.pluginManagementService = pluginManagementService;
1185
+ this.stateService = stateService;
1186
+ this.stepService = stepService;
1187
+ this.processLinkStateService = processLinkStateService;
1188
+ this.pluginFunctions$ = combineLatest([
1189
+ this.stateService.selectedPluginDefinition$,
1190
+ this.processLinkStateService.modalParams$,
1191
+ ]).pipe(switchMap$1(([selectedDefinition, modalParams]) => selectedDefinition
1192
+ ? this.pluginManagementService.getPluginFunctions(selectedDefinition.key, modalParams.element.activityListenerType)
1193
+ : of(undefined)));
1194
+ this.selectedPluginDefinition$ = this.stateService.selectedPluginDefinition$;
1195
+ this.selectedPluginFunction$ = this.stateService.selectedPluginFunction$;
1196
+ this._subscriptions = new Subscription();
1197
+ }
1198
+ ngOnInit() {
1199
+ this.openBackButtonSubscription();
1200
+ this.openNextButtonSubscription();
1201
+ }
1202
+ ngOnDestroy() {
1203
+ this._subscriptions.unsubscribe();
1204
+ }
1205
+ selectFunction(pluginFunction) {
1206
+ this.stateService.selectPluginFunction(pluginFunction);
1207
+ }
1208
+ selected(event) {
1209
+ this.selectFunction(JSON.parse(event.value));
1210
+ this.buttonService.enableNextButton();
1211
+ }
1212
+ stringify(object) {
1213
+ return JSON.stringify(object);
1214
+ }
1215
+ openBackButtonSubscription() {
1216
+ this.buttonService.backButtonClick$
1217
+ .pipe(switchMap$1(() => this.stepService.hasOneProcessLinkType$), take(1))
1218
+ .subscribe((hasOneOption) => {
1219
+ this.stepService.setProcessLinkTypeSteps('plugin', hasOneOption);
1220
+ });
1221
+ }
1222
+ openNextButtonSubscription() {
1223
+ this._subscriptions.add(this.buttonService.nextButtonClick$.subscribe(() => {
1224
+ this.stepService.setConfigurePluginActionSteps();
1225
+ }));
1226
+ }
1227
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectPluginActionComponent, deps: [{ token: ProcessLinkButtonService }, { token: i1$1.PluginManagementService }, { token: PluginStateService }, { token: ProcessLinkStepService }, { token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
1228
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectPluginActionComponent, isStandalone: false, selector: "valtimo-select-plugin-action", 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<ng-container *ngIf=\"pluginFunctions$ | async as pluginFunctions; else loading\">\n <div class=\"choose-plugin-action\" *ngIf=\"pluginFunctions?.length > 0\">\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.choosePluginActionDescription' | translate }}\n </p>\n <div class=\"action-tiles\">\n <cds-tile-group\n [multiple]=\"false\"\n *ngIf=\"{selectedPluginDefinition: selectedPluginDefinition$ | async} as obs\"\n (selected)=\"selected($event)\"\n >\n <cds-selection-tile\n *ngFor=\"let pluginFunction of pluginFunctions\"\n [value]=\"stringify(pluginFunction)\"\n [selected]=\"false\"\n >{{\n pluginFunction.key | pluginTranslate: obs.selectedPluginDefinition.key | async\n }}</cds-selection-tile\n >\n </cds-tile-group>\n </div>\n </div>\n <ng-container *ngIf=\"!pluginFunctions || pluginFunctions?.length === 0\">\n <ng-container *ngTemplateOutlet=\"noPluginFunctionsTemplate\"> </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #noPluginFunctionsTemplate>\n <p class=\"step-description\">\n {{ 'processLink.noPluginFunctions' | translate }}\n </p>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n", styles: [".btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.action-tiles{margin-top:24px;width:calc(100% + 8px);margin-left:-8px}::ng-deep .choose-plugin-action cds-selection-tile{display:flex;width:calc(33.3% - 8px)}::ng-deep .choose-plugin-action .cds--tile{width:100%}::ng-deep .choose-plugin-action cds-tile-group fieldset{display:flex;flex-direction:row;flex-wrap:wrap}::ng-deep .choose-plugin-action cds-selection-tile{margin-left:8px}::ng-deep .choose-plugin-action cds-selection-tile:nth-child(n+4){margin-top:8px}::ng-deep .action-tiles .cds--tile{background-color:var(--cds-layer-02, #ffffff)}::ng-deep .action-tiles .cds--tile:hover{background:var(--cds-layer-hover)}\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: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i4.SelectionTile, selector: "cds-selection-tile, ibm-selection-tile", inputs: ["theme", "id", "selected", "value", "disabled"], outputs: ["change"] }, { kind: "component", type: i4.TileGroup, selector: "cds-tile-group, ibm-tile-group", inputs: ["name", "multiple", "legend"], outputs: ["selected"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1$1.PluginTranslatePipe, name: "pluginTranslate" }] }); }
1229
+ }
1230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectPluginActionComponent, decorators: [{
1231
+ type: Component,
1232
+ args: [{ standalone: false, selector: 'valtimo-select-plugin-action', 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<ng-container *ngIf=\"pluginFunctions$ | async as pluginFunctions; else loading\">\n <div class=\"choose-plugin-action\" *ngIf=\"pluginFunctions?.length > 0\">\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.choosePluginActionDescription' | translate }}\n </p>\n <div class=\"action-tiles\">\n <cds-tile-group\n [multiple]=\"false\"\n *ngIf=\"{selectedPluginDefinition: selectedPluginDefinition$ | async} as obs\"\n (selected)=\"selected($event)\"\n >\n <cds-selection-tile\n *ngFor=\"let pluginFunction of pluginFunctions\"\n [value]=\"stringify(pluginFunction)\"\n [selected]=\"false\"\n >{{\n pluginFunction.key | pluginTranslate: obs.selectedPluginDefinition.key | async\n }}</cds-selection-tile\n >\n </cds-tile-group>\n </div>\n </div>\n <ng-container *ngIf=\"!pluginFunctions || pluginFunctions?.length === 0\">\n <ng-container *ngTemplateOutlet=\"noPluginFunctionsTemplate\"> </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #noPluginFunctionsTemplate>\n <p class=\"step-description\">\n {{ 'processLink.noPluginFunctions' | translate }}\n </p>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n", styles: [".btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.loading-container{display:flex;justify-content:center;margin-top:40px;flex-direction:row}.action-tiles{margin-top:24px;width:calc(100% + 8px);margin-left:-8px}::ng-deep .choose-plugin-action cds-selection-tile{display:flex;width:calc(33.3% - 8px)}::ng-deep .choose-plugin-action .cds--tile{width:100%}::ng-deep .choose-plugin-action cds-tile-group fieldset{display:flex;flex-direction:row;flex-wrap:wrap}::ng-deep .choose-plugin-action cds-selection-tile{margin-left:8px}::ng-deep .choose-plugin-action cds-selection-tile:nth-child(n+4){margin-top:8px}::ng-deep .action-tiles .cds--tile{background-color:var(--cds-layer-02, #ffffff)}::ng-deep .action-tiles .cds--tile:hover{background:var(--cds-layer-hover)}\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"] }]
1233
+ }], ctorParameters: () => [{ type: ProcessLinkButtonService }, { type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkStateService }] });
1234
+
1235
+ /*
1236
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1237
+ *
1238
+ * Licensed under EUPL, Version 1.2 (the "License");
1239
+ * you may not use this file except in compliance with the License.
1240
+ * You may obtain a copy of the License at
1241
+ *
1242
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1243
+ *
1244
+ * Unless required by applicable law or agreed to in writing, software
1245
+ * distributed under the License is distributed on an "AS IS" basis,
1246
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1247
+ * See the License for the specific language governing permissions and
1248
+ * limitations under the License.
1249
+ */
1250
+ class ImportPluginConfigurationComponent {
1251
+ set pluginActionKey(value) {
1252
+ this.importPluginForm.reset();
1253
+ this.fetchCompatiblePluginProcessLinks(value);
1254
+ }
1255
+ get process() {
1256
+ return this.importPluginForm.get('process');
1257
+ }
1258
+ get version() {
1259
+ return this.importPluginForm.get('version');
1260
+ }
1261
+ get activity() {
1262
+ return this.importPluginForm.get('activity');
1263
+ }
1264
+ constructor(formBuilder, processLinkService, iconService, cdsThemeService) {
1265
+ this.formBuilder = formBuilder;
1266
+ this.processLinkService = processLinkService;
1267
+ this.iconService = iconService;
1268
+ this.cdsThemeService = cdsThemeService;
1269
+ this.configurationEvent = new EventEmitter();
1270
+ this.open$ = new Subject();
1271
+ this._compatiblePluginProcessLinksSubject$ = new BehaviorSubject([]);
1272
+ this.compatiblePluginProcessLinks$ = this._compatiblePluginProcessLinksSubject$.asObservable();
1273
+ this.importPluginForm = this.formBuilder.group({
1274
+ process: new FormControl('', Validators.required),
1275
+ version: new FormControl('', Validators.required),
1276
+ activity: new FormControl('', Validators.required),
1277
+ });
1278
+ this.processListItems$ = combineLatest([
1279
+ this._compatiblePluginProcessLinksSubject$,
1280
+ this.process.valueChanges.pipe(startWith('')),
1281
+ ]).pipe(map$1(([compatibleProcessLinks, processValue]) => compatibleProcessLinks?.map(compatibleProcessLink => ({
1282
+ content: compatibleProcessLink.processDefinitionKey,
1283
+ selected: processValue === compatibleProcessLink.processDefinitionKey,
1284
+ })) || []));
1285
+ this.versionListItems$ = combineLatest([
1286
+ this._compatiblePluginProcessLinksSubject$,
1287
+ this.process.valueChanges.pipe(startWith('')),
1288
+ this.version.valueChanges.pipe(startWith('')),
1289
+ ]).pipe(map$1(([compatibleProcessLinks, processValue, versionValue]) => !processValue
1290
+ ? []
1291
+ : compatibleProcessLinks
1292
+ .find(compatibleLinks => compatibleLinks.processDefinitionKey === processValue)
1293
+ ?.versions.sort((a, b) => Number(b.version) - Number(a.version))
1294
+ .map(versionItem => ({
1295
+ content: versionItem.version,
1296
+ selected: versionItem.version === versionValue,
1297
+ })) || []));
1298
+ this.activityListItems$ = combineLatest([
1299
+ this._compatiblePluginProcessLinksSubject$,
1300
+ this.process.valueChanges.pipe(startWith('')),
1301
+ this.version.valueChanges.pipe(startWith('')),
1302
+ this.activity.valueChanges.pipe(startWith('')),
1303
+ ]).pipe(map$1(([compatibleProcessLinks, processValue, versionValue, activityValue]) => !processValue || !versionValue
1304
+ ? []
1305
+ : compatibleProcessLinks
1306
+ .find(compatibleLinks => compatibleLinks.processDefinitionKey === processValue)
1307
+ .versions.find(versionItem => versionItem.version === versionValue)
1308
+ .processLinks.map(processLinkItem => ({
1309
+ content: processLinkItem.activityId,
1310
+ selected: processLinkItem.activityId === activityValue,
1311
+ }))));
1312
+ this.toggletipTheme$ = this.cdsThemeService.toggletipTheme$;
1313
+ this.iconService.register(Upload16);
1314
+ }
1315
+ onSubmit() {
1316
+ this.configurationEvent.emit(this._compatiblePluginProcessLinksSubject$
1317
+ .getValue()
1318
+ .find(compatiblePluginProcessLinks => compatiblePluginProcessLinks.processDefinitionKey === this.process.value)
1319
+ .versions.find(versionItem => versionItem.version === this.version.value)
1320
+ .processLinks.find(processLinkItem => processLinkItem.activityId === this.activity.value)
1321
+ .actionProperties);
1322
+ // needed to reliably trigger toggle tip closure
1323
+ this.open$.next(true);
1324
+ setTimeout(() => this.open$.next(false));
1325
+ this.importPluginForm.reset();
1326
+ }
1327
+ fetchCompatiblePluginProcessLinks(pluginActionKey) {
1328
+ this.processLinkService
1329
+ .getCompatiblePluginProcessLinks(pluginActionKey)
1330
+ .subscribe(res => this._compatiblePluginProcessLinksSubject$.next(res));
1331
+ }
1332
+ processSelected(event) {
1333
+ this.process.setValue(event?.item?.content);
1334
+ this.version.setValue('');
1335
+ this.activity.setValue('');
1336
+ }
1337
+ versionSelected(event) {
1338
+ this.version.setValue(event?.item?.content);
1339
+ this.activity.setValue('');
1340
+ }
1341
+ activitySelected(event) {
1342
+ this.activity.setValue(event?.item?.content);
1343
+ }
1344
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ImportPluginConfigurationComponent, deps: [{ token: i1$2.FormBuilder }, { token: ProcessLinkService }, { token: i4.IconService }, { token: i2$2.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
1345
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: ImportPluginConfigurationComponent, isStandalone: false, selector: "valtimo-import-plugin-configuration", inputs: { pluginActionKey: "pluginActionKey" }, outputs: { configurationEvent: "configurationEvent" }, 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-toggletip align=\"right-bottom\" [autoAlign]=\"true\" [isOpen]=\"open$ | async\">\n <button\n class=\"process-link-configuration-import-button\"\n [disabled]=\"((compatiblePluginProcessLinks$ | async) || []).length === 0\"\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"ghost\"\n >\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"process-link-configuration-select\"\n >\n <cds-dropdown\n [label]=\"'processLinkConfiguration.process' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectProcess' | translate\"\n (selected)=\"processSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"processListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.version' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectVersion' | translate\"\n [disabled]=\"!process.value\"\n (selected)=\"versionSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"versionListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.activity' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectActivity' | translate\"\n [disabled]=\"!process.value || !version.value\"\n (selected)=\"activitySelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"activityListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <button cdsButton [disabled]=\"!importPluginForm.valid\" (click)=\"onSubmit()\" [cdsLayer]=\"1\">\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n </button>\n </div>\n</cds-toggletip>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.process-link-configuration-import-button{margin-bottom:16px}.process-link-configuration-select{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.process-link-configuration-select .cds--btn{width:100%;max-width:unset}\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: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i5.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i4.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i4.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i4.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i4.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "directive", type: i2$2.RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1346
+ }
1347
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ImportPluginConfigurationComponent, decorators: [{
1348
+ type: Component,
1349
+ args: [{ standalone: false, selector: 'valtimo-import-plugin-configuration', 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-toggletip align=\"right-bottom\" [autoAlign]=\"true\" [isOpen]=\"open$ | async\">\n <button\n class=\"process-link-configuration-import-button\"\n [disabled]=\"((compatiblePluginProcessLinks$ | async) || []).length === 0\"\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"ghost\"\n >\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"process-link-configuration-select\"\n >\n <cds-dropdown\n [label]=\"'processLinkConfiguration.process' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectProcess' | translate\"\n (selected)=\"processSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"processListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.version' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectVersion' | translate\"\n [disabled]=\"!process.value\"\n (selected)=\"versionSelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"versionListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-dropdown\n [label]=\"'processLinkConfiguration.activity' | translate\"\n [placeholder]=\"'processLinkConfiguration.selectActivity' | translate\"\n [disabled]=\"!process.value || !version.value\"\n (selected)=\"activitySelected($event)\"\n [appendInline]=\"true\"\n [cdsLayer]=\"1\"\n >\n <cds-dropdown-list\n [items]=\"activityListItems$ | async\"\n onclick=\"event.stopPropagation()\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <button cdsButton [disabled]=\"!importPluginForm.valid\" (click)=\"onSubmit()\" [cdsLayer]=\"1\">\n {{ 'processLinkConfiguration.importConfiguration' | translate }}\n </button>\n </div>\n</cds-toggletip>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.process-link-configuration-import-button{margin-bottom:16px}.process-link-configuration-select{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.process-link-configuration-select .cds--btn{width:100%;max-width:unset}\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"] }]
1350
+ }], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: ProcessLinkService }, { type: i4.IconService }, { type: i2$2.CdsThemeService }], propDecorators: { pluginActionKey: [{
1351
+ type: Input
1352
+ }], configurationEvent: [{
1353
+ type: Output
1354
+ }] } });
1355
+
1356
+ /*
1357
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1358
+ *
1359
+ * Licensed under EUPL, Version 1.2 (the "License");
1360
+ * you may not use this file except in compliance with the License.
1361
+ * You may obtain a copy of the License at
1362
+ *
1363
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1364
+ *
1365
+ * Unless required by applicable law or agreed to in writing, software
1366
+ * distributed under the License is distributed on an "AS IS" basis,
1367
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1368
+ * See the License for the specific language governing permissions and
1369
+ * limitations under the License.
1370
+ */
1371
+ class PluginActionConfigurationComponent {
1372
+ constructor(stateService, pluginStateService, buttonService, stepService, processLinkService) {
1373
+ this.stateService = stateService;
1374
+ this.pluginStateService = pluginStateService;
1375
+ this.buttonService = buttonService;
1376
+ this.stepService = stepService;
1377
+ this.processLinkService = processLinkService;
1378
+ this.valid = new EventEmitter();
1379
+ this.configuration = new EventEmitter();
1380
+ this.pluginDefinitionKey$ = this.pluginStateService.pluginDefinitionKey$;
1381
+ this.functionKey$ = this.pluginStateService.functionKey$;
1382
+ this.save$ = this.pluginStateService.save$;
1383
+ this.saving$ = this.stateService.saving$;
1384
+ this._prefillConfigurationSubject$ = new BehaviorSubject(null);
1385
+ this._prefillConfiguration$ = this.stateService.selectedProcessLink$.pipe(map(processLink => (processLink ? processLink?.actionProperties : undefined)));
1386
+ this.prefillConfiguration$ = combineLatest([
1387
+ this._prefillConfigurationSubject$,
1388
+ this._prefillConfiguration$,
1389
+ ]).pipe(map(([prefillConfigurationSubjectValue, prefillConfiguration]) => prefillConfigurationSubjectValue || prefillConfiguration));
1390
+ this._subscriptions = new Subscription();
1391
+ }
1392
+ ngOnInit() {
1393
+ this.openBackButtonSubscription();
1394
+ this.openSaveButtonSubscription();
1395
+ }
1396
+ ngOnDestroy() {
1397
+ this._subscriptions.unsubscribe();
1398
+ }
1399
+ onValid(valid) {
1400
+ if (valid)
1401
+ this.buttonService.enableSaveButton();
1402
+ else
1403
+ this.buttonService.disableSaveButton();
1404
+ }
1405
+ onConfiguration(configuration) {
1406
+ this.stateService.startSaving();
1407
+ this.stateService.selectedProcessLink$.pipe(take(1)).subscribe(selectedProcessLink => {
1408
+ if (selectedProcessLink) {
1409
+ this.updateProcessLink(configuration);
1410
+ }
1411
+ else {
1412
+ this.saveNewProcessLink(configuration);
1413
+ }
1414
+ });
1415
+ }
1416
+ onImportConfiguration(configuration) {
1417
+ this._prefillConfigurationSubject$.next(configuration);
1418
+ }
1419
+ updateProcessLink(configuration) {
1420
+ this.stateService.selectedProcessLink$.pipe(take(1)).subscribe(selectedProcessLink => {
1421
+ const updateProcessLinkRequest = {
1422
+ id: selectedProcessLink.id,
1423
+ pluginConfigurationId: selectedProcessLink.pluginConfigurationId ?? '',
1424
+ pluginActionDefinitionKey: selectedProcessLink.pluginActionDefinitionKey ?? '',
1425
+ actionProperties: configuration,
1426
+ activityId: selectedProcessLink.activityId,
1427
+ };
1428
+ if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
1429
+ this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
1430
+ return;
1431
+ }
1432
+ this.processLinkService.updateProcessLink(updateProcessLinkRequest).subscribe(() => {
1433
+ this.stateService.closeModal();
1434
+ }, () => {
1435
+ this.stateService.stopSaving();
1436
+ });
1437
+ });
1438
+ }
1439
+ saveNewProcessLink(configuration) {
1440
+ combineLatest([
1441
+ this.stateService.modalParams$,
1442
+ this.pluginStateService.selectedPluginConfiguration$,
1443
+ this.pluginStateService.selectedPluginFunction$,
1444
+ this.stateService.selectedProcessLinkTypeId$,
1445
+ ])
1446
+ .pipe(take(1))
1447
+ .subscribe(([modalData, selectedConfiguration, selectedFunction, selectedProcessLinkTypeId]) => {
1448
+ const processLinkRequest = {
1449
+ actionProperties: configuration,
1450
+ activityId: modalData?.element?.id,
1451
+ activityType: modalData?.element?.activityListenerType ?? '',
1452
+ pluginConfigurationId: selectedConfiguration.id,
1453
+ processDefinitionId: modalData?.processDefinitionId,
1454
+ pluginActionDefinitionKey: selectedFunction.key,
1455
+ processLinkType: selectedProcessLinkTypeId,
1456
+ };
1457
+ if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
1458
+ this.stateService.sendProcessLinkCreateEvent(processLinkRequest);
1459
+ return;
1460
+ }
1461
+ this.processLinkService.saveProcessLink(processLinkRequest).subscribe(() => {
1462
+ this.stateService.closeModal();
1463
+ }, () => {
1464
+ this.stateService.stopSaving();
1465
+ });
1466
+ });
1467
+ }
1468
+ openBackButtonSubscription() {
1469
+ this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
1470
+ this.stepService.setChoosePluginActionSteps();
1471
+ }));
1472
+ }
1473
+ openSaveButtonSubscription() {
1474
+ this._subscriptions.add(this.buttonService.saveButtonClick$.subscribe(() => {
1475
+ this.pluginStateService.save();
1476
+ }));
1477
+ }
1478
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginActionConfigurationComponent, deps: [{ token: ProcessLinkStateService }, { token: PluginStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: ProcessLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
1479
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: PluginActionConfigurationComponent, isStandalone: false, selector: "valtimo-plugin-action-configuration", inputs: { selectedPluginConfiguration$: "selectedPluginConfiguration$" }, outputs: { valid: "valid", configuration: "configuration" }, 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-import-plugin-configuration\n [pluginActionKey]=\"functionKey$ | async\"\n (configurationEvent)=\"onImportConfiguration($event)\"\n></valtimo-import-plugin-configuration>\n\n<valtimo-plugin-configuration-container\n [pluginDefinitionKey]=\"pluginDefinitionKey$ | async\"\n [functionKey]=\"functionKey$ | async\"\n [save$]=\"save$\"\n [disabled$]=\"saving$\"\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n [prefillConfiguration$]=\"prefillConfiguration$\"\n (valid)=\"onValid($event)\"\n (configuration)=\"onConfiguration($event)\"\n type=\"function\"\n></valtimo-plugin-configuration-container>\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: "component", type: i1$1.PluginConfigurationContainerComponent, selector: "valtimo-plugin-configuration-container", inputs: ["type", "pluginDefinitionKey", "functionKey", "save$", "disabled$", "selectedPluginConfiguration$", "prefillConfiguration$"], outputs: ["valid", "configuration"] }, { kind: "component", type: ImportPluginConfigurationComponent, selector: "valtimo-import-plugin-configuration", inputs: ["pluginActionKey"], outputs: ["configurationEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
1480
+ }
1481
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: PluginActionConfigurationComponent, decorators: [{
1482
+ type: Component,
1483
+ args: [{ standalone: false, selector: 'valtimo-plugin-action-configuration', 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-import-plugin-configuration\n [pluginActionKey]=\"functionKey$ | async\"\n (configurationEvent)=\"onImportConfiguration($event)\"\n></valtimo-import-plugin-configuration>\n\n<valtimo-plugin-configuration-container\n [pluginDefinitionKey]=\"pluginDefinitionKey$ | async\"\n [functionKey]=\"functionKey$ | async\"\n [save$]=\"save$\"\n [disabled$]=\"saving$\"\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n [prefillConfiguration$]=\"prefillConfiguration$\"\n (valid)=\"onValid($event)\"\n (configuration)=\"onConfiguration($event)\"\n type=\"function\"\n></valtimo-plugin-configuration-container>\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"] }]
1484
+ }], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: PluginStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: ProcessLinkService }], propDecorators: { selectedPluginConfiguration$: [{
1485
+ type: Input
1486
+ }], valid: [{
1487
+ type: Output
1488
+ }], configuration: [{
1489
+ type: Output
1490
+ }] } });
1491
+
1492
+ /*
1493
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1494
+ *
1495
+ * Licensed under EUPL, Version 1.2 (the "License");
1496
+ * you may not use this file except in compliance with the License.
1497
+ * You may obtain a copy of the License at
1498
+ *
1499
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1500
+ *
1501
+ * Unless required by applicable law or agreed to in writing, software
1502
+ * distributed under the License is distributed on an "AS IS" basis,
1503
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1504
+ * See the License for the specific language governing permissions and
1505
+ * limitations under the License.
1506
+ */
1507
+ class FormLinkProcessDiagramComponent {
1508
+ constructor(processService, route, pageTitleService) {
1509
+ this.processService = processService;
1510
+ this.route = route;
1511
+ this.pageTitleService = pageTitleService;
1512
+ this.bpmnElementModalOpen = new EventEmitter();
1513
+ this.bpmnElementModalClose = new EventEmitter();
1514
+ this.callbacksAdded = false;
1515
+ }
1516
+ ngOnInit() {
1517
+ this.pageTitleService.disableReset();
1518
+ combineLatest([this.route.queryParams, this.processService.getProcessDefinitions()])
1519
+ .pipe(map(([queryParams, processDefinitions]) => ({ queryParams, processDefinitions })))
1520
+ .subscribe(response => {
1521
+ this.processDefinitions = response.processDefinitions;
1522
+ if (response.queryParams.process) {
1523
+ this.processDefinitionKey = response.queryParams.process;
1524
+ this.loadProcessDefinitionFromKey(this.processDefinitionKey);
1525
+ this.bpmnElementModalOpen.emit({
1526
+ element: {
1527
+ id: 'start-event',
1528
+ type: 'bpmn:StartEvent',
1529
+ },
1530
+ processDefinitionKey: this.processDefinitionKey,
1531
+ processDefinitionId: this.processDefinitionId,
1532
+ });
1533
+ }
1534
+ if (!this.processDefinitionKey && response.processDefinitions.length !== 0) {
1535
+ this.processDefinitionKey = response.processDefinitions[0].key;
1536
+ this.loadProcessDefinitionFromKey(this.processDefinitionKey);
1537
+ }
1538
+ });
1539
+ this.bpmnViewer = new BpmnViewer({});
1540
+ this.bpmnViewer.on('import.done', ({ error }) => {
1541
+ if (!error) {
1542
+ const canvas = this.bpmnViewer.get('canvas');
1543
+ const eventBus = this.bpmnViewer.get('eventBus');
1544
+ canvas.zoom('fit-viewport', 'auto');
1545
+ if (this.processDefinitionVersions && !this.callbacksAdded) {
1546
+ eventBus.on('element.click', e => {
1547
+ let activityListenerType = e.element.businessObject.$type;
1548
+ if (activityListenerType === 'bpmn:UserTask') {
1549
+ activityListenerType += ':create';
1550
+ }
1551
+ else {
1552
+ activityListenerType += ':start';
1553
+ }
1554
+ this.bpmnElementModalOpen.emit({
1555
+ element: {
1556
+ id: e.element.businessObject.id,
1557
+ type: e.element.businessObject.$type,
1558
+ activityListenerType,
1559
+ name: e.element?.businessObject?.name,
1560
+ },
1561
+ processDefinitionKey: this.processDefinitionKey,
1562
+ processDefinitionId: this.processDefinitionId,
1563
+ });
1564
+ });
1565
+ this.callbacksAdded = true;
1566
+ }
1567
+ }
1568
+ });
1569
+ }
1570
+ ngOnDestroy() {
1571
+ this.bpmnElementModalClose.emit();
1572
+ if (this.bpmnViewer) {
1573
+ this.bpmnViewer.destroy();
1574
+ }
1575
+ this.pageTitleService.enableReset();
1576
+ }
1577
+ loadProcessDefinition(processDefinitionKey) {
1578
+ this.processService
1579
+ .getProcessDefinition(processDefinitionKey)
1580
+ .subscribe((processDefinition) => {
1581
+ this.processDefinitionId = processDefinition.id;
1582
+ this.version = processDefinition.version;
1583
+ this.loadProcessDefinitionXml(processDefinition.id);
1584
+ });
1585
+ }
1586
+ loadProcessDefinitionVersions(processDefinitionKey) {
1587
+ this.processService
1588
+ .getProcessDefinitionVersions(processDefinitionKey)
1589
+ .subscribe((processDefinitionVersions) => {
1590
+ this.processDefinitionVersions = processDefinitionVersions;
1591
+ });
1592
+ }
1593
+ loadProcessDefinitionFromKey(processDefinitionKey) {
1594
+ this.loadProcessDefinitionVersions(processDefinitionKey);
1595
+ this.loadProcessDefinition(processDefinitionKey);
1596
+ }
1597
+ loadProcessDefinitionXml(processDefinitionId) {
1598
+ this.processService.getProcessDefinitionXml(processDefinitionId).subscribe(response => {
1599
+ this.processDiagram = response;
1600
+ this.bpmnViewer.importXML(this.processDiagram.bpmn20Xml);
1601
+ this.bpmnViewer.attachTo(this.el.nativeElement);
1602
+ });
1603
+ }
1604
+ setProcessDefinitionKey(processDefinitionKey) {
1605
+ this.processDefinitionKey = processDefinitionKey;
1606
+ this.loadProcessDefinitionFromKey(this.processDefinitionKey);
1607
+ }
1608
+ setProcessDefinitionVersion(version) {
1609
+ const processDefinitionId = this.processDefinitionVersions.find(definition => definition.version === +version)?.id;
1610
+ if (processDefinitionId) {
1611
+ this.processDefinitionId = processDefinitionId;
1612
+ this.loadProcessDefinitionXml(this.processDefinitionId);
1613
+ }
1614
+ this.version = +version;
1615
+ }
1616
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormLinkProcessDiagramComponent, deps: [{ token: i1$3.ProcessService }, { token: i3$1.ActivatedRoute }, { token: i2$2.PageTitleService }], target: i0.ɵɵFactoryTarget.Component }); }
1617
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormLinkProcessDiagramComponent, isStandalone: false, selector: "valtimo-form-link-process-diagram", outputs: { bpmnElementModalOpen: "bpmnElementModalOpen", bpmnElementModalClose: "bpmnElementModalClose" }, viewQueries: [{ propertyName: "el", first: true, predicate: ["ref"], 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<div class=\"container-fluid\">\n <div class=\"row p-4 bg-white\">\n <div class=\"col\">\n <div #ref class=\"diagram-container\"></div>\n </div>\n </div>\n</div>\n<div class=\"p-4 text-center legenda-holder\">\n <span>Click on a User Task to specify a form definition for that User Task.</span>\n</div>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div class=\"form-link-dossier-actions\">\n <cds-select [label]=\"'Process'\" (change)=\"setProcessDefinitionKey($event.target.value)\"\n ><option\n *ngFor=\"let processDefinition of processDefinitions\"\n [value]=\"processDefinition.key\"\n [selected]=\"processDefinitionKey === processDefinition.key\"\n >\n {{ processDefinition.name }}\n </option>\n </cds-select>\n <cds-select [label]=\"'Version'\" (change)=\"setProcessDefinitionVersion($event.target.value)\">\n <option\n *ngFor=\"let processDefinitionVersion of processDefinitionVersions\"\n [value]=\"processDefinitionVersion.version\"\n [selected]=\"processDefinitionVersion.version === version\"\n >\n {{ processDefinitionVersion.version }}\n </option>\n </cds-select>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".diagram-container-switch-holder{width:100%;z-index:1000}.diagram-container{height:58vh}.container-fluid{border:1px solid #dee2e6}.options{border-bottom:1px solid #dee2e6}.form-link-dossier-actions{display:flex;flex-direction:row;gap:8px}\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: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$2.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i4.Select, selector: "cds-select, ibm-select", inputs: ["value", "display", "label", "helperText", "invalidText", "warn", "warnText", "id", "size", "disabled", "skeleton", "invalid", "readonly", "theme", "ariaLabel", "fluid"], outputs: ["valueChange"] }, { kind: "directive", type: i4.Option, selector: "option" }] }); }
1618
+ }
1619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormLinkProcessDiagramComponent, decorators: [{
1620
+ type: Component,
1621
+ args: [{ standalone: false, selector: 'valtimo-form-link-process-diagram', 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=\"container-fluid\">\n <div class=\"row p-4 bg-white\">\n <div class=\"col\">\n <div #ref class=\"diagram-container\"></div>\n </div>\n </div>\n</div>\n<div class=\"p-4 text-center legenda-holder\">\n <span>Click on a User Task to specify a form definition for that User Task.</span>\n</div>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div class=\"form-link-dossier-actions\">\n <cds-select [label]=\"'Process'\" (change)=\"setProcessDefinitionKey($event.target.value)\"\n ><option\n *ngFor=\"let processDefinition of processDefinitions\"\n [value]=\"processDefinition.key\"\n [selected]=\"processDefinitionKey === processDefinition.key\"\n >\n {{ processDefinition.name }}\n </option>\n </cds-select>\n <cds-select [label]=\"'Version'\" (change)=\"setProcessDefinitionVersion($event.target.value)\">\n <option\n *ngFor=\"let processDefinitionVersion of processDefinitionVersions\"\n [value]=\"processDefinitionVersion.version\"\n [selected]=\"processDefinitionVersion.version === version\"\n >\n {{ processDefinitionVersion.version }}\n </option>\n </cds-select>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".diagram-container-switch-holder{width:100%;z-index:1000}.diagram-container{height:58vh}.container-fluid{border:1px solid #dee2e6}.options{border-bottom:1px solid #dee2e6}.form-link-dossier-actions{display:flex;flex-direction:row;gap:8px}\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"] }]
1622
+ }], ctorParameters: () => [{ type: i1$3.ProcessService }, { type: i3$1.ActivatedRoute }, { type: i2$2.PageTitleService }], propDecorators: { el: [{
1623
+ type: ViewChild,
1624
+ args: ['ref']
1625
+ }], bpmnElementModalOpen: [{
1626
+ type: Output
1627
+ }], bpmnElementModalClose: [{
1628
+ type: Output
1629
+ }] } });
1630
+
1631
+ /*
1632
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1633
+ *
1634
+ * Licensed under EUPL, Version 1.2 (the "License");
1635
+ * you may not use this file except in compliance with the License.
1636
+ * You may obtain a copy of the License at
1637
+ *
1638
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1639
+ *
1640
+ * Unless required by applicable law or agreed to in writing, software
1641
+ * distributed under the License is distributed on an "AS IS" basis,
1642
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1643
+ * See the License for the specific language governing permissions and
1644
+ * limitations under the License.
1645
+ */
1646
+ class ChooseProcessLinkTypeComponent {
1647
+ constructor(processLinkStateService) {
1648
+ this.processLinkStateService = processLinkStateService;
1649
+ this.availableProcessLinkTypes$ = this.processLinkStateService.availableProcessLinkTypes$;
1650
+ }
1651
+ selectProcessLinkType(processLinkTypeId) {
1652
+ this.processLinkStateService.selectProcessLinkType(processLinkTypeId);
1653
+ }
1654
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ChooseProcessLinkTypeComponent, deps: [{ token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
1655
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: ChooseProcessLinkTypeComponent, isStandalone: false, selector: "valtimo-choose-process-link-type", 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<ng-container\n *ngIf=\"{\n availableProcessLinkTypes: availableProcessLinkTypes$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseProcessLinkTypeDescription' | translate }}\n </p>\n <div class=\"process-link-grid\">\n <div\n class=\"process-link-item\"\n *ngFor=\"let availableProcessLinkType of obs.availableProcessLinkTypes\"\n >\n <ng-container *ngIf=\"availableProcessLinkType.processLinkType as processLinkTypeId\">\n <button\n (click)=\"selectProcessLinkType(processLinkTypeId)\"\n cdsButton=\"secondary\"\n size=\"xl\"\n class=\"process-link-type-button\"\n [disabled]=\"!availableProcessLinkType.enabled\"\n [vTooltip]=\"'processLinkTypeDisabledTooltip.' + processLinkTypeId | translate\"\n [onBottom]=\"true\"\n [tooltipDisabled]=\"availableProcessLinkType.enabled\"\n >\n {{ 'processLinkType.' + processLinkTypeId | translate }}\n <svg\n *ngIf=\"processLinkTypeId === 'plugin'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"link\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form-flow'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"flow--data\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'ui-component'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n </button>\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".process-link-type-button{width:100%}.process-link-grid{margin-top:24px;display:flex;justify-content:flex-start;width:100%;flex-wrap:wrap;gap:8px}.process-link-item{flex-basis:calc(33.3% - 5.3333333333px)}\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: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i2$2.TooltipDirective, selector: "[vTooltip]", inputs: ["vTooltip", "onBottom", "tooltipDisabled"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1656
+ }
1657
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ChooseProcessLinkTypeComponent, decorators: [{
1658
+ type: Component,
1659
+ args: [{ standalone: false, selector: 'valtimo-choose-process-link-type', 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<ng-container\n *ngIf=\"{\n availableProcessLinkTypes: availableProcessLinkTypes$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseProcessLinkTypeDescription' | translate }}\n </p>\n <div class=\"process-link-grid\">\n <div\n class=\"process-link-item\"\n *ngFor=\"let availableProcessLinkType of obs.availableProcessLinkTypes\"\n >\n <ng-container *ngIf=\"availableProcessLinkType.processLinkType as processLinkTypeId\">\n <button\n (click)=\"selectProcessLinkType(processLinkTypeId)\"\n cdsButton=\"secondary\"\n size=\"xl\"\n class=\"process-link-type-button\"\n [disabled]=\"!availableProcessLinkType.enabled\"\n [vTooltip]=\"'processLinkTypeDisabledTooltip.' + processLinkTypeId | translate\"\n [onBottom]=\"true\"\n [tooltipDisabled]=\"availableProcessLinkType.enabled\"\n >\n {{ 'processLinkType.' + processLinkTypeId | translate }}\n <svg\n *ngIf=\"processLinkTypeId === 'plugin'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"link\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'form-flow'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"flow--data\"\n size=\"16\"\n ></svg>\n <svg\n *ngIf=\"processLinkTypeId === 'ui-component'\"\n class=\"cds--btn__icon\"\n cdsIcon=\"receipt\"\n size=\"16\"\n ></svg>\n </button>\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: [".process-link-type-button{width:100%}.process-link-grid{margin-top:24px;display:flex;justify-content:flex-start;width:100%;flex-wrap:wrap;gap:8px}.process-link-item{flex-basis:calc(33.3% - 5.3333333333px)}\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"] }]
1660
+ }], ctorParameters: () => [{ type: ProcessLinkStateService }] });
1661
+
1662
+ /*
1663
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1664
+ *
1665
+ * Licensed under EUPL, Version 1.2 (the "License");
1666
+ * you may not use this file except in compliance with the License.
1667
+ * You may obtain a copy of the License at
1668
+ *
1669
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1670
+ *
1671
+ * Unless required by applicable law or agreed to in writing, software
1672
+ * distributed under the License is distributed on an "AS IS" basis,
1673
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1674
+ * See the License for the specific language governing permissions and
1675
+ * limitations under the License.
1676
+ */
1677
+ class FormDisplayConfigurationComponent {
1678
+ constructor(buttonService, stateService, translateService) {
1679
+ this.buttonService = buttonService;
1680
+ this.stateService = stateService;
1681
+ this.translateService = translateService;
1682
+ this.formDisplayValue = new EventEmitter();
1683
+ this.formSizeValue = new EventEmitter();
1684
+ this.subtitlesValue = new EventEmitter();
1685
+ this.formDisplayValue$ = new BehaviorSubject(null);
1686
+ this.formSizeValue$ = new BehaviorSubject(null);
1687
+ this._subtitles$ = new BehaviorSubject([]);
1688
+ this.subtitles$ = this._subtitles$.pipe(map(subtitles => subtitles.map(subtitle => ({ value: subtitle }))));
1689
+ this.disableFormSizeInput$ = new BehaviorSubject(true);
1690
+ this.saving$ = this.stateService.saving$;
1691
+ this.isUserTask$ = new BehaviorSubject(false);
1692
+ this._DISPLAY_TYPE_OPTIONS = ['modal', 'panel'];
1693
+ this._FORM_SIZE_OPTIONS = ['extraSmall', 'small', 'medium', 'large'];
1694
+ this._subscriptions = new Subscription();
1695
+ this.formDisplayTypeListItems$ = combineLatest([
1696
+ this.formDisplayValue$,
1697
+ this.translateService.stream('key'),
1698
+ ]).pipe(map(([formDisplayValue]) => this._DISPLAY_TYPE_OPTIONS.map((key) => ({
1699
+ content: this.translateService.instant(`processLinkSteps.displayType.options.${key}`),
1700
+ key: key,
1701
+ selected: this.formDisplayValue$.getValue() === key,
1702
+ }))));
1703
+ this.formSizeListItems$ = combineLatest([
1704
+ this.formSizeValue$,
1705
+ this.translateService.stream('key'),
1706
+ ]).pipe(map(([formSizeValue]) => this._FORM_SIZE_OPTIONS.map((key) => ({
1707
+ content: this.translateService.instant(`processLinkSteps.formSize.options.${key}`),
1708
+ key: key,
1709
+ selected: this.formSizeValue$.getValue() === key,
1710
+ }))));
1711
+ }
1712
+ ngOnInit() {
1713
+ this._subscriptions.add(combineLatest([
1714
+ this.stateService.modalParams$,
1715
+ this.stateService.selectedProcessLink$,
1716
+ ]).subscribe(([modalParams, selectedProcessLink]) => {
1717
+ this.isUserTask$.next(modalParams?.element?.type === 'bpmn:UserTask');
1718
+ if (selectedProcessLink) {
1719
+ if (selectedProcessLink.formDisplayType)
1720
+ this.disableFormSizeInput$.next(false);
1721
+ if (selectedProcessLink.activityType.includes('bpmn:UserTask'))
1722
+ this.isUserTask$.next(true);
1723
+ this.formDisplayValue$.next(selectedProcessLink.formDisplayType ?? null);
1724
+ this.formSizeValue$.next(selectedProcessLink.formSize ?? null);
1725
+ this._subtitles$.next(selectedProcessLink.subtitles ?? []);
1726
+ }
1727
+ }));
1728
+ }
1729
+ ngOnDestroy() {
1730
+ this._subscriptions.unsubscribe();
1731
+ }
1732
+ selectFormDisplayType(event) {
1733
+ this.updateFormDisplayType(event?.key);
1734
+ this.enableSaveButtonWhenValid();
1735
+ }
1736
+ selectFormSize(event) {
1737
+ this.updateFormSize(event?.key);
1738
+ this.enableSaveButtonWhenValid();
1739
+ }
1740
+ onSubtitlesChange(subtitles) {
1741
+ this.subtitlesValue.emit(subtitles);
1742
+ }
1743
+ updateFormDisplayType(formDisplayType) {
1744
+ formDisplayType ? this.disableFormSizeInput$.next(false) : this.resetFormSize();
1745
+ this.formDisplayValue$.next(formDisplayType);
1746
+ this.formDisplayValue.emit(formDisplayType);
1747
+ }
1748
+ updateFormSize(formSize) {
1749
+ this.formSizeValue$.next(formSize);
1750
+ this.formSizeValue.emit(formSize);
1751
+ }
1752
+ resetFormSize() {
1753
+ this.disableFormSizeInput$.next(true);
1754
+ this.updateFormSize(null);
1755
+ }
1756
+ enableSaveButtonWhenValid() {
1757
+ if (this.selectedFormDefinition &&
1758
+ this.formDisplayValue$.getValue() &&
1759
+ this.formSizeValue$.getValue())
1760
+ this.buttonService.enableSaveButton();
1761
+ else
1762
+ this.buttonService.disableSaveButton();
1763
+ }
1764
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormDisplayConfigurationComponent, deps: [{ token: ProcessLinkButtonService }, { token: ProcessLinkStateService }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
1765
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: FormDisplayConfigurationComponent, isStandalone: false, selector: "valtimo-form-display-configuration", inputs: { selectedFormDefinition: "selectedFormDefinition" }, outputs: { formDisplayValue: "formDisplayValue", formSizeValue: "formSizeValue", subtitlesValue: "subtitlesValue" }, 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<ng-container\n *ngIf=\"{\n formDisplayValue: formDisplayValue$ | async,\n formDisplayTypeListItems: formDisplayTypeListItems$ | async,\n formSizeListItems: formSizeListItems$ | async,\n disableFormSizeInput: disableFormSizeInput$ | async,\n subtitles: subtitles$ | async,\n isUserTask: isUserTask$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n @if (obs.isUserTask) {\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.displayType.placeholder' | translate\"\n [label]=\"'processLinkSteps.displayType.label' | translate\"\n [disabled]=\"obs.saving\"\n (selected)=\"selectFormDisplayType($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formDisplayTypeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.formSize.placeholder' | translate\"\n [label]=\"'processLinkSteps.formSize.label' | translate\"\n [disabled]=\"obs.disableFormSizeInput || obs.saving\"\n (selected)=\"selectFormSize($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formSizeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <valtimo-carbon-multi-input\n type=\"value\"\n titleTranslationKey=\"processLinkSteps.subtitles\"\n addRowTranslationKey=\"processLinkSteps.addSubtitle\"\n [disabled]=\"obs.saving\"\n [fullWidth]=\"true\"\n [minimumAmountOfRows]=\"0\"\n [initialAmountOfRows]=\"0\"\n [defaultValues]=\"obs.subtitles\"\n (valueChange)=\"onSubtitlesChange($event)\"\n ></valtimo-carbon-multi-input>\n }\n</ng-container>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2$2.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1766
+ }
1767
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormDisplayConfigurationComponent, decorators: [{
1768
+ type: Component,
1769
+ args: [{ standalone: false, selector: 'valtimo-form-display-configuration', 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<ng-container\n *ngIf=\"{\n formDisplayValue: formDisplayValue$ | async,\n formDisplayTypeListItems: formDisplayTypeListItems$ | async,\n formSizeListItems: formSizeListItems$ | async,\n disableFormSizeInput: disableFormSizeInput$ | async,\n subtitles: subtitles$ | async,\n isUserTask: isUserTask$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n @if (obs.isUserTask) {\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.displayType.placeholder' | translate\"\n [label]=\"'processLinkSteps.displayType.label' | translate\"\n [disabled]=\"obs.saving\"\n (selected)=\"selectFormDisplayType($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formDisplayTypeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <cds-combo-box\n [placeholder]=\"'processLinkSteps.formSize.placeholder' | translate\"\n [label]=\"'processLinkSteps.formSize.label' | translate\"\n [disabled]=\"obs.disableFormSizeInput || obs.saving\"\n (selected)=\"selectFormSize($event)\"\n >\n <cds-dropdown-list [items]=\"obs.formSizeListItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n\n <br />\n\n <valtimo-carbon-multi-input\n type=\"value\"\n titleTranslationKey=\"processLinkSteps.subtitles\"\n addRowTranslationKey=\"processLinkSteps.addSubtitle\"\n [disabled]=\"obs.saving\"\n [fullWidth]=\"true\"\n [minimumAmountOfRows]=\"0\"\n [initialAmountOfRows]=\"0\"\n [defaultValues]=\"obs.subtitles\"\n (valueChange)=\"onSubtitlesChange($event)\"\n ></valtimo-carbon-multi-input>\n }\n</ng-container>\n" }]
1770
+ }], ctorParameters: () => [{ type: ProcessLinkButtonService }, { type: ProcessLinkStateService }, { type: i2$1.TranslateService }], propDecorators: { selectedFormDefinition: [{
1771
+ type: Input
1772
+ }], formDisplayValue: [{
1773
+ type: Output
1774
+ }], formSizeValue: [{
1775
+ type: Output
1776
+ }], subtitlesValue: [{
1777
+ type: Output
1778
+ }] } });
1779
+
1780
+ /*
1781
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1782
+ *
1783
+ * Licensed under EUPL, Version 1.2 (the "License");
1784
+ * you may not use this file except in compliance with the License.
1785
+ * You may obtain a copy of the License at
1786
+ *
1787
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1788
+ *
1789
+ * Unless required by applicable law or agreed to in writing, software
1790
+ * distributed under the License is distributed on an "AS IS" basis,
1791
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1792
+ * See the License for the specific language governing permissions and
1793
+ * limitations under the License.
1794
+ */
1795
+ class SelectFormComponent {
1796
+ constructor(formService, stateService, processLinkService, buttonService, route) {
1797
+ this.formService = formService;
1798
+ this.stateService = stateService;
1799
+ this.processLinkService = processLinkService;
1800
+ this.buttonService = buttonService;
1801
+ this.route = route;
1802
+ this.subtitlesValue = [];
1803
+ this.saving$ = this.stateService.saving$;
1804
+ this.caseDefinitionId$ = getCaseManagementRouteParams(this.route);
1805
+ this.formDefinitions$ = this.caseDefinitionId$.pipe(mergeMap(caseDefinitionId => {
1806
+ if (!!caseDefinitionId) {
1807
+ return this.formService.getAllFormDefinitionsForCaseDefinition(caseDefinitionId?.caseDefinitionKey ?? '', caseDefinitionId?.caseDefinitionVersionTag ?? '');
1808
+ }
1809
+ return this.formService.getAllUnlinkedFormDefinitions();
1810
+ }));
1811
+ this.formDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formDefinitions$]).pipe(map$1(([selectedProcessLink, formDefinitions]) => formDefinitions.map(definition => ({
1812
+ content: definition.name,
1813
+ id: definition.id,
1814
+ selected: selectedProcessLink
1815
+ ? selectedProcessLink.formDefinitionId === definition.id
1816
+ : false,
1817
+ }))), tap(formDefinitionListItems => {
1818
+ const selectedItem = formDefinitionListItems.find(item => item.selected);
1819
+ if (selectedItem) {
1820
+ this.selectFormDefinition(selectedItem);
1821
+ }
1822
+ }));
1823
+ this._subscriptions = new Subscription();
1824
+ this.isUserTask$ = new BehaviorSubject(false);
1825
+ this._DEFAULT_FORM_DISPLAY_TYPE = 'panel';
1826
+ this._DEFAULT_FORM_DISPLAY_SIZE = 'medium';
1827
+ }
1828
+ ngOnInit() {
1829
+ this.openBackButtonSubscription();
1830
+ this.openSaveButtonSubscription();
1831
+ this._subscriptions.add(combineLatest([
1832
+ this.stateService.selectedProcessLink$,
1833
+ this.stateService.modalParams$,
1834
+ ]).subscribe(([selectedProcessLink, modalParams]) => {
1835
+ if (selectedProcessLink) {
1836
+ this.formDisplayValue = selectedProcessLink.formDisplayType;
1837
+ this.formSizeValue = selectedProcessLink.formSize;
1838
+ }
1839
+ this.isUserTask$.next(modalParams?.element?.type === 'bpmn:UserTask');
1840
+ }));
1841
+ }
1842
+ ngOnDestroy() {
1843
+ this._subscriptions.unsubscribe();
1844
+ }
1845
+ selectFormDefinition(formDefinition) {
1846
+ this.selectedFormDefinition = formDefinition?.id ? formDefinition : null;
1847
+ if (this.selectedFormDefinition)
1848
+ this.buttonService.enableSaveButton();
1849
+ else
1850
+ this.buttonService.disableSaveButton();
1851
+ }
1852
+ selectedFormDisplayValue(formDisplay) {
1853
+ this.formDisplayValue = formDisplay;
1854
+ }
1855
+ selectedFormSizeValue(formSize) {
1856
+ this.formSizeValue = formSize;
1857
+ }
1858
+ selectedSubtitlesValue(subtitles) {
1859
+ this.subtitlesValue = subtitles;
1860
+ }
1861
+ openBackButtonSubscription() {
1862
+ this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
1863
+ this.stateService.setInitial();
1864
+ }));
1865
+ }
1866
+ openSaveButtonSubscription() {
1867
+ this._subscriptions.add(this.buttonService.saveButtonClick$.subscribe(() => {
1868
+ this.stateService.startSaving();
1869
+ this.saveProcessLink();
1870
+ }));
1871
+ }
1872
+ saveProcessLink() {
1873
+ this.stateService.selectedProcessLink$.pipe(take(1)).subscribe(selectedProcessLink => {
1874
+ if (selectedProcessLink) {
1875
+ this.updateProcessLink();
1876
+ }
1877
+ else {
1878
+ this.saveNewProcessLink();
1879
+ }
1880
+ });
1881
+ }
1882
+ updateProcessLink() {
1883
+ combineLatest([
1884
+ this.stateService.selectedProcessLink$,
1885
+ this.stateService.viewModelEnabled$,
1886
+ this.isUserTask$,
1887
+ ])
1888
+ .pipe(take(1))
1889
+ .subscribe(([selectedProcessLink, viewModelEnabled, isUserTask]) => {
1890
+ const updateProcessLinkRequest = {
1891
+ id: selectedProcessLink.id,
1892
+ formDefinitionId: this.selectedFormDefinition.id,
1893
+ activityId: selectedProcessLink.activityId,
1894
+ viewModelEnabled,
1895
+ ...(isUserTask && {
1896
+ formDisplayType: this.formDisplayValue || this._DEFAULT_FORM_DISPLAY_TYPE,
1897
+ }),
1898
+ ...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_TYPE }),
1899
+ ...(isUserTask && { subtitles: this.subtitlesValue }),
1900
+ };
1901
+ if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
1902
+ this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
1903
+ return;
1904
+ }
1905
+ this.processLinkService.updateProcessLink(updateProcessLinkRequest).subscribe({
1906
+ next: () => {
1907
+ this.stateService.closeModal();
1908
+ },
1909
+ error: () => {
1910
+ this.stateService.stopSaving();
1911
+ },
1912
+ });
1913
+ });
1914
+ }
1915
+ saveNewProcessLink() {
1916
+ combineLatest([
1917
+ this.stateService.modalParams$,
1918
+ this.stateService.selectedProcessLinkTypeId$,
1919
+ this.stateService.viewModelEnabled$,
1920
+ this.isUserTask$,
1921
+ ])
1922
+ .pipe(take(1))
1923
+ .subscribe(([modalParams, processLinkTypeId, viewModelEnabled, isUserTask]) => {
1924
+ const createRequest = {
1925
+ formDefinitionId: this.selectedFormDefinition.id,
1926
+ activityType: modalParams.element.activityListenerType,
1927
+ processDefinitionId: modalParams.processDefinitionId,
1928
+ processLinkType: processLinkTypeId,
1929
+ activityId: modalParams.element.id,
1930
+ viewModelEnabled,
1931
+ ...(isUserTask && {
1932
+ formDisplayType: this.formDisplayValue || this._DEFAULT_FORM_DISPLAY_TYPE,
1933
+ }),
1934
+ ...(isUserTask && {
1935
+ formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_SIZE,
1936
+ }),
1937
+ ...(isUserTask && {
1938
+ subtitles: this.subtitlesValue,
1939
+ }),
1940
+ };
1941
+ if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
1942
+ this.stateService.sendProcessLinkCreateEvent(createRequest);
1943
+ return;
1944
+ }
1945
+ this.processLinkService.saveProcessLink(createRequest).subscribe({
1946
+ next: () => {
1947
+ this.stateService.closeModal();
1948
+ },
1949
+ error: () => {
1950
+ this.stateService.stopSaving();
1951
+ },
1952
+ });
1953
+ });
1954
+ }
1955
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectFormComponent, deps: [{ token: i1$4.FormService }, { token: ProcessLinkStateService }, { token: ProcessLinkService }, { token: ProcessLinkButtonService }, { token: i3$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
1956
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectFormComponent, isStandalone: false, selector: "valtimo-select-form", 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<ng-container\n *ngIf=\"{\n formDefinitions: formDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormDescription' | translate }}\n </p>\n <div class=\"select-form\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formDefinitions || obs.saving\"\n [items]=\"obs.formDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormDefinition($event)\"\n [label]=\"'processLinkSteps.selectForm' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormDefinition\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form{display:flex;flex-direction:column;width:100%;margin-top:24px}\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: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: FormDisplayConfigurationComponent, selector: "valtimo-form-display-configuration", inputs: ["selectedFormDefinition"], outputs: ["formDisplayValue", "formSizeValue", "subtitlesValue"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
1957
+ }
1958
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectFormComponent, decorators: [{
1959
+ type: Component,
1960
+ args: [{ standalone: false, selector: 'valtimo-select-form', 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<ng-container\n *ngIf=\"{\n formDefinitions: formDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormDescription' | translate }}\n </p>\n <div class=\"select-form\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formDefinitions || obs.saving\"\n [items]=\"obs.formDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormDefinition($event)\"\n [label]=\"'processLinkSteps.selectForm' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormDefinition\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form{display:flex;flex-direction:column;width:100%;margin-top:24px}\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"] }]
1961
+ }], ctorParameters: () => [{ type: i1$4.FormService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$1.ActivatedRoute }] });
1962
+
1963
+ /*
1964
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
1965
+ *
1966
+ * Licensed under EUPL, Version 1.2 (the "License");
1967
+ * you may not use this file except in compliance with the License.
1968
+ * You may obtain a copy of the License at
1969
+ *
1970
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1971
+ *
1972
+ * Unless required by applicable law or agreed to in writing, software
1973
+ * distributed under the License is distributed on an "AS IS" basis,
1974
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1975
+ * See the License for the specific language governing permissions and
1976
+ * limitations under the License.
1977
+ */
1978
+ class SelectFormFlowComponent {
1979
+ constructor(formFlowService, stateService, processLinkService, buttonService, route) {
1980
+ this.formFlowService = formFlowService;
1981
+ this.stateService = stateService;
1982
+ this.processLinkService = processLinkService;
1983
+ this.buttonService = buttonService;
1984
+ this.route = route;
1985
+ this.subtitlesValue = [];
1986
+ this.saving$ = this.stateService.saving$;
1987
+ this.formFlowDefinitions$ = getCaseManagementRouteParams(this.route).pipe(switchMap$1((params) => this.formFlowService.getFormFlowDefinitions(params?.caseDefinitionKey ?? '', params?.caseDefinitionVersionTag ?? '')), map$1((formFlowDefinitions) => formFlowDefinitions.content));
1988
+ this.formFlowDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formFlowDefinitions$]).pipe(map$1(([selectedProcessLink, formFlowDefinitions]) => formFlowDefinitions.map(definition => ({
1989
+ content: definition.key,
1990
+ id: definition.key,
1991
+ selected: selectedProcessLink
1992
+ ? selectedProcessLink.formFlowDefinitionKey === definition.key
1993
+ : false,
1994
+ }))), tap(formFlowDefinitionListItems => {
1995
+ const selectedItem = formFlowDefinitionListItems.find(item => item.selected);
1996
+ if (selectedItem) {
1997
+ this.selectFormFlowDefinition(selectedItem);
1998
+ }
1999
+ }));
2000
+ this._subscriptions = new Subscription();
2001
+ this.isUserTask$ = new BehaviorSubject(false);
2002
+ this._DEFAULT_FORM_DISPLAY_TYPE = 'panel';
2003
+ this._DEFAULT_FORM_DISPLAY_SIZE = 'medium';
2004
+ }
2005
+ ngOnInit() {
2006
+ this.openBackButtonSubscription();
2007
+ this.openSaveButtonSubscription();
2008
+ this._subscriptions.add(combineLatest([
2009
+ this.stateService.selectedProcessLink$,
2010
+ this.stateService.modalParams$,
2011
+ ]).subscribe(([selectedProcessLink, modalParams]) => {
2012
+ if (selectedProcessLink) {
2013
+ this.formDisplayValue = selectedProcessLink.formDisplayType;
2014
+ this.formSizeValue = selectedProcessLink.formSize;
2015
+ }
2016
+ this.isUserTask$.next(modalParams?.element?.type === 'bpmn:UserTask');
2017
+ }));
2018
+ }
2019
+ ngOnDestroy() {
2020
+ this._subscriptions.unsubscribe();
2021
+ }
2022
+ selectedFormDisplayValue(formDisplay) {
2023
+ this.formDisplayValue = formDisplay;
2024
+ }
2025
+ selectedFormSizeValue(formSize) {
2026
+ this.formSizeValue = formSize;
2027
+ }
2028
+ selectFormFlowDefinition(formFlowDefinition) {
2029
+ if (!formFlowDefinition)
2030
+ return;
2031
+ this.selectedFormFlowDefinitionId = formFlowDefinition.id;
2032
+ if (this.selectedFormFlowDefinitionId)
2033
+ this.buttonService.enableSaveButton();
2034
+ else
2035
+ this.buttonService.disableSaveButton();
2036
+ }
2037
+ selectedSubtitlesValue(subtitles) {
2038
+ this.subtitlesValue = subtitles;
2039
+ }
2040
+ openBackButtonSubscription() {
2041
+ this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
2042
+ this.stateService.setInitial();
2043
+ }));
2044
+ }
2045
+ openSaveButtonSubscription() {
2046
+ this._subscriptions.add(this.buttonService.saveButtonClick$.subscribe(() => {
2047
+ this.stateService.startSaving();
2048
+ this.saveFormFlowLink();
2049
+ }));
2050
+ }
2051
+ saveFormFlowLink() {
2052
+ this.stateService.selectedProcessLink$.pipe(take(1)).subscribe(selectedProcessLink => {
2053
+ if (selectedProcessLink)
2054
+ this.updateProcessLink();
2055
+ else
2056
+ this.saveNewProcessLink();
2057
+ });
2058
+ }
2059
+ updateProcessLink() {
2060
+ combineLatest([this.stateService.selectedProcessLink$, this.isUserTask$])
2061
+ .pipe(take(1))
2062
+ .subscribe(([selectedProcessLink, isUserTask]) => {
2063
+ const updateProcessLinkRequest = {
2064
+ id: selectedProcessLink.id,
2065
+ formFlowDefinitionId: this.selectedFormFlowDefinitionId,
2066
+ activityId: selectedProcessLink.activityId,
2067
+ ...(isUserTask && {
2068
+ formDisplayType: this.formDisplayValue || this._DEFAULT_FORM_DISPLAY_TYPE,
2069
+ }),
2070
+ ...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_SIZE }),
2071
+ ...(isUserTask && { subtitles: this.subtitlesValue }),
2072
+ };
2073
+ if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2074
+ this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
2075
+ return;
2076
+ }
2077
+ this.processLinkService.updateProcessLink(updateProcessLinkRequest).subscribe({
2078
+ next: () => {
2079
+ this.stateService.closeModal();
2080
+ },
2081
+ error: () => {
2082
+ this.stateService.stopSaving();
2083
+ },
2084
+ });
2085
+ });
2086
+ }
2087
+ saveNewProcessLink() {
2088
+ combineLatest([
2089
+ this.stateService.modalParams$,
2090
+ this.stateService.selectedProcessLinkTypeId$,
2091
+ this.isUserTask$,
2092
+ ])
2093
+ .pipe(take(1))
2094
+ .subscribe(([modalParams, processLinkTypeId, isUserTask]) => {
2095
+ const createRequest = {
2096
+ formFlowDefinitionKey: this.selectedFormFlowDefinitionId,
2097
+ activityType: modalParams.element.activityListenerType,
2098
+ processDefinitionId: modalParams.processDefinitionId,
2099
+ processLinkType: processLinkTypeId,
2100
+ activityId: modalParams.element.id,
2101
+ ...(isUserTask && {
2102
+ formDisplayType: this.formDisplayValue || this._DEFAULT_FORM_DISPLAY_TYPE,
2103
+ }),
2104
+ ...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_SIZE }),
2105
+ ...(isUserTask && { subtitles: this.subtitlesValue }),
2106
+ };
2107
+ if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2108
+ this.stateService.sendProcessLinkCreateEvent(createRequest);
2109
+ return;
2110
+ }
2111
+ this.processLinkService.saveProcessLink(createRequest).subscribe({
2112
+ next: () => {
2113
+ this.stateService.closeModal();
2114
+ },
2115
+ error: () => {
2116
+ this.stateService.stopSaving();
2117
+ },
2118
+ });
2119
+ });
2120
+ }
2121
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectFormFlowComponent, deps: [{ token: i1$5.FormFlowService }, { token: ProcessLinkStateService }, { token: ProcessLinkService }, { token: ProcessLinkButtonService }, { token: i3$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
2122
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectFormFlowComponent, isStandalone: false, selector: "valtimo-select-form-flow", 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<ng-container\n *ngIf=\"{\n formFlowDefinitions: formFlowDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormFlowDescription' | translate }}\n </p>\n\n <div class=\"select-form-flow\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formFlowDefinitions || obs.saving\"\n [items]=\"obs.formFlowDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormFlowDefinition($event)\"\n [label]=\"'processLinkSteps.selectFormFlow' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormFlowDefinitionId\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form-flow{display:flex;flex-direction:column;width:100%;margin-top:24px}\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: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: FormDisplayConfigurationComponent, selector: "valtimo-form-display-configuration", inputs: ["selectedFormDefinition"], outputs: ["formDisplayValue", "formSizeValue", "subtitlesValue"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
2123
+ }
2124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectFormFlowComponent, decorators: [{
2125
+ type: Component,
2126
+ args: [{ standalone: false, selector: 'valtimo-select-form-flow', 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<ng-container\n *ngIf=\"{\n formFlowDefinitions: formFlowDefinitionListItems$ | async,\n saving: saving$ | async,\n } as obs\"\n>\n <p class=\"step-description\">\n {{ 'processLinkConfiguration.chooseFormFlowDescription' | translate }}\n </p>\n\n <div class=\"select-form-flow\">\n <cds-combo-box\n [appendInline]=\"true\"\n [disabled]=\"!obs.formFlowDefinitions || obs.saving\"\n [items]=\"obs.formFlowDefinitions || []\"\n [placeholder]=\"'interface.typeToSearch' | translate\"\n (selected)=\"selectFormFlowDefinition($event)\"\n [label]=\"'processLinkSteps.selectFormFlow' | translate\"\n ><cds-dropdown-list></cds-dropdown-list\n ></cds-combo-box>\n\n <br />\n\n <valtimo-form-display-configuration\n [selectedFormDefinition]=\"selectedFormFlowDefinitionId\"\n (formDisplayValue)=\"selectedFormDisplayValue($event)\"\n (formSizeValue)=\"selectedFormSizeValue($event)\"\n (subtitlesValue)=\"selectedSubtitlesValue($event)\"\n ></valtimo-form-display-configuration>\n </div>\n</ng-container>\n", styles: [".label-with-tooltip{display:flex;align-items:center}.select-form-flow{display:flex;flex-direction:column;width:100%;margin-top:24px}\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"] }]
2127
+ }], ctorParameters: () => [{ type: i1$5.FormFlowService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$1.ActivatedRoute }] });
2128
+
2129
+ /*
2130
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2131
+ *
2132
+ * Licensed under EUPL, Version 1.2 (the "License");
2133
+ * you may not use this file except in compliance with the License.
2134
+ * You may obtain a copy of the License at
2135
+ *
2136
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2137
+ *
2138
+ * Unless required by applicable law or agreed to in writing, software
2139
+ * distributed under the License is distributed on an "AS IS" basis,
2140
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2141
+ * See the License for the specific language governing permissions and
2142
+ * limitations under the License.
2143
+ */
2144
+ class SelectUIComponentComponent {
2145
+ constructor(stateService, buttonService, processLinkService, formCustomComponentConfig) {
2146
+ this.stateService = stateService;
2147
+ this.buttonService = buttonService;
2148
+ this.processLinkService = processLinkService;
2149
+ this.formCustomComponentConfig = formCustomComponentConfig;
2150
+ this._formCustomComponentConfig$ = new BehaviorSubject({});
2151
+ this.formCustomComponentListItems$ = combineLatest([
2152
+ this.stateService.selectedProcessLink$,
2153
+ this._formCustomComponentConfig$,
2154
+ ]).pipe(map$1(([selectedProcessLink, formCustomComponentConfigs]) => Object.keys(formCustomComponentConfigs).map(key => ({
2155
+ content: key,
2156
+ selected: selectedProcessLink ? selectedProcessLink?.componentKey === key : false,
2157
+ }))), tap(formCustomComponentListItems => {
2158
+ const selectedItem = formCustomComponentListItems.find(item => item.selected);
2159
+ if (selectedItem) {
2160
+ this.selectCustomComponent(selectedItem);
2161
+ }
2162
+ }));
2163
+ this._subscriptions = new Subscription();
2164
+ this._formCustomComponentConfig$.next(this.formCustomComponentConfig);
2165
+ }
2166
+ ngOnInit() {
2167
+ this.openBackButtonSubscription();
2168
+ this.openSaveButtonSubscription();
2169
+ }
2170
+ ngOnDestroy() {
2171
+ this._subscriptions.unsubscribe();
2172
+ }
2173
+ selectCustomComponent(selectedCustomComponent) {
2174
+ this._selectedCustomComponent = selectedCustomComponent;
2175
+ this._selectedCustomComponent?.content
2176
+ ? this.buttonService.enableSaveButton()
2177
+ : this.buttonService.disableSaveButton();
2178
+ }
2179
+ openBackButtonSubscription() {
2180
+ this._subscriptions.add(this.buttonService.backButtonClick$.subscribe(() => {
2181
+ this.stateService.setInitial();
2182
+ }));
2183
+ }
2184
+ openSaveButtonSubscription() {
2185
+ this._subscriptions.add(this.buttonService.saveButtonClick$.subscribe(() => {
2186
+ this.stateService.startSaving();
2187
+ this.saveProcessLink();
2188
+ }));
2189
+ }
2190
+ saveProcessLink() {
2191
+ this.stateService.selectedProcessLink$.pipe(take$1(1)).subscribe(selectedProcessLink => {
2192
+ selectedProcessLink ? this.updateProcessLink() : this.saveNewProcessLink();
2193
+ });
2194
+ }
2195
+ updateProcessLink() {
2196
+ this.stateService.selectedProcessLink$.pipe(take$1(1)).subscribe(selectedProcessLink => {
2197
+ const updateRequest = {
2198
+ id: selectedProcessLink.id,
2199
+ componentKey: this._selectedCustomComponent.content,
2200
+ activityId: selectedProcessLink.activityId,
2201
+ };
2202
+ if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2203
+ this.stateService.sendProcessLinkUpdateEvent(updateRequest);
2204
+ return;
2205
+ }
2206
+ this.processLinkService.updateProcessLink(updateRequest).subscribe({
2207
+ next: () => this.stateService.closeModal(),
2208
+ error: () => this.stateService.stopSaving(),
2209
+ });
2210
+ });
2211
+ }
2212
+ saveNewProcessLink() {
2213
+ combineLatest([this.stateService.modalParams$, this.stateService.selectedProcessLinkTypeId$])
2214
+ .pipe(take$1(1), switchMap(([modalParams, processLinkTypeId]) => {
2215
+ const createRequest = {
2216
+ componentKey: this._selectedCustomComponent.content,
2217
+ activityType: modalParams.element.activityListenerType || '',
2218
+ processDefinitionId: modalParams.processDefinitionId,
2219
+ processLinkType: processLinkTypeId,
2220
+ activityId: modalParams.element.id,
2221
+ };
2222
+ if (this.stateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2223
+ this.stateService.sendProcessLinkCreateEvent(createRequest);
2224
+ return [];
2225
+ }
2226
+ return this.processLinkService.saveProcessLink(createRequest);
2227
+ }))
2228
+ .subscribe({
2229
+ next: () => this.stateService.closeModal(),
2230
+ error: () => this.stateService.stopSaving(),
2231
+ });
2232
+ }
2233
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectUIComponentComponent, deps: [{ token: ProcessLinkStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkService }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
2234
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: SelectUIComponentComponent, isStandalone: false, selector: "valtimo-select-ui-component", 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<cds-combo-box\n [dropUp]=\"false\"\n formControlName=\"contentKey\"\n [items]=\"formCustomComponentListItems$ | async\"\n itemValueKey=\"contentKey\"\n [label]=\"'processLinkSteps.uiComponent' | translate\"\n (selected)=\"selectCustomComponent($event)\"\n>\n <cds-dropdown-list></cds-dropdown-list>\n</cds-combo-box>\n", styles: [".custom-widget{padding:24px}.custom-widget__header{display:flex;align-items:center;justify-content:space-between}.custom-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\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: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2235
+ }
2236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: SelectUIComponentComponent, decorators: [{
2237
+ type: Component,
2238
+ args: [{ standalone: false, selector: 'valtimo-select-ui-component', changeDetection: ChangeDetectionStrategy.OnPush, 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<cds-combo-box\n [dropUp]=\"false\"\n formControlName=\"contentKey\"\n [items]=\"formCustomComponentListItems$ | async\"\n itemValueKey=\"contentKey\"\n [label]=\"'processLinkSteps.uiComponent' | translate\"\n (selected)=\"selectCustomComponent($event)\"\n>\n <cds-dropdown-list></cds-dropdown-list>\n</cds-combo-box>\n", styles: [".custom-widget{padding:24px}.custom-widget__header{display:flex;align-items:center;justify-content:space-between}.custom-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\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"] }]
2239
+ }], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkService }, { type: undefined, decorators: [{
2240
+ type: Optional
2241
+ }, {
2242
+ type: Inject,
2243
+ args: [FORM_CUSTOM_COMPONENT_TOKEN]
2244
+ }] }] });
2245
+
2246
+ /*
2247
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2248
+ *
2249
+ * Licensed under EUPL, Version 1.2 (the "License");
2250
+ * you may not use this file except in compliance with the License.
2251
+ * You may obtain a copy of the License at
2252
+ *
2253
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2254
+ *
2255
+ * Unless required by applicable law or agreed to in writing, software
2256
+ * distributed under the License is distributed on an "AS IS" basis,
2257
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2258
+ * See the License for the specific language governing permissions and
2259
+ * limitations under the License.
2260
+ */
2261
+ class ProcessLinkModalComponent {
2262
+ constructor(stateService, stepService, buttonService, pluginStateService, processLinkService, processLinkStateService, configService) {
2263
+ this.stateService = stateService;
2264
+ this.stepService = stepService;
2265
+ this.buttonService = buttonService;
2266
+ this.pluginStateService = pluginStateService;
2267
+ this.processLinkService = processLinkService;
2268
+ this.processLinkStateService = processLinkStateService;
2269
+ this.configService = configService;
2270
+ this.showModal$ = this.stateService.showModal$;
2271
+ this.processStepName$ = this.stateService.elementName$;
2272
+ this.steps$ = this.stepService.steps$;
2273
+ this.currentStepIndex$ = this.stepService.currentStepIndex$;
2274
+ this.currentStepId$ = this.stepService.currentStepId$;
2275
+ this.showSaveButton$ = this.buttonService.showSaveButton$;
2276
+ this.enableSaveButton$ = this.buttonService.enableSaveButton$;
2277
+ this.showBackButton$ = this.buttonService.showBackButton$;
2278
+ this.showNextButton$ = this.buttonService.showNextButton$;
2279
+ this.enableNextButton$ = this.buttonService.enableNextButton$;
2280
+ this.hideProgressIndicator$ = this.stateService.hideProgressIndicator$;
2281
+ this.saving$ = this.stateService.saving$;
2282
+ this.typeOfSelectedProcessLink$ = this.stateService.typeOfSelectedProcessLink$;
2283
+ this.viewModelEnabled$ = this.stateService.viewModelEnabled$;
2284
+ this.selectedPluginConfiguration$ = this.pluginStateService.selectedPluginConfiguration$;
2285
+ this.showViewModelToggle = this.configService.config.featureToggles.enableFormViewModel;
2286
+ }
2287
+ closeModal() {
2288
+ this.stateService.closeModal();
2289
+ }
2290
+ backButtonClick() {
2291
+ this.buttonService.clickBackButton();
2292
+ }
2293
+ saveButtonClick() {
2294
+ this.buttonService.clickSaveButton();
2295
+ }
2296
+ nextButtonClick() {
2297
+ this.buttonService.clickNextButton();
2298
+ }
2299
+ unlinkButtonClick() {
2300
+ this.stateService.selectedProcessLink$.pipe(take(1)).subscribe(selectedProcessLink => {
2301
+ if (this.processLinkStateService.processLinkEditMode === ProcessLinkEditMode.EMIT_EVENTS) {
2302
+ this.processLinkStateService.sendProcessLinkDeleteEvent({
2303
+ activityId: selectedProcessLink.activityId,
2304
+ });
2305
+ return;
2306
+ }
2307
+ this.stateService.startSaving();
2308
+ this.processLinkService.deleteProcessLink(selectedProcessLink.id).subscribe(() => {
2309
+ this.stateService.closeModal();
2310
+ }, () => {
2311
+ this.stateService.stopSaving();
2312
+ });
2313
+ });
2314
+ }
2315
+ toggleCheckedChange(value) {
2316
+ this.processLinkStateService.setViewModelEnabled(value);
2317
+ }
2318
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModalComponent, deps: [{ token: ProcessLinkStateService }, { token: ProcessLinkStepService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: ProcessLinkService }, { token: ProcessLinkStateService }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
2319
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: ProcessLinkModalComponent, isStandalone: false, selector: "valtimo-process-link-modal", 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 class=\"process-link-modal-container\"\n *ngIf=\"{\n showModal: showModal$ | async,\n processStepName: processStepName$ | async,\n steps: steps$ | async,\n currentStepIndex: currentStepIndex$ | async,\n currentStepId: currentStepId$ | async,\n showSaveButton: showSaveButton$ | async,\n enableSaveButton: enableSaveButton$ | async,\n showBackButton: showBackButton$ | async,\n showNextButton: showNextButton$ | async,\n enableNextButton: enableNextButton$ | async,\n saving: saving$ | async,\n hideProgressIndicator: hideProgressIndicator$ | async,\n typeOfSelectedProgressLink: typeOfSelectedProcessLink$ | async,\n } as obs\"\n>\n <cds-modal valtimoCdsModal [open]=\"obs.showModal\" size=\"lg\" (close)=\"closeModal()\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <h2 cdsModalHeaderLabel>{{ 'processLinkConfiguration.configureStep' | translate }}</h2>\n <h3 cdsModalHeaderHeading>\n {{\n 'processLinkConfiguration.modalTitle'\n | translate: {processStepName: obs.processStepName || '-'}\n }}\n </h3>\n <div class=\"process-link-progress\" *ngIf=\"!obs.typeOfSelectedProgressLink\">\n <ng-container *ngTemplateOutlet=\"progressIndicator; context: {obs: obs}\"></ng-container>\n </div>\n </cds-modal-header>\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"stepContent; context: {obs: obs}\"></ng-container>\n </section>\n <ng-template *ngTemplateOutlet=\"footer; context: {obs: obs}\"></ng-template>\n </cds-modal>\n</div>\n\n<ng-template #progressIndicator let-obs=\"obs\">\n <cds-progress-indicator\n *ngIf=\"obs.steps && !obs.hideProgressIndicator\"\n [steps]=\"obs.steps\"\n [current]=\"obs.currentStepIndex\"\n spacing=\"equal\"\n ></cds-progress-indicator>\n</ng-template>\n\n<ng-template #stepContent let-obs=\"obs\">\n <div class=\"cds-loading-container\" *ngIf=\"obs.saving\">\n <cds-loading></cds-loading>\n </div>\n <div [ngClass]=\"{hidden: obs.saving}\">\n <ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'chooseProcessLinkType'\">\n <valtimo-choose-process-link-type></valtimo-choose-process-link-type>\n </ng-container>\n <ng-container\n *ngIf=\"obs.currentStepId === 'selectForm' || obs.typeOfSelectedProgressLink === 'form'\"\n >\n <valtimo-select-form></valtimo-select-form>\n <br />\n <cds-toggle\n *ngIf=\"showViewModelToggle\"\n [label]=\"'processLinkConfiguration.toggleViewModel.title' | translate\"\n [onText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [offText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [checked]=\"viewModelEnabled$ | async\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </ng-container>\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'selectFormFlow' || obs.typeOfSelectedProgressLink === 'form-flow'\n \"\n >\n <valtimo-select-form-flow></valtimo-select-form-flow>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginConfiguration'\">\n <valtimo-select-plugin-configuration></valtimo-select-plugin-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginAction'\">\n <valtimo-select-plugin-action></valtimo-select-plugin-action>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'configurePluginAction' ||\n obs.typeOfSelectedProgressLink === 'plugin'\n \"\n >\n <valtimo-plugin-action-configuration\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n ></valtimo-plugin-action-configuration>\n </ng-container>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'uiComponent' || obs.typeOfSelectedProgressLink === 'ui-component'\n \"\n >\n <valtimo-select-ui-component></valtimo-select-ui-component>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #footer let-obs=\"obs\">\n <cds-modal-footer *ngIf=\"!obs.saving\">\n <div class=\"cancel-button\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'processLinkConfiguration.cancel' | translate }}\n </button>\n </div>\n <div class=\"navigation-buttons\">\n <button\n *ngIf=\"obs.showBackButton && !obs.saving\"\n cdsButton=\"secondary\"\n (click)=\"backButtonClick()\"\n >\n {{ 'processLinkConfiguration.back' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"obs.showNextButton && !obs.saving\"\n [disabled]=\"!obs.enableNextButton\"\n (click)=\"nextButtonClick()\"\n >\n {{ 'processLinkConfiguration.next' | translate }}\n </button>\n <button\n cdsButton=\"danger--primary\"\n *ngIf=\"obs.typeOfSelectedProgressLink\"\n (click)=\"unlinkButtonClick()\"\n >\n {{ 'processLinkConfiguration.unlink' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"(obs.showSaveButton && !obs.saving) || obs.typeOfSelectedProgressLink\"\n [disabled]=\"!obs.enableSaveButton\"\n (click)=\"saveButtonClick()\"\n >\n {{ 'processLinkConfiguration.complete' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</ng-template>\n", styles: ["::ng-deep .process-link-modal-container .cds--modal-container{max-width:960px;min-height:70%}::ng-deep .process-link-modal-container .cds--modal-footer{justify-content:space-between}.cds-loading-container{position:absolute;top:50px;padding-bottom:50px;left:0;width:100%;height:calc(100% - 50px);display:flex;justify-content:center;align-items:center;background:var(--cds-layer);z-index:99;box-sizing:border-box}.navigation-buttons{justify-content:flex-end}.navigation-buttons,.cancel-button{max-width:50%;display:flex;flex-direction:row;flex-grow:1}.navigation-buttons button,.cancel-button button{min-width:50%}.cancel-button{max-width:25%}.cancel-button button{min-width:100%}.process-link-progress{width:100%;margin-top:32px;margin-bottom:40px}.hidden{visibility:hidden}\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: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i4.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i4.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i4.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i4.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i4.ModalHeaderLabel, selector: "[cdsModalHeaderLabel], [ibmModalHeaderLabel]" }, { kind: "component", type: i4.ProgressIndicator, selector: "cds-progress-indicator, ibm-progress-indicator", inputs: ["current", "steps", "translations", "orientation", "skeleton", "spacing"], outputs: ["stepSelected"] }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i4.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i2$2.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i4.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "ariaLabel", "skeleton"] }, { kind: "directive", type: i4.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: SelectPluginConfigurationComponent, selector: "valtimo-select-plugin-configuration" }, { kind: "component", type: SelectPluginActionComponent, selector: "valtimo-select-plugin-action" }, { kind: "component", type: PluginActionConfigurationComponent, selector: "valtimo-plugin-action-configuration", inputs: ["selectedPluginConfiguration$"], outputs: ["valid", "configuration"] }, { kind: "component", type: ChooseProcessLinkTypeComponent, selector: "valtimo-choose-process-link-type" }, { kind: "component", type: SelectFormComponent, selector: "valtimo-select-form" }, { kind: "component", type: SelectFormFlowComponent, selector: "valtimo-select-form-flow" }, { kind: "component", type: SelectUIComponentComponent, selector: "valtimo-select-ui-component" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
2320
+ }
2321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModalComponent, decorators: [{
2322
+ type: Component,
2323
+ args: [{ standalone: false, selector: 'valtimo-process-link-modal', 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 class=\"process-link-modal-container\"\n *ngIf=\"{\n showModal: showModal$ | async,\n processStepName: processStepName$ | async,\n steps: steps$ | async,\n currentStepIndex: currentStepIndex$ | async,\n currentStepId: currentStepId$ | async,\n showSaveButton: showSaveButton$ | async,\n enableSaveButton: enableSaveButton$ | async,\n showBackButton: showBackButton$ | async,\n showNextButton: showNextButton$ | async,\n enableNextButton: enableNextButton$ | async,\n saving: saving$ | async,\n hideProgressIndicator: hideProgressIndicator$ | async,\n typeOfSelectedProgressLink: typeOfSelectedProcessLink$ | async,\n } as obs\"\n>\n <cds-modal valtimoCdsModal [open]=\"obs.showModal\" size=\"lg\" (close)=\"closeModal()\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <h2 cdsModalHeaderLabel>{{ 'processLinkConfiguration.configureStep' | translate }}</h2>\n <h3 cdsModalHeaderHeading>\n {{\n 'processLinkConfiguration.modalTitle'\n | translate: {processStepName: obs.processStepName || '-'}\n }}\n </h3>\n <div class=\"process-link-progress\" *ngIf=\"!obs.typeOfSelectedProgressLink\">\n <ng-container *ngTemplateOutlet=\"progressIndicator; context: {obs: obs}\"></ng-container>\n </div>\n </cds-modal-header>\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"stepContent; context: {obs: obs}\"></ng-container>\n </section>\n <ng-template *ngTemplateOutlet=\"footer; context: {obs: obs}\"></ng-template>\n </cds-modal>\n</div>\n\n<ng-template #progressIndicator let-obs=\"obs\">\n <cds-progress-indicator\n *ngIf=\"obs.steps && !obs.hideProgressIndicator\"\n [steps]=\"obs.steps\"\n [current]=\"obs.currentStepIndex\"\n spacing=\"equal\"\n ></cds-progress-indicator>\n</ng-template>\n\n<ng-template #stepContent let-obs=\"obs\">\n <div class=\"cds-loading-container\" *ngIf=\"obs.saving\">\n <cds-loading></cds-loading>\n </div>\n <div [ngClass]=\"{hidden: obs.saving}\">\n <ng-container>\n <ng-container *ngIf=\"obs.currentStepId === 'chooseProcessLinkType'\">\n <valtimo-choose-process-link-type></valtimo-choose-process-link-type>\n </ng-container>\n <ng-container\n *ngIf=\"obs.currentStepId === 'selectForm' || obs.typeOfSelectedProgressLink === 'form'\"\n >\n <valtimo-select-form></valtimo-select-form>\n <br />\n <cds-toggle\n *ngIf=\"showViewModelToggle\"\n [label]=\"'processLinkConfiguration.toggleViewModel.title' | translate\"\n [onText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [offText]=\"'processLinkConfiguration.toggleViewModel.checkboxDescription' | translate\"\n [checked]=\"viewModelEnabled$ | async\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </ng-container>\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'selectFormFlow' || obs.typeOfSelectedProgressLink === 'form-flow'\n \"\n >\n <valtimo-select-form-flow></valtimo-select-form-flow>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginConfiguration'\">\n <valtimo-select-plugin-configuration></valtimo-select-plugin-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'choosePluginAction'\">\n <valtimo-select-plugin-action></valtimo-select-plugin-action>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'configurePluginAction' ||\n obs.typeOfSelectedProgressLink === 'plugin'\n \"\n >\n <valtimo-plugin-action-configuration\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n ></valtimo-plugin-action-configuration>\n </ng-container>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'uiComponent' || obs.typeOfSelectedProgressLink === 'ui-component'\n \"\n >\n <valtimo-select-ui-component></valtimo-select-ui-component>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #footer let-obs=\"obs\">\n <cds-modal-footer *ngIf=\"!obs.saving\">\n <div class=\"cancel-button\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'processLinkConfiguration.cancel' | translate }}\n </button>\n </div>\n <div class=\"navigation-buttons\">\n <button\n *ngIf=\"obs.showBackButton && !obs.saving\"\n cdsButton=\"secondary\"\n (click)=\"backButtonClick()\"\n >\n {{ 'processLinkConfiguration.back' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"obs.showNextButton && !obs.saving\"\n [disabled]=\"!obs.enableNextButton\"\n (click)=\"nextButtonClick()\"\n >\n {{ 'processLinkConfiguration.next' | translate }}\n </button>\n <button\n cdsButton=\"danger--primary\"\n *ngIf=\"obs.typeOfSelectedProgressLink\"\n (click)=\"unlinkButtonClick()\"\n >\n {{ 'processLinkConfiguration.unlink' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n *ngIf=\"(obs.showSaveButton && !obs.saving) || obs.typeOfSelectedProgressLink\"\n [disabled]=\"!obs.enableSaveButton\"\n (click)=\"saveButtonClick()\"\n >\n {{ 'processLinkConfiguration.complete' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</ng-template>\n", styles: ["::ng-deep .process-link-modal-container .cds--modal-container{max-width:960px;min-height:70%}::ng-deep .process-link-modal-container .cds--modal-footer{justify-content:space-between}.cds-loading-container{position:absolute;top:50px;padding-bottom:50px;left:0;width:100%;height:calc(100% - 50px);display:flex;justify-content:center;align-items:center;background:var(--cds-layer);z-index:99;box-sizing:border-box}.navigation-buttons{justify-content:flex-end}.navigation-buttons,.cancel-button{max-width:50%;display:flex;flex-direction:row;flex-grow:1}.navigation-buttons button,.cancel-button button{min-width:50%}.cancel-button{max-width:25%}.cancel-button button{min-width:100%}.process-link-progress{width:100%;margin-top:32px;margin-bottom:40px}.hidden{visibility:hidden}\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"] }]
2324
+ }], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: ProcessLinkService }, { type: ProcessLinkStateService }, { type: i2.ConfigService }] });
2325
+
2326
+ /*
2327
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2328
+ *
2329
+ * Licensed under EUPL, Version 1.2 (the "License");
2330
+ * you may not use this file except in compliance with the License.
2331
+ * You may obtain a copy of the License at
2332
+ *
2333
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2334
+ *
2335
+ * Unless required by applicable law or agreed to in writing, software
2336
+ * distributed under the License is distributed on an "AS IS" basis,
2337
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2338
+ * See the License for the specific language governing permissions and
2339
+ * limitations under the License.
2340
+ */
2341
+ class ProcessLinkComponent {
2342
+ constructor(processLinkService, stateService, modalService) {
2343
+ this.processLinkService = processLinkService;
2344
+ this.stateService = stateService;
2345
+ this.modalService = modalService;
2346
+ }
2347
+ openModal(params) {
2348
+ const activityType = params?.element?.activityListenerType;
2349
+ this.modalService.setModalData(params);
2350
+ if (activityType) {
2351
+ this.processLinkService
2352
+ .getProcessLink({
2353
+ activityId: params.element.id,
2354
+ processDefinitionId: params.processDefinitionId,
2355
+ })
2356
+ .pipe(switchMap(processLinks => {
2357
+ if (processLinks.length > 0) {
2358
+ return of({ processLink: processLinks[0] });
2359
+ }
2360
+ return this.processLinkService.getProcessLinkCandidates(activityType);
2361
+ }), tap(res => {
2362
+ const result = res;
2363
+ const processLink = result.processLink;
2364
+ this.stateService.setModalParams(params);
2365
+ this.stateService.setElementName(params?.element?.name);
2366
+ if (processLink) {
2367
+ this.stateService.selectProcessLink(processLink);
2368
+ }
2369
+ else {
2370
+ this.stateService.setAvailableProcessLinkTypes(result);
2371
+ }
2372
+ if (result?.length > 0 || processLink) {
2373
+ this.stateService.showModal();
2374
+ }
2375
+ }))
2376
+ .subscribe();
2377
+ }
2378
+ }
2379
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkComponent, deps: [{ token: ProcessLinkService }, { token: ProcessLinkStateService }, { token: i2$2.ModalService }], target: i0.ɵɵFactoryTarget.Component }); }
2380
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: ProcessLinkComponent, isStandalone: false, selector: "valtimo-process-link", providers: [ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService], 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\">\n <div class=\"container-fluid\">\n <valtimo-form-link-process-diagram\n (bpmnElementModalOpen)=\"openModal($event)\"\n ></valtimo-form-link-process-diagram>\n </div>\n</div>\n\n<valtimo-process-link-modal></valtimo-process-link-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: "component", type: FormLinkProcessDiagramComponent, selector: "valtimo-form-link-process-diagram", outputs: ["bpmnElementModalOpen", "bpmnElementModalClose"] }, { kind: "component", type: ProcessLinkModalComponent, selector: "valtimo-process-link-modal" }] }); }
2381
+ }
2382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkComponent, decorators: [{
2383
+ type: Component,
2384
+ args: [{ standalone: false, selector: 'valtimo-process-link', providers: [ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService], 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\">\n <div class=\"container-fluid\">\n <valtimo-form-link-process-diagram\n (bpmnElementModalOpen)=\"openModal($event)\"\n ></valtimo-form-link-process-diagram>\n </div>\n</div>\n\n<valtimo-process-link-modal></valtimo-process-link-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"] }]
2385
+ }], ctorParameters: () => [{ type: ProcessLinkService }, { type: ProcessLinkStateService }, { type: i2$2.ModalService }] });
2386
+
2387
+ /*
2388
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2389
+ *
2390
+ * Licensed under EUPL, Version 1.2 (the "License");
2391
+ * you may not use this file except in compliance with the License.
2392
+ * You may obtain a copy of the License at
2393
+ *
2394
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2395
+ *
2396
+ * Unless required by applicable law or agreed to in writing, software
2397
+ * distributed under the License is distributed on an "AS IS" basis,
2398
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2399
+ * See the License for the specific language governing permissions and
2400
+ * limitations under the License.
2401
+ */
2402
+ const routes = [
2403
+ {
2404
+ path: 'process-links',
2405
+ component: ProcessLinkComponent,
2406
+ canActivate: [AuthGuardService],
2407
+ data: { title: 'Process links', roles: [ROLE_ADMIN] },
2408
+ },
2409
+ ];
2410
+ class ProcessLinkRoutingModule {
2411
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2412
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkRoutingModule, imports: [i3$1.RouterModule], exports: [RouterModule] }); }
2413
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
2414
+ }
2415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkRoutingModule, decorators: [{
2416
+ type: NgModule,
2417
+ args: [{
2418
+ imports: [RouterModule.forChild(routes)],
2419
+ exports: [RouterModule],
2420
+ declarations: [],
2421
+ }]
2422
+ }] });
2423
+
2424
+ /*
2425
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2426
+ *
2427
+ * Licensed under EUPL, Version 1.2 (the "License");
2428
+ * you may not use this file except in compliance with the License.
2429
+ * You may obtain a copy of the License at
2430
+ *
2431
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2432
+ *
2433
+ * Unless required by applicable law or agreed to in writing, software
2434
+ * distributed under the License is distributed on an "AS IS" basis,
2435
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2436
+ * See the License for the specific language governing permissions and
2437
+ * limitations under the License.
2438
+ */
2439
+
2440
+ /*
2441
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2442
+ *
2443
+ * Licensed under EUPL, Version 1.2 (the "License");
2444
+ * you may not use this file except in compliance with the License.
2445
+ * You may obtain a copy of the License at
2446
+ *
2447
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2448
+ *
2449
+ * Unless required by applicable law or agreed to in writing, software
2450
+ * distributed under the License is distributed on an "AS IS" basis,
2451
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2452
+ * See the License for the specific language governing permissions and
2453
+ * limitations under the License.
2454
+ */
2455
+
2456
+ /*
2457
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2458
+ *
2459
+ * Licensed under EUPL, Version 1.2 (the "License");
2460
+ * you may not use this file except in compliance with the License.
2461
+ * You may obtain a copy of the License at
2462
+ *
2463
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2464
+ *
2465
+ * Unless required by applicable law or agreed to in writing, software
2466
+ * distributed under the License is distributed on an "AS IS" basis,
2467
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2468
+ * See the License for the specific language governing permissions and
2469
+ * limitations under the License.
2470
+ */
2471
+ class FormFlowConfigurationContainerComponent {
2472
+ set disabled(disabledValue) {
2473
+ this._disabled$.next(disabledValue);
2474
+ }
2475
+ set componentId(value) {
2476
+ this._componentId$.next(value);
2477
+ }
2478
+ set formFlowInstanceId(value) {
2479
+ this._formFlowInstanceId$.next(value);
2480
+ }
2481
+ constructor(formFlowComponentService) {
2482
+ this.formFlowComponentService = formFlowComponentService;
2483
+ this.changeEvent = new EventEmitter();
2484
+ this.submitEvent = new EventEmitter();
2485
+ this._subscriptions = new Subscription();
2486
+ this._componentRef$ = new BehaviorSubject(undefined);
2487
+ this._disabled$ = new BehaviorSubject(false);
2488
+ this._componentId$ = new BehaviorSubject('');
2489
+ this._formFlowInstanceId$ = new BehaviorSubject('');
2490
+ }
2491
+ ngOnInit() {
2492
+ this.openConfigurationComponentSubscription();
2493
+ this.openComponentInstanceSubscription();
2494
+ this.openDisabledSubscription();
2495
+ }
2496
+ ngOnDestroy() {
2497
+ this._subscriptions.unsubscribe();
2498
+ }
2499
+ openConfigurationComponentSubscription() {
2500
+ this._subscriptions.add(combineLatest([this.formFlowComponentService.supportedComponents$, this._componentId$])
2501
+ .pipe(tap$1(([supportedComponents, componentId]) => {
2502
+ const configurationComponent = supportedComponents.find(component => component.id === componentId);
2503
+ this._dynamicContainer.clear();
2504
+ if (configurationComponent) {
2505
+ const componentRef = this._dynamicContainer.createComponent(configurationComponent.component);
2506
+ this._componentRef$.next(componentRef);
2507
+ }
2508
+ }))
2509
+ .subscribe());
2510
+ }
2511
+ openComponentInstanceSubscription() {
2512
+ this._subscriptions.add(combineLatest([this._componentRef$, this._formFlowInstanceId$]).subscribe(([ref, formFlowInstanceId]) => {
2513
+ const instance = ref?.instance;
2514
+ this._submitSubscription?.unsubscribe();
2515
+ this._changeSubscription?.unsubscribe();
2516
+ if (instance) {
2517
+ if (formFlowInstanceId) {
2518
+ instance.formFlowInstanceId = formFlowInstanceId;
2519
+ }
2520
+ this._changeSubscription = instance.changeEvent.subscribe(change => {
2521
+ this.changeEvent.emit(change);
2522
+ });
2523
+ this._submitSubscription = instance.submitEvent.subscribe(submit => {
2524
+ this.submitEvent.emit(submit);
2525
+ });
2526
+ }
2527
+ }));
2528
+ }
2529
+ openDisabledSubscription() {
2530
+ this._subscriptions.add(combineLatest([this._componentRef$, this._disabled$]).subscribe(([ref, disabled]) => {
2531
+ const instance = ref?.instance;
2532
+ if (instance) {
2533
+ instance.disabled = disabled;
2534
+ }
2535
+ }));
2536
+ }
2537
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowConfigurationContainerComponent, deps: [{ token: FormFlowComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
2538
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormFlowConfigurationContainerComponent, isStandalone: false, selector: "valtimo-form-flow-configuration-container", inputs: { disabled: "disabled", componentId: "componentId", formFlowInstanceId: "formFlowInstanceId" }, outputs: { changeEvent: "changeEvent", submitEvent: "submitEvent" }, viewQueries: [{ propertyName: "_dynamicContainer", first: true, predicate: ["formFlowConfigurationComponent"], descendants: true, read: ViewContainerRef, static: 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<ng-template #formFlowConfigurationComponent></ng-template>\n" }); }
2539
+ }
2540
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowConfigurationContainerComponent, decorators: [{
2541
+ type: Component,
2542
+ args: [{ standalone: false, selector: 'valtimo-form-flow-configuration-container', 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<ng-template #formFlowConfigurationComponent></ng-template>\n" }]
2543
+ }], ctorParameters: () => [{ type: FormFlowComponentService }], propDecorators: { _dynamicContainer: [{
2544
+ type: ViewChild,
2545
+ args: ['formFlowConfigurationComponent', { static: true, read: ViewContainerRef }]
2546
+ }], disabled: [{
2547
+ type: Input
2548
+ }], componentId: [{
2549
+ type: Input
2550
+ }], formFlowInstanceId: [{
2551
+ type: Input
2552
+ }], changeEvent: [{
2553
+ type: Output
2554
+ }], submitEvent: [{
2555
+ type: Output
2556
+ }] } });
2557
+
2558
+ /*
2559
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2560
+ *
2561
+ * Licensed under EUPL, Version 1.2 (the "License");
2562
+ * you may not use this file except in compliance with the License.
2563
+ * You may obtain a copy of the License at
2564
+ *
2565
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2566
+ *
2567
+ * Unless required by applicable law or agreed to in writing, software
2568
+ * distributed under the License is distributed on an "AS IS" basis,
2569
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2570
+ * See the License for the specific language governing permissions and
2571
+ * limitations under the License.
2572
+ */
2573
+ class FormFlowComponent {
2574
+ set formFlowInstanceId(value) {
2575
+ this.formFlowInstanceId$.next(value);
2576
+ if (value)
2577
+ this.getBreadcrumbs();
2578
+ }
2579
+ constructor(formFlowService, modalService, translateService, configService) {
2580
+ this.formFlowService = formFlowService;
2581
+ this.modalService = modalService;
2582
+ this.translateService = translateService;
2583
+ this.configService = configService;
2584
+ this.formIoFormData = new BehaviorSubject(null);
2585
+ this.formFlowComplete = new EventEmitter();
2586
+ this.formFlowChange = new EventEmitter();
2587
+ this.breadcrumbs$ = new BehaviorSubject([]);
2588
+ this.disabled$ = new BehaviorSubject(false);
2589
+ this.formFlowStepType$ = new BehaviorSubject(null);
2590
+ this.FormFlowCustomComponentId$ = new BehaviorSubject('');
2591
+ this.currentStepIndex$ = new BehaviorSubject(0);
2592
+ this.enableFormFlowBreadcrumbs$ = this.configService.getFeatureToggleObservable('enableFormFlowBreadcrumbs');
2593
+ this.formFlowInstanceId$ = new BehaviorSubject('');
2594
+ this.formFlowStepInstanceId = null;
2595
+ this.formioOptions = new FormioOptionsImpl();
2596
+ this.formioOptions.disableAlerts = true;
2597
+ }
2598
+ ngOnInit() {
2599
+ this.getFormFlowStep();
2600
+ }
2601
+ ngOnDestroy() {
2602
+ this._breadcrumbsSubscription?.unsubscribe();
2603
+ }
2604
+ onChange(event) {
2605
+ if (!event?.data)
2606
+ return;
2607
+ this.formIoFormData.next(event.data);
2608
+ this.formFlowChange.emit();
2609
+ }
2610
+ onSubmit(submission) {
2611
+ this.disable();
2612
+ if (submission.data) {
2613
+ this.formIoFormData.next(submission.data);
2614
+ }
2615
+ if (submission.data.submit &&
2616
+ this.formFlowInstanceId$.getValue() &&
2617
+ this.formFlowStepInstanceId) {
2618
+ this.formFlowService
2619
+ .submitStep(this.formFlowInstanceId$.getValue(), this.formFlowStepInstanceId, this.formIoFormData.getValue())
2620
+ .subscribe({
2621
+ next: (result) => {
2622
+ this.handleFormFlowStep(result);
2623
+ },
2624
+ error: errors => {
2625
+ this.form?.showErrors(errors);
2626
+ this.enable();
2627
+ },
2628
+ });
2629
+ }
2630
+ else if (submission.data['back']) {
2631
+ this.back(submission.data);
2632
+ }
2633
+ }
2634
+ onEvent(submission) {
2635
+ if (submission.data['back'] || submission.type == 'back') {
2636
+ this.back(submission.data);
2637
+ }
2638
+ }
2639
+ saveData() {
2640
+ const formIoFormDataValue = this.formIoFormData.getValue();
2641
+ if (formIoFormDataValue && this.formFlowInstanceId$.getValue()) {
2642
+ this.formFlowService.save(this.formFlowInstanceId$.getValue(), formIoFormDataValue).subscribe(() => null, errors => this.form.showErrors(errors));
2643
+ }
2644
+ }
2645
+ onStepSelected(event) {
2646
+ const submissionData = this.formIoFormData.getValue().data;
2647
+ this.disable();
2648
+ this.currentStepIndex$.next(event.index);
2649
+ if (!this.formFlowInstanceId$.getValue() || !this.formFlowStepInstanceId)
2650
+ return;
2651
+ this.formFlowService
2652
+ .navigateToStep(this.formFlowInstanceId$.getValue(), this.formFlowStepInstanceId, event.step.stepInstanceId, submissionData)
2653
+ .subscribe({
2654
+ next: (result) => this.handleFormFlowStep(result),
2655
+ error: errors => {
2656
+ this.form?.showErrors(errors);
2657
+ this.enable();
2658
+ },
2659
+ });
2660
+ }
2661
+ getBreadcrumbs() {
2662
+ if (!this.formFlowInstanceId$.getValue() ||
2663
+ !this.configService.getFeatureToggle('enableFormFlowBreadcrumbs')) {
2664
+ return;
2665
+ }
2666
+ this._breadcrumbsSubscription?.unsubscribe();
2667
+ this._breadcrumbsSubscription = combineLatest([
2668
+ this.formFlowService.getBreadcrumbs(this.formFlowInstanceId$.getValue()),
2669
+ this.translateService.stream('key'),
2670
+ ])
2671
+ .pipe(map(([breadcrumbs]) => breadcrumbs))
2672
+ .subscribe(breadcrumbs => {
2673
+ const classElement = document.getElementsByClassName('cds--progress-step--current');
2674
+ this.currentStepIndex$.next(breadcrumbs.currentStepIndex);
2675
+ this.breadcrumbs$.next(breadcrumbs.breadcrumbs.map(breadcrumb => ({
2676
+ label: breadcrumb.title ??
2677
+ this.translateService.instant(`formFlow.step.${breadcrumb.key}.title`) ??
2678
+ breadcrumb.key,
2679
+ disabled: breadcrumb.stepInstanceId === null,
2680
+ complete: breadcrumb.completed,
2681
+ stepInstanceId: breadcrumb.stepInstanceId,
2682
+ })));
2683
+ if (classElement.length > 0) {
2684
+ classElement[0].scrollIntoView({ behavior: 'smooth', inline: 'center' });
2685
+ }
2686
+ });
2687
+ }
2688
+ getFormFlowStep() {
2689
+ if (!this.formFlowInstanceId$.getValue())
2690
+ return;
2691
+ this.formFlowService
2692
+ .getFormFlowStep(this.formFlowInstanceId$.getValue())
2693
+ .subscribe((result) => {
2694
+ this.handleFormFlowStep(result);
2695
+ });
2696
+ }
2697
+ back(submissionData) {
2698
+ if (!this.formFlowInstanceId$.getValue())
2699
+ return;
2700
+ this.formFlowService.back(this.formFlowInstanceId$.getValue(), submissionData).subscribe({
2701
+ next: (result) => this.handleFormFlowStep(result),
2702
+ error: errors => {
2703
+ this.form?.showErrors(errors);
2704
+ this.enable();
2705
+ },
2706
+ });
2707
+ }
2708
+ handleFormFlowStep(formFlowInstance) {
2709
+ if (formFlowInstance.step === null) {
2710
+ this.formFlowStepType$.next(null);
2711
+ this.FormFlowCustomComponentId$.next('');
2712
+ this.formFlowInstanceId$.next(null);
2713
+ this.formFlowStepInstanceId = null;
2714
+ this.formFlowComplete.emit(null);
2715
+ }
2716
+ else {
2717
+ this.getBreadcrumbs();
2718
+ this.modalService.scrollToTop();
2719
+ this.formFlowStepType$.next(formFlowInstance.step?.type ?? null);
2720
+ this.FormFlowCustomComponentId$.next(formFlowInstance?.step?.typeProperties?.id || '');
2721
+ this.formFlowInstanceId$.next(formFlowInstance.id);
2722
+ this.formFlowStepInstanceId = formFlowInstance.step?.id ?? null;
2723
+ this.formDefinition = formFlowInstance.step?.typeProperties.definition;
2724
+ }
2725
+ this.enable();
2726
+ }
2727
+ disable() {
2728
+ this.disabled$.next(true);
2729
+ }
2730
+ enable() {
2731
+ this.disabled$.next(false);
2732
+ }
2733
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponent, deps: [{ token: FormFlowService }, { token: i2$2.ValtimoModalService }, { token: i2$1.TranslateService }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
2734
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormFlowComponent, isStandalone: false, selector: "valtimo-form-flow", inputs: { formIoFormData: "formIoFormData", formFlowInstanceId: "formFlowInstanceId" }, outputs: { formFlowComplete: "formFlowComplete", formFlowChange: "formFlowChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], 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<div\n *ngIf=\"{\n breadcrumbs: breadcrumbs$ | async,\n currentStepIndex: currentStepIndex$ | async,\n enableFormFlowBreadcrumbs: enableFormFlowBreadcrumbs$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n } as obs\"\n>\n <div *ngIf=\"formDefinition && (formFlowStepType$ | async) === 'form'\">\n <div *ngIf=\"obs.enableFormFlowBreadcrumbs\" class=\"form-flow__progress-bar-indicator\">\n <cds-progress-indicator\n [spacing]=\"'equal'\"\n [skeleton]=\"obs.breadcrumbs.length === 0\"\n [current]=\"obs.currentStepIndex\"\n [steps]=\"obs.breadcrumbs\"\n (stepSelected)=\"onStepSelected($event)\"\n >\n </cds-progress-indicator>\n </div>\n\n <valtimo-form-io\n #form\n [form]=\"formDefinition\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (event)=\"onEvent($event)\"\n [options]=\"formioOptions\"\n ></valtimo-form-io>\n </div>\n\n <div *ngIf=\"(formFlowStepType$ | async) === 'custom-component'\">\n <valtimo-form-flow-configuration-container\n [componentId]=\"FormFlowCustomComponentId$ | async\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n [disabled]=\"disabled$ | async\"\n (submitEvent)=\"onSubmit($event)\"\n (changeEvent)=\"onChange($event)\"\n >\n </valtimo-form-flow-configuration-container>\n </div>\n</div>\n", styles: [".form-flow__progress-bar-indicator{height:64px;overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none}.form-flow__progress-bar-indicator ::-webkit-scrollbar{display:none}\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: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ProgressIndicator, selector: "cds-progress-indicator, ibm-progress-indicator", inputs: ["current", "steps", "translations", "orientation", "skeleton", "spacing"], outputs: ["stepSelected"] }, { kind: "component", type: i2$2.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "component", type: FormFlowConfigurationContainerComponent, selector: "valtimo-form-flow-configuration-container", inputs: ["disabled", "componentId", "formFlowInstanceId"], outputs: ["changeEvent", "submitEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
2735
+ }
2736
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormFlowComponent, decorators: [{
2737
+ type: Component,
2738
+ args: [{ standalone: false, selector: 'valtimo-form-flow', 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 breadcrumbs: breadcrumbs$ | async,\n currentStepIndex: currentStepIndex$ | async,\n enableFormFlowBreadcrumbs: enableFormFlowBreadcrumbs$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n } as obs\"\n>\n <div *ngIf=\"formDefinition && (formFlowStepType$ | async) === 'form'\">\n <div *ngIf=\"obs.enableFormFlowBreadcrumbs\" class=\"form-flow__progress-bar-indicator\">\n <cds-progress-indicator\n [spacing]=\"'equal'\"\n [skeleton]=\"obs.breadcrumbs.length === 0\"\n [current]=\"obs.currentStepIndex\"\n [steps]=\"obs.breadcrumbs\"\n (stepSelected)=\"onStepSelected($event)\"\n >\n </cds-progress-indicator>\n </div>\n\n <valtimo-form-io\n #form\n [form]=\"formDefinition\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n (event)=\"onEvent($event)\"\n [options]=\"formioOptions\"\n ></valtimo-form-io>\n </div>\n\n <div *ngIf=\"(formFlowStepType$ | async) === 'custom-component'\">\n <valtimo-form-flow-configuration-container\n [componentId]=\"FormFlowCustomComponentId$ | async\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n [disabled]=\"disabled$ | async\"\n (submitEvent)=\"onSubmit($event)\"\n (changeEvent)=\"onChange($event)\"\n >\n </valtimo-form-flow-configuration-container>\n </div>\n</div>\n", styles: [".form-flow__progress-bar-indicator{height:64px;overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none}.form-flow__progress-bar-indicator ::-webkit-scrollbar{display:none}\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"] }]
2739
+ }], ctorParameters: () => [{ type: FormFlowService }, { type: i2$2.ValtimoModalService }, { type: i2$1.TranslateService }, { type: i2.ConfigService }], propDecorators: { form: [{
2740
+ type: ViewChild,
2741
+ args: ['form']
2742
+ }], formIoFormData: [{
2743
+ type: Input
2744
+ }], formFlowInstanceId: [{
2745
+ type: Input
2746
+ }], formFlowComplete: [{
2747
+ type: Output
2748
+ }], formFlowChange: [{
2749
+ type: Output
2750
+ }] } });
2751
+
2752
+ /*
2753
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2754
+ *
2755
+ * Licensed under EUPL, Version 1.2 (the "License");
2756
+ * you may not use this file except in compliance with the License.
2757
+ * You may obtain a copy of the License at
2758
+ *
2759
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2760
+ *
2761
+ * Unless required by applicable law or agreed to in writing, software
2762
+ * distributed under the License is distributed on an "AS IS" basis,
2763
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2764
+ * See the License for the specific language governing permissions and
2765
+ * limitations under the License.
2766
+ */
2767
+
2768
+ /*
2769
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2770
+ *
2771
+ * Licensed under EUPL, Version 1.2 (the "License");
2772
+ * you may not use this file except in compliance with the License.
2773
+ * You may obtain a copy of the License at
2774
+ *
2775
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2776
+ *
2777
+ * Unless required by applicable law or agreed to in writing, software
2778
+ * distributed under the License is distributed on an "AS IS" basis,
2779
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2780
+ * See the License for the specific language governing permissions and
2781
+ * limitations under the License.
2782
+ */
2783
+
2784
+ /*
2785
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2786
+ *
2787
+ * Licensed under EUPL, Version 1.2 (the "License");
2788
+ * you may not use this file except in compliance with the License.
2789
+ * You may obtain a copy of the License at
2790
+ *
2791
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2792
+ *
2793
+ * Unless required by applicable law or agreed to in writing, software
2794
+ * distributed under the License is distributed on an "AS IS" basis,
2795
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2796
+ * See the License for the specific language governing permissions and
2797
+ * limitations under the License.
2798
+ */
2799
+ class ProcessLinkModule {
2800
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2801
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModule, declarations: [ProcessLinkComponent,
2802
+ FormLinkProcessDiagramComponent,
2803
+ SelectPluginConfigurationComponent,
2804
+ SelectPluginActionComponent,
2805
+ PluginActionConfigurationComponent,
2806
+ ProcessLinkModalComponent,
2807
+ ChooseProcessLinkTypeComponent,
2808
+ SelectFormComponent,
2809
+ FormFlowComponent,
2810
+ SelectFormFlowComponent,
2811
+ FormFlowConfigurationContainerComponent,
2812
+ FormDisplayConfigurationComponent,
2813
+ SelectUIComponentComponent,
2814
+ ImportPluginConfigurationComponent], imports: [CommonModule,
2815
+ ProcessLinkRoutingModule,
2816
+ FormsModule,
2817
+ ReactiveFormsModule,
2818
+ ModalModule,
2819
+ SearchableDropdownSelectModule,
2820
+ TranslateModule,
2821
+ StepperModule,
2822
+ VModalModule,
2823
+ PluginTranslatePipeModule,
2824
+ ParagraphModule,
2825
+ PluginConfigurationContainerModule,
2826
+ ModalModule$1,
2827
+ ProgressIndicatorModule,
2828
+ ButtonModule,
2829
+ IconModule,
2830
+ TooltipModule,
2831
+ ComboBoxModule,
2832
+ InputModule,
2833
+ TooltipIconModule,
2834
+ LoadingModule,
2835
+ FormIoModule,
2836
+ ValtimoCdsModalDirective,
2837
+ StructuredListModule,
2838
+ TilesModule,
2839
+ RenderInPageHeaderDirective,
2840
+ SelectModule,
2841
+ ToggleModule,
2842
+ CarbonMultiInputModule,
2843
+ LayerModule,
2844
+ ToggletipModule,
2845
+ ComboBoxModule,
2846
+ TranslateModule,
2847
+ LayerModule,
2848
+ ToggletipModule,
2849
+ RemoveClassnamesDirective,
2850
+ ReactiveFormsModule], exports: [ProcessLinkComponent,
2851
+ SelectPluginConfigurationComponent,
2852
+ SelectPluginActionComponent,
2853
+ PluginActionConfigurationComponent,
2854
+ ProcessLinkModalComponent,
2855
+ FormFlowComponent] }); }
2856
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModule, providers: [UrlValidatorService, UrlResolverService], imports: [CommonModule,
2857
+ ProcessLinkRoutingModule,
2858
+ FormsModule,
2859
+ ReactiveFormsModule,
2860
+ ModalModule,
2861
+ SearchableDropdownSelectModule,
2862
+ TranslateModule,
2863
+ StepperModule,
2864
+ VModalModule,
2865
+ PluginTranslatePipeModule,
2866
+ ParagraphModule,
2867
+ PluginConfigurationContainerModule,
2868
+ ModalModule$1,
2869
+ ProgressIndicatorModule,
2870
+ ButtonModule,
2871
+ IconModule,
2872
+ TooltipModule,
2873
+ ComboBoxModule,
2874
+ InputModule,
2875
+ TooltipIconModule,
2876
+ LoadingModule,
2877
+ FormIoModule,
2878
+ StructuredListModule,
2879
+ TilesModule,
2880
+ SelectModule,
2881
+ ToggleModule,
2882
+ CarbonMultiInputModule,
2883
+ LayerModule,
2884
+ ToggletipModule,
2885
+ ComboBoxModule,
2886
+ TranslateModule,
2887
+ LayerModule,
2888
+ ToggletipModule,
2889
+ ReactiveFormsModule] }); }
2890
+ }
2891
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ProcessLinkModule, decorators: [{
2892
+ type: NgModule,
2893
+ args: [{
2894
+ declarations: [
2895
+ ProcessLinkComponent,
2896
+ FormLinkProcessDiagramComponent,
2897
+ SelectPluginConfigurationComponent,
2898
+ SelectPluginActionComponent,
2899
+ PluginActionConfigurationComponent,
2900
+ ProcessLinkModalComponent,
2901
+ ChooseProcessLinkTypeComponent,
2902
+ SelectFormComponent,
2903
+ FormFlowComponent,
2904
+ SelectFormFlowComponent,
2905
+ FormFlowConfigurationContainerComponent,
2906
+ FormDisplayConfigurationComponent,
2907
+ SelectUIComponentComponent,
2908
+ ImportPluginConfigurationComponent,
2909
+ ],
2910
+ imports: [
2911
+ CommonModule,
2912
+ ProcessLinkRoutingModule,
2913
+ FormsModule,
2914
+ ReactiveFormsModule,
2915
+ ModalModule,
2916
+ SearchableDropdownSelectModule,
2917
+ TranslateModule,
2918
+ StepperModule,
2919
+ VModalModule,
2920
+ PluginTranslatePipeModule,
2921
+ ParagraphModule,
2922
+ PluginConfigurationContainerModule,
2923
+ ModalModule$1,
2924
+ ProgressIndicatorModule,
2925
+ ButtonModule,
2926
+ IconModule,
2927
+ TooltipModule,
2928
+ ComboBoxModule,
2929
+ InputModule,
2930
+ TooltipIconModule,
2931
+ LoadingModule,
2932
+ FormIoModule,
2933
+ ValtimoCdsModalDirective,
2934
+ StructuredListModule,
2935
+ TilesModule,
2936
+ RenderInPageHeaderDirective,
2937
+ SelectModule,
2938
+ ToggleModule,
2939
+ CarbonMultiInputModule,
2940
+ LayerModule,
2941
+ ToggletipModule,
2942
+ ComboBoxModule,
2943
+ TranslateModule,
2944
+ LayerModule,
2945
+ ToggletipModule,
2946
+ RemoveClassnamesDirective,
2947
+ ReactiveFormsModule,
2948
+ ],
2949
+ exports: [
2950
+ ProcessLinkComponent,
2951
+ SelectPluginConfigurationComponent,
2952
+ SelectPluginActionComponent,
2953
+ PluginActionConfigurationComponent,
2954
+ ProcessLinkModalComponent,
2955
+ FormFlowComponent,
2956
+ ],
2957
+ providers: [UrlValidatorService, UrlResolverService],
2958
+ }]
2959
+ }] });
2960
+
2961
+ /*
2962
+ * Copyright 2015-2025 Ritense BV, the Netherlands.
2963
+ *
2964
+ * Licensed under EUPL, Version 1.2 (the "License");
2965
+ * you may not use this file except in compliance with the License.
2966
+ * You may obtain a copy of the License at
2967
+ *
2968
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
2969
+ *
2970
+ * Unless required by applicable law or agreed to in writing, software
2971
+ * distributed under the License is distributed on an "AS IS" basis,
2972
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2973
+ * See the License for the specific language governing permissions and
2974
+ * limitations under the License.
2975
+ */
2976
+ /*
2977
+ * Public API Surface of process-link
2978
+ */
2979
+
2980
+ /**
2981
+ * Generated bundle index. Do not edit.
2982
+ */
2983
+
2984
+ export { ChooseProcessLinkTypeComponent, FORM_CUSTOM_COMPONENT_TOKEN, FORM_FLOW_COMPONENT_TOKEN, FormFlowComponent, FormFlowComponentService, FormFlowService, PluginActionConfigurationComponent, PluginStateService, ProcessLinkButtonService, ProcessLinkComponent, ProcessLinkEditMode, ProcessLinkModalComponent, ProcessLinkModule, ProcessLinkService, ProcessLinkStateService, ProcessLinkStepService, SelectPluginActionComponent, SelectPluginConfigurationComponent, UrlResolverService, UrlValidatorService, formSizeToCarbonModalSizeMap };
2985
+ //# sourceMappingURL=valtimo-process-link.mjs.map