@valtimo/case-management 13.46.0 → 13.47.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-case-management.mjs +614 -130
- package/fesm2022/valtimo-case-management.mjs.map +1 -1
- package/lib/components/case-management-detail/case-management-detail.component.d.ts.map +1 -1
- package/lib/components/case-management-detail/tabs/case-management-actions/case-management-actions.component.d.ts +4 -0
- package/lib/components/case-management-detail/tabs/case-management-actions/case-management-actions.component.d.ts.map +1 -1
- package/lib/components/case-management-detail/tabs/case-management-general/components/case-management-missing-plugin-configurations/case-management-missing-plugin-configurations.component.d.ts +14 -3
- package/lib/components/case-management-detail/tabs/case-management-general/components/case-management-missing-plugin-configurations/case-management-missing-plugin-configurations.component.d.ts.map +1 -1
- package/lib/components/case-management-detail/tabs/case-management-tabs/case-management-add-tab-modal/case-management-add-tab-modal.component.d.ts.map +1 -1
- package/lib/components/case-management-detail/tabs/case-management-tabs/case-management-tabs.component.d.ts +8 -0
- package/lib/components/case-management-detail/tabs/case-management-tabs/case-management-tabs.component.d.ts.map +1 -1
- package/lib/components/case-management-detail/tabs/case-management-tabs/tab-form/tab-form.component.d.ts +18 -1
- package/lib/components/case-management-detail/tabs/case-management-tabs/tab-form/tab-form.component.d.ts.map +1 -1
- package/lib/components/case-management-detail/tabs/case-management-tabs/widget-tab/case-management-widget-tab/case-management-widget-tab.component.d.ts +10 -3
- package/lib/components/case-management-detail/tabs/case-management-tabs/widget-tab/case-management-widget-tab/case-management-widget-tab.component.d.ts.map +1 -1
- package/lib/components/case-management-upload/case-management-upload.component.d.ts +23 -5
- package/lib/components/case-management-upload/case-management-upload.component.d.ts.map +1 -1
- package/lib/models/case-deployment.model.d.ts +13 -0
- package/lib/models/case-deployment.model.d.ts.map +1 -1
- package/lib/models/startable-item.model.d.ts +8 -0
- package/lib/models/startable-item.model.d.ts.map +1 -1
- package/lib/models/tab.model.d.ts +11 -0
- package/lib/models/tab.model.d.ts.map +1 -1
- package/lib/services/startable-item-management.service.d.ts +6 -0
- package/lib/services/startable-item-management.service.d.ts.map +1 -1
- package/lib/services/tab.service.d.ts +29 -3
- package/lib/services/tab.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ import { FormManagementComponent, FormManagementEditComponent } from '@valtimo/f
|
|
|
14
14
|
import * as i2$1 from '@valtimo/shared';
|
|
15
15
|
import { BaseApiService, InterceptorSkip, getCaseManagementRouteParams, InterceptorSkipHeader, CASE_MANAGEMENT_TAB_TOKEN, TagColor, getDisplayTypeParametersView, CASE_CONFIGURATION_EXTENSIONS_TOKEN, ROLE_ADMIN, ConfigModule } from '@valtimo/shared';
|
|
16
16
|
import * as i2 from 'carbon-components-angular';
|
|
17
|
-
import { NotificationModule, Tab, ButtonModule, IconModule, LayerModule, ModalModule, InputModule, TabsModule, ComboBoxModule, ProgressIndicatorModule, LoadingModule, TagModule, DropdownModule, CheckboxModule, LinkModule, DialogModule, FileUploaderModule, ProgressBarModule,
|
|
17
|
+
import { NotificationModule, Tab, ButtonModule, IconModule, LayerModule, ModalModule, InputModule, TabsModule, ComboBoxModule, ProgressIndicatorModule, LoadingModule, TagModule, ToggleModule, DropdownModule, CheckboxModule, LinkModule, DialogModule, FileUploaderModule, ProgressBarModule, TooltipModule as TooltipModule$1, NumberModule } from 'carbon-components-angular';
|
|
18
18
|
import * as i2$2 from '@angular/router';
|
|
19
19
|
import { NavigationEnd, RouterModule } from '@angular/router';
|
|
20
20
|
import { DecisionListComponent, DecisionModelerComponent } from '@valtimo/decision';
|
|
@@ -22,17 +22,19 @@ import { FormFlowOverviewComponent, FormFlowEditorComponent } from '@valtimo/for
|
|
|
22
22
|
import { ProcessManagementComponent, ProcessManagementBuilderComponent } from '@valtimo/process-management';
|
|
23
23
|
import { AuthGuardService } from '@valtimo/security';
|
|
24
24
|
import { TaskManagementDetailComponent } from '@valtimo/task-management';
|
|
25
|
-
import { BehaviorSubject, combineLatest, map, filter, switchMap, catchError, of, Subscription, distinctUntilChanged, Subject, startWith, tap, take as take$1, delay,
|
|
25
|
+
import { BehaviorSubject, combineLatest, map, filter, switchMap, catchError, of, Subscription, distinctUntilChanged, Subject, startWith, tap, shareReplay, take as take$1, delay, forkJoin, finalize, EMPTY, debounceTime } from 'rxjs';
|
|
26
26
|
import * as i1$1 from '@valtimo/layout';
|
|
27
|
-
import { ManagementWidgetDetailsComponent, WidgetType, WidgetWizardStep, WIDGET_MANAGEMENT_SERVICE, WidgetManagementComponent } from '@valtimo/layout';
|
|
27
|
+
import { ManagementWidgetDetailsComponent, WidgetType, WidgetWizardStep, WIDGET_MANAGEMENT_SERVICE, WidgetManagementComponent, EXTERNAL_PLUGIN_WIDGET_CONFIG_TOKEN } from '@valtimo/layout';
|
|
28
28
|
import * as i1 from '@angular/common/http';
|
|
29
29
|
import { HttpHeaders, HttpParams } from '@angular/common/http';
|
|
30
30
|
import { isEqual } from 'lodash';
|
|
31
|
-
import { Code16, Development16, TableBuilt16, WatsonHealthPageScroll16, ArrowDown16, ArrowUp16, Edit16, Information16, Return16, TrashCan16, Save16, Version16, Deploy16, WarningFilled16, ArrowRight16, FlowModeler20, BlockStorageAlt20, Search20, TrashCan20, Upload16 } from '@carbon/icons';
|
|
31
|
+
import { Code16, Development16, Plug16, TableBuilt16, WatsonHealthPageScroll16, ArrowDown16, ArrowUp16, Edit16, Information16, Return16, TrashCan16, Save16, Version16, Deploy16, WarningFilled16, ArrowRight16, FlowModeler20, BlockStorageAlt20, Search20, TrashCan20, Upload16 } from '@carbon/icons';
|
|
32
32
|
import { DefaultTabs, CASE_TAB_TOKEN, ApiTabType } from '@valtimo/case';
|
|
33
33
|
import * as i1$2 from '@valtimo/document';
|
|
34
34
|
import { InternalCaseStatusUtils, CaseTagsUtils, DocumentDefinitionCreateRequest } from '@valtimo/document';
|
|
35
35
|
import { take, tap as tap$1, switchMap as switchMap$1, catchError as catchError$1, map as map$1, filter as filter$1, withLatestFrom } from 'rxjs/operators';
|
|
36
|
+
import * as i3$1 from '@valtimo/plugin';
|
|
37
|
+
import { getExternalPluginDisplayName } from '@valtimo/plugin';
|
|
36
38
|
import * as i1$3 from '@valtimo/form';
|
|
37
39
|
import * as i2$3 from 'ngx-logger';
|
|
38
40
|
import { v4 } from 'uuid';
|
|
@@ -40,12 +42,11 @@ import * as semver from 'semver';
|
|
|
40
42
|
import { valid, lt } from 'semver';
|
|
41
43
|
import * as i7$1 from '@valtimo/sse';
|
|
42
44
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
43
|
-
import * as i4 from '@valtimo/plugin';
|
|
44
45
|
import moment from 'moment/moment';
|
|
45
|
-
import * as i4
|
|
46
|
+
import * as i4 from '@valtimo/process-link';
|
|
46
47
|
import { ensureDocPrefix, ProcessLinkModule, ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService } from '@valtimo/process-link';
|
|
47
48
|
import moment$1 from 'moment';
|
|
48
|
-
import * as i4$
|
|
49
|
+
import * as i4$1 from '@valtimo/process';
|
|
49
50
|
|
|
50
51
|
/*
|
|
51
52
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -690,11 +691,12 @@ class TabService {
|
|
|
690
691
|
set configuredContentKeys(value) {
|
|
691
692
|
this._configuredContentKeys$.next(value);
|
|
692
693
|
}
|
|
693
|
-
constructor(caseTabConfig, caseManagementTabConfig, formService, translateService) {
|
|
694
|
+
constructor(caseTabConfig, caseManagementTabConfig, formService, translateService, externalPluginService) {
|
|
694
695
|
this.caseTabConfig = caseTabConfig;
|
|
695
696
|
this.caseManagementTabConfig = caseManagementTabConfig;
|
|
696
697
|
this.formService = formService;
|
|
697
698
|
this.translateService = translateService;
|
|
699
|
+
this.externalPluginService = externalPluginService;
|
|
698
700
|
this._injectedCaseManagementTabs$ = new BehaviorSubject([]);
|
|
699
701
|
this._currentTab$ = new BehaviorSubject(TabEnum.DOCUMENT);
|
|
700
702
|
this._configuredContentKeys$ = new BehaviorSubject([]);
|
|
@@ -718,15 +720,118 @@ class TabService {
|
|
|
718
720
|
this.getFormDefinitions(route),
|
|
719
721
|
this.defaultTabs$,
|
|
720
722
|
this.customComponentKeys$,
|
|
721
|
-
|
|
723
|
+
this.getExternalPluginTabItems(),
|
|
724
|
+
]).pipe(map(([tabKeys, formDefinitions, defaultTabs, customComponentKeys, externalPluginItems]) => ({
|
|
722
725
|
standard: defaultTabs.every((tabItem) => tabKeys.includes(tabItem.contentKey)),
|
|
723
726
|
custom: !customComponentKeys.length ||
|
|
724
727
|
customComponentKeys.every((tabItem) => tabKeys.includes(tabItem.contentKey)),
|
|
725
728
|
formIO: !formDefinitions.length ||
|
|
726
729
|
formDefinitions.every((tabItem) => tabKeys.includes(tabItem.contentKey)),
|
|
727
730
|
widgets: false,
|
|
731
|
+
externalPlugin: !externalPluginItems.length ||
|
|
732
|
+
externalPluginItems.every((tabItem) => tabKeys.includes(tabItem.contentKey)),
|
|
728
733
|
})));
|
|
729
734
|
}
|
|
735
|
+
/**
|
|
736
|
+
* Lists the selectable content keys for `EXTERNAL_PLUGIN` tabs: one entry per `case-tab` bundle of
|
|
737
|
+
* each activated (`AVAILABLE`) external-plugin configuration. The `contentKey` encodes
|
|
738
|
+
* `"<configurationId>[:<bundleKey>]"` — consumed server-side (Phase 2.7) to create the side row.
|
|
739
|
+
*
|
|
740
|
+
* Degrades to an empty list when the external-plugin endpoints are unavailable (module absent).
|
|
741
|
+
*/
|
|
742
|
+
getExternalPluginTabItems() {
|
|
743
|
+
return combineLatest([
|
|
744
|
+
this.externalPluginService.getDefinitions(),
|
|
745
|
+
this.externalPluginService.getConfigurations(),
|
|
746
|
+
]).pipe(map(([definitions, configurations]) => {
|
|
747
|
+
const lang = this.translateService.currentLang;
|
|
748
|
+
const definitionById = new Map(definitions.map(definition => [definition.id, definition]));
|
|
749
|
+
const items = [];
|
|
750
|
+
configurations.forEach(configuration => {
|
|
751
|
+
const definition = definitionById.get(configuration.definitionId);
|
|
752
|
+
if (!definition || definition.status !== 'AVAILABLE')
|
|
753
|
+
return;
|
|
754
|
+
const caseTabBundles = (definition.manifest?.frontendBundles ?? []).filter(bundle => bundle.type === 'case-tab');
|
|
755
|
+
if (!caseTabBundles.length)
|
|
756
|
+
return;
|
|
757
|
+
const pluginName = getExternalPluginDisplayName(definition, lang);
|
|
758
|
+
caseTabBundles.forEach(bundle => {
|
|
759
|
+
const contentKey = bundle.key ? `${configuration.id}:${bundle.key}` : configuration.id;
|
|
760
|
+
const bundleSuffix = caseTabBundles.length > 1 ? ` — ${bundle.title ?? bundle.key}` : '';
|
|
761
|
+
items.push({
|
|
762
|
+
contentKey,
|
|
763
|
+
content: `${configuration.title} (${pluginName})${bundleSuffix}`,
|
|
764
|
+
selected: false,
|
|
765
|
+
});
|
|
766
|
+
});
|
|
767
|
+
});
|
|
768
|
+
return items;
|
|
769
|
+
}), catchError(() => of([])));
|
|
770
|
+
}
|
|
771
|
+
/**
|
|
772
|
+
* Activated external-plugin configurations that expose ≥1 `case-tab` bundle, grouped so the tab
|
|
773
|
+
* editor can offer two dropdowns: pick the configuration, then the tab (bundle). The `contentKey`
|
|
774
|
+
* the editor writes is `"<configId>[:<bundleKey>]"` (Phase 2.7). Degrades to an empty list when the
|
|
775
|
+
* external-plugin endpoints are unavailable.
|
|
776
|
+
*/
|
|
777
|
+
getExternalPluginConfigs() {
|
|
778
|
+
return combineLatest([
|
|
779
|
+
this.externalPluginService.getDefinitions(),
|
|
780
|
+
this.externalPluginService.getConfigurations(),
|
|
781
|
+
]).pipe(map(([definitions, configurations]) => {
|
|
782
|
+
const lang = this.translateService.currentLang;
|
|
783
|
+
const definitionById = new Map(definitions.map(definition => [definition.id, definition]));
|
|
784
|
+
return configurations.reduce((options, configuration) => {
|
|
785
|
+
const definition = definitionById.get(configuration.definitionId);
|
|
786
|
+
if (!definition || definition.status !== 'AVAILABLE')
|
|
787
|
+
return options;
|
|
788
|
+
const caseTabBundles = (definition.manifest?.frontendBundles ?? []).filter(bundle => bundle.type === 'case-tab');
|
|
789
|
+
if (!caseTabBundles.length)
|
|
790
|
+
return options;
|
|
791
|
+
options.push({
|
|
792
|
+
configId: configuration.id,
|
|
793
|
+
label: `${configuration.title} (${getExternalPluginDisplayName(definition, lang)})`,
|
|
794
|
+
bundles: caseTabBundles.map(bundle => ({
|
|
795
|
+
key: bundle.key ?? null,
|
|
796
|
+
title: bundle.title ?? bundle.key ?? 'case-tab',
|
|
797
|
+
})),
|
|
798
|
+
});
|
|
799
|
+
return options;
|
|
800
|
+
}, []);
|
|
801
|
+
}), catchError(() => of([])));
|
|
802
|
+
}
|
|
803
|
+
/**
|
|
804
|
+
* Activated external-plugin configurations that expose ≥1 `case-widget` bundle, grouped so the
|
|
805
|
+
* widget config editor can offer two combo boxes (configuration, then widget bundle). The widget
|
|
806
|
+
* `case-widget` counterpart of {@link getExternalPluginConfigs}. Degrades to an empty list when the
|
|
807
|
+
* external-plugin endpoints are unavailable (module absent).
|
|
808
|
+
*/
|
|
809
|
+
getExternalPluginWidgetConfigs() {
|
|
810
|
+
return combineLatest([
|
|
811
|
+
this.externalPluginService.getDefinitions(),
|
|
812
|
+
this.externalPluginService.getConfigurations(),
|
|
813
|
+
]).pipe(map(([definitions, configurations]) => {
|
|
814
|
+
const lang = this.translateService.currentLang;
|
|
815
|
+
const definitionById = new Map(definitions.map(definition => [definition.id, definition]));
|
|
816
|
+
return configurations.reduce((options, configuration) => {
|
|
817
|
+
const definition = definitionById.get(configuration.definitionId);
|
|
818
|
+
if (!definition || definition.status !== 'AVAILABLE')
|
|
819
|
+
return options;
|
|
820
|
+
const caseWidgetBundles = (definition.manifest?.frontendBundles ?? []).filter(bundle => bundle.type === 'case-widget');
|
|
821
|
+
if (!caseWidgetBundles.length)
|
|
822
|
+
return options;
|
|
823
|
+
options.push({
|
|
824
|
+
configId: configuration.id,
|
|
825
|
+
label: `${configuration.title} (${getExternalPluginDisplayName(definition, lang)})`,
|
|
826
|
+
bundles: caseWidgetBundles.map(bundle => ({
|
|
827
|
+
key: bundle.key ?? null,
|
|
828
|
+
title: bundle.title ?? bundle.key ?? 'case-widget',
|
|
829
|
+
})),
|
|
830
|
+
});
|
|
831
|
+
return options;
|
|
832
|
+
}, []);
|
|
833
|
+
}), catchError(() => of([])));
|
|
834
|
+
}
|
|
730
835
|
getFormDefinitions(route) {
|
|
731
836
|
return getCaseManagementRouteParams(route).pipe(switchMap((params) => {
|
|
732
837
|
return this.formService
|
|
@@ -748,7 +853,7 @@ class TabService {
|
|
|
748
853
|
: [caseManagementTabConfig];
|
|
749
854
|
this._injectedCaseManagementTabs$.next(tabs.map(tab => ({ ...tab, enabled$: tab.enabled$ ?? of(true) })));
|
|
750
855
|
}
|
|
751
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TabService, deps: [{ token: CASE_TAB_TOKEN, optional: true }, { token: CASE_MANAGEMENT_TAB_TOKEN, optional: true }, { token: i1$3.FormService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
856
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TabService, deps: [{ token: CASE_TAB_TOKEN, optional: true }, { token: CASE_MANAGEMENT_TAB_TOKEN, optional: true }, { token: i1$3.FormService }, { token: i3.TranslateService }, { token: i3$1.ExternalPluginService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
752
857
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TabService, providedIn: 'root' }); }
|
|
753
858
|
}
|
|
754
859
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TabService, decorators: [{
|
|
@@ -766,7 +871,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
766
871
|
}, {
|
|
767
872
|
type: Inject,
|
|
768
873
|
args: [CASE_MANAGEMENT_TAB_TOKEN]
|
|
769
|
-
}] }, { type: i1$3.FormService }, { type: i3.TranslateService }] });
|
|
874
|
+
}] }, { type: i1$3.FormService }, { type: i3.TranslateService }, { type: i3$1.ExternalPluginService }] });
|
|
770
875
|
|
|
771
876
|
class CaseWidgetManagementApiService {
|
|
772
877
|
constructor(http, configService) {
|
|
@@ -961,6 +1066,17 @@ class StartableItemManagementService {
|
|
|
961
1066
|
getItemProperties(itemKey, versionTag, type) {
|
|
962
1067
|
return this.startableItemApiService.getItemProperties(this.getParams(), itemKey, versionTag, type);
|
|
963
1068
|
}
|
|
1069
|
+
/**
|
|
1070
|
+
* Toggles whether a building block item is shown in the case start menu.
|
|
1071
|
+
* The update endpoint replaces all link properties, so the current
|
|
1072
|
+
* properties are fetched first and sent back with the flag flipped.
|
|
1073
|
+
*/
|
|
1074
|
+
toggleStartableByUser(item, startableByUser) {
|
|
1075
|
+
return this.getItemProperties(item.key, item.versionTag, item.type).pipe(take(1), switchMap$1(properties => this.updateItem(item.key, item.versionTag, {
|
|
1076
|
+
type: item.type,
|
|
1077
|
+
properties: { ...properties, startableByUser },
|
|
1078
|
+
})));
|
|
1079
|
+
}
|
|
964
1080
|
deleteItem(item) {
|
|
965
1081
|
return this.startableItemApiService.deleteItem(this.getParams(), item.key, item.versionTag);
|
|
966
1082
|
}
|
|
@@ -1039,7 +1155,8 @@ class TabFormComponent {
|
|
|
1039
1155
|
this.tabService.getFormDefinitions(this.route),
|
|
1040
1156
|
this.tabService.defaultTabs$,
|
|
1041
1157
|
this.tabService.customComponentKeys$,
|
|
1042
|
-
|
|
1158
|
+
this.tabService.getExternalPluginTabItems(),
|
|
1159
|
+
]).pipe(map(([tabKeys, formDefinitions, defaultTabs, customComponentKeys, externalPluginItems]) => {
|
|
1043
1160
|
switch (this.tabType) {
|
|
1044
1161
|
case ApiTabType.STANDARD:
|
|
1045
1162
|
return this.getListItems(defaultTabs, tabKeys);
|
|
@@ -1047,10 +1164,43 @@ class TabFormComponent {
|
|
|
1047
1164
|
return this.getListItems(customComponentKeys, tabKeys);
|
|
1048
1165
|
case ApiTabType.FORMIO:
|
|
1049
1166
|
return this.getListItems(formDefinitions, tabKeys);
|
|
1167
|
+
case ApiTabType.EXTERNAL_PLUGIN:
|
|
1168
|
+
return this.getListItems(externalPluginItems, tabKeys);
|
|
1050
1169
|
case ApiTabType.WIDGETS:
|
|
1051
1170
|
return [];
|
|
1171
|
+
default:
|
|
1172
|
+
return [];
|
|
1052
1173
|
}
|
|
1053
1174
|
}), startWith([]));
|
|
1175
|
+
// External-plugin tabs are configured with two dropdowns: configuration, then tab (bundle).
|
|
1176
|
+
this.TabType = ApiTabType;
|
|
1177
|
+
this._externalPluginConfigs$ = this.tabService
|
|
1178
|
+
.getExternalPluginConfigs()
|
|
1179
|
+
.pipe(shareReplay({ bufferSize: 1, refCount: true }));
|
|
1180
|
+
this._selectedConfigId$ = new BehaviorSubject(null);
|
|
1181
|
+
this._selectedBundleKey$ = new BehaviorSubject(null);
|
|
1182
|
+
this._configs = [];
|
|
1183
|
+
this.selectedConfigId$ = this._selectedConfigId$.asObservable();
|
|
1184
|
+
this.configItems$ = combineLatest([
|
|
1185
|
+
this._externalPluginConfigs$,
|
|
1186
|
+
this._selectedConfigId$,
|
|
1187
|
+
]).pipe(map(([configs, selectedConfigId]) => configs.map(config => ({
|
|
1188
|
+
content: config.label,
|
|
1189
|
+
configId: config.configId,
|
|
1190
|
+
selected: config.configId === selectedConfigId,
|
|
1191
|
+
}))));
|
|
1192
|
+
this.bundleItems$ = combineLatest([
|
|
1193
|
+
this._externalPluginConfigs$,
|
|
1194
|
+
this._selectedConfigId$,
|
|
1195
|
+
this._selectedBundleKey$,
|
|
1196
|
+
]).pipe(map(([configs, selectedConfigId, selectedBundleKey]) => {
|
|
1197
|
+
const config = configs.find(item => item.configId === selectedConfigId);
|
|
1198
|
+
return (config?.bundles ?? []).map(bundle => ({
|
|
1199
|
+
content: bundle.title,
|
|
1200
|
+
bundleKey: bundle.key,
|
|
1201
|
+
selected: bundle.key === selectedBundleKey,
|
|
1202
|
+
}));
|
|
1203
|
+
}));
|
|
1054
1204
|
this._subscriptions = new Subscription();
|
|
1055
1205
|
}
|
|
1056
1206
|
ngOnInit() {
|
|
@@ -1063,6 +1213,10 @@ class TabFormComponent {
|
|
|
1063
1213
|
else {
|
|
1064
1214
|
this.form.get('contentKey')?.enable();
|
|
1065
1215
|
}
|
|
1216
|
+
if (this.tabType === ApiTabType.EXTERNAL_PLUGIN) {
|
|
1217
|
+
this._subscriptions.add(this._externalPluginConfigs$.subscribe(configs => (this._configs = configs)));
|
|
1218
|
+
this.preselectExternalPlugin();
|
|
1219
|
+
}
|
|
1066
1220
|
}
|
|
1067
1221
|
ngOnDestroy() {
|
|
1068
1222
|
this._subscriptions.unsubscribe();
|
|
@@ -1087,6 +1241,43 @@ class TabFormComponent {
|
|
|
1087
1241
|
onSelected() {
|
|
1088
1242
|
this._searchActive = false;
|
|
1089
1243
|
}
|
|
1244
|
+
onConfigSelected(item) {
|
|
1245
|
+
const configId = item?.configId ?? null;
|
|
1246
|
+
this._selectedConfigId$.next(configId);
|
|
1247
|
+
this._selectedBundleKey$.next(null);
|
|
1248
|
+
const config = this._configs.find(candidate => candidate.configId === configId);
|
|
1249
|
+
// A configuration with a single bundle needs no second choice — resolve the contentKey now.
|
|
1250
|
+
if (config && config.bundles.length === 1) {
|
|
1251
|
+
const bundle = config.bundles[0];
|
|
1252
|
+
this._selectedBundleKey$.next(bundle.key);
|
|
1253
|
+
this.setExternalPluginContentKey(configId, bundle.key);
|
|
1254
|
+
}
|
|
1255
|
+
else {
|
|
1256
|
+
// Multiple bundles: clear the contentKey so the form stays invalid until a tab is picked.
|
|
1257
|
+
this.form.get('contentKey')?.setValue('');
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
onBundleSelected(item) {
|
|
1261
|
+
const bundleKey = item?.bundleKey ?? null;
|
|
1262
|
+
this._selectedBundleKey$.next(bundleKey);
|
|
1263
|
+
this.setExternalPluginContentKey(this._selectedConfigId$.value, bundleKey);
|
|
1264
|
+
}
|
|
1265
|
+
setExternalPluginContentKey(configId, bundleKey) {
|
|
1266
|
+
if (!configId)
|
|
1267
|
+
return;
|
|
1268
|
+
const contentKey = bundleKey ? `${configId}:${bundleKey}` : configId;
|
|
1269
|
+
this.form.get('contentKey')?.setValue(contentKey);
|
|
1270
|
+
}
|
|
1271
|
+
preselectExternalPlugin() {
|
|
1272
|
+
const contentKey = this.form.get('contentKey')?.value;
|
|
1273
|
+
if (!contentKey)
|
|
1274
|
+
return;
|
|
1275
|
+
const separatorIndex = contentKey.indexOf(':');
|
|
1276
|
+
const configId = separatorIndex >= 0 ? contentKey.substring(0, separatorIndex) : contentKey;
|
|
1277
|
+
const bundleKey = separatorIndex >= 0 ? contentKey.substring(separatorIndex + 1) : null;
|
|
1278
|
+
this._selectedConfigId$.next(configId);
|
|
1279
|
+
this._selectedBundleKey$.next(bundleKey);
|
|
1280
|
+
}
|
|
1090
1281
|
toggleCheckedChange(event) {
|
|
1091
1282
|
this.showTasks?.patchValue(!!event);
|
|
1092
1283
|
}
|
|
@@ -1112,11 +1303,11 @@ class TabFormComponent {
|
|
|
1112
1303
|
}));
|
|
1113
1304
|
}
|
|
1114
1305
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TabFormComponent, deps: [{ token: i2$1.ConfigService }, { token: TabService }, { token: i1$4.FormGroupDirective }, { token: i2$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1115
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: TabFormComponent, isStandalone: false, selector: "valtimo-tab-form", inputs: { tabType: "tabType" }, 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<form *ngIf=\"form\" [formGroup]=\"form\" class=\"valtimo-tab-form-modal\" [cdsLayer]=\"1\">\n <cds-label>\n {{ 'caseManagement.tabManagement.addModal.tabNameLabel' | translate }}\n\n <input cdsText formControlName=\"name\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label [invalid]=\"!!isKeyError()\" [invalidText]=\"getKeyErrorMessage() | translate\">\n {{ 'caseManagement.tabManagement.addModal.tabKeyLabel' | translate }}\n\n <input\n cdsText\n formControlName=\"key\"\n pattern=\"[a-zA-Z0-9\\-]+\"\n [invalid]=\"!!isKeyError()\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n\n <cds-combo-box\n *ngIf=\"tabType !== 'widgets'\"\n
|
|
1306
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: TabFormComponent, isStandalone: false, selector: "valtimo-tab-form", inputs: { tabType: "tabType" }, 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<form *ngIf=\"form\" [formGroup]=\"form\" class=\"valtimo-tab-form-modal\" [cdsLayer]=\"1\">\n <cds-label>\n {{ 'caseManagement.tabManagement.addModal.tabNameLabel' | translate }}\n\n <input cdsText formControlName=\"name\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label [invalid]=\"!!isKeyError()\" [invalidText]=\"getKeyErrorMessage() | translate\">\n {{ 'caseManagement.tabManagement.addModal.tabKeyLabel' | translate }}\n\n <input\n cdsText\n formControlName=\"key\"\n pattern=\"[a-zA-Z0-9\\-]+\"\n [invalid]=\"!!isKeyError()\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n\n <ng-container *ngIf=\"tabType === TabType.EXTERNAL_PLUGIN; else nonPluginContent\">\n <cds-combo-box\n [cdsLayer]=\"1\"\n [dropUp]=\"false\"\n [items]=\"configItems$ | async\"\n itemValueKey=\"configId\"\n [label]=\"'caseManagement.tabManagement.contentLabels.external_plugin_config' | translate\"\n (selected)=\"onConfigSelected($event)\"\n >\n <cds-dropdown-list [cdsLayer]=\"1\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n [cdsLayer]=\"1\"\n [disabled]=\"!(selectedConfigId$ | async)\"\n [dropUp]=\"false\"\n [items]=\"bundleItems$ | async\"\n itemValueKey=\"bundleKey\"\n [label]=\"'caseManagement.tabManagement.contentLabels.external_plugin_bundle' | translate\"\n (selected)=\"onBundleSelected($event)\"\n >\n <cds-dropdown-list [cdsLayer]=\"1\"></cds-dropdown-list>\n </cds-combo-box>\n </ng-container>\n\n <ng-template #nonPluginContent>\n <cds-combo-box\n *ngIf=\"tabType !== 'widgets'\"\n [cdsLayer]=\"1\"\n [dropUp]=\"false\"\n formControlName=\"contentKey\"\n [items]=\"listItems$ | async\"\n itemValueKey=\"contentKey\"\n [label]=\"'caseManagement.tabManagement.contentLabels.' + tabType | translate\"\n (search)=\"onSearch($event)\"\n (selected)=\"onSelected($event)\"\n >\n <cds-dropdown-list [cdsLayer]=\"1\"></cds-dropdown-list>\n </cds-combo-box>\n </ng-template>\n\n <cds-toggle\n [label]=\"'caseManagement.tabManagement.addModal.visibleTitle' | translate\"\n [onText]=\"'caseManagement.tabManagement.addModal.visible' | translate\"\n [offText]=\"'caseManagement.tabManagement.addModal.invisible' | translate\"\n [checked]=\"showTasks?.value\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n [disabled]=\"disableTaskListVisibleToggle()\"\n ></cds-toggle>\n</form>\n", styles: ["::ng-deep .valtimo-tab-form-modal{display:flex;flex-direction:column;gap:16px}::ng-deep .valtimo-tab-form-modal .cds--modal-container,::ng-deep .valtimo-tab-form-modal .cds--modal-content{overflow: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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2.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: i2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "ariaLabel", "skeleton"] }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1116
1307
|
}
|
|
1117
1308
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TabFormComponent, decorators: [{
|
|
1118
1309
|
type: Component,
|
|
1119
|
-
args: [{ standalone: false, selector: 'valtimo-tab-form', 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\n<form *ngIf=\"form\" [formGroup]=\"form\" class=\"valtimo-tab-form-modal\" [cdsLayer]=\"1\">\n <cds-label>\n {{ 'caseManagement.tabManagement.addModal.tabNameLabel' | translate }}\n\n <input cdsText formControlName=\"name\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label [invalid]=\"!!isKeyError()\" [invalidText]=\"getKeyErrorMessage() | translate\">\n {{ 'caseManagement.tabManagement.addModal.tabKeyLabel' | translate }}\n\n <input\n cdsText\n formControlName=\"key\"\n pattern=\"[a-zA-Z0-9\\-]+\"\n [invalid]=\"!!isKeyError()\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n\n <cds-combo-box\n *ngIf=\"tabType !== 'widgets'\"\n
|
|
1310
|
+
args: [{ standalone: false, selector: 'valtimo-tab-form', 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\n<form *ngIf=\"form\" [formGroup]=\"form\" class=\"valtimo-tab-form-modal\" [cdsLayer]=\"1\">\n <cds-label>\n {{ 'caseManagement.tabManagement.addModal.tabNameLabel' | translate }}\n\n <input cdsText formControlName=\"name\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label [invalid]=\"!!isKeyError()\" [invalidText]=\"getKeyErrorMessage() | translate\">\n {{ 'caseManagement.tabManagement.addModal.tabKeyLabel' | translate }}\n\n <input\n cdsText\n formControlName=\"key\"\n pattern=\"[a-zA-Z0-9\\-]+\"\n [invalid]=\"!!isKeyError()\"\n [attr.modal-primary-focus]=\"true\"\n />\n </cds-label>\n\n <ng-container *ngIf=\"tabType === TabType.EXTERNAL_PLUGIN; else nonPluginContent\">\n <cds-combo-box\n [cdsLayer]=\"1\"\n [dropUp]=\"false\"\n [items]=\"configItems$ | async\"\n itemValueKey=\"configId\"\n [label]=\"'caseManagement.tabManagement.contentLabels.external_plugin_config' | translate\"\n (selected)=\"onConfigSelected($event)\"\n >\n <cds-dropdown-list [cdsLayer]=\"1\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n [cdsLayer]=\"1\"\n [disabled]=\"!(selectedConfigId$ | async)\"\n [dropUp]=\"false\"\n [items]=\"bundleItems$ | async\"\n itemValueKey=\"bundleKey\"\n [label]=\"'caseManagement.tabManagement.contentLabels.external_plugin_bundle' | translate\"\n (selected)=\"onBundleSelected($event)\"\n >\n <cds-dropdown-list [cdsLayer]=\"1\"></cds-dropdown-list>\n </cds-combo-box>\n </ng-container>\n\n <ng-template #nonPluginContent>\n <cds-combo-box\n *ngIf=\"tabType !== 'widgets'\"\n [cdsLayer]=\"1\"\n [dropUp]=\"false\"\n formControlName=\"contentKey\"\n [items]=\"listItems$ | async\"\n itemValueKey=\"contentKey\"\n [label]=\"'caseManagement.tabManagement.contentLabels.' + tabType | translate\"\n (search)=\"onSearch($event)\"\n (selected)=\"onSelected($event)\"\n >\n <cds-dropdown-list [cdsLayer]=\"1\"></cds-dropdown-list>\n </cds-combo-box>\n </ng-template>\n\n <cds-toggle\n [label]=\"'caseManagement.tabManagement.addModal.visibleTitle' | translate\"\n [onText]=\"'caseManagement.tabManagement.addModal.visible' | translate\"\n [offText]=\"'caseManagement.tabManagement.addModal.invisible' | translate\"\n [checked]=\"showTasks?.value\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n [disabled]=\"disableTaskListVisibleToggle()\"\n ></cds-toggle>\n</form>\n", styles: ["::ng-deep .valtimo-tab-form-modal{display:flex;flex-direction:column;gap:16px}::ng-deep .valtimo-tab-form-modal .cds--modal-container,::ng-deep .valtimo-tab-form-modal .cds--modal-content{overflow: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"] }]
|
|
1120
1311
|
}], ctorParameters: () => [{ type: i2$1.ConfigService }, { type: TabService }, { type: i1$4.FormGroupDirective }, { type: i2$2.ActivatedRoute }], propDecorators: { tabType: [{
|
|
1121
1312
|
type: Input
|
|
1122
1313
|
}] } });
|
|
@@ -1177,6 +1368,13 @@ class CaseManagementAddTabModalComponent {
|
|
|
1177
1368
|
type: ApiTabType.WIDGETS,
|
|
1178
1369
|
disabled: disabled.widgets,
|
|
1179
1370
|
},
|
|
1371
|
+
{
|
|
1372
|
+
icon: 'plug',
|
|
1373
|
+
title: 'caseManagement.tabManagement.addModal.externalPlugin',
|
|
1374
|
+
type: ApiTabType.EXTERNAL_PLUGIN,
|
|
1375
|
+
disabled: disabled.externalPlugin,
|
|
1376
|
+
disabledTooltipTranslationKey: 'caseManagement.tabManagement.addModal.externalPluginDisabled',
|
|
1377
|
+
},
|
|
1180
1378
|
]));
|
|
1181
1379
|
this.form = this.fb.group({
|
|
1182
1380
|
name: this.fb.control(null),
|
|
@@ -1185,7 +1383,13 @@ class CaseManagementAddTabModalComponent {
|
|
|
1185
1383
|
showTasks: this.fb.control(false, Validators.required),
|
|
1186
1384
|
});
|
|
1187
1385
|
this.selectedTabType$ = new BehaviorSubject(null);
|
|
1188
|
-
this.iconService.registerAll([
|
|
1386
|
+
this.iconService.registerAll([
|
|
1387
|
+
Code16,
|
|
1388
|
+
Development16,
|
|
1389
|
+
Plug16,
|
|
1390
|
+
TableBuilt16,
|
|
1391
|
+
WatsonHealthPageScroll16,
|
|
1392
|
+
]);
|
|
1189
1393
|
}
|
|
1190
1394
|
addTab(type) {
|
|
1191
1395
|
let { contentKey, key, name, showTasks } = this.form.getRawValue();
|
|
@@ -1217,11 +1421,11 @@ class CaseManagementAddTabModalComponent {
|
|
|
1217
1421
|
: { uniqueKey: { value: control.value } };
|
|
1218
1422
|
}
|
|
1219
1423
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementAddTabModalComponent, deps: [{ token: i1$4.FormBuilder }, { token: i2.IconService }, { token: TabService }, { token: i2$1.ConfigService }, { token: i2$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1220
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementAddTabModalComponent, isStandalone: false, selector: "valtimo-case-management-add-tab-modal", inputs: { params: "params", open: "open" }, outputs: { closeModalEvent: "closeModalEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal valtimoCdsModal *ngIf=\"{selectedTabType: selectedTabType$ | async} as obs\" [open]=\"open\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\" [cdsLayer]=\"1\">\n <h3 cdsModalHeaderHeading>\n {{\n !obs.selectedTabType\n ? ('caseManagement.tabManagement.addModal.title'\n | translate: {documentDefinitionName: (params.caseDefinitionKey | titlecase)})\n : ('caseManagement.tabManagement.titles.' + obs.selectedTabType | translate)\n }}\n </h3>\n </cds-modal-header>\n\n <section [formGroup]=\"form\" cdsModalContent class=\"valtimo-add-tab-modal__content\" [cdsLayer]=\"1\">\n <valtimo-tab-form\n *ngIf=\"obs.selectedTabType; else tabTypeSelection\"\n [tabType]=\"obs.selectedTabType\"\n ></valtimo-tab-form>\n\n <ng-template #tabTypeSelection>\n <span> {{ 'caseManagement.tabManagement.addModal.description' | translate }} </span>\n\n <div *ngIf=\"tabTypes$ | async as tabTypes\" class=\"valtimo-add-tab-modal__types\">\n <cds-tooltip\n *ngFor=\"let tabType of tabTypes\"\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"tabType.disabledTooltipTranslationKey | translate\"\n [disabled]=\"!tabType.disabled\"\n align=\"bottom\"\n >\n <button\n cdsButton=\"secondary\"\n [disabled]=\"tabType.disabled\"\n (click)=\"onTabTypeSelect(tabType.type)\"\n >\n {{ tabType.title | translate }}\n\n <svg [cdsIcon]=\"tabType.icon\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </cds-tooltip>\n </div>\n </ng-template>\n </section>\n\n <cds-modal-footer class=\"valtimo-add-tab-modal__footer\" [cdsLayer]=\"1\">\n <button class=\"valtimo-add-tab-modal__cancel\" cdsButton=\"ghost\" (click)=\"onCloseModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <div class=\"valtimo-add-tab-modal__actions\" *ngIf=\"obs.selectedTabType\">\n <button cdsButton=\"secondary\" (click)=\"backClick()\">\n {{ 'interface.back' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"form.invalid\" (click)=\"addTab(obs.selectedTabType)\">\n {{ 'interface.create' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-add-tab-modal__footer .cds--modal-footer{justify-content:unset;display:grid;grid-template-columns:1fr 1fr 2fr;grid-template-areas:\"cancel . actions\"}.valtimo-add-tab-modal__cancel{grid-area:cancel;width:100%}.valtimo-add-tab-modal__actions{grid-area:actions;display:flex}.valtimo-add-tab-modal__types{display:grid;grid-template:1fr/repeat(3,1fr);gap:16px}.valtimo-add-tab-modal__types button{width:100%}.valtimo-add-tab-modal__content{display:flex;flex-direction:column;gap:24px}.cds--popover--open{z-index:999999!important}\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: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i2.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: TabFormComponent, selector: "valtimo-tab-form", inputs: ["tabType"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1424
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementAddTabModalComponent, isStandalone: false, selector: "valtimo-case-management-add-tab-modal", inputs: { params: "params", open: "open" }, outputs: { closeModalEvent: "closeModalEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal valtimoCdsModal *ngIf=\"{selectedTabType: selectedTabType$ | async} as obs\" [open]=\"open\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\" [cdsLayer]=\"1\">\n <h3 cdsModalHeaderHeading>\n {{\n !obs.selectedTabType\n ? ('caseManagement.tabManagement.addModal.title'\n | translate: {documentDefinitionName: (params.caseDefinitionKey | titlecase)})\n : ('caseManagement.tabManagement.titles.' + obs.selectedTabType | translate)\n }}\n </h3>\n </cds-modal-header>\n\n <section [formGroup]=\"form\" cdsModalContent class=\"valtimo-add-tab-modal__content\" [cdsLayer]=\"1\">\n <valtimo-tab-form\n *ngIf=\"obs.selectedTabType; else tabTypeSelection\"\n [tabType]=\"obs.selectedTabType\"\n ></valtimo-tab-form>\n\n <ng-template #tabTypeSelection>\n <span> {{ 'caseManagement.tabManagement.addModal.description' | translate }} </span>\n\n <div *ngIf=\"tabTypes$ | async as tabTypes\" class=\"valtimo-add-tab-modal__types\">\n <cds-tooltip\n *ngFor=\"let tabType of tabTypes\"\n [autoAlign]=\"true\"\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"tabType.disabledTooltipTranslationKey | translate\"\n [disabled]=\"!tabType.disabled\"\n align=\"bottom\"\n >\n <button\n cdsButton=\"secondary\"\n [disabled]=\"tabType.disabled\"\n (click)=\"onTabTypeSelect(tabType.type)\"\n >\n {{ tabType.title | translate }}\n\n <svg [cdsIcon]=\"tabType.icon\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </cds-tooltip>\n </div>\n </ng-template>\n </section>\n\n <cds-modal-footer class=\"valtimo-add-tab-modal__footer\" [cdsLayer]=\"1\">\n <button class=\"valtimo-add-tab-modal__cancel\" cdsButton=\"ghost\" (click)=\"onCloseModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <div class=\"valtimo-add-tab-modal__actions\" *ngIf=\"obs.selectedTabType\">\n <button cdsButton=\"secondary\" (click)=\"backClick()\">\n {{ 'interface.back' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"form.invalid\" (click)=\"addTab(obs.selectedTabType)\">\n {{ 'interface.create' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-add-tab-modal__footer .cds--modal-footer{justify-content:unset;display:grid;grid-template-columns:1fr 1fr 2fr;grid-template-areas:\"cancel . actions\"}.valtimo-add-tab-modal__cancel{grid-area:cancel;width:100%}.valtimo-add-tab-modal__actions{grid-area:actions;display:flex}.valtimo-add-tab-modal__types{display:grid;grid-template:1fr/repeat(3,1fr);gap:16px}.valtimo-add-tab-modal__types button{width:100%}.valtimo-add-tab-modal__content{display:flex;flex-direction:column;gap:24px}.cds--popover--open{z-index:999999!important}\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: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i2.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: TabFormComponent, selector: "valtimo-tab-form", inputs: ["tabType"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1221
1425
|
}
|
|
1222
1426
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementAddTabModalComponent, decorators: [{
|
|
1223
1427
|
type: Component,
|
|
1224
|
-
args: [{ standalone: false, selector: 'valtimo-case-management-add-tab-modal', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal valtimoCdsModal *ngIf=\"{selectedTabType: selectedTabType$ | async} as obs\" [open]=\"open\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\" [cdsLayer]=\"1\">\n <h3 cdsModalHeaderHeading>\n {{\n !obs.selectedTabType\n ? ('caseManagement.tabManagement.addModal.title'\n | translate: {documentDefinitionName: (params.caseDefinitionKey | titlecase)})\n : ('caseManagement.tabManagement.titles.' + obs.selectedTabType | translate)\n }}\n </h3>\n </cds-modal-header>\n\n <section [formGroup]=\"form\" cdsModalContent class=\"valtimo-add-tab-modal__content\" [cdsLayer]=\"1\">\n <valtimo-tab-form\n *ngIf=\"obs.selectedTabType; else tabTypeSelection\"\n [tabType]=\"obs.selectedTabType\"\n ></valtimo-tab-form>\n\n <ng-template #tabTypeSelection>\n <span> {{ 'caseManagement.tabManagement.addModal.description' | translate }} </span>\n\n <div *ngIf=\"tabTypes$ | async as tabTypes\" class=\"valtimo-add-tab-modal__types\">\n <cds-tooltip\n *ngFor=\"let tabType of tabTypes\"\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"tabType.disabledTooltipTranslationKey | translate\"\n [disabled]=\"!tabType.disabled\"\n align=\"bottom\"\n >\n <button\n cdsButton=\"secondary\"\n [disabled]=\"tabType.disabled\"\n (click)=\"onTabTypeSelect(tabType.type)\"\n >\n {{ tabType.title | translate }}\n\n <svg [cdsIcon]=\"tabType.icon\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </cds-tooltip>\n </div>\n </ng-template>\n </section>\n\n <cds-modal-footer class=\"valtimo-add-tab-modal__footer\" [cdsLayer]=\"1\">\n <button class=\"valtimo-add-tab-modal__cancel\" cdsButton=\"ghost\" (click)=\"onCloseModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <div class=\"valtimo-add-tab-modal__actions\" *ngIf=\"obs.selectedTabType\">\n <button cdsButton=\"secondary\" (click)=\"backClick()\">\n {{ 'interface.back' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"form.invalid\" (click)=\"addTab(obs.selectedTabType)\">\n {{ 'interface.create' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-add-tab-modal__footer .cds--modal-footer{justify-content:unset;display:grid;grid-template-columns:1fr 1fr 2fr;grid-template-areas:\"cancel . actions\"}.valtimo-add-tab-modal__cancel{grid-area:cancel;width:100%}.valtimo-add-tab-modal__actions{grid-area:actions;display:flex}.valtimo-add-tab-modal__types{display:grid;grid-template:1fr/repeat(3,1fr);gap:16px}.valtimo-add-tab-modal__types button{width:100%}.valtimo-add-tab-modal__content{display:flex;flex-direction:column;gap:24px}.cds--popover--open{z-index:999999!important}\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"] }]
|
|
1428
|
+
args: [{ standalone: false, selector: 'valtimo-case-management-add-tab-modal', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal valtimoCdsModal *ngIf=\"{selectedTabType: selectedTabType$ | async} as obs\" [open]=\"open\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\" [cdsLayer]=\"1\">\n <h3 cdsModalHeaderHeading>\n {{\n !obs.selectedTabType\n ? ('caseManagement.tabManagement.addModal.title'\n | translate: {documentDefinitionName: (params.caseDefinitionKey | titlecase)})\n : ('caseManagement.tabManagement.titles.' + obs.selectedTabType | translate)\n }}\n </h3>\n </cds-modal-header>\n\n <section [formGroup]=\"form\" cdsModalContent class=\"valtimo-add-tab-modal__content\" [cdsLayer]=\"1\">\n <valtimo-tab-form\n *ngIf=\"obs.selectedTabType; else tabTypeSelection\"\n [tabType]=\"obs.selectedTabType\"\n ></valtimo-tab-form>\n\n <ng-template #tabTypeSelection>\n <span> {{ 'caseManagement.tabManagement.addModal.description' | translate }} </span>\n\n <div *ngIf=\"tabTypes$ | async as tabTypes\" class=\"valtimo-add-tab-modal__types\">\n <cds-tooltip\n *ngFor=\"let tabType of tabTypes\"\n [autoAlign]=\"true\"\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"tabType.disabledTooltipTranslationKey | translate\"\n [disabled]=\"!tabType.disabled\"\n align=\"bottom\"\n >\n <button\n cdsButton=\"secondary\"\n [disabled]=\"tabType.disabled\"\n (click)=\"onTabTypeSelect(tabType.type)\"\n >\n {{ tabType.title | translate }}\n\n <svg [cdsIcon]=\"tabType.icon\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </cds-tooltip>\n </div>\n </ng-template>\n </section>\n\n <cds-modal-footer class=\"valtimo-add-tab-modal__footer\" [cdsLayer]=\"1\">\n <button class=\"valtimo-add-tab-modal__cancel\" cdsButton=\"ghost\" (click)=\"onCloseModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <div class=\"valtimo-add-tab-modal__actions\" *ngIf=\"obs.selectedTabType\">\n <button cdsButton=\"secondary\" (click)=\"backClick()\">\n {{ 'interface.back' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"form.invalid\" (click)=\"addTab(obs.selectedTabType)\">\n {{ 'interface.create' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-add-tab-modal__footer .cds--modal-footer{justify-content:unset;display:grid;grid-template-columns:1fr 1fr 2fr;grid-template-areas:\"cancel . actions\"}.valtimo-add-tab-modal__cancel{grid-area:cancel;width:100%}.valtimo-add-tab-modal__actions{grid-area:actions;display:flex}.valtimo-add-tab-modal__types{display:grid;grid-template:1fr/repeat(3,1fr);gap:16px}.valtimo-add-tab-modal__types button{width:100%}.valtimo-add-tab-modal__content{display:flex;flex-direction:column;gap:24px}.cds--popover--open{z-index:999999!important}\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"] }]
|
|
1225
1429
|
}], ctorParameters: () => [{ type: i1$4.FormBuilder }, { type: i2.IconService }, { type: TabService }, { type: i2$1.ConfigService }, { type: i2$2.ActivatedRoute }], propDecorators: { params: [{
|
|
1226
1430
|
type: Input
|
|
1227
1431
|
}], open: [{
|
|
@@ -1349,6 +1553,8 @@ class CaseManagementTabsComponent {
|
|
|
1349
1553
|
}));
|
|
1350
1554
|
this.tab$ = new BehaviorSubject(null);
|
|
1351
1555
|
this.dragAndDropDisabled = signal(false);
|
|
1556
|
+
// contentKey → human label for EXTERNAL_PLUGIN tabs (the raw contentKey is a config UUID).
|
|
1557
|
+
this._externalPluginContentLabels = {};
|
|
1352
1558
|
this.params$ = getCaseManagementRouteParams(this.route);
|
|
1353
1559
|
this.hasEditPermissions$ = this.params$.pipe(switchMap(params => this.editPermissionsService.hasEditPermissions(params?.caseDefinitionKey, params?.caseDefinitionVersionTag)));
|
|
1354
1560
|
}
|
|
@@ -1356,10 +1562,32 @@ class CaseManagementTabsComponent {
|
|
|
1356
1562
|
this.iconService.registerAll([ArrowDown16, ArrowUp16]);
|
|
1357
1563
|
this.cd.detectChanges();
|
|
1358
1564
|
this.setFields();
|
|
1565
|
+
this.loadExternalPluginContentLabels();
|
|
1359
1566
|
}
|
|
1360
1567
|
isTranslated(key) {
|
|
1361
1568
|
return this.translateService.instant(key) !== key;
|
|
1362
1569
|
}
|
|
1570
|
+
/**
|
|
1571
|
+
* Label shown in the content column. For an external-plugin tab the raw `contentKey` is a
|
|
1572
|
+
* configuration UUID, so it is resolved to "configTitle (pluginName) — bundleTitle"; other tab
|
|
1573
|
+
* types keep the `case.tabs.<contentKey>` translation (falling back to the raw key).
|
|
1574
|
+
*/
|
|
1575
|
+
getTabContentLabel(item) {
|
|
1576
|
+
if (item.type === ApiTabType.EXTERNAL_PLUGIN) {
|
|
1577
|
+
return this._externalPluginContentLabels[item.contentKey] ?? item.contentKey;
|
|
1578
|
+
}
|
|
1579
|
+
const key = `case.tabs.${item.contentKey}`;
|
|
1580
|
+
return this.isTranslated(key) ? this.translateService.instant(key) : item.contentKey;
|
|
1581
|
+
}
|
|
1582
|
+
loadExternalPluginContentLabels() {
|
|
1583
|
+
this.tabService.getExternalPluginTabItems().subscribe(items => {
|
|
1584
|
+
this._externalPluginContentLabels = items.reduce((labels, item) => {
|
|
1585
|
+
labels[item.contentKey] = item.content;
|
|
1586
|
+
return labels;
|
|
1587
|
+
}, {});
|
|
1588
|
+
this.cd.markForCheck();
|
|
1589
|
+
});
|
|
1590
|
+
}
|
|
1363
1591
|
openAddTabModal() {
|
|
1364
1592
|
this.openAddModal$.next(true);
|
|
1365
1593
|
}
|
|
@@ -1448,11 +1676,11 @@ class CaseManagementTabsComponent {
|
|
|
1448
1676
|
]);
|
|
1449
1677
|
}
|
|
1450
1678
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementTabsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i2.IconService }, { token: TabManagementService }, { token: TabService }, { token: i3.TranslateService }, { token: i2$2.Router }, { token: i2$2.ActivatedRoute }, { token: i2$1.EditPermissionsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1451
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementTabsComponent, isStandalone: false, selector: "valtimo-case-management-tabs", viewQueries: [{ propertyName: "tabContentColumnTemplate", first: true, predicate: ["tabContentColumn"], descendants: true }, { propertyName: "tabTypeColumnTemplate", first: true, predicate: ["tabTypeColumn"], descendants: true }, { propertyName: "moveButtonsTemplate", first: true, predicate: ["moveButtonsTemplate"], 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<ng-container\n *ngIf=\"{\n routeParams: caseManagementRouteParams$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n>\n <valtimo-carbon-list\n *ngIf=\"{fields: fields$ | async, loading: loading$ | async, tabs: tabs$ | async} as obs\"\n [actionItems]=\"actionItems\"\n [items]=\"obs.tabs\"\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [loading]=\"obs.loading\"\n (rowClicked)=\"onRowClicked($event)\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled() || !(hasEditPermissions$ | async)\"\n (itemsReordered)=\"onItemsReorderedEvent($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addTabButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addTabButton\"\n [description]=\"'case.tabs.noResultsDescription' | translate\"\n [title]=\"'case.tabs.noResults' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #tabTypeColumn let-data=\"data\">\n {{\n isTranslated('caseManagement.tabType.' + data.item.type)\n ? ('caseManagement.tabType.' + data.item.type | translate)\n : data.item.type\n }}\n </ng-template>\n\n <ng-template #tabContentColumn let-data=\"data\">\n {{
|
|
1679
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementTabsComponent, isStandalone: false, selector: "valtimo-case-management-tabs", viewQueries: [{ propertyName: "tabContentColumnTemplate", first: true, predicate: ["tabContentColumn"], descendants: true }, { propertyName: "tabTypeColumnTemplate", first: true, predicate: ["tabTypeColumn"], descendants: true }, { propertyName: "moveButtonsTemplate", first: true, predicate: ["moveButtonsTemplate"], 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<ng-container\n *ngIf=\"{\n routeParams: caseManagementRouteParams$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n>\n <valtimo-carbon-list\n *ngIf=\"{fields: fields$ | async, loading: loading$ | async, tabs: tabs$ | async} as obs\"\n [actionItems]=\"actionItems\"\n [items]=\"obs.tabs\"\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [loading]=\"obs.loading\"\n (rowClicked)=\"onRowClicked($event)\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled() || !(hasEditPermissions$ | async)\"\n (itemsReordered)=\"onItemsReorderedEvent($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addTabButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addTabButton\"\n [description]=\"'case.tabs.noResultsDescription' | translate\"\n [title]=\"'case.tabs.noResults' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #tabTypeColumn let-data=\"data\">\n {{\n isTranslated('caseManagement.tabType.' + data.item.type)\n ? ('caseManagement.tabType.' + data.item.type | translate)\n : data.item.type\n }}\n </ng-template>\n\n <ng-template #tabContentColumn let-data=\"data\">\n {{ getTabContentLabel(data.item) }}\n </ng-template>\n\n <ng-template #addTabButton>\n <button cdsButton=\"primary\" *ngIf=\"obs.hasEditPermissions\" (click)=\"openAddTabModal()\">\n {{ 'caseManagement.tabManagement.addModal.addTab' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </ng-template>\n\n <valtimo-case-management-add-tab-modal\n *ngIf=\"openAddModal$ | async\"\n [params]=\"obs.routeParams\"\n [open]=\"openAddModal$ | async\"\n (closeModalEvent)=\"onCloseAddModalEvent($event)\"\n ></valtimo-case-management-add-tab-modal>\n\n <valtimo-case-management-edit-tab-modal\n *ngIf=\"openEditModal$ | async\"\n [tab]=\"tab$ | async\"\n (closeModalEvent)=\"onCloseEditModalEvent($event)\"\n [open]=\"openEditModal$ | async\"\n ></valtimo-case-management-edit-tab-modal>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"caseManagement.tabManagement.deleteModal.description\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"caseManagement.tabManagement.deleteModal.title\"\n (confirmEvent)=\"onConfirmEvent($event)\"\n ></valtimo-confirmation-modal>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: CaseManagementAddTabModalComponent, selector: "valtimo-case-management-add-tab-modal", inputs: ["params", "open"], outputs: ["closeModalEvent"] }, { kind: "component", type: CaseManagementEditTabModalComponent, selector: "valtimo-case-management-edit-tab-modal", inputs: ["open", "tab"], outputs: ["closeModalEvent"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1452
1680
|
}
|
|
1453
1681
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementTabsComponent, decorators: [{
|
|
1454
1682
|
type: Component,
|
|
1455
|
-
args: [{ standalone: false, selector: 'valtimo-case-management-tabs', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, 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 routeParams: caseManagementRouteParams$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n>\n <valtimo-carbon-list\n *ngIf=\"{fields: fields$ | async, loading: loading$ | async, tabs: tabs$ | async} as obs\"\n [actionItems]=\"actionItems\"\n [items]=\"obs.tabs\"\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [loading]=\"obs.loading\"\n (rowClicked)=\"onRowClicked($event)\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled() || !(hasEditPermissions$ | async)\"\n (itemsReordered)=\"onItemsReorderedEvent($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addTabButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addTabButton\"\n [description]=\"'case.tabs.noResultsDescription' | translate\"\n [title]=\"'case.tabs.noResults' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #tabTypeColumn let-data=\"data\">\n {{\n isTranslated('caseManagement.tabType.' + data.item.type)\n ? ('caseManagement.tabType.' + data.item.type | translate)\n : data.item.type\n }}\n </ng-template>\n\n <ng-template #tabContentColumn let-data=\"data\">\n {{
|
|
1683
|
+
args: [{ standalone: false, selector: 'valtimo-case-management-tabs', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, 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 routeParams: caseManagementRouteParams$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n>\n <valtimo-carbon-list\n *ngIf=\"{fields: fields$ | async, loading: loading$ | async, tabs: tabs$ | async} as obs\"\n [actionItems]=\"actionItems\"\n [items]=\"obs.tabs\"\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [loading]=\"obs.loading\"\n (rowClicked)=\"onRowClicked($event)\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled() || !(hasEditPermissions$ | async)\"\n (itemsReordered)=\"onItemsReorderedEvent($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addTabButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addTabButton\"\n [description]=\"'case.tabs.noResultsDescription' | translate\"\n [title]=\"'case.tabs.noResults' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #tabTypeColumn let-data=\"data\">\n {{\n isTranslated('caseManagement.tabType.' + data.item.type)\n ? ('caseManagement.tabType.' + data.item.type | translate)\n : data.item.type\n }}\n </ng-template>\n\n <ng-template #tabContentColumn let-data=\"data\">\n {{ getTabContentLabel(data.item) }}\n </ng-template>\n\n <ng-template #addTabButton>\n <button cdsButton=\"primary\" *ngIf=\"obs.hasEditPermissions\" (click)=\"openAddTabModal()\">\n {{ 'caseManagement.tabManagement.addModal.addTab' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </ng-template>\n\n <valtimo-case-management-add-tab-modal\n *ngIf=\"openAddModal$ | async\"\n [params]=\"obs.routeParams\"\n [open]=\"openAddModal$ | async\"\n (closeModalEvent)=\"onCloseAddModalEvent($event)\"\n ></valtimo-case-management-add-tab-modal>\n\n <valtimo-case-management-edit-tab-modal\n *ngIf=\"openEditModal$ | async\"\n [tab]=\"tab$ | async\"\n (closeModalEvent)=\"onCloseEditModalEvent($event)\"\n [open]=\"openEditModal$ | async\"\n ></valtimo-case-management-edit-tab-modal>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"caseManagement.tabManagement.deleteModal.description\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"caseManagement.tabManagement.deleteModal.title\"\n (confirmEvent)=\"onConfirmEvent($event)\"\n ></valtimo-confirmation-modal>\n</ng-container>\n" }]
|
|
1456
1684
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i2.IconService }, { type: TabManagementService }, { type: TabService }, { type: i3.TranslateService }, { type: i2$2.Router }, { type: i2$2.ActivatedRoute }, { type: i2$1.EditPermissionsService }], propDecorators: { tabContentColumnTemplate: [{
|
|
1457
1685
|
type: ViewChild,
|
|
1458
1686
|
args: ['tabContentColumn']
|
|
@@ -2903,7 +3131,7 @@ class CaseManagementSearchFieldsComponent {
|
|
|
2903
3131
|
this.searchFieldClicked(searchField, false);
|
|
2904
3132
|
}
|
|
2905
3133
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementSearchFieldsComponent, deps: [{ token: i1$2.DocumentService }, { token: i2$2.ActivatedRoute }, { token: i3.TranslateService }, { token: i2.IconService }, { token: i2$1.EditPermissionsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2906
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseManagementSearchFieldsComponent, isStandalone: false, selector: "valtimo-case-management-search-fields", 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 caseDefinitionKey: caseDefinitionKey$ | async,\n disableInput: disableInput$ | async,\n downloadName: downloadName$ | async,\n downloadUrl: downloadUrl$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n jsonEditorModel: jsonEditorModel$ | async,\n searchFields: translatedSearchFields$ | async,\n showActionItems: showActionItems$ | async,\n valid: valid$ | async,\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"content; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"searchFieldsOverview.deleteSearchFieldConfirmation\"\n [outputOnConfirm]=\"selectedDeleteSearchField$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteSelectedSearchFieldConfirm($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"downloadButton; context: {obs: obs}\"></ng-container>\n\n <button\n cdsButton=\"primary\"\n data-test-id=\"case-management-search-add\"\n *ngIf=\"obs.hasEditPermissions\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n</ng-template>\n\n<ng-template #content let-obs=\"obs\">\n @if (!jsonEditorActive()) {\n <valtimo-carbon-list\n data-test-id=\"searchFieldsList\"\n [actionItems]=\"actionItems\"\n [showActionItems]=\"obs.hasEditPermissions\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"obs.disableInput\"\n (itemsReordered)=\"onItemsReordered(obs.caseDefinitionKey, $event)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'searchFieldsOverview.noSearchfieldsTitle' | translate\"\n [description]=\"'searchFieldsOverview.noSearchfieldsDescription' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n } @else {\n <valtimo-json-editor\n [model]=\"obs.jsonEditorModel\"\n [fitPage]=\"true\"\n [showEditButton]=\"obs.hasEditPermissions\"\n (saveEvent)=\"updateSearchFields(obs.caseDefinitionKey, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"downloadButton; context: {obs: obs}\"></ng-container>\n </valtimo-json-editor>\n }\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <cds-modal\n valtimoCdsModal\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [open]=\"modalShowing$ | async\"\n [showFooter]=\"true\"\n size=\"sm\"\n (close)=\"onModalClose()\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onModalClose()\">\n <h3 cdsModalHeaderHeading>\n {{\n (searchFieldActionTypeIsAdd ? 'searchFieldsOverview.addRow' : 'searchFieldsOverview.edit')\n | translate\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"\n (showFields$ | async) && {\n searchField: selectedSearchField$ | async,\n } as searchObs\n \"\n >\n <v-input\n name=\"title\"\n dataTestId=\"case-management-search-title\"\n [title]=\"'searchFieldsOverview.title' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.title\"\n [disabled]=\"obs.disableInput\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <valtimo-auto-key-input\n name=\"key\"\n dataTestId=\"case-management-search-key\"\n labelTranslationKey=\"searchFieldsOverview.key\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [mode]=\"searchFieldActionTypeIsAdd ? 'add' : 'edit'\"\n [sourceText]=\"(formData$ | async)?.title\"\n [usedKeys]=\"usedKeys$ | async\"\n >\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [disabled]=\"obs.disableInput\"\n ></v-tooltip-icon>\n </valtimo-auto-key-input>\n\n <valtimo-value-path-selector\n name=\"path\"\n [label]=\"'searchFieldsOverview.path' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [marginXl]=\"true\"\n [caseDefinitionKey]=\"caseDefinitionKey$ | async\"\n [caseDefinitionVersionTag]=\"caseDefinitionVersionTag$ | async\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [defaultValue]=\"searchObs.searchField?.path\"\n [disabled]=\"obs.disableInput\"\n ></valtimo-value-path-selector>\n\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dataTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"dataType\"\n [defaultSelectionId]=\"searchObs.searchField?.dataType\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"case-management-search-dataTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"matchTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"matchType\"\n [defaultSelectionId]=\"searchObs.searchField?.matchType\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"case-management-search-matchTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"fieldTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"fieldType\"\n [defaultSelectionId]=\"searchObs.searchField?.fieldType\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"case-management-search-fieldTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dropdownDataProviderNames\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"false\"\n name=\"dropdownDataProvider\"\n [defaultSelectionId]=\"searchObs.searchField?.dropdownDataProvider\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"case-management-search-dropdownDataProvider\"\n ></v-select>\n\n <valtimo-carbon-multi-input\n *ngIf=\"\n (showInputDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n name=\"dropdownValues\"\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n type=\"keyValue\"\n [disabled]=\"obs.disableInput\"\n [defaultValues]=\"initialDropdownValues\"\n [margin]=\"true\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n (valueChange)=\"dropdownDatalistChange($event)\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </valtimo-carbon-multi-input>\n\n <v-table\n *ngIf=\"\n (showReadonlyDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n [items]=\"initialDropdownValues\"\n [columns]=\"dropdownColumns$ | async\"\n [showEditButtons]=\"false\"\n [itemsTranslationKey]=\"'searchFieldsOverview'\"\n [showPagination]=\"false\"\n [mobileBreakpointPx]=\"200\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-table>\n </v-form>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n </cds-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <button\n data-test-id=\"case-management-search-close\"\n cdsButton=\"secondary\"\n (click)=\"onModalClose()\"\n [disabled]=\"obs.disableInput\"\n >\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n data-test-id=\"case-management-search-save\"\n cdsButton=\"primary\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n (click)=\"saveSearchField(obs.caseDefinitionKey)\"\n >\n {{ (searchFieldActionTypeIsAdd ? 'interface.create' : 'interface.save') | translate }}\n </button>\n</ng-template>\n\n<ng-template #viewToggle>\n <cds-tooltip [description]=\"'JSON editor'\">\n <button\n [cdsButton]=\"buttonTheme()\"\n data-test-id=\"case-management-search-fields-switch-view\"\n iconOnly=\"true\"\n (click)=\"switchView()\"\n >\n <svg cdsIcon=\"code\" size=\"16\"></svg>\n </button>\n </cds-tooltip>\n</ng-template>\n\n<ng-template #downloadButton let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n data-test-id=\"case-management-search-download\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields?.length <= 0 || obs.disableInput\n \"\n (click)=\"onDownloadClick()\"\n >\n <svg cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.case-management-search-fields__buttons{display:flex;gap:16px}.case-management-search-fields__buttons .center-link{display:flex;align-items:center}.case-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.case-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.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: "component", type: i7.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder", "dataTestId", "trim", "presetsTitle", "presetOptions"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i7.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }, { kind: "component", type: i7.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: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i7.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "component", type: i7.ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "caseDefinitionKey", "caseDefinitionVersionTag", "buildingBlockDefinitionKey", "buildingBlockDefinitionVersionTag", "prefixes", "excludePrefixes", "label", "tooltip", "required", "showCaseDefinitionSelector", "notation", "dropUp", "defaultValue", "type", "parentItem", "filterItems"], outputs: ["valueChangeEvent", "collectionSelected"] }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i7.JsonEditorComponent, selector: "valtimo-json-editor", inputs: ["disabled", "model", "editorOptions", "fitPage", "formatOnLoad", "heightPx", "heightStyle", "jsonSchema", "showEditButton", "widthPx"], outputs: ["changeEvent", "discardEvent", "keepEditingEvent", "saveEvent"] }, { kind: "component", type: i7.AutoKeyInputComponent, selector: "valtimo-auto-key-input", inputs: ["labelTranslationKey", "placeholderTranslationKey", "dataTestId", "name", "disabled", "defaultValue", "margin", "mode", "usedKeys", "sourceText"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3134
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseManagementSearchFieldsComponent, isStandalone: false, selector: "valtimo-case-management-search-fields", 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 caseDefinitionKey: caseDefinitionKey$ | async,\n disableInput: disableInput$ | async,\n downloadName: downloadName$ | async,\n downloadUrl: downloadUrl$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n jsonEditorModel: jsonEditorModel$ | async,\n searchFields: translatedSearchFields$ | async,\n showActionItems: showActionItems$ | async,\n valid: valid$ | async,\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"content; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"searchFieldsOverview.deleteSearchFieldConfirmation\"\n [outputOnConfirm]=\"selectedDeleteSearchField$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteSelectedSearchFieldConfirm($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"downloadButton; context: {obs: obs}\"></ng-container>\n\n <button\n cdsButton=\"primary\"\n data-test-id=\"case-management-search-add\"\n *ngIf=\"obs.hasEditPermissions\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n</ng-template>\n\n<ng-template #content let-obs=\"obs\">\n @if (!jsonEditorActive()) {\n <valtimo-carbon-list\n data-test-id=\"searchFieldsList\"\n [actionItems]=\"actionItems\"\n [showActionItems]=\"obs.hasEditPermissions\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"obs.disableInput\"\n (itemsReordered)=\"onItemsReordered(obs.caseDefinitionKey, $event)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'searchFieldsOverview.noSearchfieldsTitle' | translate\"\n [description]=\"'searchFieldsOverview.noSearchfieldsDescription' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n } @else {\n <valtimo-json-editor\n [model]=\"obs.jsonEditorModel\"\n [fitPage]=\"true\"\n [showEditButton]=\"obs.hasEditPermissions\"\n (saveEvent)=\"updateSearchFields(obs.caseDefinitionKey, $event)\"\n >\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"downloadButton; context: {obs: obs}\"></ng-container>\n </valtimo-json-editor>\n }\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <cds-modal\n valtimoCdsModal\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [open]=\"modalShowing$ | async\"\n [showFooter]=\"true\"\n size=\"sm\"\n (close)=\"onModalClose()\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onModalClose()\">\n <h3 cdsModalHeaderHeading>\n {{\n (searchFieldActionTypeIsAdd ? 'searchFieldsOverview.addRow' : 'searchFieldsOverview.edit')\n | translate\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"\n (showFields$ | async) && {\n searchField: selectedSearchField$ | async,\n } as searchObs\n \"\n >\n <v-input\n name=\"title\"\n dataTestId=\"case-management-search-title\"\n [title]=\"'searchFieldsOverview.title' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.title\"\n [disabled]=\"obs.disableInput\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <valtimo-auto-key-input\n name=\"key\"\n dataTestId=\"case-management-search-key\"\n labelTranslationKey=\"searchFieldsOverview.key\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [mode]=\"searchFieldActionTypeIsAdd ? 'add' : 'edit'\"\n [sourceText]=\"(formData$ | async)?.title\"\n [usedKeys]=\"usedKeys$ | async\"\n >\n <v-tooltip-icon\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [disabled]=\"obs.disableInput\"\n ></v-tooltip-icon>\n </valtimo-auto-key-input>\n\n <valtimo-value-path-selector\n name=\"path\"\n [label]=\"'searchFieldsOverview.path' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [marginXl]=\"true\"\n [caseDefinitionKey]=\"caseDefinitionKey$ | async\"\n [caseDefinitionVersionTag]=\"caseDefinitionVersionTag$ | async\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [defaultValue]=\"searchObs.searchField?.path\"\n [disabled]=\"obs.disableInput\"\n ></valtimo-value-path-selector>\n\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dataTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"dataType\"\n [defaultSelectionId]=\"searchObs.searchField?.dataType\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"case-management-search-dataTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"matchTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"matchType\"\n [defaultSelectionId]=\"searchObs.searchField?.matchType\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"case-management-search-matchTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"fieldTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"fieldType\"\n [defaultSelectionId]=\"searchObs.searchField?.fieldType\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"case-management-search-fieldTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dropdownDataProviderNames\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"false\"\n name=\"dropdownDataProvider\"\n [defaultSelectionId]=\"searchObs.searchField?.dropdownDataProvider\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"case-management-search-dropdownDataProvider\"\n ></v-select>\n\n <valtimo-carbon-multi-input\n *ngIf=\"\n (showInputDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n name=\"dropdownValues\"\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n type=\"keyValue\"\n [disabled]=\"obs.disableInput\"\n [defaultValues]=\"initialDropdownValues\"\n [margin]=\"true\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n (valueChange)=\"dropdownDatalistChange($event)\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </valtimo-carbon-multi-input>\n\n <v-table\n *ngIf=\"\n (showReadonlyDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n [items]=\"initialDropdownValues\"\n [columns]=\"dropdownColumns$ | async\"\n [showEditButtons]=\"false\"\n [itemsTranslationKey]=\"'searchFieldsOverview'\"\n [showPagination]=\"false\"\n [mobileBreakpointPx]=\"200\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-table>\n </v-form>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n </cds-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <button\n data-test-id=\"case-management-search-close\"\n cdsButton=\"secondary\"\n (click)=\"onModalClose()\"\n [disabled]=\"obs.disableInput\"\n >\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n data-test-id=\"case-management-search-save\"\n cdsButton=\"primary\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n (click)=\"saveSearchField(obs.caseDefinitionKey)\"\n >\n {{ (searchFieldActionTypeIsAdd ? 'interface.create' : 'interface.save') | translate }}\n </button>\n</ng-template>\n\n<ng-template #viewToggle>\n <cds-tooltip [description]=\"'JSON editor'\">\n <button\n [cdsButton]=\"buttonTheme()\"\n data-test-id=\"case-management-search-fields-switch-view\"\n iconOnly=\"true\"\n (click)=\"switchView()\"\n >\n <svg cdsIcon=\"code\" size=\"16\"></svg>\n </button>\n </cds-tooltip>\n</ng-template>\n\n<ng-template #downloadButton let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n data-test-id=\"case-management-search-download\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields?.length <= 0 || obs.disableInput\n \"\n (click)=\"onDownloadClick()\"\n >\n <svg cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.case-management-search-fields__buttons{display:flex;gap:16px}.case-management-search-fields__buttons .center-link{display:flex;align-items:center}.case-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.case-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.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: "component", type: i7.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder", "dataTestId", "trim", "presetsTitle", "presetOptions"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i7.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }, { kind: "component", type: i7.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteButtonType", "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: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i7.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "component", type: i7.ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "caseDefinitionKey", "caseDefinitionVersionTag", "buildingBlockDefinitionKey", "buildingBlockDefinitionVersionTag", "prefixes", "excludePrefixes", "label", "tooltip", "required", "showCaseDefinitionSelector", "notation", "dropUp", "defaultValue", "type", "parentItem", "filterItems"], outputs: ["valueChangeEvent", "collectionSelected"] }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i7.JsonEditorComponent, selector: "valtimo-json-editor", inputs: ["disabled", "model", "editorOptions", "fitPage", "formatOnLoad", "heightPx", "heightStyle", "jsonSchema", "showEditButton", "widthPx"], outputs: ["changeEvent", "discardEvent", "keepEditingEvent", "saveEvent"] }, { kind: "component", type: i7.AutoKeyInputComponent, selector: "valtimo-auto-key-input", inputs: ["labelTranslationKey", "placeholderTranslationKey", "dataTestId", "name", "disabled", "defaultValue", "margin", "mode", "usedKeys", "sourceText"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2907
3135
|
}
|
|
2908
3136
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementSearchFieldsComponent, decorators: [{
|
|
2909
3137
|
type: Component,
|
|
@@ -3358,7 +3586,7 @@ class CaseManagementListColumnsComponent {
|
|
|
3358
3586
|
}));
|
|
3359
3587
|
}
|
|
3360
3588
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementListColumnsComponent, deps: [{ token: i1$2.DocumentService }, { token: i2$2.ActivatedRoute }, { token: i3.TranslateService }, { token: i2.IconService }, { token: i2$1.EditPermissionsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3361
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseManagementListColumnsComponent, isStandalone: false, selector: "valtimo-case-management-list-columns", 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 caseListColumn: translatedCaseListColumns$ | async,\n disableInput: disableInput$ | async,\n downloadName: downloadName$ | async,\n downloadUrl: downloadUrl$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n jsonEditorModel: jsonEditorModel$ | async,\n loadingCaseListColumns: loadingCaseListColumns$ | async,\n params: params$ | async,\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"content; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n</ng-container>\n\n<ng-template #content let-obs=\"obs\">\n @if (!jsonEditorActive()) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [loading]=\"obs.loadingCaseListColumns\"\n [items]=\"obs?.caseListColumn || []\"\n [fields]=\"fields\"\n [viewMode]=\"false\"\n [header]=\"false\"\n (rowClicked)=\"columnRowClicked($event)\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"obs.disableInput\"\n (itemsReordered)=\"onItemsReordered(obs.params.caseDefinitionKey, $event)\"\n [attr.data-test-id]=\"testIds.columnsList\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'listColumn.noConfigWarningTitle' | translate\"\n [description]=\"'listColumn.noConfigWarning' | translate\"\n illustration=\"valtimo-layout/img/emptystate-empty.svg\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n } @else {\n <valtimo-json-editor\n [model]=\"obs.jsonEditorModel\"\n [fitPage]=\"true\"\n [showEditButton]=\"obs.hasEditPermissions\"\n (saveEvent)=\"updateCaseListColumns(obs.params.caseDefinitionKey, $event)\"\n [attr.data-test-id]=\"testIds.jsonEditor\"\n >\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"downloadButton; context: {obs: obs}\"></ng-container>\n </valtimo-json-editor>\n }\n</ng-template>\n\n<ng-template #buttons let-obs=\"obs\">\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"downloadButton; context: {obs: obs}\"></ng-container>\n\n <button\n *ngIf=\"obs.hasEditPermissions\"\n (click)=\"openModal('create')\"\n cdsButton=\"primary\"\n [disabled]=\"obs.loadingCaseListColumns || !(hasEditPermissions$ | async)\"\n [attr.data-test-id]=\"testIds.addListColumn\"\n >\n {{ 'listColumn.addButtonText' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #noConfigWarning>\n <div class=\"pl-2 pr-2 pb-2 pt-2\">\n <cds-notification\n [notificationObj]=\"{\n type: 'info',\n title: 'listColumn.noConfigWarningTitle' | translate,\n message: 'listColumn.noConfigWarning' | translate,\n showClose: false,\n }\"\n >\n </cds-notification>\n </div>\n</ng-template>\n\n<ng-template #createEditModal>\n <cds-modal\n valtimoCdsModal\n *ngIf=\"{\n type: currentModalType$ | async,\n show: showModal$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async,\n validKey: validKey$ | async,\n disableDefaultSort: disableDefaultSort$ | async,\n showEnum: showEnum$ | async,\n isYesNo: isYesNo$ | async,\n showTagAmount: showTagAmount$ | async,\n params: params$ | async,\n columnTitle: columnTitle$ | async,\n usedKeys: usedKeys$ | async,\n } as modalObs\"\n [open]=\"modalObs.show\"\n size=\"sm\"\n (close)=\"closeModal()\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\" [cdsLayer]=\"1\">\n <h3 cdsModalHeaderHeading>\n {{\n modalObs.type === 'create'\n ? ('listColumn.addButtonText' | translate)\n : ('listColumn.editColumnTitle' | translate)\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </cds-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <form [formGroup]=\"formGroup\" class=\"list-column-form\">\n <cds-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'listColumn.titleTitle' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.titleTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <input cdsText formControlName=\"title\" [attr.data-test-id]=\"testIds.title\" />\n </cds-label>\n\n <valtimo-auto-key-input\n formControlName=\"key\"\n labelTranslationKey=\"listColumn.key\"\n [dataTestId]=\"testIds.key\"\n [mode]=\"modalObs.type === 'edit' ? 'edit' : 'add'\"\n [sourceText]=\"modalObs.columnTitle\"\n [usedKeys]=\"modalObs.usedKeys\"\n >\n <v-tooltip-icon\n [tooltip]=\"'listColumn.keyTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </valtimo-auto-key-input>\n\n <cds-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'listColumn.path' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.pathTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <valtimo-value-path-selector\n formControlName=\"path\"\n [caseDefinitionKey]=\"modalObs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"modalObs.params?.caseDefinitionVersionTag\"\n [excludePrefixes]=\"[ValuePathSelectorPrefix.TASK]\"\n [attr.data-test-id]=\"testIds.valuePathSelector\"\n ></valtimo-value-path-selector>\n </cds-label>\n\n <cds-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'listColumn.displayType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'listColumn.displayTypeTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <cds-dropdown\n formControlName=\"displayType\"\n [disabled]=\"modalObs.disableInput\"\n (selected)=\"selectedDisplayType($event)\"\n [attr.data-test-id]=\"testIds.displayType\"\n >\n <cds-dropdown-list [items]=\"(viewTypeItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-label>\n\n <cds-label *ngIf=\"modalObs.showTagAmount\" [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'listColumn.tagAmount' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.tagAmountTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <cds-number\n formControlName=\"tagAmount\"\n [min]=\"1\"\n [step]=\"1\"\n [attr.data-test-id]=\"testIds.tagAmount\"\n ></cds-number>\n </cds-label>\n\n <cds-label *ngIf=\"showDateFormat$ | async\" [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'listColumn.dateFormat' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.dateFormatTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <input cdsText formControlName=\"dateFormat\" [attr.data-test-id]=\"testIds.dateFormat\" />\n </cds-label>\n\n <cds-label *ngIf=\"modalObs.showEnum || modalObs.isYesNo\" [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{\n modalObs.isYesNo\n ? ('listColumn.enumTitleOptional' | translate)\n : ('listColumn.enumTitle' | translate)\n }}\n\n <v-tooltip-icon\n [tooltip]=\"\n modalObs.isYesNo\n ? ('listColumn.enumTooltipOptional' | translate)\n : ('listColumn.enumTooltip' | translate)\n \"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <valtimo-carbon-multi-input\n *ngIf=\"(showModal$ | async) || (modalShowing$ | async)\"\n type=\"keyValue\"\n (valueChange)=\"enumValueChange($event)\"\n [defaultValues]=\"defaultEnumValues$ | async\"\n [hideAddButton]=\"modalObs.isYesNo\"\n [hideDeleteButton]=\"modalObs.isYesNo\"\n [maxRows]=\"modalObs.isYesNo ? 1 : null\"\n [keyColumnTitle]=\"modalObs.isYesNo && ('viewTypeConverter.Yes' | translate)\"\n [valueColumnTitle]=\"modalObs.isYesNo && ('viewTypeConverter.No' | translate)\"\n [attr.data-test-id]=\"testIds.multiInput\"\n ></valtimo-carbon-multi-input>\n </cds-label>\n\n <cds-checkbox\n *ngIf=\"displaySortable\"\n formControlName=\"sortable\"\n [disabled]=\"modalObs.showTagAmount || modalObs.disableInput\"\n [attr.data-test-id]=\"testIds.sortableCheckbox\"\n >{{ 'listColumn.sortable' | translate }}\n </cds-checkbox>\n\n <cds-label\n *ngIf=\"displaySortable\"\n [disabled]=\"modalObs.disableInput || modalObs.disableDefaultSort || modalObs.showTagAmount\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'listColumn.defaultSortTitle' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.defaultSortTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <cds-dropdown\n formControlName=\"defaultSort\"\n [disabled]=\"modalObs.disableInput || modalObs.disableDefaultSort || modalObs.showTagAmount\"\n [attr.data-test-id]=\"testIds.defaultSort\"\n >\n <cds-dropdown-list [items]=\"(sortItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-inline-notification\n *ngIf=\"modalObs.disableDefaultSort && !modalObs.disableInput && !modalObs.showTagAmount\"\n class=\"default-sort-disabled-notice\"\n [notificationObj]=\"{\n type: 'info',\n title: '',\n message: ('listColumn.defaultSortDisabledNotice' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </cds-label>\n\n <cds-label *ngIf=\"displayExportButton\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'listColumn.exportField' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.exportTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <cds-toggle\n formControlName=\"exportable\"\n data-testid=\"export-selector-toggle\"\n [onText]=\"'listColumn.sortableYes' | translate\"\n [offText]=\"'listColumn.sortableNo' | translate\"\n [keyColumnTitle]=\"modalObs.isYesNo && ('viewTypeConverter.Yes' | translate)\"\n [valueColumnTitle]=\"modalObs.isYesNo && ('viewTypeConverter.No' | translate)\"\n [required]=\"false\"\n [size]=\"'sm'\"\n [attr.data-test-id]=\"testIds.exportable\"\n ></cds-toggle>\n </cds-label>\n </form>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <cds-modal-footer [cdsLayer]=\"1\">\n <ng-container>\n <button\n cdsButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n [attr.data-test-id]=\"testIds.cancelButton\"\n >\n {{ 'listColumn.close' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n [disabled]=\"modalObs.valid === false\"\n (click)=\"saveCaseListColumns()\"\n [disabled]=\"\n modalObs.disableInput || modalObs.valid === false || modalObs.validKey === false\n \"\n [attr.data-test-id]=\"testIds.saveButton\"\n >\n {{ (modalObs.type === 'create' ? 'interface.create' : 'listColumn.save') | translate }}\n </button>\n </ng-container>\n </cds-modal-footer>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n (confirmEvent)=\"deleteRowConfirmation($event)\"\n confirmButtonTextTranslationKey=\"listColumn.deleteColumn\"\n titleTranslationKey=\"listColumn.deleteColumn\"\n contentTranslationKey=\"listColumn.deleteColumnConfirmation\"\n [attr.data-test-id]=\"testIds.confirmationModal\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #viewToggle>\n <cds-tooltip [description]=\"'JSON editor'\">\n <button\n [cdsButton]=\"buttonTheme()\"\n [attr.data-test-id]=\"testIds.switchView\"\n iconOnly=\"true\"\n (click)=\"switchView()\"\n >\n <svg cdsIcon=\"code\" size=\"16\"></svg>\n </button>\n </cds-tooltip>\n</ng-template>\n\n<ng-template #downloadButton let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n (click)=\"onDownloadClick()\"\n [disabled]=\"\n !obs.downloadUrl ||\n !obs.downloadName ||\n obs.caseListColumn?.length < 1 ||\n obs.disableInput ||\n obs.loadingCaseListColumns\n \"\n [attr.data-test-id]=\"testIds.downloadButton\"\n >\n <svg cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--inline-notification{max-width:100%}.default-sort-disabled-notice{display:block;margin-top:.5rem}::ng-deep .cds--label{width:100%}.label-with-tooltip{display:flex;align-items:center}.display-type-dropdown{width:300px}.list-column-form{display:flex;flex-direction:column;gap:16px;margin-bottom:3rem}.select-label{padding-bottom:.5rem;width:250px}.center-link{display:flex;align-items:center}.case-list-columns__actions{display:flex;gap:8px}.list-columns__buttons{display:flex;gap:16px;flex-direction:row;justify-content:flex-end}\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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "component", type: i2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.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: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "component", type: i7.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }, { kind: "component", type: i7.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: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "ariaLabel", "skeleton"] }, { kind: "component", type: i2.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "component", type: i7.ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "caseDefinitionKey", "caseDefinitionVersionTag", "buildingBlockDefinitionKey", "buildingBlockDefinitionVersionTag", "prefixes", "excludePrefixes", "label", "tooltip", "required", "showCaseDefinitionSelector", "notation", "dropUp", "defaultValue", "type", "parentItem", "filterItems"], outputs: ["valueChangeEvent", "collectionSelected"] }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i2.NumberComponent, selector: "cds-number, ibm-number", inputs: ["readonly", "theme", "disabled", "skeleton", "invalid", "id", "placeholder", "size", "required", "value", "min", "max", "label", "helperText", "invalidText", "step", "precision", "warn", "warnText", "ariaLabel", "decrementLabel", "incrementLabel", "fluid"], outputs: ["change"] }, { kind: "component", type: i7.JsonEditorComponent, selector: "valtimo-json-editor", inputs: ["disabled", "model", "editorOptions", "fitPage", "formatOnLoad", "heightPx", "heightStyle", "jsonSchema", "showEditButton", "widthPx"], outputs: ["changeEvent", "discardEvent", "keepEditingEvent", "saveEvent"] }, { kind: "component", type: i7.AutoKeyInputComponent, selector: "valtimo-auto-key-input", inputs: ["labelTranslationKey", "placeholderTranslationKey", "dataTestId", "name", "disabled", "defaultValue", "margin", "mode", "usedKeys", "sourceText"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
3589
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseManagementListColumnsComponent, isStandalone: false, selector: "valtimo-case-management-list-columns", 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 caseListColumn: translatedCaseListColumns$ | async,\n disableInput: disableInput$ | async,\n downloadName: downloadName$ | async,\n downloadUrl: downloadUrl$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n jsonEditorModel: jsonEditorModel$ | async,\n loadingCaseListColumns: loadingCaseListColumns$ | async,\n params: params$ | async,\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"content; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n</ng-container>\n\n<ng-template #content let-obs=\"obs\">\n @if (!jsonEditorActive()) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [loading]=\"obs.loadingCaseListColumns\"\n [items]=\"obs?.caseListColumn || []\"\n [fields]=\"fields\"\n [viewMode]=\"false\"\n [header]=\"false\"\n (rowClicked)=\"columnRowClicked($event)\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"obs.disableInput\"\n (itemsReordered)=\"onItemsReordered(obs.params.caseDefinitionKey, $event)\"\n [attr.data-test-id]=\"testIds.columnsList\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'listColumn.noConfigWarningTitle' | translate\"\n [description]=\"'listColumn.noConfigWarning' | translate\"\n illustration=\"valtimo-layout/img/emptystate-empty.svg\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n } @else {\n <valtimo-json-editor\n [model]=\"obs.jsonEditorModel\"\n [fitPage]=\"true\"\n [showEditButton]=\"obs.hasEditPermissions\"\n (saveEvent)=\"updateCaseListColumns(obs.params.caseDefinitionKey, $event)\"\n [attr.data-test-id]=\"testIds.jsonEditor\"\n >\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"downloadButton; context: {obs: obs}\"></ng-container>\n </valtimo-json-editor>\n }\n</ng-template>\n\n<ng-template #buttons let-obs=\"obs\">\n <ng-container *ngTemplateOutlet=\"viewToggle\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"downloadButton; context: {obs: obs}\"></ng-container>\n\n <button\n *ngIf=\"obs.hasEditPermissions\"\n (click)=\"openModal('create')\"\n cdsButton=\"primary\"\n [disabled]=\"obs.loadingCaseListColumns || !(hasEditPermissions$ | async)\"\n [attr.data-test-id]=\"testIds.addListColumn\"\n >\n {{ 'listColumn.addButtonText' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #noConfigWarning>\n <div class=\"pl-2 pr-2 pb-2 pt-2\">\n <cds-notification\n [notificationObj]=\"{\n type: 'info',\n title: 'listColumn.noConfigWarningTitle' | translate,\n message: 'listColumn.noConfigWarning' | translate,\n showClose: false,\n }\"\n >\n </cds-notification>\n </div>\n</ng-template>\n\n<ng-template #createEditModal>\n <cds-modal\n valtimoCdsModal\n *ngIf=\"{\n type: currentModalType$ | async,\n show: showModal$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async,\n validKey: validKey$ | async,\n disableDefaultSort: disableDefaultSort$ | async,\n showEnum: showEnum$ | async,\n isYesNo: isYesNo$ | async,\n showTagAmount: showTagAmount$ | async,\n params: params$ | async,\n columnTitle: columnTitle$ | async,\n usedKeys: usedKeys$ | async,\n } as modalObs\"\n [open]=\"modalObs.show\"\n size=\"sm\"\n (close)=\"closeModal()\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\" [cdsLayer]=\"1\">\n <h3 cdsModalHeaderHeading>\n {{\n modalObs.type === 'create'\n ? ('listColumn.addButtonText' | translate)\n : ('listColumn.editColumnTitle' | translate)\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </cds-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <form [formGroup]=\"formGroup\" class=\"list-column-form\">\n <cds-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'listColumn.titleTitle' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.titleTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <input cdsText formControlName=\"title\" [attr.data-test-id]=\"testIds.title\" />\n </cds-label>\n\n <valtimo-auto-key-input\n formControlName=\"key\"\n labelTranslationKey=\"listColumn.key\"\n [dataTestId]=\"testIds.key\"\n [mode]=\"modalObs.type === 'edit' ? 'edit' : 'add'\"\n [sourceText]=\"modalObs.columnTitle\"\n [usedKeys]=\"modalObs.usedKeys\"\n >\n <v-tooltip-icon\n [tooltip]=\"'listColumn.keyTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </valtimo-auto-key-input>\n\n <cds-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'listColumn.path' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.pathTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <valtimo-value-path-selector\n formControlName=\"path\"\n [caseDefinitionKey]=\"modalObs.params?.caseDefinitionKey\"\n [caseDefinitionVersionTag]=\"modalObs.params?.caseDefinitionVersionTag\"\n [excludePrefixes]=\"[ValuePathSelectorPrefix.TASK]\"\n [attr.data-test-id]=\"testIds.valuePathSelector\"\n ></valtimo-value-path-selector>\n </cds-label>\n\n <cds-label [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'listColumn.displayType' | translate }}\n <v-tooltip-icon\n [tooltip]=\"'listColumn.displayTypeTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <cds-dropdown\n formControlName=\"displayType\"\n [disabled]=\"modalObs.disableInput\"\n (selected)=\"selectedDisplayType($event)\"\n [attr.data-test-id]=\"testIds.displayType\"\n >\n <cds-dropdown-list [items]=\"(viewTypeItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-label>\n\n <cds-label *ngIf=\"modalObs.showTagAmount\" [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'listColumn.tagAmount' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.tagAmountTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <cds-number\n formControlName=\"tagAmount\"\n [min]=\"1\"\n [step]=\"1\"\n [attr.data-test-id]=\"testIds.tagAmount\"\n ></cds-number>\n </cds-label>\n\n <cds-label *ngIf=\"showDateFormat$ | async\" [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip\">\n {{ 'listColumn.dateFormat' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.dateFormatTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <input cdsText formControlName=\"dateFormat\" [attr.data-test-id]=\"testIds.dateFormat\" />\n </cds-label>\n\n <cds-label *ngIf=\"modalObs.showEnum || modalObs.isYesNo\" [disabled]=\"modalObs.disableInput\">\n <span class=\"label-with-tooltip select-label\">\n {{\n modalObs.isYesNo\n ? ('listColumn.enumTitleOptional' | translate)\n : ('listColumn.enumTitle' | translate)\n }}\n\n <v-tooltip-icon\n [tooltip]=\"\n modalObs.isYesNo\n ? ('listColumn.enumTooltipOptional' | translate)\n : ('listColumn.enumTooltip' | translate)\n \"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <valtimo-carbon-multi-input\n *ngIf=\"(showModal$ | async) || (modalShowing$ | async)\"\n type=\"keyValue\"\n (valueChange)=\"enumValueChange($event)\"\n [defaultValues]=\"defaultEnumValues$ | async\"\n [hideAddButton]=\"modalObs.isYesNo\"\n [hideDeleteButton]=\"modalObs.isYesNo\"\n [maxRows]=\"modalObs.isYesNo ? 1 : null\"\n [keyColumnTitle]=\"modalObs.isYesNo && ('viewTypeConverter.Yes' | translate)\"\n [valueColumnTitle]=\"modalObs.isYesNo && ('viewTypeConverter.No' | translate)\"\n [attr.data-test-id]=\"testIds.multiInput\"\n ></valtimo-carbon-multi-input>\n </cds-label>\n\n <cds-checkbox\n *ngIf=\"displaySortable\"\n formControlName=\"sortable\"\n [disabled]=\"modalObs.showTagAmount || modalObs.disableInput\"\n [attr.data-test-id]=\"testIds.sortableCheckbox\"\n >{{ 'listColumn.sortable' | translate }}\n </cds-checkbox>\n\n <cds-label\n *ngIf=\"displaySortable\"\n [disabled]=\"modalObs.disableInput || modalObs.disableDefaultSort || modalObs.showTagAmount\"\n >\n <span class=\"label-with-tooltip select-label\">\n {{ 'listColumn.defaultSortTitle' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.defaultSortTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <cds-dropdown\n formControlName=\"defaultSort\"\n [disabled]=\"modalObs.disableInput || modalObs.disableDefaultSort || modalObs.showTagAmount\"\n [attr.data-test-id]=\"testIds.defaultSort\"\n >\n <cds-dropdown-list [items]=\"(sortItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-inline-notification\n *ngIf=\"modalObs.disableDefaultSort && !modalObs.disableInput && !modalObs.showTagAmount\"\n class=\"default-sort-disabled-notice\"\n [notificationObj]=\"{\n type: 'info',\n title: '',\n message: ('listColumn.defaultSortDisabledNotice' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </cds-label>\n\n <cds-label *ngIf=\"displayExportButton\">\n <span class=\"label-with-tooltip select-label\">\n {{ 'listColumn.exportField' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.exportTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <cds-toggle\n formControlName=\"exportable\"\n data-testid=\"export-selector-toggle\"\n [onText]=\"'listColumn.sortableYes' | translate\"\n [offText]=\"'listColumn.sortableNo' | translate\"\n [keyColumnTitle]=\"modalObs.isYesNo && ('viewTypeConverter.Yes' | translate)\"\n [valueColumnTitle]=\"modalObs.isYesNo && ('viewTypeConverter.No' | translate)\"\n [required]=\"false\"\n [size]=\"'sm'\"\n [attr.data-test-id]=\"testIds.exportable\"\n ></cds-toggle>\n </cds-label>\n </form>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <cds-modal-footer [cdsLayer]=\"1\">\n <ng-container>\n <button\n cdsButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n [attr.data-test-id]=\"testIds.cancelButton\"\n >\n {{ 'listColumn.close' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n [disabled]=\"modalObs.valid === false\"\n (click)=\"saveCaseListColumns()\"\n [disabled]=\"\n modalObs.disableInput || modalObs.valid === false || modalObs.validKey === false\n \"\n [attr.data-test-id]=\"testIds.saveButton\"\n >\n {{ (modalObs.type === 'create' ? 'interface.create' : 'listColumn.save') | translate }}\n </button>\n </ng-container>\n </cds-modal-footer>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteRowKey$ | async\"\n (confirmEvent)=\"deleteRowConfirmation($event)\"\n confirmButtonTextTranslationKey=\"listColumn.deleteColumn\"\n titleTranslationKey=\"listColumn.deleteColumn\"\n contentTranslationKey=\"listColumn.deleteColumnConfirmation\"\n [attr.data-test-id]=\"testIds.confirmationModal\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #viewToggle>\n <cds-tooltip [description]=\"'JSON editor'\">\n <button\n [cdsButton]=\"buttonTheme()\"\n [attr.data-test-id]=\"testIds.switchView\"\n iconOnly=\"true\"\n (click)=\"switchView()\"\n >\n <svg cdsIcon=\"code\" size=\"16\"></svg>\n </button>\n </cds-tooltip>\n</ng-template>\n\n<ng-template #downloadButton let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n (click)=\"onDownloadClick()\"\n [disabled]=\"\n !obs.downloadUrl ||\n !obs.downloadName ||\n obs.caseListColumn?.length < 1 ||\n obs.disableInput ||\n obs.loadingCaseListColumns\n \"\n [attr.data-test-id]=\"testIds.downloadButton\"\n >\n <svg cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--inline-notification{max-width:100%}.default-sort-disabled-notice{display:block;margin-top:.5rem}::ng-deep .cds--label{width:100%}.label-with-tooltip{display:flex;align-items:center}.display-type-dropdown{width:300px}.list-column-form{display:flex;flex-direction:column;gap:16px;margin-bottom:3rem}.select-label{padding-bottom:.5rem;width:250px}.center-link{display:flex;align-items:center}.case-list-columns__actions{display:flex;gap:8px}.list-columns__buttons{display:flex;gap:16px;flex-direction:row;justify-content:flex-end}\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: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "component", type: i2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.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: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "component", type: i7.TooltipIconComponent, selector: "v-tooltip-icon", inputs: ["tooltip", "disabled"] }, { kind: "component", type: i7.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteButtonType", "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: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "ariaLabel", "skeleton"] }, { kind: "component", type: i2.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "component", type: i7.ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "caseDefinitionKey", "caseDefinitionVersionTag", "buildingBlockDefinitionKey", "buildingBlockDefinitionVersionTag", "prefixes", "excludePrefixes", "label", "tooltip", "required", "showCaseDefinitionSelector", "notation", "dropUp", "defaultValue", "type", "parentItem", "filterItems"], outputs: ["valueChangeEvent", "collectionSelected"] }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i2.NumberComponent, selector: "cds-number, ibm-number", inputs: ["readonly", "theme", "disabled", "skeleton", "invalid", "id", "placeholder", "size", "required", "value", "min", "max", "label", "helperText", "invalidText", "step", "precision", "warn", "warnText", "ariaLabel", "decrementLabel", "incrementLabel", "fluid"], outputs: ["change"] }, { kind: "component", type: i7.JsonEditorComponent, selector: "valtimo-json-editor", inputs: ["disabled", "model", "editorOptions", "fitPage", "formatOnLoad", "heightPx", "heightStyle", "jsonSchema", "showEditButton", "widthPx"], outputs: ["changeEvent", "discardEvent", "keepEditingEvent", "saveEvent"] }, { kind: "component", type: i7.AutoKeyInputComponent, selector: "valtimo-auto-key-input", inputs: ["labelTranslationKey", "placeholderTranslationKey", "dataTestId", "name", "disabled", "defaultValue", "margin", "mode", "usedKeys", "sourceText"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
3362
3590
|
}
|
|
3363
3591
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementListColumnsComponent, decorators: [{
|
|
3364
3592
|
type: Component,
|
|
@@ -4270,7 +4498,12 @@ class CaseManagementDetailComponent {
|
|
|
4270
4498
|
this.TabEnum = TabEnum;
|
|
4271
4499
|
this._subscriptions = new Subscription();
|
|
4272
4500
|
this._refreshConfigurationIssues$ = new BehaviorSubject(null);
|
|
4273
|
-
this.hasPluginProcessLinkIssue$ = this.configurationIssueService.
|
|
4501
|
+
this.hasPluginProcessLinkIssue$ = this.configurationIssueService.hasAnyOfIssues$([
|
|
4502
|
+
'plugin-process-link',
|
|
4503
|
+
'external-plugin-process-link',
|
|
4504
|
+
'external-plugin-task-form',
|
|
4505
|
+
'external-plugin-case-tab',
|
|
4506
|
+
]);
|
|
4274
4507
|
this._tabIssueCache = new Map();
|
|
4275
4508
|
this.configurationIssues$ = combineLatest([
|
|
4276
4509
|
this.caseDetailService.selectedCaseDefinitionKey$,
|
|
@@ -4491,17 +4724,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
4491
4724
|
* See the License for the specific language governing permissions and
|
|
4492
4725
|
* limitations under the License.
|
|
4493
4726
|
*/
|
|
4727
|
+
const EMBEDDED_ISSUE_TYPE = 'plugin-process-link';
|
|
4728
|
+
const EXTERNAL_ISSUE_TYPE = 'external-plugin-process-link';
|
|
4729
|
+
const EXTERNAL_TASK_FORM_ISSUE_TYPE = 'external-plugin-task-form';
|
|
4730
|
+
const EXTERNAL_CASE_TAB_ISSUE_TYPE = 'external-plugin-case-tab';
|
|
4731
|
+
const EXTERNAL_CASE_WIDGET_ISSUE_TYPE = 'external-plugin-case-widget';
|
|
4494
4732
|
class CaseManagementMissingPluginConfigurationsComponent {
|
|
4495
|
-
constructor(caseManagementService, configurationIssueService, globalNotificationService, iconService, pluginManagementService, pluginTranslationService, route, translateService) {
|
|
4733
|
+
constructor(caseManagementService, configurationIssueService, externalPluginService, globalNotificationService, iconService, pluginManagementService, pluginTranslationService, route, translateService) {
|
|
4496
4734
|
this.caseManagementService = caseManagementService;
|
|
4497
4735
|
this.configurationIssueService = configurationIssueService;
|
|
4736
|
+
this.externalPluginService = externalPluginService;
|
|
4498
4737
|
this.globalNotificationService = globalNotificationService;
|
|
4499
4738
|
this.iconService = iconService;
|
|
4500
4739
|
this.pluginManagementService = pluginManagementService;
|
|
4501
4740
|
this.pluginTranslationService = pluginTranslationService;
|
|
4502
4741
|
this.route = route;
|
|
4503
4742
|
this.translateService = translateService;
|
|
4504
|
-
this.hasIssue$ = this.configurationIssueService.
|
|
4743
|
+
this.hasIssue$ = this.configurationIssueService.hasAnyOfIssues$([
|
|
4744
|
+
EMBEDDED_ISSUE_TYPE,
|
|
4745
|
+
EXTERNAL_ISSUE_TYPE,
|
|
4746
|
+
EXTERNAL_TASK_FORM_ISSUE_TYPE,
|
|
4747
|
+
EXTERNAL_CASE_TAB_ISSUE_TYPE,
|
|
4748
|
+
EXTERNAL_CASE_WIDGET_ISSUE_TYPE,
|
|
4749
|
+
]);
|
|
4505
4750
|
this.mappingRows$ = new BehaviorSubject([]);
|
|
4506
4751
|
this.hasUnknownPluginConfigurations$ = new BehaviorSubject(false);
|
|
4507
4752
|
this.visible$ = combineLatest([
|
|
@@ -4528,6 +4773,21 @@ class CaseManagementMissingPluginConfigurationsComponent {
|
|
|
4528
4773
|
onMappingChange(index, selectedId) {
|
|
4529
4774
|
this._selections.set(index, selectedId ? String(selectedId) : null);
|
|
4530
4775
|
}
|
|
4776
|
+
/**
|
|
4777
|
+
* The actual definition version of the currently selected external configuration for the row at
|
|
4778
|
+
* [index], `null` when the selection is an exact `pluginId@version` match, embedded, or the row
|
|
4779
|
+
* has no selection yet (D3 non-blocking warning).
|
|
4780
|
+
*/
|
|
4781
|
+
selectedConfigurationVersion(row, index) {
|
|
4782
|
+
if (!row.mismatchedVersionsById || row.mismatchedVersionsById.size === 0) {
|
|
4783
|
+
return null;
|
|
4784
|
+
}
|
|
4785
|
+
const selectedId = this._selections.get(index);
|
|
4786
|
+
if (!selectedId) {
|
|
4787
|
+
return null;
|
|
4788
|
+
}
|
|
4789
|
+
return row.mismatchedVersionsById.get(selectedId) ?? null;
|
|
4790
|
+
}
|
|
4531
4791
|
save() {
|
|
4532
4792
|
const mappings = {};
|
|
4533
4793
|
const rows = this.mappingRows$.value;
|
|
@@ -4574,68 +4834,131 @@ class CaseManagementMissingPluginConfigurationsComponent {
|
|
|
4574
4834
|
this.mappingRows$.next([]);
|
|
4575
4835
|
return;
|
|
4576
4836
|
}
|
|
4577
|
-
|
|
4578
|
-
|
|
4837
|
+
const embeddedDangling = knownKeyDangling.filter(d => (d.source ?? 'embedded') === 'embedded');
|
|
4838
|
+
const externalDangling = knownKeyDangling.filter(d => d.source === 'external');
|
|
4839
|
+
combineLatest([
|
|
4840
|
+
this.loadEmbeddedRows(embeddedDangling),
|
|
4841
|
+
this.loadExternalRows(externalDangling),
|
|
4842
|
+
])
|
|
4579
4843
|
.pipe(take$1(1))
|
|
4580
|
-
.subscribe(
|
|
4581
|
-
|
|
4582
|
-
this.
|
|
4844
|
+
.subscribe(([embeddedRows, externalRows]) => {
|
|
4845
|
+
this._selections.clear();
|
|
4846
|
+
this.mappingRows$.next([...embeddedRows, ...externalRows]);
|
|
4583
4847
|
});
|
|
4584
4848
|
}
|
|
4849
|
+
loadEmbeddedRows(dangling) {
|
|
4850
|
+
if (dangling.length === 0) {
|
|
4851
|
+
return of([]);
|
|
4852
|
+
}
|
|
4853
|
+
return this.pluginManagementService.getPluginDefinitions().pipe(take$1(1), switchMap(definitions => {
|
|
4854
|
+
const installedKeys = new Set(definitions.map(d => d.key));
|
|
4855
|
+
return this.loadPluginConfigurations(dangling, installedKeys);
|
|
4856
|
+
}));
|
|
4857
|
+
}
|
|
4585
4858
|
loadPluginConfigurations(dangling, installedKeys) {
|
|
4586
4859
|
const uniqueKeys = [...new Set(dangling.map(d => d.pluginDefinitionKey).filter(Boolean))];
|
|
4587
4860
|
const installableKeys = uniqueKeys.filter(k => installedKeys.has(k));
|
|
4588
|
-
|
|
4589
|
-
|
|
4590
|
-
if (remaining === 0) {
|
|
4591
|
-
this.buildRows(dangling, configsByKey, installedKeys);
|
|
4592
|
-
return;
|
|
4861
|
+
if (installableKeys.length === 0) {
|
|
4862
|
+
return of(this.buildEmbeddedRows(dangling, new Map(), installedKeys));
|
|
4593
4863
|
}
|
|
4864
|
+
const configRequests = {};
|
|
4594
4865
|
for (const key of installableKeys) {
|
|
4595
|
-
this.pluginManagementService
|
|
4866
|
+
configRequests[key] = this.pluginManagementService
|
|
4596
4867
|
.getPluginConfigurationsByPluginDefinitionKey(key)
|
|
4597
|
-
.pipe(take$1(1))
|
|
4598
|
-
.subscribe({
|
|
4599
|
-
next: configs => {
|
|
4600
|
-
configsByKey.set(key, configs);
|
|
4601
|
-
remaining--;
|
|
4602
|
-
if (remaining === 0)
|
|
4603
|
-
this.buildRows(dangling, configsByKey, installedKeys);
|
|
4604
|
-
},
|
|
4605
|
-
error: () => {
|
|
4606
|
-
configsByKey.set(key, []);
|
|
4607
|
-
remaining--;
|
|
4608
|
-
if (remaining === 0)
|
|
4609
|
-
this.buildRows(dangling, configsByKey, installedKeys);
|
|
4610
|
-
},
|
|
4611
|
-
});
|
|
4868
|
+
.pipe(take$1(1), catchError(() => of([])));
|
|
4612
4869
|
}
|
|
4870
|
+
return forkJoin(configRequests).pipe(take$1(1), map(results => {
|
|
4871
|
+
const configsByKey = new Map(Object.entries(results));
|
|
4872
|
+
return this.buildEmbeddedRows(dangling, configsByKey, installedKeys);
|
|
4873
|
+
}));
|
|
4613
4874
|
}
|
|
4614
|
-
|
|
4615
|
-
|
|
4616
|
-
this.mappingRows$.next(dangling.map(d => {
|
|
4875
|
+
buildEmbeddedRows(dangling, configsByKey, installedKeys) {
|
|
4876
|
+
return dangling.map(d => {
|
|
4617
4877
|
const key = d.pluginDefinitionKey;
|
|
4618
4878
|
const isInstalled = key ? installedKeys.has(key) : false;
|
|
4619
4879
|
const available = configsByKey.get(key) || [];
|
|
4620
|
-
|
|
4621
|
-
if (!isInstalled) {
|
|
4622
|
-
status = 'not-installed';
|
|
4623
|
-
}
|
|
4624
|
-
else if (available.length === 0) {
|
|
4625
|
-
status = 'no-configurations';
|
|
4626
|
-
}
|
|
4627
|
-
else {
|
|
4628
|
-
status = 'available';
|
|
4629
|
-
}
|
|
4880
|
+
const status = this.determineStatus(isInstalled, available.length > 0);
|
|
4630
4881
|
return {
|
|
4631
4882
|
pluginDefinitionKey: key,
|
|
4632
4883
|
pluginDefinitionTitle: this.getPluginTitle(key),
|
|
4633
4884
|
sourcePluginConfigurationIds: d.sourcePluginConfigurationIds,
|
|
4634
4885
|
selectItems: available.map(c => ({ id: c.id, text: c.title })),
|
|
4635
4886
|
status,
|
|
4887
|
+
source: 'embedded',
|
|
4888
|
+
pluginDefinitionVersion: null,
|
|
4636
4889
|
};
|
|
4890
|
+
});
|
|
4891
|
+
}
|
|
4892
|
+
loadExternalRows(dangling) {
|
|
4893
|
+
if (dangling.length === 0) {
|
|
4894
|
+
return of([]);
|
|
4895
|
+
}
|
|
4896
|
+
return combineLatest([
|
|
4897
|
+
this.externalPluginService
|
|
4898
|
+
.getConfigurations()
|
|
4899
|
+
.pipe(catchError(() => of([]))),
|
|
4900
|
+
this.externalPluginService
|
|
4901
|
+
.getDefinitions()
|
|
4902
|
+
.pipe(catchError(() => of([]))),
|
|
4903
|
+
]).pipe(take$1(1), map(([configurations, definitions]) => {
|
|
4904
|
+
const definitionById = new Map(definitions.map(d => [d.id, d]));
|
|
4905
|
+
const lang = this.translateService.currentLang;
|
|
4906
|
+
return dangling.map(d => {
|
|
4907
|
+
const matchingConfigurations = configurations.filter(configuration => {
|
|
4908
|
+
const definition = definitionById.get(configuration.definitionId);
|
|
4909
|
+
return definition?.pluginId === d.pluginDefinitionKey;
|
|
4910
|
+
});
|
|
4911
|
+
const isInstalled = [...definitionById.values()].some(def => def.pluginId === d.pluginDefinitionKey);
|
|
4912
|
+
const status = this.determineStatus(isInstalled, matchingConfigurations.length > 0);
|
|
4913
|
+
const mismatchedVersionsById = new Map();
|
|
4914
|
+
const selectItems = matchingConfigurations.map(configuration => {
|
|
4915
|
+
const definition = definitionById.get(configuration.definitionId);
|
|
4916
|
+
if (definition && definition.version !== d.pluginDefinitionVersion) {
|
|
4917
|
+
mismatchedVersionsById.set(configuration.id, definition.version);
|
|
4918
|
+
}
|
|
4919
|
+
return {
|
|
4920
|
+
id: configuration.id,
|
|
4921
|
+
text: definition
|
|
4922
|
+
? `${configuration.title} — ${getExternalPluginDisplayName(definition, lang)}`
|
|
4923
|
+
: configuration.title,
|
|
4924
|
+
};
|
|
4925
|
+
});
|
|
4926
|
+
return {
|
|
4927
|
+
pluginDefinitionKey: d.pluginDefinitionKey,
|
|
4928
|
+
pluginDefinitionTitle: this.getExternalPluginTitle(d, definitionById),
|
|
4929
|
+
sourcePluginConfigurationIds: d.sourcePluginConfigurationIds,
|
|
4930
|
+
selectItems,
|
|
4931
|
+
status,
|
|
4932
|
+
source: 'external',
|
|
4933
|
+
pluginDefinitionVersion: d.pluginDefinitionVersion ?? null,
|
|
4934
|
+
mismatchedVersionsById,
|
|
4935
|
+
};
|
|
4936
|
+
});
|
|
4637
4937
|
}));
|
|
4638
4938
|
}
|
|
4939
|
+
getExternalPluginTitle(dangling, definitionById) {
|
|
4940
|
+
if (!dangling.pluginDefinitionKey) {
|
|
4941
|
+
return this.translateService.instant('caseManagement.missingPluginConfigurations.unknownPlugin');
|
|
4942
|
+
}
|
|
4943
|
+
const lang = this.translateService.currentLang;
|
|
4944
|
+
const matchingDefinition = [...definitionById.values()].find(d => d.pluginId === dangling.pluginDefinitionKey &&
|
|
4945
|
+
d.version === dangling.pluginDefinitionVersion);
|
|
4946
|
+
if (matchingDefinition) {
|
|
4947
|
+
return getExternalPluginDisplayName(matchingDefinition, lang);
|
|
4948
|
+
}
|
|
4949
|
+
return dangling.pluginDefinitionVersion
|
|
4950
|
+
? `${dangling.pluginDefinitionKey} (${dangling.pluginDefinitionVersion})`
|
|
4951
|
+
: dangling.pluginDefinitionKey;
|
|
4952
|
+
}
|
|
4953
|
+
determineStatus(isInstalled, hasConfigurations) {
|
|
4954
|
+
if (!isInstalled) {
|
|
4955
|
+
return 'not-installed';
|
|
4956
|
+
}
|
|
4957
|
+
if (!hasConfigurations) {
|
|
4958
|
+
return 'no-configurations';
|
|
4959
|
+
}
|
|
4960
|
+
return 'available';
|
|
4961
|
+
}
|
|
4639
4962
|
getPluginTitle(pluginDefinitionKey) {
|
|
4640
4963
|
if (!pluginDefinitionKey) {
|
|
4641
4964
|
return this.translateService.instant('caseManagement.missingPluginConfigurations.unknownPlugin');
|
|
@@ -4646,8 +4969,8 @@ class CaseManagementMissingPluginConfigurationsComponent {
|
|
|
4646
4969
|
}
|
|
4647
4970
|
return translated;
|
|
4648
4971
|
}
|
|
4649
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementMissingPluginConfigurationsComponent, deps: [{ token: CaseManagementService }, { token: i2$1.ConfigurationIssueService }, { token: i2$1.GlobalNotificationService }, { token: i2.IconService }, { token:
|
|
4650
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseManagementMissingPluginConfigurationsComponent, isStandalone: true, selector: "valtimo-case-management-missing-plugin-configurations", 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@if (visible$ | async) {\n <div class=\"missing-plugin-configurations\">\n <h4 class=\"missing-plugin-configurations__title\">\n {{ 'caseManagement.missingPluginConfigurations.title' | translate }}\n </h4>\n <p class=\"missing-plugin-configurations__description\">\n {{ 'caseManagement.missingPluginConfigurations.description' | translate }}\n </p>\n\n @if (hasUnknownPluginConfigurations$ | async) {\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.missingPluginConfigurations.legacyExport.title' | translate),\n message: ('caseManagement.missingPluginConfigurations.legacyExport.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n }\n\n @if (visibleRows$ | async; as rows) {\n <div class=\"missing-plugin-configurations__rows\">\n @for (row of rows; track row.pluginDefinitionKey; let i = $index) {\n <div class=\"missing-plugin-configurations__row\" [cdsLayer]=\"1\">\n <div class=\"missing-plugin-configurations__source\">\n {{ row.pluginDefinitionTitle }}\n </div>\n <svg cdsIcon=\"arrow--right\" size=\"16\" class=\"missing-plugin-configurations__arrow\"></svg>\n @if (row.status === 'available') {\n <div class=\"missing-plugin-configurations__dropdown\" [cdsLayer]=\"2\">\n
|
|
4972
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementMissingPluginConfigurationsComponent, deps: [{ token: CaseManagementService }, { token: i2$1.ConfigurationIssueService }, { token: i3$1.ExternalPluginService }, { token: i2$1.GlobalNotificationService }, { token: i2.IconService }, { token: i3$1.PluginManagementService }, { token: i3$1.PluginTranslationService }, { token: i2$2.ActivatedRoute }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4973
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseManagementMissingPluginConfigurationsComponent, isStandalone: true, selector: "valtimo-case-management-missing-plugin-configurations", 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@if (visible$ | async) {\n <div class=\"missing-plugin-configurations\">\n <h4 class=\"missing-plugin-configurations__title\">\n {{ 'caseManagement.missingPluginConfigurations.title' | translate }}\n </h4>\n <p class=\"missing-plugin-configurations__description\">\n {{ 'caseManagement.missingPluginConfigurations.description' | translate }}\n </p>\n\n @if (hasUnknownPluginConfigurations$ | async) {\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.missingPluginConfigurations.legacyExport.title' | translate),\n message: ('caseManagement.missingPluginConfigurations.legacyExport.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n }\n\n @if (visibleRows$ | async; as rows) {\n <div class=\"missing-plugin-configurations__rows\">\n @for (row of rows; track row.pluginDefinitionKey; let i = $index) {\n <div class=\"missing-plugin-configurations__row\" [cdsLayer]=\"1\">\n <div class=\"missing-plugin-configurations__source\">\n {{ row.pluginDefinitionTitle }}\n </div>\n <svg cdsIcon=\"arrow--right\" size=\"16\" class=\"missing-plugin-configurations__arrow\"></svg>\n @if (row.status === 'available') {\n <div class=\"missing-plugin-configurations__target\">\n <div class=\"missing-plugin-configurations__dropdown\" [cdsLayer]=\"2\">\n <v-select\n [items]=\"row.selectItems\"\n [placeholder]=\"'caseManagement.missingPluginConfigurations.selectPlaceholder' | translate\"\n (selectedChange)=\"onMappingChange(i, $event)\"\n ></v-select>\n </div>\n\n @if (selectedConfigurationVersion(row, i); as mismatchedVersion) {\n <div class=\"missing-plugin-configurations__version-warning\">\n {{\n 'caseManagement.missingPluginConfigurations.externalVersionMismatchWarning'\n | translate\n : {\n selectedVersion: mismatchedVersion,\n requiredVersion: row.pluginDefinitionVersion\n }\n }}\n </div>\n }\n </div>\n } @else if (row.status === 'not-installed') {\n <div class=\"missing-plugin-configurations__unavailable missing-plugin-configurations__unavailable--error\">\n {{ 'caseManagement.missingPluginConfigurations.notInstalled' | translate }}\n </div>\n } @else if (row.status === 'no-configurations') {\n <div class=\"missing-plugin-configurations__unavailable\">\n {{ 'caseManagement.missingPluginConfigurations.noConfigurations' | translate }}\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"missing-plugin-configurations__actions\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"saving$ | async\"\n (click)=\"save()\"\n >\n {{ 'interface.save' | translate }}\n <svg cdsIcon=\"save\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n }\n </div>\n}\n", styles: [".missing-plugin-configurations{background-color:var(--cds-layer);outline:2px solid var(--cds-support-error, #da1e28);padding:24px;margin-bottom:16px;display:flex;flex-direction:column;gap:1rem}.missing-plugin-configurations__title{font-size:.875rem;font-weight:600;color:var(--cds-text-primary);margin:0}.missing-plugin-configurations__description{font-size:.875rem;color:var(--cds-text-secondary);margin:.25rem 0 0}.missing-plugin-configurations__rows{display:flex;flex-direction:column;gap:.5rem}.missing-plugin-configurations__row{display:grid;grid-template-columns:1fr 24px 1fr;gap:.5rem;align-items:center;padding:12px;background-color:var(--cds-layer)}.missing-plugin-configurations__source{font-size:.875rem;font-weight:400;padding:0 1rem;height:2.5rem;display:flex;align-items:center}.missing-plugin-configurations__arrow{fill:var(--cds-text-secondary);justify-self:center}.missing-plugin-configurations__dropdown{width:100%}.missing-plugin-configurations__target{display:flex;flex-direction:column;gap:var(--cds-spacing-02)}.missing-plugin-configurations__version-warning{font-size:.75rem;color:var(--cds-support-warning);padding:0 1rem}.missing-plugin-configurations__unavailable{font-size:.875rem;color:var(--cds-text-disabled);padding:0 1rem;height:2.5rem;display:flex;align-items:center;background-color:var(--cds-field)}.missing-plugin-configurations__unavailable--error{color:var(--cds-text-error)}.missing-plugin-configurations__actions{display:flex;justify-content:flex-end}\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: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: NotificationModule }, { kind: "component", type: i2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i7.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"] }] }); }
|
|
4651
4974
|
}
|
|
4652
4975
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementMissingPluginConfigurationsComponent, decorators: [{
|
|
4653
4976
|
type: Component,
|
|
@@ -4659,8 +4982,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
4659
4982
|
LayerModule,
|
|
4660
4983
|
NotificationModule,
|
|
4661
4984
|
SelectModule,
|
|
4662
|
-
], 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@if (visible$ | async) {\n <div class=\"missing-plugin-configurations\">\n <h4 class=\"missing-plugin-configurations__title\">\n {{ 'caseManagement.missingPluginConfigurations.title' | translate }}\n </h4>\n <p class=\"missing-plugin-configurations__description\">\n {{ 'caseManagement.missingPluginConfigurations.description' | translate }}\n </p>\n\n @if (hasUnknownPluginConfigurations$ | async) {\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.missingPluginConfigurations.legacyExport.title' | translate),\n message: ('caseManagement.missingPluginConfigurations.legacyExport.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n }\n\n @if (visibleRows$ | async; as rows) {\n <div class=\"missing-plugin-configurations__rows\">\n @for (row of rows; track row.pluginDefinitionKey; let i = $index) {\n <div class=\"missing-plugin-configurations__row\" [cdsLayer]=\"1\">\n <div class=\"missing-plugin-configurations__source\">\n {{ row.pluginDefinitionTitle }}\n </div>\n <svg cdsIcon=\"arrow--right\" size=\"16\" class=\"missing-plugin-configurations__arrow\"></svg>\n @if (row.status === 'available') {\n <div class=\"missing-plugin-configurations__dropdown\" [cdsLayer]=\"2\">\n
|
|
4663
|
-
}], ctorParameters: () => [{ type: CaseManagementService }, { type: i2$1.ConfigurationIssueService }, { type: i2$1.GlobalNotificationService }, { type: i2.IconService }, { type:
|
|
4985
|
+
], 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@if (visible$ | async) {\n <div class=\"missing-plugin-configurations\">\n <h4 class=\"missing-plugin-configurations__title\">\n {{ 'caseManagement.missingPluginConfigurations.title' | translate }}\n </h4>\n <p class=\"missing-plugin-configurations__description\">\n {{ 'caseManagement.missingPluginConfigurations.description' | translate }}\n </p>\n\n @if (hasUnknownPluginConfigurations$ | async) {\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.missingPluginConfigurations.legacyExport.title' | translate),\n message: ('caseManagement.missingPluginConfigurations.legacyExport.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n }\n\n @if (visibleRows$ | async; as rows) {\n <div class=\"missing-plugin-configurations__rows\">\n @for (row of rows; track row.pluginDefinitionKey; let i = $index) {\n <div class=\"missing-plugin-configurations__row\" [cdsLayer]=\"1\">\n <div class=\"missing-plugin-configurations__source\">\n {{ row.pluginDefinitionTitle }}\n </div>\n <svg cdsIcon=\"arrow--right\" size=\"16\" class=\"missing-plugin-configurations__arrow\"></svg>\n @if (row.status === 'available') {\n <div class=\"missing-plugin-configurations__target\">\n <div class=\"missing-plugin-configurations__dropdown\" [cdsLayer]=\"2\">\n <v-select\n [items]=\"row.selectItems\"\n [placeholder]=\"'caseManagement.missingPluginConfigurations.selectPlaceholder' | translate\"\n (selectedChange)=\"onMappingChange(i, $event)\"\n ></v-select>\n </div>\n\n @if (selectedConfigurationVersion(row, i); as mismatchedVersion) {\n <div class=\"missing-plugin-configurations__version-warning\">\n {{\n 'caseManagement.missingPluginConfigurations.externalVersionMismatchWarning'\n | translate\n : {\n selectedVersion: mismatchedVersion,\n requiredVersion: row.pluginDefinitionVersion\n }\n }}\n </div>\n }\n </div>\n } @else if (row.status === 'not-installed') {\n <div class=\"missing-plugin-configurations__unavailable missing-plugin-configurations__unavailable--error\">\n {{ 'caseManagement.missingPluginConfigurations.notInstalled' | translate }}\n </div>\n } @else if (row.status === 'no-configurations') {\n <div class=\"missing-plugin-configurations__unavailable\">\n {{ 'caseManagement.missingPluginConfigurations.noConfigurations' | translate }}\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"missing-plugin-configurations__actions\">\n <button\n cdsButton=\"primary\"\n [disabled]=\"saving$ | async\"\n (click)=\"save()\"\n >\n {{ 'interface.save' | translate }}\n <svg cdsIcon=\"save\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n }\n </div>\n}\n", styles: [".missing-plugin-configurations{background-color:var(--cds-layer);outline:2px solid var(--cds-support-error, #da1e28);padding:24px;margin-bottom:16px;display:flex;flex-direction:column;gap:1rem}.missing-plugin-configurations__title{font-size:.875rem;font-weight:600;color:var(--cds-text-primary);margin:0}.missing-plugin-configurations__description{font-size:.875rem;color:var(--cds-text-secondary);margin:.25rem 0 0}.missing-plugin-configurations__rows{display:flex;flex-direction:column;gap:.5rem}.missing-plugin-configurations__row{display:grid;grid-template-columns:1fr 24px 1fr;gap:.5rem;align-items:center;padding:12px;background-color:var(--cds-layer)}.missing-plugin-configurations__source{font-size:.875rem;font-weight:400;padding:0 1rem;height:2.5rem;display:flex;align-items:center}.missing-plugin-configurations__arrow{fill:var(--cds-text-secondary);justify-self:center}.missing-plugin-configurations__dropdown{width:100%}.missing-plugin-configurations__target{display:flex;flex-direction:column;gap:var(--cds-spacing-02)}.missing-plugin-configurations__version-warning{font-size:.75rem;color:var(--cds-support-warning);padding:0 1rem}.missing-plugin-configurations__unavailable{font-size:.875rem;color:var(--cds-text-disabled);padding:0 1rem;height:2.5rem;display:flex;align-items:center;background-color:var(--cds-field)}.missing-plugin-configurations__unavailable--error{color:var(--cds-text-error)}.missing-plugin-configurations__actions{display:flex;justify-content:flex-end}\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"] }]
|
|
4986
|
+
}], ctorParameters: () => [{ type: CaseManagementService }, { type: i2$1.ConfigurationIssueService }, { type: i3$1.ExternalPluginService }, { type: i2$1.GlobalNotificationService }, { type: i2.IconService }, { type: i3$1.PluginManagementService }, { type: i3$1.PluginTranslationService }, { type: i2$2.ActivatedRoute }, { type: i3.TranslateService }] });
|
|
4664
4987
|
|
|
4665
4988
|
/*
|
|
4666
4989
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -5069,7 +5392,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
5069
5392
|
* limitations under the License.
|
|
5070
5393
|
*/
|
|
5071
5394
|
class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent {
|
|
5072
|
-
constructor(widgetWizardService, breadcrumbService, iconService, pageTitleService, route, tabManagementService, caseWidgetManagementApiService, translateService, pageHeaderService) {
|
|
5395
|
+
constructor(widgetWizardService, breadcrumbService, iconService, pageTitleService, route, tabManagementService, tabService, caseWidgetManagementApiService, translateService, pageHeaderService) {
|
|
5073
5396
|
super(widgetWizardService);
|
|
5074
5397
|
this.widgetWizardService = widgetWizardService;
|
|
5075
5398
|
this.breadcrumbService = breadcrumbService;
|
|
@@ -5077,6 +5400,7 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5077
5400
|
this.pageTitleService = pageTitleService;
|
|
5078
5401
|
this.route = route;
|
|
5079
5402
|
this.tabManagementService = tabManagementService;
|
|
5403
|
+
this.tabService = tabService;
|
|
5080
5404
|
this.caseWidgetManagementApiService = caseWidgetManagementApiService;
|
|
5081
5405
|
this.translateService = translateService;
|
|
5082
5406
|
this.pageHeaderService = pageHeaderService;
|
|
@@ -5115,7 +5439,7 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5115
5439
|
this._refreshWidgetTabSubject$,
|
|
5116
5440
|
]).pipe(filter(([params]) => !!params), switchMap(() => this.caseWidgetManagementApiService.getWidgetConfiguration()));
|
|
5117
5441
|
this.compactMode$ = this.pageHeaderService.compactMode$;
|
|
5118
|
-
this.
|
|
5442
|
+
this._baseWidgetTypes = [
|
|
5119
5443
|
WidgetType.FIELDS,
|
|
5120
5444
|
WidgetType.COLLECTION,
|
|
5121
5445
|
WidgetType.CUSTOM,
|
|
@@ -5128,6 +5452,16 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5128
5452
|
WidgetType.IMAGE,
|
|
5129
5453
|
WidgetType.TEXT,
|
|
5130
5454
|
];
|
|
5455
|
+
/**
|
|
5456
|
+
* The selectable widget types. `external-plugin` is only offered when at least one activated
|
|
5457
|
+
* plugin configuration exposes a `case-widget` bundle. Emits the base list synchronously (never
|
|
5458
|
+
* `null`) so the wizard never shows the type before the availability check resolves.
|
|
5459
|
+
*/
|
|
5460
|
+
this.availableWidgetTypes$ = this.tabService
|
|
5461
|
+
.getExternalPluginWidgetConfigs()
|
|
5462
|
+
.pipe(map(configs => configs.length > 0
|
|
5463
|
+
? [...this._baseWidgetTypes, WidgetType.EXTERNAL_PLUGIN]
|
|
5464
|
+
: this._baseWidgetTypes), catchError(() => of(this._baseWidgetTypes)), startWith(this._baseWidgetTypes));
|
|
5131
5465
|
}
|
|
5132
5466
|
ngOnInit() {
|
|
5133
5467
|
this.setContext('case');
|
|
@@ -5152,7 +5486,10 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5152
5486
|
this._refreshWidgetTabSubject$.next(null);
|
|
5153
5487
|
}
|
|
5154
5488
|
initBreadcrumbs() {
|
|
5155
|
-
|
|
5489
|
+
combineLatest([
|
|
5490
|
+
this.caseManagementRouteParams$,
|
|
5491
|
+
this.translateService.stream('caseManagement.tabs.caseDetailsTab.title'),
|
|
5492
|
+
]).subscribe(([params, caseDetailsTitle]) => {
|
|
5156
5493
|
const route = `/case-management/case/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}`;
|
|
5157
5494
|
this.breadcrumbService.setThirdBreadcrumb({
|
|
5158
5495
|
route: [route],
|
|
@@ -5161,18 +5498,25 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5161
5498
|
});
|
|
5162
5499
|
this.breadcrumbService.setFourthBreadcrumb({
|
|
5163
5500
|
route: [`${route}/case-details`],
|
|
5164
|
-
content:
|
|
5501
|
+
content: caseDetailsTitle,
|
|
5165
5502
|
href: `${route}/case-details`,
|
|
5166
5503
|
});
|
|
5167
5504
|
});
|
|
5168
5505
|
}
|
|
5169
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementWidgetTabComponent, deps: [{ token: i1$1.WidgetWizardService }, { token: i7.BreadcrumbService }, { token: i2.IconService }, { token: i7.PageTitleService }, { token: i2$2.ActivatedRoute }, { token: TabManagementService }, { token: WIDGET_MANAGEMENT_SERVICE }, { token: i3.TranslateService }, { token: i7.PageHeaderService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5506
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementWidgetTabComponent, deps: [{ token: i1$1.WidgetWizardService }, { token: i7.BreadcrumbService }, { token: i2.IconService }, { token: i7.PageTitleService }, { token: i2$2.ActivatedRoute }, { token: TabManagementService }, { token: TabService }, { token: WIDGET_MANAGEMENT_SERVICE }, { token: i3.TranslateService }, { token: i7.PageHeaderService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5170
5507
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementWidgetTabComponent, isStandalone: true, selector: "ng-component", providers: [
|
|
5171
5508
|
{
|
|
5172
5509
|
provide: WIDGET_MANAGEMENT_SERVICE,
|
|
5173
5510
|
useClass: CaseWidgetManagementApiService,
|
|
5174
5511
|
},
|
|
5175
|
-
|
|
5512
|
+
{
|
|
5513
|
+
provide: EXTERNAL_PLUGIN_WIDGET_CONFIG_TOKEN,
|
|
5514
|
+
useFactory: (tabService) => ({
|
|
5515
|
+
getConfigOptions: () => tabService.getExternalPluginWidgetConfigs(),
|
|
5516
|
+
}),
|
|
5517
|
+
deps: [TabService],
|
|
5518
|
+
},
|
|
5519
|
+
], usesInheritance: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-widget-management\n [availableWidgetTypes]=\"availableWidgetTypes$ | async\"\n [params]=\"params$ | async\"\n></valtimo-widget-management>\n\n<valtimo-case-management-widget-tab-edit-modal\n [tabItem]=\"currentWidgetTabItem$ | async\"\n [showModal$]=\"showEditWidgetTabModal$\"\n (saveEvent)=\"refreshWidgetTab()\"\n>\n</valtimo-case-management-widget-tab-edit-modal>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <button\n cdsButton=\"tertiary\"\n [size]=\"(compactMode$ | async) ? 'sm' : 'md'\"\n (click)=\"editWidgetTab()\"\n >\n {{ 'widgetTabManagement.tab.editButton' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </button>\n </ng-template>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: CaseManagementWidgetTabEditModalComponent, selector: "valtimo-case-management-widget-tab-edit-modal", inputs: ["showModal$", "tabItem"], outputs: ["saveEvent"] }, { kind: "directive", type: RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: WidgetManagementComponent, selector: "valtimo-widget-management", inputs: ["params", "availableWidgetTypes", "disableDuplicate", "enableWidgetDivider", "singleWidget", "disableJsonEditor", "defaultWidth", "widgetWizardSteps"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5176
5520
|
}
|
|
5177
5521
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementWidgetTabComponent, decorators: [{
|
|
5178
5522
|
type: Component,
|
|
@@ -5190,8 +5534,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
5190
5534
|
provide: WIDGET_MANAGEMENT_SERVICE,
|
|
5191
5535
|
useClass: CaseWidgetManagementApiService,
|
|
5192
5536
|
},
|
|
5193
|
-
|
|
5194
|
-
|
|
5537
|
+
{
|
|
5538
|
+
provide: EXTERNAL_PLUGIN_WIDGET_CONFIG_TOKEN,
|
|
5539
|
+
useFactory: (tabService) => ({
|
|
5540
|
+
getConfigOptions: () => tabService.getExternalPluginWidgetConfigs(),
|
|
5541
|
+
}),
|
|
5542
|
+
deps: [TabService],
|
|
5543
|
+
},
|
|
5544
|
+
], 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-widget-management\n [availableWidgetTypes]=\"availableWidgetTypes$ | async\"\n [params]=\"params$ | async\"\n></valtimo-widget-management>\n\n<valtimo-case-management-widget-tab-edit-modal\n [tabItem]=\"currentWidgetTabItem$ | async\"\n [showModal$]=\"showEditWidgetTabModal$\"\n (saveEvent)=\"refreshWidgetTab()\"\n>\n</valtimo-case-management-widget-tab-edit-modal>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <button\n cdsButton=\"tertiary\"\n [size]=\"(compactMode$ | async) ? 'sm' : 'md'\"\n (click)=\"editWidgetTab()\"\n >\n {{ 'widgetTabManagement.tab.editButton' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </button>\n </ng-template>\n</ng-container>\n" }]
|
|
5545
|
+
}], ctorParameters: () => [{ type: i1$1.WidgetWizardService }, { type: i7.BreadcrumbService }, { type: i2.IconService }, { type: i7.PageTitleService }, { type: i2$2.ActivatedRoute }, { type: TabManagementService }, { type: TabService }, { type: undefined, decorators: [{
|
|
5195
5546
|
type: Inject,
|
|
5196
5547
|
args: [WIDGET_MANAGEMENT_SERVICE]
|
|
5197
5548
|
}] }, { type: i3.TranslateService }, { type: i7.PageHeaderService }] });
|
|
@@ -5448,7 +5799,7 @@ class CaseManagementActionsModalComponent {
|
|
|
5448
5799
|
this._editingItem = null;
|
|
5449
5800
|
});
|
|
5450
5801
|
}
|
|
5451
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementActionsModalComponent, deps: [{ token: StartableItemManagementService }, { token: i4
|
|
5802
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementActionsModalComponent, deps: [{ token: StartableItemManagementService }, { token: i4.ProcessLinkBuildingBlockApiService }, { token: i1$4.FormBuilder }, { token: i3.TranslateService }, { token: i2.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5452
5803
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementActionsModalComponent, isStandalone: true, selector: "valtimo-case-management-actions-modal", outputs: { configureBuildingBlockEvent: "configureBuildingBlockEvent" }, 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<cds-modal\n *ngIf=\"{showModal: showModal$ | async, editingItem: editingItem$ | async} as obs\"\n [open]=\"obs.showModal\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\">\n <h3 cdsModalHeaderHeading>{{ modalTitle }}</h3>\n\n <p cdsModalHeaderDescription>{{ modalDescription }}</p>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngIf=\"$step() === 'selectType'\">\n <div class=\"action-type-tiles\">\n <button\n class=\"action-type-tile\"\n [disabled]=\"$processItemsEmpty()\"\n [vTooltip]=\"'caseManagement.actions.modal.noProcessesAvailable' | translate\"\n [tooltipDisabled]=\"!$processItemsEmpty()\"\n (click)=\"onSelectType(StartableItemType.PROCESS)\"\n >\n <span class=\"action-type-tile__label\">\n {{ 'caseManagement.actions.type.PROCESS' | translate }}\n </span>\n <svg cdsIcon=\"flow--modeler\" size=\"20\" class=\"action-type-tile__icon\"></svg>\n </button>\n\n <button\n class=\"action-type-tile\"\n [disabled]=\"$buildingBlockItemsEmpty()\"\n [vTooltip]=\"'caseManagement.actions.modal.noBuildingBlocksAvailable' | translate\"\n [tooltipDisabled]=\"!$buildingBlockItemsEmpty()\"\n (click)=\"onSelectType(StartableItemType.BUILDING_BLOCK)\"\n >\n <span class=\"action-type-tile__label\">\n {{ 'caseManagement.actions.type.BUILDING_BLOCK' | translate }}\n </span>\n <svg cdsIcon=\"block-storage--alt\" size=\"20\" class=\"action-type-tile__icon\"></svg>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"$step() === 'selectItem'\">\n <form [formGroup]=\"formGroup\">\n <ng-container *ngIf=\"$selectedType() === StartableItemType.PROCESS\">\n <cds-combo-box\n [items]=\"(availableProcessItems$ | async) || []\"\n [label]=\"'caseManagement.actions.modal.selectProcess' | translate\"\n [placeholder]=\"'caseManagement.actions.modal.filterPlaceholder' | translate\"\n [appendInline]=\"false\"\n [dropUp]=\"false\"\n (selected)=\"onComboBoxSelected($event)\"\n >\n <cds-dropdown-list></cds-dropdown-list>\n </cds-combo-box>\n </ng-container>\n\n <ng-container *ngIf=\"$selectedType() === StartableItemType.BUILDING_BLOCK\">\n <cds-combo-box\n [items]=\"(availableBuildingBlockItems$ | async) || []\"\n [label]=\"'caseManagement.actions.modal.selectBuildingBlock' | translate\"\n [placeholder]=\"'caseManagement.actions.modal.filterPlaceholder' | translate\"\n [appendInline]=\"false\"\n [dropUp]=\"false\"\n (selected)=\"onComboBoxSelected($event)\"\n >\n <cds-dropdown-list></cds-dropdown-list>\n </cds-combo-box>\n </ng-container>\n </form>\n </ng-container>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"onCloseModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <div class=\"footer-spacer\"></div>\n\n <button\n *ngIf=\"$step() === 'selectItem' && !isEditMode\"\n cdsButton=\"secondary\"\n (click)=\"onBack()\"\n >\n {{ 'caseManagement.actions.modal.back' | translate }}\n </button>\n\n <button\n *ngIf=\"$step() === 'selectItem'\"\n cdsButton=\"primary\"\n [disabled]=\"formGroup.invalid || $saving()\"\n (click)=\"onSubmit()\"\n >\n {{ primaryButtonLabel }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".action-type-tiles{display:flex;gap:1px}.action-type-tile{display:flex;flex:1 1 0;min-width:0;flex-direction:row;justify-content:space-between;align-items:center;padding:var(--cds-spacing-05, 1rem);background-color:var(--cds-background-inverse, #393939);color:var(--cds-text-inverse, #fff);border:none;cursor:pointer;transition:background-color .15s ease}.action-type-tile:hover:not(:disabled){background-color:var(--cds-background-inverse-hover, #474747)}.action-type-tile:disabled{opacity:.5;cursor:not-allowed}.action-type-tile__icon{fill:currentColor}.action-type-tile__label{font-size:var(--cds-body-compact-01-font-size, .875rem);font-weight:400}.footer-spacer{flex:1}:host ::ng-deep cds-modal-footer .cds--modal-footer{display:flex;align-items:center}\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: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i2.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: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.TooltipDirective, selector: "[vTooltip]", inputs: ["vTooltip", "onBottom", "tooltipDisabled"] }, { kind: "ngmodule", type: ProgressIndicatorModule }, { kind: "ngmodule", type: LoadingModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5453
5804
|
}
|
|
5454
5805
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementActionsModalComponent, decorators: [{
|
|
@@ -5467,7 +5818,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
5467
5818
|
ProgressIndicatorModule,
|
|
5468
5819
|
LoadingModule,
|
|
5469
5820
|
], 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<cds-modal\n *ngIf=\"{showModal: showModal$ | async, editingItem: editingItem$ | async} as obs\"\n [open]=\"obs.showModal\"\n showFooter=\"true\"\n valtimoCdsModal\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onCloseModal()\">\n <h3 cdsModalHeaderHeading>{{ modalTitle }}</h3>\n\n <p cdsModalHeaderDescription>{{ modalDescription }}</p>\n </cds-modal-header>\n\n <section cdsModalContent [cdsLayer]=\"1\">\n <ng-container *ngIf=\"$step() === 'selectType'\">\n <div class=\"action-type-tiles\">\n <button\n class=\"action-type-tile\"\n [disabled]=\"$processItemsEmpty()\"\n [vTooltip]=\"'caseManagement.actions.modal.noProcessesAvailable' | translate\"\n [tooltipDisabled]=\"!$processItemsEmpty()\"\n (click)=\"onSelectType(StartableItemType.PROCESS)\"\n >\n <span class=\"action-type-tile__label\">\n {{ 'caseManagement.actions.type.PROCESS' | translate }}\n </span>\n <svg cdsIcon=\"flow--modeler\" size=\"20\" class=\"action-type-tile__icon\"></svg>\n </button>\n\n <button\n class=\"action-type-tile\"\n [disabled]=\"$buildingBlockItemsEmpty()\"\n [vTooltip]=\"'caseManagement.actions.modal.noBuildingBlocksAvailable' | translate\"\n [tooltipDisabled]=\"!$buildingBlockItemsEmpty()\"\n (click)=\"onSelectType(StartableItemType.BUILDING_BLOCK)\"\n >\n <span class=\"action-type-tile__label\">\n {{ 'caseManagement.actions.type.BUILDING_BLOCK' | translate }}\n </span>\n <svg cdsIcon=\"block-storage--alt\" size=\"20\" class=\"action-type-tile__icon\"></svg>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"$step() === 'selectItem'\">\n <form [formGroup]=\"formGroup\">\n <ng-container *ngIf=\"$selectedType() === StartableItemType.PROCESS\">\n <cds-combo-box\n [items]=\"(availableProcessItems$ | async) || []\"\n [label]=\"'caseManagement.actions.modal.selectProcess' | translate\"\n [placeholder]=\"'caseManagement.actions.modal.filterPlaceholder' | translate\"\n [appendInline]=\"false\"\n [dropUp]=\"false\"\n (selected)=\"onComboBoxSelected($event)\"\n >\n <cds-dropdown-list></cds-dropdown-list>\n </cds-combo-box>\n </ng-container>\n\n <ng-container *ngIf=\"$selectedType() === StartableItemType.BUILDING_BLOCK\">\n <cds-combo-box\n [items]=\"(availableBuildingBlockItems$ | async) || []\"\n [label]=\"'caseManagement.actions.modal.selectBuildingBlock' | translate\"\n [placeholder]=\"'caseManagement.actions.modal.filterPlaceholder' | translate\"\n [appendInline]=\"false\"\n [dropUp]=\"false\"\n (selected)=\"onComboBoxSelected($event)\"\n >\n <cds-dropdown-list></cds-dropdown-list>\n </cds-combo-box>\n </ng-container>\n </form>\n </ng-container>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"ghost\" (click)=\"onCloseModal()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <div class=\"footer-spacer\"></div>\n\n <button\n *ngIf=\"$step() === 'selectItem' && !isEditMode\"\n cdsButton=\"secondary\"\n (click)=\"onBack()\"\n >\n {{ 'caseManagement.actions.modal.back' | translate }}\n </button>\n\n <button\n *ngIf=\"$step() === 'selectItem'\"\n cdsButton=\"primary\"\n [disabled]=\"formGroup.invalid || $saving()\"\n (click)=\"onSubmit()\"\n >\n {{ primaryButtonLabel }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".action-type-tiles{display:flex;gap:1px}.action-type-tile{display:flex;flex:1 1 0;min-width:0;flex-direction:row;justify-content:space-between;align-items:center;padding:var(--cds-spacing-05, 1rem);background-color:var(--cds-background-inverse, #393939);color:var(--cds-text-inverse, #fff);border:none;cursor:pointer;transition:background-color .15s ease}.action-type-tile:hover:not(:disabled){background-color:var(--cds-background-inverse-hover, #474747)}.action-type-tile:disabled{opacity:.5;cursor:not-allowed}.action-type-tile__icon{fill:currentColor}.action-type-tile__label{font-size:var(--cds-body-compact-01-font-size, .875rem);font-weight:400}.footer-spacer{flex:1}:host ::ng-deep cds-modal-footer .cds--modal-footer{display:flex;align-items:center}\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"] }]
|
|
5470
|
-
}], ctorParameters: () => [{ type: StartableItemManagementService }, { type: i4
|
|
5821
|
+
}], ctorParameters: () => [{ type: StartableItemManagementService }, { type: i4.ProcessLinkBuildingBlockApiService }, { type: i1$4.FormBuilder }, { type: i3.TranslateService }, { type: i2.IconService }], propDecorators: { configureBuildingBlockEvent: [{
|
|
5471
5822
|
type: Output
|
|
5472
5823
|
}] } });
|
|
5473
5824
|
|
|
@@ -5503,6 +5854,7 @@ class CaseManagementActionsComponent {
|
|
|
5503
5854
|
this.fields$ = new BehaviorSubject([]);
|
|
5504
5855
|
this.loading$ = this.startableItemManagementService.loading$;
|
|
5505
5856
|
this.dragAndDropDisabled = signal(false);
|
|
5857
|
+
this.togglingStartableByUser = signal(false);
|
|
5506
5858
|
this.items$ = this.startableItemManagementService.items$;
|
|
5507
5859
|
this.hasEditPermissions$ = this.caseManagementRouteParams$.pipe(switchMap(params => this.editPermissionsService.hasEditPermissions(params?.caseDefinitionKey, params?.caseDefinitionVersionTag)));
|
|
5508
5860
|
this.showDeleteModal$ = this.startableItemManagementService.showDeleteModal$;
|
|
@@ -5518,6 +5870,7 @@ class CaseManagementActionsComponent {
|
|
|
5518
5870
|
type: 'danger',
|
|
5519
5871
|
},
|
|
5520
5872
|
];
|
|
5873
|
+
this._$editedBuildingBlockItem = signal(null);
|
|
5521
5874
|
this._subscriptions = new Subscription();
|
|
5522
5875
|
this.subscribeToProcessLinkEvents();
|
|
5523
5876
|
this._subscriptions.add(this.startableItemManagementService.reorderComplete$.subscribe(() => {
|
|
@@ -5556,6 +5909,18 @@ class CaseManagementActionsComponent {
|
|
|
5556
5909
|
this.startableItemManagementService.loadItems();
|
|
5557
5910
|
});
|
|
5558
5911
|
}
|
|
5912
|
+
onStartableByUserToggle(item, startableByUser) {
|
|
5913
|
+
if (item.startableByUser === startableByUser)
|
|
5914
|
+
return;
|
|
5915
|
+
this.togglingStartableByUser.set(true);
|
|
5916
|
+
this.startableItemManagementService
|
|
5917
|
+
.toggleStartableByUser(item, startableByUser)
|
|
5918
|
+
.pipe(take(1), catchError$1(() => of(null)))
|
|
5919
|
+
.subscribe(() => {
|
|
5920
|
+
this.togglingStartableByUser.set(false);
|
|
5921
|
+
this.startableItemManagementService.loadItems();
|
|
5922
|
+
});
|
|
5923
|
+
}
|
|
5559
5924
|
onConfigureBuildingBlock(request) {
|
|
5560
5925
|
this.openProcessLinkModalForBuildingBlock(request.buildingBlockDefinitionKey, request.buildingBlockDefinitionVersionTag);
|
|
5561
5926
|
}
|
|
@@ -5588,6 +5953,7 @@ class CaseManagementActionsComponent {
|
|
|
5588
5953
|
this.processLinkStateService.showModal();
|
|
5589
5954
|
}
|
|
5590
5955
|
openProcessLinkModalForBuildingBlockEdit(item) {
|
|
5956
|
+
this._$editedBuildingBlockItem.set(item);
|
|
5591
5957
|
this.processLinkStepService.setSkipBuildingBlockSelectionStep(true);
|
|
5592
5958
|
this.startableItemManagementService
|
|
5593
5959
|
.getItemProperties(item.key, item.versionTag, StartableItemType.BUILDING_BLOCK)
|
|
@@ -5645,20 +6011,23 @@ class CaseManagementActionsComponent {
|
|
|
5645
6011
|
});
|
|
5646
6012
|
}
|
|
5647
6013
|
updateBuildingBlockStartableItem(event) {
|
|
5648
|
-
const
|
|
5649
|
-
|
|
6014
|
+
const editedItem = this._$editedBuildingBlockItem();
|
|
6015
|
+
this._$editedBuildingBlockItem.set(null);
|
|
6016
|
+
if (!editedItem)
|
|
6017
|
+
return;
|
|
5650
6018
|
const request = {
|
|
5651
6019
|
type: StartableItemType.BUILDING_BLOCK,
|
|
5652
6020
|
properties: {
|
|
5653
|
-
buildingBlockDefinitionKey:
|
|
5654
|
-
buildingBlockDefinitionVersionTag:
|
|
6021
|
+
buildingBlockDefinitionKey: event.buildingBlockDefinitionKey,
|
|
6022
|
+
buildingBlockDefinitionVersionTag: event.buildingBlockDefinitionVersionTag,
|
|
5655
6023
|
inputMappings: this.normalizeMappingsForSave(event.inputMappings || [], 'input'),
|
|
5656
6024
|
outputMappings: this.normalizeMappingsForSave(event.outputMappings || [], 'output'),
|
|
5657
6025
|
pluginConfigurationMappings: event.pluginConfigurationMappings || {},
|
|
5658
6026
|
},
|
|
5659
6027
|
};
|
|
6028
|
+
// Look up the existing item by the identity it had when the modal opened — the event carries the new version.
|
|
5660
6029
|
this.startableItemManagementService
|
|
5661
|
-
.updateItem(key, versionTag, request)
|
|
6030
|
+
.updateItem(editedItem.key, editedItem.versionTag, request)
|
|
5662
6031
|
.pipe(catchError$1(() => of(null)))
|
|
5663
6032
|
.subscribe(() => {
|
|
5664
6033
|
this.startableItemManagementService.loadItems();
|
|
@@ -5690,10 +6059,16 @@ class CaseManagementActionsComponent {
|
|
|
5690
6059
|
key: '',
|
|
5691
6060
|
label: 'caseManagement.actions.columns.type',
|
|
5692
6061
|
},
|
|
6062
|
+
{
|
|
6063
|
+
viewType: ViewType.TEMPLATE,
|
|
6064
|
+
template: this.startableByUserColumnTemplate,
|
|
6065
|
+
key: '',
|
|
6066
|
+
label: 'caseManagement.actions.columns.startableByUser',
|
|
6067
|
+
},
|
|
5693
6068
|
]);
|
|
5694
6069
|
}
|
|
5695
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementActionsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i2$2.ActivatedRoute }, { token: StartableItemManagementService }, { token: i2$1.EditPermissionsService }, { token: i4
|
|
5696
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementActionsComponent, isStandalone: true, selector: "valtimo-case-management-actions", providers: [StartableItemManagementService, ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService], viewQueries: [{ propertyName: "typeColumnTemplate", first: true, predicate: ["typeColumn"], descendants: true }], 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<ng-container\n *ngIf=\"{\n routeParams: caseManagementRouteParams$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n>\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'info',\n title: '',\n message: ('caseManagement.actions.infoNotification.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n\n <valtimo-carbon-list\n *ngIf=\"{fields: fields$ | async, loading: loading$ | async, items: items$ | async} as listObs\"\n [items]=\"listObs.items\"\n [fields]=\"listObs.fields\"\n [header]=\"false\"\n [loading]=\"listObs.loading\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled() || !obs.hasEditPermissions\"\n [actionItems]=\"ACTION_ITEMS\"\n [showActionItems]=\"obs.hasEditPermissions\"\n (rowClicked)=\"onRowClicked($event)\"\n (itemsReordered)=\"onItemsReorderedEvent($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addItemButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addItemButton\"\n [description]=\"'caseManagement.actions.noResultsDescription' | translate\"\n [title]=\"'caseManagement.actions.noResults' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #typeColumn let-data=\"data\">\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"data.item.type === StartableItemType.PROCESS ? 'blue' : 'purple'\"\n >\n {{ 'caseManagement.actions.type.' + data.item.type | translate }}\n </cds-tag>\n </ng-template>\n\n <ng-template #addItemButton>\n <button\n *ngIf=\"obs.hasEditPermissions\"\n cdsButton=\"primary\"\n (click)=\"onAddItemClick()\"\n >\n {{ 'caseManagement.actions.addItem' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </ng-template>\n</ng-container>\n\n<valtimo-case-management-actions-modal\n (configureBuildingBlockEvent)=\"onConfigureBuildingBlock($event)\"\n></valtimo-case-management-actions-modal>\n\n<valtimo-process-link-modal></valtimo-process-link-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"caseManagement.actions.deleteModal.content\"\n [outputOnConfirm]=\"itemToDelete$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"caseManagement.actions.deleteModal.title\"\n (confirmEvent)=\"onDeleteConfirm($event)\"\n></valtimo-confirmation-modal>\n", styles: [":host ::ng-deep cds-inline-notification{max-inline-size:unset;margin-bottom:16px}:host ::ng-deep .cds-tag--no-margin{margin:0}\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: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: NotificationModule }, { kind: "component", type: i2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "component", type: CaseManagementActionsModalComponent, selector: "valtimo-case-management-actions-modal", outputs: ["configureBuildingBlockEvent"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "ngmodule", type: ProcessLinkModule }, { kind: "component", type: i4
|
|
6070
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementActionsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i2$2.ActivatedRoute }, { token: StartableItemManagementService }, { token: i2$1.EditPermissionsService }, { token: i4.ProcessLinkStateService }, { token: i4.ProcessLinkStepService }, { token: i4.BuildingBlockStateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6071
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementActionsComponent, isStandalone: true, selector: "valtimo-case-management-actions", providers: [StartableItemManagementService, ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService], viewQueries: [{ propertyName: "typeColumnTemplate", first: true, predicate: ["typeColumn"], descendants: true }, { propertyName: "startableByUserColumnTemplate", first: true, predicate: ["startableByUserColumn"], descendants: true }], 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<ng-container\n *ngIf=\"{\n routeParams: caseManagementRouteParams$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n>\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'info',\n title: '',\n message: ('caseManagement.actions.infoNotification.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n\n <valtimo-carbon-list\n *ngIf=\"{fields: fields$ | async, loading: loading$ | async, items: items$ | async} as listObs\"\n [items]=\"listObs.items\"\n [fields]=\"listObs.fields\"\n [header]=\"false\"\n [loading]=\"listObs.loading\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled() || !obs.hasEditPermissions\"\n [actionItems]=\"ACTION_ITEMS\"\n [showActionItems]=\"obs.hasEditPermissions\"\n (rowClicked)=\"onRowClicked($event)\"\n (itemsReordered)=\"onItemsReorderedEvent($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addItemButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addItemButton\"\n [description]=\"'caseManagement.actions.noResultsDescription' | translate\"\n [title]=\"'caseManagement.actions.noResults' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #typeColumn let-data=\"data\">\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"data.item.type === StartableItemType.PROCESS ? 'blue' : 'purple'\"\n >\n {{ 'caseManagement.actions.type.' + data.item.type | translate }}\n </cds-tag>\n </ng-template>\n\n <!-- Processes are always startable while listed here; only building block\n links can stay linked (and runnable by the application) while hidden\n from the start menu. -->\n <ng-template #startableByUserColumn let-data=\"data\">\n <div\n *ngIf=\"data.item.type === StartableItemType.BUILDING_BLOCK\"\n class=\"startable-by-user-toggle\"\n (click)=\"$event.stopPropagation()\"\n >\n <cds-toggle\n size=\"sm\"\n [label]=\"'caseManagement.actions.visibleInStartMenu' | translate\"\n [hideLabel]=\"true\"\n [checked]=\"data.item.startableByUser\"\n [disabled]=\"togglingStartableByUser() || !obs.hasEditPermissions\"\n (checkedChange)=\"onStartableByUserToggle(data.item, $event)\"\n ></cds-toggle>\n </div>\n </ng-template>\n\n <ng-template #addItemButton>\n <button\n *ngIf=\"obs.hasEditPermissions\"\n cdsButton=\"primary\"\n (click)=\"onAddItemClick()\"\n >\n {{ 'caseManagement.actions.addItem' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </ng-template>\n</ng-container>\n\n<valtimo-case-management-actions-modal\n (configureBuildingBlockEvent)=\"onConfigureBuildingBlock($event)\"\n></valtimo-case-management-actions-modal>\n\n<valtimo-process-link-modal></valtimo-process-link-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"caseManagement.actions.deleteModal.content\"\n [outputOnConfirm]=\"itemToDelete$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"caseManagement.actions.deleteModal.title\"\n (confirmEvent)=\"onDeleteConfirm($event)\"\n></valtimo-confirmation-modal>\n", styles: [":host ::ng-deep cds-inline-notification{max-inline-size:unset;margin-bottom:16px}:host ::ng-deep .cds-tag--no-margin{margin:0}:host ::ng-deep .startable-by-user-toggle{display:flex;align-items:center;height:100%}:host ::ng-deep .startable-by-user-toggle .cds--form-item{margin:0;flex:none}:host ::ng-deep .startable-by-user-toggle .cds--toggle__label{margin:0}\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: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: NotificationModule }, { kind: "component", type: i2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "ngmodule", type: ToggleModule }, { kind: "component", type: i2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "ariaLabel", "skeleton"] }, { kind: "component", type: CaseManagementActionsModalComponent, selector: "valtimo-case-management-actions-modal", outputs: ["configureBuildingBlockEvent"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "ngmodule", type: ProcessLinkModule }, { kind: "component", type: i4.ProcessLinkModalComponent, selector: "valtimo-process-link-modal" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5697
6072
|
}
|
|
5698
6073
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementActionsComponent, decorators: [{
|
|
5699
6074
|
type: Component,
|
|
@@ -5705,13 +6080,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
5705
6080
|
IconModule,
|
|
5706
6081
|
NotificationModule,
|
|
5707
6082
|
TagModule,
|
|
6083
|
+
ToggleModule,
|
|
5708
6084
|
CaseManagementActionsModalComponent,
|
|
5709
6085
|
ConfirmationModalModule,
|
|
5710
6086
|
ProcessLinkModule,
|
|
5711
|
-
], providers: [StartableItemManagementService, ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService], 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<ng-container\n *ngIf=\"{\n routeParams: caseManagementRouteParams$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n>\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'info',\n title: '',\n message: ('caseManagement.actions.infoNotification.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n\n <valtimo-carbon-list\n *ngIf=\"{fields: fields$ | async, loading: loading$ | async, items: items$ | async} as listObs\"\n [items]=\"listObs.items\"\n [fields]=\"listObs.fields\"\n [header]=\"false\"\n [loading]=\"listObs.loading\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled() || !obs.hasEditPermissions\"\n [actionItems]=\"ACTION_ITEMS\"\n [showActionItems]=\"obs.hasEditPermissions\"\n (rowClicked)=\"onRowClicked($event)\"\n (itemsReordered)=\"onItemsReorderedEvent($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addItemButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addItemButton\"\n [description]=\"'caseManagement.actions.noResultsDescription' | translate\"\n [title]=\"'caseManagement.actions.noResults' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #typeColumn let-data=\"data\">\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"data.item.type === StartableItemType.PROCESS ? 'blue' : 'purple'\"\n >\n {{ 'caseManagement.actions.type.' + data.item.type | translate }}\n </cds-tag>\n </ng-template>\n\n <ng-template #addItemButton>\n <button\n *ngIf=\"obs.hasEditPermissions\"\n cdsButton=\"primary\"\n (click)=\"onAddItemClick()\"\n >\n {{ 'caseManagement.actions.addItem' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </ng-template>\n</ng-container>\n\n<valtimo-case-management-actions-modal\n (configureBuildingBlockEvent)=\"onConfigureBuildingBlock($event)\"\n></valtimo-case-management-actions-modal>\n\n<valtimo-process-link-modal></valtimo-process-link-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"caseManagement.actions.deleteModal.content\"\n [outputOnConfirm]=\"itemToDelete$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"caseManagement.actions.deleteModal.title\"\n (confirmEvent)=\"onDeleteConfirm($event)\"\n></valtimo-confirmation-modal>\n", styles: [":host ::ng-deep cds-inline-notification{max-inline-size:unset;margin-bottom:16px}:host ::ng-deep .cds-tag--no-margin{margin:0}\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"] }]
|
|
5712
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i2$2.ActivatedRoute }, { type: StartableItemManagementService }, { type: i2$1.EditPermissionsService }, { type: i4
|
|
6087
|
+
], providers: [StartableItemManagementService, ProcessLinkStateService, ProcessLinkStepService, ProcessLinkButtonService], 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<ng-container\n *ngIf=\"{\n routeParams: caseManagementRouteParams$ | async,\n hasEditPermissions: hasEditPermissions$ | async,\n } as obs\"\n>\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'info',\n title: '',\n message: ('caseManagement.actions.infoNotification.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n\n <valtimo-carbon-list\n *ngIf=\"{fields: fields$ | async, loading: loading$ | async, items: items$ | async} as listObs\"\n [items]=\"listObs.items\"\n [fields]=\"listObs.fields\"\n [header]=\"false\"\n [loading]=\"listObs.loading\"\n [dragAndDrop]=\"true\"\n [dragAndDropDisabled]=\"dragAndDropDisabled() || !obs.hasEditPermissions\"\n [actionItems]=\"ACTION_ITEMS\"\n [showActionItems]=\"obs.hasEditPermissions\"\n (rowClicked)=\"onRowClicked($event)\"\n (itemsReordered)=\"onItemsReorderedEvent($event)\"\n >\n <ng-container carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addItemButton\"></ng-container>\n </ng-container>\n\n <valtimo-no-results\n [action]=\"addItemButton\"\n [description]=\"'caseManagement.actions.noResultsDescription' | translate\"\n [title]=\"'caseManagement.actions.noResults' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n\n <ng-template #typeColumn let-data=\"data\">\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"data.item.type === StartableItemType.PROCESS ? 'blue' : 'purple'\"\n >\n {{ 'caseManagement.actions.type.' + data.item.type | translate }}\n </cds-tag>\n </ng-template>\n\n <!-- Processes are always startable while listed here; only building block\n links can stay linked (and runnable by the application) while hidden\n from the start menu. -->\n <ng-template #startableByUserColumn let-data=\"data\">\n <div\n *ngIf=\"data.item.type === StartableItemType.BUILDING_BLOCK\"\n class=\"startable-by-user-toggle\"\n (click)=\"$event.stopPropagation()\"\n >\n <cds-toggle\n size=\"sm\"\n [label]=\"'caseManagement.actions.visibleInStartMenu' | translate\"\n [hideLabel]=\"true\"\n [checked]=\"data.item.startableByUser\"\n [disabled]=\"togglingStartableByUser() || !obs.hasEditPermissions\"\n (checkedChange)=\"onStartableByUserToggle(data.item, $event)\"\n ></cds-toggle>\n </div>\n </ng-template>\n\n <ng-template #addItemButton>\n <button\n *ngIf=\"obs.hasEditPermissions\"\n cdsButton=\"primary\"\n (click)=\"onAddItemClick()\"\n >\n {{ 'caseManagement.actions.addItem' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </ng-template>\n</ng-container>\n\n<valtimo-case-management-actions-modal\n (configureBuildingBlockEvent)=\"onConfigureBuildingBlock($event)\"\n></valtimo-case-management-actions-modal>\n\n<valtimo-process-link-modal></valtimo-process-link-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"caseManagement.actions.deleteModal.content\"\n [outputOnConfirm]=\"itemToDelete$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"caseManagement.actions.deleteModal.title\"\n (confirmEvent)=\"onDeleteConfirm($event)\"\n></valtimo-confirmation-modal>\n", styles: [":host ::ng-deep cds-inline-notification{max-inline-size:unset;margin-bottom:16px}:host ::ng-deep .cds-tag--no-margin{margin:0}:host ::ng-deep .startable-by-user-toggle{display:flex;align-items:center;height:100%}:host ::ng-deep .startable-by-user-toggle .cds--form-item{margin:0;flex:none}:host ::ng-deep .startable-by-user-toggle .cds--toggle__label{margin:0}\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"] }]
|
|
6088
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i2$2.ActivatedRoute }, { type: StartableItemManagementService }, { type: i2$1.EditPermissionsService }, { type: i4.ProcessLinkStateService }, { type: i4.ProcessLinkStepService }, { type: i4.BuildingBlockStateService }], propDecorators: { typeColumnTemplate: [{
|
|
5713
6089
|
type: ViewChild,
|
|
5714
6090
|
args: ['typeColumn']
|
|
6091
|
+
}], startableByUserColumnTemplate: [{
|
|
6092
|
+
type: ViewChild,
|
|
6093
|
+
args: ['startableByUserColumn']
|
|
5715
6094
|
}] } });
|
|
5716
6095
|
|
|
5717
6096
|
/*
|
|
@@ -5809,12 +6188,13 @@ class CaseManagementUploadComponent {
|
|
|
5809
6188
|
get nameControl() {
|
|
5810
6189
|
return this.configureForm.get('name');
|
|
5811
6190
|
}
|
|
5812
|
-
constructor(caseManagementService, fb, translateService, pluginManagementService, pluginTranslationService) {
|
|
6191
|
+
constructor(caseManagementService, fb, translateService, pluginManagementService, pluginTranslationService, externalPluginService) {
|
|
5813
6192
|
this.caseManagementService = caseManagementService;
|
|
5814
6193
|
this.fb = fb;
|
|
5815
6194
|
this.translateService = translateService;
|
|
5816
6195
|
this.pluginManagementService = pluginManagementService;
|
|
5817
6196
|
this.pluginTranslationService = pluginTranslationService;
|
|
6197
|
+
this.externalPluginService = externalPluginService;
|
|
5818
6198
|
this.open = false;
|
|
5819
6199
|
this.closeModal = new EventEmitter();
|
|
5820
6200
|
this.testIds = CASE_MANAGEMENT_UPLOAD_TEST_IDS;
|
|
@@ -5923,6 +6303,22 @@ class CaseManagementUploadComponent {
|
|
|
5923
6303
|
trackBySourceId(_index, row) {
|
|
5924
6304
|
return row.sourcePluginConfigurationId;
|
|
5925
6305
|
}
|
|
6306
|
+
/**
|
|
6307
|
+
* The actual definition version of the currently selected external configuration for [row],
|
|
6308
|
+
* `null` when the selection is an exact `pluginId@version` match or the row has no selection
|
|
6309
|
+
* (D3 non-blocking warning). Reads the live form control value so the warning stays in sync as
|
|
6310
|
+
* the admin changes the dropdown selection.
|
|
6311
|
+
*/
|
|
6312
|
+
selectedConfigurationVersion(row) {
|
|
6313
|
+
if (row.mismatchedVersionsById.size === 0) {
|
|
6314
|
+
return null;
|
|
6315
|
+
}
|
|
6316
|
+
const selectedId = this.pluginMappingForm.get(row.sourcePluginConfigurationId)?.value;
|
|
6317
|
+
if (!selectedId) {
|
|
6318
|
+
return null;
|
|
6319
|
+
}
|
|
6320
|
+
return row.mismatchedVersionsById.get(selectedId) ?? null;
|
|
6321
|
+
}
|
|
5926
6322
|
/**
|
|
5927
6323
|
* Works around a carbon-components-angular bug where clearing a single-select
|
|
5928
6324
|
* cds-combo-box with itemValueKey set writes `[]` to the FormControl instead
|
|
@@ -5967,7 +6363,11 @@ class CaseManagementUploadComponent {
|
|
|
5967
6363
|
loadPluginMappingRows(pluginConfigs) {
|
|
5968
6364
|
const uniqueById = new Map();
|
|
5969
6365
|
for (const config of pluginConfigs) {
|
|
5970
|
-
|
|
6366
|
+
// One row per configuration id, but never let a key-less contribution (e.g. an external
|
|
6367
|
+
// plugin case tab) shadow a mappable one (a process link) for the same configuration —
|
|
6368
|
+
// key-less rows are filtered out below, which would hide the mapping choice entirely.
|
|
6369
|
+
const existing = uniqueById.get(config.pluginConfigurationId);
|
|
6370
|
+
if (!existing || (existing.pluginDefinitionKey === null && config.pluginDefinitionKey !== null)) {
|
|
5971
6371
|
uniqueById.set(config.pluginConfigurationId, config);
|
|
5972
6372
|
}
|
|
5973
6373
|
}
|
|
@@ -5982,40 +6382,50 @@ class CaseManagementUploadComponent {
|
|
|
5982
6382
|
this.pluginMappingRows$.next([]);
|
|
5983
6383
|
return;
|
|
5984
6384
|
}
|
|
5985
|
-
|
|
5986
|
-
|
|
5987
|
-
|
|
6385
|
+
const embeddedConfigs = uniqueConfigs.filter(c => (c.source ?? 'embedded') === 'embedded');
|
|
6386
|
+
const externalConfigs = uniqueConfigs.filter(c => c.source === 'external');
|
|
6387
|
+
combineLatest([
|
|
6388
|
+
this.loadEmbeddedMappingRows(embeddedConfigs),
|
|
6389
|
+
this.loadExternalMappingRows(externalConfigs),
|
|
6390
|
+
])
|
|
5988
6391
|
.pipe(take$1(1))
|
|
5989
|
-
.subscribe(
|
|
5990
|
-
|
|
5991
|
-
|
|
6392
|
+
.subscribe(([embeddedRows, externalRows]) => {
|
|
6393
|
+
this.clearPluginMappingForm();
|
|
6394
|
+
const rows = [...embeddedRows, ...externalRows];
|
|
6395
|
+
for (const row of rows) {
|
|
6396
|
+
if (row.status === 'available') {
|
|
6397
|
+
this.pluginMappingForm.addControl(row.sourcePluginConfigurationId, this.fb.control(row.listItems.find(item => item.selected)?.id ?? null));
|
|
6398
|
+
}
|
|
6399
|
+
}
|
|
6400
|
+
this.pluginMappingRows$.next(rows);
|
|
5992
6401
|
});
|
|
5993
6402
|
}
|
|
5994
|
-
|
|
5995
|
-
|
|
5996
|
-
|
|
5997
|
-
];
|
|
5998
|
-
const installableKeys = uniqueDefinitionKeys.filter(k => installedKeys.has(k));
|
|
5999
|
-
if (installableKeys.length === 0) {
|
|
6000
|
-
this.buildMappingRows(uniqueConfigs, new Map(), installedKeys);
|
|
6001
|
-
return;
|
|
6002
|
-
}
|
|
6003
|
-
const configRequests = {};
|
|
6004
|
-
for (const key of installableKeys) {
|
|
6005
|
-
configRequests[key] = this.pluginManagementService
|
|
6006
|
-
.getPluginConfigurationsByPluginDefinitionKey(key)
|
|
6007
|
-
.pipe(take$1(1));
|
|
6403
|
+
loadEmbeddedMappingRows(uniqueConfigs) {
|
|
6404
|
+
if (uniqueConfigs.length === 0) {
|
|
6405
|
+
return of([]);
|
|
6008
6406
|
}
|
|
6009
|
-
|
|
6010
|
-
.
|
|
6011
|
-
|
|
6012
|
-
|
|
6013
|
-
|
|
6014
|
-
|
|
6407
|
+
return this.pluginManagementService.getPluginDefinitions().pipe(take$1(1), switchMap(definitions => {
|
|
6408
|
+
const installedKeys = new Set(definitions.map(d => d.key));
|
|
6409
|
+
const installableKeys = [
|
|
6410
|
+
...new Set(uniqueConfigs.map(c => c.pluginDefinitionKey).filter(Boolean)),
|
|
6411
|
+
].filter(key => installedKeys.has(key));
|
|
6412
|
+
if (installableKeys.length === 0) {
|
|
6413
|
+
return of(this.buildEmbeddedRows(uniqueConfigs, new Map(), installedKeys));
|
|
6414
|
+
}
|
|
6415
|
+
const configRequests = {};
|
|
6416
|
+
for (const key of installableKeys) {
|
|
6417
|
+
configRequests[key] = this.pluginManagementService
|
|
6418
|
+
.getPluginConfigurationsByPluginDefinitionKey(key)
|
|
6419
|
+
.pipe(take$1(1));
|
|
6420
|
+
}
|
|
6421
|
+
return forkJoin(configRequests).pipe(take$1(1), map(results => {
|
|
6422
|
+
const configsByKey = new Map(Object.entries(results));
|
|
6423
|
+
return this.buildEmbeddedRows(uniqueConfigs, configsByKey, installedKeys);
|
|
6424
|
+
}));
|
|
6425
|
+
}));
|
|
6015
6426
|
}
|
|
6016
|
-
|
|
6017
|
-
|
|
6018
|
-
const rows = uniqueConfigs.map(config => {
|
|
6427
|
+
buildEmbeddedRows(uniqueConfigs, configsByKey, installedKeys) {
|
|
6428
|
+
return uniqueConfigs.map(config => {
|
|
6019
6429
|
const key = config.pluginDefinitionKey;
|
|
6020
6430
|
const isInstalled = key ? installedKeys.has(key) : false;
|
|
6021
6431
|
const available = configsByKey.get(key) || [];
|
|
@@ -6037,9 +6447,6 @@ class CaseManagementUploadComponent {
|
|
|
6037
6447
|
id: c.id,
|
|
6038
6448
|
selected: c.id === defaultSelectionId,
|
|
6039
6449
|
}));
|
|
6040
|
-
if (status === 'available') {
|
|
6041
|
-
this.pluginMappingForm.addControl(config.pluginConfigurationId, this.fb.control(defaultSelectionId));
|
|
6042
|
-
}
|
|
6043
6450
|
return {
|
|
6044
6451
|
pluginDefinitionKey: key,
|
|
6045
6452
|
pluginDefinitionTitle: this.getPluginTitle(key),
|
|
@@ -6047,9 +6454,84 @@ class CaseManagementUploadComponent {
|
|
|
6047
6454
|
existsInTargetEnvironment: config.existsInTargetEnvironment,
|
|
6048
6455
|
listItems,
|
|
6049
6456
|
status,
|
|
6457
|
+
source: 'embedded',
|
|
6458
|
+
pluginDefinitionVersion: null,
|
|
6459
|
+
mismatchedVersionsById: new Map(),
|
|
6050
6460
|
};
|
|
6051
6461
|
});
|
|
6052
|
-
|
|
6462
|
+
}
|
|
6463
|
+
loadExternalMappingRows(uniqueConfigs) {
|
|
6464
|
+
if (uniqueConfigs.length === 0) {
|
|
6465
|
+
return of([]);
|
|
6466
|
+
}
|
|
6467
|
+
return combineLatest([
|
|
6468
|
+
this.externalPluginService
|
|
6469
|
+
.getConfigurations()
|
|
6470
|
+
.pipe(catchError(() => of([]))),
|
|
6471
|
+
this.externalPluginService
|
|
6472
|
+
.getDefinitions()
|
|
6473
|
+
.pipe(catchError(() => of([]))),
|
|
6474
|
+
]).pipe(take$1(1), map(([configurations, definitions]) => {
|
|
6475
|
+
const definitionById = new Map(definitions.map(d => [d.id, d]));
|
|
6476
|
+
const lang = this.translateService.currentLang;
|
|
6477
|
+
return uniqueConfigs.map(config => {
|
|
6478
|
+
const matchingConfigurations = configurations.filter(configuration => {
|
|
6479
|
+
const definition = definitionById.get(configuration.definitionId);
|
|
6480
|
+
return definition?.pluginId === config.pluginDefinitionKey;
|
|
6481
|
+
});
|
|
6482
|
+
let status;
|
|
6483
|
+
if (matchingConfigurations.length === 0) {
|
|
6484
|
+
status = definitionById.size > 0 &&
|
|
6485
|
+
[...definitionById.values()].some(d => d.pluginId === config.pluginDefinitionKey)
|
|
6486
|
+
? 'no-configurations'
|
|
6487
|
+
: 'not-installed';
|
|
6488
|
+
}
|
|
6489
|
+
else {
|
|
6490
|
+
status = 'available';
|
|
6491
|
+
}
|
|
6492
|
+
const defaultSelectionId = config.existsInTargetEnvironment
|
|
6493
|
+
? config.pluginConfigurationId
|
|
6494
|
+
: null;
|
|
6495
|
+
const mismatchedVersionsById = new Map();
|
|
6496
|
+
const listItems = matchingConfigurations.map(configuration => {
|
|
6497
|
+
const definition = definitionById.get(configuration.definitionId);
|
|
6498
|
+
if (definition && definition.version !== config.pluginDefinitionVersion) {
|
|
6499
|
+
mismatchedVersionsById.set(configuration.id, definition.version);
|
|
6500
|
+
}
|
|
6501
|
+
return {
|
|
6502
|
+
content: definition
|
|
6503
|
+
? `${configuration.title} — ${getExternalPluginDisplayName(definition, lang)}`
|
|
6504
|
+
: configuration.title,
|
|
6505
|
+
id: configuration.id,
|
|
6506
|
+
selected: configuration.id === defaultSelectionId,
|
|
6507
|
+
};
|
|
6508
|
+
});
|
|
6509
|
+
return {
|
|
6510
|
+
pluginDefinitionKey: config.pluginDefinitionKey,
|
|
6511
|
+
pluginDefinitionTitle: this.getExternalPluginTitle(config, definitionById),
|
|
6512
|
+
sourcePluginConfigurationId: config.pluginConfigurationId,
|
|
6513
|
+
existsInTargetEnvironment: config.existsInTargetEnvironment,
|
|
6514
|
+
listItems,
|
|
6515
|
+
status,
|
|
6516
|
+
source: 'external',
|
|
6517
|
+
pluginDefinitionVersion: config.pluginDefinitionVersion ?? null,
|
|
6518
|
+
mismatchedVersionsById,
|
|
6519
|
+
};
|
|
6520
|
+
});
|
|
6521
|
+
}));
|
|
6522
|
+
}
|
|
6523
|
+
getExternalPluginTitle(config, definitionById) {
|
|
6524
|
+
if (!config.pluginDefinitionKey) {
|
|
6525
|
+
return this.translateService.instant('caseManagement.importDefinition.plugins.unknownPlugin');
|
|
6526
|
+
}
|
|
6527
|
+
const lang = this.translateService.currentLang;
|
|
6528
|
+
const matchingDefinition = [...definitionById.values()].find(d => d.pluginId === config.pluginDefinitionKey && d.version === config.pluginDefinitionVersion);
|
|
6529
|
+
if (matchingDefinition) {
|
|
6530
|
+
return getExternalPluginDisplayName(matchingDefinition, lang);
|
|
6531
|
+
}
|
|
6532
|
+
return config.pluginDefinitionVersion
|
|
6533
|
+
? `${config.pluginDefinitionKey} (${config.pluginDefinitionVersion})`
|
|
6534
|
+
: config.pluginDefinitionKey;
|
|
6053
6535
|
}
|
|
6054
6536
|
clearPluginMappingForm() {
|
|
6055
6537
|
for (const key of Object.keys(this.pluginMappingForm.controls)) {
|
|
@@ -6126,13 +6608,15 @@ class CaseManagementUploadComponent {
|
|
|
6126
6608
|
buildPluginConfigurationMappings() {
|
|
6127
6609
|
const mappings = {};
|
|
6128
6610
|
for (const row of this.pluginMappingRows$.value) {
|
|
6611
|
+
// Only rows the user could actually act on are sent. An explicit null tells the importer
|
|
6612
|
+
// to clear the configuration id (a deliberate dangling import); omitting the key keeps the
|
|
6613
|
+
// original id. Rows without a dropdown (plugin not installed / no configurations — possibly
|
|
6614
|
+
// a transient lookup failure) must not silently clear ids: a cleared id disappears from the
|
|
6615
|
+
// next export's import preview, making the mapping unrecoverable through the wizard.
|
|
6129
6616
|
if (row.status === 'available') {
|
|
6130
6617
|
const control = this.pluginMappingForm.get(row.sourcePluginConfigurationId);
|
|
6131
6618
|
mappings[row.sourcePluginConfigurationId] = control?.value ?? null;
|
|
6132
6619
|
}
|
|
6133
|
-
else {
|
|
6134
|
-
mappings[row.sourcePluginConfigurationId] = null;
|
|
6135
|
-
}
|
|
6136
6620
|
}
|
|
6137
6621
|
return mappings;
|
|
6138
6622
|
}
|
|
@@ -6152,13 +6636,13 @@ class CaseManagementUploadComponent {
|
|
|
6152
6636
|
this.clearPluginMappingForm();
|
|
6153
6637
|
}, CARBON_CONSTANTS.modalAnimationMs);
|
|
6154
6638
|
}
|
|
6155
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementUploadComponent, deps: [{ token: CaseManagementService }, { token: i1$4.FormBuilder }, { token: i3.TranslateService }, { token:
|
|
6156
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementUploadComponent, isStandalone: false, selector: "valtimo-case-management-upload", inputs: { open: "open" }, outputs: { closeModal: "closeModal" }, 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<cds-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async,\n preview: preview$ | async,\n importWarning: importWarning$ | async,\n } as obs\"\n valtimoCdsModal\n [open]=\"open\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'caseManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section\n [ngSwitch]=\"obs.activeStep\"\n [cdsLayer]=\"1\"\n cdsModalContent\n class=\"valtimo-definition-uploader__content\"\n >\n <ng-template ngSwitchDefault>\n <valtimo-case-management-upload-step\n [message]=\"\n 'caseManagement.importDefinition.steps.' + obs.activeStep + '.message' | translate\n \"\n [title]=\"'caseManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-case-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'caseManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'caseManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'caseManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n [attr.data-test-id]=\"testIds.fileUploader\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n </form>\n\n <form\n *ngSwitchCase=\"UPLOAD_STEP.CONFIGURE\"\n [formGroup]=\"configureForm\"\n class=\"valtimo-definition-uploader__configure\"\n >\n <cds-label>\n {{ 'caseManagement.createDefinition.name' | translate }}\n <input\n formControlName=\"name\"\n cdsText\n [attr.data-test-id]=\"testIds.nameInput\"\n />\n </cds-label>\n\n <valtimo-auto-key-input\n [mode]=\"'add'\"\n [sourceText]=\"nameControl.value\"\n formControlName=\"caseDefinitionKey\"\n labelTranslationKey=\"caseManagement.createDefinition.key\"\n >\n </valtimo-auto-key-input>\n\n <div class=\"valtimo-definition-uploader__version-label\">\n <label class=\"cds--label\">\n {{ 'caseManagement.createDefinition.version' | translate }}\n </label>\n <div\n class=\"valtimo-definition-uploader__version-field\"\n [attr.data-test-id]=\"testIds.versionTag\"\n >\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"obs.preview?.isFinal ? 'green' : 'red'\">\n {{\n (obs.preview?.isFinal\n ? 'caseManagement.importDefinition.configure.finalTag'\n : 'caseManagement.importDefinition.configure.draftTag'\n ) | translate\n }}\n </cds-tag>\n <span>{{ obs.preview?.versionTag }}</span>\n </div>\n </div>\n\n <ng-container [ngSwitch]=\"obs.importWarning\">\n <cds-inline-notification\n *ngSwitchCase=\"IMPORT_WARNING.NEW_VERSION\"\n [notificationObj]=\"{\n type: 'info',\n title: ('caseManagement.importDefinition.configure.newVersionWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.newVersionWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n\n <ng-container *ngSwitchCase=\"IMPORT_WARNING.EXISTING_DRAFT\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.importDefinition.configure.existingDraftWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.existingDraftWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n <cds-checkbox\n [attr.data-test-id]=\"testIds.overrideCheckbox\"\n (checkedChange)=\"overrideConfirmed$.next($event)\"\n >\n {{\n 'caseManagement.importDefinition.configure.overrideConfirm' | translate\n }}\n </cds-checkbox>\n </ng-container>\n\n <cds-inline-notification\n *ngSwitchCase=\"IMPORT_WARNING.EXISTING_FINAL\"\n [notificationObj]=\"{\n type: 'error',\n title: ('caseManagement.importDefinition.configure.existingFinalWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.existingFinalWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </ng-container>\n </form>\n\n <div\n *ngSwitchCase=\"UPLOAD_STEP.PLUGINS\"\n [formGroup]=\"pluginMappingForm\"\n class=\"valtimo-definition-uploader__plugins\"\n >\n <p class=\"valtimo-definition-uploader__plugins-description\">\n {{ 'caseManagement.importDefinition.plugins.description' | translate }}\n </p>\n\n <ng-container *ngIf=\"hasUnidentifiablePlugins$ | async\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.importDefinition.plugins.unidentifiable.title' | translate),\n message: ('caseManagement.importDefinition.plugins.unidentifiable.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </ng-container>\n\n <ng-container *ngIf=\"(pluginMappingRows$ | async)?.length > 0; else noPlugins\">\n <div class=\"valtimo-definition-uploader__plugins-header\">\n <span>{{ 'caseManagement.importDefinition.plugins.source' | translate }}</span>\n <span></span>\n <span>{{ 'caseManagement.importDefinition.plugins.target' | translate }}</span>\n </div>\n\n <div\n *ngFor=\"let row of pluginMappingRows$ | async; trackBy: trackBySourceId\"\n class=\"valtimo-definition-uploader__plugins-row\"\n [cdsLayer]=\"1\"\n [attr.data-test-id]=\"testIds.pluginMappingRow\"\n >\n <div class=\"valtimo-definition-uploader__plugins-source\">\n {{ row.pluginDefinitionTitle }}\n </div>\n <svg\n class=\"valtimo-definition-uploader__plugins-arrow\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 32 32\"\n >\n <path d=\"M18 6l-1.4 1.4L24.2 15H4v2h20.2l-7.6 7.6L18 26l10-10z\" />\n </svg>\n <cds-combo-box\n *ngIf=\"row.status === 'available'\"\n [attr.data-test-id]=\"testIds.pluginMappingDropdown\"\n [items]=\"row.listItems\"\n itemValueKey=\"id\"\n [formControlName]=\"row.sourcePluginConfigurationId\"\n [placeholder]=\"'caseManagement.importDefinition.plugins.selectPlaceholder' | translate\"\n [cdsLayer]=\"2\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n (clear)=\"onPluginMappingClear(row.sourcePluginConfigurationId)\"\n >\n <cds-dropdown-list></cds-dropdown-list>\n </cds-combo-box>\n <div *ngIf=\"row.status === 'not-installed'\" class=\"valtimo-definition-uploader__plugins-unavailable valtimo-definition-uploader__plugins-unavailable--error\">\n {{ 'caseManagement.importDefinition.plugins.notInstalled' | translate }}\n </div>\n <div *ngIf=\"row.status === 'no-configurations'\" class=\"valtimo-definition-uploader__plugins-unavailable\">\n {{ 'caseManagement.importDefinition.plugins.noConfigurations' | translate }}\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPlugins>\n <ng-container *ngIf=\"!(hasUnidentifiablePlugins$ | async)\">\n <valtimo-case-management-upload-step\n [message]=\"'caseManagement.importDefinition.plugins.noPlugins' | translate\"\n [title]=\"'caseManagement.importDefinition.plugins.noPluginsTitle' | translate\"\n [illustration]=\"'valtimo-layout/img/plugins.svg'\"\n >\n </valtimo-case-management-upload-step>\n </ng-container>\n </ng-template>\n </div>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'caseManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"'caseManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.FILE_SELECT\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n cdsButton=\"secondary\"\n [attr.data-test-id]=\"testIds.cancelButton\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.DASHBOARD\"\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.nextButton\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.PLUGINS\n ? 'caseManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.DASHBOARD\"\n class=\"valtimo-definition-uploader__cancel\"\n [attr.data-test-id]=\"testIds.finishButton\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__configure{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__version-field{width:100%;display:flex;gap:8px;align-items:center;height:2.5rem;padding:0 1rem;background-color:var(--cds-layer-01);border-bottom:1px solid var(--cds-border-strong)}.valtimo-definition-uploader__version-field span{color:var(--cds-text-primary);font-size:.875rem;line-height:1.125rem;font-weight:400;letter-spacing:.16px}.valtimo-definition-uploader__plugins{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__plugins-description{font-size:.875rem;line-height:1.25rem;color:var(--cds-text-secondary)}.valtimo-definition-uploader__plugins-header{display:grid;grid-template-columns:1fr 24px 1fr;gap:8px;align-items:center}.valtimo-definition-uploader__plugins-header span{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.32px;color:var(--cds-text-secondary)}.valtimo-definition-uploader__plugins-row{display:grid;grid-template-columns:1fr 24px 1fr;gap:8px;align-items:center;padding:12px;background-color:var(--cds-layer)}.valtimo-definition-uploader__plugins-source{font-size:.875rem;font-weight:400;padding:0 1rem;height:2.5rem;display:flex;align-items:center}.valtimo-definition-uploader__plugins-arrow{fill:var(--cds-text-secondary);justify-self:center}.valtimo-definition-uploader__plugins-select{width:100%}.valtimo-definition-uploader__plugins-unavailable{font-size:.875rem;color:var(--cds-text-disabled);padding:0 1rem;height:2.5rem;display:flex;align-items:center}.valtimo-definition-uploader__plugins-unavailable--error{color:var(--cds-text-error)}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\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: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i2.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: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "component", type: i2.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "component", type: i2.ProgressBar, selector: "cds-progress-bar, ibm-progress-bar", inputs: ["value", "id", "label", "helperText", "max", "type", "status", "size"] }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i7.AutoKeyInputComponent, selector: "valtimo-auto-key-input", inputs: ["labelTranslationKey", "placeholderTranslationKey", "dataTestId", "name", "disabled", "defaultValue", "margin", "mode", "usedKeys", "sourceText"] }, { kind: "component", type: CaseManagementUploadStepComponent, selector: "valtimo-case-management-upload-step", inputs: ["illustration", "message", "title"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6639
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementUploadComponent, deps: [{ token: CaseManagementService }, { token: i1$4.FormBuilder }, { token: i3.TranslateService }, { token: i3$1.PluginManagementService }, { token: i3$1.PluginTranslationService }, { token: i3$1.ExternalPluginService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6640
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementUploadComponent, isStandalone: false, selector: "valtimo-case-management-upload", inputs: { open: "open" }, outputs: { closeModal: "closeModal" }, 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<cds-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async,\n preview: preview$ | async,\n importWarning: importWarning$ | async,\n } as obs\"\n valtimoCdsModal\n [open]=\"open\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'caseManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section\n [ngSwitch]=\"obs.activeStep\"\n [cdsLayer]=\"1\"\n cdsModalContent\n class=\"valtimo-definition-uploader__content\"\n >\n <ng-template ngSwitchDefault>\n <valtimo-case-management-upload-step\n [message]=\"\n 'caseManagement.importDefinition.steps.' + obs.activeStep + '.message' | translate\n \"\n [title]=\"'caseManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-case-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'caseManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'caseManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'caseManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n [attr.data-test-id]=\"testIds.fileUploader\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n </form>\n\n <form\n *ngSwitchCase=\"UPLOAD_STEP.CONFIGURE\"\n [formGroup]=\"configureForm\"\n class=\"valtimo-definition-uploader__configure\"\n >\n <cds-label>\n {{ 'caseManagement.createDefinition.name' | translate }}\n <input\n formControlName=\"name\"\n cdsText\n [attr.data-test-id]=\"testIds.nameInput\"\n />\n </cds-label>\n\n <valtimo-auto-key-input\n [mode]=\"'add'\"\n [sourceText]=\"nameControl.value\"\n formControlName=\"caseDefinitionKey\"\n labelTranslationKey=\"caseManagement.createDefinition.key\"\n >\n </valtimo-auto-key-input>\n\n <div class=\"valtimo-definition-uploader__version-label\">\n <label class=\"cds--label\">\n {{ 'caseManagement.createDefinition.version' | translate }}\n </label>\n <div\n class=\"valtimo-definition-uploader__version-field\"\n [attr.data-test-id]=\"testIds.versionTag\"\n >\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"obs.preview?.isFinal ? 'green' : 'red'\">\n {{\n (obs.preview?.isFinal\n ? 'caseManagement.importDefinition.configure.finalTag'\n : 'caseManagement.importDefinition.configure.draftTag'\n ) | translate\n }}\n </cds-tag>\n <span>{{ obs.preview?.versionTag }}</span>\n </div>\n </div>\n\n <ng-container [ngSwitch]=\"obs.importWarning\">\n <cds-inline-notification\n *ngSwitchCase=\"IMPORT_WARNING.NEW_VERSION\"\n [notificationObj]=\"{\n type: 'info',\n title: ('caseManagement.importDefinition.configure.newVersionWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.newVersionWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n\n <ng-container *ngSwitchCase=\"IMPORT_WARNING.EXISTING_DRAFT\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.importDefinition.configure.existingDraftWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.existingDraftWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n <cds-checkbox\n [attr.data-test-id]=\"testIds.overrideCheckbox\"\n (checkedChange)=\"overrideConfirmed$.next($event)\"\n >\n {{\n 'caseManagement.importDefinition.configure.overrideConfirm' | translate\n }}\n </cds-checkbox>\n </ng-container>\n\n <cds-inline-notification\n *ngSwitchCase=\"IMPORT_WARNING.EXISTING_FINAL\"\n [notificationObj]=\"{\n type: 'error',\n title: ('caseManagement.importDefinition.configure.existingFinalWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.existingFinalWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </ng-container>\n </form>\n\n <div\n *ngSwitchCase=\"UPLOAD_STEP.PLUGINS\"\n [formGroup]=\"pluginMappingForm\"\n class=\"valtimo-definition-uploader__plugins\"\n >\n <p class=\"valtimo-definition-uploader__plugins-description\">\n {{ 'caseManagement.importDefinition.plugins.description' | translate }}\n </p>\n\n <ng-container *ngIf=\"hasUnidentifiablePlugins$ | async\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.importDefinition.plugins.unidentifiable.title' | translate),\n message: ('caseManagement.importDefinition.plugins.unidentifiable.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </ng-container>\n\n <ng-container *ngIf=\"(pluginMappingRows$ | async)?.length > 0; else noPlugins\">\n <div class=\"valtimo-definition-uploader__plugins-header\">\n <span>{{ 'caseManagement.importDefinition.plugins.source' | translate }}</span>\n <span></span>\n <span>{{ 'caseManagement.importDefinition.plugins.target' | translate }}</span>\n </div>\n\n <div\n *ngFor=\"let row of pluginMappingRows$ | async; trackBy: trackBySourceId\"\n class=\"valtimo-definition-uploader__plugins-row\"\n [cdsLayer]=\"1\"\n [attr.data-test-id]=\"testIds.pluginMappingRow\"\n >\n <div class=\"valtimo-definition-uploader__plugins-source\">\n {{ row.pluginDefinitionTitle }}\n </div>\n <svg\n class=\"valtimo-definition-uploader__plugins-arrow\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 32 32\"\n >\n <path d=\"M18 6l-1.4 1.4L24.2 15H4v2h20.2l-7.6 7.6L18 26l10-10z\" />\n </svg>\n <div *ngIf=\"row.status === 'available'\" class=\"valtimo-definition-uploader__plugins-target\">\n <cds-combo-box\n [attr.data-test-id]=\"testIds.pluginMappingDropdown\"\n [items]=\"row.listItems\"\n itemValueKey=\"id\"\n [formControlName]=\"row.sourcePluginConfigurationId\"\n [placeholder]=\"'caseManagement.importDefinition.plugins.selectPlaceholder' | translate\"\n [cdsLayer]=\"2\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n (clear)=\"onPluginMappingClear(row.sourcePluginConfigurationId)\"\n >\n <cds-dropdown-list></cds-dropdown-list>\n </cds-combo-box>\n\n <div\n *ngIf=\"selectedConfigurationVersion(row) as mismatchedVersion\"\n class=\"valtimo-definition-uploader__plugins-version-warning\"\n >\n {{\n 'caseManagement.importDefinition.plugins.externalVersionMismatchWarning'\n | translate\n : {\n selectedVersion: mismatchedVersion,\n requiredVersion: row.pluginDefinitionVersion\n }\n }}\n </div>\n </div>\n <div *ngIf=\"row.status === 'not-installed'\" class=\"valtimo-definition-uploader__plugins-unavailable valtimo-definition-uploader__plugins-unavailable--error\">\n {{ 'caseManagement.importDefinition.plugins.notInstalled' | translate }}\n </div>\n <div *ngIf=\"row.status === 'no-configurations'\" class=\"valtimo-definition-uploader__plugins-unavailable\">\n {{ 'caseManagement.importDefinition.plugins.noConfigurations' | translate }}\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPlugins>\n <ng-container *ngIf=\"!(hasUnidentifiablePlugins$ | async)\">\n <valtimo-case-management-upload-step\n [message]=\"'caseManagement.importDefinition.plugins.noPlugins' | translate\"\n [title]=\"'caseManagement.importDefinition.plugins.noPluginsTitle' | translate\"\n [illustration]=\"'valtimo-layout/img/plugins.svg'\"\n >\n </valtimo-case-management-upload-step>\n </ng-container>\n </ng-template>\n </div>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'caseManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"'caseManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.FILE_SELECT\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n cdsButton=\"secondary\"\n [attr.data-test-id]=\"testIds.cancelButton\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.DASHBOARD\"\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.nextButton\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.PLUGINS\n ? 'caseManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.DASHBOARD\"\n class=\"valtimo-definition-uploader__cancel\"\n [attr.data-test-id]=\"testIds.finishButton\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__configure{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__version-field{width:100%;display:flex;gap:8px;align-items:center;height:2.5rem;padding:0 1rem;background-color:var(--cds-layer-01);border-bottom:1px solid var(--cds-border-strong)}.valtimo-definition-uploader__version-field span{color:var(--cds-text-primary);font-size:.875rem;line-height:1.125rem;font-weight:400;letter-spacing:.16px}.valtimo-definition-uploader__plugins{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__plugins-description{font-size:.875rem;line-height:1.25rem;color:var(--cds-text-secondary)}.valtimo-definition-uploader__plugins-header{display:grid;grid-template-columns:1fr 24px 1fr;gap:8px;align-items:center}.valtimo-definition-uploader__plugins-header span{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.32px;color:var(--cds-text-secondary)}.valtimo-definition-uploader__plugins-row{display:grid;grid-template-columns:1fr 24px 1fr;gap:8px;align-items:center;padding:12px;background-color:var(--cds-layer)}.valtimo-definition-uploader__plugins-source{font-size:.875rem;font-weight:400;padding:0 1rem;height:2.5rem;display:flex;align-items:center}.valtimo-definition-uploader__plugins-arrow{fill:var(--cds-text-secondary);justify-self:center}.valtimo-definition-uploader__plugins-select{width:100%}.valtimo-definition-uploader__plugins-target{display:flex;flex-direction:column;gap:var(--cds-spacing-02);align-self:center}.valtimo-definition-uploader__plugins-version-warning{font-size:.75rem;color:var(--cds-support-warning);padding:0 1rem}.valtimo-definition-uploader__plugins-unavailable{font-size:.875rem;color:var(--cds-text-disabled);padding:0 1rem;height:2.5rem;display:flex;align-items:center}.valtimo-definition-uploader__plugins-unavailable--error{color:var(--cds-text-error)}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\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: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]", inputs: ["minContentHeight"] }, { kind: "component", type: i2.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: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "component", type: i2.FileUploader, selector: "cds-file-uploader, ibm-file-uploader", inputs: ["buttonText", "buttonType", "title", "description", "accept", "multiple", "skeleton", "size", "fileItemSize", "drop", "dropText", "fileUploaderId", "files", "disabled"], outputs: ["filesChange"] }, { kind: "component", type: i2.ProgressBar, selector: "cds-progress-bar, ibm-progress-bar", inputs: ["value", "id", "label", "helperText", "max", "type", "status", "size"] }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "component", type: i7.AutoKeyInputComponent, selector: "valtimo-auto-key-input", inputs: ["labelTranslationKey", "placeholderTranslationKey", "dataTestId", "name", "disabled", "defaultValue", "margin", "mode", "usedKeys", "sourceText"] }, { kind: "component", type: CaseManagementUploadStepComponent, selector: "valtimo-case-management-upload-step", inputs: ["illustration", "message", "title"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6157
6641
|
}
|
|
6158
6642
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementUploadComponent, decorators: [{
|
|
6159
6643
|
type: Component,
|
|
6160
|
-
args: [{ standalone: false, selector: 'valtimo-case-management-upload', changeDetection: ChangeDetectionStrategy.OnPush, 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<cds-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async,\n preview: preview$ | async,\n importWarning: importWarning$ | async,\n } as obs\"\n valtimoCdsModal\n [open]=\"open\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'caseManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section\n [ngSwitch]=\"obs.activeStep\"\n [cdsLayer]=\"1\"\n cdsModalContent\n class=\"valtimo-definition-uploader__content\"\n >\n <ng-template ngSwitchDefault>\n <valtimo-case-management-upload-step\n [message]=\"\n 'caseManagement.importDefinition.steps.' + obs.activeStep + '.message' | translate\n \"\n [title]=\"'caseManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-case-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'caseManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'caseManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'caseManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n [attr.data-test-id]=\"testIds.fileUploader\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n </form>\n\n <form\n *ngSwitchCase=\"UPLOAD_STEP.CONFIGURE\"\n [formGroup]=\"configureForm\"\n class=\"valtimo-definition-uploader__configure\"\n >\n <cds-label>\n {{ 'caseManagement.createDefinition.name' | translate }}\n <input\n formControlName=\"name\"\n cdsText\n [attr.data-test-id]=\"testIds.nameInput\"\n />\n </cds-label>\n\n <valtimo-auto-key-input\n [mode]=\"'add'\"\n [sourceText]=\"nameControl.value\"\n formControlName=\"caseDefinitionKey\"\n labelTranslationKey=\"caseManagement.createDefinition.key\"\n >\n </valtimo-auto-key-input>\n\n <div class=\"valtimo-definition-uploader__version-label\">\n <label class=\"cds--label\">\n {{ 'caseManagement.createDefinition.version' | translate }}\n </label>\n <div\n class=\"valtimo-definition-uploader__version-field\"\n [attr.data-test-id]=\"testIds.versionTag\"\n >\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"obs.preview?.isFinal ? 'green' : 'red'\">\n {{\n (obs.preview?.isFinal\n ? 'caseManagement.importDefinition.configure.finalTag'\n : 'caseManagement.importDefinition.configure.draftTag'\n ) | translate\n }}\n </cds-tag>\n <span>{{ obs.preview?.versionTag }}</span>\n </div>\n </div>\n\n <ng-container [ngSwitch]=\"obs.importWarning\">\n <cds-inline-notification\n *ngSwitchCase=\"IMPORT_WARNING.NEW_VERSION\"\n [notificationObj]=\"{\n type: 'info',\n title: ('caseManagement.importDefinition.configure.newVersionWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.newVersionWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n\n <ng-container *ngSwitchCase=\"IMPORT_WARNING.EXISTING_DRAFT\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.importDefinition.configure.existingDraftWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.existingDraftWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n <cds-checkbox\n [attr.data-test-id]=\"testIds.overrideCheckbox\"\n (checkedChange)=\"overrideConfirmed$.next($event)\"\n >\n {{\n 'caseManagement.importDefinition.configure.overrideConfirm' | translate\n }}\n </cds-checkbox>\n </ng-container>\n\n <cds-inline-notification\n *ngSwitchCase=\"IMPORT_WARNING.EXISTING_FINAL\"\n [notificationObj]=\"{\n type: 'error',\n title: ('caseManagement.importDefinition.configure.existingFinalWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.existingFinalWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </ng-container>\n </form>\n\n <div\n *ngSwitchCase=\"UPLOAD_STEP.PLUGINS\"\n [formGroup]=\"pluginMappingForm\"\n class=\"valtimo-definition-uploader__plugins\"\n >\n <p class=\"valtimo-definition-uploader__plugins-description\">\n {{ 'caseManagement.importDefinition.plugins.description' | translate }}\n </p>\n\n <ng-container *ngIf=\"hasUnidentifiablePlugins$ | async\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.importDefinition.plugins.unidentifiable.title' | translate),\n message: ('caseManagement.importDefinition.plugins.unidentifiable.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </ng-container>\n\n <ng-container *ngIf=\"(pluginMappingRows$ | async)?.length > 0; else noPlugins\">\n <div class=\"valtimo-definition-uploader__plugins-header\">\n <span>{{ 'caseManagement.importDefinition.plugins.source' | translate }}</span>\n <span></span>\n <span>{{ 'caseManagement.importDefinition.plugins.target' | translate }}</span>\n </div>\n\n <div\n *ngFor=\"let row of pluginMappingRows$ | async; trackBy: trackBySourceId\"\n class=\"valtimo-definition-uploader__plugins-row\"\n [cdsLayer]=\"1\"\n [attr.data-test-id]=\"testIds.pluginMappingRow\"\n >\n <div class=\"valtimo-definition-uploader__plugins-source\">\n {{ row.pluginDefinitionTitle }}\n </div>\n <svg\n class=\"valtimo-definition-uploader__plugins-arrow\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 32 32\"\n >\n <path d=\"M18 6l-1.4 1.4L24.2 15H4v2h20.2l-7.6 7.6L18 26l10-10z\" />\n </svg>\n <cds-combo-box\n *ngIf=\"row.status === 'available'\"\n [attr.data-test-id]=\"testIds.pluginMappingDropdown\"\n [items]=\"row.listItems\"\n itemValueKey=\"id\"\n [formControlName]=\"row.sourcePluginConfigurationId\"\n [placeholder]=\"'caseManagement.importDefinition.plugins.selectPlaceholder' | translate\"\n [cdsLayer]=\"2\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n (clear)=\"onPluginMappingClear(row.sourcePluginConfigurationId)\"\n >\n <cds-dropdown-list></cds-dropdown-list>\n </cds-combo-box>\n <div *ngIf=\"row.status === 'not-installed'\" class=\"valtimo-definition-uploader__plugins-unavailable valtimo-definition-uploader__plugins-unavailable--error\">\n {{ 'caseManagement.importDefinition.plugins.notInstalled' | translate }}\n </div>\n <div *ngIf=\"row.status === 'no-configurations'\" class=\"valtimo-definition-uploader__plugins-unavailable\">\n {{ 'caseManagement.importDefinition.plugins.noConfigurations' | translate }}\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPlugins>\n <ng-container *ngIf=\"!(hasUnidentifiablePlugins$ | async)\">\n <valtimo-case-management-upload-step\n [message]=\"'caseManagement.importDefinition.plugins.noPlugins' | translate\"\n [title]=\"'caseManagement.importDefinition.plugins.noPluginsTitle' | translate\"\n [illustration]=\"'valtimo-layout/img/plugins.svg'\"\n >\n </valtimo-case-management-upload-step>\n </ng-container>\n </ng-template>\n </div>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'caseManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"'caseManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.FILE_SELECT\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n cdsButton=\"secondary\"\n [attr.data-test-id]=\"testIds.cancelButton\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.DASHBOARD\"\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.nextButton\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.PLUGINS\n ? 'caseManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.DASHBOARD\"\n class=\"valtimo-definition-uploader__cancel\"\n [attr.data-test-id]=\"testIds.finishButton\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__configure{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__version-field{width:100%;display:flex;gap:8px;align-items:center;height:2.5rem;padding:0 1rem;background-color:var(--cds-layer-01);border-bottom:1px solid var(--cds-border-strong)}.valtimo-definition-uploader__version-field span{color:var(--cds-text-primary);font-size:.875rem;line-height:1.125rem;font-weight:400;letter-spacing:.16px}.valtimo-definition-uploader__plugins{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__plugins-description{font-size:.875rem;line-height:1.25rem;color:var(--cds-text-secondary)}.valtimo-definition-uploader__plugins-header{display:grid;grid-template-columns:1fr 24px 1fr;gap:8px;align-items:center}.valtimo-definition-uploader__plugins-header span{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.32px;color:var(--cds-text-secondary)}.valtimo-definition-uploader__plugins-row{display:grid;grid-template-columns:1fr 24px 1fr;gap:8px;align-items:center;padding:12px;background-color:var(--cds-layer)}.valtimo-definition-uploader__plugins-source{font-size:.875rem;font-weight:400;padding:0 1rem;height:2.5rem;display:flex;align-items:center}.valtimo-definition-uploader__plugins-arrow{fill:var(--cds-text-secondary);justify-self:center}.valtimo-definition-uploader__plugins-select{width:100%}.valtimo-definition-uploader__plugins-unavailable{font-size:.875rem;color:var(--cds-text-disabled);padding:0 1rem;height:2.5rem;display:flex;align-items:center}.valtimo-definition-uploader__plugins-unavailable--error{color:var(--cds-text-error)}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\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"] }]
|
|
6161
|
-
}], ctorParameters: () => [{ type: CaseManagementService }, { type: i1$4.FormBuilder }, { type: i3.TranslateService }, { type:
|
|
6644
|
+
args: [{ standalone: false, selector: 'valtimo-case-management-upload', changeDetection: ChangeDetectionStrategy.OnPush, 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<cds-modal\n *ngIf=\"{\n activeStep: activeStep$ | async,\n backButtonEnabled: backButtonEnabled$ | async,\n isStepAfterUpload: isStepAfterUpload$ | async,\n nextButtonDisabled: nextButtonDisabled$ | async,\n showCloseButton: showCloseButton$ | async,\n uploadStatus: uploadStatus$ | async,\n preview: preview$ | async,\n importWarning: importWarning$ | async,\n } as obs\"\n valtimoCdsModal\n [open]=\"open\"\n showFooter=\"true\"\n class=\"valtimo-definition-uploader\"\n (close)=\"onCloseModal()\"\n>\n <cds-modal-header\n [showCloseButton]=\"obs.showCloseButton\"\n (closeSelect)=\"onCloseModal(obs.isStepAfterUpload && obs.uploadStatus !== UPLOAD_STATUS.ERROR)\"\n >\n <h3 cdsModalHeaderHeading>\n {{ 'caseManagement.importDefinition.title' | translate }}\n </h3>\n </cds-modal-header>\n\n <section\n [ngSwitch]=\"obs.activeStep\"\n [cdsLayer]=\"1\"\n cdsModalContent\n class=\"valtimo-definition-uploader__content\"\n >\n <ng-template ngSwitchDefault>\n <valtimo-case-management-upload-step\n [message]=\"\n 'caseManagement.importDefinition.steps.' + obs.activeStep + '.message' | translate\n \"\n [title]=\"'caseManagement.importDefinition.steps.' + obs.activeStep + '.title' | translate\"\n [illustration]=\"'valtimo-layout/img/' + obs.activeStep + '.svg'\"\n >\n </valtimo-case-management-upload-step>\n </ng-template>\n\n <form *ngSwitchCase=\"UPLOAD_STEP.FILE_SELECT\" [formGroup]=\"form\">\n <cds-file-uploader\n [accept]=\"acceptedFiles\"\n [buttonText]=\"'caseManagement.importDefinition.upload.buttonText' | translate\"\n [description]=\"'caseManagement.importDefinition.upload.description' | translate\"\n [multiple]=\"false\"\n [title]=\"'caseManagement.importDefinition.upload.title' | translate\"\n buttonType=\"primary\"\n formControlName=\"file\"\n [attr.data-test-id]=\"testIds.fileUploader\"\n class=\"valtimo-definition-uploader__file-uploader\"\n >\n </cds-file-uploader>\n </form>\n\n <form\n *ngSwitchCase=\"UPLOAD_STEP.CONFIGURE\"\n [formGroup]=\"configureForm\"\n class=\"valtimo-definition-uploader__configure\"\n >\n <cds-label>\n {{ 'caseManagement.createDefinition.name' | translate }}\n <input\n formControlName=\"name\"\n cdsText\n [attr.data-test-id]=\"testIds.nameInput\"\n />\n </cds-label>\n\n <valtimo-auto-key-input\n [mode]=\"'add'\"\n [sourceText]=\"nameControl.value\"\n formControlName=\"caseDefinitionKey\"\n labelTranslationKey=\"caseManagement.createDefinition.key\"\n >\n </valtimo-auto-key-input>\n\n <div class=\"valtimo-definition-uploader__version-label\">\n <label class=\"cds--label\">\n {{ 'caseManagement.createDefinition.version' | translate }}\n </label>\n <div\n class=\"valtimo-definition-uploader__version-field\"\n [attr.data-test-id]=\"testIds.versionTag\"\n >\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"obs.preview?.isFinal ? 'green' : 'red'\">\n {{\n (obs.preview?.isFinal\n ? 'caseManagement.importDefinition.configure.finalTag'\n : 'caseManagement.importDefinition.configure.draftTag'\n ) | translate\n }}\n </cds-tag>\n <span>{{ obs.preview?.versionTag }}</span>\n </div>\n </div>\n\n <ng-container [ngSwitch]=\"obs.importWarning\">\n <cds-inline-notification\n *ngSwitchCase=\"IMPORT_WARNING.NEW_VERSION\"\n [notificationObj]=\"{\n type: 'info',\n title: ('caseManagement.importDefinition.configure.newVersionWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.newVersionWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n\n <ng-container *ngSwitchCase=\"IMPORT_WARNING.EXISTING_DRAFT\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.importDefinition.configure.existingDraftWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.existingDraftWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n <cds-checkbox\n [attr.data-test-id]=\"testIds.overrideCheckbox\"\n (checkedChange)=\"overrideConfirmed$.next($event)\"\n >\n {{\n 'caseManagement.importDefinition.configure.overrideConfirm' | translate\n }}\n </cds-checkbox>\n </ng-container>\n\n <cds-inline-notification\n *ngSwitchCase=\"IMPORT_WARNING.EXISTING_FINAL\"\n [notificationObj]=\"{\n type: 'error',\n title: ('caseManagement.importDefinition.configure.existingFinalWarning.title' | translate),\n message: ('caseManagement.importDefinition.configure.existingFinalWarning.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </ng-container>\n </form>\n\n <div\n *ngSwitchCase=\"UPLOAD_STEP.PLUGINS\"\n [formGroup]=\"pluginMappingForm\"\n class=\"valtimo-definition-uploader__plugins\"\n >\n <p class=\"valtimo-definition-uploader__plugins-description\">\n {{ 'caseManagement.importDefinition.plugins.description' | translate }}\n </p>\n\n <ng-container *ngIf=\"hasUnidentifiablePlugins$ | async\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: ('caseManagement.importDefinition.plugins.unidentifiable.title' | translate),\n message: ('caseManagement.importDefinition.plugins.unidentifiable.message' | translate),\n showClose: false,\n lowContrast: true\n }\"\n ></cds-inline-notification>\n </ng-container>\n\n <ng-container *ngIf=\"(pluginMappingRows$ | async)?.length > 0; else noPlugins\">\n <div class=\"valtimo-definition-uploader__plugins-header\">\n <span>{{ 'caseManagement.importDefinition.plugins.source' | translate }}</span>\n <span></span>\n <span>{{ 'caseManagement.importDefinition.plugins.target' | translate }}</span>\n </div>\n\n <div\n *ngFor=\"let row of pluginMappingRows$ | async; trackBy: trackBySourceId\"\n class=\"valtimo-definition-uploader__plugins-row\"\n [cdsLayer]=\"1\"\n [attr.data-test-id]=\"testIds.pluginMappingRow\"\n >\n <div class=\"valtimo-definition-uploader__plugins-source\">\n {{ row.pluginDefinitionTitle }}\n </div>\n <svg\n class=\"valtimo-definition-uploader__plugins-arrow\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 32 32\"\n >\n <path d=\"M18 6l-1.4 1.4L24.2 15H4v2h20.2l-7.6 7.6L18 26l10-10z\" />\n </svg>\n <div *ngIf=\"row.status === 'available'\" class=\"valtimo-definition-uploader__plugins-target\">\n <cds-combo-box\n [attr.data-test-id]=\"testIds.pluginMappingDropdown\"\n [items]=\"row.listItems\"\n itemValueKey=\"id\"\n [formControlName]=\"row.sourcePluginConfigurationId\"\n [placeholder]=\"'caseManagement.importDefinition.plugins.selectPlaceholder' | translate\"\n [cdsLayer]=\"2\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n (clear)=\"onPluginMappingClear(row.sourcePluginConfigurationId)\"\n >\n <cds-dropdown-list></cds-dropdown-list>\n </cds-combo-box>\n\n <div\n *ngIf=\"selectedConfigurationVersion(row) as mismatchedVersion\"\n class=\"valtimo-definition-uploader__plugins-version-warning\"\n >\n {{\n 'caseManagement.importDefinition.plugins.externalVersionMismatchWarning'\n | translate\n : {\n selectedVersion: mismatchedVersion,\n requiredVersion: row.pluginDefinitionVersion\n }\n }}\n </div>\n </div>\n <div *ngIf=\"row.status === 'not-installed'\" class=\"valtimo-definition-uploader__plugins-unavailable valtimo-definition-uploader__plugins-unavailable--error\">\n {{ 'caseManagement.importDefinition.plugins.notInstalled' | translate }}\n </div>\n <div *ngIf=\"row.status === 'no-configurations'\" class=\"valtimo-definition-uploader__plugins-unavailable\">\n {{ 'caseManagement.importDefinition.plugins.noConfigurations' | translate }}\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPlugins>\n <ng-container *ngIf=\"!(hasUnidentifiablePlugins$ | async)\">\n <valtimo-case-management-upload-step\n [message]=\"'caseManagement.importDefinition.plugins.noPlugins' | translate\"\n [title]=\"'caseManagement.importDefinition.plugins.noPluginsTitle' | translate\"\n [illustration]=\"'valtimo-layout/img/plugins.svg'\"\n >\n </valtimo-case-management-upload-step>\n </ng-container>\n </ng-template>\n </div>\n\n <cds-progress-bar\n *ngSwitchCase=\"UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__progress-bar\"\n [label]=\"'caseManagement.importDefinition.progressBar.label' | translate\"\n [status]=\"obs.uploadStatus\"\n [helperText]=\"'caseManagement.importDefinition.progressBar.' + obs.uploadStatus | translate\"\n ></cds-progress-bar>\n </section>\n\n <cds-modal-footer\n class=\"valtimo-definition-uploader__footer\"\n [class.valtimo-definition-uploader__footer--double]=\"obs.activeStep === UPLOAD_STEP.FILE_SELECT\"\n >\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.FILE_UPLOAD\"\n class=\"valtimo-definition-uploader__cancel\"\n cdsButton=\"ghost\"\n (click)=\"onCloseModal(obs.isStepAfterUpload)\"\n >\n {{ (obs.isStepAfterUpload ? 'interface.skip' : 'interface.cancel') | translate }}\n </button>\n\n <div class=\"valtimo-definition-uploader__actions\">\n <button\n *ngIf=\"obs.backButtonEnabled\"\n cdsButton=\"secondary\"\n [attr.data-test-id]=\"testIds.cancelButton\"\n (click)=\"onBackClick(obs.activeStep)\"\n >\n {{ 'interface.back' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus !== UPLOAD_STATUS.ERROR && obs.activeStep !== UPLOAD_STEP.DASHBOARD\"\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.nextButton\"\n [disabled]=\"obs.nextButtonDisabled\"\n (click)=\"onNextClick(obs.activeStep)\"\n >\n {{\n (obs.activeStep === UPLOAD_STEP.PLUGINS\n ? 'caseManagement.importDefinition.startUpload'\n : 'interface.next'\n ) | translate\n }}\n </button>\n\n <button\n *ngIf=\"obs.uploadStatus === UPLOAD_STATUS.ERROR || obs.activeStep === UPLOAD_STEP.DASHBOARD\"\n class=\"valtimo-definition-uploader__cancel\"\n [attr.data-test-id]=\"testIds.finishButton\"\n cdsButton=\"primary\"\n (click)=\"onCloseModal(true)\"\n >\n {{ 'interface.finish' | translate }}\n </button>\n </div>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-definition-uploader__content,.valtimo-definition-uploader__content form{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__footer ::ng-deep .cds--modal-footer{justify-content:unset!important;display:grid!important;grid-template-columns:1fr 1fr 2fr!important;grid-template-areas:\"cancel . actions\"!important}.valtimo-definition-uploader__footer--double ::ng-deep .cds--modal-footer{grid-template-columns:1fr 1fr!important;grid-template-areas:\"cancel actions\"!important}.valtimo-definition-uploader__progress-bar{height:100%;display:flex;flex-direction:column;justify-content:center}.valtimo-definition-uploader__error{display:flex;align-items:center;gap:10px;color:#da1e28;fill:#da1e28;font-size:12px}.valtimo-definition-uploader__cancel{grid-area:cancel;width:100%}.valtimo-definition-uploader__actions{grid-area:actions;display:flex}.valtimo-definition-uploader__actions button{flex:unset;width:100%}.valtimo-definition-uploader__file-uploader ::ng-deep cds-file{max-width:unset}.valtimo-definition-uploader__configure{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__version-field{width:100%;display:flex;gap:8px;align-items:center;height:2.5rem;padding:0 1rem;background-color:var(--cds-layer-01);border-bottom:1px solid var(--cds-border-strong)}.valtimo-definition-uploader__version-field span{color:var(--cds-text-primary);font-size:.875rem;line-height:1.125rem;font-weight:400;letter-spacing:.16px}.valtimo-definition-uploader__plugins{display:flex;flex-direction:column;gap:16px}.valtimo-definition-uploader__plugins-description{font-size:.875rem;line-height:1.25rem;color:var(--cds-text-secondary)}.valtimo-definition-uploader__plugins-header{display:grid;grid-template-columns:1fr 24px 1fr;gap:8px;align-items:center}.valtimo-definition-uploader__plugins-header span{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.32px;color:var(--cds-text-secondary)}.valtimo-definition-uploader__plugins-row{display:grid;grid-template-columns:1fr 24px 1fr;gap:8px;align-items:center;padding:12px;background-color:var(--cds-layer)}.valtimo-definition-uploader__plugins-source{font-size:.875rem;font-weight:400;padding:0 1rem;height:2.5rem;display:flex;align-items:center}.valtimo-definition-uploader__plugins-arrow{fill:var(--cds-text-secondary);justify-self:center}.valtimo-definition-uploader__plugins-select{width:100%}.valtimo-definition-uploader__plugins-target{display:flex;flex-direction:column;gap:var(--cds-spacing-02);align-self:center}.valtimo-definition-uploader__plugins-version-warning{font-size:.75rem;color:var(--cds-support-warning);padding:0 1rem}.valtimo-definition-uploader__plugins-unavailable{font-size:.875rem;color:var(--cds-text-disabled);padding:0 1rem;height:2.5rem;display:flex;align-items:center}.valtimo-definition-uploader__plugins-unavailable--error{color:var(--cds-text-error)}.valtimo-definition-uploader ::ng-deep .cds--modal-container{height:550px}.valtimo-definition-uploader ::ng-deep .cds--checkbox-label-text{color:#000}\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"] }]
|
|
6645
|
+
}], ctorParameters: () => [{ type: CaseManagementService }, { type: i1$4.FormBuilder }, { type: i3.TranslateService }, { type: i3$1.PluginManagementService }, { type: i3$1.PluginTranslationService }, { type: i3$1.ExternalPluginService }], propDecorators: { open: [{
|
|
6162
6646
|
type: Input
|
|
6163
6647
|
}], closeModal: [{
|
|
6164
6648
|
type: Output
|
|
@@ -6750,13 +7234,13 @@ class CaseManagementConnectModalComponent {
|
|
|
6750
7234
|
},
|
|
6751
7235
|
});
|
|
6752
7236
|
}
|
|
6753
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementConnectModalComponent, deps: [{ token: i1$2.DocumentService }, { token: CaseDetailService }, { token: i2$1.GlobalNotificationService }, { token: i4$
|
|
7237
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementConnectModalComponent, deps: [{ token: i1$2.DocumentService }, { token: CaseDetailService }, { token: i2$1.GlobalNotificationService }, { token: i4$1.ProcessService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6754
7238
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementConnectModalComponent, isStandalone: false, selector: "valtimo-case-management-connect-modal", outputs: { reloadProcessDocumentDefinitions: "reloadProcessDocumentDefinitions" }, viewQueries: [{ propertyName: "_modal", first: true, predicate: ["caseConnectModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-modal\n #caseConnectModal\n elementId=\"caseConnectModal\"\n [title]=\"documentDefinition ? documentDefinition.schema.title : 'Document definition'\"\n subtitle=\"Connect document definition to process definition\"\n showFooter=\"true\"\n>\n <div body *ngIf=\"documentDefinition\">\n <p>\n {{ 'Select process definition for document definition' | translate }}\n <strong>{{ documentDefinition.id.name }} *</strong>\n </p>\n <div class=\"input-group mb-3 align-items-center\">\n <select class=\"form-control\" [(ngModel)]=\"newDocumentProcessDefinition\">\n <option [ngValue]=\"null\">{{ 'caseManagement.selectProcessDef' | translate }}</option>\n <option\n *ngFor=\"let processDefinition of processDefinitions\"\n [disabled]=\"processDocumentDefinitionExists[processDefinition.key]\"\n [ngValue]=\"processDefinition\"\n >\n {{ processDefinition.name }} ({{ processDefinition.key }})\n </option>\n </select>\n </div>\n <p>\n {{ 'Select options for the selected process' | translate }}\n </p>\n <div class=\"input-group mb-3 align-items-center\">\n <label\n class=\"custom-control custom-checkbox custom-control-inline pl-6 mb-0\"\n placement=\"bottom\"\n ngbTooltip=\"{{ 'processCaseConnection.processCreatesCaseTooltip' | translate }}\"\n >\n <input\n class=\"custom-control-input\"\n type=\"checkbox\"\n [(ngModel)]=\"newDocumentProcessDefinitionInit\"\n /><span class=\"custom-control-label custom-control-color\">{{\n 'processCaseConnection.processCreatesCase' | translate\n }}</span>\n </label>\n <label\n class=\"custom-control custom-checkbox custom-control-inline ml-2 pl-6 mb-0\"\n placement=\"bottom\"\n ngbTooltip=\"{{ 'processCaseConnection.startableWithinCaseTooltip' | translate }}\"\n >\n <input\n class=\"custom-control-input\"\n type=\"checkbox\"\n [(ngModel)]=\"newDocumentProcessDefinitionStartableByUser\"\n /><span class=\"custom-control-label custom-control-color\">{{\n 'processCaseConnection.startableWithinCase' | translate\n }}</span>\n </label>\n </div>\n </div>\n <div footer>\n <button\n (click)=\"submit()\"\n class=\"btn btn-primary\"\n data-dismiss=\"modal\"\n [disabled]=\"!newDocumentProcessDefinition\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</valtimo-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: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.ModalComponent, selector: "valtimo-modal", inputs: ["elementId", "title", "subtitle", "templateBelowSubtitle", "showFooter"] }, { kind: "directive", type: i9.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
|
|
6755
7239
|
}
|
|
6756
7240
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementConnectModalComponent, decorators: [{
|
|
6757
7241
|
type: Component,
|
|
6758
7242
|
args: [{ standalone: false, selector: 'valtimo-case-management-connect-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<valtimo-modal\n #caseConnectModal\n elementId=\"caseConnectModal\"\n [title]=\"documentDefinition ? documentDefinition.schema.title : 'Document definition'\"\n subtitle=\"Connect document definition to process definition\"\n showFooter=\"true\"\n>\n <div body *ngIf=\"documentDefinition\">\n <p>\n {{ 'Select process definition for document definition' | translate }}\n <strong>{{ documentDefinition.id.name }} *</strong>\n </p>\n <div class=\"input-group mb-3 align-items-center\">\n <select class=\"form-control\" [(ngModel)]=\"newDocumentProcessDefinition\">\n <option [ngValue]=\"null\">{{ 'caseManagement.selectProcessDef' | translate }}</option>\n <option\n *ngFor=\"let processDefinition of processDefinitions\"\n [disabled]=\"processDocumentDefinitionExists[processDefinition.key]\"\n [ngValue]=\"processDefinition\"\n >\n {{ processDefinition.name }} ({{ processDefinition.key }})\n </option>\n </select>\n </div>\n <p>\n {{ 'Select options for the selected process' | translate }}\n </p>\n <div class=\"input-group mb-3 align-items-center\">\n <label\n class=\"custom-control custom-checkbox custom-control-inline pl-6 mb-0\"\n placement=\"bottom\"\n ngbTooltip=\"{{ 'processCaseConnection.processCreatesCaseTooltip' | translate }}\"\n >\n <input\n class=\"custom-control-input\"\n type=\"checkbox\"\n [(ngModel)]=\"newDocumentProcessDefinitionInit\"\n /><span class=\"custom-control-label custom-control-color\">{{\n 'processCaseConnection.processCreatesCase' | translate\n }}</span>\n </label>\n <label\n class=\"custom-control custom-checkbox custom-control-inline ml-2 pl-6 mb-0\"\n placement=\"bottom\"\n ngbTooltip=\"{{ 'processCaseConnection.startableWithinCaseTooltip' | translate }}\"\n >\n <input\n class=\"custom-control-input\"\n type=\"checkbox\"\n [(ngModel)]=\"newDocumentProcessDefinitionStartableByUser\"\n /><span class=\"custom-control-label custom-control-color\">{{\n 'processCaseConnection.startableWithinCase' | translate\n }}</span>\n </label>\n </div>\n </div>\n <div footer>\n <button\n (click)=\"submit()\"\n class=\"btn btn-primary\"\n data-dismiss=\"modal\"\n [disabled]=\"!newDocumentProcessDefinition\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</valtimo-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"] }]
|
|
6759
|
-
}], ctorParameters: () => [{ type: i1$2.DocumentService }, { type: CaseDetailService }, { type: i2$1.GlobalNotificationService }, { type: i4$
|
|
7243
|
+
}], ctorParameters: () => [{ type: i1$2.DocumentService }, { type: CaseDetailService }, { type: i2$1.GlobalNotificationService }, { type: i4$1.ProcessService }, { type: i3.TranslateService }], propDecorators: { _modal: [{
|
|
6760
7244
|
type: ViewChild,
|
|
6761
7245
|
args: ['caseConnectModal']
|
|
6762
7246
|
}], reloadProcessDocumentDefinitions: [{
|