@valtimo/case-management 13.45.1 → 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 +620 -132
- 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-list-columns/case-management-list-columns.component.d.ts +2 -0
- package/lib/components/case-management-detail/tabs/case-management-list-columns/case-management-list-columns.component.d.ts.map +1 -1
- package/lib/components/case-management-detail/tabs/case-management-search-fields/case-management-search-fields.component.d.ts +1 -0
- package/lib/components/case-management-detail/tabs/case-management-search-fields/case-management-search-fields.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']
|
|
@@ -2599,6 +2827,7 @@ class CaseManagementSearchFieldsComponent {
|
|
|
2599
2827
|
}))));
|
|
2600
2828
|
this.caseDefinitionKey$ = this.route.parent.params.pipe(map(params => params.caseDefinitionKey || ''), filter(caseDefinitionKey => !!caseDefinitionKey), tap((caseDefinitionKey) => (this._caseDefinitionKey = caseDefinitionKey)));
|
|
2601
2829
|
this.caseDefinitionVersionTag$ = this.route.parent.params.pipe(map(params => params.caseDefinitionVersionTag || ''), filter(caseDefinitionVersionTag => !!caseDefinitionVersionTag));
|
|
2830
|
+
this.usedKeys$ = new BehaviorSubject([]);
|
|
2602
2831
|
this.refreshSearchFields$ = new BehaviorSubject(null);
|
|
2603
2832
|
this.searchFields$ = combineLatest([
|
|
2604
2833
|
this.caseDefinitionKey$,
|
|
@@ -2700,6 +2929,7 @@ class CaseManagementSearchFieldsComponent {
|
|
|
2700
2929
|
.pipe(take$1(1), filter(([inputDisabled, hasPermission]) => !inputDisabled && hasPermission))
|
|
2701
2930
|
.subscribe(() => {
|
|
2702
2931
|
this.searchFieldActionTypeIsAdd = searchFieldActionTypeIsAdd;
|
|
2932
|
+
this.usedKeys$.next((this.cachedSearchFields ?? []).map(field => field.key));
|
|
2703
2933
|
const searchFieldToSelect = this.cachedSearchFields.find(field => field.key === searchField.key);
|
|
2704
2934
|
this.selectedSearchField$.next(searchFieldToSelect || {});
|
|
2705
2935
|
this.showModal();
|
|
@@ -2901,11 +3131,11 @@ class CaseManagementSearchFieldsComponent {
|
|
|
2901
3131
|
this.searchFieldClicked(searchField, false);
|
|
2902
3132
|
}
|
|
2903
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 }); }
|
|
2904
|
-
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 <v-input\n name=\"key\"\n dataTestId=\"case-management-search-key\"\n [title]=\"'searchFieldsOverview.key' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput || !searchFieldActionTypeIsAdd\"\n [required]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-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.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: "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 }); }
|
|
2905
3135
|
}
|
|
2906
3136
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementSearchFieldsComponent, decorators: [{
|
|
2907
3137
|
type: Component,
|
|
2908
|
-
args: [{ standalone: false, selector: 'valtimo-case-management-search-fields', 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<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 <v-input\n name=\"key\"\n dataTestId=\"case-management-search-key\"\n [title]=\"'searchFieldsOverview.key' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput || !searchFieldActionTypeIsAdd\"\n [required]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-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"] }]
|
|
3138
|
+
args: [{ standalone: false, selector: 'valtimo-case-management-search-fields', 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<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"] }]
|
|
2909
3139
|
}], ctorParameters: () => [{ type: i1$2.DocumentService }, { type: i2$2.ActivatedRoute }, { type: i3.TranslateService }, { type: i2.IconService }, { type: i2$1.EditPermissionsService }] });
|
|
2910
3140
|
|
|
2911
3141
|
/*
|
|
@@ -3058,6 +3288,8 @@ class CaseManagementListColumnsComponent {
|
|
|
3058
3288
|
{ content: this.translateService.instant(`listColumn.sortableAsc`), key: 'ASC' },
|
|
3059
3289
|
{ content: this.translateService.instant(`listColumn.sortableDesc`), key: 'DESC' },
|
|
3060
3290
|
].map((item, index) => ({ ...item, selected: index === selectedSortItemIndex }))));
|
|
3291
|
+
this.columnTitle$ = this.formGroup.valueChanges.pipe(map(formValues => formValues.title ?? ''), startWith(''));
|
|
3292
|
+
this.usedKeys$ = this.currentModalType$.pipe(map(() => this.cachedCaseListColumns.map(column => column.key)));
|
|
3061
3293
|
this.validKey$ = combineLatest([
|
|
3062
3294
|
this.formGroup.valueChanges,
|
|
3063
3295
|
this.currentModalType$,
|
|
@@ -3354,11 +3586,11 @@ class CaseManagementListColumnsComponent {
|
|
|
3354
3586
|
}));
|
|
3355
3587
|
}
|
|
3356
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 }); }
|
|
3357
|
-
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 } 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 <cds-label\n [disabled]=\"modalObs.disableInput || modalObs.type === 'edit'\"\n [invalid]=\"modalObs.validKey === false\"\n [invalidText]=\"'listColumn.uniqueKeyWarning' | translate\"\n >\n <span class=\"label-with-tooltip\">\n {{ 'listColumn.key' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.keyTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <input\n cdsText\n formControlName=\"key\"\n [invalid]=\"modalObs.validKey === false\"\n [attr.data-test-id]=\"testIds.key\"\n />\n </cds-label>\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: "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" }] }); }
|
|
3358
3590
|
}
|
|
3359
3591
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementListColumnsComponent, decorators: [{
|
|
3360
3592
|
type: Component,
|
|
3361
|
-
args: [{ standalone: false, selector: 'valtimo-case-management-list-columns', 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 } 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 <cds-label\n [disabled]=\"modalObs.disableInput || modalObs.type === 'edit'\"\n [invalid]=\"modalObs.validKey === false\"\n [invalidText]=\"'listColumn.uniqueKeyWarning' | translate\"\n >\n <span class=\"label-with-tooltip\">\n {{ 'listColumn.key' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'listColumn.keyTooltip' | translate\"\n [disabled]=\"modalObs.disableInput\"\n ></v-tooltip-icon>\n </span>\n\n <input\n cdsText\n formControlName=\"key\"\n [invalid]=\"modalObs.validKey === false\"\n [attr.data-test-id]=\"testIds.key\"\n />\n </cds-label>\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"] }]
|
|
3593
|
+
args: [{ standalone: false, selector: 'valtimo-case-management-list-columns', 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"] }]
|
|
3362
3594
|
}], ctorParameters: () => [{ type: i1$2.DocumentService }, { type: i2$2.ActivatedRoute }, { type: i3.TranslateService }, { type: i2.IconService }, { type: i2$1.EditPermissionsService }] });
|
|
3363
3595
|
|
|
3364
3596
|
/*
|
|
@@ -4266,7 +4498,12 @@ class CaseManagementDetailComponent {
|
|
|
4266
4498
|
this.TabEnum = TabEnum;
|
|
4267
4499
|
this._subscriptions = new Subscription();
|
|
4268
4500
|
this._refreshConfigurationIssues$ = new BehaviorSubject(null);
|
|
4269
|
-
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
|
+
]);
|
|
4270
4507
|
this._tabIssueCache = new Map();
|
|
4271
4508
|
this.configurationIssues$ = combineLatest([
|
|
4272
4509
|
this.caseDetailService.selectedCaseDefinitionKey$,
|
|
@@ -4487,17 +4724,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
4487
4724
|
* See the License for the specific language governing permissions and
|
|
4488
4725
|
* limitations under the License.
|
|
4489
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';
|
|
4490
4732
|
class CaseManagementMissingPluginConfigurationsComponent {
|
|
4491
|
-
constructor(caseManagementService, configurationIssueService, globalNotificationService, iconService, pluginManagementService, pluginTranslationService, route, translateService) {
|
|
4733
|
+
constructor(caseManagementService, configurationIssueService, externalPluginService, globalNotificationService, iconService, pluginManagementService, pluginTranslationService, route, translateService) {
|
|
4492
4734
|
this.caseManagementService = caseManagementService;
|
|
4493
4735
|
this.configurationIssueService = configurationIssueService;
|
|
4736
|
+
this.externalPluginService = externalPluginService;
|
|
4494
4737
|
this.globalNotificationService = globalNotificationService;
|
|
4495
4738
|
this.iconService = iconService;
|
|
4496
4739
|
this.pluginManagementService = pluginManagementService;
|
|
4497
4740
|
this.pluginTranslationService = pluginTranslationService;
|
|
4498
4741
|
this.route = route;
|
|
4499
4742
|
this.translateService = translateService;
|
|
4500
|
-
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
|
+
]);
|
|
4501
4750
|
this.mappingRows$ = new BehaviorSubject([]);
|
|
4502
4751
|
this.hasUnknownPluginConfigurations$ = new BehaviorSubject(false);
|
|
4503
4752
|
this.visible$ = combineLatest([
|
|
@@ -4524,6 +4773,21 @@ class CaseManagementMissingPluginConfigurationsComponent {
|
|
|
4524
4773
|
onMappingChange(index, selectedId) {
|
|
4525
4774
|
this._selections.set(index, selectedId ? String(selectedId) : null);
|
|
4526
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
|
+
}
|
|
4527
4791
|
save() {
|
|
4528
4792
|
const mappings = {};
|
|
4529
4793
|
const rows = this.mappingRows$.value;
|
|
@@ -4570,68 +4834,131 @@ class CaseManagementMissingPluginConfigurationsComponent {
|
|
|
4570
4834
|
this.mappingRows$.next([]);
|
|
4571
4835
|
return;
|
|
4572
4836
|
}
|
|
4573
|
-
|
|
4574
|
-
|
|
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
|
+
])
|
|
4575
4843
|
.pipe(take$1(1))
|
|
4576
|
-
.subscribe(
|
|
4577
|
-
|
|
4578
|
-
this.
|
|
4844
|
+
.subscribe(([embeddedRows, externalRows]) => {
|
|
4845
|
+
this._selections.clear();
|
|
4846
|
+
this.mappingRows$.next([...embeddedRows, ...externalRows]);
|
|
4579
4847
|
});
|
|
4580
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
|
+
}
|
|
4581
4858
|
loadPluginConfigurations(dangling, installedKeys) {
|
|
4582
4859
|
const uniqueKeys = [...new Set(dangling.map(d => d.pluginDefinitionKey).filter(Boolean))];
|
|
4583
4860
|
const installableKeys = uniqueKeys.filter(k => installedKeys.has(k));
|
|
4584
|
-
|
|
4585
|
-
|
|
4586
|
-
if (remaining === 0) {
|
|
4587
|
-
this.buildRows(dangling, configsByKey, installedKeys);
|
|
4588
|
-
return;
|
|
4861
|
+
if (installableKeys.length === 0) {
|
|
4862
|
+
return of(this.buildEmbeddedRows(dangling, new Map(), installedKeys));
|
|
4589
4863
|
}
|
|
4864
|
+
const configRequests = {};
|
|
4590
4865
|
for (const key of installableKeys) {
|
|
4591
|
-
this.pluginManagementService
|
|
4866
|
+
configRequests[key] = this.pluginManagementService
|
|
4592
4867
|
.getPluginConfigurationsByPluginDefinitionKey(key)
|
|
4593
|
-
.pipe(take$1(1))
|
|
4594
|
-
.subscribe({
|
|
4595
|
-
next: configs => {
|
|
4596
|
-
configsByKey.set(key, configs);
|
|
4597
|
-
remaining--;
|
|
4598
|
-
if (remaining === 0)
|
|
4599
|
-
this.buildRows(dangling, configsByKey, installedKeys);
|
|
4600
|
-
},
|
|
4601
|
-
error: () => {
|
|
4602
|
-
configsByKey.set(key, []);
|
|
4603
|
-
remaining--;
|
|
4604
|
-
if (remaining === 0)
|
|
4605
|
-
this.buildRows(dangling, configsByKey, installedKeys);
|
|
4606
|
-
},
|
|
4607
|
-
});
|
|
4868
|
+
.pipe(take$1(1), catchError(() => of([])));
|
|
4608
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
|
+
}));
|
|
4609
4874
|
}
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
this.mappingRows$.next(dangling.map(d => {
|
|
4875
|
+
buildEmbeddedRows(dangling, configsByKey, installedKeys) {
|
|
4876
|
+
return dangling.map(d => {
|
|
4613
4877
|
const key = d.pluginDefinitionKey;
|
|
4614
4878
|
const isInstalled = key ? installedKeys.has(key) : false;
|
|
4615
4879
|
const available = configsByKey.get(key) || [];
|
|
4616
|
-
|
|
4617
|
-
if (!isInstalled) {
|
|
4618
|
-
status = 'not-installed';
|
|
4619
|
-
}
|
|
4620
|
-
else if (available.length === 0) {
|
|
4621
|
-
status = 'no-configurations';
|
|
4622
|
-
}
|
|
4623
|
-
else {
|
|
4624
|
-
status = 'available';
|
|
4625
|
-
}
|
|
4880
|
+
const status = this.determineStatus(isInstalled, available.length > 0);
|
|
4626
4881
|
return {
|
|
4627
4882
|
pluginDefinitionKey: key,
|
|
4628
4883
|
pluginDefinitionTitle: this.getPluginTitle(key),
|
|
4629
4884
|
sourcePluginConfigurationIds: d.sourcePluginConfigurationIds,
|
|
4630
4885
|
selectItems: available.map(c => ({ id: c.id, text: c.title })),
|
|
4631
4886
|
status,
|
|
4887
|
+
source: 'embedded',
|
|
4888
|
+
pluginDefinitionVersion: null,
|
|
4632
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
|
+
});
|
|
4633
4937
|
}));
|
|
4634
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
|
+
}
|
|
4635
4962
|
getPluginTitle(pluginDefinitionKey) {
|
|
4636
4963
|
if (!pluginDefinitionKey) {
|
|
4637
4964
|
return this.translateService.instant('caseManagement.missingPluginConfigurations.unknownPlugin');
|
|
@@ -4642,8 +4969,8 @@ class CaseManagementMissingPluginConfigurationsComponent {
|
|
|
4642
4969
|
}
|
|
4643
4970
|
return translated;
|
|
4644
4971
|
}
|
|
4645
|
-
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:
|
|
4646
|
-
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"] }] }); }
|
|
4647
4974
|
}
|
|
4648
4975
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementMissingPluginConfigurationsComponent, decorators: [{
|
|
4649
4976
|
type: Component,
|
|
@@ -4655,8 +4982,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
4655
4982
|
LayerModule,
|
|
4656
4983
|
NotificationModule,
|
|
4657
4984
|
SelectModule,
|
|
4658
|
-
], 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
|
|
4659
|
-
}], 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 }] });
|
|
4660
4987
|
|
|
4661
4988
|
/*
|
|
4662
4989
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -5065,7 +5392,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
5065
5392
|
* limitations under the License.
|
|
5066
5393
|
*/
|
|
5067
5394
|
class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent {
|
|
5068
|
-
constructor(widgetWizardService, breadcrumbService, iconService, pageTitleService, route, tabManagementService, caseWidgetManagementApiService, translateService, pageHeaderService) {
|
|
5395
|
+
constructor(widgetWizardService, breadcrumbService, iconService, pageTitleService, route, tabManagementService, tabService, caseWidgetManagementApiService, translateService, pageHeaderService) {
|
|
5069
5396
|
super(widgetWizardService);
|
|
5070
5397
|
this.widgetWizardService = widgetWizardService;
|
|
5071
5398
|
this.breadcrumbService = breadcrumbService;
|
|
@@ -5073,6 +5400,7 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5073
5400
|
this.pageTitleService = pageTitleService;
|
|
5074
5401
|
this.route = route;
|
|
5075
5402
|
this.tabManagementService = tabManagementService;
|
|
5403
|
+
this.tabService = tabService;
|
|
5076
5404
|
this.caseWidgetManagementApiService = caseWidgetManagementApiService;
|
|
5077
5405
|
this.translateService = translateService;
|
|
5078
5406
|
this.pageHeaderService = pageHeaderService;
|
|
@@ -5111,7 +5439,7 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5111
5439
|
this._refreshWidgetTabSubject$,
|
|
5112
5440
|
]).pipe(filter(([params]) => !!params), switchMap(() => this.caseWidgetManagementApiService.getWidgetConfiguration()));
|
|
5113
5441
|
this.compactMode$ = this.pageHeaderService.compactMode$;
|
|
5114
|
-
this.
|
|
5442
|
+
this._baseWidgetTypes = [
|
|
5115
5443
|
WidgetType.FIELDS,
|
|
5116
5444
|
WidgetType.COLLECTION,
|
|
5117
5445
|
WidgetType.CUSTOM,
|
|
@@ -5124,6 +5452,16 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5124
5452
|
WidgetType.IMAGE,
|
|
5125
5453
|
WidgetType.TEXT,
|
|
5126
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));
|
|
5127
5465
|
}
|
|
5128
5466
|
ngOnInit() {
|
|
5129
5467
|
this.setContext('case');
|
|
@@ -5148,7 +5486,10 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5148
5486
|
this._refreshWidgetTabSubject$.next(null);
|
|
5149
5487
|
}
|
|
5150
5488
|
initBreadcrumbs() {
|
|
5151
|
-
|
|
5489
|
+
combineLatest([
|
|
5490
|
+
this.caseManagementRouteParams$,
|
|
5491
|
+
this.translateService.stream('caseManagement.tabs.caseDetailsTab.title'),
|
|
5492
|
+
]).subscribe(([params, caseDetailsTitle]) => {
|
|
5152
5493
|
const route = `/case-management/case/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}`;
|
|
5153
5494
|
this.breadcrumbService.setThirdBreadcrumb({
|
|
5154
5495
|
route: [route],
|
|
@@ -5157,18 +5498,25 @@ class CaseManagementWidgetTabComponent extends ManagementWidgetDetailsComponent
|
|
|
5157
5498
|
});
|
|
5158
5499
|
this.breadcrumbService.setFourthBreadcrumb({
|
|
5159
5500
|
route: [`${route}/case-details`],
|
|
5160
|
-
content:
|
|
5501
|
+
content: caseDetailsTitle,
|
|
5161
5502
|
href: `${route}/case-details`,
|
|
5162
5503
|
});
|
|
5163
5504
|
});
|
|
5164
5505
|
}
|
|
5165
|
-
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 }); }
|
|
5166
5507
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseManagementWidgetTabComponent, isStandalone: true, selector: "ng-component", providers: [
|
|
5167
5508
|
{
|
|
5168
5509
|
provide: WIDGET_MANAGEMENT_SERVICE,
|
|
5169
5510
|
useClass: CaseWidgetManagementApiService,
|
|
5170
5511
|
},
|
|
5171
|
-
|
|
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 }); }
|
|
5172
5520
|
}
|
|
5173
5521
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementWidgetTabComponent, decorators: [{
|
|
5174
5522
|
type: Component,
|
|
@@ -5186,8 +5534,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
5186
5534
|
provide: WIDGET_MANAGEMENT_SERVICE,
|
|
5187
5535
|
useClass: CaseWidgetManagementApiService,
|
|
5188
5536
|
},
|
|
5189
|
-
|
|
5190
|
-
|
|
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: [{
|
|
5191
5546
|
type: Inject,
|
|
5192
5547
|
args: [WIDGET_MANAGEMENT_SERVICE]
|
|
5193
5548
|
}] }, { type: i3.TranslateService }, { type: i7.PageHeaderService }] });
|
|
@@ -5444,7 +5799,7 @@ class CaseManagementActionsModalComponent {
|
|
|
5444
5799
|
this._editingItem = null;
|
|
5445
5800
|
});
|
|
5446
5801
|
}
|
|
5447
|
-
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 }); }
|
|
5448
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 }); }
|
|
5449
5804
|
}
|
|
5450
5805
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementActionsModalComponent, decorators: [{
|
|
@@ -5463,7 +5818,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
5463
5818
|
ProgressIndicatorModule,
|
|
5464
5819
|
LoadingModule,
|
|
5465
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"] }]
|
|
5466
|
-
}], ctorParameters: () => [{ type: StartableItemManagementService }, { type: i4
|
|
5821
|
+
}], ctorParameters: () => [{ type: StartableItemManagementService }, { type: i4.ProcessLinkBuildingBlockApiService }, { type: i1$4.FormBuilder }, { type: i3.TranslateService }, { type: i2.IconService }], propDecorators: { configureBuildingBlockEvent: [{
|
|
5467
5822
|
type: Output
|
|
5468
5823
|
}] } });
|
|
5469
5824
|
|
|
@@ -5499,6 +5854,7 @@ class CaseManagementActionsComponent {
|
|
|
5499
5854
|
this.fields$ = new BehaviorSubject([]);
|
|
5500
5855
|
this.loading$ = this.startableItemManagementService.loading$;
|
|
5501
5856
|
this.dragAndDropDisabled = signal(false);
|
|
5857
|
+
this.togglingStartableByUser = signal(false);
|
|
5502
5858
|
this.items$ = this.startableItemManagementService.items$;
|
|
5503
5859
|
this.hasEditPermissions$ = this.caseManagementRouteParams$.pipe(switchMap(params => this.editPermissionsService.hasEditPermissions(params?.caseDefinitionKey, params?.caseDefinitionVersionTag)));
|
|
5504
5860
|
this.showDeleteModal$ = this.startableItemManagementService.showDeleteModal$;
|
|
@@ -5514,6 +5870,7 @@ class CaseManagementActionsComponent {
|
|
|
5514
5870
|
type: 'danger',
|
|
5515
5871
|
},
|
|
5516
5872
|
];
|
|
5873
|
+
this._$editedBuildingBlockItem = signal(null);
|
|
5517
5874
|
this._subscriptions = new Subscription();
|
|
5518
5875
|
this.subscribeToProcessLinkEvents();
|
|
5519
5876
|
this._subscriptions.add(this.startableItemManagementService.reorderComplete$.subscribe(() => {
|
|
@@ -5552,6 +5909,18 @@ class CaseManagementActionsComponent {
|
|
|
5552
5909
|
this.startableItemManagementService.loadItems();
|
|
5553
5910
|
});
|
|
5554
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
|
+
}
|
|
5555
5924
|
onConfigureBuildingBlock(request) {
|
|
5556
5925
|
this.openProcessLinkModalForBuildingBlock(request.buildingBlockDefinitionKey, request.buildingBlockDefinitionVersionTag);
|
|
5557
5926
|
}
|
|
@@ -5584,6 +5953,7 @@ class CaseManagementActionsComponent {
|
|
|
5584
5953
|
this.processLinkStateService.showModal();
|
|
5585
5954
|
}
|
|
5586
5955
|
openProcessLinkModalForBuildingBlockEdit(item) {
|
|
5956
|
+
this._$editedBuildingBlockItem.set(item);
|
|
5587
5957
|
this.processLinkStepService.setSkipBuildingBlockSelectionStep(true);
|
|
5588
5958
|
this.startableItemManagementService
|
|
5589
5959
|
.getItemProperties(item.key, item.versionTag, StartableItemType.BUILDING_BLOCK)
|
|
@@ -5641,20 +6011,23 @@ class CaseManagementActionsComponent {
|
|
|
5641
6011
|
});
|
|
5642
6012
|
}
|
|
5643
6013
|
updateBuildingBlockStartableItem(event) {
|
|
5644
|
-
const
|
|
5645
|
-
|
|
6014
|
+
const editedItem = this._$editedBuildingBlockItem();
|
|
6015
|
+
this._$editedBuildingBlockItem.set(null);
|
|
6016
|
+
if (!editedItem)
|
|
6017
|
+
return;
|
|
5646
6018
|
const request = {
|
|
5647
6019
|
type: StartableItemType.BUILDING_BLOCK,
|
|
5648
6020
|
properties: {
|
|
5649
|
-
buildingBlockDefinitionKey:
|
|
5650
|
-
buildingBlockDefinitionVersionTag:
|
|
6021
|
+
buildingBlockDefinitionKey: event.buildingBlockDefinitionKey,
|
|
6022
|
+
buildingBlockDefinitionVersionTag: event.buildingBlockDefinitionVersionTag,
|
|
5651
6023
|
inputMappings: this.normalizeMappingsForSave(event.inputMappings || [], 'input'),
|
|
5652
6024
|
outputMappings: this.normalizeMappingsForSave(event.outputMappings || [], 'output'),
|
|
5653
6025
|
pluginConfigurationMappings: event.pluginConfigurationMappings || {},
|
|
5654
6026
|
},
|
|
5655
6027
|
};
|
|
6028
|
+
// Look up the existing item by the identity it had when the modal opened — the event carries the new version.
|
|
5656
6029
|
this.startableItemManagementService
|
|
5657
|
-
.updateItem(key, versionTag, request)
|
|
6030
|
+
.updateItem(editedItem.key, editedItem.versionTag, request)
|
|
5658
6031
|
.pipe(catchError$1(() => of(null)))
|
|
5659
6032
|
.subscribe(() => {
|
|
5660
6033
|
this.startableItemManagementService.loadItems();
|
|
@@ -5686,10 +6059,16 @@ class CaseManagementActionsComponent {
|
|
|
5686
6059
|
key: '',
|
|
5687
6060
|
label: 'caseManagement.actions.columns.type',
|
|
5688
6061
|
},
|
|
6062
|
+
{
|
|
6063
|
+
viewType: ViewType.TEMPLATE,
|
|
6064
|
+
template: this.startableByUserColumnTemplate,
|
|
6065
|
+
key: '',
|
|
6066
|
+
label: 'caseManagement.actions.columns.startableByUser',
|
|
6067
|
+
},
|
|
5689
6068
|
]);
|
|
5690
6069
|
}
|
|
5691
|
-
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
|
|
5692
|
-
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 }); }
|
|
5693
6072
|
}
|
|
5694
6073
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementActionsComponent, decorators: [{
|
|
5695
6074
|
type: Component,
|
|
@@ -5701,13 +6080,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
5701
6080
|
IconModule,
|
|
5702
6081
|
NotificationModule,
|
|
5703
6082
|
TagModule,
|
|
6083
|
+
ToggleModule,
|
|
5704
6084
|
CaseManagementActionsModalComponent,
|
|
5705
6085
|
ConfirmationModalModule,
|
|
5706
6086
|
ProcessLinkModule,
|
|
5707
|
-
], 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"] }]
|
|
5708
|
-
}], 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: [{
|
|
5709
6089
|
type: ViewChild,
|
|
5710
6090
|
args: ['typeColumn']
|
|
6091
|
+
}], startableByUserColumnTemplate: [{
|
|
6092
|
+
type: ViewChild,
|
|
6093
|
+
args: ['startableByUserColumn']
|
|
5711
6094
|
}] } });
|
|
5712
6095
|
|
|
5713
6096
|
/*
|
|
@@ -5805,12 +6188,13 @@ class CaseManagementUploadComponent {
|
|
|
5805
6188
|
get nameControl() {
|
|
5806
6189
|
return this.configureForm.get('name');
|
|
5807
6190
|
}
|
|
5808
|
-
constructor(caseManagementService, fb, translateService, pluginManagementService, pluginTranslationService) {
|
|
6191
|
+
constructor(caseManagementService, fb, translateService, pluginManagementService, pluginTranslationService, externalPluginService) {
|
|
5809
6192
|
this.caseManagementService = caseManagementService;
|
|
5810
6193
|
this.fb = fb;
|
|
5811
6194
|
this.translateService = translateService;
|
|
5812
6195
|
this.pluginManagementService = pluginManagementService;
|
|
5813
6196
|
this.pluginTranslationService = pluginTranslationService;
|
|
6197
|
+
this.externalPluginService = externalPluginService;
|
|
5814
6198
|
this.open = false;
|
|
5815
6199
|
this.closeModal = new EventEmitter();
|
|
5816
6200
|
this.testIds = CASE_MANAGEMENT_UPLOAD_TEST_IDS;
|
|
@@ -5919,6 +6303,22 @@ class CaseManagementUploadComponent {
|
|
|
5919
6303
|
trackBySourceId(_index, row) {
|
|
5920
6304
|
return row.sourcePluginConfigurationId;
|
|
5921
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
|
+
}
|
|
5922
6322
|
/**
|
|
5923
6323
|
* Works around a carbon-components-angular bug where clearing a single-select
|
|
5924
6324
|
* cds-combo-box with itemValueKey set writes `[]` to the FormControl instead
|
|
@@ -5963,7 +6363,11 @@ class CaseManagementUploadComponent {
|
|
|
5963
6363
|
loadPluginMappingRows(pluginConfigs) {
|
|
5964
6364
|
const uniqueById = new Map();
|
|
5965
6365
|
for (const config of pluginConfigs) {
|
|
5966
|
-
|
|
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)) {
|
|
5967
6371
|
uniqueById.set(config.pluginConfigurationId, config);
|
|
5968
6372
|
}
|
|
5969
6373
|
}
|
|
@@ -5978,40 +6382,50 @@ class CaseManagementUploadComponent {
|
|
|
5978
6382
|
this.pluginMappingRows$.next([]);
|
|
5979
6383
|
return;
|
|
5980
6384
|
}
|
|
5981
|
-
|
|
5982
|
-
|
|
5983
|
-
|
|
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
|
+
])
|
|
5984
6391
|
.pipe(take$1(1))
|
|
5985
|
-
.subscribe(
|
|
5986
|
-
|
|
5987
|
-
|
|
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);
|
|
5988
6401
|
});
|
|
5989
6402
|
}
|
|
5990
|
-
|
|
5991
|
-
|
|
5992
|
-
|
|
5993
|
-
];
|
|
5994
|
-
const installableKeys = uniqueDefinitionKeys.filter(k => installedKeys.has(k));
|
|
5995
|
-
if (installableKeys.length === 0) {
|
|
5996
|
-
this.buildMappingRows(uniqueConfigs, new Map(), installedKeys);
|
|
5997
|
-
return;
|
|
5998
|
-
}
|
|
5999
|
-
const configRequests = {};
|
|
6000
|
-
for (const key of installableKeys) {
|
|
6001
|
-
configRequests[key] = this.pluginManagementService
|
|
6002
|
-
.getPluginConfigurationsByPluginDefinitionKey(key)
|
|
6003
|
-
.pipe(take$1(1));
|
|
6403
|
+
loadEmbeddedMappingRows(uniqueConfigs) {
|
|
6404
|
+
if (uniqueConfigs.length === 0) {
|
|
6405
|
+
return of([]);
|
|
6004
6406
|
}
|
|
6005
|
-
|
|
6006
|
-
.
|
|
6007
|
-
|
|
6008
|
-
|
|
6009
|
-
|
|
6010
|
-
|
|
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
|
+
}));
|
|
6011
6426
|
}
|
|
6012
|
-
|
|
6013
|
-
|
|
6014
|
-
const rows = uniqueConfigs.map(config => {
|
|
6427
|
+
buildEmbeddedRows(uniqueConfigs, configsByKey, installedKeys) {
|
|
6428
|
+
return uniqueConfigs.map(config => {
|
|
6015
6429
|
const key = config.pluginDefinitionKey;
|
|
6016
6430
|
const isInstalled = key ? installedKeys.has(key) : false;
|
|
6017
6431
|
const available = configsByKey.get(key) || [];
|
|
@@ -6033,9 +6447,6 @@ class CaseManagementUploadComponent {
|
|
|
6033
6447
|
id: c.id,
|
|
6034
6448
|
selected: c.id === defaultSelectionId,
|
|
6035
6449
|
}));
|
|
6036
|
-
if (status === 'available') {
|
|
6037
|
-
this.pluginMappingForm.addControl(config.pluginConfigurationId, this.fb.control(defaultSelectionId));
|
|
6038
|
-
}
|
|
6039
6450
|
return {
|
|
6040
6451
|
pluginDefinitionKey: key,
|
|
6041
6452
|
pluginDefinitionTitle: this.getPluginTitle(key),
|
|
@@ -6043,9 +6454,84 @@ class CaseManagementUploadComponent {
|
|
|
6043
6454
|
existsInTargetEnvironment: config.existsInTargetEnvironment,
|
|
6044
6455
|
listItems,
|
|
6045
6456
|
status,
|
|
6457
|
+
source: 'embedded',
|
|
6458
|
+
pluginDefinitionVersion: null,
|
|
6459
|
+
mismatchedVersionsById: new Map(),
|
|
6046
6460
|
};
|
|
6047
6461
|
});
|
|
6048
|
-
|
|
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;
|
|
6049
6535
|
}
|
|
6050
6536
|
clearPluginMappingForm() {
|
|
6051
6537
|
for (const key of Object.keys(this.pluginMappingForm.controls)) {
|
|
@@ -6122,13 +6608,15 @@ class CaseManagementUploadComponent {
|
|
|
6122
6608
|
buildPluginConfigurationMappings() {
|
|
6123
6609
|
const mappings = {};
|
|
6124
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.
|
|
6125
6616
|
if (row.status === 'available') {
|
|
6126
6617
|
const control = this.pluginMappingForm.get(row.sourcePluginConfigurationId);
|
|
6127
6618
|
mappings[row.sourcePluginConfigurationId] = control?.value ?? null;
|
|
6128
6619
|
}
|
|
6129
|
-
else {
|
|
6130
|
-
mappings[row.sourcePluginConfigurationId] = null;
|
|
6131
|
-
}
|
|
6132
6620
|
}
|
|
6133
6621
|
return mappings;
|
|
6134
6622
|
}
|
|
@@ -6148,13 +6636,13 @@ class CaseManagementUploadComponent {
|
|
|
6148
6636
|
this.clearPluginMappingForm();
|
|
6149
6637
|
}, CARBON_CONSTANTS.modalAnimationMs);
|
|
6150
6638
|
}
|
|
6151
|
-
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:
|
|
6152
|
-
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", "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 }); }
|
|
6153
6641
|
}
|
|
6154
6642
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementUploadComponent, decorators: [{
|
|
6155
6643
|
type: Component,
|
|
6156
|
-
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"] }]
|
|
6157
|
-
}], 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: [{
|
|
6158
6646
|
type: Input
|
|
6159
6647
|
}], closeModal: [{
|
|
6160
6648
|
type: Output
|
|
@@ -6746,13 +7234,13 @@ class CaseManagementConnectModalComponent {
|
|
|
6746
7234
|
},
|
|
6747
7235
|
});
|
|
6748
7236
|
}
|
|
6749
|
-
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 }); }
|
|
6750
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" }] }); }
|
|
6751
7239
|
}
|
|
6752
7240
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseManagementConnectModalComponent, decorators: [{
|
|
6753
7241
|
type: Component,
|
|
6754
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"] }]
|
|
6755
|
-
}], 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: [{
|
|
6756
7244
|
type: ViewChild,
|
|
6757
7245
|
args: ['caseConnectModal']
|
|
6758
7246
|
}], reloadProcessDocumentDefinitions: [{
|