@valtimo/process-link 13.12.0 → 13.14.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.
- package/fesm2022/valtimo-process-link.mjs +2003 -352
- package/fesm2022/valtimo-process-link.mjs.map +1 -1
- package/lib/components/choose-process-link-type/choose-process-link-type.component.d.ts +2 -2
- package/lib/components/choose-process-link-type/choose-process-link-type.component.d.ts.map +1 -1
- package/lib/components/configure-building-block-mappings/configure-building-block-mappings.component.d.ts +91 -0
- package/lib/components/configure-building-block-mappings/configure-building-block-mappings.component.d.ts.map +1 -0
- package/lib/components/configure-building-block-plugins/configure-building-block-plugins.component.d.ts +49 -0
- package/lib/components/configure-building-block-plugins/configure-building-block-plugins.component.d.ts.map +1 -0
- package/lib/components/configure-building-block-plugins/index.d.ts +2 -0
- package/lib/components/configure-building-block-plugins/index.d.ts.map +1 -0
- package/lib/components/plugin-action-configuration/plugin-action-configuration.component.d.ts.map +1 -1
- package/lib/components/process-link-modal/process-link-modal.component.d.ts +3 -3
- package/lib/components/process-link-modal/process-link-modal.component.d.ts.map +1 -1
- package/lib/components/select-building-block/index.d.ts +2 -0
- package/lib/components/select-building-block/index.d.ts.map +1 -0
- package/lib/components/select-building-block/select-building-block.component.d.ts +29 -0
- package/lib/components/select-building-block/select-building-block.component.d.ts.map +1 -0
- package/lib/components/select-form/select-form.component.d.ts.map +1 -1
- package/lib/components/select-form-flow/select-form-flow.component.d.ts.map +1 -1
- package/lib/components/select-plugin-action/select-plugin-action.component.d.ts.map +1 -1
- package/lib/components/select-plugin-configuration/select-plugin-configuration.component.d.ts +12 -4
- package/lib/components/select-plugin-configuration/select-plugin-configuration.component.d.ts.map +1 -1
- package/lib/components/select-ui-component/select-ui-component.component.d.ts.map +1 -1
- package/lib/constants/process.link.d.ts +2 -1
- package/lib/constants/process.link.d.ts.map +1 -1
- package/lib/models/building-block-field.model.d.ts +23 -0
- package/lib/models/building-block-field.model.d.ts.map +1 -0
- package/lib/models/index.d.ts +2 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/plugin.model.d.ts +10 -0
- package/lib/models/plugin.model.d.ts.map +1 -0
- package/lib/models/process-link.model.d.ts +65 -10
- package/lib/models/process-link.model.d.ts.map +1 -1
- package/lib/process-link.module.d.ts +11 -8
- package/lib/process-link.module.d.ts.map +1 -1
- package/lib/services/building-block-state.service.d.ts +64 -0
- package/lib/services/building-block-state.service.d.ts.map +1 -0
- package/lib/services/index.d.ts +2 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/plugin-state.service.d.ts +3 -1
- package/lib/services/plugin-state.service.d.ts.map +1 -1
- package/lib/services/process-link-building-block-api.service.d.ts +25 -0
- package/lib/services/process-link-building-block-api.service.d.ts.map +1 -0
- package/lib/services/process-link-state.service.d.ts +19 -6
- package/lib/services/process-link-state.service.d.ts.map +1 -1
- package/lib/services/process-link-step.service.d.ts +44 -0
- package/lib/services/process-link-step.service.d.ts.map +1 -1
- package/lib/services/process-link.service.d.ts +2 -4
- package/lib/services/process-link.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,33 +1,369 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, InjectionToken, Optional, Inject, Component, EventEmitter, Output, Input, ViewChild, ChangeDetectionStrategy, NgModule, ViewContainerRef } from '@angular/core';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import { map, take, switchMap as switchMap$1, tap as tap$1 } from 'rxjs/operators';
|
|
3
|
+
import { catchError, of, BehaviorSubject, combineLatest, map, Subject, switchMap, filter, Subscription, startWith, mergeMap, tap, withLatestFrom as withLatestFrom$1, take as take$1, shareReplay, distinctUntilChanged } from 'rxjs';
|
|
4
|
+
import * as i2 from '@angular/common/http';
|
|
5
|
+
import { HttpHeaders, HttpParams } from '@angular/common/http';
|
|
6
|
+
import * as i1 from '@valtimo/shared';
|
|
7
|
+
import { BaseApiService, InterceptorSkip, getCaseManagementRouteParams, getBuildingBlockManagementRouteParams, ROLE_ADMIN } from '@valtimo/shared';
|
|
8
|
+
import { map as map$1, take, switchMap as switchMap$1, withLatestFrom, filter as filter$1, catchError as catchError$1, tap as tap$1 } from 'rxjs/operators';
|
|
9
9
|
import * as i1$1 from '@valtimo/plugin';
|
|
10
10
|
import { PluginTranslatePipeModule, PluginConfigurationContainerModule } from '@valtimo/plugin';
|
|
11
|
-
import * as
|
|
11
|
+
import * as i3 from '@ngx-translate/core';
|
|
12
12
|
import { TranslateModule } from '@ngx-translate/core';
|
|
13
|
-
import * as i3 from '@angular/common';
|
|
13
|
+
import * as i3$1 from '@angular/common';
|
|
14
14
|
import { CommonModule } from '@angular/common';
|
|
15
|
-
import * as
|
|
16
|
-
import {
|
|
15
|
+
import * as i3$2 from 'carbon-components-angular';
|
|
16
|
+
import { ComboBoxModule, RadioModule, InputModule, ButtonModule, IconModule, LayerModule, ModalModule as ModalModule$1, ProgressIndicatorModule, LoadingModule, StructuredListModule, TilesModule, SelectModule as SelectModule$1, ToggleModule, ToggletipModule, NotificationModule } from 'carbon-components-angular';
|
|
17
17
|
import * as i1$2 from '@angular/forms';
|
|
18
|
-
import { FormControl, Validators,
|
|
18
|
+
import { FormControl, Validators, FormGroup, FormArray, ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
19
19
|
import { Upload16 } from '@carbon/icons';
|
|
20
|
-
import * as i2$
|
|
21
|
-
import { FormioOptionsImpl, ModalModule, SearchableDropdownSelectModule, StepperModule, VModalModule, ParagraphModule, TooltipModule, TooltipIconModule, FormIoModule, ValtimoCdsModalDirective, RenderInPageHeaderDirective, CarbonMultiInputModule, RemoveClassnamesDirective } from '@valtimo/components';
|
|
20
|
+
import * as i2$1 from '@valtimo/components';
|
|
21
|
+
import { ValuePathSelectorPrefix, ValuePathSelectorComponent, InputLabelModule, SelectModule, FormioOptionsImpl, ModalModule, SearchableDropdownSelectModule, StepperModule, VModalModule, ParagraphModule, TooltipModule, TooltipIconModule, FormIoModule, ValtimoCdsModalDirective, RenderInPageHeaderDirective, CarbonMultiInputModule, RemoveClassnamesDirective } from '@valtimo/components';
|
|
22
22
|
import * as i5 from 'carbon-components-angular/dropdown';
|
|
23
23
|
import BpmnViewer from 'bpmn-js';
|
|
24
24
|
import * as i1$3 from '@valtimo/process';
|
|
25
|
-
import * as i3$
|
|
25
|
+
import * as i3$3 from '@angular/router';
|
|
26
26
|
import { RouterModule } from '@angular/router';
|
|
27
27
|
import { AuthGuardService } from '@valtimo/security';
|
|
28
28
|
import * as i1$4 from '@valtimo/form';
|
|
29
29
|
import * as i1$5 from '@valtimo/form-flow-management';
|
|
30
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 ProcessLinkBuildingBlockApiService extends BaseApiService {
|
|
47
|
+
constructor(configService, httpClient) {
|
|
48
|
+
super(httpClient, configService);
|
|
49
|
+
this.configService = configService;
|
|
50
|
+
this.httpClient = httpClient;
|
|
51
|
+
}
|
|
52
|
+
getVersionsForBuildingBlock(key, page = 0, size = 5, all = false) {
|
|
53
|
+
const allParam = all ? 'all=true' : '';
|
|
54
|
+
return this.httpClient.get(this.getApiUrl(`management/v1/building-block/${key}/version?page=${page}&size=${size}${allParam}`));
|
|
55
|
+
}
|
|
56
|
+
getPluginDefinitionsForBuildingBlock(key, versionTag) {
|
|
57
|
+
return this.httpClient.get(this.getApiUrl(`management/v1/building-block/${key}/version/${versionTag}/plugin`));
|
|
58
|
+
}
|
|
59
|
+
getFieldsForBuildingBlock(key, versionTag) {
|
|
60
|
+
return this.httpClient.get(this.getApiUrl(`management/v1/building-block/${key}/version/${versionTag}/fields`));
|
|
61
|
+
}
|
|
62
|
+
getBuildingBlockDefinitions(options) {
|
|
63
|
+
return this.httpClient
|
|
64
|
+
.get(this.getApiUrl('management/v1/building-block'), {
|
|
65
|
+
params: options,
|
|
66
|
+
headers: new HttpHeaders().set(InterceptorSkip, '404'),
|
|
67
|
+
})
|
|
68
|
+
.pipe(catchError((error) => {
|
|
69
|
+
if (error.status === 404)
|
|
70
|
+
return of([]);
|
|
71
|
+
throw error;
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
getMainProcessDefinitionKeyForBuildingBlock(key, versionTag) {
|
|
75
|
+
return this.httpClient.get(this.getApiUrl(`management/v1/building-block/${key}/version/${versionTag}/process-definition/main/key`), {
|
|
76
|
+
responseType: 'text',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
isBuildingBlockProcess(processDefinitionId) {
|
|
80
|
+
return this.httpClient
|
|
81
|
+
.get(this.getApiUrl(`management/v1/building-block/process-definition/${processDefinitionId}/is-building-block`))
|
|
82
|
+
.pipe(catchError(() => of(false)));
|
|
83
|
+
}
|
|
84
|
+
getBuildingBlockDefinition(key, versionTag) {
|
|
85
|
+
return this.httpClient
|
|
86
|
+
.get(this.getApiUrl(`management/v1/building-block/${key}/version/${versionTag}`), {
|
|
87
|
+
headers: new HttpHeaders().set(InterceptorSkip, '404'),
|
|
88
|
+
})
|
|
89
|
+
.pipe(catchError(() => of(null)));
|
|
90
|
+
}
|
|
91
|
+
getCaseDefinition(key, versionTag) {
|
|
92
|
+
return this.httpClient
|
|
93
|
+
.get(this.getApiUrl(`management/v1/case-definition/${key}/version/${versionTag}`), {
|
|
94
|
+
headers: new HttpHeaders().set(InterceptorSkip, '404'),
|
|
95
|
+
})
|
|
96
|
+
.pipe(catchError(() => of(null)));
|
|
97
|
+
}
|
|
98
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkBuildingBlockApiService, deps: [{ token: i1.ConfigService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
99
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkBuildingBlockApiService, providedIn: 'root' }); }
|
|
100
|
+
}
|
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkBuildingBlockApiService, decorators: [{
|
|
102
|
+
type: Injectable,
|
|
103
|
+
args: [{
|
|
104
|
+
providedIn: 'root',
|
|
105
|
+
}]
|
|
106
|
+
}], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.HttpClient }] });
|
|
107
|
+
|
|
108
|
+
/*
|
|
109
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
110
|
+
*
|
|
111
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
112
|
+
* you may not use this file except in compliance with the License.
|
|
113
|
+
* You may obtain a copy of the License at
|
|
114
|
+
*
|
|
115
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
116
|
+
*
|
|
117
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
118
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
119
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
120
|
+
* See the License for the specific language governing permissions and
|
|
121
|
+
* limitations under the License.
|
|
122
|
+
*/
|
|
123
|
+
class BuildingBlockStateService {
|
|
124
|
+
constructor(processLinkBuildingBlockApiService) {
|
|
125
|
+
this.processLinkBuildingBlockApiService = processLinkBuildingBlockApiService;
|
|
126
|
+
this._definitionKey$ = new BehaviorSubject(null);
|
|
127
|
+
this._definitionVersionTag$ = new BehaviorSubject(null);
|
|
128
|
+
this._versions$ = new BehaviorSubject([]);
|
|
129
|
+
this._requiredPluginKeys$ = new BehaviorSubject([]);
|
|
130
|
+
this._pluginMappings$ = new BehaviorSubject({});
|
|
131
|
+
this._buildingBlockFields$ = new BehaviorSubject([]);
|
|
132
|
+
this._inputMappings$ = new BehaviorSubject([]);
|
|
133
|
+
this._outputMappings$ = new BehaviorSubject([]);
|
|
134
|
+
this._loadingRequirements$ = new BehaviorSubject(false);
|
|
135
|
+
this._loadingFields$ = new BehaviorSubject(false);
|
|
136
|
+
this._pluginDependencies$ = new BehaviorSubject([]);
|
|
137
|
+
this._isNestedBuildingBlock$ = new BehaviorSubject(false);
|
|
138
|
+
}
|
|
139
|
+
get definitionKey$() {
|
|
140
|
+
return this._definitionKey$.asObservable();
|
|
141
|
+
}
|
|
142
|
+
get definitionVersionTag$() {
|
|
143
|
+
return this._definitionVersionTag$.asObservable();
|
|
144
|
+
}
|
|
145
|
+
get versions$() {
|
|
146
|
+
return this._versions$.asObservable();
|
|
147
|
+
}
|
|
148
|
+
get requiredPluginKeys$() {
|
|
149
|
+
return this._requiredPluginKeys$.asObservable();
|
|
150
|
+
}
|
|
151
|
+
get pluginMappings$() {
|
|
152
|
+
return this._pluginMappings$.asObservable();
|
|
153
|
+
}
|
|
154
|
+
get buildingBlockFields$() {
|
|
155
|
+
return this._buildingBlockFields$.asObservable();
|
|
156
|
+
}
|
|
157
|
+
get inputMappings$() {
|
|
158
|
+
return this._inputMappings$.asObservable();
|
|
159
|
+
}
|
|
160
|
+
get outputMappings$() {
|
|
161
|
+
return this._outputMappings$.asObservable();
|
|
162
|
+
}
|
|
163
|
+
get requirementsLoading$() {
|
|
164
|
+
return this._loadingRequirements$.asObservable();
|
|
165
|
+
}
|
|
166
|
+
get fieldsLoading$() {
|
|
167
|
+
return this._loadingFields$.asObservable();
|
|
168
|
+
}
|
|
169
|
+
get pluginDependencies$() {
|
|
170
|
+
return this._pluginDependencies$.asObservable();
|
|
171
|
+
}
|
|
172
|
+
get isNestedBuildingBlock$() {
|
|
173
|
+
return this._isNestedBuildingBlock$.asObservable();
|
|
174
|
+
}
|
|
175
|
+
setIsNestedBuildingBlock(isNested) {
|
|
176
|
+
this._isNestedBuildingBlock$.next(isNested);
|
|
177
|
+
}
|
|
178
|
+
get mappingsComplete$() {
|
|
179
|
+
return combineLatest([
|
|
180
|
+
this.requiredPluginKeys$,
|
|
181
|
+
this.pluginMappings$,
|
|
182
|
+
this.definitionVersionTag$,
|
|
183
|
+
this.isNestedBuildingBlock$,
|
|
184
|
+
]).pipe(map(([keys, mappings, version, isNested]) => !!version && (isNested || keys.every(key => !!mappings[key]))));
|
|
185
|
+
}
|
|
186
|
+
setDefinitionKey(key, initialVersionTag) {
|
|
187
|
+
this._definitionKey$.next(key);
|
|
188
|
+
this._definitionVersionTag$.next(null);
|
|
189
|
+
this._versions$.next([]);
|
|
190
|
+
this.clearPluginRequirements();
|
|
191
|
+
this.clearMappings();
|
|
192
|
+
this.clearFields();
|
|
193
|
+
this._versionSubscription?.unsubscribe();
|
|
194
|
+
if (!key)
|
|
195
|
+
return;
|
|
196
|
+
this._versionSubscription = this.processLinkBuildingBlockApiService
|
|
197
|
+
.getVersionsForBuildingBlock(key)
|
|
198
|
+
.subscribe({
|
|
199
|
+
next: versions => {
|
|
200
|
+
this._versions$.next(versions.content.map(version => {
|
|
201
|
+
return version.versionTag;
|
|
202
|
+
}) ?? []);
|
|
203
|
+
if (initialVersionTag) {
|
|
204
|
+
this.setDefinitionVersionTag(initialVersionTag, true);
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
error: () => {
|
|
208
|
+
this._versions$.next([]);
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
setProcessLink(processLink) {
|
|
213
|
+
if (!processLink) {
|
|
214
|
+
this.reset();
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
if (processLink.processLinkType === 'building-block') {
|
|
218
|
+
this.setDefinitionKey(processLink.buildingBlockDefinitionKey ?? null, processLink.buildingBlockDefinitionVersionTag ?? undefined);
|
|
219
|
+
this.setPluginConfigurationMappings(processLink.pluginConfigurationMappings);
|
|
220
|
+
this.setInputMappings(processLink.inputMappings ?? []);
|
|
221
|
+
this.setOutputMappings(processLink.outputMappings ?? []);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.reset();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
setDefinitionVersionTag(versionTag, preserveMappings = false) {
|
|
228
|
+
this._definitionVersionTag$.next(versionTag);
|
|
229
|
+
this.clearPluginRequirements({ preserveMappings });
|
|
230
|
+
this.clearFields();
|
|
231
|
+
this.clearMappings({ preserveMappings });
|
|
232
|
+
const key = this._definitionKey$.getValue();
|
|
233
|
+
if (key && versionTag) {
|
|
234
|
+
this.loadPluginRequirements(key, versionTag);
|
|
235
|
+
this.loadFields(key, versionTag);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
setPluginConfigurationMapping(pluginDefinitionKey, configurationId) {
|
|
239
|
+
const current = this._pluginMappings$.getValue();
|
|
240
|
+
this._pluginMappings$.next({
|
|
241
|
+
...current,
|
|
242
|
+
[pluginDefinitionKey]: configurationId,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
setPluginConfigurationMappings(mappings) {
|
|
246
|
+
const normalized = {};
|
|
247
|
+
Object.entries(mappings ?? {}).forEach(([key, value]) => {
|
|
248
|
+
normalized[key] = value;
|
|
249
|
+
});
|
|
250
|
+
this._pluginMappings$.next(normalized);
|
|
251
|
+
}
|
|
252
|
+
setInputMappings(mappings) {
|
|
253
|
+
this._inputMappings$.next(mappings ?? []);
|
|
254
|
+
}
|
|
255
|
+
setOutputMappings(mappings) {
|
|
256
|
+
this._outputMappings$.next(mappings ?? []);
|
|
257
|
+
}
|
|
258
|
+
getInputMappingsSnapshot() {
|
|
259
|
+
return [...this._inputMappings$.getValue()];
|
|
260
|
+
}
|
|
261
|
+
getOutputMappingsSnapshot() {
|
|
262
|
+
return [...this._outputMappings$.getValue()];
|
|
263
|
+
}
|
|
264
|
+
getPluginConfigurationMappingsSnapshot() {
|
|
265
|
+
return { ...this._pluginMappings$.getValue() };
|
|
266
|
+
}
|
|
267
|
+
getDefinitionSnapshot() {
|
|
268
|
+
return {
|
|
269
|
+
key: this._definitionKey$.getValue(),
|
|
270
|
+
versionTag: this._definitionVersionTag$.getValue(),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
getBuildingBlockFieldsSnapshot() {
|
|
274
|
+
return [...this._buildingBlockFields$.getValue()];
|
|
275
|
+
}
|
|
276
|
+
reset() {
|
|
277
|
+
this._definitionKey$.next(null);
|
|
278
|
+
this._definitionVersionTag$.next(null);
|
|
279
|
+
this._versions$.next([]);
|
|
280
|
+
this._pluginMappings$.next({});
|
|
281
|
+
this._isNestedBuildingBlock$.next(false);
|
|
282
|
+
this.clearFields();
|
|
283
|
+
this.clearMappings();
|
|
284
|
+
this.clearPluginRequirements();
|
|
285
|
+
}
|
|
286
|
+
ngOnDestroy() {
|
|
287
|
+
this._versionSubscription?.unsubscribe();
|
|
288
|
+
this._requirementsSubscription?.unsubscribe();
|
|
289
|
+
this._fieldsSubscription?.unsubscribe();
|
|
290
|
+
}
|
|
291
|
+
loadPluginRequirements(key, versionTag) {
|
|
292
|
+
this._loadingRequirements$.next(true);
|
|
293
|
+
this._requirementsSubscription?.unsubscribe();
|
|
294
|
+
this._requirementsSubscription = this.processLinkBuildingBlockApiService
|
|
295
|
+
.getPluginDefinitionsForBuildingBlock(key, versionTag)
|
|
296
|
+
.subscribe({
|
|
297
|
+
next: res => {
|
|
298
|
+
const plugins = res?.plugins ?? [];
|
|
299
|
+
const pluginKeys = plugins.map(plugin => plugin.pluginDefinitionKey).filter(Boolean);
|
|
300
|
+
const dependencies = Array.from(new Set(plugins.flatMap(p => p.dependencies ?? []).map(d => d.key)));
|
|
301
|
+
this.applyPluginKeys(pluginKeys ?? []);
|
|
302
|
+
this._pluginDependencies$.next(dependencies);
|
|
303
|
+
this._loadingRequirements$.next(false);
|
|
304
|
+
},
|
|
305
|
+
error: () => {
|
|
306
|
+
this.applyPluginKeys([]);
|
|
307
|
+
this._pluginDependencies$.next([]);
|
|
308
|
+
this._loadingRequirements$.next(false);
|
|
309
|
+
},
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
applyPluginKeys(pluginKeys) {
|
|
313
|
+
const currentMappings = this._pluginMappings$.getValue();
|
|
314
|
+
const normalized = {};
|
|
315
|
+
pluginKeys.forEach(key => {
|
|
316
|
+
normalized[key] = currentMappings[key] ?? null;
|
|
317
|
+
});
|
|
318
|
+
this._requiredPluginKeys$.next(pluginKeys);
|
|
319
|
+
this._pluginMappings$.next(normalized);
|
|
320
|
+
}
|
|
321
|
+
loadFields(key, versionTag) {
|
|
322
|
+
this._loadingFields$.next(true);
|
|
323
|
+
this._fieldsSubscription?.unsubscribe();
|
|
324
|
+
this._fieldsSubscription = this.processLinkBuildingBlockApiService
|
|
325
|
+
.getFieldsForBuildingBlock(key, versionTag)
|
|
326
|
+
.subscribe({
|
|
327
|
+
next: fields => {
|
|
328
|
+
this._buildingBlockFields$.next(fields ?? []);
|
|
329
|
+
this._loadingFields$.next(false);
|
|
330
|
+
},
|
|
331
|
+
error: () => {
|
|
332
|
+
this._buildingBlockFields$.next([]);
|
|
333
|
+
this._loadingFields$.next(false);
|
|
334
|
+
},
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
clearPluginRequirements(options = {}) {
|
|
338
|
+
this._requirementsSubscription?.unsubscribe();
|
|
339
|
+
this._requiredPluginKeys$.next([]);
|
|
340
|
+
if (!options.preserveMappings) {
|
|
341
|
+
this._pluginMappings$.next({});
|
|
342
|
+
}
|
|
343
|
+
this._loadingRequirements$.next(false);
|
|
344
|
+
}
|
|
345
|
+
clearFields() {
|
|
346
|
+
this._fieldsSubscription?.unsubscribe();
|
|
347
|
+
this._buildingBlockFields$.next([]);
|
|
348
|
+
this._loadingFields$.next(false);
|
|
349
|
+
}
|
|
350
|
+
clearMappings(options = {}) {
|
|
351
|
+
if (options.preserveMappings) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
this._inputMappings$.next([]);
|
|
355
|
+
this._outputMappings$.next([]);
|
|
356
|
+
}
|
|
357
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BuildingBlockStateService, deps: [{ token: ProcessLinkBuildingBlockApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
358
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BuildingBlockStateService, providedIn: 'root' }); }
|
|
359
|
+
}
|
|
360
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: BuildingBlockStateService, decorators: [{
|
|
361
|
+
type: Injectable,
|
|
362
|
+
args: [{
|
|
363
|
+
providedIn: 'root',
|
|
364
|
+
}]
|
|
365
|
+
}], ctorParameters: () => [{ type: ProcessLinkBuildingBlockApiService }] });
|
|
366
|
+
|
|
31
367
|
/*
|
|
32
368
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
33
369
|
*
|
|
@@ -70,15 +406,15 @@ class FormFlowService extends BaseApiService {
|
|
|
70
406
|
navigateToStep(instanceId, currentStepInstanceId, targetStepInstanceId, submissionData) {
|
|
71
407
|
return this.httpClient.post(this.getApiUrl(`v1/form-flow/instance/${instanceId}/step/instance/${currentStepInstanceId}/to/step/instance/${targetStepInstanceId}`), submissionData);
|
|
72
408
|
}
|
|
73
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
74
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
409
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowService, deps: [{ token: i2.HttpClient }, { token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
410
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowService, providedIn: 'root' }); }
|
|
75
411
|
}
|
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
412
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowService, decorators: [{
|
|
77
413
|
type: Injectable,
|
|
78
414
|
args: [{
|
|
79
415
|
providedIn: 'root',
|
|
80
416
|
}]
|
|
81
|
-
}], ctorParameters: () => [{ type:
|
|
417
|
+
}], ctorParameters: () => [{ type: i2.HttpClient }, { type: i1.ConfigService }] });
|
|
82
418
|
|
|
83
419
|
/*
|
|
84
420
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -118,17 +454,22 @@ class PluginStateService {
|
|
|
118
454
|
return this._save$.asObservable();
|
|
119
455
|
}
|
|
120
456
|
get functionKey$() {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
: of(processLink?.pluginActionDefinitionKey)));
|
|
457
|
+
// Prioritize user-selected function, fall back to process link's saved action
|
|
458
|
+
return this._selectedPluginFunction$.pipe(map$1(pluginFunction => pluginFunction?.key));
|
|
124
459
|
}
|
|
125
460
|
get pluginDefinitionKey$() {
|
|
126
461
|
return this._selectedProcessLink$.pipe(switchMap(selectedProcesLink => !selectedProcesLink
|
|
127
|
-
?
|
|
462
|
+
? combineLatest([
|
|
463
|
+
this._selectedPluginConfiguration$,
|
|
464
|
+
this._selectedPluginDefinition$,
|
|
465
|
+
]).pipe(map$1(([configuration, definition]) => configuration?.pluginDefinition.key || definition?.key))
|
|
128
466
|
: combineLatest([
|
|
129
467
|
this._selectedProcessLink$,
|
|
130
468
|
this.pluginService.pluginSpecifications$,
|
|
131
|
-
]).pipe(map(([processLink, pluginSpecifications]) => {
|
|
469
|
+
]).pipe(map$1(([processLink, pluginSpecifications]) => {
|
|
470
|
+
if (processLink?.pluginDefinitionKey) {
|
|
471
|
+
return processLink.pluginDefinitionKey;
|
|
472
|
+
}
|
|
132
473
|
const pluginSpecification = pluginSpecifications.find(specification => {
|
|
133
474
|
const functionKeys = specification?.functionConfigurationComponents &&
|
|
134
475
|
Object.keys(specification.functionConfigurationComponents);
|
|
@@ -148,6 +489,60 @@ class PluginStateService {
|
|
|
148
489
|
}
|
|
149
490
|
selectProcessLink(processLink) {
|
|
150
491
|
this._selectedProcessLink$.next(processLink);
|
|
492
|
+
// When editing a plugin process link, populate the plugin definition
|
|
493
|
+
if (processLink?.processLinkType === 'plugin') {
|
|
494
|
+
this.loadPluginDefinitionForProcessLink(processLink);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
loadPluginDefinitionForProcessLink(processLink) {
|
|
498
|
+
// Get the plugin definition key - either directly or from plugin specifications
|
|
499
|
+
this.getPluginDefinitionKeyForProcessLink(processLink)
|
|
500
|
+
.pipe(take(1))
|
|
501
|
+
.subscribe(pluginDefinitionKey => {
|
|
502
|
+
if (pluginDefinitionKey) {
|
|
503
|
+
// Fetch all plugin definitions and find the one matching the key
|
|
504
|
+
this.pluginManagementService
|
|
505
|
+
.getPluginDefinitions()
|
|
506
|
+
.pipe(take(1), map$1(definitions => definitions.find(d => d.key === pluginDefinitionKey)))
|
|
507
|
+
.subscribe(definition => {
|
|
508
|
+
if (definition) {
|
|
509
|
+
this._selectedPluginDefinition$.next(definition);
|
|
510
|
+
// Also set the selected function if available
|
|
511
|
+
if (processLink.pluginActionDefinitionKey) {
|
|
512
|
+
this._selectedPluginFunction$.next({
|
|
513
|
+
key: processLink.pluginActionDefinitionKey,
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
// Load and set the plugin configuration if available
|
|
521
|
+
if (processLink.pluginConfigurationId) {
|
|
522
|
+
this.pluginManagementService
|
|
523
|
+
.getAllPluginConfigurations()
|
|
524
|
+
.pipe(take(1), map$1(configs => configs.find(c => c.id === processLink.pluginConfigurationId)))
|
|
525
|
+
.subscribe(configuration => {
|
|
526
|
+
if (configuration) {
|
|
527
|
+
this._selectedPluginConfiguration$.next(configuration);
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
getPluginDefinitionKeyForProcessLink(processLink) {
|
|
533
|
+
// If the key is directly available, use it
|
|
534
|
+
if (processLink.pluginDefinitionKey) {
|
|
535
|
+
return of(processLink.pluginDefinitionKey);
|
|
536
|
+
}
|
|
537
|
+
// Otherwise, derive it from plugin specifications using the action key
|
|
538
|
+
return this.pluginService.pluginSpecifications$.pipe(map$1(pluginSpecifications => {
|
|
539
|
+
const pluginSpecification = pluginSpecifications.find(specification => {
|
|
540
|
+
const functionKeys = specification?.functionConfigurationComponents &&
|
|
541
|
+
Object.keys(specification.functionConfigurationComponents);
|
|
542
|
+
return functionKeys?.includes(processLink.pluginActionDefinitionKey);
|
|
543
|
+
});
|
|
544
|
+
return pluginSpecification?.pluginId;
|
|
545
|
+
}));
|
|
151
546
|
}
|
|
152
547
|
deselectProcessLink() {
|
|
153
548
|
this._selectedProcessLink$.next(undefined);
|
|
@@ -155,10 +550,10 @@ class PluginStateService {
|
|
|
155
550
|
save() {
|
|
156
551
|
this._save$.next(null);
|
|
157
552
|
}
|
|
158
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
159
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
553
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginStateService, deps: [{ token: i1$1.PluginManagementService }, { token: i1$1.PluginService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
554
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginStateService, providedIn: 'root' }); }
|
|
160
555
|
}
|
|
161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginStateService, decorators: [{
|
|
162
557
|
type: Injectable,
|
|
163
558
|
args: [{
|
|
164
559
|
providedIn: 'root',
|
|
@@ -189,7 +584,7 @@ class ProcessLinkService {
|
|
|
189
584
|
getTasksWithProcessLinks(processInstanceId) {
|
|
190
585
|
return this.http
|
|
191
586
|
.get(`${this.VALTIMO_ENDPOINT_URI}v1/process/${processInstanceId}/tasks/process-link`, {})
|
|
192
|
-
.pipe(map
|
|
587
|
+
.pipe(map(res => res || []));
|
|
193
588
|
}
|
|
194
589
|
getProcessLink(getProcessLinkRequest) {
|
|
195
590
|
var params = new HttpParams().set('processDefinitionId', getProcessLinkRequest.processDefinitionId);
|
|
@@ -199,15 +594,6 @@ class ProcessLinkService {
|
|
|
199
594
|
params,
|
|
200
595
|
});
|
|
201
596
|
}
|
|
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
597
|
getProcessLinkCandidates(activityType) {
|
|
212
598
|
return this.http.get(`${this.VALTIMO_ENDPOINT_URI}v1/process-link/types?activityType=${activityType}`);
|
|
213
599
|
}
|
|
@@ -233,6 +619,21 @@ class ProcessLinkService {
|
|
|
233
619
|
formData.append('startableByUser', String(startableByUser));
|
|
234
620
|
return this.http.post(`${this.VALTIMO_ENDPOINT_URI}management/v1/case-definition/${caseDefinitionKey}/version/${caseDefinitionVersionTag}/process-definition`, formData);
|
|
235
621
|
}
|
|
622
|
+
deployProcessWithProcessLinksForBuildingBlock(processLinks = [], processDefinitionId, processXml, buildingBlockKey, buildingBlockVersionTag, replace = false) {
|
|
623
|
+
const formData = new FormData();
|
|
624
|
+
const processLinksBlob = new Blob([JSON.stringify(processLinks.map(processLink => this.emptyStringToNull(processLink)))], { type: 'application/json' });
|
|
625
|
+
if (processXml) {
|
|
626
|
+
formData.append('file', new File([processXml], `${buildingBlockKey}-${buildingBlockVersionTag}.bpmn`));
|
|
627
|
+
}
|
|
628
|
+
if (processDefinitionId) {
|
|
629
|
+
formData.append('processDefinitionId', processDefinitionId);
|
|
630
|
+
}
|
|
631
|
+
formData.append('processLinks', processLinksBlob);
|
|
632
|
+
return this.http.post(`${this.VALTIMO_ENDPOINT_URI}management/v1/building-block/${buildingBlockKey}/version/${buildingBlockVersionTag}/process-definition/${processDefinitionId}`, formData, {
|
|
633
|
+
headers: new HttpHeaders().set(InterceptorSkip, '409'),
|
|
634
|
+
params: replace ? new HttpParams().set('replace', 'true') : undefined,
|
|
635
|
+
});
|
|
636
|
+
}
|
|
236
637
|
submitForm(processLinkId, formData, documentId, taskInstanceId, documentDefinitionName) {
|
|
237
638
|
let params = new HttpParams();
|
|
238
639
|
if (documentId) {
|
|
@@ -288,85 +689,15 @@ class ProcessLinkService {
|
|
|
288
689
|
}
|
|
289
690
|
return object;
|
|
290
691
|
}
|
|
291
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
292
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
692
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkService, deps: [{ token: i1.ConfigService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
693
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkService, providedIn: 'root' }); }
|
|
293
694
|
}
|
|
294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
695
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkService, decorators: [{
|
|
295
696
|
type: Injectable,
|
|
296
697
|
args: [{
|
|
297
698
|
providedIn: 'root',
|
|
298
699
|
}]
|
|
299
|
-
}], ctorParameters: () => [{ type:
|
|
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
|
-
*/
|
|
700
|
+
}], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.HttpClient }] });
|
|
370
701
|
|
|
371
702
|
/*
|
|
372
703
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -407,6 +738,7 @@ const formSizeToCarbonModalSizeMap = {
|
|
|
407
738
|
medium: 'md',
|
|
408
739
|
large: 'lg',
|
|
409
740
|
};
|
|
741
|
+
const UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK = ['form', 'form-flow', 'ui-component'];
|
|
410
742
|
|
|
411
743
|
/*
|
|
412
744
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -520,10 +852,10 @@ class ProcessLinkButtonService {
|
|
|
520
852
|
this.hideNextButton();
|
|
521
853
|
this.disableNextButton();
|
|
522
854
|
}
|
|
523
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
524
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
855
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkButtonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
856
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkButtonService, providedIn: 'root' }); }
|
|
525
857
|
}
|
|
526
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
858
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkButtonService, decorators: [{
|
|
527
859
|
type: Injectable,
|
|
528
860
|
args: [{
|
|
529
861
|
providedIn: 'root',
|
|
@@ -551,7 +883,7 @@ class ProcessLinkStepService {
|
|
|
551
883
|
this._steps$,
|
|
552
884
|
this._disableSteps$,
|
|
553
885
|
this.translateService.stream('key'),
|
|
554
|
-
]).pipe(filter(([steps]) => !!steps), map
|
|
886
|
+
]).pipe(filter(([steps]) => !!steps), map(([steps, disableSteps]) => steps.map(step => ({
|
|
555
887
|
...step,
|
|
556
888
|
disabled: disableSteps,
|
|
557
889
|
label: this.translateService.instant(`processLinkSteps.${step.label}`),
|
|
@@ -564,7 +896,7 @@ class ProcessLinkStepService {
|
|
|
564
896
|
return this._currentStepIndex$.asObservable();
|
|
565
897
|
}
|
|
566
898
|
get currentStepId$() {
|
|
567
|
-
return combineLatest([this._steps$, this.currentStepIndex$]).pipe(filter(([steps, currentStepIndex]) => !!steps && typeof currentStepIndex === 'number'), map
|
|
899
|
+
return combineLatest([this._steps$, this.currentStepIndex$]).pipe(filter(([steps, currentStepIndex]) => !!steps && typeof currentStepIndex === 'number'), map(([steps, currentStepIndex]) => steps.length > 0 ? steps[currentStepIndex]?.label : ''));
|
|
568
900
|
}
|
|
569
901
|
get hasOneProcessLinkType$() {
|
|
570
902
|
return this._hasOneProcessLinkType$.asObservable();
|
|
@@ -578,6 +910,7 @@ class ProcessLinkStepService {
|
|
|
578
910
|
this._currentStepIndex$ = new BehaviorSubject(0);
|
|
579
911
|
this._disableSteps$ = new BehaviorSubject(false);
|
|
580
912
|
this._hasOneProcessLinkType$ = new BehaviorSubject(false);
|
|
913
|
+
this._context = 'independent';
|
|
581
914
|
}
|
|
582
915
|
reset() {
|
|
583
916
|
this._currentStepIndex$.next(0);
|
|
@@ -618,17 +951,19 @@ class ProcessLinkStepService {
|
|
|
618
951
|
this._currentStepIndex$.next(0);
|
|
619
952
|
}
|
|
620
953
|
setChoosePluginConfigurationSteps() {
|
|
954
|
+
const selectionLabel = this._context === 'buildingBlock' ? 'choosePluginDefinition' : 'choosePluginConfiguration';
|
|
621
955
|
this._steps$.next([
|
|
622
956
|
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
|
|
623
|
-
{ label:
|
|
957
|
+
{ label: selectionLabel },
|
|
624
958
|
{ label: 'choosePluginAction', disabled: true },
|
|
625
959
|
{ label: 'configurePluginAction', disabled: true },
|
|
626
960
|
]);
|
|
627
961
|
this._currentStepIndex$.next(1);
|
|
628
962
|
}
|
|
629
963
|
setSingleChoosePluginConfigurationSteps() {
|
|
964
|
+
const selectionLabel = this._context === 'buildingBlock' ? 'choosePluginDefinition' : 'choosePluginConfiguration';
|
|
630
965
|
this._steps$.next([
|
|
631
|
-
{ label:
|
|
966
|
+
{ label: selectionLabel },
|
|
632
967
|
{ label: 'choosePluginAction', disabled: true },
|
|
633
968
|
{ label: 'configurePluginAction', disabled: true },
|
|
634
969
|
]);
|
|
@@ -638,12 +973,17 @@ class ProcessLinkStepService {
|
|
|
638
973
|
combineLatest([
|
|
639
974
|
this._hasOneProcessLinkType$,
|
|
640
975
|
this.pluginStateService.selectedPluginConfiguration$,
|
|
976
|
+
this.pluginStateService.selectedPluginDefinition$,
|
|
641
977
|
])
|
|
642
978
|
.pipe(take(1))
|
|
643
|
-
.subscribe(([hasOneType, selectedConfiguration]) => {
|
|
979
|
+
.subscribe(([hasOneType, selectedConfiguration, selectedDefinition]) => {
|
|
980
|
+
const selectionLabel = this._context === 'buildingBlock'
|
|
981
|
+
? 'choosePluginDefinition'
|
|
982
|
+
: 'choosePluginConfiguration';
|
|
983
|
+
const selectedPluginLabel = this.getSelectedPluginLabel(selectedConfiguration, selectedDefinition);
|
|
644
984
|
if (hasOneType) {
|
|
645
985
|
this._steps$.next([
|
|
646
|
-
{ label:
|
|
986
|
+
{ label: selectionLabel, secondaryLabel: selectedPluginLabel },
|
|
647
987
|
{ label: 'choosePluginAction' },
|
|
648
988
|
{ label: 'configurePluginAction', disabled: true },
|
|
649
989
|
]);
|
|
@@ -656,7 +996,7 @@ class ProcessLinkStepService {
|
|
|
656
996
|
else {
|
|
657
997
|
this._steps$.next([
|
|
658
998
|
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
|
|
659
|
-
{ label:
|
|
999
|
+
{ label: selectionLabel, secondaryLabel: selectedPluginLabel },
|
|
660
1000
|
{ label: 'choosePluginAction' },
|
|
661
1001
|
{ label: 'configurePluginAction', disabled: true },
|
|
662
1002
|
]);
|
|
@@ -673,13 +1013,21 @@ class ProcessLinkStepService {
|
|
|
673
1013
|
this._hasOneProcessLinkType$,
|
|
674
1014
|
this.pluginStateService.selectedPluginConfiguration$,
|
|
675
1015
|
this.pluginStateService.selectedPluginFunction$,
|
|
1016
|
+
this.pluginStateService.selectedPluginDefinition$,
|
|
676
1017
|
])
|
|
677
1018
|
.pipe(take(1))
|
|
678
|
-
.subscribe(([hasOneType, selectedConfiguration, selectedFunction]) => {
|
|
679
|
-
const
|
|
1019
|
+
.subscribe(([hasOneType, selectedConfiguration, selectedFunction, selectedDefinition]) => {
|
|
1020
|
+
const pluginKey = selectedDefinition?.key || selectedConfiguration?.pluginDefinition?.key || '';
|
|
1021
|
+
const selectedFunctionTranslation = pluginKey
|
|
1022
|
+
? this.pluginTranslateService.instant(selectedFunction.key, pluginKey)
|
|
1023
|
+
: selectedFunction.key;
|
|
1024
|
+
const selectionLabel = this._context === 'buildingBlock'
|
|
1025
|
+
? 'choosePluginDefinition'
|
|
1026
|
+
: 'choosePluginConfiguration';
|
|
1027
|
+
const selectedPluginLabel = this.getSelectedPluginLabel(selectedConfiguration, selectedDefinition);
|
|
680
1028
|
if (hasOneType) {
|
|
681
1029
|
this._steps$.next([
|
|
682
|
-
{ label:
|
|
1030
|
+
{ label: selectionLabel, secondaryLabel: selectedPluginLabel },
|
|
683
1031
|
{ label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
|
|
684
1032
|
{ label: 'configurePluginAction' },
|
|
685
1033
|
]);
|
|
@@ -690,7 +1038,7 @@ class ProcessLinkStepService {
|
|
|
690
1038
|
else {
|
|
691
1039
|
this._steps$.next([
|
|
692
1040
|
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
|
|
693
|
-
{ label:
|
|
1041
|
+
{ label: selectionLabel, secondaryLabel: selectedPluginLabel },
|
|
694
1042
|
{ label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
|
|
695
1043
|
{ label: 'configurePluginAction' },
|
|
696
1044
|
]);
|
|
@@ -700,6 +1048,72 @@ class ProcessLinkStepService {
|
|
|
700
1048
|
}
|
|
701
1049
|
});
|
|
702
1050
|
}
|
|
1051
|
+
setBuildingBlockSteps() {
|
|
1052
|
+
this._hasOneProcessLinkType$.pipe(take(1)).subscribe(hasOneType => {
|
|
1053
|
+
this._steps$.next([
|
|
1054
|
+
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.building-block' },
|
|
1055
|
+
{ label: 'selectBuildingBlock' },
|
|
1056
|
+
{ label: 'configureBuildingBlockPlugins', disabled: true },
|
|
1057
|
+
{ label: 'configureBuildingBlockMappings', disabled: true },
|
|
1058
|
+
]);
|
|
1059
|
+
this._currentStepIndex$.next(hasOneType ? 0 : 1);
|
|
1060
|
+
this.buttonService.showBackButton();
|
|
1061
|
+
this.buttonService.showNextButton();
|
|
1062
|
+
this.buttonService.hideSaveButton();
|
|
1063
|
+
this.buttonService.disableNextButton();
|
|
1064
|
+
});
|
|
1065
|
+
}
|
|
1066
|
+
setConfigureBuildingBlockPluginsStep(selectionLabel) {
|
|
1067
|
+
this._hasOneProcessLinkType$.pipe(take(1)).subscribe(hasOneType => {
|
|
1068
|
+
const steps = hasOneType
|
|
1069
|
+
? [
|
|
1070
|
+
{ label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
|
|
1071
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1072
|
+
{ label: 'configureBuildingBlockMappings', disabled: true },
|
|
1073
|
+
]
|
|
1074
|
+
: [
|
|
1075
|
+
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.building-block' },
|
|
1076
|
+
{ label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
|
|
1077
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1078
|
+
{ label: 'configureBuildingBlockMappings', disabled: true },
|
|
1079
|
+
];
|
|
1080
|
+
this._steps$.next(steps);
|
|
1081
|
+
this._currentStepIndex$.next(hasOneType ? 1 : 2);
|
|
1082
|
+
this.buttonService.showNextButton();
|
|
1083
|
+
this.buttonService.hideSaveButton();
|
|
1084
|
+
this.buttonService.disableNextButton();
|
|
1085
|
+
this.buttonService.showBackButton();
|
|
1086
|
+
});
|
|
1087
|
+
}
|
|
1088
|
+
setConfigureBuildingBlockMappingsStep(selectionLabel) {
|
|
1089
|
+
this._hasOneProcessLinkType$.pipe(take(1)).subscribe(hasOneType => {
|
|
1090
|
+
const steps = hasOneType
|
|
1091
|
+
? [
|
|
1092
|
+
{ label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
|
|
1093
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1094
|
+
{ label: 'configureBuildingBlockMappings' },
|
|
1095
|
+
]
|
|
1096
|
+
: [
|
|
1097
|
+
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.building-block' },
|
|
1098
|
+
{ label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
|
|
1099
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1100
|
+
{ label: 'configureBuildingBlockMappings' },
|
|
1101
|
+
];
|
|
1102
|
+
this._steps$.next(steps);
|
|
1103
|
+
this._currentStepIndex$.next(hasOneType ? 2 : 3);
|
|
1104
|
+
this.buttonService.hideNextButton();
|
|
1105
|
+
this.buttonService.showSaveButton();
|
|
1106
|
+
this.buttonService.disableSaveButton();
|
|
1107
|
+
this.buttonService.showBackButton();
|
|
1108
|
+
});
|
|
1109
|
+
}
|
|
1110
|
+
updateBuildingBlockSelectionStepLabel(label) {
|
|
1111
|
+
const steps = this._steps$.getValue();
|
|
1112
|
+
if (!steps?.length)
|
|
1113
|
+
return;
|
|
1114
|
+
const updatedSteps = steps.map(step => step.label === 'selectBuildingBlock' ? { ...step, secondaryLabel: label } : step);
|
|
1115
|
+
this._steps$.next(updatedSteps);
|
|
1116
|
+
}
|
|
703
1117
|
setURLSteps() {
|
|
704
1118
|
this._steps$.next([
|
|
705
1119
|
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.url' },
|
|
@@ -757,6 +1171,9 @@ class ProcessLinkStepService {
|
|
|
757
1171
|
this.buttonService.showNextButton();
|
|
758
1172
|
}
|
|
759
1173
|
break;
|
|
1174
|
+
case 'building-block':
|
|
1175
|
+
this.setBuildingBlockSteps();
|
|
1176
|
+
break;
|
|
760
1177
|
case 'url':
|
|
761
1178
|
if (hasOneOption) {
|
|
762
1179
|
this.setSingleURLStep();
|
|
@@ -784,15 +1201,133 @@ class ProcessLinkStepService {
|
|
|
784
1201
|
]);
|
|
785
1202
|
this._currentStepIndex$.next(0);
|
|
786
1203
|
}
|
|
787
|
-
|
|
788
|
-
|
|
1204
|
+
getSelectedPluginLabel(selectedConfiguration, selectedDefinition) {
|
|
1205
|
+
if (this._context === 'buildingBlock') {
|
|
1206
|
+
const definitionKey = selectedDefinition?.key || selectedConfiguration?.pluginDefinition?.key;
|
|
1207
|
+
return definitionKey ? this.pluginTranslateService.instant('title', definitionKey) : '';
|
|
1208
|
+
}
|
|
1209
|
+
return selectedConfiguration?.title || '';
|
|
1210
|
+
}
|
|
1211
|
+
setContext(context) {
|
|
1212
|
+
this._context = context;
|
|
1213
|
+
}
|
|
1214
|
+
/**
|
|
1215
|
+
* Initialize steps for editing an existing process link.
|
|
1216
|
+
* Sets up configuration steps only (skipping type selection since type can't be changed).
|
|
1217
|
+
* Navigates to the final step.
|
|
1218
|
+
*/
|
|
1219
|
+
initializeEditModeSteps(processLinkType) {
|
|
1220
|
+
switch (processLinkType) {
|
|
1221
|
+
case 'form':
|
|
1222
|
+
// Single step for form - just the form selection
|
|
1223
|
+
this._steps$.next([{ label: 'selectForm' }]);
|
|
1224
|
+
this._currentStepIndex$.next(0);
|
|
1225
|
+
break;
|
|
1226
|
+
case 'form-flow':
|
|
1227
|
+
// Single step for form-flow - just the form flow selection
|
|
1228
|
+
this._steps$.next([{ label: 'selectFormFlow' }]);
|
|
1229
|
+
this._currentStepIndex$.next(0);
|
|
1230
|
+
break;
|
|
1231
|
+
case 'plugin':
|
|
1232
|
+
const selectionLabel = this._context === 'buildingBlock' ? 'choosePluginDefinition' : 'choosePluginConfiguration';
|
|
1233
|
+
// Plugin has 3 config steps: select config, select action, configure action
|
|
1234
|
+
this._steps$.next([
|
|
1235
|
+
{ label: selectionLabel },
|
|
1236
|
+
{ label: 'choosePluginAction' },
|
|
1237
|
+
{ label: 'configurePluginAction' },
|
|
1238
|
+
]);
|
|
1239
|
+
this._currentStepIndex$.next(2); // Start at last step
|
|
1240
|
+
break;
|
|
1241
|
+
case 'building-block':
|
|
1242
|
+
// Building block has 3 config steps: select BB, configure plugins, configure mappings
|
|
1243
|
+
this._steps$.next([
|
|
1244
|
+
{ label: 'selectBuildingBlock' },
|
|
1245
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1246
|
+
{ label: 'configureBuildingBlockMappings' },
|
|
1247
|
+
]);
|
|
1248
|
+
this._currentStepIndex$.next(2); // Start at last step
|
|
1249
|
+
break;
|
|
1250
|
+
case 'ui-component':
|
|
1251
|
+
// Single step for UI component
|
|
1252
|
+
this._steps$.next([{ label: 'uiComponent' }]);
|
|
1253
|
+
this._currentStepIndex$.next(0);
|
|
1254
|
+
break;
|
|
1255
|
+
case 'url':
|
|
1256
|
+
// Single step for URL
|
|
1257
|
+
this._steps$.next([{ label: 'selectURL' }]);
|
|
1258
|
+
this._currentStepIndex$.next(0);
|
|
1259
|
+
break;
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
/**
|
|
1263
|
+
* Navigate to a specific step by index (for edit mode navigation)
|
|
1264
|
+
*/
|
|
1265
|
+
goToStep(stepIndex) {
|
|
1266
|
+
const steps = this._steps$.getValue();
|
|
1267
|
+
if (steps && stepIndex >= 0 && stepIndex < steps.length) {
|
|
1268
|
+
this._currentStepIndex$.next(stepIndex);
|
|
1269
|
+
}
|
|
1270
|
+
}
|
|
1271
|
+
/**
|
|
1272
|
+
* Navigate to the previous step (for edit mode navigation)
|
|
1273
|
+
* Returns true if navigation was successful, false if already at first step
|
|
1274
|
+
*/
|
|
1275
|
+
goToPreviousStep() {
|
|
1276
|
+
const currentIndex = this._currentStepIndex$.getValue();
|
|
1277
|
+
if (currentIndex > 0) {
|
|
1278
|
+
this._currentStepIndex$.next(currentIndex - 1);
|
|
1279
|
+
return true;
|
|
1280
|
+
}
|
|
1281
|
+
return false;
|
|
1282
|
+
}
|
|
1283
|
+
/**
|
|
1284
|
+
* Navigate to the next step (for edit mode navigation)
|
|
1285
|
+
* Returns true if navigation was successful, false if already at last step
|
|
1286
|
+
*/
|
|
1287
|
+
goToNextStep() {
|
|
1288
|
+
const steps = this._steps$.getValue();
|
|
1289
|
+
const currentIndex = this._currentStepIndex$.getValue();
|
|
1290
|
+
if (steps && currentIndex < steps.length - 1) {
|
|
1291
|
+
this._currentStepIndex$.next(currentIndex + 1);
|
|
1292
|
+
return true;
|
|
1293
|
+
}
|
|
1294
|
+
return false;
|
|
1295
|
+
}
|
|
1296
|
+
/**
|
|
1297
|
+
* Check if currently at the first step
|
|
1298
|
+
*/
|
|
1299
|
+
isFirstStep() {
|
|
1300
|
+
return this._currentStepIndex$.getValue() === 0;
|
|
1301
|
+
}
|
|
1302
|
+
/**
|
|
1303
|
+
* Check if currently at the last step
|
|
1304
|
+
*/
|
|
1305
|
+
isLastStep() {
|
|
1306
|
+
const steps = this._steps$.getValue();
|
|
1307
|
+
const currentIndex = this._currentStepIndex$.getValue();
|
|
1308
|
+
return steps ? currentIndex === steps.length - 1 : false;
|
|
1309
|
+
}
|
|
1310
|
+
/**
|
|
1311
|
+
* Get the total number of steps
|
|
1312
|
+
*/
|
|
1313
|
+
getStepCount() {
|
|
1314
|
+
return this._steps$.getValue()?.length || 0;
|
|
1315
|
+
}
|
|
1316
|
+
/**
|
|
1317
|
+
* Get the current step index
|
|
1318
|
+
*/
|
|
1319
|
+
getCurrentStepIndex() {
|
|
1320
|
+
return this._currentStepIndex$.getValue();
|
|
1321
|
+
}
|
|
1322
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStepService, deps: [{ token: i3.TranslateService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: i1$1.PluginTranslationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1323
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStepService, providedIn: 'root' }); }
|
|
789
1324
|
}
|
|
790
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1325
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStepService, decorators: [{
|
|
791
1326
|
type: Injectable,
|
|
792
1327
|
args: [{
|
|
793
1328
|
providedIn: 'root',
|
|
794
1329
|
}]
|
|
795
|
-
}], ctorParameters: () => [{ type:
|
|
1330
|
+
}], ctorParameters: () => [{ type: i3.TranslateService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: i1$1.PluginTranslationService }] });
|
|
796
1331
|
|
|
797
1332
|
/*
|
|
798
1333
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -826,17 +1361,22 @@ class ProcessLinkStateService {
|
|
|
826
1361
|
return this._elementName$.asObservable();
|
|
827
1362
|
}
|
|
828
1363
|
get availableProcessLinkTypes$() {
|
|
829
|
-
return this._availableProcessLinkTypes
|
|
1364
|
+
return combineLatest([this._availableProcessLinkTypes$, this._context$]).pipe(map(([types, context]) => (!this.formCustomComponentConfig
|
|
830
1365
|
? types.map(type => ({
|
|
831
1366
|
...type,
|
|
832
1367
|
enabled: type.processLinkType === 'ui-component' ? false : type.enabled,
|
|
833
1368
|
}))
|
|
834
|
-
: types)
|
|
1369
|
+
: types)
|
|
1370
|
+
.filter(type => type.processLinkType !== 'url')
|
|
1371
|
+
.map(type => context === 'buildingBlock' &&
|
|
1372
|
+
UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK.includes(type.processLinkType)
|
|
1373
|
+
? { ...type, enabled: false }
|
|
1374
|
+
: type)));
|
|
835
1375
|
}
|
|
836
1376
|
get hideProgressIndicator$() {
|
|
837
1377
|
return this._availableProcessLinkTypes$
|
|
838
1378
|
.asObservable()
|
|
839
|
-
.pipe(map
|
|
1379
|
+
.pipe(map(availableTypes => Array.isArray(availableTypes) &&
|
|
840
1380
|
availableTypes.length === 1 &&
|
|
841
1381
|
(availableTypes[0]?.processLinkType === 'form' ||
|
|
842
1382
|
availableTypes[0]?.processLinkType === 'form-flow')));
|
|
@@ -854,10 +1394,7 @@ class ProcessLinkStateService {
|
|
|
854
1394
|
return this._selectedProcessLink$.asObservable();
|
|
855
1395
|
}
|
|
856
1396
|
get typeOfSelectedProcessLink$() {
|
|
857
|
-
return this.selectedProcessLink$.pipe(map
|
|
858
|
-
}
|
|
859
|
-
get processLinkEditMode() {
|
|
860
|
-
return this._processLinkEditMode$.getValue();
|
|
1397
|
+
return this.selectedProcessLink$.pipe(map(processLink => processLink?.processLinkType || ''));
|
|
861
1398
|
}
|
|
862
1399
|
get viewModelEnabled$() {
|
|
863
1400
|
return this._viewModelEnabled$.asObservable();
|
|
@@ -865,10 +1402,17 @@ class ProcessLinkStateService {
|
|
|
865
1402
|
get url$() {
|
|
866
1403
|
return this._url$.asObservable();
|
|
867
1404
|
}
|
|
868
|
-
|
|
1405
|
+
get context$() {
|
|
1406
|
+
return this._context$.asObservable();
|
|
1407
|
+
}
|
|
1408
|
+
get isEditing$() {
|
|
1409
|
+
return this._isEditing$.asObservable();
|
|
1410
|
+
}
|
|
1411
|
+
constructor(processLinkStepService, buttonService, pluginStateService, buildingBlockStateService, formCustomComponentConfig) {
|
|
869
1412
|
this.processLinkStepService = processLinkStepService;
|
|
870
1413
|
this.buttonService = buttonService;
|
|
871
1414
|
this.pluginStateService = pluginStateService;
|
|
1415
|
+
this.buildingBlockStateService = buildingBlockStateService;
|
|
872
1416
|
this.formCustomComponentConfig = formCustomComponentConfig;
|
|
873
1417
|
this._showModal$ = new BehaviorSubject(false);
|
|
874
1418
|
this._availableProcessLinkTypes$ = new BehaviorSubject([]);
|
|
@@ -879,14 +1423,18 @@ class ProcessLinkStateService {
|
|
|
879
1423
|
this._saving$ = new BehaviorSubject(false);
|
|
880
1424
|
this._modalParams$ = new BehaviorSubject(undefined);
|
|
881
1425
|
this._selectedProcessLink$ = new BehaviorSubject(undefined);
|
|
882
|
-
this.
|
|
1426
|
+
this._isEditing$ = new BehaviorSubject(false);
|
|
883
1427
|
this._processLinkUpdateEvents$ = new Subject();
|
|
884
1428
|
this._processLinkCreateEvents$ = new Subject();
|
|
885
1429
|
this._processLinkDeleteEvents$ = new Subject();
|
|
1430
|
+
this._context$ = new BehaviorSubject('independent');
|
|
886
1431
|
this.openAvailableProcessLinkTypesSubscription();
|
|
1432
|
+
this.openEditModeNavigationSubscriptions();
|
|
887
1433
|
}
|
|
888
1434
|
ngOnDestroy() {
|
|
889
1435
|
this._availableProcessLinkTypesSubscription?.unsubscribe();
|
|
1436
|
+
this._backButtonSubscription?.unsubscribe();
|
|
1437
|
+
this._nextButtonSubscription?.unsubscribe();
|
|
890
1438
|
}
|
|
891
1439
|
setAvailableProcessLinkTypes(processLinkTypes) {
|
|
892
1440
|
const hasOneOption = processLinkTypes.length === 1;
|
|
@@ -934,20 +1482,28 @@ class ProcessLinkStateService {
|
|
|
934
1482
|
setModalParams(params) {
|
|
935
1483
|
this._modalParams$.next(params);
|
|
936
1484
|
}
|
|
1485
|
+
setContext(context) {
|
|
1486
|
+
this._context$.next(context);
|
|
1487
|
+
this.processLinkStepService.setContext(context);
|
|
1488
|
+
}
|
|
937
1489
|
selectProcessLink(processLink) {
|
|
938
1490
|
if (!processLink)
|
|
939
1491
|
return;
|
|
940
1492
|
this._selectedProcessLink$.next(processLink);
|
|
1493
|
+
this._isEditing$.next(true);
|
|
941
1494
|
this.pluginStateService.selectProcessLink(processLink);
|
|
1495
|
+
this.buildingBlockStateService.setProcessLink(processLink);
|
|
942
1496
|
this.setViewModelEnabled(processLink.viewModelEnabled ?? false);
|
|
943
1497
|
this._url$.next(processLink.url ?? '');
|
|
1498
|
+
// Initialize stepper for editing mode - navigate to last step
|
|
1499
|
+
this.processLinkStepService.initializeEditModeSteps(processLink.processLinkType);
|
|
1500
|
+
// Set button visibility based on current step position
|
|
1501
|
+
this.updateButtonsForCurrentStep();
|
|
944
1502
|
}
|
|
945
1503
|
deselectProcessLink() {
|
|
946
1504
|
this._selectedProcessLink$.next(undefined);
|
|
947
1505
|
this.pluginStateService.deselectProcessLink();
|
|
948
|
-
|
|
949
|
-
setEditMode(editMode) {
|
|
950
|
-
this._processLinkEditMode$.next(editMode);
|
|
1506
|
+
this.resetBuildingBlockState();
|
|
951
1507
|
}
|
|
952
1508
|
sendProcessLinkUpdateEvent(event) {
|
|
953
1509
|
this._processLinkUpdateEvents$.next(event);
|
|
@@ -965,6 +1521,59 @@ class ProcessLinkStateService {
|
|
|
965
1521
|
}
|
|
966
1522
|
});
|
|
967
1523
|
}
|
|
1524
|
+
openEditModeNavigationSubscriptions() {
|
|
1525
|
+
// Handle back button in edit mode
|
|
1526
|
+
this._backButtonSubscription = this.buttonService.backButtonClick$.subscribe(() => {
|
|
1527
|
+
if (this._isEditing$.getValue()) {
|
|
1528
|
+
this.navigateBackInEditMode();
|
|
1529
|
+
}
|
|
1530
|
+
});
|
|
1531
|
+
// Handle next button in edit mode
|
|
1532
|
+
this._nextButtonSubscription = this.buttonService.nextButtonClick$.subscribe(() => {
|
|
1533
|
+
if (this._isEditing$.getValue()) {
|
|
1534
|
+
this.navigateForwardInEditMode();
|
|
1535
|
+
}
|
|
1536
|
+
});
|
|
1537
|
+
}
|
|
1538
|
+
navigateBackInEditMode() {
|
|
1539
|
+
const navigated = this.processLinkStepService.goToPreviousStep();
|
|
1540
|
+
if (navigated) {
|
|
1541
|
+
this.updateButtonsForCurrentStep();
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1544
|
+
navigateForwardInEditMode() {
|
|
1545
|
+
const navigated = this.processLinkStepService.goToNextStep();
|
|
1546
|
+
if (navigated) {
|
|
1547
|
+
this.updateButtonsForCurrentStep();
|
|
1548
|
+
}
|
|
1549
|
+
}
|
|
1550
|
+
updateButtonsForCurrentStep() {
|
|
1551
|
+
const isFirstStep = this.processLinkStepService.isFirstStep();
|
|
1552
|
+
const isLastStep = this.processLinkStepService.isLastStep();
|
|
1553
|
+
// Back button visibility
|
|
1554
|
+
if (isFirstStep) {
|
|
1555
|
+
this.buttonService.hideBackButton();
|
|
1556
|
+
}
|
|
1557
|
+
else {
|
|
1558
|
+
this.buttonService.showBackButton();
|
|
1559
|
+
}
|
|
1560
|
+
// Next/Save button visibility
|
|
1561
|
+
if (isLastStep) {
|
|
1562
|
+
this.buttonService.hideNextButton();
|
|
1563
|
+
this.buttonService.showSaveButton();
|
|
1564
|
+
}
|
|
1565
|
+
else {
|
|
1566
|
+
this.buttonService.showNextButton();
|
|
1567
|
+
this.buttonService.enableNextButton();
|
|
1568
|
+
this.buttonService.hideSaveButton();
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
isBuildingBlockContext() {
|
|
1572
|
+
return this._context$.getValue() === 'buildingBlock';
|
|
1573
|
+
}
|
|
1574
|
+
resetBuildingBlockState() {
|
|
1575
|
+
this.buildingBlockStateService.reset();
|
|
1576
|
+
}
|
|
968
1577
|
reset() {
|
|
969
1578
|
this.setAvailableProcessLinkTypes([]);
|
|
970
1579
|
this.processLinkStepService.reset();
|
|
@@ -972,16 +1581,18 @@ class ProcessLinkStateService {
|
|
|
972
1581
|
this.buttonService.resetButtons();
|
|
973
1582
|
this.clearSelectedProcessLinkType();
|
|
974
1583
|
this.deselectProcessLink();
|
|
1584
|
+
this.resetBuildingBlockState();
|
|
1585
|
+
this._isEditing$.next(false);
|
|
975
1586
|
}
|
|
976
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
977
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1587
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStateService, deps: [{ token: ProcessLinkStepService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: BuildingBlockStateService }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1588
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStateService, providedIn: 'root' }); }
|
|
978
1589
|
}
|
|
979
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1590
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStateService, decorators: [{
|
|
980
1591
|
type: Injectable,
|
|
981
1592
|
args: [{
|
|
982
1593
|
providedIn: 'root',
|
|
983
1594
|
}]
|
|
984
|
-
}], ctorParameters: () => [{ type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: undefined, decorators: [{
|
|
1595
|
+
}], ctorParameters: () => [{ type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: BuildingBlockStateService }, { type: undefined, decorators: [{
|
|
985
1596
|
type: Optional
|
|
986
1597
|
}, {
|
|
987
1598
|
type: Inject,
|
|
@@ -1015,10 +1626,10 @@ class FormFlowComponentService {
|
|
|
1015
1626
|
setSupportedComponents(supportedComponents) {
|
|
1016
1627
|
this._supportedComponents$.next(supportedComponents);
|
|
1017
1628
|
}
|
|
1018
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1019
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1629
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponentService, deps: [{ token: FORM_FLOW_COMPONENT_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1630
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponentService, providedIn: 'root' }); }
|
|
1020
1631
|
}
|
|
1021
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1632
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponentService, decorators: [{
|
|
1022
1633
|
type: Injectable,
|
|
1023
1634
|
args: [{
|
|
1024
1635
|
providedIn: 'root',
|
|
@@ -1052,10 +1663,10 @@ class UrlResolverService {
|
|
|
1052
1663
|
});
|
|
1053
1664
|
return resolvingUrl;
|
|
1054
1665
|
}
|
|
1055
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1056
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1666
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1667
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlResolverService }); }
|
|
1057
1668
|
}
|
|
1058
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1669
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlResolverService, decorators: [{
|
|
1059
1670
|
type: Injectable
|
|
1060
1671
|
}] });
|
|
1061
1672
|
|
|
@@ -1075,10 +1686,10 @@ class UrlValidatorService {
|
|
|
1075
1686
|
}
|
|
1076
1687
|
};
|
|
1077
1688
|
}
|
|
1078
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1079
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.
|
|
1689
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlValidatorService, deps: [{ token: UrlResolverService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1690
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlValidatorService }); }
|
|
1080
1691
|
}
|
|
1081
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1692
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlValidatorService, decorators: [{
|
|
1082
1693
|
type: Injectable
|
|
1083
1694
|
}], ctorParameters: () => [{ type: UrlResolverService }] });
|
|
1084
1695
|
|
|
@@ -1114,21 +1725,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
1114
1725
|
* limitations under the License.
|
|
1115
1726
|
*/
|
|
1116
1727
|
class SelectPluginConfigurationComponent {
|
|
1117
|
-
constructor(pluginManagementService, pluginStateService, pluginService, stateService, buttonService, stepService) {
|
|
1728
|
+
constructor(pluginManagementService, pluginStateService, pluginService, stateService, buttonService, stepService, pluginTranslationService) {
|
|
1118
1729
|
this.pluginManagementService = pluginManagementService;
|
|
1119
1730
|
this.pluginStateService = pluginStateService;
|
|
1120
1731
|
this.pluginService = pluginService;
|
|
1121
1732
|
this.stateService = stateService;
|
|
1122
1733
|
this.buttonService = buttonService;
|
|
1123
1734
|
this.stepService = stepService;
|
|
1124
|
-
this.
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
this.
|
|
1129
|
-
]).pipe(
|
|
1735
|
+
this.pluginTranslationService = pluginTranslationService;
|
|
1736
|
+
this.isBuildingBlockContext$ = this.stateService.context$.pipe(map$1(context => context === 'buildingBlock'));
|
|
1737
|
+
this.listItems$ = combineLatest([
|
|
1738
|
+
this.isBuildingBlockContext$,
|
|
1739
|
+
this.stateService.modalParams$,
|
|
1740
|
+
]).pipe(switchMap$1(([isBuildingBlock, modalData]) => isBuildingBlock
|
|
1741
|
+
? combineLatest([
|
|
1742
|
+
this.pluginManagementService.getPluginDefinitions(modalData?.element?.activityListenerType),
|
|
1743
|
+
this.pluginService.pluginSpecifications$,
|
|
1744
|
+
]).pipe(map$1(([definitions, specs]) => {
|
|
1745
|
+
const limitedDefinitions = definitions?.filter(definition => specs.some(spec => spec.pluginId === definition.key)) ?? [];
|
|
1746
|
+
const enriched = limitedDefinitions.map(definition => {
|
|
1747
|
+
const spec = specs.find(item => item.pluginId === definition.key);
|
|
1748
|
+
return {
|
|
1749
|
+
id: definition.key,
|
|
1750
|
+
title: this.pluginTranslationService.instant('title', definition.key) ||
|
|
1751
|
+
definition.title,
|
|
1752
|
+
description: this.pluginTranslationService.instant('description', definition.key) ||
|
|
1753
|
+
definition.description,
|
|
1754
|
+
logo: spec?.pluginLogoBase64 ?? null,
|
|
1755
|
+
payload: definition.key,
|
|
1756
|
+
isDefinition: true,
|
|
1757
|
+
};
|
|
1758
|
+
});
|
|
1759
|
+
this.pluginDefinitionsCache = limitedDefinitions;
|
|
1760
|
+
return enriched;
|
|
1761
|
+
}))
|
|
1762
|
+
: combineLatest([
|
|
1763
|
+
modalData?.element?.type
|
|
1764
|
+
? this.pluginManagementService.getAllPluginConfigurationsWithLogos(modalData?.element?.activityListenerType)
|
|
1765
|
+
: of(undefined),
|
|
1766
|
+
this.pluginService.availablePluginIds$,
|
|
1767
|
+
]).pipe(map$1(([configs, availablePluginIds]) => configs
|
|
1768
|
+
?.filter(configuration => availablePluginIds.includes(configuration.pluginDefinition.key))
|
|
1769
|
+
?.map(configuration => ({
|
|
1770
|
+
id: configuration.id ?? configuration.title,
|
|
1771
|
+
title: configuration.title,
|
|
1772
|
+
description: this.pluginTranslationService.instant('description', configuration.pluginDefinition.key),
|
|
1773
|
+
logo: configuration.pluginLogoBase64 ?? null,
|
|
1774
|
+
payload: configuration,
|
|
1775
|
+
isDefinition: false,
|
|
1776
|
+
}))))));
|
|
1777
|
+
this.pageHeaderText$ = this.isBuildingBlockContext$.pipe(map$1(isBuildingBlock => isBuildingBlock
|
|
1778
|
+
? 'processLinkConfiguration.choosePluginDefinitionDescription'
|
|
1779
|
+
: 'processLinkConfiguration.choosePluginConfigurationDescription'));
|
|
1780
|
+
this.columnHeaderText$ = this.isBuildingBlockContext$.pipe(map$1(isBuildingBlock => isBuildingBlock
|
|
1781
|
+
? 'pluginManagement.labels.pluginName'
|
|
1782
|
+
: 'pluginManagement.labels.configurationName'));
|
|
1130
1783
|
this.selectedPluginConfiguration$ = this.pluginStateService.selectedPluginConfiguration$;
|
|
1784
|
+
this.selectedPluginDefinition$ = this.pluginStateService.selectedPluginDefinition$;
|
|
1131
1785
|
this._subscriptions = new Subscription();
|
|
1786
|
+
this.pluginDefinitionsCache = [];
|
|
1132
1787
|
}
|
|
1133
1788
|
ngOnInit() {
|
|
1134
1789
|
this.openBackButtonSubscription();
|
|
@@ -1138,30 +1793,53 @@ class SelectPluginConfigurationComponent {
|
|
|
1138
1793
|
this._subscriptions.unsubscribe();
|
|
1139
1794
|
}
|
|
1140
1795
|
selected(event) {
|
|
1141
|
-
this.
|
|
1142
|
-
|
|
1796
|
+
this.isBuildingBlockContext$.pipe(take(1)).subscribe(isBuildingBlock => {
|
|
1797
|
+
if (isBuildingBlock) {
|
|
1798
|
+
const definitionKey = event.value;
|
|
1799
|
+
const definition = this.pluginDefinitionsCache.find(def => def.key === definitionKey);
|
|
1800
|
+
this.selectDefinition(definition);
|
|
1801
|
+
}
|
|
1802
|
+
else {
|
|
1803
|
+
this.selectConfiguration(event.value);
|
|
1804
|
+
}
|
|
1805
|
+
this.buttonService.enableNextButton();
|
|
1806
|
+
});
|
|
1143
1807
|
}
|
|
1144
1808
|
selectConfiguration(configuration) {
|
|
1145
|
-
|
|
1809
|
+
if (!configuration)
|
|
1810
|
+
return;
|
|
1811
|
+
if (configuration.pluginDefinition) {
|
|
1812
|
+
this.pluginStateService.selectPluginDefinition(configuration.pluginDefinition);
|
|
1813
|
+
}
|
|
1146
1814
|
this.pluginStateService.selectPluginConfiguration(configuration);
|
|
1147
1815
|
}
|
|
1816
|
+
selectDefinition(definition) {
|
|
1817
|
+
if (!definition)
|
|
1818
|
+
return;
|
|
1819
|
+
this.pluginStateService.selectPluginDefinition(definition);
|
|
1820
|
+
this.pluginStateService.selectPluginConfiguration(undefined);
|
|
1821
|
+
}
|
|
1148
1822
|
openBackButtonSubscription() {
|
|
1149
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
1823
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
1824
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
1825
|
+
.subscribe(() => {
|
|
1150
1826
|
this.stateService.setInitial();
|
|
1151
1827
|
}));
|
|
1152
1828
|
}
|
|
1153
1829
|
openNextButtonSubscription() {
|
|
1154
|
-
this._subscriptions.add(this.buttonService.nextButtonClick
|
|
1830
|
+
this._subscriptions.add(this.buttonService.nextButtonClick$
|
|
1831
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
1832
|
+
.subscribe(() => {
|
|
1155
1833
|
this.stepService.setChoosePluginActionSteps();
|
|
1156
1834
|
}));
|
|
1157
1835
|
}
|
|
1158
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1159
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
1836
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginConfigurationComponent, deps: [{ token: i1$1.PluginManagementService }, { token: PluginStateService }, { token: i1$1.PluginService }, { token: ProcessLinkStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: i1$1.PluginTranslationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1837
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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=\"listItems$ | async as items; else loading\">\n <p class=\"step-description\">\n {{ pageHeaderText$ | async | 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 {{ columnHeaderText$ | async | 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 *ngFor=\"let item of items\" [value]=\"item.payload\">\n <cds-list-column>\n <div *ngIf=\"item.logo\">\n <img [src]=\"item.logo\" [title]=\"item.title\" class=\"plugin-configuration-logo\" />\n </div>\n </cds-list-column>\n <cds-list-column>{{ item.title }}</cds-list-column>\n <cds-list-column>{{ item.description }}</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}.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$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i3$2.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i3$2.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i3$2.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i3$2.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
1160
1838
|
}
|
|
1161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1839
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginConfigurationComponent, decorators: [{
|
|
1162
1840
|
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=\"
|
|
1164
|
-
}], ctorParameters: () => [{ type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: i1$1.PluginService }, { type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }] });
|
|
1841
|
+
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=\"listItems$ | async as items; else loading\">\n <p class=\"step-description\">\n {{ pageHeaderText$ | async | 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 {{ columnHeaderText$ | async | 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 *ngFor=\"let item of items\" [value]=\"item.payload\">\n <cds-list-column>\n <div *ngIf=\"item.logo\">\n <img [src]=\"item.logo\" [title]=\"item.title\" class=\"plugin-configuration-logo\" />\n </div>\n </cds-list-column>\n <cds-list-column>{{ item.title }}</cds-list-column>\n <cds-list-column>{{ item.description }}</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}.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"] }]
|
|
1842
|
+
}], ctorParameters: () => [{ type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: i1$1.PluginService }, { type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: i1$1.PluginTranslationService }] });
|
|
1165
1843
|
|
|
1166
1844
|
/*
|
|
1167
1845
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -1214,20 +1892,22 @@ class SelectPluginActionComponent {
|
|
|
1214
1892
|
}
|
|
1215
1893
|
openBackButtonSubscription() {
|
|
1216
1894
|
this.buttonService.backButtonClick$
|
|
1217
|
-
.pipe(switchMap$1(() => this.stepService.hasOneProcessLinkType$), take(1))
|
|
1895
|
+
.pipe(withLatestFrom(this.processLinkStateService.isEditing$), filter$1(([, isEditing]) => !isEditing), switchMap$1(() => this.stepService.hasOneProcessLinkType$), take(1))
|
|
1218
1896
|
.subscribe((hasOneOption) => {
|
|
1219
1897
|
this.stepService.setProcessLinkTypeSteps('plugin', hasOneOption);
|
|
1220
1898
|
});
|
|
1221
1899
|
}
|
|
1222
1900
|
openNextButtonSubscription() {
|
|
1223
|
-
this._subscriptions.add(this.buttonService.nextButtonClick
|
|
1901
|
+
this._subscriptions.add(this.buttonService.nextButtonClick$
|
|
1902
|
+
.pipe(withLatestFrom(this.processLinkStateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
1903
|
+
.subscribe(() => {
|
|
1224
1904
|
this.stepService.setConfigurePluginActionSteps();
|
|
1225
1905
|
}));
|
|
1226
1906
|
}
|
|
1227
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1228
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
1907
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginActionComponent, deps: [{ token: ProcessLinkButtonService }, { token: i1$1.PluginManagementService }, { token: PluginStateService }, { token: ProcessLinkStepService }, { token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1908
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i3$2.SelectionTile, selector: "cds-selection-tile, ibm-selection-tile", inputs: ["theme", "id", "selected", "value", "disabled"], outputs: ["change"] }, { kind: "component", type: i3$2.TileGroup, selector: "cds-tile-group, ibm-tile-group", inputs: ["name", "multiple", "legend"], outputs: ["selected"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1$1.PluginTranslatePipe, name: "pluginTranslate" }] }); }
|
|
1229
1909
|
}
|
|
1230
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1910
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginActionComponent, decorators: [{
|
|
1231
1911
|
type: Component,
|
|
1232
1912
|
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
1913
|
}], ctorParameters: () => [{ type: ProcessLinkButtonService }, { type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkStateService }] });
|
|
@@ -1278,7 +1958,7 @@ class ImportPluginConfigurationComponent {
|
|
|
1278
1958
|
this.processListItems$ = combineLatest([
|
|
1279
1959
|
this._compatiblePluginProcessLinksSubject$,
|
|
1280
1960
|
this.process.valueChanges.pipe(startWith('')),
|
|
1281
|
-
]).pipe(map
|
|
1961
|
+
]).pipe(map(([compatibleProcessLinks, processValue]) => compatibleProcessLinks?.map(compatibleProcessLink => ({
|
|
1282
1962
|
content: compatibleProcessLink.processDefinitionKey,
|
|
1283
1963
|
selected: processValue === compatibleProcessLink.processDefinitionKey,
|
|
1284
1964
|
})) || []));
|
|
@@ -1286,7 +1966,7 @@ class ImportPluginConfigurationComponent {
|
|
|
1286
1966
|
this._compatiblePluginProcessLinksSubject$,
|
|
1287
1967
|
this.process.valueChanges.pipe(startWith('')),
|
|
1288
1968
|
this.version.valueChanges.pipe(startWith('')),
|
|
1289
|
-
]).pipe(map
|
|
1969
|
+
]).pipe(map(([compatibleProcessLinks, processValue, versionValue]) => !processValue
|
|
1290
1970
|
? []
|
|
1291
1971
|
: compatibleProcessLinks
|
|
1292
1972
|
.find(compatibleLinks => compatibleLinks.processDefinitionKey === processValue)
|
|
@@ -1300,7 +1980,7 @@ class ImportPluginConfigurationComponent {
|
|
|
1300
1980
|
this.process.valueChanges.pipe(startWith('')),
|
|
1301
1981
|
this.version.valueChanges.pipe(startWith('')),
|
|
1302
1982
|
this.activity.valueChanges.pipe(startWith('')),
|
|
1303
|
-
]).pipe(map
|
|
1983
|
+
]).pipe(map(([compatibleProcessLinks, processValue, versionValue, activityValue]) => !processValue || !versionValue
|
|
1304
1984
|
? []
|
|
1305
1985
|
: compatibleProcessLinks
|
|
1306
1986
|
.find(compatibleLinks => compatibleLinks.processDefinitionKey === processValue)
|
|
@@ -1341,13 +2021,13 @@ class ImportPluginConfigurationComponent {
|
|
|
1341
2021
|
activitySelected(event) {
|
|
1342
2022
|
this.activity.setValue(event?.item?.content);
|
|
1343
2023
|
}
|
|
1344
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1345
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
2024
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ImportPluginConfigurationComponent, deps: [{ token: i1$2.FormBuilder }, { token: ProcessLinkService }, { token: i3$2.IconService }, { token: i2$1.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2025
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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: i3$2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i3$2.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: i3$2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i3$2.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i3$2.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i3$2.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "directive", type: i2$1.RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
1346
2026
|
}
|
|
1347
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2027
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ImportPluginConfigurationComponent, decorators: [{
|
|
1348
2028
|
type: Component,
|
|
1349
2029
|
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:
|
|
2030
|
+
}], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: ProcessLinkService }, { type: i3$2.IconService }, { type: i2$1.CdsThemeService }], propDecorators: { pluginActionKey: [{
|
|
1351
2031
|
type: Input
|
|
1352
2032
|
}], configurationEvent: [{
|
|
1353
2033
|
type: Output
|
|
@@ -1382,11 +2062,25 @@ class PluginActionConfigurationComponent {
|
|
|
1382
2062
|
this.save$ = this.pluginStateService.save$;
|
|
1383
2063
|
this.saving$ = this.stateService.saving$;
|
|
1384
2064
|
this._prefillConfigurationSubject$ = new BehaviorSubject(null);
|
|
1385
|
-
|
|
2065
|
+
// Only prefill if the action key hasn't changed from what's saved in the process link
|
|
2066
|
+
this._prefillConfiguration$ = combineLatest([
|
|
2067
|
+
this.stateService.selectedProcessLink$,
|
|
2068
|
+
this.pluginStateService.selectedPluginFunction$,
|
|
2069
|
+
]).pipe(map$1(([processLink, selectedFunction]) => {
|
|
2070
|
+
if (!processLink)
|
|
2071
|
+
return undefined;
|
|
2072
|
+
// Only prefill if the action hasn't been changed
|
|
2073
|
+
const savedActionKey = processLink.pluginActionDefinitionKey;
|
|
2074
|
+
const currentActionKey = selectedFunction?.key;
|
|
2075
|
+
if (currentActionKey && savedActionKey !== currentActionKey) {
|
|
2076
|
+
return undefined; // Action changed, don't prefill old configuration
|
|
2077
|
+
}
|
|
2078
|
+
return processLink.actionProperties;
|
|
2079
|
+
}));
|
|
1386
2080
|
this.prefillConfiguration$ = combineLatest([
|
|
1387
2081
|
this._prefillConfigurationSubject$,
|
|
1388
2082
|
this._prefillConfiguration$,
|
|
1389
|
-
]).pipe(map(([prefillConfigurationSubjectValue, prefillConfiguration]) => prefillConfigurationSubjectValue || prefillConfiguration));
|
|
2083
|
+
]).pipe(map$1(([prefillConfigurationSubjectValue, prefillConfiguration]) => prefillConfigurationSubjectValue || prefillConfiguration));
|
|
1390
2084
|
this._subscriptions = new Subscription();
|
|
1391
2085
|
}
|
|
1392
2086
|
ngOnInit() {
|
|
@@ -1417,23 +2111,29 @@ class PluginActionConfigurationComponent {
|
|
|
1417
2111
|
this._prefillConfigurationSubject$.next(configuration);
|
|
1418
2112
|
}
|
|
1419
2113
|
updateProcessLink(configuration) {
|
|
1420
|
-
|
|
2114
|
+
combineLatest([
|
|
2115
|
+
this.stateService.selectedProcessLink$,
|
|
2116
|
+
this.pluginStateService.selectedPluginFunction$,
|
|
2117
|
+
])
|
|
2118
|
+
.pipe(take(1))
|
|
2119
|
+
.subscribe(([selectedProcessLink, selectedFunction]) => {
|
|
2120
|
+
const inferredReferenceType = selectedProcessLink.referenceType ||
|
|
2121
|
+
(selectedProcessLink.pluginDefinitionKey ? 'BUILDING_BLOCK' : 'FIXED');
|
|
2122
|
+
const pluginConfigurationId = inferredReferenceType === 'FIXED'
|
|
2123
|
+
? (selectedProcessLink.pluginConfigurationId ?? '')
|
|
2124
|
+
: undefined;
|
|
2125
|
+
// Use the currently selected function key (user may have changed it)
|
|
2126
|
+
const actionKey = selectedFunction?.key ?? selectedProcessLink.pluginActionDefinitionKey ?? '';
|
|
1421
2127
|
const updateProcessLinkRequest = {
|
|
1422
2128
|
id: selectedProcessLink.id,
|
|
1423
|
-
pluginConfigurationId
|
|
1424
|
-
pluginActionDefinitionKey:
|
|
2129
|
+
pluginConfigurationId,
|
|
2130
|
+
pluginActionDefinitionKey: actionKey,
|
|
1425
2131
|
actionProperties: configuration,
|
|
1426
2132
|
activityId: selectedProcessLink.activityId,
|
|
2133
|
+
referenceType: inferredReferenceType,
|
|
2134
|
+
pluginDefinitionKey: selectedProcessLink.pluginDefinitionKey,
|
|
1427
2135
|
};
|
|
1428
|
-
|
|
1429
|
-
this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
|
|
1430
|
-
return;
|
|
1431
|
-
}
|
|
1432
|
-
this.processLinkService.updateProcessLink(updateProcessLinkRequest).subscribe(() => {
|
|
1433
|
-
this.stateService.closeModal();
|
|
1434
|
-
}, () => {
|
|
1435
|
-
this.stateService.stopSaving();
|
|
1436
|
-
});
|
|
2136
|
+
this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
|
|
1437
2137
|
});
|
|
1438
2138
|
}
|
|
1439
2139
|
saveNewProcessLink(configuration) {
|
|
@@ -1442,31 +2142,41 @@ class PluginActionConfigurationComponent {
|
|
|
1442
2142
|
this.pluginStateService.selectedPluginConfiguration$,
|
|
1443
2143
|
this.pluginStateService.selectedPluginFunction$,
|
|
1444
2144
|
this.stateService.selectedProcessLinkTypeId$,
|
|
2145
|
+
this.pluginStateService.selectedPluginDefinition$,
|
|
1445
2146
|
])
|
|
1446
2147
|
.pipe(take(1))
|
|
1447
|
-
.subscribe(([modalData, selectedConfiguration, selectedFunction, selectedProcessLinkTypeId]) => {
|
|
2148
|
+
.subscribe(([modalData, selectedConfiguration, selectedFunction, selectedProcessLinkTypeId, selectedDefinition,]) => {
|
|
2149
|
+
const isBuildingBlock = this.stateService.isBuildingBlockContext();
|
|
2150
|
+
const pluginDefinitionKey = selectedConfiguration?.pluginDefinition?.key || selectedDefinition?.key;
|
|
2151
|
+
if (!selectedFunction || (isBuildingBlock && !pluginDefinitionKey)) {
|
|
2152
|
+
this.stateService.stopSaving();
|
|
2153
|
+
return;
|
|
2154
|
+
}
|
|
2155
|
+
if (!isBuildingBlock && !selectedConfiguration) {
|
|
2156
|
+
this.stateService.stopSaving();
|
|
2157
|
+
return;
|
|
2158
|
+
}
|
|
2159
|
+
const referenceType = isBuildingBlock
|
|
2160
|
+
? 'BUILDING_BLOCK'
|
|
2161
|
+
: 'FIXED';
|
|
1448
2162
|
const processLinkRequest = {
|
|
1449
2163
|
actionProperties: configuration,
|
|
1450
2164
|
activityId: modalData?.element?.id,
|
|
1451
2165
|
activityType: modalData?.element?.activityListenerType ?? '',
|
|
1452
|
-
pluginConfigurationId: selectedConfiguration
|
|
2166
|
+
pluginConfigurationId: isBuildingBlock ? undefined : selectedConfiguration?.id,
|
|
1453
2167
|
processDefinitionId: modalData?.processDefinitionId,
|
|
1454
2168
|
pluginActionDefinitionKey: selectedFunction.key,
|
|
1455
2169
|
processLinkType: selectedProcessLinkTypeId,
|
|
2170
|
+
referenceType,
|
|
2171
|
+
pluginDefinitionKey,
|
|
1456
2172
|
};
|
|
1457
|
-
|
|
1458
|
-
this.stateService.sendProcessLinkCreateEvent(processLinkRequest);
|
|
1459
|
-
return;
|
|
1460
|
-
}
|
|
1461
|
-
this.processLinkService.saveProcessLink(processLinkRequest).subscribe(() => {
|
|
1462
|
-
this.stateService.closeModal();
|
|
1463
|
-
}, () => {
|
|
1464
|
-
this.stateService.stopSaving();
|
|
1465
|
-
});
|
|
2173
|
+
this.stateService.sendProcessLinkCreateEvent(processLinkRequest);
|
|
1466
2174
|
});
|
|
1467
2175
|
}
|
|
1468
2176
|
openBackButtonSubscription() {
|
|
1469
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
2177
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
2178
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
2179
|
+
.subscribe(() => {
|
|
1470
2180
|
this.stepService.setChoosePluginActionSteps();
|
|
1471
2181
|
}));
|
|
1472
2182
|
}
|
|
@@ -1475,10 +2185,10 @@ class PluginActionConfigurationComponent {
|
|
|
1475
2185
|
this.pluginStateService.save();
|
|
1476
2186
|
}));
|
|
1477
2187
|
}
|
|
1478
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1479
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
2188
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginActionConfigurationComponent, deps: [{ token: ProcessLinkStateService }, { token: PluginStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: ProcessLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2189
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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$1.AsyncPipe, name: "async" }] }); }
|
|
1480
2190
|
}
|
|
1481
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2191
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginActionConfigurationComponent, decorators: [{
|
|
1482
2192
|
type: Component,
|
|
1483
2193
|
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
2194
|
}], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: PluginStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: ProcessLinkService }], propDecorators: { selectedPluginConfiguration$: [{
|
|
@@ -1516,7 +2226,7 @@ class FormLinkProcessDiagramComponent {
|
|
|
1516
2226
|
ngOnInit() {
|
|
1517
2227
|
this.pageTitleService.disableReset();
|
|
1518
2228
|
combineLatest([this.route.queryParams, this.processService.getProcessDefinitions()])
|
|
1519
|
-
.pipe(map(([queryParams, processDefinitions]) => ({ queryParams, processDefinitions })))
|
|
2229
|
+
.pipe(map$1(([queryParams, processDefinitions]) => ({ queryParams, processDefinitions })))
|
|
1520
2230
|
.subscribe(response => {
|
|
1521
2231
|
this.processDefinitions = response.processDefinitions;
|
|
1522
2232
|
if (response.queryParams.process) {
|
|
@@ -1613,13 +2323,13 @@ class FormLinkProcessDiagramComponent {
|
|
|
1613
2323
|
}
|
|
1614
2324
|
this.version = +version;
|
|
1615
2325
|
}
|
|
1616
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1617
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
2326
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormLinkProcessDiagramComponent, deps: [{ token: i1$3.ProcessService }, { token: i3$3.ActivatedRoute }, { token: i2$1.PageTitleService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2327
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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$1.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$1.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i3$2.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: i3$2.Option, selector: "option" }] }); }
|
|
1618
2328
|
}
|
|
1619
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2329
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormLinkProcessDiagramComponent, decorators: [{
|
|
1620
2330
|
type: Component,
|
|
1621
2331
|
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$
|
|
2332
|
+
}], ctorParameters: () => [{ type: i1$3.ProcessService }, { type: i3$3.ActivatedRoute }, { type: i2$1.PageTitleService }], propDecorators: { el: [{
|
|
1623
2333
|
type: ViewChild,
|
|
1624
2334
|
args: ['ref']
|
|
1625
2335
|
}], bpmnElementModalOpen: [{
|
|
@@ -1629,7 +2339,541 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
1629
2339
|
}] } });
|
|
1630
2340
|
|
|
1631
2341
|
/*
|
|
1632
|
-
* Copyright 2015-
|
|
2342
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
2343
|
+
*
|
|
2344
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
2345
|
+
* you may not use this file except in compliance with the License.
|
|
2346
|
+
* You may obtain a copy of the License at
|
|
2347
|
+
*
|
|
2348
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
2349
|
+
*
|
|
2350
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
2351
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
2352
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2353
|
+
* See the License for the specific language governing permissions and
|
|
2354
|
+
* limitations under the License.
|
|
2355
|
+
*/
|
|
2356
|
+
class ConfigureBuildingBlockMappingsComponent {
|
|
2357
|
+
getBuildingBlockFieldItemsForRow$(group) {
|
|
2358
|
+
const cached = this._rowItemsCache.get(group);
|
|
2359
|
+
if (cached)
|
|
2360
|
+
return cached;
|
|
2361
|
+
const stream = combineLatest([
|
|
2362
|
+
this.buildingBlockFieldItems$,
|
|
2363
|
+
this.inputsForm.valueChanges.pipe(startWith(this.inputsForm.value)),
|
|
2364
|
+
group.valueChanges.pipe(startWith(group.value)),
|
|
2365
|
+
]).pipe(map$1(([buildingBlockFieldItems, inputsFormValue, groupValue]) => {
|
|
2366
|
+
const usedInputTargets = inputsFormValue.inputs?.map(input => input.target).filter(Boolean) ?? [];
|
|
2367
|
+
return buildingBlockFieldItems.filter(item => {
|
|
2368
|
+
if (item.id === groupValue.target)
|
|
2369
|
+
return true;
|
|
2370
|
+
return !usedInputTargets.includes(`${item.id}`);
|
|
2371
|
+
});
|
|
2372
|
+
}));
|
|
2373
|
+
this._rowItemsCache.set(group, stream);
|
|
2374
|
+
return stream;
|
|
2375
|
+
}
|
|
2376
|
+
getUsedCaseTargetsForRow$(group) {
|
|
2377
|
+
const cached = this._outputTargetFiltersCache.get(group);
|
|
2378
|
+
if (cached)
|
|
2379
|
+
return cached;
|
|
2380
|
+
const stream = combineLatest([
|
|
2381
|
+
this.outputsForm.valueChanges.pipe(startWith(this.outputsForm.value)),
|
|
2382
|
+
group.valueChanges.pipe(startWith(group.value)),
|
|
2383
|
+
]).pipe(map$1(([outputsFormValue, groupValue]) => {
|
|
2384
|
+
const allTargets = outputsFormValue.outputs?.map(output => output.target).filter(Boolean) ?? [];
|
|
2385
|
+
return allTargets.filter(target => target !== groupValue.target);
|
|
2386
|
+
}));
|
|
2387
|
+
this._outputTargetFiltersCache.set(group, stream);
|
|
2388
|
+
return stream;
|
|
2389
|
+
}
|
|
2390
|
+
get inputs() {
|
|
2391
|
+
return this.inputsForm.controls.inputs;
|
|
2392
|
+
}
|
|
2393
|
+
get outputs() {
|
|
2394
|
+
return this.outputsForm.controls.outputs;
|
|
2395
|
+
}
|
|
2396
|
+
constructor(fb, buildingBlockStateService, buttonService, stepService, processLinkService, processLinkStateService, translateService, route, changeDetectorRef, buildingBlockApiService, stateService) {
|
|
2397
|
+
this.fb = fb;
|
|
2398
|
+
this.buildingBlockStateService = buildingBlockStateService;
|
|
2399
|
+
this.buttonService = buttonService;
|
|
2400
|
+
this.stepService = stepService;
|
|
2401
|
+
this.processLinkService = processLinkService;
|
|
2402
|
+
this.processLinkStateService = processLinkStateService;
|
|
2403
|
+
this.translateService = translateService;
|
|
2404
|
+
this.route = route;
|
|
2405
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
2406
|
+
this.buildingBlockApiService = buildingBlockApiService;
|
|
2407
|
+
this.stateService = stateService;
|
|
2408
|
+
this.buildingBlockFields$ = this.buildingBlockStateService.buildingBlockFields$;
|
|
2409
|
+
this.buildingBlockFieldItems$ = this.buildingBlockFields$.pipe(map$1(buildingBlockFields => buildingBlockFields.map(buildingBlockField => {
|
|
2410
|
+
return {
|
|
2411
|
+
id: buildingBlockField.name,
|
|
2412
|
+
text: `doc:${buildingBlockField.name}`,
|
|
2413
|
+
};
|
|
2414
|
+
})));
|
|
2415
|
+
this.inputsForm = new FormGroup({
|
|
2416
|
+
inputs: new FormArray([]),
|
|
2417
|
+
});
|
|
2418
|
+
this.outputsForm = new FormGroup({
|
|
2419
|
+
outputs: new FormArray([]),
|
|
2420
|
+
});
|
|
2421
|
+
this._rowItemsCache = new WeakMap();
|
|
2422
|
+
this._outputTargetFiltersCache = new WeakMap();
|
|
2423
|
+
this.syncTimingItems = [
|
|
2424
|
+
{
|
|
2425
|
+
id: 'CONTINUOUS',
|
|
2426
|
+
labelKey: 'processLinkConfiguration.buildingBlock.sync.continuous',
|
|
2427
|
+
},
|
|
2428
|
+
{
|
|
2429
|
+
id: 'END',
|
|
2430
|
+
labelKey: 'processLinkConfiguration.buildingBlock.sync.end',
|
|
2431
|
+
},
|
|
2432
|
+
];
|
|
2433
|
+
this.params$ = getCaseManagementRouteParams(this.route);
|
|
2434
|
+
this.buildingBlockParams$ = getBuildingBlockManagementRouteParams(this.route);
|
|
2435
|
+
this.ValuePathSelectorPrefix = ValuePathSelectorPrefix;
|
|
2436
|
+
this.sourceIsCase$ = new BehaviorSubject(true);
|
|
2437
|
+
this.sourceIsIndependent$ = new BehaviorSubject(false);
|
|
2438
|
+
/**
|
|
2439
|
+
* Returns the name of the source/target context in mappings.
|
|
2440
|
+
* When in a building block context, shows the parent building block name.
|
|
2441
|
+
* When in a case context, shows the case name.
|
|
2442
|
+
* When in an independent process context, shows the process label.
|
|
2443
|
+
*/
|
|
2444
|
+
this.sourceContextName$ = combineLatest([
|
|
2445
|
+
this.params$,
|
|
2446
|
+
this.buildingBlockParams$,
|
|
2447
|
+
]).pipe(switchMap$1(([caseParams, bbParams]) => {
|
|
2448
|
+
if (bbParams?.buildingBlockDefinitionKey && bbParams?.buildingBlockDefinitionVersionTag) {
|
|
2449
|
+
this.sourceIsCase$.next(false);
|
|
2450
|
+
this.sourceIsIndependent$.next(false);
|
|
2451
|
+
// We're in a building block context - fetch the parent building block name
|
|
2452
|
+
return this.buildingBlockApiService
|
|
2453
|
+
.getBuildingBlockDefinition(bbParams.buildingBlockDefinitionKey, bbParams.buildingBlockDefinitionVersionTag)
|
|
2454
|
+
.pipe(map$1(def => def?.name ?? bbParams.buildingBlockDefinitionKey));
|
|
2455
|
+
}
|
|
2456
|
+
else if (caseParams?.caseDefinitionKey && caseParams?.caseDefinitionVersionTag) {
|
|
2457
|
+
this.sourceIsCase$.next(true);
|
|
2458
|
+
this.sourceIsIndependent$.next(false);
|
|
2459
|
+
// We're in a case context - fetch the case name
|
|
2460
|
+
return this.buildingBlockApiService
|
|
2461
|
+
.getCaseDefinition(caseParams.caseDefinitionKey, caseParams.caseDefinitionVersionTag)
|
|
2462
|
+
.pipe(map$1(def => def?.name ?? caseParams.caseDefinitionKey));
|
|
2463
|
+
}
|
|
2464
|
+
// We're in an independent process context
|
|
2465
|
+
this.sourceIsCase$.next(false);
|
|
2466
|
+
this.sourceIsIndependent$.next(true);
|
|
2467
|
+
return of(this.translateService.instant('processLinkConfiguration.buildingBlock.process'));
|
|
2468
|
+
}));
|
|
2469
|
+
/**
|
|
2470
|
+
* Returns the name of the building block being configured.
|
|
2471
|
+
*/
|
|
2472
|
+
this.targetBuildingBlockName$ = combineLatest([
|
|
2473
|
+
this.buildingBlockStateService.definitionKey$,
|
|
2474
|
+
this.buildingBlockStateService.definitionVersionTag$,
|
|
2475
|
+
]).pipe(switchMap$1(([key, versionTag]) => {
|
|
2476
|
+
if (key && versionTag) {
|
|
2477
|
+
return this.buildingBlockApiService
|
|
2478
|
+
.getBuildingBlockDefinition(key, versionTag)
|
|
2479
|
+
.pipe(map$1(def => def?.name ?? key));
|
|
2480
|
+
}
|
|
2481
|
+
return of(this.translateService.instant('processLinkConfiguration.buildingBlock.buildingBlock'));
|
|
2482
|
+
}));
|
|
2483
|
+
this._subscriptions = new Subscription();
|
|
2484
|
+
this._syncingFromState = false;
|
|
2485
|
+
this._suppressValidation = false;
|
|
2486
|
+
this._inputRefreshHandle = null;
|
|
2487
|
+
this._destroyed = false;
|
|
2488
|
+
this.allInputsMapped$ = combineLatest([
|
|
2489
|
+
this.buildingBlockFields$,
|
|
2490
|
+
this.inputsForm.valueChanges.pipe(startWith(this.inputsForm.value)),
|
|
2491
|
+
]).pipe(map$1(([fields, inputsFormValue]) => {
|
|
2492
|
+
const allTargets = inputsFormValue.inputs?.map(input => input.target).filter((t) => !!t) ?? [];
|
|
2493
|
+
if (!fields || fields.length === 0) {
|
|
2494
|
+
return false;
|
|
2495
|
+
}
|
|
2496
|
+
return fields.every(field => allTargets.includes(field.name));
|
|
2497
|
+
}));
|
|
2498
|
+
}
|
|
2499
|
+
ngOnInit() {
|
|
2500
|
+
this._subscriptions.add(combineLatest([
|
|
2501
|
+
this.buildingBlockFields$,
|
|
2502
|
+
this.buildingBlockStateService.inputMappings$,
|
|
2503
|
+
]).subscribe(([fields, mappings]) => {
|
|
2504
|
+
this.syncInputsIfNeeded(fields, mappings);
|
|
2505
|
+
}));
|
|
2506
|
+
this.buildingBlockStateService.outputMappings$.pipe(take(1)).subscribe(mappings => {
|
|
2507
|
+
this.syncOutputsFromState(mappings);
|
|
2508
|
+
});
|
|
2509
|
+
this._subscriptions.add(combineLatest([this.inputsForm.statusChanges, this.outputsForm.statusChanges]).subscribe(() => {
|
|
2510
|
+
this.triggerValidation();
|
|
2511
|
+
}));
|
|
2512
|
+
this.triggerValidation();
|
|
2513
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
2514
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
2515
|
+
.subscribe(() => {
|
|
2516
|
+
this.stepService.setConfigureBuildingBlockPluginsStep();
|
|
2517
|
+
}));
|
|
2518
|
+
this._subscriptions.add(this.buttonService.saveButtonClick$.subscribe(() => {
|
|
2519
|
+
this.persistProcessLink();
|
|
2520
|
+
}));
|
|
2521
|
+
this._subscriptions.add(this.outputsForm.valueChanges.subscribe(() => {
|
|
2522
|
+
this.persistOutputFormState();
|
|
2523
|
+
}));
|
|
2524
|
+
this._subscriptions.add(this.inputsForm.valueChanges.subscribe(() => {
|
|
2525
|
+
this.persistInputFormState();
|
|
2526
|
+
}));
|
|
2527
|
+
}
|
|
2528
|
+
ngAfterViewInit() {
|
|
2529
|
+
this.queueInputSourceRefresh();
|
|
2530
|
+
}
|
|
2531
|
+
ngOnDestroy() {
|
|
2532
|
+
this._destroyed = true;
|
|
2533
|
+
if (this._inputRefreshHandle !== null) {
|
|
2534
|
+
clearTimeout(this._inputRefreshHandle);
|
|
2535
|
+
this._inputRefreshHandle = null;
|
|
2536
|
+
}
|
|
2537
|
+
this._subscriptions.unsubscribe();
|
|
2538
|
+
}
|
|
2539
|
+
createInputGroup(mapping) {
|
|
2540
|
+
return new FormGroup({
|
|
2541
|
+
source: new FormControl(mapping?.source ?? '', {
|
|
2542
|
+
nonNullable: true,
|
|
2543
|
+
validators: [Validators.required],
|
|
2544
|
+
}),
|
|
2545
|
+
target: new FormControl(mapping?.target ?? '', {
|
|
2546
|
+
nonNullable: true,
|
|
2547
|
+
validators: [Validators.required],
|
|
2548
|
+
}),
|
|
2549
|
+
});
|
|
2550
|
+
}
|
|
2551
|
+
createOutputGroup(mapping, sourceOverride) {
|
|
2552
|
+
return new FormGroup({
|
|
2553
|
+
source: new FormControl(sourceOverride ?? mapping?.source ?? '', {
|
|
2554
|
+
nonNullable: true,
|
|
2555
|
+
validators: [Validators.required],
|
|
2556
|
+
}),
|
|
2557
|
+
target: new FormControl(mapping?.target ?? '', {
|
|
2558
|
+
nonNullable: true,
|
|
2559
|
+
validators: [Validators.required],
|
|
2560
|
+
}),
|
|
2561
|
+
syncTiming: new FormControl(mapping?.syncTiming ?? 'END', { nonNullable: true, validators: [Validators.required] }),
|
|
2562
|
+
});
|
|
2563
|
+
}
|
|
2564
|
+
addInput() {
|
|
2565
|
+
this.inputs.push(this.createInputGroup());
|
|
2566
|
+
this.persistInputFormState();
|
|
2567
|
+
this.changeDetectorRef.detectChanges();
|
|
2568
|
+
}
|
|
2569
|
+
deleteInput(index) {
|
|
2570
|
+
this.inputs.removeAt(index);
|
|
2571
|
+
this.persistInputFormState();
|
|
2572
|
+
this.changeDetectorRef.detectChanges();
|
|
2573
|
+
}
|
|
2574
|
+
addOutput(source) {
|
|
2575
|
+
this.outputs.push(this.createOutputGroup(undefined, source));
|
|
2576
|
+
this.persistOutputFormState();
|
|
2577
|
+
this.changeDetectorRef.detectChanges();
|
|
2578
|
+
}
|
|
2579
|
+
deleteOutput(index) {
|
|
2580
|
+
this.outputs.removeAt(index);
|
|
2581
|
+
this.persistOutputFormState();
|
|
2582
|
+
}
|
|
2583
|
+
syncInputsFromState(fields, mappings) {
|
|
2584
|
+
this._syncingFromState = true;
|
|
2585
|
+
const requiredTargets = fields.filter(f => f.required).map(f => f.name);
|
|
2586
|
+
const allMappings = [
|
|
2587
|
+
...requiredTargets.map(target => mappings.find(m => m.target === target) || { target: target, source: '' }),
|
|
2588
|
+
...mappings.filter(mapping => !requiredTargets.includes(mapping.target)),
|
|
2589
|
+
];
|
|
2590
|
+
this.inputs.clear();
|
|
2591
|
+
allMappings.forEach(mapping => {
|
|
2592
|
+
this.inputs.push(this.createInputGroup(mapping));
|
|
2593
|
+
});
|
|
2594
|
+
this._syncingFromState = false;
|
|
2595
|
+
this.triggerValidation();
|
|
2596
|
+
this.queueInputSourceRefresh();
|
|
2597
|
+
}
|
|
2598
|
+
syncInputsIfNeeded(fields, mappings) {
|
|
2599
|
+
if (this._syncingFromState) {
|
|
2600
|
+
return;
|
|
2601
|
+
}
|
|
2602
|
+
const requiredTargets = fields.filter(f => f.required).map(f => f.name);
|
|
2603
|
+
const currentTargets = this.inputs.controls
|
|
2604
|
+
.map(group => group.controls.target.value)
|
|
2605
|
+
.filter((target) => !!target) ?? [];
|
|
2606
|
+
const missingRequired = requiredTargets.some(target => !currentTargets.includes(target));
|
|
2607
|
+
const shouldSync = (this.inputs.length === 0 && (mappings.length > 0 || fields.length > 0)) || missingRequired;
|
|
2608
|
+
if (shouldSync) {
|
|
2609
|
+
this.syncInputsFromState(fields, mappings);
|
|
2610
|
+
return;
|
|
2611
|
+
}
|
|
2612
|
+
this.applyMappingSources(mappings);
|
|
2613
|
+
}
|
|
2614
|
+
applyMappingSources(mappings) {
|
|
2615
|
+
const mappingByTarget = new Map(mappings.filter(mapping => !!mapping.target).map(mapping => [mapping.target, mapping]));
|
|
2616
|
+
let updated = false;
|
|
2617
|
+
this._syncingFromState = true;
|
|
2618
|
+
this.inputs.controls.forEach(group => {
|
|
2619
|
+
const target = group.controls.target.value;
|
|
2620
|
+
if (!target)
|
|
2621
|
+
return;
|
|
2622
|
+
const mapping = mappingByTarget.get(target);
|
|
2623
|
+
if (!mapping?.source)
|
|
2624
|
+
return;
|
|
2625
|
+
if (!group.controls.source.value) {
|
|
2626
|
+
group.controls.source.setValue(mapping.source);
|
|
2627
|
+
updated = true;
|
|
2628
|
+
}
|
|
2629
|
+
});
|
|
2630
|
+
this._syncingFromState = false;
|
|
2631
|
+
if (updated) {
|
|
2632
|
+
this.triggerValidation();
|
|
2633
|
+
this.queueInputSourceRefresh();
|
|
2634
|
+
}
|
|
2635
|
+
}
|
|
2636
|
+
queueInputSourceRefresh() {
|
|
2637
|
+
if (this._inputRefreshHandle !== null) {
|
|
2638
|
+
clearTimeout(this._inputRefreshHandle);
|
|
2639
|
+
}
|
|
2640
|
+
this._inputRefreshHandle = window.setTimeout(() => {
|
|
2641
|
+
if (this._destroyed)
|
|
2642
|
+
return;
|
|
2643
|
+
this.inputs.controls.forEach(group => {
|
|
2644
|
+
const value = group.controls.source.value ?? '';
|
|
2645
|
+
group.controls.source.setValue(value, { emitEvent: false });
|
|
2646
|
+
});
|
|
2647
|
+
this.changeDetectorRef.detectChanges();
|
|
2648
|
+
this._inputRefreshHandle = null;
|
|
2649
|
+
}, 0);
|
|
2650
|
+
}
|
|
2651
|
+
isSyncTimingSelected(group, value) {
|
|
2652
|
+
return group.controls.syncTiming.value === value;
|
|
2653
|
+
}
|
|
2654
|
+
syncOutputsFromState(mappings) {
|
|
2655
|
+
this._syncingFromState = true;
|
|
2656
|
+
this.outputs.clear();
|
|
2657
|
+
(mappings || []).forEach(mapping => {
|
|
2658
|
+
this.outputs.push(this.createOutputGroup(mapping));
|
|
2659
|
+
});
|
|
2660
|
+
this._syncingFromState = false;
|
|
2661
|
+
this.triggerValidation();
|
|
2662
|
+
}
|
|
2663
|
+
persistInputFormState() {
|
|
2664
|
+
if (this._syncingFromState) {
|
|
2665
|
+
return;
|
|
2666
|
+
}
|
|
2667
|
+
const mapped = this.inputs.controls.map(group => {
|
|
2668
|
+
return { source: group.value.source, target: group.value.target };
|
|
2669
|
+
});
|
|
2670
|
+
this.buildingBlockStateService.setInputMappings(mapped);
|
|
2671
|
+
this.triggerValidation();
|
|
2672
|
+
}
|
|
2673
|
+
persistOutputFormState() {
|
|
2674
|
+
if (this._syncingFromState) {
|
|
2675
|
+
return;
|
|
2676
|
+
}
|
|
2677
|
+
const mapped = this.outputs.controls.map(group => {
|
|
2678
|
+
return {
|
|
2679
|
+
source: group.value.source,
|
|
2680
|
+
target: group.value.target,
|
|
2681
|
+
syncTiming: (group.value.syncTiming ?? 'END'),
|
|
2682
|
+
};
|
|
2683
|
+
});
|
|
2684
|
+
this.buildingBlockStateService.setOutputMappings(mapped);
|
|
2685
|
+
this.triggerValidation();
|
|
2686
|
+
}
|
|
2687
|
+
isValid() {
|
|
2688
|
+
const fields = this.buildingBlockStateService.getBuildingBlockFieldsSnapshot();
|
|
2689
|
+
this.clearCustomErrors();
|
|
2690
|
+
const inputsValid = this.validateInputs(fields);
|
|
2691
|
+
const outputsValid = this.validateOutputs();
|
|
2692
|
+
const overall = this.inputsForm.valid && this.outputsForm.valid && inputsValid && outputsValid;
|
|
2693
|
+
this.buttonService[overall ? 'enableSaveButton' : 'disableSaveButton']();
|
|
2694
|
+
return overall;
|
|
2695
|
+
}
|
|
2696
|
+
validateInputs(fields) {
|
|
2697
|
+
let valid = true;
|
|
2698
|
+
const requiredTargets = new Set(fields.filter(f => f.required).map(f => f.name));
|
|
2699
|
+
const targetCounts = {};
|
|
2700
|
+
this.inputs.controls.forEach(group => {
|
|
2701
|
+
const target = group.controls.target.value || '';
|
|
2702
|
+
const source = group.controls.source.value || '';
|
|
2703
|
+
if (target) {
|
|
2704
|
+
targetCounts[target] = (targetCounts[target] || 0) + 1;
|
|
2705
|
+
}
|
|
2706
|
+
if (!source) {
|
|
2707
|
+
group.controls.source.setErrors({ required: true });
|
|
2708
|
+
valid = false;
|
|
2709
|
+
}
|
|
2710
|
+
if (!target) {
|
|
2711
|
+
group.controls.target.setErrors({ required: true });
|
|
2712
|
+
valid = false;
|
|
2713
|
+
}
|
|
2714
|
+
});
|
|
2715
|
+
Object.entries(targetCounts).forEach(([target, count]) => {
|
|
2716
|
+
if (count > 1) {
|
|
2717
|
+
this.inputs.controls
|
|
2718
|
+
.filter(g => g.controls.target.value === target)
|
|
2719
|
+
.forEach(g => g.controls.target.setErrors({ duplicateTarget: true }));
|
|
2720
|
+
valid = false;
|
|
2721
|
+
}
|
|
2722
|
+
});
|
|
2723
|
+
requiredTargets.forEach(reqTarget => {
|
|
2724
|
+
const match = this.inputs.controls.find(g => g.controls.target.value === reqTarget);
|
|
2725
|
+
if (!match || !match.controls.source.value) {
|
|
2726
|
+
valid = false;
|
|
2727
|
+
}
|
|
2728
|
+
});
|
|
2729
|
+
return valid;
|
|
2730
|
+
}
|
|
2731
|
+
validateOutputs() {
|
|
2732
|
+
let valid = true;
|
|
2733
|
+
const targetCounts = {};
|
|
2734
|
+
this.outputs.controls.forEach(group => {
|
|
2735
|
+
const target = group.controls.target.value || '';
|
|
2736
|
+
const source = group.controls.source.value || '';
|
|
2737
|
+
const syncTiming = group.controls.syncTiming.value;
|
|
2738
|
+
if (target) {
|
|
2739
|
+
targetCounts[target] = (targetCounts[target] || 0) + 1;
|
|
2740
|
+
}
|
|
2741
|
+
if (!source) {
|
|
2742
|
+
group.controls.source.setErrors({ required: true });
|
|
2743
|
+
valid = false;
|
|
2744
|
+
}
|
|
2745
|
+
if (!target) {
|
|
2746
|
+
group.controls.target.setErrors({ required: true });
|
|
2747
|
+
valid = false;
|
|
2748
|
+
}
|
|
2749
|
+
if (!syncTiming) {
|
|
2750
|
+
group.controls.syncTiming.setErrors({ required: true });
|
|
2751
|
+
valid = false;
|
|
2752
|
+
}
|
|
2753
|
+
});
|
|
2754
|
+
Object.entries(targetCounts).forEach(([target, count]) => {
|
|
2755
|
+
if (count > 1) {
|
|
2756
|
+
this.outputs.controls
|
|
2757
|
+
.filter(g => g.controls.target.value === target)
|
|
2758
|
+
.forEach(g => g.controls.target.setErrors({ duplicateTarget: true }));
|
|
2759
|
+
valid = false;
|
|
2760
|
+
}
|
|
2761
|
+
});
|
|
2762
|
+
return valid;
|
|
2763
|
+
}
|
|
2764
|
+
clearCustomErrors() {
|
|
2765
|
+
this.inputs.controls.forEach(group => {
|
|
2766
|
+
group.controls.source.setErrors(null);
|
|
2767
|
+
group.controls.target.setErrors(null);
|
|
2768
|
+
});
|
|
2769
|
+
this.outputs.controls.forEach(group => {
|
|
2770
|
+
group.controls.source.setErrors(null);
|
|
2771
|
+
group.controls.target.setErrors(null);
|
|
2772
|
+
group.controls.syncTiming.setErrors(null);
|
|
2773
|
+
});
|
|
2774
|
+
}
|
|
2775
|
+
triggerValidation() {
|
|
2776
|
+
if (this._suppressValidation)
|
|
2777
|
+
return;
|
|
2778
|
+
this._suppressValidation = true;
|
|
2779
|
+
Promise.resolve().then(() => {
|
|
2780
|
+
this.isValid();
|
|
2781
|
+
this._suppressValidation = false;
|
|
2782
|
+
});
|
|
2783
|
+
}
|
|
2784
|
+
persistProcessLink() {
|
|
2785
|
+
if (!this.isValid()) {
|
|
2786
|
+
this.buttonService.disableSaveButton();
|
|
2787
|
+
return;
|
|
2788
|
+
}
|
|
2789
|
+
this.buttonService.disableSaveButton();
|
|
2790
|
+
this.processLinkStateService.startSaving();
|
|
2791
|
+
this.processLinkStateService.selectedProcessLink$
|
|
2792
|
+
.pipe(take(1))
|
|
2793
|
+
.subscribe(selectedProcessLink => {
|
|
2794
|
+
if (selectedProcessLink && selectedProcessLink.processLinkType === 'building-block') {
|
|
2795
|
+
this.updateProcessLink(selectedProcessLink);
|
|
2796
|
+
}
|
|
2797
|
+
else {
|
|
2798
|
+
this.createProcessLink();
|
|
2799
|
+
}
|
|
2800
|
+
});
|
|
2801
|
+
}
|
|
2802
|
+
createProcessLink() {
|
|
2803
|
+
this.processLinkStateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
|
|
2804
|
+
const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
|
|
2805
|
+
if (!modalParams || !key || !versionTag) {
|
|
2806
|
+
this.processLinkStateService.stopSaving();
|
|
2807
|
+
return;
|
|
2808
|
+
}
|
|
2809
|
+
const activityId = modalParams.element?.id;
|
|
2810
|
+
if (!activityId) {
|
|
2811
|
+
this.processLinkStateService.stopSaving();
|
|
2812
|
+
return;
|
|
2813
|
+
}
|
|
2814
|
+
const request = {
|
|
2815
|
+
processDefinitionId: modalParams.processDefinitionId ?? '-',
|
|
2816
|
+
activityId,
|
|
2817
|
+
activityType: modalParams.element?.activityListenerType ?? '',
|
|
2818
|
+
processLinkType: 'building-block',
|
|
2819
|
+
buildingBlockDefinitionKey: key,
|
|
2820
|
+
buildingBlockDefinitionVersionTag: versionTag,
|
|
2821
|
+
pluginConfigurationMappings: this.buildingBlockStateService.getPluginConfigurationMappingsSnapshot(),
|
|
2822
|
+
inputMappings: this.buildingBlockStateService.getInputMappingsSnapshot(),
|
|
2823
|
+
outputMappings: this.buildingBlockStateService.getOutputMappingsSnapshot(),
|
|
2824
|
+
};
|
|
2825
|
+
this.processLinkStateService.sendProcessLinkCreateEvent(request);
|
|
2826
|
+
});
|
|
2827
|
+
}
|
|
2828
|
+
updateProcessLink(processLink) {
|
|
2829
|
+
this.processLinkStateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
|
|
2830
|
+
const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
|
|
2831
|
+
if (!modalParams || !key || !versionTag) {
|
|
2832
|
+
this.processLinkStateService.stopSaving();
|
|
2833
|
+
return;
|
|
2834
|
+
}
|
|
2835
|
+
const activityId = modalParams.element?.id;
|
|
2836
|
+
const request = {
|
|
2837
|
+
id: processLink.id,
|
|
2838
|
+
activityId: activityId,
|
|
2839
|
+
processLinkType: 'building-block',
|
|
2840
|
+
buildingBlockDefinitionKey: key,
|
|
2841
|
+
buildingBlockDefinitionVersionTag: versionTag,
|
|
2842
|
+
pluginConfigurationMappings: this.buildingBlockStateService.getPluginConfigurationMappingsSnapshot(),
|
|
2843
|
+
inputMappings: this.buildingBlockStateService.getInputMappingsSnapshot(),
|
|
2844
|
+
outputMappings: this.buildingBlockStateService.getOutputMappingsSnapshot(),
|
|
2845
|
+
};
|
|
2846
|
+
this.processLinkStateService.sendProcessLinkUpdateEvent(request);
|
|
2847
|
+
});
|
|
2848
|
+
}
|
|
2849
|
+
isRequiredTarget(fields, target) {
|
|
2850
|
+
if (!fields)
|
|
2851
|
+
return false;
|
|
2852
|
+
return fields.some(field => field.required && field.name === target);
|
|
2853
|
+
}
|
|
2854
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockMappingsComponent, deps: [{ token: i1$2.FormBuilder }, { token: BuildingBlockStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: ProcessLinkService }, { token: ProcessLinkStateService }, { token: i3.TranslateService }, { token: i3$3.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: ProcessLinkBuildingBlockApiService }, { token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2855
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: ConfigureBuildingBlockMappingsComponent, isStandalone: true, selector: "valtimo-configure-building-block-mappings", ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 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@let obs =\n {\n fields: (buildingBlockFields$ | async),\n fieldItems: (buildingBlockFieldItems$ | async),\n params: (params$ | async),\n buildingBlockParams: (buildingBlockParams$ | async),\n sourceContextName: (sourceContextName$ | async),\n targetBuildingBlockName: (targetBuildingBlockName$ | async),\n sourceIsCase: (sourceIsCase$ | async),\n sourceIsIndependent: (sourceIsIndependent$ | async),\n caseLabelTranslation: ('Case' | translate),\n processLabelTranslation: ('processLinkConfiguration.buildingBlock.process' | translate),\n buildingBlockLabelTranslation:\n ('processLinkConfiguration.buildingBlock.selectLabel' | translate),\n };\n\n<div class=\"mapping-step\">\n <section class=\"mapping-section\">\n <h4 class=\"section-header\">\n {{ 'processLinkConfiguration.buildingBlock.inputTitle' | translate }}\n </h4>\n\n <div class=\"mapping-table\" [formGroup]=\"inputsForm\">\n <div class=\"mapping-header input\">\n <v-input-label\n [title]=\"\n (obs.sourceIsIndependent\n ? obs.processLabelTranslation\n : obs.sourceIsCase\n ? obs.caseLabelTranslation\n : obs.buildingBlockLabelTranslation) +\n (obs.sourceIsIndependent ? '' : ': ' + obs.sourceContextName)\n \"\n />\n\n <v-input-label\n [title]=\"obs.buildingBlockLabelTranslation + ': ' + obs.targetBuildingBlockName\"\n />\n </div>\n\n <div formArrayName=\"inputs\">\n @for (group of inputs.controls; let inputIndex = $index; track inputIndex) {\n <div class=\"mapping-row input\" [formGroup]=\"group\">\n <div class=\"mapping-part\">\n @if (obs.sourceIsIndependent) {\n <input [cdsLayer]=\"2\" cdsText formControlName=\"source\" [placeholder]=\"'pv:'\" />\n } @else {\n <valtimo-value-path-selector\n [cdsLayer]=\"2\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [caseDefinitionKey]=\"obs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"obs.params?.caseDefinitionVersionTag\"\n [buildingBlockDefinitionKey]=\"obs.buildingBlockParams?.buildingBlockDefinitionKey\"\n [buildingBlockDefinitionVersionTag]=\"\n obs.buildingBlockParams?.buildingBlockDefinitionVersionTag\n \"\n [appendInline]=\"false\"\n [dropUp]=\"false\"\n [formControl]=\"group.get('source')\"\n ></valtimo-value-path-selector>\n }\n\n <div class=\"arrow\">\u2192</div>\n </div>\n\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\">\n @if (isRequiredTarget(obs.fields, group.get('target')?.value)) {\n <div class=\"required-target\">\n {{ 'doc:' + group.get('target')?.value }}\n </div>\n } @else {\n <v-select\n [cdsLayer]=\"2\"\n [appendInline]=\"false\"\n formControlName=\"target\"\n [placeholder]=\"\n 'processLinkConfiguration.buildingBlock.selectedBuildingBlockFieldPlaceholder'\n | translate\n \"\n [items]=\"getBuildingBlockFieldItemsForRow$(group) | async\"\n [dropUp]=\"false\"\n >\n </v-select>\n }\n </div>\n\n <div class=\"mapping-cell-actions\">\n @if (!isRequiredTarget(obs.fields, group.get('target')?.value)) {\n <button\n cdsButton=\"danger--ghost\"\n iconOnly\n size=\"sm\"\n (click)=\"deleteInput(inputIndex)\"\n >\n <svg cdsIcon=\"trash-can\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n } @else {\n <div class=\"required-indicator\">*</div>\n\n <div>\n {{ 'interface.required' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n (click)=\"addInput()\"\n [title]=\"'processLinkConfiguration.buildingBlock.addInput' | translate\"\n [disabled]=\"allInputsMapped$ | async\"\n >\n {{ 'processLinkConfiguration.buildingBlock.addInput' | translate }}\n\n <svg cdsIcon=\"add\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </section>\n\n <section class=\"mapping-section\">\n <h4 class=\"section-header\">\n {{ 'processLinkConfiguration.buildingBlock.outputTitle' | translate }}\n </h4>\n\n <div class=\"mapping-table\" [formGroup]=\"outputsForm\">\n <div class=\"mapping-header output\">\n <v-input-label\n [title]=\"obs.buildingBlockLabelTranslation + ': ' + obs.targetBuildingBlockName\"\n />\n\n <v-input-label\n [title]=\"\n (obs.sourceIsIndependent\n ? obs.processLabelTranslation\n : obs.sourceIsCase\n ? obs.caseLabelTranslation\n : obs.buildingBlockLabelTranslation) +\n (obs.sourceIsIndependent ? '' : ': ' + obs.sourceContextName)\n \"\n />\n\n <div class=\"sync-options\" [style.display]=\"'none'\">\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.sync.title' | translate\"\n />\n </div>\n </div>\n\n <div formArrayName=\"outputs\">\n @for (group of outputs.controls; let outputIndex = $index; track outputIndex) {\n <div class=\"mapping-row output\" [formGroup]=\"group\">\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\">\n <v-select\n [cdsLayer]=\"2\"\n [appendInline]=\"false\"\n formControlName=\"source\"\n [items]=\"obs.fieldItems || []\"\n [placeholder]=\"\n 'processLinkConfiguration.buildingBlock.selectedBuildingBlockFieldPlaceholder'\n | translate\n \"\n [dropUp]=\"true\"\n >\n </v-select>\n </div>\n\n <div class=\"arrow\">\u2192</div>\n </div>\n\n <div class=\"mapping-part\">\n @if (obs.sourceIsIndependent) {\n <input [cdsLayer]=\"2\" cdsText formControlName=\"target\" [placeholder]=\"'pv:'\" />\n } @else {\n <valtimo-value-path-selector\n [cdsLayer]=\"2\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [caseDefinitionKey]=\"obs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"obs.params?.caseDefinitionVersionTag\"\n [buildingBlockDefinitionKey]=\"obs.buildingBlockParams?.buildingBlockDefinitionKey\"\n [buildingBlockDefinitionVersionTag]=\"\n obs.buildingBlockParams?.buildingBlockDefinitionVersionTag\n \"\n [formControl]=\"group.get('target')\"\n [appendInline]=\"false\"\n [filterItems]=\"getUsedCaseTargetsForRow$(group) | async\"\n [dropUp]=\"true\"\n ></valtimo-value-path-selector>\n }\n </div>\n\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\" [style.display]=\"'none'\">\n <cds-radio-group\n class=\"sync-radio-group\"\n formControlName=\"syncTiming\"\n [attr.name]=\"'syncTiming-' + outputIndex\"\n >\n @for (item of syncTimingItems; track item.id) {\n <cds-radio [value]=\"item.id\" [checked]=\"isSyncTimingSelected(group, item.id)\">\n {{ item.labelKey | translate }}\n </cds-radio>\n }\n </cds-radio-group>\n </div>\n\n <div class=\"mapping-cell-actions\">\n <button\n cdsButton=\"danger--ghost\"\n iconOnly\n size=\"sm\"\n (click)=\"deleteOutput(outputIndex)\"\n >\n <svg cdsIcon=\"trash-can\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n (click)=\"addOutput()\"\n [title]=\"'processLinkConfiguration.buildingBlock.addOutput' | translate\"\n >\n {{ 'processLinkConfiguration.buildingBlock.addOutput' | translate }}\n\n <svg cdsIcon=\"add\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </section>\n</div>\n", styles: [".section-header{font-size:14px;line-height:18px;font-weight:600}.mapping-section{margin-bottom:16px}.mapping-row,.mapping-header{display:grid;align-items:center}.mapping-row.input,.mapping-header.input{grid-template-columns:1fr 1fr}.mapping-row.output,.mapping-header.output{grid-template-columns:5fr 6fr 58px}.mapping-header .output .sync-options{padding-left:10px;display:flex}.mapping-row{margin-bottom:8px;padding:8px;background-color:var(--cds-layer)}.mapping-row .mapping-part{display:flex}.mapping-row .arrow{text-align:center;width:40px;line-height:40px;font-size:large}.mapping-row .mapping-cell{flex:1;min-width:0}.mapping-row .mapping-cell-actions{display:flex;align-self:flex-end;text-transform:capitalize;margin-left:10px}.mapping-row .mapping-cell-actions .required-indicator{margin:0 5px;color:var(--cds-text-error)}.mapping-row .mapping-cell-actions button{margin-bottom:5px}.mapping-row .mapping-cell-actions button ::ng-deep .cds--btn__icon{margin:0!important}.mapping-row .sync-radio-group{padding-left:10px;margin-top:8px}.mapping-row .sync-radio-group .sync-radio:first-child{margin-right:0}.mapping-row .sync-radio-group ::ng-deep .cds--radio-button__label{justify-content:normal}::ng-deep .process-link-modal-container .cds--modal-container{max-width:1280px}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "ngmodule", type: RadioModule }, { kind: "component", type: i3$2.Radio, selector: "cds-radio, ibm-radio", inputs: ["checked", "name", "disabled", "labelPlacement", "ariaLabelledby", "ariaLabel", "required", "value", "skeleton", "id"], outputs: ["change"] }, { kind: "component", type: i3$2.RadioGroup, selector: "cds-radio-group, ibm-radio-group", inputs: ["selected", "value", "name", "disabled", "skeleton", "orientation", "labelPlacement", "legend", "ariaLabel", "ariaLabelledby", "helperText", "invalid", "invalidText", "warn", "warnText"], outputs: ["change"] }, { kind: "ngmodule", type: InputModule }, { kind: "directive", type: i3$2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "component", type: ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "caseDefinitionKey", "caseDefinitionVersionTag", "buildingBlockDefinitionKey", "buildingBlockDefinitionVersionTag", "prefixes", "label", "tooltip", "required", "showCaseDefinitionSelector", "notation", "dropUp", "defaultValue", "type", "parentItem", "filterItems"], outputs: ["valueChangeEvent", "collectionSelected"] }, { kind: "ngmodule", type: InputLabelModule }, { kind: "component", type: i2$1.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "tooltipTranslationKey", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3$2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3$2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i2$1.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "invalid", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "clearable", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline", "warn", "warnText", "dataTestId"], outputs: ["selectedChange"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i3$2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2856
|
+
}
|
|
2857
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockMappingsComponent, decorators: [{
|
|
2858
|
+
type: Component,
|
|
2859
|
+
args: [{ standalone: true, selector: 'valtimo-configure-building-block-mappings', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
2860
|
+
CommonModule,
|
|
2861
|
+
ReactiveFormsModule,
|
|
2862
|
+
ComboBoxModule,
|
|
2863
|
+
RadioModule,
|
|
2864
|
+
InputModule,
|
|
2865
|
+
ValuePathSelectorComponent,
|
|
2866
|
+
InputLabelModule,
|
|
2867
|
+
TranslateModule,
|
|
2868
|
+
ButtonModule,
|
|
2869
|
+
IconModule,
|
|
2870
|
+
SelectModule,
|
|
2871
|
+
LayerModule,
|
|
2872
|
+
], template: "<!--\n ~ Copyright 2015-2026 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@let obs =\n {\n fields: (buildingBlockFields$ | async),\n fieldItems: (buildingBlockFieldItems$ | async),\n params: (params$ | async),\n buildingBlockParams: (buildingBlockParams$ | async),\n sourceContextName: (sourceContextName$ | async),\n targetBuildingBlockName: (targetBuildingBlockName$ | async),\n sourceIsCase: (sourceIsCase$ | async),\n sourceIsIndependent: (sourceIsIndependent$ | async),\n caseLabelTranslation: ('Case' | translate),\n processLabelTranslation: ('processLinkConfiguration.buildingBlock.process' | translate),\n buildingBlockLabelTranslation:\n ('processLinkConfiguration.buildingBlock.selectLabel' | translate),\n };\n\n<div class=\"mapping-step\">\n <section class=\"mapping-section\">\n <h4 class=\"section-header\">\n {{ 'processLinkConfiguration.buildingBlock.inputTitle' | translate }}\n </h4>\n\n <div class=\"mapping-table\" [formGroup]=\"inputsForm\">\n <div class=\"mapping-header input\">\n <v-input-label\n [title]=\"\n (obs.sourceIsIndependent\n ? obs.processLabelTranslation\n : obs.sourceIsCase\n ? obs.caseLabelTranslation\n : obs.buildingBlockLabelTranslation) +\n (obs.sourceIsIndependent ? '' : ': ' + obs.sourceContextName)\n \"\n />\n\n <v-input-label\n [title]=\"obs.buildingBlockLabelTranslation + ': ' + obs.targetBuildingBlockName\"\n />\n </div>\n\n <div formArrayName=\"inputs\">\n @for (group of inputs.controls; let inputIndex = $index; track inputIndex) {\n <div class=\"mapping-row input\" [formGroup]=\"group\">\n <div class=\"mapping-part\">\n @if (obs.sourceIsIndependent) {\n <input [cdsLayer]=\"2\" cdsText formControlName=\"source\" [placeholder]=\"'pv:'\" />\n } @else {\n <valtimo-value-path-selector\n [cdsLayer]=\"2\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [caseDefinitionKey]=\"obs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"obs.params?.caseDefinitionVersionTag\"\n [buildingBlockDefinitionKey]=\"obs.buildingBlockParams?.buildingBlockDefinitionKey\"\n [buildingBlockDefinitionVersionTag]=\"\n obs.buildingBlockParams?.buildingBlockDefinitionVersionTag\n \"\n [appendInline]=\"false\"\n [dropUp]=\"false\"\n [formControl]=\"group.get('source')\"\n ></valtimo-value-path-selector>\n }\n\n <div class=\"arrow\">\u2192</div>\n </div>\n\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\">\n @if (isRequiredTarget(obs.fields, group.get('target')?.value)) {\n <div class=\"required-target\">\n {{ 'doc:' + group.get('target')?.value }}\n </div>\n } @else {\n <v-select\n [cdsLayer]=\"2\"\n [appendInline]=\"false\"\n formControlName=\"target\"\n [placeholder]=\"\n 'processLinkConfiguration.buildingBlock.selectedBuildingBlockFieldPlaceholder'\n | translate\n \"\n [items]=\"getBuildingBlockFieldItemsForRow$(group) | async\"\n [dropUp]=\"false\"\n >\n </v-select>\n }\n </div>\n\n <div class=\"mapping-cell-actions\">\n @if (!isRequiredTarget(obs.fields, group.get('target')?.value)) {\n <button\n cdsButton=\"danger--ghost\"\n iconOnly\n size=\"sm\"\n (click)=\"deleteInput(inputIndex)\"\n >\n <svg cdsIcon=\"trash-can\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n } @else {\n <div class=\"required-indicator\">*</div>\n\n <div>\n {{ 'interface.required' | translate }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n (click)=\"addInput()\"\n [title]=\"'processLinkConfiguration.buildingBlock.addInput' | translate\"\n [disabled]=\"allInputsMapped$ | async\"\n >\n {{ 'processLinkConfiguration.buildingBlock.addInput' | translate }}\n\n <svg cdsIcon=\"add\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </section>\n\n <section class=\"mapping-section\">\n <h4 class=\"section-header\">\n {{ 'processLinkConfiguration.buildingBlock.outputTitle' | translate }}\n </h4>\n\n <div class=\"mapping-table\" [formGroup]=\"outputsForm\">\n <div class=\"mapping-header output\">\n <v-input-label\n [title]=\"obs.buildingBlockLabelTranslation + ': ' + obs.targetBuildingBlockName\"\n />\n\n <v-input-label\n [title]=\"\n (obs.sourceIsIndependent\n ? obs.processLabelTranslation\n : obs.sourceIsCase\n ? obs.caseLabelTranslation\n : obs.buildingBlockLabelTranslation) +\n (obs.sourceIsIndependent ? '' : ': ' + obs.sourceContextName)\n \"\n />\n\n <div class=\"sync-options\" [style.display]=\"'none'\">\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.sync.title' | translate\"\n />\n </div>\n </div>\n\n <div formArrayName=\"outputs\">\n @for (group of outputs.controls; let outputIndex = $index; track outputIndex) {\n <div class=\"mapping-row output\" [formGroup]=\"group\">\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\">\n <v-select\n [cdsLayer]=\"2\"\n [appendInline]=\"false\"\n formControlName=\"source\"\n [items]=\"obs.fieldItems || []\"\n [placeholder]=\"\n 'processLinkConfiguration.buildingBlock.selectedBuildingBlockFieldPlaceholder'\n | translate\n \"\n [dropUp]=\"true\"\n >\n </v-select>\n </div>\n\n <div class=\"arrow\">\u2192</div>\n </div>\n\n <div class=\"mapping-part\">\n @if (obs.sourceIsIndependent) {\n <input [cdsLayer]=\"2\" cdsText formControlName=\"target\" [placeholder]=\"'pv:'\" />\n } @else {\n <valtimo-value-path-selector\n [cdsLayer]=\"2\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [caseDefinitionKey]=\"obs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"obs.params?.caseDefinitionVersionTag\"\n [buildingBlockDefinitionKey]=\"obs.buildingBlockParams?.buildingBlockDefinitionKey\"\n [buildingBlockDefinitionVersionTag]=\"\n obs.buildingBlockParams?.buildingBlockDefinitionVersionTag\n \"\n [formControl]=\"group.get('target')\"\n [appendInline]=\"false\"\n [filterItems]=\"getUsedCaseTargetsForRow$(group) | async\"\n [dropUp]=\"true\"\n ></valtimo-value-path-selector>\n }\n </div>\n\n <div class=\"mapping-part\">\n <div class=\"mapping-cell\" [style.display]=\"'none'\">\n <cds-radio-group\n class=\"sync-radio-group\"\n formControlName=\"syncTiming\"\n [attr.name]=\"'syncTiming-' + outputIndex\"\n >\n @for (item of syncTimingItems; track item.id) {\n <cds-radio [value]=\"item.id\" [checked]=\"isSyncTimingSelected(group, item.id)\">\n {{ item.labelKey | translate }}\n </cds-radio>\n }\n </cds-radio-group>\n </div>\n\n <div class=\"mapping-cell-actions\">\n <button\n cdsButton=\"danger--ghost\"\n iconOnly\n size=\"sm\"\n (click)=\"deleteOutput(outputIndex)\"\n >\n <svg cdsIcon=\"trash-can\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n (click)=\"addOutput()\"\n [title]=\"'processLinkConfiguration.buildingBlock.addOutput' | translate\"\n >\n {{ 'processLinkConfiguration.buildingBlock.addOutput' | translate }}\n\n <svg cdsIcon=\"add\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </section>\n</div>\n", styles: [".section-header{font-size:14px;line-height:18px;font-weight:600}.mapping-section{margin-bottom:16px}.mapping-row,.mapping-header{display:grid;align-items:center}.mapping-row.input,.mapping-header.input{grid-template-columns:1fr 1fr}.mapping-row.output,.mapping-header.output{grid-template-columns:5fr 6fr 58px}.mapping-header .output .sync-options{padding-left:10px;display:flex}.mapping-row{margin-bottom:8px;padding:8px;background-color:var(--cds-layer)}.mapping-row .mapping-part{display:flex}.mapping-row .arrow{text-align:center;width:40px;line-height:40px;font-size:large}.mapping-row .mapping-cell{flex:1;min-width:0}.mapping-row .mapping-cell-actions{display:flex;align-self:flex-end;text-transform:capitalize;margin-left:10px}.mapping-row .mapping-cell-actions .required-indicator{margin:0 5px;color:var(--cds-text-error)}.mapping-row .mapping-cell-actions button{margin-bottom:5px}.mapping-row .mapping-cell-actions button ::ng-deep .cds--btn__icon{margin:0!important}.mapping-row .sync-radio-group{padding-left:10px;margin-top:8px}.mapping-row .sync-radio-group .sync-radio:first-child{margin-right:0}.mapping-row .sync-radio-group ::ng-deep .cds--radio-button__label{justify-content:normal}::ng-deep .process-link-modal-container .cds--modal-container{max-width:1280px}\n/*!\n * Copyright 2015-2026 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"] }]
|
|
2873
|
+
}], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: BuildingBlockStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: ProcessLinkService }, { type: ProcessLinkStateService }, { type: i3.TranslateService }, { type: i3$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: ProcessLinkBuildingBlockApiService }, { type: ProcessLinkStateService }] });
|
|
2874
|
+
|
|
2875
|
+
/*
|
|
2876
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
1633
2877
|
*
|
|
1634
2878
|
* Licensed under EUPL, Version 1.2 (the "License");
|
|
1635
2879
|
* you may not use this file except in compliance with the License.
|
|
@@ -1648,15 +2892,22 @@ class ChooseProcessLinkTypeComponent {
|
|
|
1648
2892
|
this.processLinkStateService = processLinkStateService;
|
|
1649
2893
|
this.availableProcessLinkTypes$ = this.processLinkStateService.availableProcessLinkTypes$;
|
|
1650
2894
|
}
|
|
2895
|
+
getTooltipKey(processLinkTypeId) {
|
|
2896
|
+
if (this.processLinkStateService.isBuildingBlockContext() &&
|
|
2897
|
+
UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK.includes(processLinkTypeId)) {
|
|
2898
|
+
return 'processLinkTypeDisabledTooltip.buildingBlockUnsupported';
|
|
2899
|
+
}
|
|
2900
|
+
return 'processLinkTypeDisabledTooltip.' + processLinkTypeId;
|
|
2901
|
+
}
|
|
1651
2902
|
selectProcessLinkType(processLinkTypeId) {
|
|
1652
2903
|
this.processLinkStateService.selectProcessLinkType(processLinkTypeId);
|
|
1653
2904
|
}
|
|
1654
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1655
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
2905
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ChooseProcessLinkTypeComponent, deps: [{ token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2906
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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]=\"getTooltipKey(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$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i3$2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i2$1.TooltipDirective, selector: "[vTooltip]", inputs: ["vTooltip", "onBottom", "tooltipDisabled"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
1656
2907
|
}
|
|
1657
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2908
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ChooseProcessLinkTypeComponent, decorators: [{
|
|
1658
2909
|
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]=\"
|
|
2910
|
+
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]=\"getTooltipKey(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
2911
|
}], ctorParameters: () => [{ type: ProcessLinkStateService }] });
|
|
1661
2912
|
|
|
1662
2913
|
/*
|
|
@@ -1685,7 +2936,7 @@ class FormDisplayConfigurationComponent {
|
|
|
1685
2936
|
this.formDisplayValue$ = new BehaviorSubject(null);
|
|
1686
2937
|
this.formSizeValue$ = new BehaviorSubject(null);
|
|
1687
2938
|
this._subtitles$ = new BehaviorSubject([]);
|
|
1688
|
-
this.subtitles$ = this._subtitles$.pipe(map(subtitles => subtitles.map(subtitle => ({ value: subtitle }))));
|
|
2939
|
+
this.subtitles$ = this._subtitles$.pipe(map$1(subtitles => subtitles.map(subtitle => ({ value: subtitle }))));
|
|
1689
2940
|
this.disableFormSizeInput$ = new BehaviorSubject(true);
|
|
1690
2941
|
this.saving$ = this.stateService.saving$;
|
|
1691
2942
|
this.isUserTask$ = new BehaviorSubject(false);
|
|
@@ -1695,7 +2946,7 @@ class FormDisplayConfigurationComponent {
|
|
|
1695
2946
|
this.formDisplayTypeListItems$ = combineLatest([
|
|
1696
2947
|
this.formDisplayValue$,
|
|
1697
2948
|
this.translateService.stream('key'),
|
|
1698
|
-
]).pipe(map(([formDisplayValue]) => this._DISPLAY_TYPE_OPTIONS.map((key) => ({
|
|
2949
|
+
]).pipe(map$1(([formDisplayValue]) => this._DISPLAY_TYPE_OPTIONS.map((key) => ({
|
|
1699
2950
|
content: this.translateService.instant(`processLinkSteps.displayType.options.${key}`),
|
|
1700
2951
|
key: key,
|
|
1701
2952
|
selected: this.formDisplayValue$.getValue() === key,
|
|
@@ -1703,7 +2954,7 @@ class FormDisplayConfigurationComponent {
|
|
|
1703
2954
|
this.formSizeListItems$ = combineLatest([
|
|
1704
2955
|
this.formSizeValue$,
|
|
1705
2956
|
this.translateService.stream('key'),
|
|
1706
|
-
]).pipe(map(([formSizeValue]) => this._FORM_SIZE_OPTIONS.map((key) => ({
|
|
2957
|
+
]).pipe(map$1(([formSizeValue]) => this._FORM_SIZE_OPTIONS.map((key) => ({
|
|
1707
2958
|
content: this.translateService.instant(`processLinkSteps.formSize.options.${key}`),
|
|
1708
2959
|
key: key,
|
|
1709
2960
|
selected: this.formSizeValue$.getValue() === key,
|
|
@@ -1761,13 +3012,13 @@ class FormDisplayConfigurationComponent {
|
|
|
1761
3012
|
else
|
|
1762
3013
|
this.buttonService.disableSaveButton();
|
|
1763
3014
|
}
|
|
1764
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1765
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.
|
|
3015
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormDisplayConfigurationComponent, deps: [{ token: ProcessLinkButtonService }, { token: ProcessLinkStateService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3016
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", 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$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.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$1.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$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
1766
3017
|
}
|
|
1767
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3018
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormDisplayConfigurationComponent, decorators: [{
|
|
1768
3019
|
type: Component,
|
|
1769
3020
|
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:
|
|
3021
|
+
}], ctorParameters: () => [{ type: ProcessLinkButtonService }, { type: ProcessLinkStateService }, { type: i3.TranslateService }], propDecorators: { selectedFormDefinition: [{
|
|
1771
3022
|
type: Input
|
|
1772
3023
|
}], formDisplayValue: [{
|
|
1773
3024
|
type: Output
|
|
@@ -1808,7 +3059,7 @@ class SelectFormComponent {
|
|
|
1808
3059
|
}
|
|
1809
3060
|
return this.formService.getAllUnlinkedFormDefinitions();
|
|
1810
3061
|
}));
|
|
1811
|
-
this.formDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formDefinitions$]).pipe(map
|
|
3062
|
+
this.formDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formDefinitions$]).pipe(map(([selectedProcessLink, formDefinitions]) => formDefinitions.map(definition => ({
|
|
1812
3063
|
content: definition.name,
|
|
1813
3064
|
id: definition.id,
|
|
1814
3065
|
selected: selectedProcessLink
|
|
@@ -1859,7 +3110,9 @@ class SelectFormComponent {
|
|
|
1859
3110
|
this.subtitlesValue = subtitles;
|
|
1860
3111
|
}
|
|
1861
3112
|
openBackButtonSubscription() {
|
|
1862
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
3113
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
3114
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
3115
|
+
.subscribe(() => {
|
|
1863
3116
|
this.stateService.setInitial();
|
|
1864
3117
|
}));
|
|
1865
3118
|
}
|
|
@@ -1898,18 +3151,7 @@ class SelectFormComponent {
|
|
|
1898
3151
|
...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_TYPE }),
|
|
1899
3152
|
...(isUserTask && { subtitles: this.subtitlesValue }),
|
|
1900
3153
|
};
|
|
1901
|
-
|
|
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
|
-
});
|
|
3154
|
+
this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
|
|
1913
3155
|
});
|
|
1914
3156
|
}
|
|
1915
3157
|
saveNewProcessLink() {
|
|
@@ -1938,27 +3180,16 @@ class SelectFormComponent {
|
|
|
1938
3180
|
subtitles: this.subtitlesValue,
|
|
1939
3181
|
}),
|
|
1940
3182
|
};
|
|
1941
|
-
|
|
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
|
-
});
|
|
3183
|
+
this.stateService.sendProcessLinkCreateEvent(createRequest);
|
|
1953
3184
|
});
|
|
1954
3185
|
}
|
|
1955
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1956
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
3186
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormComponent, deps: [{ token: i1$4.FormService }, { token: ProcessLinkStateService }, { token: ProcessLinkService }, { token: ProcessLinkButtonService }, { token: i3$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3187
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.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$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
1957
3188
|
}
|
|
1958
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormComponent, decorators: [{
|
|
1959
3190
|
type: Component,
|
|
1960
3191
|
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$
|
|
3192
|
+
}], ctorParameters: () => [{ type: i1$4.FormService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$3.ActivatedRoute }] });
|
|
1962
3193
|
|
|
1963
3194
|
/*
|
|
1964
3195
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -1984,8 +3215,8 @@ class SelectFormFlowComponent {
|
|
|
1984
3215
|
this.route = route;
|
|
1985
3216
|
this.subtitlesValue = [];
|
|
1986
3217
|
this.saving$ = this.stateService.saving$;
|
|
1987
|
-
this.formFlowDefinitions$ = getCaseManagementRouteParams(this.route).pipe(switchMap$1((params) => this.formFlowService.getFormFlowDefinitions(params?.caseDefinitionKey ?? '', params?.caseDefinitionVersionTag ?? '')), map
|
|
1988
|
-
this.formFlowDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formFlowDefinitions$]).pipe(map
|
|
3218
|
+
this.formFlowDefinitions$ = getCaseManagementRouteParams(this.route).pipe(switchMap$1((params) => this.formFlowService.getFormFlowDefinitions(params?.caseDefinitionKey ?? '', params?.caseDefinitionVersionTag ?? '')), map((formFlowDefinitions) => formFlowDefinitions.content));
|
|
3219
|
+
this.formFlowDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formFlowDefinitions$]).pipe(map(([selectedProcessLink, formFlowDefinitions]) => formFlowDefinitions.map(definition => ({
|
|
1989
3220
|
content: definition.key,
|
|
1990
3221
|
id: definition.key,
|
|
1991
3222
|
selected: selectedProcessLink
|
|
@@ -2038,7 +3269,9 @@ class SelectFormFlowComponent {
|
|
|
2038
3269
|
this.subtitlesValue = subtitles;
|
|
2039
3270
|
}
|
|
2040
3271
|
openBackButtonSubscription() {
|
|
2041
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
3272
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
3273
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
3274
|
+
.subscribe(() => {
|
|
2042
3275
|
this.stateService.setInitial();
|
|
2043
3276
|
}));
|
|
2044
3277
|
}
|
|
@@ -2070,18 +3303,7 @@ class SelectFormFlowComponent {
|
|
|
2070
3303
|
...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_SIZE }),
|
|
2071
3304
|
...(isUserTask && { subtitles: this.subtitlesValue }),
|
|
2072
3305
|
};
|
|
2073
|
-
|
|
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
|
-
});
|
|
3306
|
+
this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
|
|
2085
3307
|
});
|
|
2086
3308
|
}
|
|
2087
3309
|
saveNewProcessLink() {
|
|
@@ -2104,27 +3326,16 @@ class SelectFormFlowComponent {
|
|
|
2104
3326
|
...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_SIZE }),
|
|
2105
3327
|
...(isUserTask && { subtitles: this.subtitlesValue }),
|
|
2106
3328
|
};
|
|
2107
|
-
|
|
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
|
-
});
|
|
3329
|
+
this.stateService.sendProcessLinkCreateEvent(createRequest);
|
|
2119
3330
|
});
|
|
2120
3331
|
}
|
|
2121
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2122
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
3332
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormFlowComponent, deps: [{ token: i1$5.FormFlowService }, { token: ProcessLinkStateService }, { token: ProcessLinkService }, { token: ProcessLinkButtonService }, { token: i3$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3333
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.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$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
2123
3334
|
}
|
|
2124
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3335
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormFlowComponent, decorators: [{
|
|
2125
3336
|
type: Component,
|
|
2126
3337
|
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$
|
|
3338
|
+
}], ctorParameters: () => [{ type: i1$5.FormFlowService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$3.ActivatedRoute }] });
|
|
2128
3339
|
|
|
2129
3340
|
/*
|
|
2130
3341
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -2151,7 +3362,7 @@ class SelectUIComponentComponent {
|
|
|
2151
3362
|
this.formCustomComponentListItems$ = combineLatest([
|
|
2152
3363
|
this.stateService.selectedProcessLink$,
|
|
2153
3364
|
this._formCustomComponentConfig$,
|
|
2154
|
-
]).pipe(map
|
|
3365
|
+
]).pipe(map(([selectedProcessLink, formCustomComponentConfigs]) => Object.keys(formCustomComponentConfigs).map(key => ({
|
|
2155
3366
|
content: key,
|
|
2156
3367
|
selected: selectedProcessLink ? selectedProcessLink?.componentKey === key : false,
|
|
2157
3368
|
}))), tap(formCustomComponentListItems => {
|
|
@@ -2177,7 +3388,9 @@ class SelectUIComponentComponent {
|
|
|
2177
3388
|
: this.buttonService.disableSaveButton();
|
|
2178
3389
|
}
|
|
2179
3390
|
openBackButtonSubscription() {
|
|
2180
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
3391
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
3392
|
+
.pipe(withLatestFrom$1(this.stateService.isEditing$), filter(([, isEditing]) => !isEditing))
|
|
3393
|
+
.subscribe(() => {
|
|
2181
3394
|
this.stateService.setInitial();
|
|
2182
3395
|
}));
|
|
2183
3396
|
}
|
|
@@ -2199,14 +3412,7 @@ class SelectUIComponentComponent {
|
|
|
2199
3412
|
componentKey: this._selectedCustomComponent.content,
|
|
2200
3413
|
activityId: selectedProcessLink.activityId,
|
|
2201
3414
|
};
|
|
2202
|
-
|
|
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
|
-
});
|
|
3415
|
+
this.stateService.sendProcessLinkUpdateEvent(updateRequest);
|
|
2210
3416
|
});
|
|
2211
3417
|
}
|
|
2212
3418
|
saveNewProcessLink() {
|
|
@@ -2219,21 +3425,18 @@ class SelectUIComponentComponent {
|
|
|
2219
3425
|
processLinkType: processLinkTypeId,
|
|
2220
3426
|
activityId: modalParams.element.id,
|
|
2221
3427
|
};
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
return [];
|
|
2225
|
-
}
|
|
2226
|
-
return this.processLinkService.saveProcessLink(createRequest);
|
|
3428
|
+
this.stateService.sendProcessLinkCreateEvent(createRequest);
|
|
3429
|
+
return [];
|
|
2227
3430
|
}))
|
|
2228
3431
|
.subscribe({
|
|
2229
3432
|
next: () => this.stateService.closeModal(),
|
|
2230
3433
|
error: () => this.stateService.stopSaving(),
|
|
2231
3434
|
});
|
|
2232
3435
|
}
|
|
2233
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2234
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
3436
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectUIComponentComponent, deps: [{ token: ProcessLinkStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkService }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3437
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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: i3$2.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$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2235
3438
|
}
|
|
2236
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3439
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectUIComponentComponent, decorators: [{
|
|
2237
3440
|
type: Component,
|
|
2238
3441
|
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
3442
|
}], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkService }, { type: undefined, decorators: [{
|
|
@@ -2243,6 +3446,348 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2243
3446
|
args: [FORM_CUSTOM_COMPONENT_TOKEN]
|
|
2244
3447
|
}] }] });
|
|
2245
3448
|
|
|
3449
|
+
/*
|
|
3450
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
3451
|
+
*
|
|
3452
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3453
|
+
* you may not use this file except in compliance with the License.
|
|
3454
|
+
* You may obtain a copy of the License at
|
|
3455
|
+
*
|
|
3456
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
3457
|
+
*
|
|
3458
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3459
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
3460
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3461
|
+
* See the License for the specific language governing permissions and
|
|
3462
|
+
* limitations under the License.
|
|
3463
|
+
*/
|
|
3464
|
+
class SelectBuildingBlockComponent {
|
|
3465
|
+
constructor(processLinkBuildingBlockApiService, stateService, buildingBlockStateService, buttonService, stepService) {
|
|
3466
|
+
this.processLinkBuildingBlockApiService = processLinkBuildingBlockApiService;
|
|
3467
|
+
this.stateService = stateService;
|
|
3468
|
+
this.buildingBlockStateService = buildingBlockStateService;
|
|
3469
|
+
this.buttonService = buttonService;
|
|
3470
|
+
this.stepService = stepService;
|
|
3471
|
+
this.buildingBlocks$ = this.processLinkBuildingBlockApiService
|
|
3472
|
+
.getBuildingBlockDefinitions({ includeArtwork: true })
|
|
3473
|
+
.pipe(map(definitions => [...(definitions ?? [])]), map(definitions => definitions.sort((a, b) => (a.name || a.key).localeCompare(b.name || b.key))), catchError(() => of([])), tap(() => {
|
|
3474
|
+
this.loading = false;
|
|
3475
|
+
}), shareReplay(1));
|
|
3476
|
+
this.loading = true;
|
|
3477
|
+
this.selectedKey = null;
|
|
3478
|
+
this.subscriptions = new Subscription();
|
|
3479
|
+
this.buildingBlocks = [];
|
|
3480
|
+
}
|
|
3481
|
+
ngOnInit() {
|
|
3482
|
+
this.buttonService.disableNextButton();
|
|
3483
|
+
this.subscriptions.add(this.buildingBlocks$.subscribe(definitions => {
|
|
3484
|
+
this.buildingBlocks = definitions ?? [];
|
|
3485
|
+
if (this.selectedKey) {
|
|
3486
|
+
this.stepService.updateBuildingBlockSelectionStepLabel(this.getDefinitionLabel(this.findDefinitionByKey(this.selectedKey)));
|
|
3487
|
+
}
|
|
3488
|
+
}));
|
|
3489
|
+
this.subscriptions.add(this.buildingBlockStateService.definitionKey$.subscribe(key => {
|
|
3490
|
+
this.selectedKey = key;
|
|
3491
|
+
if (key) {
|
|
3492
|
+
this.stepService.updateBuildingBlockSelectionStepLabel(this.getDefinitionLabel(this.findDefinitionByKey(key)));
|
|
3493
|
+
this.buttonService.enableNextButton();
|
|
3494
|
+
}
|
|
3495
|
+
else {
|
|
3496
|
+
this.buttonService.disableNextButton();
|
|
3497
|
+
}
|
|
3498
|
+
}));
|
|
3499
|
+
this.subscriptions.add(this.buttonService.backButtonClick$
|
|
3500
|
+
.pipe(withLatestFrom$1(this.stateService.isEditing$), filter(([, isEditing]) => !isEditing))
|
|
3501
|
+
.subscribe(() => {
|
|
3502
|
+
this.stateService.setInitial();
|
|
3503
|
+
}));
|
|
3504
|
+
this.subscriptions.add(this.buttonService.nextButtonClick$
|
|
3505
|
+
.pipe(withLatestFrom$1(this.stateService.isEditing$), filter(([, isEditing]) => !isEditing))
|
|
3506
|
+
.subscribe(() => {
|
|
3507
|
+
this.stepService.setConfigureBuildingBlockPluginsStep(this.getDefinitionLabel(this.findDefinitionByKey(this.selectedKey)));
|
|
3508
|
+
}));
|
|
3509
|
+
}
|
|
3510
|
+
ngOnDestroy() {
|
|
3511
|
+
this.subscriptions.unsubscribe();
|
|
3512
|
+
}
|
|
3513
|
+
onSelectionChange(event) {
|
|
3514
|
+
const definition = event?.value;
|
|
3515
|
+
this.selectedKey = definition?.key ?? null;
|
|
3516
|
+
this.buildingBlockStateService.setDefinitionKey(definition?.key ?? null);
|
|
3517
|
+
this.stepService.updateBuildingBlockSelectionStepLabel(this.getDefinitionLabel(definition));
|
|
3518
|
+
if (definition?.key) {
|
|
3519
|
+
this.buttonService.enableNextButton();
|
|
3520
|
+
}
|
|
3521
|
+
else {
|
|
3522
|
+
this.buttonService.disableNextButton();
|
|
3523
|
+
}
|
|
3524
|
+
}
|
|
3525
|
+
trackByKey(_, definition) {
|
|
3526
|
+
return definition.key;
|
|
3527
|
+
}
|
|
3528
|
+
findDefinitionByKey(key) {
|
|
3529
|
+
if (!key)
|
|
3530
|
+
return undefined;
|
|
3531
|
+
return this.buildingBlocks.find(definition => definition.key === key);
|
|
3532
|
+
}
|
|
3533
|
+
getDefinitionLabel(definition) {
|
|
3534
|
+
if (!definition)
|
|
3535
|
+
return '';
|
|
3536
|
+
const name = definition.name || definition.key;
|
|
3537
|
+
return name;
|
|
3538
|
+
}
|
|
3539
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectBuildingBlockComponent, deps: [{ token: ProcessLinkBuildingBlockApiService }, { token: ProcessLinkStateService }, { token: BuildingBlockStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3540
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SelectBuildingBlockComponent, isStandalone: false, selector: "valtimo-select-building-block", ngImport: i0, template: "<!--\n Copyright 2015-2025 Ritense BV\n Licensed under the EUPL, Version 1.2\n-->\n\n<div class=\"select-building-block\" *ngIf=\"!loading; else loadingState\">\n <ng-container *ngIf=\"buildingBlocks$ | async as buildingBlocks\">\n <ng-container *ngIf=\"buildingBlocks.length; else emptyState\">\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"onSelectionChange($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">\n {{ 'processLinkConfiguration.buildingBlock.name' | translate }}\n </cds-list-column>\n <cds-list-column>\n {{ 'processLinkConfiguration.buildingBlock.description' | translate }}\n </cds-list-column>\n </cds-list-header>\n <cds-list-row *ngFor=\"let buildingBlock of buildingBlocks\" [value]=\"buildingBlock\">\n <cds-list-column>\n <div *ngIf=\"buildingBlock.imageBase64\">\n <img\n class=\"building-block-artwork\"\n [src]=\"'data:image/png;base64,' + buildingBlock.imageBase64\"\n [title]=\"buildingBlock.name\"\n />\n </div>\n </cds-list-column>\n <cds-list-column>{{ buildingBlock.name }}</cds-list-column>\n <cds-list-column>{{ buildingBlock.description }}</cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingState>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n\n<ng-template #emptyState>\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.emptyState' | translate }}\n </div>\n</ng-template>\n", styles: [".loading-container{display:flex;justify-content:center;padding:16px 0}.empty-state{padding:1rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#f4f4f4;color:#8d8d8d}.building-block-artwork{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i3$2.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i3$2.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i3$2.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i3$2.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
3541
|
+
}
|
|
3542
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectBuildingBlockComponent, decorators: [{
|
|
3543
|
+
type: Component,
|
|
3544
|
+
args: [{ standalone: false, selector: 'valtimo-select-building-block', template: "<!--\n Copyright 2015-2025 Ritense BV\n Licensed under the EUPL, Version 1.2\n-->\n\n<div class=\"select-building-block\" *ngIf=\"!loading; else loadingState\">\n <ng-container *ngIf=\"buildingBlocks$ | async as buildingBlocks\">\n <ng-container *ngIf=\"buildingBlocks.length; else emptyState\">\n <div class=\"list-container\">\n <cds-structured-list (selected)=\"onSelectionChange($event)\" selection=\"true\">\n <cds-list-header>\n <cds-list-column nowrap=\"true\"></cds-list-column>\n <cds-list-column nowrap=\"true\">\n {{ 'processLinkConfiguration.buildingBlock.name' | translate }}\n </cds-list-column>\n <cds-list-column>\n {{ 'processLinkConfiguration.buildingBlock.description' | translate }}\n </cds-list-column>\n </cds-list-header>\n <cds-list-row *ngFor=\"let buildingBlock of buildingBlocks\" [value]=\"buildingBlock\">\n <cds-list-column>\n <div *ngIf=\"buildingBlock.imageBase64\">\n <img\n class=\"building-block-artwork\"\n [src]=\"'data:image/png;base64,' + buildingBlock.imageBase64\"\n [title]=\"buildingBlock.name\"\n />\n </div>\n </cds-list-column>\n <cds-list-column>{{ buildingBlock.name }}</cds-list-column>\n <cds-list-column>{{ buildingBlock.description }}</cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingState>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n\n<ng-template #emptyState>\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.emptyState' | translate }}\n </div>\n</ng-template>\n", styles: [".loading-container{display:flex;justify-content:center;padding:16px 0}.empty-state{padding:1rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#f4f4f4;color:#8d8d8d}.building-block-artwork{object-fit:contain;height:60px;width:100%;margin-bottom:-.5rem}::ng-deep .list-container .cds--structured-list-td{vertical-align:top}\n"] }]
|
|
3545
|
+
}], ctorParameters: () => [{ type: ProcessLinkBuildingBlockApiService }, { type: ProcessLinkStateService }, { type: BuildingBlockStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }] });
|
|
3546
|
+
|
|
3547
|
+
/*
|
|
3548
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
3549
|
+
*
|
|
3550
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3551
|
+
* you may not use this file except in compliance with the License.
|
|
3552
|
+
* You may obtain a copy of the License at
|
|
3553
|
+
*
|
|
3554
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
3555
|
+
*
|
|
3556
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3557
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
3558
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3559
|
+
* See the License for the specific language governing permissions and
|
|
3560
|
+
* limitations under the License.
|
|
3561
|
+
*/
|
|
3562
|
+
class ConfigureBuildingBlockPluginsComponent {
|
|
3563
|
+
constructor(stateService, buildingBlockStateService, buttonService, stepService, pluginManagementService, pluginTranslationService, processLinkService, translateService, processLinkBuildingBlockApiService) {
|
|
3564
|
+
this.stateService = stateService;
|
|
3565
|
+
this.buildingBlockStateService = buildingBlockStateService;
|
|
3566
|
+
this.buttonService = buttonService;
|
|
3567
|
+
this.stepService = stepService;
|
|
3568
|
+
this.pluginManagementService = pluginManagementService;
|
|
3569
|
+
this.pluginTranslationService = pluginTranslationService;
|
|
3570
|
+
this.processLinkService = processLinkService;
|
|
3571
|
+
this.translateService = translateService;
|
|
3572
|
+
this.processLinkBuildingBlockApiService = processLinkBuildingBlockApiService;
|
|
3573
|
+
this.pluginKeys$ = this.buildingBlockStateService.requiredPluginKeys$;
|
|
3574
|
+
this.isNestedBuildingBlock$ = this.buildingBlockStateService.isNestedBuildingBlock$;
|
|
3575
|
+
this._pluginDependenciesWarningTranslationKey$ = this.buildingBlockStateService.pluginDependencies$.pipe(map$1(dependencies => {
|
|
3576
|
+
if (!dependencies || !dependencies.length)
|
|
3577
|
+
return '';
|
|
3578
|
+
const zaakInstanceLinkDependency = dependencies.includes('ZAAK_INSTANCE_LINK');
|
|
3579
|
+
const zaakTypeLinkDependency = dependencies.includes('ZAAK_TYPE_LINK');
|
|
3580
|
+
if (zaakInstanceLinkDependency && zaakTypeLinkDependency) {
|
|
3581
|
+
return 'processLinkConfiguration.buildingBlock.pluginDependenciesWarning.zaakInstanceAndTypeLink';
|
|
3582
|
+
}
|
|
3583
|
+
else if (zaakInstanceLinkDependency) {
|
|
3584
|
+
return 'processLinkConfiguration.buildingBlock.pluginDependenciesWarning.zaakInstanceLink';
|
|
3585
|
+
}
|
|
3586
|
+
else if (zaakTypeLinkDependency) {
|
|
3587
|
+
return 'processLinkConfiguration.buildingBlock.pluginDependenciesWarning.zaakTypeLink';
|
|
3588
|
+
}
|
|
3589
|
+
return '';
|
|
3590
|
+
}));
|
|
3591
|
+
this.dependenciesNotificationObject$ = combineLatest([
|
|
3592
|
+
this._pluginDependenciesWarningTranslationKey$,
|
|
3593
|
+
this.translateService.stream('key'),
|
|
3594
|
+
]).pipe(map$1(([warningTranslationKey]) => !warningTranslationKey
|
|
3595
|
+
? null
|
|
3596
|
+
: {
|
|
3597
|
+
type: 'warning',
|
|
3598
|
+
lowContrast: true,
|
|
3599
|
+
title: this.translateService.instant('processLinkConfiguration.buildingBlock.pluginDependenciesWarning.title'),
|
|
3600
|
+
message: this.translateService.instant(warningTranslationKey),
|
|
3601
|
+
showClose: false,
|
|
3602
|
+
}));
|
|
3603
|
+
this.loading$ = this.buildingBlockStateService.requirementsLoading$;
|
|
3604
|
+
this.versions$ = this.buildingBlockStateService.versions$;
|
|
3605
|
+
this.definitionVersionTag$ = this.buildingBlockStateService.definitionVersionTag$;
|
|
3606
|
+
this.versionPlaceholder$ = this.translateService.stream('processLinkConfiguration.buildingBlock.versionPlaceholder');
|
|
3607
|
+
this.configurationPlaceholder$ = this.translateService.stream('processLinkConfiguration.buildingBlock.configurationPlaceholder');
|
|
3608
|
+
this.versionItems$ = combineLatest([
|
|
3609
|
+
this.versions$,
|
|
3610
|
+
this.definitionVersionTag$,
|
|
3611
|
+
this.versionPlaceholder$,
|
|
3612
|
+
]).pipe(map$1(([versions, selectedVersion, placeholder]) => {
|
|
3613
|
+
const normalizedSelectedVersion = selectedVersion || '';
|
|
3614
|
+
return [
|
|
3615
|
+
{
|
|
3616
|
+
id: '',
|
|
3617
|
+
content: placeholder,
|
|
3618
|
+
selected: normalizedSelectedVersion === '',
|
|
3619
|
+
},
|
|
3620
|
+
...(versions || []).map(version => ({
|
|
3621
|
+
id: version,
|
|
3622
|
+
content: version,
|
|
3623
|
+
selected: normalizedSelectedVersion === version,
|
|
3624
|
+
})),
|
|
3625
|
+
];
|
|
3626
|
+
}));
|
|
3627
|
+
this.pluginConfigurationViewModels$ = combineLatest([
|
|
3628
|
+
this.pluginKeys$,
|
|
3629
|
+
this.buildingBlockStateService.pluginMappings$,
|
|
3630
|
+
this.configurationPlaceholder$,
|
|
3631
|
+
]).pipe(switchMap$1(([pluginKeys, pluginMappings, placeholder]) => {
|
|
3632
|
+
if (!pluginKeys?.length) {
|
|
3633
|
+
return of([]);
|
|
3634
|
+
}
|
|
3635
|
+
return combineLatest(pluginKeys.map(pluginKey => this.getConfigurationOptions(pluginKey).pipe(map$1(options => ({
|
|
3636
|
+
key: pluginKey,
|
|
3637
|
+
label: this.pluginLabel(pluginKey),
|
|
3638
|
+
dropdownItems: this.buildDropdownItems(options, pluginMappings?.[pluginKey], placeholder),
|
|
3639
|
+
hasOptions: options.length > 0,
|
|
3640
|
+
})))));
|
|
3641
|
+
}));
|
|
3642
|
+
this._subscriptions = new Subscription();
|
|
3643
|
+
this._configurationOptionsCache = new Map();
|
|
3644
|
+
}
|
|
3645
|
+
ngOnInit() {
|
|
3646
|
+
// Check if we're configuring from within a building block process (nested building block)
|
|
3647
|
+
this._subscriptions.add(this.stateService.modalParams$
|
|
3648
|
+
.pipe(map$1(params => params?.processDefinitionId), distinctUntilChanged())
|
|
3649
|
+
.subscribe(processDefinitionId => {
|
|
3650
|
+
if (processDefinitionId) {
|
|
3651
|
+
this.processLinkBuildingBlockApiService
|
|
3652
|
+
.isBuildingBlockProcess(processDefinitionId)
|
|
3653
|
+
.subscribe(isNested => {
|
|
3654
|
+
this.buildingBlockStateService.setIsNestedBuildingBlock(isNested);
|
|
3655
|
+
});
|
|
3656
|
+
}
|
|
3657
|
+
}));
|
|
3658
|
+
this._subscriptions.add(combineLatest([
|
|
3659
|
+
this.buildingBlockStateService.requiredPluginKeys$,
|
|
3660
|
+
this.buildingBlockStateService.mappingsComplete$,
|
|
3661
|
+
this.buildingBlockStateService.requirementsLoading$,
|
|
3662
|
+
this.definitionVersionTag$,
|
|
3663
|
+
]).subscribe(([keys, complete, loading, version]) => {
|
|
3664
|
+
if (loading || !version) {
|
|
3665
|
+
this.buttonService.disableNextButton();
|
|
3666
|
+
return;
|
|
3667
|
+
}
|
|
3668
|
+
if (keys.length === 0 || complete) {
|
|
3669
|
+
this.buttonService.enableNextButton();
|
|
3670
|
+
}
|
|
3671
|
+
else {
|
|
3672
|
+
this.buttonService.disableNextButton();
|
|
3673
|
+
}
|
|
3674
|
+
}));
|
|
3675
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
3676
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
3677
|
+
.subscribe(() => {
|
|
3678
|
+
this.stepService.setBuildingBlockSteps();
|
|
3679
|
+
}));
|
|
3680
|
+
this._subscriptions.add(this.buttonService.nextButtonClick$
|
|
3681
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
3682
|
+
.subscribe(() => {
|
|
3683
|
+
this.stepService.setConfigureBuildingBlockMappingsStep(this.buildingBlockStateService.getDefinitionSnapshot().key ?? undefined);
|
|
3684
|
+
}));
|
|
3685
|
+
}
|
|
3686
|
+
ngOnDestroy() {
|
|
3687
|
+
this._subscriptions.unsubscribe();
|
|
3688
|
+
}
|
|
3689
|
+
getConfigurationOptions(pluginDefinitionKey) {
|
|
3690
|
+
if (!this._configurationOptionsCache.has(pluginDefinitionKey)) {
|
|
3691
|
+
this._configurationOptionsCache.set(pluginDefinitionKey, this.pluginManagementService
|
|
3692
|
+
.getPluginConfigurationsByPluginDefinitionKey(pluginDefinitionKey)
|
|
3693
|
+
.pipe(catchError$1(() => of([])), shareReplay(1)));
|
|
3694
|
+
}
|
|
3695
|
+
return this._configurationOptionsCache.get(pluginDefinitionKey) ?? of([]);
|
|
3696
|
+
}
|
|
3697
|
+
onMappingChange(pluginDefinitionKey, configurationId) {
|
|
3698
|
+
const normalizedValue = configurationId || null;
|
|
3699
|
+
this.buildingBlockStateService.setPluginConfigurationMapping(pluginDefinitionKey, normalizedValue);
|
|
3700
|
+
}
|
|
3701
|
+
pluginLabel(pluginDefinitionKey) {
|
|
3702
|
+
return (this.pluginTranslationService.instant('title', pluginDefinitionKey) || pluginDefinitionKey);
|
|
3703
|
+
}
|
|
3704
|
+
buildDropdownItems(options, selectedId, placeholder) {
|
|
3705
|
+
return [
|
|
3706
|
+
{
|
|
3707
|
+
id: '',
|
|
3708
|
+
content: placeholder,
|
|
3709
|
+
selected: !selectedId,
|
|
3710
|
+
},
|
|
3711
|
+
...options.map(option => ({
|
|
3712
|
+
id: option.id,
|
|
3713
|
+
content: option.title,
|
|
3714
|
+
selected: selectedId === option.id || (options.length === 1 && !selectedId),
|
|
3715
|
+
})),
|
|
3716
|
+
];
|
|
3717
|
+
}
|
|
3718
|
+
checkSingleBuildingBlockType(types) {
|
|
3719
|
+
if (!types?.length)
|
|
3720
|
+
return false;
|
|
3721
|
+
return types.length === 1 && types[0]?.processLinkType === 'building-block' && types[0].enabled;
|
|
3722
|
+
}
|
|
3723
|
+
onVersionChange(versionTag) {
|
|
3724
|
+
const normalizedValue = versionTag || null;
|
|
3725
|
+
this.buildingBlockStateService.setPluginConfigurationMappings(undefined);
|
|
3726
|
+
this.buildingBlockStateService.setDefinitionVersionTag(normalizedValue);
|
|
3727
|
+
}
|
|
3728
|
+
createProcessLink() {
|
|
3729
|
+
this.stateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
|
|
3730
|
+
const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
|
|
3731
|
+
if (!modalParams || !key || !versionTag) {
|
|
3732
|
+
this.stateService.stopSaving();
|
|
3733
|
+
return;
|
|
3734
|
+
}
|
|
3735
|
+
const activityId = modalParams.element?.id;
|
|
3736
|
+
if (!activityId) {
|
|
3737
|
+
this.stateService.stopSaving();
|
|
3738
|
+
return;
|
|
3739
|
+
}
|
|
3740
|
+
const request = {
|
|
3741
|
+
processDefinitionId: modalParams.processDefinitionId ?? '-',
|
|
3742
|
+
activityId,
|
|
3743
|
+
activityType: modalParams.element?.activityListenerType ?? '',
|
|
3744
|
+
processLinkType: 'building-block',
|
|
3745
|
+
buildingBlockDefinitionKey: key,
|
|
3746
|
+
buildingBlockDefinitionVersionTag: versionTag,
|
|
3747
|
+
pluginConfigurationMappings: this.getMappingsForPayload(),
|
|
3748
|
+
inputMappings: [],
|
|
3749
|
+
outputMappings: [],
|
|
3750
|
+
};
|
|
3751
|
+
this.stateService.sendProcessLinkCreateEvent(request);
|
|
3752
|
+
});
|
|
3753
|
+
}
|
|
3754
|
+
updateProcessLink(processLink) {
|
|
3755
|
+
this.stateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
|
|
3756
|
+
const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
|
|
3757
|
+
if (!modalParams || !key || !versionTag) {
|
|
3758
|
+
this.stateService.stopSaving();
|
|
3759
|
+
return;
|
|
3760
|
+
}
|
|
3761
|
+
const activityId = modalParams.element?.id;
|
|
3762
|
+
const request = {
|
|
3763
|
+
id: processLink.id,
|
|
3764
|
+
activityId: activityId,
|
|
3765
|
+
processLinkType: 'building-block',
|
|
3766
|
+
buildingBlockDefinitionKey: key,
|
|
3767
|
+
buildingBlockDefinitionVersionTag: versionTag,
|
|
3768
|
+
pluginConfigurationMappings: this.getMappingsForPayload(),
|
|
3769
|
+
inputMappings: [],
|
|
3770
|
+
outputMappings: [],
|
|
3771
|
+
};
|
|
3772
|
+
this.stateService.sendProcessLinkUpdateEvent(request);
|
|
3773
|
+
});
|
|
3774
|
+
}
|
|
3775
|
+
getMappingsForPayload() {
|
|
3776
|
+
const mappings = this.buildingBlockStateService.getPluginConfigurationMappingsSnapshot();
|
|
3777
|
+
return Object.entries(mappings).reduce((acc, [pluginKey, configurationId]) => {
|
|
3778
|
+
if (configurationId)
|
|
3779
|
+
acc[pluginKey] = configurationId;
|
|
3780
|
+
return acc;
|
|
3781
|
+
}, {});
|
|
3782
|
+
}
|
|
3783
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockPluginsComponent, deps: [{ token: ProcessLinkStateService }, { token: BuildingBlockStateService }, { token: ProcessLinkButtonService }, { token: ProcessLinkStepService }, { token: i1$1.PluginManagementService }, { token: i1$1.PluginTranslationService }, { token: ProcessLinkService }, { token: i3.TranslateService }, { token: ProcessLinkBuildingBlockApiService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3784
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: ConfigureBuildingBlockPluginsComponent, isStandalone: false, selector: "valtimo-configure-building-block-plugins", 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=\"configure-building-block-plugins\">\n <div\n *ngIf=\"dependenciesNotificationObject$ | async as dependenciesNotificationObject\"\n class=\"configure-building-block-plugins__warning\"\n >\n <cds-notification [notificationObj]=\"dependenciesNotificationObject\"> </cds-notification>\n </div>\n\n @if (versionItems$ | async; as versionItems) {\n @let versionPlaceholder = versionPlaceholder$ | async;\n <div class=\"version-select\">\n <cds-combo-box\n cdsLayer\n size=\"lg\"\n [appendInline]=\"true\"\n [label]=\"'processLinkConfiguration.buildingBlock.versionLabel' | translate\"\n [placeholder]=\"versionPlaceholder || ''\"\n (selected)=\"onVersionChange($event?.id || '')\"\n (clear)=\"onVersionChange('')\"\n >\n <cds-dropdown-list [items]=\"versionItems\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n\n @if (loading$ | async) {\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n } @else {\n <div class=\"plugin-list\">\n @if (definitionVersionTag$ | async) {\n @if (isNestedBuildingBlock$ | async) {\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.nestedBuildingBlockInfo' | translate }}\n </div>\n } @else {\n @if (pluginConfigurationViewModels$ | async; as pluginConfigurationViewModels) {\n @if (pluginConfigurationViewModels.length === 0) {\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.noRequirements' | translate }}\n </div>\n } @else {\n @let configurationPlaceholder = configurationPlaceholder$ | async;\n\n <div class=\"plugin-row\">\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.pluginLabel' | translate\"\n >\n </v-input-label>\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.configurationLabel' | translate\"\n required=\"true\"\n >\n </v-input-label>\n </div>\n\n @for (plugin of pluginConfigurationViewModels; track plugin.key) {\n <div class=\"plugin-row\">\n <div class=\"plugin-label\">\n {{ plugin.label }}\n </div>\n\n <cds-combo-box\n cdsLayer\n size=\"lg\"\n [appendInline]=\"true\"\n [placeholder]=\"configurationPlaceholder || ''\"\n (selected)=\"onMappingChange(plugin.key, $event?.id || '')\"\n (clear)=\"onMappingChange(plugin.key, '')\"\n >\n <cds-dropdown-list [items]=\"plugin.dropdownItems\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n }\n }\n }\n }\n </div>\n }\n</div>\n", styles: [".loading-container{display:flex;justify-content:center;padding:2rem 0}.empty-state{padding:1rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#f4f4f4;color:#8d8d8d}.plugin-row{display:grid;align-items:center;grid-template-columns:1fr 1fr;margin-bottom:15px}.plugin-row .plugin-label{padding-left:16px;border-block-end:1px solid var(--cds-border-strong);height:100%;margin-right:15px;display:grid;align-items:center}.plugin-list{margin-top:30px}.configure-building-block-plugins__warning{display:flex;width:100%;margin-bottom:24px}.configure-building-block-plugins__warning ::ng-deep cds-notification{max-inline-size:100%;min-inline-size:100%}\n"], dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.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: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i3$2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i2$1.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "tooltipTranslationKey", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "component", type: i3$2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
3785
|
+
}
|
|
3786
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockPluginsComponent, decorators: [{
|
|
3787
|
+
type: Component,
|
|
3788
|
+
args: [{ standalone: false, selector: 'valtimo-configure-building-block-plugins', 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=\"configure-building-block-plugins\">\n <div\n *ngIf=\"dependenciesNotificationObject$ | async as dependenciesNotificationObject\"\n class=\"configure-building-block-plugins__warning\"\n >\n <cds-notification [notificationObj]=\"dependenciesNotificationObject\"> </cds-notification>\n </div>\n\n @if (versionItems$ | async; as versionItems) {\n @let versionPlaceholder = versionPlaceholder$ | async;\n <div class=\"version-select\">\n <cds-combo-box\n cdsLayer\n size=\"lg\"\n [appendInline]=\"true\"\n [label]=\"'processLinkConfiguration.buildingBlock.versionLabel' | translate\"\n [placeholder]=\"versionPlaceholder || ''\"\n (selected)=\"onVersionChange($event?.id || '')\"\n (clear)=\"onVersionChange('')\"\n >\n <cds-dropdown-list [items]=\"versionItems\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n\n @if (loading$ | async) {\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n } @else {\n <div class=\"plugin-list\">\n @if (definitionVersionTag$ | async) {\n @if (isNestedBuildingBlock$ | async) {\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.nestedBuildingBlockInfo' | translate }}\n </div>\n } @else {\n @if (pluginConfigurationViewModels$ | async; as pluginConfigurationViewModels) {\n @if (pluginConfigurationViewModels.length === 0) {\n <div class=\"empty-state\">\n {{ 'processLinkConfiguration.buildingBlock.noRequirements' | translate }}\n </div>\n } @else {\n @let configurationPlaceholder = configurationPlaceholder$ | async;\n\n <div class=\"plugin-row\">\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.pluginLabel' | translate\"\n >\n </v-input-label>\n <v-input-label\n [title]=\"'processLinkConfiguration.buildingBlock.configurationLabel' | translate\"\n required=\"true\"\n >\n </v-input-label>\n </div>\n\n @for (plugin of pluginConfigurationViewModels; track plugin.key) {\n <div class=\"plugin-row\">\n <div class=\"plugin-label\">\n {{ plugin.label }}\n </div>\n\n <cds-combo-box\n cdsLayer\n size=\"lg\"\n [appendInline]=\"true\"\n [placeholder]=\"configurationPlaceholder || ''\"\n (selected)=\"onMappingChange(plugin.key, $event?.id || '')\"\n (clear)=\"onMappingChange(plugin.key, '')\"\n >\n <cds-dropdown-list [items]=\"plugin.dropdownItems\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n }\n }\n }\n }\n </div>\n }\n</div>\n", styles: [".loading-container{display:flex;justify-content:center;padding:2rem 0}.empty-state{padding:1rem;border:1px solid #e0e0e0;border-radius:4px;background-color:#f4f4f4;color:#8d8d8d}.plugin-row{display:grid;align-items:center;grid-template-columns:1fr 1fr;margin-bottom:15px}.plugin-row .plugin-label{padding-left:16px;border-block-end:1px solid var(--cds-border-strong);height:100%;margin-right:15px;display:grid;align-items:center}.plugin-list{margin-top:30px}.configure-building-block-plugins__warning{display:flex;width:100%;margin-bottom:24px}.configure-building-block-plugins__warning ::ng-deep cds-notification{max-inline-size:100%;min-inline-size:100%}\n"] }]
|
|
3789
|
+
}], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: BuildingBlockStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: i1$1.PluginManagementService }, { type: i1$1.PluginTranslationService }, { type: ProcessLinkService }, { type: i3.TranslateService }, { type: ProcessLinkBuildingBlockApiService }] });
|
|
3790
|
+
|
|
2246
3791
|
/*
|
|
2247
3792
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
2248
3793
|
*
|
|
@@ -2259,12 +3804,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2259
3804
|
* limitations under the License.
|
|
2260
3805
|
*/
|
|
2261
3806
|
class ProcessLinkModalComponent {
|
|
2262
|
-
constructor(stateService, stepService, buttonService, pluginStateService,
|
|
3807
|
+
constructor(stateService, stepService, buttonService, pluginStateService, processLinkStateService, configService) {
|
|
2263
3808
|
this.stateService = stateService;
|
|
2264
3809
|
this.stepService = stepService;
|
|
2265
3810
|
this.buttonService = buttonService;
|
|
2266
3811
|
this.pluginStateService = pluginStateService;
|
|
2267
|
-
this.processLinkService = processLinkService;
|
|
2268
3812
|
this.processLinkStateService = processLinkStateService;
|
|
2269
3813
|
this.configService = configService;
|
|
2270
3814
|
this.showModal$ = this.stateService.showModal$;
|
|
@@ -2281,6 +3825,7 @@ class ProcessLinkModalComponent {
|
|
|
2281
3825
|
this.saving$ = this.stateService.saving$;
|
|
2282
3826
|
this.typeOfSelectedProcessLink$ = this.stateService.typeOfSelectedProcessLink$;
|
|
2283
3827
|
this.viewModelEnabled$ = this.stateService.viewModelEnabled$;
|
|
3828
|
+
this.isEditing$ = this.stateService.isEditing$;
|
|
2284
3829
|
this.selectedPluginConfiguration$ = this.pluginStateService.selectedPluginConfiguration$;
|
|
2285
3830
|
this.showViewModelToggle = this.configService.config.featureToggles.enableFormViewModel;
|
|
2286
3831
|
}
|
|
@@ -2298,30 +3843,21 @@ class ProcessLinkModalComponent {
|
|
|
2298
3843
|
}
|
|
2299
3844
|
unlinkButtonClick() {
|
|
2300
3845
|
this.stateService.selectedProcessLink$.pipe(take(1)).subscribe(selectedProcessLink => {
|
|
2301
|
-
|
|
2302
|
-
|
|
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();
|
|
3846
|
+
this.processLinkStateService.sendProcessLinkDeleteEvent({
|
|
3847
|
+
activityId: selectedProcessLink.activityId,
|
|
2312
3848
|
});
|
|
2313
3849
|
});
|
|
2314
3850
|
}
|
|
2315
3851
|
toggleCheckedChange(value) {
|
|
2316
3852
|
this.processLinkStateService.setViewModelEnabled(value);
|
|
2317
3853
|
}
|
|
2318
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
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" }] }); }
|
|
3854
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModalComponent, deps: [{ token: ProcessLinkStateService }, { token: ProcessLinkStepService }, { token: ProcessLinkButtonService }, { token: PluginStateService }, { token: ProcessLinkStateService }, { token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3855
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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 isEditing: isEditing$ | 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\">\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 *ngIf=\"obs.currentStepId === 'selectForm'\">\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 *ngIf=\"obs.currentStepId === 'selectFormFlow'\">\n <valtimo-select-form-flow></valtimo-select-form-flow>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'choosePluginConfiguration' ||\n obs.currentStepId === 'choosePluginDefinition'\n \"\n >\n <valtimo-select-plugin-configuration></valtimo-select-plugin-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'selectBuildingBlock'\">\n <valtimo-select-building-block></valtimo-select-building-block>\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 *ngIf=\"obs.currentStepId === 'configurePluginAction'\">\n <valtimo-plugin-action-configuration\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n ></valtimo-plugin-action-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configureBuildingBlockPlugins'\">\n <valtimo-configure-building-block-plugins></valtimo-configure-building-block-plugins>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configureBuildingBlockMappings'\">\n <valtimo-configure-building-block-mappings></valtimo-configure-building-block-mappings>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'uiComponent'\">\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=\"footer-spacer\"></div>\n <div class=\"action-buttons\">\n <button\n cdsButton=\"danger--primary\"\n *ngIf=\"obs.isEditing\"\n (click)=\"unlinkButtonClick()\"\n >\n {{ 'processLinkConfiguration.unlink' | translate }}\n </button>\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=\"primary\"\n *ngIf=\"obs.showSaveButton && !obs.saving\"\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{display:flex;flex-direction:row}.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}.cancel-button{width:20%;display:flex}.cancel-button button{width:100%}.footer-spacer{width:20%}.action-buttons{width:60%;display:flex;flex-direction:row;justify-content:flex-end}.action-buttons button{flex:1;max-width:33.33%}.process-link-progress{width:100%;margin-top:32px;margin-bottom:16px}.hidden{visibility:hidden}\n/*!\n * Copyright 2015-2026 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$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3$2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i3$2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i3$2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i3$2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i3$2.ModalHeaderLabel, selector: "[cdsModalHeaderLabel], [ibmModalHeaderLabel]" }, { kind: "component", type: i3$2.ProgressIndicator, selector: "cds-progress-indicator, ibm-progress-indicator", inputs: ["current", "steps", "translations", "orientation", "skeleton", "spacing"], outputs: ["stepSelected"] }, { kind: "directive", type: i3$2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i3$2.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i2$1.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i3$2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "ariaLabel", "skeleton"] }, { kind: "directive", type: i3$2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: ConfigureBuildingBlockMappingsComponent, selector: "valtimo-configure-building-block-mappings" }, { 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: "component", type: SelectBuildingBlockComponent, selector: "valtimo-select-building-block" }, { kind: "component", type: ConfigureBuildingBlockPluginsComponent, selector: "valtimo-configure-building-block-plugins" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
2320
3856
|
}
|
|
2321
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3857
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModalComponent, decorators: [{
|
|
2322
3858
|
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\"
|
|
2324
|
-
}], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type:
|
|
3859
|
+
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 isEditing: isEditing$ | 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\">\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 *ngIf=\"obs.currentStepId === 'selectForm'\">\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 *ngIf=\"obs.currentStepId === 'selectFormFlow'\">\n <valtimo-select-form-flow></valtimo-select-form-flow>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n obs.currentStepId === 'choosePluginConfiguration' ||\n obs.currentStepId === 'choosePluginDefinition'\n \"\n >\n <valtimo-select-plugin-configuration></valtimo-select-plugin-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'selectBuildingBlock'\">\n <valtimo-select-building-block></valtimo-select-building-block>\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 *ngIf=\"obs.currentStepId === 'configurePluginAction'\">\n <valtimo-plugin-action-configuration\n [selectedPluginConfiguration$]=\"selectedPluginConfiguration$\"\n ></valtimo-plugin-action-configuration>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configureBuildingBlockPlugins'\">\n <valtimo-configure-building-block-plugins></valtimo-configure-building-block-plugins>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'configureBuildingBlockMappings'\">\n <valtimo-configure-building-block-mappings></valtimo-configure-building-block-mappings>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"obs.currentStepId === 'uiComponent'\">\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=\"footer-spacer\"></div>\n <div class=\"action-buttons\">\n <button\n cdsButton=\"danger--primary\"\n *ngIf=\"obs.isEditing\"\n (click)=\"unlinkButtonClick()\"\n >\n {{ 'processLinkConfiguration.unlink' | translate }}\n </button>\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=\"primary\"\n *ngIf=\"obs.showSaveButton && !obs.saving\"\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{display:flex;flex-direction:row}.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}.cancel-button{width:20%;display:flex}.cancel-button button{width:100%}.footer-spacer{width:20%}.action-buttons{width:60%;display:flex;flex-direction:row;justify-content:flex-end}.action-buttons button{flex:1;max-width:33.33%}.process-link-progress{width:100%;margin-top:32px;margin-bottom:16px}.hidden{visibility:hidden}\n/*!\n * Copyright 2015-2026 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"] }]
|
|
3860
|
+
}], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: ProcessLinkStateService }, { type: i1.ConfigService }] });
|
|
2325
3861
|
|
|
2326
3862
|
/*
|
|
2327
3863
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -2376,13 +3912,13 @@ class ProcessLinkComponent {
|
|
|
2376
3912
|
.subscribe();
|
|
2377
3913
|
}
|
|
2378
3914
|
}
|
|
2379
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2380
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
3915
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkComponent, deps: [{ token: ProcessLinkService }, { token: ProcessLinkStateService }, { token: i2$1.ModalService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3916
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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
3917
|
}
|
|
2382
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3918
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkComponent, decorators: [{
|
|
2383
3919
|
type: Component,
|
|
2384
3920
|
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$
|
|
3921
|
+
}], ctorParameters: () => [{ type: ProcessLinkService }, { type: ProcessLinkStateService }, { type: i2$1.ModalService }] });
|
|
2386
3922
|
|
|
2387
3923
|
/*
|
|
2388
3924
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -2408,11 +3944,11 @@ const routes = [
|
|
|
2408
3944
|
},
|
|
2409
3945
|
];
|
|
2410
3946
|
class ProcessLinkRoutingModule {
|
|
2411
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2412
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
2413
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
3947
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
3948
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, imports: [i3$3.RouterModule], exports: [RouterModule] }); }
|
|
3949
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
|
|
2414
3950
|
}
|
|
2415
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3951
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, decorators: [{
|
|
2416
3952
|
type: NgModule,
|
|
2417
3953
|
args: [{
|
|
2418
3954
|
imports: [RouterModule.forChild(routes)],
|
|
@@ -2534,10 +4070,10 @@ class FormFlowConfigurationContainerComponent {
|
|
|
2534
4070
|
}
|
|
2535
4071
|
}));
|
|
2536
4072
|
}
|
|
2537
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2538
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
4073
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowConfigurationContainerComponent, deps: [{ token: FormFlowComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4074
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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
4075
|
}
|
|
2540
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4076
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowConfigurationContainerComponent, decorators: [{
|
|
2541
4077
|
type: Component,
|
|
2542
4078
|
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
4079
|
}], ctorParameters: () => [{ type: FormFlowComponentService }], propDecorators: { _dynamicContainer: [{
|
|
@@ -2668,7 +4204,7 @@ class FormFlowComponent {
|
|
|
2668
4204
|
this.formFlowService.getBreadcrumbs(this.formFlowInstanceId$.getValue()),
|
|
2669
4205
|
this.translateService.stream('key'),
|
|
2670
4206
|
])
|
|
2671
|
-
.pipe(map(([breadcrumbs]) => breadcrumbs))
|
|
4207
|
+
.pipe(map$1(([breadcrumbs]) => breadcrumbs))
|
|
2672
4208
|
.subscribe(breadcrumbs => {
|
|
2673
4209
|
const classElement = document.getElementsByClassName('cds--progress-step--current');
|
|
2674
4210
|
this.currentStepIndex$.next(breadcrumbs.currentStepIndex);
|
|
@@ -2730,13 +4266,13 @@ class FormFlowComponent {
|
|
|
2730
4266
|
enable() {
|
|
2731
4267
|
this.disabled$.next(false);
|
|
2732
4268
|
}
|
|
2733
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2734
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
4269
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponent, deps: [{ token: FormFlowService }, { token: i2$1.ValtimoModalService }, { token: i3.TranslateService }, { token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4270
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$2.ProgressIndicator, selector: "cds-progress-indicator, ibm-progress-indicator", inputs: ["current", "steps", "translations", "orientation", "skeleton", "spacing"], outputs: ["stepSelected"] }, { kind: "component", type: i2$1.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$1.AsyncPipe, name: "async" }] }); }
|
|
2735
4271
|
}
|
|
2736
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4272
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponent, decorators: [{
|
|
2737
4273
|
type: Component,
|
|
2738
4274
|
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$
|
|
4275
|
+
}], ctorParameters: () => [{ type: FormFlowService }, { type: i2$1.ValtimoModalService }, { type: i3.TranslateService }, { type: i1.ConfigService }], propDecorators: { form: [{
|
|
2740
4276
|
type: ViewChild,
|
|
2741
4277
|
args: ['form']
|
|
2742
4278
|
}], formIoFormData: [{
|
|
@@ -2797,8 +4333,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2797
4333
|
* limitations under the License.
|
|
2798
4334
|
*/
|
|
2799
4335
|
class ProcessLinkModule {
|
|
2800
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
2801
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
4336
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
4337
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, declarations: [ProcessLinkComponent,
|
|
2802
4338
|
FormLinkProcessDiagramComponent,
|
|
2803
4339
|
SelectPluginConfigurationComponent,
|
|
2804
4340
|
SelectPluginActionComponent,
|
|
@@ -2811,7 +4347,9 @@ class ProcessLinkModule {
|
|
|
2811
4347
|
FormFlowConfigurationContainerComponent,
|
|
2812
4348
|
FormDisplayConfigurationComponent,
|
|
2813
4349
|
SelectUIComponentComponent,
|
|
2814
|
-
ImportPluginConfigurationComponent
|
|
4350
|
+
ImportPluginConfigurationComponent,
|
|
4351
|
+
SelectBuildingBlockComponent,
|
|
4352
|
+
ConfigureBuildingBlockPluginsComponent], imports: [CommonModule,
|
|
2815
4353
|
ProcessLinkRoutingModule,
|
|
2816
4354
|
FormsModule,
|
|
2817
4355
|
ReactiveFormsModule,
|
|
@@ -2837,7 +4375,7 @@ class ProcessLinkModule {
|
|
|
2837
4375
|
StructuredListModule,
|
|
2838
4376
|
TilesModule,
|
|
2839
4377
|
RenderInPageHeaderDirective,
|
|
2840
|
-
SelectModule,
|
|
4378
|
+
SelectModule$1,
|
|
2841
4379
|
ToggleModule,
|
|
2842
4380
|
CarbonMultiInputModule,
|
|
2843
4381
|
LayerModule,
|
|
@@ -2847,13 +4385,18 @@ class ProcessLinkModule {
|
|
|
2847
4385
|
LayerModule,
|
|
2848
4386
|
ToggletipModule,
|
|
2849
4387
|
RemoveClassnamesDirective,
|
|
2850
|
-
ReactiveFormsModule
|
|
4388
|
+
ReactiveFormsModule,
|
|
4389
|
+
InputLabelModule,
|
|
4390
|
+
RadioModule,
|
|
4391
|
+
ValuePathSelectorComponent,
|
|
4392
|
+
ConfigureBuildingBlockMappingsComponent,
|
|
4393
|
+
NotificationModule], exports: [ProcessLinkComponent,
|
|
2851
4394
|
SelectPluginConfigurationComponent,
|
|
2852
4395
|
SelectPluginActionComponent,
|
|
2853
4396
|
PluginActionConfigurationComponent,
|
|
2854
4397
|
ProcessLinkModalComponent,
|
|
2855
4398
|
FormFlowComponent] }); }
|
|
2856
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
4399
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, providers: [UrlValidatorService, UrlResolverService], imports: [CommonModule,
|
|
2857
4400
|
ProcessLinkRoutingModule,
|
|
2858
4401
|
FormsModule,
|
|
2859
4402
|
ReactiveFormsModule,
|
|
@@ -2877,7 +4420,7 @@ class ProcessLinkModule {
|
|
|
2877
4420
|
FormIoModule,
|
|
2878
4421
|
StructuredListModule,
|
|
2879
4422
|
TilesModule,
|
|
2880
|
-
SelectModule,
|
|
4423
|
+
SelectModule$1,
|
|
2881
4424
|
ToggleModule,
|
|
2882
4425
|
CarbonMultiInputModule,
|
|
2883
4426
|
LayerModule,
|
|
@@ -2886,9 +4429,14 @@ class ProcessLinkModule {
|
|
|
2886
4429
|
TranslateModule,
|
|
2887
4430
|
LayerModule,
|
|
2888
4431
|
ToggletipModule,
|
|
2889
|
-
ReactiveFormsModule
|
|
4432
|
+
ReactiveFormsModule,
|
|
4433
|
+
InputLabelModule,
|
|
4434
|
+
RadioModule,
|
|
4435
|
+
ValuePathSelectorComponent,
|
|
4436
|
+
ConfigureBuildingBlockMappingsComponent,
|
|
4437
|
+
NotificationModule] }); }
|
|
2890
4438
|
}
|
|
2891
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4439
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, decorators: [{
|
|
2892
4440
|
type: NgModule,
|
|
2893
4441
|
args: [{
|
|
2894
4442
|
declarations: [
|
|
@@ -2906,6 +4454,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2906
4454
|
FormDisplayConfigurationComponent,
|
|
2907
4455
|
SelectUIComponentComponent,
|
|
2908
4456
|
ImportPluginConfigurationComponent,
|
|
4457
|
+
SelectBuildingBlockComponent,
|
|
4458
|
+
ConfigureBuildingBlockPluginsComponent,
|
|
2909
4459
|
],
|
|
2910
4460
|
imports: [
|
|
2911
4461
|
CommonModule,
|
|
@@ -2934,7 +4484,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2934
4484
|
StructuredListModule,
|
|
2935
4485
|
TilesModule,
|
|
2936
4486
|
RenderInPageHeaderDirective,
|
|
2937
|
-
SelectModule,
|
|
4487
|
+
SelectModule$1,
|
|
2938
4488
|
ToggleModule,
|
|
2939
4489
|
CarbonMultiInputModule,
|
|
2940
4490
|
LayerModule,
|
|
@@ -2945,6 +4495,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2945
4495
|
ToggletipModule,
|
|
2946
4496
|
RemoveClassnamesDirective,
|
|
2947
4497
|
ReactiveFormsModule,
|
|
4498
|
+
InputLabelModule,
|
|
4499
|
+
RadioModule,
|
|
4500
|
+
ValuePathSelectorComponent,
|
|
4501
|
+
ConfigureBuildingBlockMappingsComponent,
|
|
4502
|
+
NotificationModule,
|
|
2948
4503
|
],
|
|
2949
4504
|
exports: [
|
|
2950
4505
|
ProcessLinkComponent,
|
|
@@ -2958,6 +4513,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2958
4513
|
}]
|
|
2959
4514
|
}] });
|
|
2960
4515
|
|
|
4516
|
+
/*
|
|
4517
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4518
|
+
*
|
|
4519
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4520
|
+
* you may not use this file except in compliance with the License.
|
|
4521
|
+
* You may obtain a copy of the License at
|
|
4522
|
+
*
|
|
4523
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4524
|
+
*
|
|
4525
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4526
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4527
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4528
|
+
* See the License for the specific language governing permissions and
|
|
4529
|
+
* limitations under the License.
|
|
4530
|
+
*/
|
|
4531
|
+
|
|
4532
|
+
/*
|
|
4533
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4534
|
+
*
|
|
4535
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4536
|
+
* you may not use this file except in compliance with the License.
|
|
4537
|
+
* You may obtain a copy of the License at
|
|
4538
|
+
*
|
|
4539
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4540
|
+
*
|
|
4541
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4542
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4543
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4544
|
+
* See the License for the specific language governing permissions and
|
|
4545
|
+
* limitations under the License.
|
|
4546
|
+
*/
|
|
4547
|
+
|
|
4548
|
+
/*
|
|
4549
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4550
|
+
*
|
|
4551
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4552
|
+
* you may not use this file except in compliance with the License.
|
|
4553
|
+
* You may obtain a copy of the License at
|
|
4554
|
+
*
|
|
4555
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4556
|
+
*
|
|
4557
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4558
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4559
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4560
|
+
* See the License for the specific language governing permissions and
|
|
4561
|
+
* limitations under the License.
|
|
4562
|
+
*/
|
|
4563
|
+
|
|
4564
|
+
/*
|
|
4565
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4566
|
+
*
|
|
4567
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4568
|
+
* you may not use this file except in compliance with the License.
|
|
4569
|
+
* You may obtain a copy of the License at
|
|
4570
|
+
*
|
|
4571
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4572
|
+
*
|
|
4573
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4574
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
4575
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4576
|
+
* See the License for the specific language governing permissions and
|
|
4577
|
+
* limitations under the License.
|
|
4578
|
+
*/
|
|
4579
|
+
|
|
4580
|
+
/*
|
|
4581
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4582
|
+
*
|
|
4583
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4584
|
+
* you may not use this file except in compliance with the License.
|
|
4585
|
+
* You may obtain a copy of the License at
|
|
4586
|
+
*
|
|
4587
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4588
|
+
*
|
|
4589
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4590
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4591
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4592
|
+
* See the License for the specific language governing permissions and
|
|
4593
|
+
* limitations under the License.
|
|
4594
|
+
*/
|
|
4595
|
+
|
|
4596
|
+
/*
|
|
4597
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4598
|
+
*
|
|
4599
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4600
|
+
* you may not use this file except in compliance with the License.
|
|
4601
|
+
* You may obtain a copy of the License at
|
|
4602
|
+
*
|
|
4603
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4604
|
+
*
|
|
4605
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4606
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4607
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4608
|
+
* See the License for the specific language governing permissions and
|
|
4609
|
+
* limitations under the License.
|
|
4610
|
+
*/
|
|
4611
|
+
|
|
2961
4612
|
/*
|
|
2962
4613
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
2963
4614
|
*
|
|
@@ -2981,5 +4632,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2981
4632
|
* Generated bundle index. Do not edit.
|
|
2982
4633
|
*/
|
|
2983
4634
|
|
|
2984
|
-
export { ChooseProcessLinkTypeComponent, FORM_CUSTOM_COMPONENT_TOKEN, FORM_FLOW_COMPONENT_TOKEN, FormFlowComponent, FormFlowComponentService, FormFlowService, PluginActionConfigurationComponent, PluginStateService, ProcessLinkButtonService, ProcessLinkComponent,
|
|
4635
|
+
export { BuildingBlockStateService, ChooseProcessLinkTypeComponent, FORM_CUSTOM_COMPONENT_TOKEN, FORM_FLOW_COMPONENT_TOKEN, FormFlowComponent, FormFlowComponentService, FormFlowService, PluginActionConfigurationComponent, PluginStateService, ProcessLinkBuildingBlockApiService, ProcessLinkButtonService, ProcessLinkComponent, ProcessLinkModalComponent, ProcessLinkModule, ProcessLinkService, ProcessLinkStateService, ProcessLinkStepService, SelectPluginActionComponent, SelectPluginConfigurationComponent, UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK, UrlResolverService, UrlValidatorService, formSizeToCarbonModalSizeMap };
|
|
2985
4636
|
//# sourceMappingURL=valtimo-process-link.mjs.map
|