@valtimo/process-link 13.11.0 → 13.13.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 +1928 -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 +83 -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,18 @@ 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) {
|
|
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
|
+
}
|
|
236
634
|
submitForm(processLinkId, formData, documentId, taskInstanceId, documentDefinitionName) {
|
|
237
635
|
let params = new HttpParams();
|
|
238
636
|
if (documentId) {
|
|
@@ -288,85 +686,15 @@ class ProcessLinkService {
|
|
|
288
686
|
}
|
|
289
687
|
return object;
|
|
290
688
|
}
|
|
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.
|
|
689
|
+
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 }); }
|
|
690
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkService, providedIn: 'root' }); }
|
|
293
691
|
}
|
|
294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
692
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkService, decorators: [{
|
|
295
693
|
type: Injectable,
|
|
296
694
|
args: [{
|
|
297
695
|
providedIn: 'root',
|
|
298
696
|
}]
|
|
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
|
-
*/
|
|
697
|
+
}], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.HttpClient }] });
|
|
370
698
|
|
|
371
699
|
/*
|
|
372
700
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -407,6 +735,7 @@ const formSizeToCarbonModalSizeMap = {
|
|
|
407
735
|
medium: 'md',
|
|
408
736
|
large: 'lg',
|
|
409
737
|
};
|
|
738
|
+
const UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK = ['form', 'form-flow', 'ui-component'];
|
|
410
739
|
|
|
411
740
|
/*
|
|
412
741
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -520,10 +849,10 @@ class ProcessLinkButtonService {
|
|
|
520
849
|
this.hideNextButton();
|
|
521
850
|
this.disableNextButton();
|
|
522
851
|
}
|
|
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.
|
|
852
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkButtonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
853
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkButtonService, providedIn: 'root' }); }
|
|
525
854
|
}
|
|
526
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
855
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkButtonService, decorators: [{
|
|
527
856
|
type: Injectable,
|
|
528
857
|
args: [{
|
|
529
858
|
providedIn: 'root',
|
|
@@ -551,7 +880,7 @@ class ProcessLinkStepService {
|
|
|
551
880
|
this._steps$,
|
|
552
881
|
this._disableSteps$,
|
|
553
882
|
this.translateService.stream('key'),
|
|
554
|
-
]).pipe(filter(([steps]) => !!steps), map
|
|
883
|
+
]).pipe(filter(([steps]) => !!steps), map(([steps, disableSteps]) => steps.map(step => ({
|
|
555
884
|
...step,
|
|
556
885
|
disabled: disableSteps,
|
|
557
886
|
label: this.translateService.instant(`processLinkSteps.${step.label}`),
|
|
@@ -564,7 +893,7 @@ class ProcessLinkStepService {
|
|
|
564
893
|
return this._currentStepIndex$.asObservable();
|
|
565
894
|
}
|
|
566
895
|
get currentStepId$() {
|
|
567
|
-
return combineLatest([this._steps$, this.currentStepIndex$]).pipe(filter(([steps, currentStepIndex]) => !!steps && typeof currentStepIndex === 'number'), map
|
|
896
|
+
return combineLatest([this._steps$, this.currentStepIndex$]).pipe(filter(([steps, currentStepIndex]) => !!steps && typeof currentStepIndex === 'number'), map(([steps, currentStepIndex]) => steps.length > 0 ? steps[currentStepIndex]?.label : ''));
|
|
568
897
|
}
|
|
569
898
|
get hasOneProcessLinkType$() {
|
|
570
899
|
return this._hasOneProcessLinkType$.asObservable();
|
|
@@ -578,6 +907,7 @@ class ProcessLinkStepService {
|
|
|
578
907
|
this._currentStepIndex$ = new BehaviorSubject(0);
|
|
579
908
|
this._disableSteps$ = new BehaviorSubject(false);
|
|
580
909
|
this._hasOneProcessLinkType$ = new BehaviorSubject(false);
|
|
910
|
+
this._context = 'independent';
|
|
581
911
|
}
|
|
582
912
|
reset() {
|
|
583
913
|
this._currentStepIndex$.next(0);
|
|
@@ -618,17 +948,19 @@ class ProcessLinkStepService {
|
|
|
618
948
|
this._currentStepIndex$.next(0);
|
|
619
949
|
}
|
|
620
950
|
setChoosePluginConfigurationSteps() {
|
|
951
|
+
const selectionLabel = this._context === 'buildingBlock' ? 'choosePluginDefinition' : 'choosePluginConfiguration';
|
|
621
952
|
this._steps$.next([
|
|
622
953
|
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
|
|
623
|
-
{ label:
|
|
954
|
+
{ label: selectionLabel },
|
|
624
955
|
{ label: 'choosePluginAction', disabled: true },
|
|
625
956
|
{ label: 'configurePluginAction', disabled: true },
|
|
626
957
|
]);
|
|
627
958
|
this._currentStepIndex$.next(1);
|
|
628
959
|
}
|
|
629
960
|
setSingleChoosePluginConfigurationSteps() {
|
|
961
|
+
const selectionLabel = this._context === 'buildingBlock' ? 'choosePluginDefinition' : 'choosePluginConfiguration';
|
|
630
962
|
this._steps$.next([
|
|
631
|
-
{ label:
|
|
963
|
+
{ label: selectionLabel },
|
|
632
964
|
{ label: 'choosePluginAction', disabled: true },
|
|
633
965
|
{ label: 'configurePluginAction', disabled: true },
|
|
634
966
|
]);
|
|
@@ -638,12 +970,17 @@ class ProcessLinkStepService {
|
|
|
638
970
|
combineLatest([
|
|
639
971
|
this._hasOneProcessLinkType$,
|
|
640
972
|
this.pluginStateService.selectedPluginConfiguration$,
|
|
973
|
+
this.pluginStateService.selectedPluginDefinition$,
|
|
641
974
|
])
|
|
642
975
|
.pipe(take(1))
|
|
643
|
-
.subscribe(([hasOneType, selectedConfiguration]) => {
|
|
976
|
+
.subscribe(([hasOneType, selectedConfiguration, selectedDefinition]) => {
|
|
977
|
+
const selectionLabel = this._context === 'buildingBlock'
|
|
978
|
+
? 'choosePluginDefinition'
|
|
979
|
+
: 'choosePluginConfiguration';
|
|
980
|
+
const selectedPluginLabel = this.getSelectedPluginLabel(selectedConfiguration, selectedDefinition);
|
|
644
981
|
if (hasOneType) {
|
|
645
982
|
this._steps$.next([
|
|
646
|
-
{ label:
|
|
983
|
+
{ label: selectionLabel, secondaryLabel: selectedPluginLabel },
|
|
647
984
|
{ label: 'choosePluginAction' },
|
|
648
985
|
{ label: 'configurePluginAction', disabled: true },
|
|
649
986
|
]);
|
|
@@ -656,7 +993,7 @@ class ProcessLinkStepService {
|
|
|
656
993
|
else {
|
|
657
994
|
this._steps$.next([
|
|
658
995
|
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
|
|
659
|
-
{ label:
|
|
996
|
+
{ label: selectionLabel, secondaryLabel: selectedPluginLabel },
|
|
660
997
|
{ label: 'choosePluginAction' },
|
|
661
998
|
{ label: 'configurePluginAction', disabled: true },
|
|
662
999
|
]);
|
|
@@ -673,13 +1010,21 @@ class ProcessLinkStepService {
|
|
|
673
1010
|
this._hasOneProcessLinkType$,
|
|
674
1011
|
this.pluginStateService.selectedPluginConfiguration$,
|
|
675
1012
|
this.pluginStateService.selectedPluginFunction$,
|
|
1013
|
+
this.pluginStateService.selectedPluginDefinition$,
|
|
676
1014
|
])
|
|
677
1015
|
.pipe(take(1))
|
|
678
|
-
.subscribe(([hasOneType, selectedConfiguration, selectedFunction]) => {
|
|
679
|
-
const
|
|
1016
|
+
.subscribe(([hasOneType, selectedConfiguration, selectedFunction, selectedDefinition]) => {
|
|
1017
|
+
const pluginKey = selectedDefinition?.key || selectedConfiguration?.pluginDefinition?.key || '';
|
|
1018
|
+
const selectedFunctionTranslation = pluginKey
|
|
1019
|
+
? this.pluginTranslateService.instant(selectedFunction.key, pluginKey)
|
|
1020
|
+
: selectedFunction.key;
|
|
1021
|
+
const selectionLabel = this._context === 'buildingBlock'
|
|
1022
|
+
? 'choosePluginDefinition'
|
|
1023
|
+
: 'choosePluginConfiguration';
|
|
1024
|
+
const selectedPluginLabel = this.getSelectedPluginLabel(selectedConfiguration, selectedDefinition);
|
|
680
1025
|
if (hasOneType) {
|
|
681
1026
|
this._steps$.next([
|
|
682
|
-
{ label:
|
|
1027
|
+
{ label: selectionLabel, secondaryLabel: selectedPluginLabel },
|
|
683
1028
|
{ label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
|
|
684
1029
|
{ label: 'configurePluginAction' },
|
|
685
1030
|
]);
|
|
@@ -690,7 +1035,7 @@ class ProcessLinkStepService {
|
|
|
690
1035
|
else {
|
|
691
1036
|
this._steps$.next([
|
|
692
1037
|
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
|
|
693
|
-
{ label:
|
|
1038
|
+
{ label: selectionLabel, secondaryLabel: selectedPluginLabel },
|
|
694
1039
|
{ label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
|
|
695
1040
|
{ label: 'configurePluginAction' },
|
|
696
1041
|
]);
|
|
@@ -700,6 +1045,72 @@ class ProcessLinkStepService {
|
|
|
700
1045
|
}
|
|
701
1046
|
});
|
|
702
1047
|
}
|
|
1048
|
+
setBuildingBlockSteps() {
|
|
1049
|
+
this._hasOneProcessLinkType$.pipe(take(1)).subscribe(hasOneType => {
|
|
1050
|
+
this._steps$.next([
|
|
1051
|
+
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.building-block' },
|
|
1052
|
+
{ label: 'selectBuildingBlock' },
|
|
1053
|
+
{ label: 'configureBuildingBlockPlugins', disabled: true },
|
|
1054
|
+
{ label: 'configureBuildingBlockMappings', disabled: true },
|
|
1055
|
+
]);
|
|
1056
|
+
this._currentStepIndex$.next(hasOneType ? 0 : 1);
|
|
1057
|
+
this.buttonService.showBackButton();
|
|
1058
|
+
this.buttonService.showNextButton();
|
|
1059
|
+
this.buttonService.hideSaveButton();
|
|
1060
|
+
this.buttonService.disableNextButton();
|
|
1061
|
+
});
|
|
1062
|
+
}
|
|
1063
|
+
setConfigureBuildingBlockPluginsStep(selectionLabel) {
|
|
1064
|
+
this._hasOneProcessLinkType$.pipe(take(1)).subscribe(hasOneType => {
|
|
1065
|
+
const steps = hasOneType
|
|
1066
|
+
? [
|
|
1067
|
+
{ label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
|
|
1068
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1069
|
+
{ label: 'configureBuildingBlockMappings', disabled: true },
|
|
1070
|
+
]
|
|
1071
|
+
: [
|
|
1072
|
+
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.building-block' },
|
|
1073
|
+
{ label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
|
|
1074
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1075
|
+
{ label: 'configureBuildingBlockMappings', disabled: true },
|
|
1076
|
+
];
|
|
1077
|
+
this._steps$.next(steps);
|
|
1078
|
+
this._currentStepIndex$.next(hasOneType ? 1 : 2);
|
|
1079
|
+
this.buttonService.showNextButton();
|
|
1080
|
+
this.buttonService.hideSaveButton();
|
|
1081
|
+
this.buttonService.disableNextButton();
|
|
1082
|
+
this.buttonService.showBackButton();
|
|
1083
|
+
});
|
|
1084
|
+
}
|
|
1085
|
+
setConfigureBuildingBlockMappingsStep(selectionLabel) {
|
|
1086
|
+
this._hasOneProcessLinkType$.pipe(take(1)).subscribe(hasOneType => {
|
|
1087
|
+
const steps = hasOneType
|
|
1088
|
+
? [
|
|
1089
|
+
{ label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
|
|
1090
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1091
|
+
{ label: 'configureBuildingBlockMappings' },
|
|
1092
|
+
]
|
|
1093
|
+
: [
|
|
1094
|
+
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.building-block' },
|
|
1095
|
+
{ label: 'selectBuildingBlock', secondaryLabel: selectionLabel },
|
|
1096
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1097
|
+
{ label: 'configureBuildingBlockMappings' },
|
|
1098
|
+
];
|
|
1099
|
+
this._steps$.next(steps);
|
|
1100
|
+
this._currentStepIndex$.next(hasOneType ? 2 : 3);
|
|
1101
|
+
this.buttonService.hideNextButton();
|
|
1102
|
+
this.buttonService.showSaveButton();
|
|
1103
|
+
this.buttonService.disableSaveButton();
|
|
1104
|
+
this.buttonService.showBackButton();
|
|
1105
|
+
});
|
|
1106
|
+
}
|
|
1107
|
+
updateBuildingBlockSelectionStepLabel(label) {
|
|
1108
|
+
const steps = this._steps$.getValue();
|
|
1109
|
+
if (!steps?.length)
|
|
1110
|
+
return;
|
|
1111
|
+
const updatedSteps = steps.map(step => step.label === 'selectBuildingBlock' ? { ...step, secondaryLabel: label } : step);
|
|
1112
|
+
this._steps$.next(updatedSteps);
|
|
1113
|
+
}
|
|
703
1114
|
setURLSteps() {
|
|
704
1115
|
this._steps$.next([
|
|
705
1116
|
{ label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.url' },
|
|
@@ -757,6 +1168,9 @@ class ProcessLinkStepService {
|
|
|
757
1168
|
this.buttonService.showNextButton();
|
|
758
1169
|
}
|
|
759
1170
|
break;
|
|
1171
|
+
case 'building-block':
|
|
1172
|
+
this.setBuildingBlockSteps();
|
|
1173
|
+
break;
|
|
760
1174
|
case 'url':
|
|
761
1175
|
if (hasOneOption) {
|
|
762
1176
|
this.setSingleURLStep();
|
|
@@ -784,15 +1198,133 @@ class ProcessLinkStepService {
|
|
|
784
1198
|
]);
|
|
785
1199
|
this._currentStepIndex$.next(0);
|
|
786
1200
|
}
|
|
787
|
-
|
|
788
|
-
|
|
1201
|
+
getSelectedPluginLabel(selectedConfiguration, selectedDefinition) {
|
|
1202
|
+
if (this._context === 'buildingBlock') {
|
|
1203
|
+
const definitionKey = selectedDefinition?.key || selectedConfiguration?.pluginDefinition?.key;
|
|
1204
|
+
return definitionKey ? this.pluginTranslateService.instant('title', definitionKey) : '';
|
|
1205
|
+
}
|
|
1206
|
+
return selectedConfiguration?.title || '';
|
|
1207
|
+
}
|
|
1208
|
+
setContext(context) {
|
|
1209
|
+
this._context = context;
|
|
1210
|
+
}
|
|
1211
|
+
/**
|
|
1212
|
+
* Initialize steps for editing an existing process link.
|
|
1213
|
+
* Sets up configuration steps only (skipping type selection since type can't be changed).
|
|
1214
|
+
* Navigates to the final step.
|
|
1215
|
+
*/
|
|
1216
|
+
initializeEditModeSteps(processLinkType) {
|
|
1217
|
+
switch (processLinkType) {
|
|
1218
|
+
case 'form':
|
|
1219
|
+
// Single step for form - just the form selection
|
|
1220
|
+
this._steps$.next([{ label: 'selectForm' }]);
|
|
1221
|
+
this._currentStepIndex$.next(0);
|
|
1222
|
+
break;
|
|
1223
|
+
case 'form-flow':
|
|
1224
|
+
// Single step for form-flow - just the form flow selection
|
|
1225
|
+
this._steps$.next([{ label: 'selectFormFlow' }]);
|
|
1226
|
+
this._currentStepIndex$.next(0);
|
|
1227
|
+
break;
|
|
1228
|
+
case 'plugin':
|
|
1229
|
+
const selectionLabel = this._context === 'buildingBlock' ? 'choosePluginDefinition' : 'choosePluginConfiguration';
|
|
1230
|
+
// Plugin has 3 config steps: select config, select action, configure action
|
|
1231
|
+
this._steps$.next([
|
|
1232
|
+
{ label: selectionLabel },
|
|
1233
|
+
{ label: 'choosePluginAction' },
|
|
1234
|
+
{ label: 'configurePluginAction' },
|
|
1235
|
+
]);
|
|
1236
|
+
this._currentStepIndex$.next(2); // Start at last step
|
|
1237
|
+
break;
|
|
1238
|
+
case 'building-block':
|
|
1239
|
+
// Building block has 3 config steps: select BB, configure plugins, configure mappings
|
|
1240
|
+
this._steps$.next([
|
|
1241
|
+
{ label: 'selectBuildingBlock' },
|
|
1242
|
+
{ label: 'configureBuildingBlockPlugins' },
|
|
1243
|
+
{ label: 'configureBuildingBlockMappings' },
|
|
1244
|
+
]);
|
|
1245
|
+
this._currentStepIndex$.next(2); // Start at last step
|
|
1246
|
+
break;
|
|
1247
|
+
case 'ui-component':
|
|
1248
|
+
// Single step for UI component
|
|
1249
|
+
this._steps$.next([{ label: 'uiComponent' }]);
|
|
1250
|
+
this._currentStepIndex$.next(0);
|
|
1251
|
+
break;
|
|
1252
|
+
case 'url':
|
|
1253
|
+
// Single step for URL
|
|
1254
|
+
this._steps$.next([{ label: 'selectURL' }]);
|
|
1255
|
+
this._currentStepIndex$.next(0);
|
|
1256
|
+
break;
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
/**
|
|
1260
|
+
* Navigate to a specific step by index (for edit mode navigation)
|
|
1261
|
+
*/
|
|
1262
|
+
goToStep(stepIndex) {
|
|
1263
|
+
const steps = this._steps$.getValue();
|
|
1264
|
+
if (steps && stepIndex >= 0 && stepIndex < steps.length) {
|
|
1265
|
+
this._currentStepIndex$.next(stepIndex);
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
/**
|
|
1269
|
+
* Navigate to the previous step (for edit mode navigation)
|
|
1270
|
+
* Returns true if navigation was successful, false if already at first step
|
|
1271
|
+
*/
|
|
1272
|
+
goToPreviousStep() {
|
|
1273
|
+
const currentIndex = this._currentStepIndex$.getValue();
|
|
1274
|
+
if (currentIndex > 0) {
|
|
1275
|
+
this._currentStepIndex$.next(currentIndex - 1);
|
|
1276
|
+
return true;
|
|
1277
|
+
}
|
|
1278
|
+
return false;
|
|
1279
|
+
}
|
|
1280
|
+
/**
|
|
1281
|
+
* Navigate to the next step (for edit mode navigation)
|
|
1282
|
+
* Returns true if navigation was successful, false if already at last step
|
|
1283
|
+
*/
|
|
1284
|
+
goToNextStep() {
|
|
1285
|
+
const steps = this._steps$.getValue();
|
|
1286
|
+
const currentIndex = this._currentStepIndex$.getValue();
|
|
1287
|
+
if (steps && currentIndex < steps.length - 1) {
|
|
1288
|
+
this._currentStepIndex$.next(currentIndex + 1);
|
|
1289
|
+
return true;
|
|
1290
|
+
}
|
|
1291
|
+
return false;
|
|
1292
|
+
}
|
|
1293
|
+
/**
|
|
1294
|
+
* Check if currently at the first step
|
|
1295
|
+
*/
|
|
1296
|
+
isFirstStep() {
|
|
1297
|
+
return this._currentStepIndex$.getValue() === 0;
|
|
1298
|
+
}
|
|
1299
|
+
/**
|
|
1300
|
+
* Check if currently at the last step
|
|
1301
|
+
*/
|
|
1302
|
+
isLastStep() {
|
|
1303
|
+
const steps = this._steps$.getValue();
|
|
1304
|
+
const currentIndex = this._currentStepIndex$.getValue();
|
|
1305
|
+
return steps ? currentIndex === steps.length - 1 : false;
|
|
1306
|
+
}
|
|
1307
|
+
/**
|
|
1308
|
+
* Get the total number of steps
|
|
1309
|
+
*/
|
|
1310
|
+
getStepCount() {
|
|
1311
|
+
return this._steps$.getValue()?.length || 0;
|
|
1312
|
+
}
|
|
1313
|
+
/**
|
|
1314
|
+
* Get the current step index
|
|
1315
|
+
*/
|
|
1316
|
+
getCurrentStepIndex() {
|
|
1317
|
+
return this._currentStepIndex$.getValue();
|
|
1318
|
+
}
|
|
1319
|
+
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 }); }
|
|
1320
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStepService, providedIn: 'root' }); }
|
|
789
1321
|
}
|
|
790
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1322
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStepService, decorators: [{
|
|
791
1323
|
type: Injectable,
|
|
792
1324
|
args: [{
|
|
793
1325
|
providedIn: 'root',
|
|
794
1326
|
}]
|
|
795
|
-
}], ctorParameters: () => [{ type:
|
|
1327
|
+
}], ctorParameters: () => [{ type: i3.TranslateService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: i1$1.PluginTranslationService }] });
|
|
796
1328
|
|
|
797
1329
|
/*
|
|
798
1330
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -826,17 +1358,22 @@ class ProcessLinkStateService {
|
|
|
826
1358
|
return this._elementName$.asObservable();
|
|
827
1359
|
}
|
|
828
1360
|
get availableProcessLinkTypes$() {
|
|
829
|
-
return this._availableProcessLinkTypes
|
|
1361
|
+
return combineLatest([this._availableProcessLinkTypes$, this._context$]).pipe(map(([types, context]) => (!this.formCustomComponentConfig
|
|
830
1362
|
? types.map(type => ({
|
|
831
1363
|
...type,
|
|
832
1364
|
enabled: type.processLinkType === 'ui-component' ? false : type.enabled,
|
|
833
1365
|
}))
|
|
834
|
-
: types)
|
|
1366
|
+
: types)
|
|
1367
|
+
.filter(type => type.processLinkType !== 'url')
|
|
1368
|
+
.map(type => context === 'buildingBlock' &&
|
|
1369
|
+
UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK.includes(type.processLinkType)
|
|
1370
|
+
? { ...type, enabled: false }
|
|
1371
|
+
: type)));
|
|
835
1372
|
}
|
|
836
1373
|
get hideProgressIndicator$() {
|
|
837
1374
|
return this._availableProcessLinkTypes$
|
|
838
1375
|
.asObservable()
|
|
839
|
-
.pipe(map
|
|
1376
|
+
.pipe(map(availableTypes => Array.isArray(availableTypes) &&
|
|
840
1377
|
availableTypes.length === 1 &&
|
|
841
1378
|
(availableTypes[0]?.processLinkType === 'form' ||
|
|
842
1379
|
availableTypes[0]?.processLinkType === 'form-flow')));
|
|
@@ -854,10 +1391,7 @@ class ProcessLinkStateService {
|
|
|
854
1391
|
return this._selectedProcessLink$.asObservable();
|
|
855
1392
|
}
|
|
856
1393
|
get typeOfSelectedProcessLink$() {
|
|
857
|
-
return this.selectedProcessLink$.pipe(map
|
|
858
|
-
}
|
|
859
|
-
get processLinkEditMode() {
|
|
860
|
-
return this._processLinkEditMode$.getValue();
|
|
1394
|
+
return this.selectedProcessLink$.pipe(map(processLink => processLink?.processLinkType || ''));
|
|
861
1395
|
}
|
|
862
1396
|
get viewModelEnabled$() {
|
|
863
1397
|
return this._viewModelEnabled$.asObservable();
|
|
@@ -865,10 +1399,17 @@ class ProcessLinkStateService {
|
|
|
865
1399
|
get url$() {
|
|
866
1400
|
return this._url$.asObservable();
|
|
867
1401
|
}
|
|
868
|
-
|
|
1402
|
+
get context$() {
|
|
1403
|
+
return this._context$.asObservable();
|
|
1404
|
+
}
|
|
1405
|
+
get isEditing$() {
|
|
1406
|
+
return this._isEditing$.asObservable();
|
|
1407
|
+
}
|
|
1408
|
+
constructor(processLinkStepService, buttonService, pluginStateService, buildingBlockStateService, formCustomComponentConfig) {
|
|
869
1409
|
this.processLinkStepService = processLinkStepService;
|
|
870
1410
|
this.buttonService = buttonService;
|
|
871
1411
|
this.pluginStateService = pluginStateService;
|
|
1412
|
+
this.buildingBlockStateService = buildingBlockStateService;
|
|
872
1413
|
this.formCustomComponentConfig = formCustomComponentConfig;
|
|
873
1414
|
this._showModal$ = new BehaviorSubject(false);
|
|
874
1415
|
this._availableProcessLinkTypes$ = new BehaviorSubject([]);
|
|
@@ -879,14 +1420,18 @@ class ProcessLinkStateService {
|
|
|
879
1420
|
this._saving$ = new BehaviorSubject(false);
|
|
880
1421
|
this._modalParams$ = new BehaviorSubject(undefined);
|
|
881
1422
|
this._selectedProcessLink$ = new BehaviorSubject(undefined);
|
|
882
|
-
this.
|
|
1423
|
+
this._isEditing$ = new BehaviorSubject(false);
|
|
883
1424
|
this._processLinkUpdateEvents$ = new Subject();
|
|
884
1425
|
this._processLinkCreateEvents$ = new Subject();
|
|
885
1426
|
this._processLinkDeleteEvents$ = new Subject();
|
|
1427
|
+
this._context$ = new BehaviorSubject('independent');
|
|
886
1428
|
this.openAvailableProcessLinkTypesSubscription();
|
|
1429
|
+
this.openEditModeNavigationSubscriptions();
|
|
887
1430
|
}
|
|
888
1431
|
ngOnDestroy() {
|
|
889
1432
|
this._availableProcessLinkTypesSubscription?.unsubscribe();
|
|
1433
|
+
this._backButtonSubscription?.unsubscribe();
|
|
1434
|
+
this._nextButtonSubscription?.unsubscribe();
|
|
890
1435
|
}
|
|
891
1436
|
setAvailableProcessLinkTypes(processLinkTypes) {
|
|
892
1437
|
const hasOneOption = processLinkTypes.length === 1;
|
|
@@ -934,20 +1479,28 @@ class ProcessLinkStateService {
|
|
|
934
1479
|
setModalParams(params) {
|
|
935
1480
|
this._modalParams$.next(params);
|
|
936
1481
|
}
|
|
1482
|
+
setContext(context) {
|
|
1483
|
+
this._context$.next(context);
|
|
1484
|
+
this.processLinkStepService.setContext(context);
|
|
1485
|
+
}
|
|
937
1486
|
selectProcessLink(processLink) {
|
|
938
1487
|
if (!processLink)
|
|
939
1488
|
return;
|
|
940
1489
|
this._selectedProcessLink$.next(processLink);
|
|
1490
|
+
this._isEditing$.next(true);
|
|
941
1491
|
this.pluginStateService.selectProcessLink(processLink);
|
|
1492
|
+
this.buildingBlockStateService.setProcessLink(processLink);
|
|
942
1493
|
this.setViewModelEnabled(processLink.viewModelEnabled ?? false);
|
|
943
1494
|
this._url$.next(processLink.url ?? '');
|
|
1495
|
+
// Initialize stepper for editing mode - navigate to last step
|
|
1496
|
+
this.processLinkStepService.initializeEditModeSteps(processLink.processLinkType);
|
|
1497
|
+
// Set button visibility based on current step position
|
|
1498
|
+
this.updateButtonsForCurrentStep();
|
|
944
1499
|
}
|
|
945
1500
|
deselectProcessLink() {
|
|
946
1501
|
this._selectedProcessLink$.next(undefined);
|
|
947
1502
|
this.pluginStateService.deselectProcessLink();
|
|
948
|
-
|
|
949
|
-
setEditMode(editMode) {
|
|
950
|
-
this._processLinkEditMode$.next(editMode);
|
|
1503
|
+
this.resetBuildingBlockState();
|
|
951
1504
|
}
|
|
952
1505
|
sendProcessLinkUpdateEvent(event) {
|
|
953
1506
|
this._processLinkUpdateEvents$.next(event);
|
|
@@ -965,6 +1518,59 @@ class ProcessLinkStateService {
|
|
|
965
1518
|
}
|
|
966
1519
|
});
|
|
967
1520
|
}
|
|
1521
|
+
openEditModeNavigationSubscriptions() {
|
|
1522
|
+
// Handle back button in edit mode
|
|
1523
|
+
this._backButtonSubscription = this.buttonService.backButtonClick$.subscribe(() => {
|
|
1524
|
+
if (this._isEditing$.getValue()) {
|
|
1525
|
+
this.navigateBackInEditMode();
|
|
1526
|
+
}
|
|
1527
|
+
});
|
|
1528
|
+
// Handle next button in edit mode
|
|
1529
|
+
this._nextButtonSubscription = this.buttonService.nextButtonClick$.subscribe(() => {
|
|
1530
|
+
if (this._isEditing$.getValue()) {
|
|
1531
|
+
this.navigateForwardInEditMode();
|
|
1532
|
+
}
|
|
1533
|
+
});
|
|
1534
|
+
}
|
|
1535
|
+
navigateBackInEditMode() {
|
|
1536
|
+
const navigated = this.processLinkStepService.goToPreviousStep();
|
|
1537
|
+
if (navigated) {
|
|
1538
|
+
this.updateButtonsForCurrentStep();
|
|
1539
|
+
}
|
|
1540
|
+
}
|
|
1541
|
+
navigateForwardInEditMode() {
|
|
1542
|
+
const navigated = this.processLinkStepService.goToNextStep();
|
|
1543
|
+
if (navigated) {
|
|
1544
|
+
this.updateButtonsForCurrentStep();
|
|
1545
|
+
}
|
|
1546
|
+
}
|
|
1547
|
+
updateButtonsForCurrentStep() {
|
|
1548
|
+
const isFirstStep = this.processLinkStepService.isFirstStep();
|
|
1549
|
+
const isLastStep = this.processLinkStepService.isLastStep();
|
|
1550
|
+
// Back button visibility
|
|
1551
|
+
if (isFirstStep) {
|
|
1552
|
+
this.buttonService.hideBackButton();
|
|
1553
|
+
}
|
|
1554
|
+
else {
|
|
1555
|
+
this.buttonService.showBackButton();
|
|
1556
|
+
}
|
|
1557
|
+
// Next/Save button visibility
|
|
1558
|
+
if (isLastStep) {
|
|
1559
|
+
this.buttonService.hideNextButton();
|
|
1560
|
+
this.buttonService.showSaveButton();
|
|
1561
|
+
}
|
|
1562
|
+
else {
|
|
1563
|
+
this.buttonService.showNextButton();
|
|
1564
|
+
this.buttonService.enableNextButton();
|
|
1565
|
+
this.buttonService.hideSaveButton();
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1568
|
+
isBuildingBlockContext() {
|
|
1569
|
+
return this._context$.getValue() === 'buildingBlock';
|
|
1570
|
+
}
|
|
1571
|
+
resetBuildingBlockState() {
|
|
1572
|
+
this.buildingBlockStateService.reset();
|
|
1573
|
+
}
|
|
968
1574
|
reset() {
|
|
969
1575
|
this.setAvailableProcessLinkTypes([]);
|
|
970
1576
|
this.processLinkStepService.reset();
|
|
@@ -972,16 +1578,18 @@ class ProcessLinkStateService {
|
|
|
972
1578
|
this.buttonService.resetButtons();
|
|
973
1579
|
this.clearSelectedProcessLinkType();
|
|
974
1580
|
this.deselectProcessLink();
|
|
1581
|
+
this.resetBuildingBlockState();
|
|
1582
|
+
this._isEditing$.next(false);
|
|
975
1583
|
}
|
|
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.
|
|
1584
|
+
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 }); }
|
|
1585
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStateService, providedIn: 'root' }); }
|
|
978
1586
|
}
|
|
979
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkStateService, decorators: [{
|
|
980
1588
|
type: Injectable,
|
|
981
1589
|
args: [{
|
|
982
1590
|
providedIn: 'root',
|
|
983
1591
|
}]
|
|
984
|
-
}], ctorParameters: () => [{ type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: undefined, decorators: [{
|
|
1592
|
+
}], ctorParameters: () => [{ type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: BuildingBlockStateService }, { type: undefined, decorators: [{
|
|
985
1593
|
type: Optional
|
|
986
1594
|
}, {
|
|
987
1595
|
type: Inject,
|
|
@@ -1015,10 +1623,10 @@ class FormFlowComponentService {
|
|
|
1015
1623
|
setSupportedComponents(supportedComponents) {
|
|
1016
1624
|
this._supportedComponents$.next(supportedComponents);
|
|
1017
1625
|
}
|
|
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.
|
|
1626
|
+
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 }); }
|
|
1627
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponentService, providedIn: 'root' }); }
|
|
1020
1628
|
}
|
|
1021
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1629
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponentService, decorators: [{
|
|
1022
1630
|
type: Injectable,
|
|
1023
1631
|
args: [{
|
|
1024
1632
|
providedIn: 'root',
|
|
@@ -1052,10 +1660,10 @@ class UrlResolverService {
|
|
|
1052
1660
|
});
|
|
1053
1661
|
return resolvingUrl;
|
|
1054
1662
|
}
|
|
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.
|
|
1663
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1664
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlResolverService }); }
|
|
1057
1665
|
}
|
|
1058
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1666
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlResolverService, decorators: [{
|
|
1059
1667
|
type: Injectable
|
|
1060
1668
|
}] });
|
|
1061
1669
|
|
|
@@ -1075,10 +1683,10 @@ class UrlValidatorService {
|
|
|
1075
1683
|
}
|
|
1076
1684
|
};
|
|
1077
1685
|
}
|
|
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.
|
|
1686
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlValidatorService, deps: [{ token: UrlResolverService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1687
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlValidatorService }); }
|
|
1080
1688
|
}
|
|
1081
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1689
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UrlValidatorService, decorators: [{
|
|
1082
1690
|
type: Injectable
|
|
1083
1691
|
}], ctorParameters: () => [{ type: UrlResolverService }] });
|
|
1084
1692
|
|
|
@@ -1114,21 +1722,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
1114
1722
|
* limitations under the License.
|
|
1115
1723
|
*/
|
|
1116
1724
|
class SelectPluginConfigurationComponent {
|
|
1117
|
-
constructor(pluginManagementService, pluginStateService, pluginService, stateService, buttonService, stepService) {
|
|
1725
|
+
constructor(pluginManagementService, pluginStateService, pluginService, stateService, buttonService, stepService, pluginTranslationService) {
|
|
1118
1726
|
this.pluginManagementService = pluginManagementService;
|
|
1119
1727
|
this.pluginStateService = pluginStateService;
|
|
1120
1728
|
this.pluginService = pluginService;
|
|
1121
1729
|
this.stateService = stateService;
|
|
1122
1730
|
this.buttonService = buttonService;
|
|
1123
1731
|
this.stepService = stepService;
|
|
1124
|
-
this.
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
this.
|
|
1129
|
-
]).pipe(
|
|
1732
|
+
this.pluginTranslationService = pluginTranslationService;
|
|
1733
|
+
this.isBuildingBlockContext$ = this.stateService.context$.pipe(map$1(context => context === 'buildingBlock'));
|
|
1734
|
+
this.listItems$ = combineLatest([
|
|
1735
|
+
this.isBuildingBlockContext$,
|
|
1736
|
+
this.stateService.modalParams$,
|
|
1737
|
+
]).pipe(switchMap$1(([isBuildingBlock, modalData]) => isBuildingBlock
|
|
1738
|
+
? combineLatest([
|
|
1739
|
+
this.pluginManagementService.getPluginDefinitions(modalData?.element?.activityListenerType),
|
|
1740
|
+
this.pluginService.pluginSpecifications$,
|
|
1741
|
+
]).pipe(map$1(([definitions, specs]) => {
|
|
1742
|
+
const limitedDefinitions = definitions?.filter(definition => specs.some(spec => spec.pluginId === definition.key)) ?? [];
|
|
1743
|
+
const enriched = limitedDefinitions.map(definition => {
|
|
1744
|
+
const spec = specs.find(item => item.pluginId === definition.key);
|
|
1745
|
+
return {
|
|
1746
|
+
id: definition.key,
|
|
1747
|
+
title: this.pluginTranslationService.instant('title', definition.key) ||
|
|
1748
|
+
definition.title,
|
|
1749
|
+
description: this.pluginTranslationService.instant('description', definition.key) ||
|
|
1750
|
+
definition.description,
|
|
1751
|
+
logo: spec?.pluginLogoBase64 ?? null,
|
|
1752
|
+
payload: definition.key,
|
|
1753
|
+
isDefinition: true,
|
|
1754
|
+
};
|
|
1755
|
+
});
|
|
1756
|
+
this.pluginDefinitionsCache = limitedDefinitions;
|
|
1757
|
+
return enriched;
|
|
1758
|
+
}))
|
|
1759
|
+
: combineLatest([
|
|
1760
|
+
modalData?.element?.type
|
|
1761
|
+
? this.pluginManagementService.getAllPluginConfigurationsWithLogos(modalData?.element?.activityListenerType)
|
|
1762
|
+
: of(undefined),
|
|
1763
|
+
this.pluginService.availablePluginIds$,
|
|
1764
|
+
]).pipe(map$1(([configs, availablePluginIds]) => configs
|
|
1765
|
+
?.filter(configuration => availablePluginIds.includes(configuration.pluginDefinition.key))
|
|
1766
|
+
?.map(configuration => ({
|
|
1767
|
+
id: configuration.id ?? configuration.title,
|
|
1768
|
+
title: configuration.title,
|
|
1769
|
+
description: this.pluginTranslationService.instant('description', configuration.pluginDefinition.key),
|
|
1770
|
+
logo: configuration.pluginLogoBase64 ?? null,
|
|
1771
|
+
payload: configuration,
|
|
1772
|
+
isDefinition: false,
|
|
1773
|
+
}))))));
|
|
1774
|
+
this.pageHeaderText$ = this.isBuildingBlockContext$.pipe(map$1(isBuildingBlock => isBuildingBlock
|
|
1775
|
+
? 'processLinkConfiguration.choosePluginDefinitionDescription'
|
|
1776
|
+
: 'processLinkConfiguration.choosePluginConfigurationDescription'));
|
|
1777
|
+
this.columnHeaderText$ = this.isBuildingBlockContext$.pipe(map$1(isBuildingBlock => isBuildingBlock
|
|
1778
|
+
? 'pluginManagement.labels.pluginName'
|
|
1779
|
+
: 'pluginManagement.labels.configurationName'));
|
|
1130
1780
|
this.selectedPluginConfiguration$ = this.pluginStateService.selectedPluginConfiguration$;
|
|
1781
|
+
this.selectedPluginDefinition$ = this.pluginStateService.selectedPluginDefinition$;
|
|
1131
1782
|
this._subscriptions = new Subscription();
|
|
1783
|
+
this.pluginDefinitionsCache = [];
|
|
1132
1784
|
}
|
|
1133
1785
|
ngOnInit() {
|
|
1134
1786
|
this.openBackButtonSubscription();
|
|
@@ -1138,30 +1790,53 @@ class SelectPluginConfigurationComponent {
|
|
|
1138
1790
|
this._subscriptions.unsubscribe();
|
|
1139
1791
|
}
|
|
1140
1792
|
selected(event) {
|
|
1141
|
-
this.
|
|
1142
|
-
|
|
1793
|
+
this.isBuildingBlockContext$.pipe(take(1)).subscribe(isBuildingBlock => {
|
|
1794
|
+
if (isBuildingBlock) {
|
|
1795
|
+
const definitionKey = event.value;
|
|
1796
|
+
const definition = this.pluginDefinitionsCache.find(def => def.key === definitionKey);
|
|
1797
|
+
this.selectDefinition(definition);
|
|
1798
|
+
}
|
|
1799
|
+
else {
|
|
1800
|
+
this.selectConfiguration(event.value);
|
|
1801
|
+
}
|
|
1802
|
+
this.buttonService.enableNextButton();
|
|
1803
|
+
});
|
|
1143
1804
|
}
|
|
1144
1805
|
selectConfiguration(configuration) {
|
|
1145
|
-
|
|
1806
|
+
if (!configuration)
|
|
1807
|
+
return;
|
|
1808
|
+
if (configuration.pluginDefinition) {
|
|
1809
|
+
this.pluginStateService.selectPluginDefinition(configuration.pluginDefinition);
|
|
1810
|
+
}
|
|
1146
1811
|
this.pluginStateService.selectPluginConfiguration(configuration);
|
|
1147
1812
|
}
|
|
1813
|
+
selectDefinition(definition) {
|
|
1814
|
+
if (!definition)
|
|
1815
|
+
return;
|
|
1816
|
+
this.pluginStateService.selectPluginDefinition(definition);
|
|
1817
|
+
this.pluginStateService.selectPluginConfiguration(undefined);
|
|
1818
|
+
}
|
|
1148
1819
|
openBackButtonSubscription() {
|
|
1149
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
1820
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
1821
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
1822
|
+
.subscribe(() => {
|
|
1150
1823
|
this.stateService.setInitial();
|
|
1151
1824
|
}));
|
|
1152
1825
|
}
|
|
1153
1826
|
openNextButtonSubscription() {
|
|
1154
|
-
this._subscriptions.add(this.buttonService.nextButtonClick
|
|
1827
|
+
this._subscriptions.add(this.buttonService.nextButtonClick$
|
|
1828
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
1829
|
+
.subscribe(() => {
|
|
1155
1830
|
this.stepService.setChoosePluginActionSteps();
|
|
1156
1831
|
}));
|
|
1157
1832
|
}
|
|
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.
|
|
1833
|
+
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 }); }
|
|
1834
|
+
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
1835
|
}
|
|
1161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1836
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginConfigurationComponent, decorators: [{
|
|
1162
1837
|
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 }] });
|
|
1838
|
+
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"] }]
|
|
1839
|
+
}], ctorParameters: () => [{ type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: i1$1.PluginService }, { type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: i1$1.PluginTranslationService }] });
|
|
1165
1840
|
|
|
1166
1841
|
/*
|
|
1167
1842
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -1214,20 +1889,22 @@ class SelectPluginActionComponent {
|
|
|
1214
1889
|
}
|
|
1215
1890
|
openBackButtonSubscription() {
|
|
1216
1891
|
this.buttonService.backButtonClick$
|
|
1217
|
-
.pipe(switchMap$1(() => this.stepService.hasOneProcessLinkType$), take(1))
|
|
1892
|
+
.pipe(withLatestFrom(this.processLinkStateService.isEditing$), filter$1(([, isEditing]) => !isEditing), switchMap$1(() => this.stepService.hasOneProcessLinkType$), take(1))
|
|
1218
1893
|
.subscribe((hasOneOption) => {
|
|
1219
1894
|
this.stepService.setProcessLinkTypeSteps('plugin', hasOneOption);
|
|
1220
1895
|
});
|
|
1221
1896
|
}
|
|
1222
1897
|
openNextButtonSubscription() {
|
|
1223
|
-
this._subscriptions.add(this.buttonService.nextButtonClick
|
|
1898
|
+
this._subscriptions.add(this.buttonService.nextButtonClick$
|
|
1899
|
+
.pipe(withLatestFrom(this.processLinkStateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
1900
|
+
.subscribe(() => {
|
|
1224
1901
|
this.stepService.setConfigurePluginActionSteps();
|
|
1225
1902
|
}));
|
|
1226
1903
|
}
|
|
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.
|
|
1904
|
+
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 }); }
|
|
1905
|
+
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
1906
|
}
|
|
1230
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1907
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectPluginActionComponent, decorators: [{
|
|
1231
1908
|
type: Component,
|
|
1232
1909
|
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
1910
|
}], ctorParameters: () => [{ type: ProcessLinkButtonService }, { type: i1$1.PluginManagementService }, { type: PluginStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkStateService }] });
|
|
@@ -1278,7 +1955,7 @@ class ImportPluginConfigurationComponent {
|
|
|
1278
1955
|
this.processListItems$ = combineLatest([
|
|
1279
1956
|
this._compatiblePluginProcessLinksSubject$,
|
|
1280
1957
|
this.process.valueChanges.pipe(startWith('')),
|
|
1281
|
-
]).pipe(map
|
|
1958
|
+
]).pipe(map(([compatibleProcessLinks, processValue]) => compatibleProcessLinks?.map(compatibleProcessLink => ({
|
|
1282
1959
|
content: compatibleProcessLink.processDefinitionKey,
|
|
1283
1960
|
selected: processValue === compatibleProcessLink.processDefinitionKey,
|
|
1284
1961
|
})) || []));
|
|
@@ -1286,7 +1963,7 @@ class ImportPluginConfigurationComponent {
|
|
|
1286
1963
|
this._compatiblePluginProcessLinksSubject$,
|
|
1287
1964
|
this.process.valueChanges.pipe(startWith('')),
|
|
1288
1965
|
this.version.valueChanges.pipe(startWith('')),
|
|
1289
|
-
]).pipe(map
|
|
1966
|
+
]).pipe(map(([compatibleProcessLinks, processValue, versionValue]) => !processValue
|
|
1290
1967
|
? []
|
|
1291
1968
|
: compatibleProcessLinks
|
|
1292
1969
|
.find(compatibleLinks => compatibleLinks.processDefinitionKey === processValue)
|
|
@@ -1300,7 +1977,7 @@ class ImportPluginConfigurationComponent {
|
|
|
1300
1977
|
this.process.valueChanges.pipe(startWith('')),
|
|
1301
1978
|
this.version.valueChanges.pipe(startWith('')),
|
|
1302
1979
|
this.activity.valueChanges.pipe(startWith('')),
|
|
1303
|
-
]).pipe(map
|
|
1980
|
+
]).pipe(map(([compatibleProcessLinks, processValue, versionValue, activityValue]) => !processValue || !versionValue
|
|
1304
1981
|
? []
|
|
1305
1982
|
: compatibleProcessLinks
|
|
1306
1983
|
.find(compatibleLinks => compatibleLinks.processDefinitionKey === processValue)
|
|
@@ -1341,13 +2018,13 @@ class ImportPluginConfigurationComponent {
|
|
|
1341
2018
|
activitySelected(event) {
|
|
1342
2019
|
this.activity.setValue(event?.item?.content);
|
|
1343
2020
|
}
|
|
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.
|
|
2021
|
+
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 }); }
|
|
2022
|
+
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
2023
|
}
|
|
1347
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2024
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ImportPluginConfigurationComponent, decorators: [{
|
|
1348
2025
|
type: Component,
|
|
1349
2026
|
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:
|
|
2027
|
+
}], ctorParameters: () => [{ type: i1$2.FormBuilder }, { type: ProcessLinkService }, { type: i3$2.IconService }, { type: i2$1.CdsThemeService }], propDecorators: { pluginActionKey: [{
|
|
1351
2028
|
type: Input
|
|
1352
2029
|
}], configurationEvent: [{
|
|
1353
2030
|
type: Output
|
|
@@ -1382,11 +2059,25 @@ class PluginActionConfigurationComponent {
|
|
|
1382
2059
|
this.save$ = this.pluginStateService.save$;
|
|
1383
2060
|
this.saving$ = this.stateService.saving$;
|
|
1384
2061
|
this._prefillConfigurationSubject$ = new BehaviorSubject(null);
|
|
1385
|
-
|
|
2062
|
+
// Only prefill if the action key hasn't changed from what's saved in the process link
|
|
2063
|
+
this._prefillConfiguration$ = combineLatest([
|
|
2064
|
+
this.stateService.selectedProcessLink$,
|
|
2065
|
+
this.pluginStateService.selectedPluginFunction$,
|
|
2066
|
+
]).pipe(map$1(([processLink, selectedFunction]) => {
|
|
2067
|
+
if (!processLink)
|
|
2068
|
+
return undefined;
|
|
2069
|
+
// Only prefill if the action hasn't been changed
|
|
2070
|
+
const savedActionKey = processLink.pluginActionDefinitionKey;
|
|
2071
|
+
const currentActionKey = selectedFunction?.key;
|
|
2072
|
+
if (currentActionKey && savedActionKey !== currentActionKey) {
|
|
2073
|
+
return undefined; // Action changed, don't prefill old configuration
|
|
2074
|
+
}
|
|
2075
|
+
return processLink.actionProperties;
|
|
2076
|
+
}));
|
|
1386
2077
|
this.prefillConfiguration$ = combineLatest([
|
|
1387
2078
|
this._prefillConfigurationSubject$,
|
|
1388
2079
|
this._prefillConfiguration$,
|
|
1389
|
-
]).pipe(map(([prefillConfigurationSubjectValue, prefillConfiguration]) => prefillConfigurationSubjectValue || prefillConfiguration));
|
|
2080
|
+
]).pipe(map$1(([prefillConfigurationSubjectValue, prefillConfiguration]) => prefillConfigurationSubjectValue || prefillConfiguration));
|
|
1390
2081
|
this._subscriptions = new Subscription();
|
|
1391
2082
|
}
|
|
1392
2083
|
ngOnInit() {
|
|
@@ -1417,23 +2108,29 @@ class PluginActionConfigurationComponent {
|
|
|
1417
2108
|
this._prefillConfigurationSubject$.next(configuration);
|
|
1418
2109
|
}
|
|
1419
2110
|
updateProcessLink(configuration) {
|
|
1420
|
-
|
|
2111
|
+
combineLatest([
|
|
2112
|
+
this.stateService.selectedProcessLink$,
|
|
2113
|
+
this.pluginStateService.selectedPluginFunction$,
|
|
2114
|
+
])
|
|
2115
|
+
.pipe(take(1))
|
|
2116
|
+
.subscribe(([selectedProcessLink, selectedFunction]) => {
|
|
2117
|
+
const inferredReferenceType = selectedProcessLink.referenceType ||
|
|
2118
|
+
(selectedProcessLink.pluginDefinitionKey ? 'BUILDING_BLOCK' : 'FIXED');
|
|
2119
|
+
const pluginConfigurationId = inferredReferenceType === 'FIXED'
|
|
2120
|
+
? (selectedProcessLink.pluginConfigurationId ?? '')
|
|
2121
|
+
: undefined;
|
|
2122
|
+
// Use the currently selected function key (user may have changed it)
|
|
2123
|
+
const actionKey = selectedFunction?.key ?? selectedProcessLink.pluginActionDefinitionKey ?? '';
|
|
1421
2124
|
const updateProcessLinkRequest = {
|
|
1422
2125
|
id: selectedProcessLink.id,
|
|
1423
|
-
pluginConfigurationId
|
|
1424
|
-
pluginActionDefinitionKey:
|
|
2126
|
+
pluginConfigurationId,
|
|
2127
|
+
pluginActionDefinitionKey: actionKey,
|
|
1425
2128
|
actionProperties: configuration,
|
|
1426
2129
|
activityId: selectedProcessLink.activityId,
|
|
2130
|
+
referenceType: inferredReferenceType,
|
|
2131
|
+
pluginDefinitionKey: selectedProcessLink.pluginDefinitionKey,
|
|
1427
2132
|
};
|
|
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
|
-
});
|
|
2133
|
+
this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
|
|
1437
2134
|
});
|
|
1438
2135
|
}
|
|
1439
2136
|
saveNewProcessLink(configuration) {
|
|
@@ -1442,31 +2139,41 @@ class PluginActionConfigurationComponent {
|
|
|
1442
2139
|
this.pluginStateService.selectedPluginConfiguration$,
|
|
1443
2140
|
this.pluginStateService.selectedPluginFunction$,
|
|
1444
2141
|
this.stateService.selectedProcessLinkTypeId$,
|
|
2142
|
+
this.pluginStateService.selectedPluginDefinition$,
|
|
1445
2143
|
])
|
|
1446
2144
|
.pipe(take(1))
|
|
1447
|
-
.subscribe(([modalData, selectedConfiguration, selectedFunction, selectedProcessLinkTypeId]) => {
|
|
2145
|
+
.subscribe(([modalData, selectedConfiguration, selectedFunction, selectedProcessLinkTypeId, selectedDefinition,]) => {
|
|
2146
|
+
const isBuildingBlock = this.stateService.isBuildingBlockContext();
|
|
2147
|
+
const pluginDefinitionKey = selectedConfiguration?.pluginDefinition?.key || selectedDefinition?.key;
|
|
2148
|
+
if (!selectedFunction || (isBuildingBlock && !pluginDefinitionKey)) {
|
|
2149
|
+
this.stateService.stopSaving();
|
|
2150
|
+
return;
|
|
2151
|
+
}
|
|
2152
|
+
if (!isBuildingBlock && !selectedConfiguration) {
|
|
2153
|
+
this.stateService.stopSaving();
|
|
2154
|
+
return;
|
|
2155
|
+
}
|
|
2156
|
+
const referenceType = isBuildingBlock
|
|
2157
|
+
? 'BUILDING_BLOCK'
|
|
2158
|
+
: 'FIXED';
|
|
1448
2159
|
const processLinkRequest = {
|
|
1449
2160
|
actionProperties: configuration,
|
|
1450
2161
|
activityId: modalData?.element?.id,
|
|
1451
2162
|
activityType: modalData?.element?.activityListenerType ?? '',
|
|
1452
|
-
pluginConfigurationId: selectedConfiguration
|
|
2163
|
+
pluginConfigurationId: isBuildingBlock ? undefined : selectedConfiguration?.id,
|
|
1453
2164
|
processDefinitionId: modalData?.processDefinitionId,
|
|
1454
2165
|
pluginActionDefinitionKey: selectedFunction.key,
|
|
1455
2166
|
processLinkType: selectedProcessLinkTypeId,
|
|
2167
|
+
referenceType,
|
|
2168
|
+
pluginDefinitionKey,
|
|
1456
2169
|
};
|
|
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
|
-
});
|
|
2170
|
+
this.stateService.sendProcessLinkCreateEvent(processLinkRequest);
|
|
1466
2171
|
});
|
|
1467
2172
|
}
|
|
1468
2173
|
openBackButtonSubscription() {
|
|
1469
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
2174
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
2175
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
2176
|
+
.subscribe(() => {
|
|
1470
2177
|
this.stepService.setChoosePluginActionSteps();
|
|
1471
2178
|
}));
|
|
1472
2179
|
}
|
|
@@ -1475,10 +2182,10 @@ class PluginActionConfigurationComponent {
|
|
|
1475
2182
|
this.pluginStateService.save();
|
|
1476
2183
|
}));
|
|
1477
2184
|
}
|
|
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.
|
|
2185
|
+
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 }); }
|
|
2186
|
+
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
2187
|
}
|
|
1481
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: PluginActionConfigurationComponent, decorators: [{
|
|
1482
2189
|
type: Component,
|
|
1483
2190
|
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
2191
|
}], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: PluginStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: ProcessLinkService }], propDecorators: { selectedPluginConfiguration$: [{
|
|
@@ -1516,7 +2223,7 @@ class FormLinkProcessDiagramComponent {
|
|
|
1516
2223
|
ngOnInit() {
|
|
1517
2224
|
this.pageTitleService.disableReset();
|
|
1518
2225
|
combineLatest([this.route.queryParams, this.processService.getProcessDefinitions()])
|
|
1519
|
-
.pipe(map(([queryParams, processDefinitions]) => ({ queryParams, processDefinitions })))
|
|
2226
|
+
.pipe(map$1(([queryParams, processDefinitions]) => ({ queryParams, processDefinitions })))
|
|
1520
2227
|
.subscribe(response => {
|
|
1521
2228
|
this.processDefinitions = response.processDefinitions;
|
|
1522
2229
|
if (response.queryParams.process) {
|
|
@@ -1613,13 +2320,13 @@ class FormLinkProcessDiagramComponent {
|
|
|
1613
2320
|
}
|
|
1614
2321
|
this.version = +version;
|
|
1615
2322
|
}
|
|
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.
|
|
2323
|
+
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 }); }
|
|
2324
|
+
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
2325
|
}
|
|
1619
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2326
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormLinkProcessDiagramComponent, decorators: [{
|
|
1620
2327
|
type: Component,
|
|
1621
2328
|
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$
|
|
2329
|
+
}], ctorParameters: () => [{ type: i1$3.ProcessService }, { type: i3$3.ActivatedRoute }, { type: i2$1.PageTitleService }], propDecorators: { el: [{
|
|
1623
2330
|
type: ViewChild,
|
|
1624
2331
|
args: ['ref']
|
|
1625
2332
|
}], bpmnElementModalOpen: [{
|
|
@@ -1629,7 +2336,469 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
1629
2336
|
}] } });
|
|
1630
2337
|
|
|
1631
2338
|
/*
|
|
1632
|
-
* Copyright 2015-
|
|
2339
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
2340
|
+
*
|
|
2341
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
2342
|
+
* you may not use this file except in compliance with the License.
|
|
2343
|
+
* You may obtain a copy of the License at
|
|
2344
|
+
*
|
|
2345
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
2346
|
+
*
|
|
2347
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
2348
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
2349
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2350
|
+
* See the License for the specific language governing permissions and
|
|
2351
|
+
* limitations under the License.
|
|
2352
|
+
*/
|
|
2353
|
+
class ConfigureBuildingBlockMappingsComponent {
|
|
2354
|
+
getBuildingBlockFieldItemsForRow$(group) {
|
|
2355
|
+
const cached = this._rowItemsCache.get(group);
|
|
2356
|
+
if (cached)
|
|
2357
|
+
return cached;
|
|
2358
|
+
const stream = combineLatest([
|
|
2359
|
+
this.buildingBlockFieldItems$,
|
|
2360
|
+
this.inputsForm.valueChanges.pipe(startWith(this.inputsForm.value)),
|
|
2361
|
+
group.valueChanges.pipe(startWith(group.value)),
|
|
2362
|
+
]).pipe(map$1(([buildingBlockFieldItems, inputsFormValue, groupValue]) => {
|
|
2363
|
+
const usedInputTargets = inputsFormValue.inputs?.map(input => input.target).filter(Boolean) ?? [];
|
|
2364
|
+
return buildingBlockFieldItems.filter(item => {
|
|
2365
|
+
if (item.id === groupValue.target)
|
|
2366
|
+
return true;
|
|
2367
|
+
return !usedInputTargets.includes(`${item.id}`);
|
|
2368
|
+
});
|
|
2369
|
+
}));
|
|
2370
|
+
this._rowItemsCache.set(group, stream);
|
|
2371
|
+
return stream;
|
|
2372
|
+
}
|
|
2373
|
+
getUsedCaseTargetsForRow$(group) {
|
|
2374
|
+
const cached = this._outputTargetFiltersCache.get(group);
|
|
2375
|
+
if (cached)
|
|
2376
|
+
return cached;
|
|
2377
|
+
const stream = combineLatest([
|
|
2378
|
+
this.outputsForm.valueChanges.pipe(startWith(this.outputsForm.value)),
|
|
2379
|
+
group.valueChanges.pipe(startWith(group.value)),
|
|
2380
|
+
]).pipe(map$1(([outputsFormValue, groupValue]) => {
|
|
2381
|
+
const allTargets = outputsFormValue.outputs?.map(output => output.target).filter(Boolean) ?? [];
|
|
2382
|
+
return allTargets.filter(target => target !== groupValue.target);
|
|
2383
|
+
}));
|
|
2384
|
+
this._outputTargetFiltersCache.set(group, stream);
|
|
2385
|
+
return stream;
|
|
2386
|
+
}
|
|
2387
|
+
get inputs() {
|
|
2388
|
+
return this.inputsForm.controls.inputs;
|
|
2389
|
+
}
|
|
2390
|
+
get outputs() {
|
|
2391
|
+
return this.outputsForm.controls.outputs;
|
|
2392
|
+
}
|
|
2393
|
+
constructor(fb, buildingBlockStateService, buttonService, stepService, processLinkService, processLinkStateService, translateService, route, changeDetectorRef, buildingBlockApiService, stateService) {
|
|
2394
|
+
this.fb = fb;
|
|
2395
|
+
this.buildingBlockStateService = buildingBlockStateService;
|
|
2396
|
+
this.buttonService = buttonService;
|
|
2397
|
+
this.stepService = stepService;
|
|
2398
|
+
this.processLinkService = processLinkService;
|
|
2399
|
+
this.processLinkStateService = processLinkStateService;
|
|
2400
|
+
this.translateService = translateService;
|
|
2401
|
+
this.route = route;
|
|
2402
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
2403
|
+
this.buildingBlockApiService = buildingBlockApiService;
|
|
2404
|
+
this.stateService = stateService;
|
|
2405
|
+
this.buildingBlockFields$ = this.buildingBlockStateService.buildingBlockFields$;
|
|
2406
|
+
this.buildingBlockFieldItems$ = this.buildingBlockFields$.pipe(map$1(buildingBlockFields => buildingBlockFields.map(buildingBlockField => {
|
|
2407
|
+
return {
|
|
2408
|
+
id: buildingBlockField.name,
|
|
2409
|
+
text: `doc:${buildingBlockField.name}`,
|
|
2410
|
+
};
|
|
2411
|
+
})));
|
|
2412
|
+
this.inputsForm = new FormGroup({
|
|
2413
|
+
inputs: new FormArray([]),
|
|
2414
|
+
});
|
|
2415
|
+
this.outputsForm = new FormGroup({
|
|
2416
|
+
outputs: new FormArray([]),
|
|
2417
|
+
});
|
|
2418
|
+
this._rowItemsCache = new WeakMap();
|
|
2419
|
+
this._outputTargetFiltersCache = new WeakMap();
|
|
2420
|
+
this.syncTimingItems = [
|
|
2421
|
+
{
|
|
2422
|
+
id: 'CONTINUOUS',
|
|
2423
|
+
labelKey: 'processLinkConfiguration.buildingBlock.sync.continuous',
|
|
2424
|
+
},
|
|
2425
|
+
{
|
|
2426
|
+
id: 'END',
|
|
2427
|
+
labelKey: 'processLinkConfiguration.buildingBlock.sync.end',
|
|
2428
|
+
},
|
|
2429
|
+
];
|
|
2430
|
+
this.params$ = getCaseManagementRouteParams(this.route);
|
|
2431
|
+
this.buildingBlockParams$ = getBuildingBlockManagementRouteParams(this.route);
|
|
2432
|
+
this.ValuePathSelectorPrefix = ValuePathSelectorPrefix;
|
|
2433
|
+
this.sourceIsCase$ = new BehaviorSubject(true);
|
|
2434
|
+
/**
|
|
2435
|
+
* Returns the name of the source/target context in mappings.
|
|
2436
|
+
* When in a building block context, shows the parent building block name.
|
|
2437
|
+
* When in a case context, shows the case name.
|
|
2438
|
+
*/
|
|
2439
|
+
this.sourceContextName$ = combineLatest([
|
|
2440
|
+
this.params$,
|
|
2441
|
+
this.buildingBlockParams$,
|
|
2442
|
+
]).pipe(switchMap$1(([caseParams, bbParams]) => {
|
|
2443
|
+
if (bbParams?.buildingBlockDefinitionKey && bbParams?.buildingBlockDefinitionVersionTag) {
|
|
2444
|
+
this.sourceIsCase$.next(false);
|
|
2445
|
+
// We're in a building block context - fetch the parent building block name
|
|
2446
|
+
return this.buildingBlockApiService
|
|
2447
|
+
.getBuildingBlockDefinition(bbParams.buildingBlockDefinitionKey, bbParams.buildingBlockDefinitionVersionTag)
|
|
2448
|
+
.pipe(map$1(def => def?.name ?? bbParams.buildingBlockDefinitionKey));
|
|
2449
|
+
}
|
|
2450
|
+
else if (caseParams?.caseDefinitionKey && caseParams?.caseDefinitionVersionTag) {
|
|
2451
|
+
this.sourceIsCase$.next(true);
|
|
2452
|
+
// We're in a case context - fetch the case name
|
|
2453
|
+
return this.buildingBlockApiService
|
|
2454
|
+
.getCaseDefinition(caseParams.caseDefinitionKey, caseParams.caseDefinitionVersionTag)
|
|
2455
|
+
.pipe(map$1(def => def?.name ?? caseParams.caseDefinitionKey));
|
|
2456
|
+
}
|
|
2457
|
+
return of(this.translateService.instant('processLinkConfiguration.buildingBlock.case'));
|
|
2458
|
+
}));
|
|
2459
|
+
/**
|
|
2460
|
+
* Returns the name of the building block being configured.
|
|
2461
|
+
*/
|
|
2462
|
+
this.targetBuildingBlockName$ = combineLatest([
|
|
2463
|
+
this.buildingBlockStateService.definitionKey$,
|
|
2464
|
+
this.buildingBlockStateService.definitionVersionTag$,
|
|
2465
|
+
]).pipe(switchMap$1(([key, versionTag]) => {
|
|
2466
|
+
if (key && versionTag) {
|
|
2467
|
+
return this.buildingBlockApiService
|
|
2468
|
+
.getBuildingBlockDefinition(key, versionTag)
|
|
2469
|
+
.pipe(map$1(def => def?.name ?? key));
|
|
2470
|
+
}
|
|
2471
|
+
return of(this.translateService.instant('processLinkConfiguration.buildingBlock.buildingBlock'));
|
|
2472
|
+
}));
|
|
2473
|
+
this._subscriptions = new Subscription();
|
|
2474
|
+
this._syncingFromState = false;
|
|
2475
|
+
this._suppressValidation = false;
|
|
2476
|
+
this.allInputsMapped$ = combineLatest([
|
|
2477
|
+
this.buildingBlockFields$,
|
|
2478
|
+
this.inputsForm.valueChanges.pipe(startWith(this.inputsForm.value)),
|
|
2479
|
+
]).pipe(map$1(([fields, inputsFormValue]) => {
|
|
2480
|
+
const allTargets = inputsFormValue.inputs?.map(input => input.target).filter((t) => !!t) ?? [];
|
|
2481
|
+
if (!fields || fields.length === 0) {
|
|
2482
|
+
return false;
|
|
2483
|
+
}
|
|
2484
|
+
return fields.every(field => allTargets.includes(field.name));
|
|
2485
|
+
}));
|
|
2486
|
+
}
|
|
2487
|
+
ngOnInit() {
|
|
2488
|
+
combineLatest([this.buildingBlockFields$, this.buildingBlockStateService.inputMappings$])
|
|
2489
|
+
.pipe(take(1))
|
|
2490
|
+
.subscribe(([fields, mappings]) => {
|
|
2491
|
+
this.syncInputsFromState(fields, mappings);
|
|
2492
|
+
});
|
|
2493
|
+
this.buildingBlockStateService.outputMappings$.pipe(take(1)).subscribe(mappings => {
|
|
2494
|
+
this.syncOutputsFromState(mappings);
|
|
2495
|
+
});
|
|
2496
|
+
this._subscriptions.add(combineLatest([this.inputsForm.statusChanges, this.outputsForm.statusChanges]).subscribe(() => {
|
|
2497
|
+
this.triggerValidation();
|
|
2498
|
+
}));
|
|
2499
|
+
this.triggerValidation();
|
|
2500
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
2501
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
2502
|
+
.subscribe(() => {
|
|
2503
|
+
this.stepService.setConfigureBuildingBlockPluginsStep();
|
|
2504
|
+
}));
|
|
2505
|
+
this._subscriptions.add(this.buttonService.saveButtonClick$.subscribe(() => {
|
|
2506
|
+
this.persistProcessLink();
|
|
2507
|
+
}));
|
|
2508
|
+
this._subscriptions.add(this.outputsForm.valueChanges.subscribe(() => {
|
|
2509
|
+
this.persistOutputFormState();
|
|
2510
|
+
}));
|
|
2511
|
+
this._subscriptions.add(this.inputsForm.valueChanges.subscribe(() => {
|
|
2512
|
+
this.persistInputFormState();
|
|
2513
|
+
}));
|
|
2514
|
+
}
|
|
2515
|
+
ngOnDestroy() {
|
|
2516
|
+
this._subscriptions.unsubscribe();
|
|
2517
|
+
}
|
|
2518
|
+
createInputGroup(mapping) {
|
|
2519
|
+
return new FormGroup({
|
|
2520
|
+
source: new FormControl(mapping?.source ?? '', {
|
|
2521
|
+
nonNullable: true,
|
|
2522
|
+
validators: [Validators.required],
|
|
2523
|
+
}),
|
|
2524
|
+
target: new FormControl(mapping?.target ?? '', {
|
|
2525
|
+
nonNullable: true,
|
|
2526
|
+
validators: [Validators.required],
|
|
2527
|
+
}),
|
|
2528
|
+
});
|
|
2529
|
+
}
|
|
2530
|
+
createOutputGroup(mapping, sourceOverride) {
|
|
2531
|
+
return new FormGroup({
|
|
2532
|
+
source: new FormControl(sourceOverride ?? mapping?.source ?? '', {
|
|
2533
|
+
nonNullable: true,
|
|
2534
|
+
validators: [Validators.required],
|
|
2535
|
+
}),
|
|
2536
|
+
target: new FormControl(mapping?.target ?? '', {
|
|
2537
|
+
nonNullable: true,
|
|
2538
|
+
validators: [Validators.required],
|
|
2539
|
+
}),
|
|
2540
|
+
syncTiming: new FormControl(mapping?.syncTiming ?? 'END', { nonNullable: true, validators: [Validators.required] }),
|
|
2541
|
+
});
|
|
2542
|
+
}
|
|
2543
|
+
addInput() {
|
|
2544
|
+
this.inputs.push(this.createInputGroup());
|
|
2545
|
+
this.persistInputFormState();
|
|
2546
|
+
this.changeDetectorRef.detectChanges();
|
|
2547
|
+
}
|
|
2548
|
+
deleteInput(index) {
|
|
2549
|
+
this.inputs.removeAt(index);
|
|
2550
|
+
this.persistInputFormState();
|
|
2551
|
+
this.changeDetectorRef.detectChanges();
|
|
2552
|
+
}
|
|
2553
|
+
addOutput(source) {
|
|
2554
|
+
this.outputs.push(this.createOutputGroup(undefined, source));
|
|
2555
|
+
this.persistOutputFormState();
|
|
2556
|
+
this.changeDetectorRef.detectChanges();
|
|
2557
|
+
}
|
|
2558
|
+
deleteOutput(index) {
|
|
2559
|
+
this.outputs.removeAt(index);
|
|
2560
|
+
this.persistOutputFormState();
|
|
2561
|
+
}
|
|
2562
|
+
syncInputsFromState(fields, mappings) {
|
|
2563
|
+
this._syncingFromState = true;
|
|
2564
|
+
const requiredTargets = fields.filter(f => f.required).map(f => f.name);
|
|
2565
|
+
const allMappings = [
|
|
2566
|
+
...requiredTargets.map(target => mappings.find(m => m.target === target) || { target: target, source: '' }),
|
|
2567
|
+
...mappings.filter(mapping => !requiredTargets.includes(mapping.target)),
|
|
2568
|
+
];
|
|
2569
|
+
this.inputs.clear();
|
|
2570
|
+
allMappings.forEach(mapping => {
|
|
2571
|
+
this.inputs.push(this.createInputGroup(mapping));
|
|
2572
|
+
});
|
|
2573
|
+
this._syncingFromState = false;
|
|
2574
|
+
this.triggerValidation();
|
|
2575
|
+
}
|
|
2576
|
+
isSyncTimingSelected(group, value) {
|
|
2577
|
+
return group.controls.syncTiming.value === value;
|
|
2578
|
+
}
|
|
2579
|
+
syncOutputsFromState(mappings) {
|
|
2580
|
+
this._syncingFromState = true;
|
|
2581
|
+
this.outputs.clear();
|
|
2582
|
+
(mappings || []).forEach(mapping => {
|
|
2583
|
+
this.outputs.push(this.createOutputGroup(mapping));
|
|
2584
|
+
});
|
|
2585
|
+
this._syncingFromState = false;
|
|
2586
|
+
this.triggerValidation();
|
|
2587
|
+
}
|
|
2588
|
+
persistInputFormState() {
|
|
2589
|
+
if (this._syncingFromState) {
|
|
2590
|
+
return;
|
|
2591
|
+
}
|
|
2592
|
+
const mapped = this.inputs.controls.map(group => {
|
|
2593
|
+
return { source: group.value.source, target: group.value.target };
|
|
2594
|
+
});
|
|
2595
|
+
this.buildingBlockStateService.setInputMappings(mapped);
|
|
2596
|
+
this.triggerValidation();
|
|
2597
|
+
}
|
|
2598
|
+
persistOutputFormState() {
|
|
2599
|
+
if (this._syncingFromState) {
|
|
2600
|
+
return;
|
|
2601
|
+
}
|
|
2602
|
+
const mapped = this.outputs.controls.map(group => {
|
|
2603
|
+
return {
|
|
2604
|
+
source: group.value.source,
|
|
2605
|
+
target: group.value.target,
|
|
2606
|
+
syncTiming: (group.value.syncTiming ?? 'END'),
|
|
2607
|
+
};
|
|
2608
|
+
});
|
|
2609
|
+
this.buildingBlockStateService.setOutputMappings(mapped);
|
|
2610
|
+
this.triggerValidation();
|
|
2611
|
+
}
|
|
2612
|
+
isValid() {
|
|
2613
|
+
const fields = this.buildingBlockStateService.getBuildingBlockFieldsSnapshot();
|
|
2614
|
+
this.clearCustomErrors();
|
|
2615
|
+
const inputsValid = this.validateInputs(fields);
|
|
2616
|
+
const outputsValid = this.validateOutputs();
|
|
2617
|
+
const overall = this.inputsForm.valid && this.outputsForm.valid && inputsValid && outputsValid;
|
|
2618
|
+
this.buttonService[overall ? 'enableSaveButton' : 'disableSaveButton']();
|
|
2619
|
+
return overall;
|
|
2620
|
+
}
|
|
2621
|
+
validateInputs(fields) {
|
|
2622
|
+
let valid = true;
|
|
2623
|
+
const requiredTargets = new Set(fields.filter(f => f.required).map(f => f.name));
|
|
2624
|
+
const targetCounts = {};
|
|
2625
|
+
this.inputs.controls.forEach(group => {
|
|
2626
|
+
const target = group.controls.target.value || '';
|
|
2627
|
+
const source = group.controls.source.value || '';
|
|
2628
|
+
if (target) {
|
|
2629
|
+
targetCounts[target] = (targetCounts[target] || 0) + 1;
|
|
2630
|
+
}
|
|
2631
|
+
if (!source) {
|
|
2632
|
+
group.controls.source.setErrors({ required: true });
|
|
2633
|
+
valid = false;
|
|
2634
|
+
}
|
|
2635
|
+
if (!target) {
|
|
2636
|
+
group.controls.target.setErrors({ required: true });
|
|
2637
|
+
valid = false;
|
|
2638
|
+
}
|
|
2639
|
+
});
|
|
2640
|
+
Object.entries(targetCounts).forEach(([target, count]) => {
|
|
2641
|
+
if (count > 1) {
|
|
2642
|
+
this.inputs.controls
|
|
2643
|
+
.filter(g => g.controls.target.value === target)
|
|
2644
|
+
.forEach(g => g.controls.target.setErrors({ duplicateTarget: true }));
|
|
2645
|
+
valid = false;
|
|
2646
|
+
}
|
|
2647
|
+
});
|
|
2648
|
+
requiredTargets.forEach(reqTarget => {
|
|
2649
|
+
const match = this.inputs.controls.find(g => g.controls.target.value === reqTarget);
|
|
2650
|
+
if (!match || !match.controls.source.value) {
|
|
2651
|
+
valid = false;
|
|
2652
|
+
}
|
|
2653
|
+
});
|
|
2654
|
+
return valid;
|
|
2655
|
+
}
|
|
2656
|
+
validateOutputs() {
|
|
2657
|
+
let valid = true;
|
|
2658
|
+
const targetCounts = {};
|
|
2659
|
+
this.outputs.controls.forEach(group => {
|
|
2660
|
+
const target = group.controls.target.value || '';
|
|
2661
|
+
const source = group.controls.source.value || '';
|
|
2662
|
+
const syncTiming = group.controls.syncTiming.value;
|
|
2663
|
+
if (target) {
|
|
2664
|
+
targetCounts[target] = (targetCounts[target] || 0) + 1;
|
|
2665
|
+
}
|
|
2666
|
+
if (!source) {
|
|
2667
|
+
group.controls.source.setErrors({ required: true });
|
|
2668
|
+
valid = false;
|
|
2669
|
+
}
|
|
2670
|
+
if (!target) {
|
|
2671
|
+
group.controls.target.setErrors({ required: true });
|
|
2672
|
+
valid = false;
|
|
2673
|
+
}
|
|
2674
|
+
if (!syncTiming) {
|
|
2675
|
+
group.controls.syncTiming.setErrors({ required: true });
|
|
2676
|
+
valid = false;
|
|
2677
|
+
}
|
|
2678
|
+
});
|
|
2679
|
+
Object.entries(targetCounts).forEach(([target, count]) => {
|
|
2680
|
+
if (count > 1) {
|
|
2681
|
+
this.outputs.controls
|
|
2682
|
+
.filter(g => g.controls.target.value === target)
|
|
2683
|
+
.forEach(g => g.controls.target.setErrors({ duplicateTarget: true }));
|
|
2684
|
+
valid = false;
|
|
2685
|
+
}
|
|
2686
|
+
});
|
|
2687
|
+
return valid;
|
|
2688
|
+
}
|
|
2689
|
+
clearCustomErrors() {
|
|
2690
|
+
this.inputs.controls.forEach(group => {
|
|
2691
|
+
group.controls.source.setErrors(null);
|
|
2692
|
+
group.controls.target.setErrors(null);
|
|
2693
|
+
});
|
|
2694
|
+
this.outputs.controls.forEach(group => {
|
|
2695
|
+
group.controls.source.setErrors(null);
|
|
2696
|
+
group.controls.target.setErrors(null);
|
|
2697
|
+
group.controls.syncTiming.setErrors(null);
|
|
2698
|
+
});
|
|
2699
|
+
}
|
|
2700
|
+
triggerValidation() {
|
|
2701
|
+
if (this._suppressValidation)
|
|
2702
|
+
return;
|
|
2703
|
+
this._suppressValidation = true;
|
|
2704
|
+
Promise.resolve().then(() => {
|
|
2705
|
+
this.isValid();
|
|
2706
|
+
this._suppressValidation = false;
|
|
2707
|
+
});
|
|
2708
|
+
}
|
|
2709
|
+
persistProcessLink() {
|
|
2710
|
+
if (!this.isValid()) {
|
|
2711
|
+
this.buttonService.disableSaveButton();
|
|
2712
|
+
return;
|
|
2713
|
+
}
|
|
2714
|
+
this.buttonService.disableSaveButton();
|
|
2715
|
+
this.processLinkStateService.startSaving();
|
|
2716
|
+
this.processLinkStateService.selectedProcessLink$
|
|
2717
|
+
.pipe(take(1))
|
|
2718
|
+
.subscribe(selectedProcessLink => {
|
|
2719
|
+
if (selectedProcessLink && selectedProcessLink.processLinkType === 'building-block') {
|
|
2720
|
+
this.updateProcessLink(selectedProcessLink);
|
|
2721
|
+
}
|
|
2722
|
+
else {
|
|
2723
|
+
this.createProcessLink();
|
|
2724
|
+
}
|
|
2725
|
+
});
|
|
2726
|
+
}
|
|
2727
|
+
createProcessLink() {
|
|
2728
|
+
this.processLinkStateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
|
|
2729
|
+
const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
|
|
2730
|
+
if (!modalParams || !key || !versionTag) {
|
|
2731
|
+
this.processLinkStateService.stopSaving();
|
|
2732
|
+
return;
|
|
2733
|
+
}
|
|
2734
|
+
const activityId = modalParams.element?.id;
|
|
2735
|
+
if (!activityId) {
|
|
2736
|
+
this.processLinkStateService.stopSaving();
|
|
2737
|
+
return;
|
|
2738
|
+
}
|
|
2739
|
+
const request = {
|
|
2740
|
+
processDefinitionId: modalParams.processDefinitionId ?? '-',
|
|
2741
|
+
activityId,
|
|
2742
|
+
activityType: modalParams.element?.activityListenerType ?? '',
|
|
2743
|
+
processLinkType: 'building-block',
|
|
2744
|
+
buildingBlockDefinitionKey: key,
|
|
2745
|
+
buildingBlockDefinitionVersionTag: versionTag,
|
|
2746
|
+
pluginConfigurationMappings: this.buildingBlockStateService.getPluginConfigurationMappingsSnapshot(),
|
|
2747
|
+
inputMappings: this.buildingBlockStateService.getInputMappingsSnapshot(),
|
|
2748
|
+
outputMappings: this.buildingBlockStateService.getOutputMappingsSnapshot(),
|
|
2749
|
+
};
|
|
2750
|
+
this.processLinkStateService.sendProcessLinkCreateEvent(request);
|
|
2751
|
+
});
|
|
2752
|
+
}
|
|
2753
|
+
updateProcessLink(processLink) {
|
|
2754
|
+
this.processLinkStateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
|
|
2755
|
+
const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
|
|
2756
|
+
if (!modalParams || !key || !versionTag) {
|
|
2757
|
+
this.processLinkStateService.stopSaving();
|
|
2758
|
+
return;
|
|
2759
|
+
}
|
|
2760
|
+
const activityId = modalParams.element?.id;
|
|
2761
|
+
const request = {
|
|
2762
|
+
id: processLink.id,
|
|
2763
|
+
activityId: activityId,
|
|
2764
|
+
processLinkType: 'building-block',
|
|
2765
|
+
buildingBlockDefinitionKey: key,
|
|
2766
|
+
buildingBlockDefinitionVersionTag: versionTag,
|
|
2767
|
+
pluginConfigurationMappings: this.buildingBlockStateService.getPluginConfigurationMappingsSnapshot(),
|
|
2768
|
+
inputMappings: this.buildingBlockStateService.getInputMappingsSnapshot(),
|
|
2769
|
+
outputMappings: this.buildingBlockStateService.getOutputMappingsSnapshot(),
|
|
2770
|
+
};
|
|
2771
|
+
this.processLinkStateService.sendProcessLinkUpdateEvent(request);
|
|
2772
|
+
});
|
|
2773
|
+
}
|
|
2774
|
+
isRequiredTarget(fields, target) {
|
|
2775
|
+
if (!fields)
|
|
2776
|
+
return false;
|
|
2777
|
+
return fields.some(field => field.required && field.name === target);
|
|
2778
|
+
}
|
|
2779
|
+
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 }); }
|
|
2780
|
+
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 caseLabelTranslation: ('Case' | 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.sourceIsCase ? obs.caseLabelTranslation : obs.buildingBlockLabelTranslation) +\n ': ' +\n 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 <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 <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.sourceIsCase ? obs.caseLabelTranslation : obs.buildingBlockLabelTranslation) +\n ': ' +\n 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 <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 </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.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: "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 }); }
|
|
2781
|
+
}
|
|
2782
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockMappingsComponent, decorators: [{
|
|
2783
|
+
type: Component,
|
|
2784
|
+
args: [{ standalone: true, selector: 'valtimo-configure-building-block-mappings', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
2785
|
+
CommonModule,
|
|
2786
|
+
ReactiveFormsModule,
|
|
2787
|
+
ComboBoxModule,
|
|
2788
|
+
RadioModule,
|
|
2789
|
+
InputModule,
|
|
2790
|
+
ValuePathSelectorComponent,
|
|
2791
|
+
InputLabelModule,
|
|
2792
|
+
TranslateModule,
|
|
2793
|
+
ButtonModule,
|
|
2794
|
+
IconModule,
|
|
2795
|
+
SelectModule,
|
|
2796
|
+
LayerModule,
|
|
2797
|
+
], 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 caseLabelTranslation: ('Case' | 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.sourceIsCase ? obs.caseLabelTranslation : obs.buildingBlockLabelTranslation) +\n ': ' +\n 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 <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 <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.sourceIsCase ? obs.caseLabelTranslation : obs.buildingBlockLabelTranslation) +\n ': ' +\n 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 <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 </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"] }]
|
|
2798
|
+
}], 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 }] });
|
|
2799
|
+
|
|
2800
|
+
/*
|
|
2801
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
1633
2802
|
*
|
|
1634
2803
|
* Licensed under EUPL, Version 1.2 (the "License");
|
|
1635
2804
|
* you may not use this file except in compliance with the License.
|
|
@@ -1648,15 +2817,22 @@ class ChooseProcessLinkTypeComponent {
|
|
|
1648
2817
|
this.processLinkStateService = processLinkStateService;
|
|
1649
2818
|
this.availableProcessLinkTypes$ = this.processLinkStateService.availableProcessLinkTypes$;
|
|
1650
2819
|
}
|
|
2820
|
+
getTooltipKey(processLinkTypeId) {
|
|
2821
|
+
if (this.processLinkStateService.isBuildingBlockContext() &&
|
|
2822
|
+
UNSUPPORTED_PROCESS_LINK_TYPES_IN_BUILDING_BLOCK.includes(processLinkTypeId)) {
|
|
2823
|
+
return 'processLinkTypeDisabledTooltip.buildingBlockUnsupported';
|
|
2824
|
+
}
|
|
2825
|
+
return 'processLinkTypeDisabledTooltip.' + processLinkTypeId;
|
|
2826
|
+
}
|
|
1651
2827
|
selectProcessLinkType(processLinkTypeId) {
|
|
1652
2828
|
this.processLinkStateService.selectProcessLinkType(processLinkTypeId);
|
|
1653
2829
|
}
|
|
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.
|
|
2830
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ChooseProcessLinkTypeComponent, deps: [{ token: ProcessLinkStateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2831
|
+
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
2832
|
}
|
|
1657
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2833
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ChooseProcessLinkTypeComponent, decorators: [{
|
|
1658
2834
|
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]=\"
|
|
2835
|
+
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
2836
|
}], ctorParameters: () => [{ type: ProcessLinkStateService }] });
|
|
1661
2837
|
|
|
1662
2838
|
/*
|
|
@@ -1685,7 +2861,7 @@ class FormDisplayConfigurationComponent {
|
|
|
1685
2861
|
this.formDisplayValue$ = new BehaviorSubject(null);
|
|
1686
2862
|
this.formSizeValue$ = new BehaviorSubject(null);
|
|
1687
2863
|
this._subtitles$ = new BehaviorSubject([]);
|
|
1688
|
-
this.subtitles$ = this._subtitles$.pipe(map(subtitles => subtitles.map(subtitle => ({ value: subtitle }))));
|
|
2864
|
+
this.subtitles$ = this._subtitles$.pipe(map$1(subtitles => subtitles.map(subtitle => ({ value: subtitle }))));
|
|
1689
2865
|
this.disableFormSizeInput$ = new BehaviorSubject(true);
|
|
1690
2866
|
this.saving$ = this.stateService.saving$;
|
|
1691
2867
|
this.isUserTask$ = new BehaviorSubject(false);
|
|
@@ -1695,7 +2871,7 @@ class FormDisplayConfigurationComponent {
|
|
|
1695
2871
|
this.formDisplayTypeListItems$ = combineLatest([
|
|
1696
2872
|
this.formDisplayValue$,
|
|
1697
2873
|
this.translateService.stream('key'),
|
|
1698
|
-
]).pipe(map(([formDisplayValue]) => this._DISPLAY_TYPE_OPTIONS.map((key) => ({
|
|
2874
|
+
]).pipe(map$1(([formDisplayValue]) => this._DISPLAY_TYPE_OPTIONS.map((key) => ({
|
|
1699
2875
|
content: this.translateService.instant(`processLinkSteps.displayType.options.${key}`),
|
|
1700
2876
|
key: key,
|
|
1701
2877
|
selected: this.formDisplayValue$.getValue() === key,
|
|
@@ -1703,7 +2879,7 @@ class FormDisplayConfigurationComponent {
|
|
|
1703
2879
|
this.formSizeListItems$ = combineLatest([
|
|
1704
2880
|
this.formSizeValue$,
|
|
1705
2881
|
this.translateService.stream('key'),
|
|
1706
|
-
]).pipe(map(([formSizeValue]) => this._FORM_SIZE_OPTIONS.map((key) => ({
|
|
2882
|
+
]).pipe(map$1(([formSizeValue]) => this._FORM_SIZE_OPTIONS.map((key) => ({
|
|
1707
2883
|
content: this.translateService.instant(`processLinkSteps.formSize.options.${key}`),
|
|
1708
2884
|
key: key,
|
|
1709
2885
|
selected: this.formSizeValue$.getValue() === key,
|
|
@@ -1761,13 +2937,13 @@ class FormDisplayConfigurationComponent {
|
|
|
1761
2937
|
else
|
|
1762
2938
|
this.buttonService.disableSaveButton();
|
|
1763
2939
|
}
|
|
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.
|
|
2940
|
+
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 }); }
|
|
2941
|
+
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
2942
|
}
|
|
1767
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
2943
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormDisplayConfigurationComponent, decorators: [{
|
|
1768
2944
|
type: Component,
|
|
1769
2945
|
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:
|
|
2946
|
+
}], ctorParameters: () => [{ type: ProcessLinkButtonService }, { type: ProcessLinkStateService }, { type: i3.TranslateService }], propDecorators: { selectedFormDefinition: [{
|
|
1771
2947
|
type: Input
|
|
1772
2948
|
}], formDisplayValue: [{
|
|
1773
2949
|
type: Output
|
|
@@ -1808,7 +2984,7 @@ class SelectFormComponent {
|
|
|
1808
2984
|
}
|
|
1809
2985
|
return this.formService.getAllUnlinkedFormDefinitions();
|
|
1810
2986
|
}));
|
|
1811
|
-
this.formDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formDefinitions$]).pipe(map
|
|
2987
|
+
this.formDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formDefinitions$]).pipe(map(([selectedProcessLink, formDefinitions]) => formDefinitions.map(definition => ({
|
|
1812
2988
|
content: definition.name,
|
|
1813
2989
|
id: definition.id,
|
|
1814
2990
|
selected: selectedProcessLink
|
|
@@ -1859,7 +3035,9 @@ class SelectFormComponent {
|
|
|
1859
3035
|
this.subtitlesValue = subtitles;
|
|
1860
3036
|
}
|
|
1861
3037
|
openBackButtonSubscription() {
|
|
1862
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
3038
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
3039
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
3040
|
+
.subscribe(() => {
|
|
1863
3041
|
this.stateService.setInitial();
|
|
1864
3042
|
}));
|
|
1865
3043
|
}
|
|
@@ -1898,18 +3076,7 @@ class SelectFormComponent {
|
|
|
1898
3076
|
...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_TYPE }),
|
|
1899
3077
|
...(isUserTask && { subtitles: this.subtitlesValue }),
|
|
1900
3078
|
};
|
|
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
|
-
});
|
|
3079
|
+
this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
|
|
1913
3080
|
});
|
|
1914
3081
|
}
|
|
1915
3082
|
saveNewProcessLink() {
|
|
@@ -1938,27 +3105,16 @@ class SelectFormComponent {
|
|
|
1938
3105
|
subtitles: this.subtitlesValue,
|
|
1939
3106
|
}),
|
|
1940
3107
|
};
|
|
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
|
-
});
|
|
3108
|
+
this.stateService.sendProcessLinkCreateEvent(createRequest);
|
|
1953
3109
|
});
|
|
1954
3110
|
}
|
|
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.
|
|
3111
|
+
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 }); }
|
|
3112
|
+
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
3113
|
}
|
|
1958
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormComponent, decorators: [{
|
|
1959
3115
|
type: Component,
|
|
1960
3116
|
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$
|
|
3117
|
+
}], ctorParameters: () => [{ type: i1$4.FormService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$3.ActivatedRoute }] });
|
|
1962
3118
|
|
|
1963
3119
|
/*
|
|
1964
3120
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -1984,8 +3140,8 @@ class SelectFormFlowComponent {
|
|
|
1984
3140
|
this.route = route;
|
|
1985
3141
|
this.subtitlesValue = [];
|
|
1986
3142
|
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
|
|
3143
|
+
this.formFlowDefinitions$ = getCaseManagementRouteParams(this.route).pipe(switchMap$1((params) => this.formFlowService.getFormFlowDefinitions(params?.caseDefinitionKey ?? '', params?.caseDefinitionVersionTag ?? '')), map((formFlowDefinitions) => formFlowDefinitions.content));
|
|
3144
|
+
this.formFlowDefinitionListItems$ = combineLatest([this.stateService.selectedProcessLink$, this.formFlowDefinitions$]).pipe(map(([selectedProcessLink, formFlowDefinitions]) => formFlowDefinitions.map(definition => ({
|
|
1989
3145
|
content: definition.key,
|
|
1990
3146
|
id: definition.key,
|
|
1991
3147
|
selected: selectedProcessLink
|
|
@@ -2038,7 +3194,9 @@ class SelectFormFlowComponent {
|
|
|
2038
3194
|
this.subtitlesValue = subtitles;
|
|
2039
3195
|
}
|
|
2040
3196
|
openBackButtonSubscription() {
|
|
2041
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
3197
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
3198
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
3199
|
+
.subscribe(() => {
|
|
2042
3200
|
this.stateService.setInitial();
|
|
2043
3201
|
}));
|
|
2044
3202
|
}
|
|
@@ -2070,18 +3228,7 @@ class SelectFormFlowComponent {
|
|
|
2070
3228
|
...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_SIZE }),
|
|
2071
3229
|
...(isUserTask && { subtitles: this.subtitlesValue }),
|
|
2072
3230
|
};
|
|
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
|
-
});
|
|
3231
|
+
this.stateService.sendProcessLinkUpdateEvent(updateProcessLinkRequest);
|
|
2085
3232
|
});
|
|
2086
3233
|
}
|
|
2087
3234
|
saveNewProcessLink() {
|
|
@@ -2104,27 +3251,16 @@ class SelectFormFlowComponent {
|
|
|
2104
3251
|
...(isUserTask && { formSize: this.formSizeValue || this._DEFAULT_FORM_DISPLAY_SIZE }),
|
|
2105
3252
|
...(isUserTask && { subtitles: this.subtitlesValue }),
|
|
2106
3253
|
};
|
|
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
|
-
});
|
|
3254
|
+
this.stateService.sendProcessLinkCreateEvent(createRequest);
|
|
2119
3255
|
});
|
|
2120
3256
|
}
|
|
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.
|
|
3257
|
+
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 }); }
|
|
3258
|
+
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
3259
|
}
|
|
2124
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3260
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectFormFlowComponent, decorators: [{
|
|
2125
3261
|
type: Component,
|
|
2126
3262
|
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$
|
|
3263
|
+
}], ctorParameters: () => [{ type: i1$5.FormFlowService }, { type: ProcessLinkStateService }, { type: ProcessLinkService }, { type: ProcessLinkButtonService }, { type: i3$3.ActivatedRoute }] });
|
|
2128
3264
|
|
|
2129
3265
|
/*
|
|
2130
3266
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -2151,7 +3287,7 @@ class SelectUIComponentComponent {
|
|
|
2151
3287
|
this.formCustomComponentListItems$ = combineLatest([
|
|
2152
3288
|
this.stateService.selectedProcessLink$,
|
|
2153
3289
|
this._formCustomComponentConfig$,
|
|
2154
|
-
]).pipe(map
|
|
3290
|
+
]).pipe(map(([selectedProcessLink, formCustomComponentConfigs]) => Object.keys(formCustomComponentConfigs).map(key => ({
|
|
2155
3291
|
content: key,
|
|
2156
3292
|
selected: selectedProcessLink ? selectedProcessLink?.componentKey === key : false,
|
|
2157
3293
|
}))), tap(formCustomComponentListItems => {
|
|
@@ -2177,7 +3313,9 @@ class SelectUIComponentComponent {
|
|
|
2177
3313
|
: this.buttonService.disableSaveButton();
|
|
2178
3314
|
}
|
|
2179
3315
|
openBackButtonSubscription() {
|
|
2180
|
-
this._subscriptions.add(this.buttonService.backButtonClick
|
|
3316
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
3317
|
+
.pipe(withLatestFrom$1(this.stateService.isEditing$), filter(([, isEditing]) => !isEditing))
|
|
3318
|
+
.subscribe(() => {
|
|
2181
3319
|
this.stateService.setInitial();
|
|
2182
3320
|
}));
|
|
2183
3321
|
}
|
|
@@ -2199,14 +3337,7 @@ class SelectUIComponentComponent {
|
|
|
2199
3337
|
componentKey: this._selectedCustomComponent.content,
|
|
2200
3338
|
activityId: selectedProcessLink.activityId,
|
|
2201
3339
|
};
|
|
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
|
-
});
|
|
3340
|
+
this.stateService.sendProcessLinkUpdateEvent(updateRequest);
|
|
2210
3341
|
});
|
|
2211
3342
|
}
|
|
2212
3343
|
saveNewProcessLink() {
|
|
@@ -2219,21 +3350,18 @@ class SelectUIComponentComponent {
|
|
|
2219
3350
|
processLinkType: processLinkTypeId,
|
|
2220
3351
|
activityId: modalParams.element.id,
|
|
2221
3352
|
};
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
return [];
|
|
2225
|
-
}
|
|
2226
|
-
return this.processLinkService.saveProcessLink(createRequest);
|
|
3353
|
+
this.stateService.sendProcessLinkCreateEvent(createRequest);
|
|
3354
|
+
return [];
|
|
2227
3355
|
}))
|
|
2228
3356
|
.subscribe({
|
|
2229
3357
|
next: () => this.stateService.closeModal(),
|
|
2230
3358
|
error: () => this.stateService.stopSaving(),
|
|
2231
3359
|
});
|
|
2232
3360
|
}
|
|
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.
|
|
3361
|
+
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 }); }
|
|
3362
|
+
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
3363
|
}
|
|
2236
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3364
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectUIComponentComponent, decorators: [{
|
|
2237
3365
|
type: Component,
|
|
2238
3366
|
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
3367
|
}], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkService }, { type: undefined, decorators: [{
|
|
@@ -2243,6 +3371,348 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2243
3371
|
args: [FORM_CUSTOM_COMPONENT_TOKEN]
|
|
2244
3372
|
}] }] });
|
|
2245
3373
|
|
|
3374
|
+
/*
|
|
3375
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
3376
|
+
*
|
|
3377
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3378
|
+
* you may not use this file except in compliance with the License.
|
|
3379
|
+
* You may obtain a copy of the License at
|
|
3380
|
+
*
|
|
3381
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
3382
|
+
*
|
|
3383
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3384
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
3385
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3386
|
+
* See the License for the specific language governing permissions and
|
|
3387
|
+
* limitations under the License.
|
|
3388
|
+
*/
|
|
3389
|
+
class SelectBuildingBlockComponent {
|
|
3390
|
+
constructor(processLinkBuildingBlockApiService, stateService, buildingBlockStateService, buttonService, stepService) {
|
|
3391
|
+
this.processLinkBuildingBlockApiService = processLinkBuildingBlockApiService;
|
|
3392
|
+
this.stateService = stateService;
|
|
3393
|
+
this.buildingBlockStateService = buildingBlockStateService;
|
|
3394
|
+
this.buttonService = buttonService;
|
|
3395
|
+
this.stepService = stepService;
|
|
3396
|
+
this.buildingBlocks$ = this.processLinkBuildingBlockApiService
|
|
3397
|
+
.getBuildingBlockDefinitions({ includeArtwork: true })
|
|
3398
|
+
.pipe(map(definitions => [...(definitions ?? [])]), map(definitions => definitions.sort((a, b) => (a.name || a.key).localeCompare(b.name || b.key))), catchError(() => of([])), tap(() => {
|
|
3399
|
+
this.loading = false;
|
|
3400
|
+
}), shareReplay(1));
|
|
3401
|
+
this.loading = true;
|
|
3402
|
+
this.selectedKey = null;
|
|
3403
|
+
this.subscriptions = new Subscription();
|
|
3404
|
+
this.buildingBlocks = [];
|
|
3405
|
+
}
|
|
3406
|
+
ngOnInit() {
|
|
3407
|
+
this.buttonService.disableNextButton();
|
|
3408
|
+
this.subscriptions.add(this.buildingBlocks$.subscribe(definitions => {
|
|
3409
|
+
this.buildingBlocks = definitions ?? [];
|
|
3410
|
+
if (this.selectedKey) {
|
|
3411
|
+
this.stepService.updateBuildingBlockSelectionStepLabel(this.getDefinitionLabel(this.findDefinitionByKey(this.selectedKey)));
|
|
3412
|
+
}
|
|
3413
|
+
}));
|
|
3414
|
+
this.subscriptions.add(this.buildingBlockStateService.definitionKey$.subscribe(key => {
|
|
3415
|
+
this.selectedKey = key;
|
|
3416
|
+
if (key) {
|
|
3417
|
+
this.stepService.updateBuildingBlockSelectionStepLabel(this.getDefinitionLabel(this.findDefinitionByKey(key)));
|
|
3418
|
+
this.buttonService.enableNextButton();
|
|
3419
|
+
}
|
|
3420
|
+
else {
|
|
3421
|
+
this.buttonService.disableNextButton();
|
|
3422
|
+
}
|
|
3423
|
+
}));
|
|
3424
|
+
this.subscriptions.add(this.buttonService.backButtonClick$
|
|
3425
|
+
.pipe(withLatestFrom$1(this.stateService.isEditing$), filter(([, isEditing]) => !isEditing))
|
|
3426
|
+
.subscribe(() => {
|
|
3427
|
+
this.stateService.setInitial();
|
|
3428
|
+
}));
|
|
3429
|
+
this.subscriptions.add(this.buttonService.nextButtonClick$
|
|
3430
|
+
.pipe(withLatestFrom$1(this.stateService.isEditing$), filter(([, isEditing]) => !isEditing))
|
|
3431
|
+
.subscribe(() => {
|
|
3432
|
+
this.stepService.setConfigureBuildingBlockPluginsStep(this.getDefinitionLabel(this.findDefinitionByKey(this.selectedKey)));
|
|
3433
|
+
}));
|
|
3434
|
+
}
|
|
3435
|
+
ngOnDestroy() {
|
|
3436
|
+
this.subscriptions.unsubscribe();
|
|
3437
|
+
}
|
|
3438
|
+
onSelectionChange(event) {
|
|
3439
|
+
const definition = event?.value;
|
|
3440
|
+
this.selectedKey = definition?.key ?? null;
|
|
3441
|
+
this.buildingBlockStateService.setDefinitionKey(definition?.key ?? null);
|
|
3442
|
+
this.stepService.updateBuildingBlockSelectionStepLabel(this.getDefinitionLabel(definition));
|
|
3443
|
+
if (definition?.key) {
|
|
3444
|
+
this.buttonService.enableNextButton();
|
|
3445
|
+
}
|
|
3446
|
+
else {
|
|
3447
|
+
this.buttonService.disableNextButton();
|
|
3448
|
+
}
|
|
3449
|
+
}
|
|
3450
|
+
trackByKey(_, definition) {
|
|
3451
|
+
return definition.key;
|
|
3452
|
+
}
|
|
3453
|
+
findDefinitionByKey(key) {
|
|
3454
|
+
if (!key)
|
|
3455
|
+
return undefined;
|
|
3456
|
+
return this.buildingBlocks.find(definition => definition.key === key);
|
|
3457
|
+
}
|
|
3458
|
+
getDefinitionLabel(definition) {
|
|
3459
|
+
if (!definition)
|
|
3460
|
+
return '';
|
|
3461
|
+
const name = definition.name || definition.key;
|
|
3462
|
+
return name;
|
|
3463
|
+
}
|
|
3464
|
+
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 }); }
|
|
3465
|
+
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" }] }); }
|
|
3466
|
+
}
|
|
3467
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SelectBuildingBlockComponent, decorators: [{
|
|
3468
|
+
type: Component,
|
|
3469
|
+
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"] }]
|
|
3470
|
+
}], ctorParameters: () => [{ type: ProcessLinkBuildingBlockApiService }, { type: ProcessLinkStateService }, { type: BuildingBlockStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }] });
|
|
3471
|
+
|
|
3472
|
+
/*
|
|
3473
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
3474
|
+
*
|
|
3475
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3476
|
+
* you may not use this file except in compliance with the License.
|
|
3477
|
+
* You may obtain a copy of the License at
|
|
3478
|
+
*
|
|
3479
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
3480
|
+
*
|
|
3481
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3482
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
3483
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3484
|
+
* See the License for the specific language governing permissions and
|
|
3485
|
+
* limitations under the License.
|
|
3486
|
+
*/
|
|
3487
|
+
class ConfigureBuildingBlockPluginsComponent {
|
|
3488
|
+
constructor(stateService, buildingBlockStateService, buttonService, stepService, pluginManagementService, pluginTranslationService, processLinkService, translateService, processLinkBuildingBlockApiService) {
|
|
3489
|
+
this.stateService = stateService;
|
|
3490
|
+
this.buildingBlockStateService = buildingBlockStateService;
|
|
3491
|
+
this.buttonService = buttonService;
|
|
3492
|
+
this.stepService = stepService;
|
|
3493
|
+
this.pluginManagementService = pluginManagementService;
|
|
3494
|
+
this.pluginTranslationService = pluginTranslationService;
|
|
3495
|
+
this.processLinkService = processLinkService;
|
|
3496
|
+
this.translateService = translateService;
|
|
3497
|
+
this.processLinkBuildingBlockApiService = processLinkBuildingBlockApiService;
|
|
3498
|
+
this.pluginKeys$ = this.buildingBlockStateService.requiredPluginKeys$;
|
|
3499
|
+
this.isNestedBuildingBlock$ = this.buildingBlockStateService.isNestedBuildingBlock$;
|
|
3500
|
+
this._pluginDependenciesWarningTranslationKey$ = this.buildingBlockStateService.pluginDependencies$.pipe(map$1(dependencies => {
|
|
3501
|
+
if (!dependencies || !dependencies.length)
|
|
3502
|
+
return '';
|
|
3503
|
+
const zaakInstanceLinkDependency = dependencies.includes('ZAAK_INSTANCE_LINK');
|
|
3504
|
+
const zaakTypeLinkDependency = dependencies.includes('ZAAK_TYPE_LINK');
|
|
3505
|
+
if (zaakInstanceLinkDependency && zaakTypeLinkDependency) {
|
|
3506
|
+
return 'processLinkConfiguration.buildingBlock.pluginDependenciesWarning.zaakInstanceAndTypeLink';
|
|
3507
|
+
}
|
|
3508
|
+
else if (zaakInstanceLinkDependency) {
|
|
3509
|
+
return 'processLinkConfiguration.buildingBlock.pluginDependenciesWarning.zaakInstanceLink';
|
|
3510
|
+
}
|
|
3511
|
+
else if (zaakTypeLinkDependency) {
|
|
3512
|
+
return 'processLinkConfiguration.buildingBlock.pluginDependenciesWarning.zaakTypeLink';
|
|
3513
|
+
}
|
|
3514
|
+
return '';
|
|
3515
|
+
}));
|
|
3516
|
+
this.dependenciesNotificationObject$ = combineLatest([
|
|
3517
|
+
this._pluginDependenciesWarningTranslationKey$,
|
|
3518
|
+
this.translateService.stream('key'),
|
|
3519
|
+
]).pipe(map$1(([warningTranslationKey]) => !warningTranslationKey
|
|
3520
|
+
? null
|
|
3521
|
+
: {
|
|
3522
|
+
type: 'warning',
|
|
3523
|
+
lowContrast: true,
|
|
3524
|
+
title: this.translateService.instant('processLinkConfiguration.buildingBlock.pluginDependenciesWarning.title'),
|
|
3525
|
+
message: this.translateService.instant(warningTranslationKey),
|
|
3526
|
+
showClose: false,
|
|
3527
|
+
}));
|
|
3528
|
+
this.loading$ = this.buildingBlockStateService.requirementsLoading$;
|
|
3529
|
+
this.versions$ = this.buildingBlockStateService.versions$;
|
|
3530
|
+
this.definitionVersionTag$ = this.buildingBlockStateService.definitionVersionTag$;
|
|
3531
|
+
this.versionPlaceholder$ = this.translateService.stream('processLinkConfiguration.buildingBlock.versionPlaceholder');
|
|
3532
|
+
this.configurationPlaceholder$ = this.translateService.stream('processLinkConfiguration.buildingBlock.configurationPlaceholder');
|
|
3533
|
+
this.versionItems$ = combineLatest([
|
|
3534
|
+
this.versions$,
|
|
3535
|
+
this.definitionVersionTag$,
|
|
3536
|
+
this.versionPlaceholder$,
|
|
3537
|
+
]).pipe(map$1(([versions, selectedVersion, placeholder]) => {
|
|
3538
|
+
const normalizedSelectedVersion = selectedVersion || '';
|
|
3539
|
+
return [
|
|
3540
|
+
{
|
|
3541
|
+
id: '',
|
|
3542
|
+
content: placeholder,
|
|
3543
|
+
selected: normalizedSelectedVersion === '',
|
|
3544
|
+
},
|
|
3545
|
+
...(versions || []).map(version => ({
|
|
3546
|
+
id: version,
|
|
3547
|
+
content: version,
|
|
3548
|
+
selected: normalizedSelectedVersion === version,
|
|
3549
|
+
})),
|
|
3550
|
+
];
|
|
3551
|
+
}));
|
|
3552
|
+
this.pluginConfigurationViewModels$ = combineLatest([
|
|
3553
|
+
this.pluginKeys$,
|
|
3554
|
+
this.buildingBlockStateService.pluginMappings$,
|
|
3555
|
+
this.configurationPlaceholder$,
|
|
3556
|
+
]).pipe(switchMap$1(([pluginKeys, pluginMappings, placeholder]) => {
|
|
3557
|
+
if (!pluginKeys?.length) {
|
|
3558
|
+
return of([]);
|
|
3559
|
+
}
|
|
3560
|
+
return combineLatest(pluginKeys.map(pluginKey => this.getConfigurationOptions(pluginKey).pipe(map$1(options => ({
|
|
3561
|
+
key: pluginKey,
|
|
3562
|
+
label: this.pluginLabel(pluginKey),
|
|
3563
|
+
dropdownItems: this.buildDropdownItems(options, pluginMappings?.[pluginKey], placeholder),
|
|
3564
|
+
hasOptions: options.length > 0,
|
|
3565
|
+
})))));
|
|
3566
|
+
}));
|
|
3567
|
+
this._subscriptions = new Subscription();
|
|
3568
|
+
this._configurationOptionsCache = new Map();
|
|
3569
|
+
}
|
|
3570
|
+
ngOnInit() {
|
|
3571
|
+
// Check if we're configuring from within a building block process (nested building block)
|
|
3572
|
+
this._subscriptions.add(this.stateService.modalParams$
|
|
3573
|
+
.pipe(map$1(params => params?.processDefinitionId), distinctUntilChanged())
|
|
3574
|
+
.subscribe(processDefinitionId => {
|
|
3575
|
+
if (processDefinitionId) {
|
|
3576
|
+
this.processLinkBuildingBlockApiService
|
|
3577
|
+
.isBuildingBlockProcess(processDefinitionId)
|
|
3578
|
+
.subscribe(isNested => {
|
|
3579
|
+
this.buildingBlockStateService.setIsNestedBuildingBlock(isNested);
|
|
3580
|
+
});
|
|
3581
|
+
}
|
|
3582
|
+
}));
|
|
3583
|
+
this._subscriptions.add(combineLatest([
|
|
3584
|
+
this.buildingBlockStateService.requiredPluginKeys$,
|
|
3585
|
+
this.buildingBlockStateService.mappingsComplete$,
|
|
3586
|
+
this.buildingBlockStateService.requirementsLoading$,
|
|
3587
|
+
this.definitionVersionTag$,
|
|
3588
|
+
]).subscribe(([keys, complete, loading, version]) => {
|
|
3589
|
+
if (loading || !version) {
|
|
3590
|
+
this.buttonService.disableNextButton();
|
|
3591
|
+
return;
|
|
3592
|
+
}
|
|
3593
|
+
if (keys.length === 0 || complete) {
|
|
3594
|
+
this.buttonService.enableNextButton();
|
|
3595
|
+
}
|
|
3596
|
+
else {
|
|
3597
|
+
this.buttonService.disableNextButton();
|
|
3598
|
+
}
|
|
3599
|
+
}));
|
|
3600
|
+
this._subscriptions.add(this.buttonService.backButtonClick$
|
|
3601
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
3602
|
+
.subscribe(() => {
|
|
3603
|
+
this.stepService.setBuildingBlockSteps();
|
|
3604
|
+
}));
|
|
3605
|
+
this._subscriptions.add(this.buttonService.nextButtonClick$
|
|
3606
|
+
.pipe(withLatestFrom(this.stateService.isEditing$), filter$1(([, isEditing]) => !isEditing))
|
|
3607
|
+
.subscribe(() => {
|
|
3608
|
+
this.stepService.setConfigureBuildingBlockMappingsStep(this.buildingBlockStateService.getDefinitionSnapshot().key ?? undefined);
|
|
3609
|
+
}));
|
|
3610
|
+
}
|
|
3611
|
+
ngOnDestroy() {
|
|
3612
|
+
this._subscriptions.unsubscribe();
|
|
3613
|
+
}
|
|
3614
|
+
getConfigurationOptions(pluginDefinitionKey) {
|
|
3615
|
+
if (!this._configurationOptionsCache.has(pluginDefinitionKey)) {
|
|
3616
|
+
this._configurationOptionsCache.set(pluginDefinitionKey, this.pluginManagementService
|
|
3617
|
+
.getPluginConfigurationsByPluginDefinitionKey(pluginDefinitionKey)
|
|
3618
|
+
.pipe(catchError$1(() => of([])), shareReplay(1)));
|
|
3619
|
+
}
|
|
3620
|
+
return this._configurationOptionsCache.get(pluginDefinitionKey) ?? of([]);
|
|
3621
|
+
}
|
|
3622
|
+
onMappingChange(pluginDefinitionKey, configurationId) {
|
|
3623
|
+
const normalizedValue = configurationId || null;
|
|
3624
|
+
this.buildingBlockStateService.setPluginConfigurationMapping(pluginDefinitionKey, normalizedValue);
|
|
3625
|
+
}
|
|
3626
|
+
pluginLabel(pluginDefinitionKey) {
|
|
3627
|
+
return (this.pluginTranslationService.instant('title', pluginDefinitionKey) || pluginDefinitionKey);
|
|
3628
|
+
}
|
|
3629
|
+
buildDropdownItems(options, selectedId, placeholder) {
|
|
3630
|
+
return [
|
|
3631
|
+
{
|
|
3632
|
+
id: '',
|
|
3633
|
+
content: placeholder,
|
|
3634
|
+
selected: !selectedId,
|
|
3635
|
+
},
|
|
3636
|
+
...options.map(option => ({
|
|
3637
|
+
id: option.id,
|
|
3638
|
+
content: option.title,
|
|
3639
|
+
selected: selectedId === option.id || (options.length === 1 && !selectedId),
|
|
3640
|
+
})),
|
|
3641
|
+
];
|
|
3642
|
+
}
|
|
3643
|
+
checkSingleBuildingBlockType(types) {
|
|
3644
|
+
if (!types?.length)
|
|
3645
|
+
return false;
|
|
3646
|
+
return types.length === 1 && types[0]?.processLinkType === 'building-block' && types[0].enabled;
|
|
3647
|
+
}
|
|
3648
|
+
onVersionChange(versionTag) {
|
|
3649
|
+
const normalizedValue = versionTag || null;
|
|
3650
|
+
this.buildingBlockStateService.setPluginConfigurationMappings(undefined);
|
|
3651
|
+
this.buildingBlockStateService.setDefinitionVersionTag(normalizedValue);
|
|
3652
|
+
}
|
|
3653
|
+
createProcessLink() {
|
|
3654
|
+
this.stateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
|
|
3655
|
+
const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
|
|
3656
|
+
if (!modalParams || !key || !versionTag) {
|
|
3657
|
+
this.stateService.stopSaving();
|
|
3658
|
+
return;
|
|
3659
|
+
}
|
|
3660
|
+
const activityId = modalParams.element?.id;
|
|
3661
|
+
if (!activityId) {
|
|
3662
|
+
this.stateService.stopSaving();
|
|
3663
|
+
return;
|
|
3664
|
+
}
|
|
3665
|
+
const request = {
|
|
3666
|
+
processDefinitionId: modalParams.processDefinitionId ?? '-',
|
|
3667
|
+
activityId,
|
|
3668
|
+
activityType: modalParams.element?.activityListenerType ?? '',
|
|
3669
|
+
processLinkType: 'building-block',
|
|
3670
|
+
buildingBlockDefinitionKey: key,
|
|
3671
|
+
buildingBlockDefinitionVersionTag: versionTag,
|
|
3672
|
+
pluginConfigurationMappings: this.getMappingsForPayload(),
|
|
3673
|
+
inputMappings: [],
|
|
3674
|
+
outputMappings: [],
|
|
3675
|
+
};
|
|
3676
|
+
this.stateService.sendProcessLinkCreateEvent(request);
|
|
3677
|
+
});
|
|
3678
|
+
}
|
|
3679
|
+
updateProcessLink(processLink) {
|
|
3680
|
+
this.stateService.modalParams$.pipe(take(1)).subscribe(modalParams => {
|
|
3681
|
+
const { key, versionTag } = this.buildingBlockStateService.getDefinitionSnapshot();
|
|
3682
|
+
if (!modalParams || !key || !versionTag) {
|
|
3683
|
+
this.stateService.stopSaving();
|
|
3684
|
+
return;
|
|
3685
|
+
}
|
|
3686
|
+
const activityId = modalParams.element?.id;
|
|
3687
|
+
const request = {
|
|
3688
|
+
id: processLink.id,
|
|
3689
|
+
activityId: activityId,
|
|
3690
|
+
processLinkType: 'building-block',
|
|
3691
|
+
buildingBlockDefinitionKey: key,
|
|
3692
|
+
buildingBlockDefinitionVersionTag: versionTag,
|
|
3693
|
+
pluginConfigurationMappings: this.getMappingsForPayload(),
|
|
3694
|
+
inputMappings: [],
|
|
3695
|
+
outputMappings: [],
|
|
3696
|
+
};
|
|
3697
|
+
this.stateService.sendProcessLinkUpdateEvent(request);
|
|
3698
|
+
});
|
|
3699
|
+
}
|
|
3700
|
+
getMappingsForPayload() {
|
|
3701
|
+
const mappings = this.buildingBlockStateService.getPluginConfigurationMappingsSnapshot();
|
|
3702
|
+
return Object.entries(mappings).reduce((acc, [pluginKey, configurationId]) => {
|
|
3703
|
+
if (configurationId)
|
|
3704
|
+
acc[pluginKey] = configurationId;
|
|
3705
|
+
return acc;
|
|
3706
|
+
}, {});
|
|
3707
|
+
}
|
|
3708
|
+
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 }); }
|
|
3709
|
+
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" }] }); }
|
|
3710
|
+
}
|
|
3711
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ConfigureBuildingBlockPluginsComponent, decorators: [{
|
|
3712
|
+
type: Component,
|
|
3713
|
+
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"] }]
|
|
3714
|
+
}], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: BuildingBlockStateService }, { type: ProcessLinkButtonService }, { type: ProcessLinkStepService }, { type: i1$1.PluginManagementService }, { type: i1$1.PluginTranslationService }, { type: ProcessLinkService }, { type: i3.TranslateService }, { type: ProcessLinkBuildingBlockApiService }] });
|
|
3715
|
+
|
|
2246
3716
|
/*
|
|
2247
3717
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
2248
3718
|
*
|
|
@@ -2259,12 +3729,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2259
3729
|
* limitations under the License.
|
|
2260
3730
|
*/
|
|
2261
3731
|
class ProcessLinkModalComponent {
|
|
2262
|
-
constructor(stateService, stepService, buttonService, pluginStateService,
|
|
3732
|
+
constructor(stateService, stepService, buttonService, pluginStateService, processLinkStateService, configService) {
|
|
2263
3733
|
this.stateService = stateService;
|
|
2264
3734
|
this.stepService = stepService;
|
|
2265
3735
|
this.buttonService = buttonService;
|
|
2266
3736
|
this.pluginStateService = pluginStateService;
|
|
2267
|
-
this.processLinkService = processLinkService;
|
|
2268
3737
|
this.processLinkStateService = processLinkStateService;
|
|
2269
3738
|
this.configService = configService;
|
|
2270
3739
|
this.showModal$ = this.stateService.showModal$;
|
|
@@ -2281,6 +3750,7 @@ class ProcessLinkModalComponent {
|
|
|
2281
3750
|
this.saving$ = this.stateService.saving$;
|
|
2282
3751
|
this.typeOfSelectedProcessLink$ = this.stateService.typeOfSelectedProcessLink$;
|
|
2283
3752
|
this.viewModelEnabled$ = this.stateService.viewModelEnabled$;
|
|
3753
|
+
this.isEditing$ = this.stateService.isEditing$;
|
|
2284
3754
|
this.selectedPluginConfiguration$ = this.pluginStateService.selectedPluginConfiguration$;
|
|
2285
3755
|
this.showViewModelToggle = this.configService.config.featureToggles.enableFormViewModel;
|
|
2286
3756
|
}
|
|
@@ -2298,30 +3768,21 @@ class ProcessLinkModalComponent {
|
|
|
2298
3768
|
}
|
|
2299
3769
|
unlinkButtonClick() {
|
|
2300
3770
|
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();
|
|
3771
|
+
this.processLinkStateService.sendProcessLinkDeleteEvent({
|
|
3772
|
+
activityId: selectedProcessLink.activityId,
|
|
2312
3773
|
});
|
|
2313
3774
|
});
|
|
2314
3775
|
}
|
|
2315
3776
|
toggleCheckedChange(value) {
|
|
2316
3777
|
this.processLinkStateService.setViewModelEnabled(value);
|
|
2317
3778
|
}
|
|
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" }] }); }
|
|
3779
|
+
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 }); }
|
|
3780
|
+
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
3781
|
}
|
|
2321
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3782
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModalComponent, decorators: [{
|
|
2322
3783
|
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:
|
|
3784
|
+
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"] }]
|
|
3785
|
+
}], ctorParameters: () => [{ type: ProcessLinkStateService }, { type: ProcessLinkStepService }, { type: ProcessLinkButtonService }, { type: PluginStateService }, { type: ProcessLinkStateService }, { type: i1.ConfigService }] });
|
|
2325
3786
|
|
|
2326
3787
|
/*
|
|
2327
3788
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -2376,13 +3837,13 @@ class ProcessLinkComponent {
|
|
|
2376
3837
|
.subscribe();
|
|
2377
3838
|
}
|
|
2378
3839
|
}
|
|
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.
|
|
3840
|
+
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 }); }
|
|
3841
|
+
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
3842
|
}
|
|
2382
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3843
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkComponent, decorators: [{
|
|
2383
3844
|
type: Component,
|
|
2384
3845
|
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$
|
|
3846
|
+
}], ctorParameters: () => [{ type: ProcessLinkService }, { type: ProcessLinkStateService }, { type: i2$1.ModalService }] });
|
|
2386
3847
|
|
|
2387
3848
|
/*
|
|
2388
3849
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -2408,11 +3869,11 @@ const routes = [
|
|
|
2408
3869
|
},
|
|
2409
3870
|
];
|
|
2410
3871
|
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.
|
|
3872
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
3873
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, imports: [i3$3.RouterModule], exports: [RouterModule] }); }
|
|
3874
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
|
|
2414
3875
|
}
|
|
2415
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
3876
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkRoutingModule, decorators: [{
|
|
2416
3877
|
type: NgModule,
|
|
2417
3878
|
args: [{
|
|
2418
3879
|
imports: [RouterModule.forChild(routes)],
|
|
@@ -2534,10 +3995,10 @@ class FormFlowConfigurationContainerComponent {
|
|
|
2534
3995
|
}
|
|
2535
3996
|
}));
|
|
2536
3997
|
}
|
|
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.
|
|
3998
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowConfigurationContainerComponent, deps: [{ token: FormFlowComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3999
|
+
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
4000
|
}
|
|
2540
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4001
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowConfigurationContainerComponent, decorators: [{
|
|
2541
4002
|
type: Component,
|
|
2542
4003
|
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
4004
|
}], ctorParameters: () => [{ type: FormFlowComponentService }], propDecorators: { _dynamicContainer: [{
|
|
@@ -2668,7 +4129,7 @@ class FormFlowComponent {
|
|
|
2668
4129
|
this.formFlowService.getBreadcrumbs(this.formFlowInstanceId$.getValue()),
|
|
2669
4130
|
this.translateService.stream('key'),
|
|
2670
4131
|
])
|
|
2671
|
-
.pipe(map(([breadcrumbs]) => breadcrumbs))
|
|
4132
|
+
.pipe(map$1(([breadcrumbs]) => breadcrumbs))
|
|
2672
4133
|
.subscribe(breadcrumbs => {
|
|
2673
4134
|
const classElement = document.getElementsByClassName('cds--progress-step--current');
|
|
2674
4135
|
this.currentStepIndex$.next(breadcrumbs.currentStepIndex);
|
|
@@ -2730,13 +4191,13 @@ class FormFlowComponent {
|
|
|
2730
4191
|
enable() {
|
|
2731
4192
|
this.disabled$.next(false);
|
|
2732
4193
|
}
|
|
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.
|
|
4194
|
+
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 }); }
|
|
4195
|
+
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
4196
|
}
|
|
2736
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4197
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FormFlowComponent, decorators: [{
|
|
2737
4198
|
type: Component,
|
|
2738
4199
|
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$
|
|
4200
|
+
}], ctorParameters: () => [{ type: FormFlowService }, { type: i2$1.ValtimoModalService }, { type: i3.TranslateService }, { type: i1.ConfigService }], propDecorators: { form: [{
|
|
2740
4201
|
type: ViewChild,
|
|
2741
4202
|
args: ['form']
|
|
2742
4203
|
}], formIoFormData: [{
|
|
@@ -2797,8 +4258,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2797
4258
|
* limitations under the License.
|
|
2798
4259
|
*/
|
|
2799
4260
|
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.
|
|
4261
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
4262
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, declarations: [ProcessLinkComponent,
|
|
2802
4263
|
FormLinkProcessDiagramComponent,
|
|
2803
4264
|
SelectPluginConfigurationComponent,
|
|
2804
4265
|
SelectPluginActionComponent,
|
|
@@ -2811,7 +4272,9 @@ class ProcessLinkModule {
|
|
|
2811
4272
|
FormFlowConfigurationContainerComponent,
|
|
2812
4273
|
FormDisplayConfigurationComponent,
|
|
2813
4274
|
SelectUIComponentComponent,
|
|
2814
|
-
ImportPluginConfigurationComponent
|
|
4275
|
+
ImportPluginConfigurationComponent,
|
|
4276
|
+
SelectBuildingBlockComponent,
|
|
4277
|
+
ConfigureBuildingBlockPluginsComponent], imports: [CommonModule,
|
|
2815
4278
|
ProcessLinkRoutingModule,
|
|
2816
4279
|
FormsModule,
|
|
2817
4280
|
ReactiveFormsModule,
|
|
@@ -2837,7 +4300,7 @@ class ProcessLinkModule {
|
|
|
2837
4300
|
StructuredListModule,
|
|
2838
4301
|
TilesModule,
|
|
2839
4302
|
RenderInPageHeaderDirective,
|
|
2840
|
-
SelectModule,
|
|
4303
|
+
SelectModule$1,
|
|
2841
4304
|
ToggleModule,
|
|
2842
4305
|
CarbonMultiInputModule,
|
|
2843
4306
|
LayerModule,
|
|
@@ -2847,13 +4310,18 @@ class ProcessLinkModule {
|
|
|
2847
4310
|
LayerModule,
|
|
2848
4311
|
ToggletipModule,
|
|
2849
4312
|
RemoveClassnamesDirective,
|
|
2850
|
-
ReactiveFormsModule
|
|
4313
|
+
ReactiveFormsModule,
|
|
4314
|
+
InputLabelModule,
|
|
4315
|
+
RadioModule,
|
|
4316
|
+
ValuePathSelectorComponent,
|
|
4317
|
+
ConfigureBuildingBlockMappingsComponent,
|
|
4318
|
+
NotificationModule], exports: [ProcessLinkComponent,
|
|
2851
4319
|
SelectPluginConfigurationComponent,
|
|
2852
4320
|
SelectPluginActionComponent,
|
|
2853
4321
|
PluginActionConfigurationComponent,
|
|
2854
4322
|
ProcessLinkModalComponent,
|
|
2855
4323
|
FormFlowComponent] }); }
|
|
2856
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
4324
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, providers: [UrlValidatorService, UrlResolverService], imports: [CommonModule,
|
|
2857
4325
|
ProcessLinkRoutingModule,
|
|
2858
4326
|
FormsModule,
|
|
2859
4327
|
ReactiveFormsModule,
|
|
@@ -2877,7 +4345,7 @@ class ProcessLinkModule {
|
|
|
2877
4345
|
FormIoModule,
|
|
2878
4346
|
StructuredListModule,
|
|
2879
4347
|
TilesModule,
|
|
2880
|
-
SelectModule,
|
|
4348
|
+
SelectModule$1,
|
|
2881
4349
|
ToggleModule,
|
|
2882
4350
|
CarbonMultiInputModule,
|
|
2883
4351
|
LayerModule,
|
|
@@ -2886,9 +4354,14 @@ class ProcessLinkModule {
|
|
|
2886
4354
|
TranslateModule,
|
|
2887
4355
|
LayerModule,
|
|
2888
4356
|
ToggletipModule,
|
|
2889
|
-
ReactiveFormsModule
|
|
4357
|
+
ReactiveFormsModule,
|
|
4358
|
+
InputLabelModule,
|
|
4359
|
+
RadioModule,
|
|
4360
|
+
ValuePathSelectorComponent,
|
|
4361
|
+
ConfigureBuildingBlockMappingsComponent,
|
|
4362
|
+
NotificationModule] }); }
|
|
2890
4363
|
}
|
|
2891
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
4364
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ProcessLinkModule, decorators: [{
|
|
2892
4365
|
type: NgModule,
|
|
2893
4366
|
args: [{
|
|
2894
4367
|
declarations: [
|
|
@@ -2906,6 +4379,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2906
4379
|
FormDisplayConfigurationComponent,
|
|
2907
4380
|
SelectUIComponentComponent,
|
|
2908
4381
|
ImportPluginConfigurationComponent,
|
|
4382
|
+
SelectBuildingBlockComponent,
|
|
4383
|
+
ConfigureBuildingBlockPluginsComponent,
|
|
2909
4384
|
],
|
|
2910
4385
|
imports: [
|
|
2911
4386
|
CommonModule,
|
|
@@ -2934,7 +4409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2934
4409
|
StructuredListModule,
|
|
2935
4410
|
TilesModule,
|
|
2936
4411
|
RenderInPageHeaderDirective,
|
|
2937
|
-
SelectModule,
|
|
4412
|
+
SelectModule$1,
|
|
2938
4413
|
ToggleModule,
|
|
2939
4414
|
CarbonMultiInputModule,
|
|
2940
4415
|
LayerModule,
|
|
@@ -2945,6 +4420,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2945
4420
|
ToggletipModule,
|
|
2946
4421
|
RemoveClassnamesDirective,
|
|
2947
4422
|
ReactiveFormsModule,
|
|
4423
|
+
InputLabelModule,
|
|
4424
|
+
RadioModule,
|
|
4425
|
+
ValuePathSelectorComponent,
|
|
4426
|
+
ConfigureBuildingBlockMappingsComponent,
|
|
4427
|
+
NotificationModule,
|
|
2948
4428
|
],
|
|
2949
4429
|
exports: [
|
|
2950
4430
|
ProcessLinkComponent,
|
|
@@ -2958,6 +4438,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2958
4438
|
}]
|
|
2959
4439
|
}] });
|
|
2960
4440
|
|
|
4441
|
+
/*
|
|
4442
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4443
|
+
*
|
|
4444
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4445
|
+
* you may not use this file except in compliance with the License.
|
|
4446
|
+
* You may obtain a copy of the License at
|
|
4447
|
+
*
|
|
4448
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4449
|
+
*
|
|
4450
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4451
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4452
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4453
|
+
* See the License for the specific language governing permissions and
|
|
4454
|
+
* limitations under the License.
|
|
4455
|
+
*/
|
|
4456
|
+
|
|
4457
|
+
/*
|
|
4458
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4459
|
+
*
|
|
4460
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4461
|
+
* you may not use this file except in compliance with the License.
|
|
4462
|
+
* You may obtain a copy of the License at
|
|
4463
|
+
*
|
|
4464
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4465
|
+
*
|
|
4466
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4467
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4468
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4469
|
+
* See the License for the specific language governing permissions and
|
|
4470
|
+
* limitations under the License.
|
|
4471
|
+
*/
|
|
4472
|
+
|
|
4473
|
+
/*
|
|
4474
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4475
|
+
*
|
|
4476
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4477
|
+
* you may not use this file except in compliance with the License.
|
|
4478
|
+
* You may obtain a copy of the License at
|
|
4479
|
+
*
|
|
4480
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4481
|
+
*
|
|
4482
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4483
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4484
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4485
|
+
* See the License for the specific language governing permissions and
|
|
4486
|
+
* limitations under the License.
|
|
4487
|
+
*/
|
|
4488
|
+
|
|
4489
|
+
/*
|
|
4490
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4491
|
+
*
|
|
4492
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4493
|
+
* you may not use this file except in compliance with the License.
|
|
4494
|
+
* You may obtain a copy of the License at
|
|
4495
|
+
*
|
|
4496
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4497
|
+
*
|
|
4498
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4499
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
4500
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4501
|
+
* See the License for the specific language governing permissions and
|
|
4502
|
+
* limitations under the License.
|
|
4503
|
+
*/
|
|
4504
|
+
|
|
4505
|
+
/*
|
|
4506
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4507
|
+
*
|
|
4508
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4509
|
+
* you may not use this file except in compliance with the License.
|
|
4510
|
+
* You may obtain a copy of the License at
|
|
4511
|
+
*
|
|
4512
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4513
|
+
*
|
|
4514
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4515
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4516
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4517
|
+
* See the License for the specific language governing permissions and
|
|
4518
|
+
* limitations under the License.
|
|
4519
|
+
*/
|
|
4520
|
+
|
|
4521
|
+
/*
|
|
4522
|
+
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
4523
|
+
*
|
|
4524
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4525
|
+
* you may not use this file except in compliance with the License.
|
|
4526
|
+
* You may obtain a copy of the License at
|
|
4527
|
+
*
|
|
4528
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4529
|
+
*
|
|
4530
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4531
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4532
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4533
|
+
* See the License for the specific language governing permissions and
|
|
4534
|
+
* limitations under the License.
|
|
4535
|
+
*/
|
|
4536
|
+
|
|
2961
4537
|
/*
|
|
2962
4538
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
2963
4539
|
*
|
|
@@ -2981,5 +4557,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
2981
4557
|
* Generated bundle index. Do not edit.
|
|
2982
4558
|
*/
|
|
2983
4559
|
|
|
2984
|
-
export { ChooseProcessLinkTypeComponent, FORM_CUSTOM_COMPONENT_TOKEN, FORM_FLOW_COMPONENT_TOKEN, FormFlowComponent, FormFlowComponentService, FormFlowService, PluginActionConfigurationComponent, PluginStateService, ProcessLinkButtonService, ProcessLinkComponent,
|
|
4560
|
+
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
4561
|
//# sourceMappingURL=valtimo-process-link.mjs.map
|