@valtimo/case 13.37.0 → 13.39.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.
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, ViewEncapsulation, Component, EventEmitter, Output, ViewContainerRef, ViewChild, HostBinding, Optional, Inject, Input, ChangeDetectionStrategy, InjectionToken, signal, Pipe, inject, computed, NgModule } from '@angular/core';
3
- import { combineLatest, map, distinctUntilChanged, BehaviorSubject, take, Subject, switchMap, of, tap, filter, Subscription, startWith, forkJoin, catchError as catchError$1, shareReplay, first, fromEvent, from, debounceTime, defaultIfEmpty, Observable } from 'rxjs';
3
+ import { combineLatest, map, distinctUntilChanged, BehaviorSubject, take, Subject, switchMap, of, tap, filter, Subscription, startWith, forkJoin, catchError as catchError$1, shareReplay, first, fromEvent, from, debounceTime, defaultIfEmpty, EMPTY, merge, Observable } from 'rxjs';
4
4
  import * as i1 from '@valtimo/shared';
5
5
  import { UploadProvider, ZGW_DOCUMENTEN_API_DOCUMENTS_COMPONENT_TOKEN, CaseListTab, TagColor, BaseApiService, ZGW_OBJECT_TYPE_COMPONENT_TOKEN, InterceptorSkip, FORM_VIEW_MODEL_TOKEN, ROLE_USER, ConfigModule, HttpLoaderFactory } from '@valtimo/shared';
6
6
  import * as i1$1 from '@angular/common/http';
@@ -47,7 +47,7 @@ import * as i5$3 from '@valtimo/task';
47
47
  import { CAN_VIEW_TASK_PERMISSION, TASK_DETAIL_PERMISSION_RESOURCE, TaskModule, CAN_ASSIGN_TASK_PERMISSION, CAN_MODIFY_TASK_PERMISSION, TaskDetailContentComponent, TaskDetailIntermediateSaveComponent, SetTaskDueDateComponent } from '@valtimo/task';
48
48
  import * as i3$3 from '@valtimo/process-link';
49
49
  import { formSizeToCarbonModalSizeMap, FORM_CUSTOM_COMPONENT_TOKEN, ProcessLinkModule } from '@valtimo/process-link';
50
- import * as i17 from 'angular-split';
50
+ import * as i18 from 'angular-split';
51
51
  import { AngularSplitModule } from 'angular-split';
52
52
 
53
53
  /*
@@ -633,7 +633,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
633
633
  }], ctorParameters: () => [{ type: i1.ConfigService }, { type: CaseListService }, { type: i1$2.DocumentService }, { type: i4.TranslateService }, { type: CaseParameterService }] });
634
634
 
635
635
  /*
636
- * Copyright 2015-2025 Ritense BV, the Netherlands.
636
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
637
637
  *
638
638
  * Licensed under EUPL, Version 1.2 (the "License");
639
639
  * you may not use this file except in compliance with the License.
@@ -659,7 +659,7 @@ class CaseService {
659
659
  getInitialSortState(columns) {
660
660
  const defaultColumn = columns.find(column => column.default);
661
661
  const isSorting = defaultColumn?.default === 'ASC' || defaultColumn?.default === 'DESC';
662
- const direction = typeof !defaultColumn || defaultColumn.default === 'boolean'
662
+ const direction = !defaultColumn || typeof defaultColumn.default === 'boolean'
663
663
  ? 'DESC'
664
664
  : defaultColumn.default;
665
665
  return {
@@ -841,6 +841,9 @@ class CaseListSearchService {
841
841
  get documentSearchFields$() {
842
842
  return this._documentSearchFields$;
843
843
  }
844
+ get globalSearchFilter$() {
845
+ return this._globalSearchFilter$.asObservable();
846
+ }
844
847
  constructor(caseListService, documentService, caseParameterService) {
845
848
  this.caseListService = caseListService;
846
849
  this.documentService = documentService;
@@ -848,6 +851,11 @@ class CaseListSearchService {
848
851
  this._documentSearchFields$ = this.caseListService.caseDefinitionKey$.pipe(switchMap(caseDefinitionKey => caseDefinitionKey
849
852
  ? this.documentService.getDocumentSearchFields(caseDefinitionKey)
850
853
  : of([])));
854
+ this._globalSearchFilter$ = new BehaviorSubject('');
855
+ }
856
+ setGlobalSearchFilter(value) {
857
+ this._globalSearchFilter$.next(value ?? '');
858
+ this.caseListService.checkRefresh();
851
859
  }
852
860
  search(searchFieldValues) {
853
861
  this.caseParameterService.setSearchFieldValues(searchFieldValues || {});
@@ -1105,7 +1113,7 @@ class TabImpl {
1105
1113
  */
1106
1114
 
1107
1115
  /*
1108
- * Copyright 2015-2025 Ritense BV, the Netherlands.
1116
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
1109
1117
  *
1110
1118
  * Licensed under EUPL, Version 1.2 (the "License");
1111
1119
  * you may not use this file except in compliance with the License.
@@ -1539,7 +1547,7 @@ class CaseDetailTabS3DocumentsComponent {
1539
1547
  this.refetch$.next(null);
1540
1548
  }
1541
1549
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseDetailTabS3DocumentsComponent, deps: [{ token: i1.ConfigService }, { token: i1$2.DocumentService }, { token: i3$2.DownloadService }, { token: i1$2.FileSortService }, { token: i1.GlobalNotificationService }, { token: i2.PromptService }, { token: i1$3.ActivatedRoute }, { token: i4.TranslateService }, { token: i3$2.UploadProviderService }], target: i0.ɵɵFactoryTarget.Component }); }
1542
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseDetailTabS3DocumentsComponent, isStandalone: false, selector: "valtimo-case-detail-tab-s3-documents", 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-dropzone\n (fileSelected)=\"fileSelected($event)\"\n [acceptedFiles]=\"acceptedFiles\"\n [hideFilePreview]=\"true\"\n [hideTitle]=\"true\"\n [maxFileSize]=\"maxFileSize\"\n [showMaxFileSize]=\"true\"\n [camera]=\"false\"\n [uploading]=\"uploading$ | async\"\n></valtimo-dropzone>\n\n<valtimo-widget>\n <valtimo-carbon-list\n [fields]=\"fields\"\n [items]=\"relatedFiles$ | async\"\n [header]=\"true\"\n [isSearchable]=\"true\"\n [actions]=\"actions\"\n >\n <div header>\n <h3 class=\"list-header-title\">{{ 'Related documents' | translate }}</h3>\n\n <h5 class=\"list-header-description\">\n {{ 'Overview of all documents in this case' | translate }}\n </h5>\n </div>\n </valtimo-carbon-list>\n</valtimo-widget>\n", dependencies: [{ kind: "component", type: i2.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i2.DropzoneComponent, selector: "valtimo-dropzone", inputs: ["title", "hideTitle", "subtitle", "externalError$", "showMaxFileSize", "showAcceptedFiles", "clear$", "disabled", "hideFilePreview", "uploading", "camera", "maxFiles", "maxFileSize", "acceptedFiles"], outputs: ["fileSelected"] }, { kind: "component", type: i2.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
1550
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseDetailTabS3DocumentsComponent, isStandalone: false, selector: "valtimo-case-detail-tab-s3-documents", 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-dropzone\n (fileSelected)=\"fileSelected($event)\"\n [acceptedFiles]=\"acceptedFiles\"\n [hideFilePreview]=\"true\"\n [hideTitle]=\"true\"\n [maxFileSize]=\"maxFileSize\"\n [showMaxFileSize]=\"true\"\n [camera]=\"false\"\n [uploading]=\"uploading$ | async\"\n></valtimo-dropzone>\n\n<valtimo-widget>\n <valtimo-carbon-list\n [fields]=\"fields\"\n [items]=\"relatedFiles$ | async\"\n [header]=\"true\"\n [isSearchable]=\"true\"\n [actions]=\"actions\"\n >\n <div header>\n <h3 class=\"list-header-title\">{{ 'Related documents' | translate }}</h3>\n\n <h5 class=\"list-header-description\">\n {{ 'Overview of all documents in this case' | translate }}\n </h5>\n </div>\n </valtimo-carbon-list>\n</valtimo-widget>\n", dependencies: [{ kind: "component", type: i2.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i2.DropzoneComponent, selector: "valtimo-dropzone", inputs: ["title", "hideTitle", "subtitle", "externalError$", "showMaxFileSize", "showAcceptedFiles", "clear$", "disabled", "hideFilePreview", "uploading", "camera", "maxFiles", "maxFileSize", "acceptedFiles"], outputs: ["fileSelected"] }, { kind: "component", type: i2.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: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
1543
1551
  }
1544
1552
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseDetailTabS3DocumentsComponent, decorators: [{
1545
1553
  type: Component,
@@ -4029,6 +4037,8 @@ class CaseListOrchestrationService {
4029
4037
  this.disableExportButton$ = new BehaviorSubject(false);
4030
4038
  this.caseDefinitionKey$ = this.listService.caseDefinitionKey$.pipe(tap((caseDefinitionKey) => this.caseListQuickSearchService.initParams(caseDefinitionKey)));
4031
4039
  this.searchFields$ = this.searchService.documentSearchFields$;
4040
+ this.globalSearchFilter$ = this.searchService.globalSearchFilter$;
4041
+ this.invalidSearchFields$ = this.documentService.invalidSearchFields$;
4032
4042
  this.statuses$ = this.statusService.caseStatuses$;
4033
4043
  this.caseTags$ = this.caseListCaseTagService.caseTags$;
4034
4044
  this.selectedStatusKeys$ = this.statusService.selectedCaseStatuses$;
@@ -4149,7 +4159,8 @@ class CaseListOrchestrationService {
4149
4159
  this.hasApiColumnConfig$,
4150
4160
  this.statusService.caseStatuses$,
4151
4161
  this.caseListCaseTagService.caseTags$,
4152
- ]).pipe(debounceTime(50))), distinctUntilChanged(this.areDocumentRequestsEqual), switchMap(([documentSearchRequest, assigneeFilter, searchValues, selectedStatuses, selectedCaseTagKeys, _, hasApiColumnConfig, allStatuses,]) => this.fetchDocuments(documentSearchRequest, assigneeFilter, searchValues, selectedStatuses, selectedCaseTagKeys, hasApiColumnConfig, allStatuses)), switchMap(res => this.checkDocumentPermissions(res)), map(res => this.mapDocumentsToItems(res)), map(res => this.mapStatusAndTagColumns(res)), tap(items => {
4162
+ this.globalSearchFilter$,
4163
+ ]).pipe(debounceTime(50))), distinctUntilChanged(this.areDocumentRequestsEqual), switchMap(([documentSearchRequest, assigneeFilter, searchValues, selectedStatuses, selectedCaseTagKeys, _, hasApiColumnConfig, allStatuses, __, globalSearchFilter,]) => this.fetchDocuments(documentSearchRequest, assigneeFilter, searchValues, selectedStatuses, selectedCaseTagKeys, hasApiColumnConfig, allStatuses, globalSearchFilter)), switchMap(res => this.checkDocumentPermissions(res)), map(res => this.mapDocumentsToItems(res)), map(res => this.mapStatusAndTagColumns(res)), tap(items => {
4153
4164
  this._documentItems$.next(items);
4154
4165
  this._loadingAssigneeFilter$.next(false);
4155
4166
  this._loadingDocumentItems$.next(false);
@@ -4189,7 +4200,7 @@ class CaseListOrchestrationService {
4189
4200
  .subscribe(() => this._refreshHiddenColumns$.next(null));
4190
4201
  }
4191
4202
  // --- Private helpers for the document items pipeline ---
4192
- areDocumentRequestsEqual([prevSearchRequest, prevAssigneeFilter, prevSearchFieldValues, prevSelectedStatuses, prevCaseTagKeys, prevForceRefresh,], [currSearchRequest, currAssigneeFilter, currSearchFieldValues, currSelectedStatuses, currCaseTagKeys, currForceRefresh,]) {
4203
+ areDocumentRequestsEqual([prevSearchRequest, prevAssigneeFilter, prevSearchFieldValues, prevSelectedStatuses, prevCaseTagKeys, prevForceRefresh, _prevHasApiColumnConfig, _prevStatuses, _prevCaseTags, prevGlobalSearchFilter,], [currSearchRequest, currAssigneeFilter, currSearchFieldValues, currSelectedStatuses, currCaseTagKeys, currForceRefresh, _currHasApiColumnConfig, _currStatuses, _currCaseTags, currGlobalSearchFilter,]) {
4193
4204
  return isEqual$1({
4194
4205
  ...prevSearchRequest,
4195
4206
  assignee: prevAssigneeFilter,
@@ -4197,6 +4208,7 @@ class CaseListOrchestrationService {
4197
4208
  ...prevSelectedStatuses,
4198
4209
  ...prevCaseTagKeys,
4199
4210
  forceRefresh: prevForceRefresh,
4211
+ globalSearchFilter: prevGlobalSearchFilter,
4200
4212
  }, {
4201
4213
  ...currSearchRequest,
4202
4214
  assignee: currAssigneeFilter,
@@ -4204,22 +4216,24 @@ class CaseListOrchestrationService {
4204
4216
  ...currSelectedStatuses,
4205
4217
  ...currCaseTagKeys,
4206
4218
  forceRefresh: currForceRefresh,
4219
+ globalSearchFilter: currGlobalSearchFilter,
4207
4220
  });
4208
4221
  }
4209
- fetchDocuments(documentSearchRequest, assigneeFilter, searchValues, selectedStatuses, selectedCaseTagKeys, hasApiColumnConfig, allStatuses) {
4222
+ fetchDocuments(documentSearchRequest, assigneeFilter, searchValues, selectedStatuses, selectedCaseTagKeys, hasApiColumnConfig, allStatuses, globalSearchFilter) {
4210
4223
  const statusKeys = allStatuses.length === 1
4211
4224
  ? []
4212
4225
  : selectedStatuses.map((statusKey) => statusKey === CASES_WITHOUT_STATUS_KEY ? null : statusKey);
4213
4226
  const searchFilters = (Object.keys(searchValues) || []).length > 0
4214
4227
  ? this.searchService.mapSearchValuesToFilters(searchValues)
4215
4228
  : undefined;
4229
+ const globalFilter = globalSearchFilter?.trim() || undefined;
4216
4230
  const documentsObs = !hasApiColumnConfig
4217
- ? this.documentService.getDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter, searchFilters, statusKeys, selectedCaseTagKeys)
4218
- : this.documentService.getSpecifiedDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter, searchFilters, statusKeys, selectedCaseTagKeys);
4231
+ ? this.documentService.getDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter, searchFilters, statusKeys, selectedCaseTagKeys, globalFilter)
4232
+ : this.documentService.getSpecifiedDocumentsSearch(documentSearchRequest, 'AND', assigneeFilter, searchFilters, statusKeys, selectedCaseTagKeys, globalFilter);
4219
4233
  return forkJoin({
4220
4234
  documents: documentsObs,
4221
4235
  hasApiColumnConfig: of(hasApiColumnConfig),
4222
- isSearchResult: of(!!searchFilters),
4236
+ isSearchResult: of(!!searchFilters || !!globalFilter),
4223
4237
  allStatuses: of(allStatuses),
4224
4238
  assigneeFilter: of(assigneeFilter),
4225
4239
  });
@@ -4702,11 +4716,15 @@ class CaseDetailsTaskDetailComponent {
4702
4716
  this.candidateUsers$ = combineLatest([
4703
4717
  this.task$.pipe(filter(task => !!task)),
4704
4718
  this.canAssignUserToTask$,
4705
- ]).pipe(switchMap(([task, canAssign]) => (canAssign ? this.taskService.getCandidateUsers(task.id) : of([]))), shareReplay(1));
4719
+ ]).pipe(switchMap(([task, canAssign]) => canAssign
4720
+ ? this.taskService.getCandidateUsers(task.id).pipe(catchError$1(() => of([])))
4721
+ : of([])), shareReplay(1));
4706
4722
  this.candidateTeams$ = combineLatest([
4707
4723
  this.task$.pipe(filter(task => !!task)),
4708
4724
  this.canAssignUserToTask$,
4709
- ]).pipe(switchMap(([task, canAssign]) => canAssign ? this.taskService.getCandidateTeams(task.id).pipe(map(page => page.content)) : of([])), shareReplay(1));
4725
+ ]).pipe(switchMap(([task, canAssign]) => canAssign
4726
+ ? this.taskService.getCandidateTeams(task.id).pipe(map(page => page.content), catchError$1(() => of([])))
4727
+ : of([])), shareReplay(1));
4710
4728
  this.enableIntermediateSave$ = this.configService.getFeatureToggleObservable('enableIntermediateSave');
4711
4729
  }
4712
4730
  ngOnDestroy() {
@@ -4734,10 +4752,9 @@ class CaseDetailsTaskDetailComponent {
4734
4752
  assignRequest.assignedTeamKey = event.teamKey ?? '';
4735
4753
  this.taskService
4736
4754
  .assignTask(task.id, assignRequest)
4737
- .pipe(switchMap(() => this.taskService.getTask(task.id)), take(1))
4755
+ .pipe(switchMap(() => this.refreshTaskAfterAssignmentChange(task.id)), take(1))
4738
4756
  .subscribe(response => {
4739
- this.refreshTask(response);
4740
- this.assignmentOfTaskChanged.emit();
4757
+ this.handleAssignmentChangeResponse(response);
4741
4758
  });
4742
4759
  });
4743
4760
  }
@@ -4747,13 +4764,29 @@ class CaseDetailsTaskDetailComponent {
4747
4764
  return;
4748
4765
  this.taskService
4749
4766
  .unassignTask(task.id)
4750
- .pipe(switchMap(() => this.taskService.getTask(task.id)), take(1))
4767
+ .pipe(switchMap(() => this.refreshTaskAfterAssignmentChange(task.id)), take(1))
4751
4768
  .subscribe(response => {
4752
- this.refreshTask(response);
4753
- this.assignmentOfTaskChanged.emit();
4769
+ this.handleAssignmentChangeResponse(response);
4754
4770
  });
4755
4771
  });
4756
4772
  }
4773
+ refreshTaskAfterAssignmentChange(taskId) {
4774
+ // The new assignment can change the outcome of permission checks for this task,
4775
+ // so drop cached permissions before the task is re-fetched and re-checked
4776
+ this.permissionService.invalidateResource(TASK_DETAIL_PERMISSION_RESOURCE.task, taskId);
4777
+ // a 403 or 404 means the user can no longer view the task; these are expected
4778
+ // outcomes here, so they are skipped to avoid a global error toast
4779
+ return this.taskService.getTask(taskId, ['403', '404']).pipe(catchError$1(error => (error?.status === 403 || error?.status === 404 ? of(null) : EMPTY)));
4780
+ }
4781
+ handleAssignmentChangeResponse(response) {
4782
+ if (response) {
4783
+ this.refreshTask(response);
4784
+ }
4785
+ else {
4786
+ this.onClose();
4787
+ }
4788
+ this.assignmentOfTaskChanged.emit();
4789
+ }
4757
4790
  refreshTask(response) {
4758
4791
  const currentTask = this.task$.getValue();
4759
4792
  if (!currentTask)
@@ -5247,7 +5280,7 @@ class CaseDetailComponent {
5247
5280
  get activeTabName$() {
5248
5281
  return combineLatest([this.route.paramMap, this._activeTabName$]).pipe(map(([paramMap, activeTabName]) => !activeTabName ? (paramMap.get('tab') ?? null) : activeTabName));
5249
5282
  }
5250
- constructor(breadcrumbService, caseStatusService, cdsThemeService, componentFactoryResolver, documentService, caseDetailLayoutService, caseService, caseTabService, iconService, keyCloakService, logger, notificationService, pageHeaderService, pageTitleService, permissionService, translateService, renderer, route, router, widgetsService, userProviderService, htmlDocument) {
5283
+ constructor(breadcrumbService, caseStatusService, cdsThemeService, componentFactoryResolver, documentService, caseDetailLayoutService, caseService, caseTabService, iconService, keyCloakService, logger, notificationService, pageHeaderService, pageTitleService, permissionService, translateService, renderer, route, router, widgetsService, userProviderService, sseService, htmlDocument) {
5251
5284
  this.breadcrumbService = breadcrumbService;
5252
5285
  this.caseStatusService = caseStatusService;
5253
5286
  this.cdsThemeService = cdsThemeService;
@@ -5269,6 +5302,7 @@ class CaseDetailComponent {
5269
5302
  this.router = router;
5270
5303
  this.widgetsService = widgetsService;
5271
5304
  this.userProviderService = userProviderService;
5305
+ this.sseService = sseService;
5272
5306
  this.htmlDocument = htmlDocument;
5273
5307
  this.document = null;
5274
5308
  this.processDefinitionListFields = [];
@@ -5383,6 +5417,8 @@ class CaseDetailComponent {
5383
5417
  this.enableResetOnBackNavigation();
5384
5418
  this.openWidgetProcessSubscription();
5385
5419
  this.openSmallTitleSubscription();
5420
+ this.openStartableItemsSseSubscription();
5421
+ this.openCaseStateSseSubscription();
5386
5422
  }
5387
5423
  ngOnDestroy() {
5388
5424
  this.breadcrumbService.clearSecondBreadcrumb();
@@ -5406,6 +5442,36 @@ class CaseDetailComponent {
5406
5442
  ];
5407
5443
  }));
5408
5444
  }
5445
+ /**
5446
+ * Keeps the start menu in sync with PBAC visibility: supporting processes can become
5447
+ * (un)available as the case progresses. Instead of requiring a page refresh, re-fetch the
5448
+ * startable items whenever an SSE event signals that the case state changed. The backend
5449
+ * re-evaluates PBAC on every request, so a fresh fetch reflects the current visibility.
5450
+ */
5451
+ openStartableItemsSseSubscription() {
5452
+ this._subscriptions.add(merge(this.sseService.getSseEventObservable('TASK_UPDATE'), this.sseService.getSseEventObservable('DOCUMENT_UPDATED'))
5453
+ .pipe(filter(event => event?.documentId === this.documentId), debounceTime(300))
5454
+ .subscribe(() => this.reloadStartableItems()));
5455
+ }
5456
+ /**
5457
+ * Keeps the internal status tag and the assignee widget in sync with the current case state.
5458
+ * The status can change without user interaction (e.g. a task completes or a timer expires) and
5459
+ * the assignee can be (un)set from elsewhere. Refresh the document whenever an SSE event signals
5460
+ * such a change for this case, so both re-derive from `document$` without a page reload.
5461
+ */
5462
+ openCaseStateSseSubscription() {
5463
+ this._subscriptions.add(merge(this.sseService.getSseEventObservable('CASE_ASSIGNED'), this.sseService.getSseEventObservable('CASE_UNASSIGNED'), this.sseService.getSseEventObservable('CASE_STATUS_UPDATED'))
5464
+ .pipe(filter(event => event?.documentId === this.documentId), debounceTime(300))
5465
+ .subscribe(() => this.caseService.refresh()));
5466
+ }
5467
+ reloadStartableItems() {
5468
+ this._subscriptions.add(this.documentService
5469
+ .getStartableItems({ caseDocumentId: this.documentId })
5470
+ .subscribe(startableItems => {
5471
+ this.startableItems = this.mapStartableItems(startableItems);
5472
+ this.setProcessDropdownWidth();
5473
+ }));
5474
+ }
5409
5475
  startItem(item) {
5410
5476
  this.showTaskList$.pipe(take(1)).subscribe(showTaskList => {
5411
5477
  this.supportingProcessStart.openModalForStartableItem(item, this.documentId, this.caseDefinitionKey, this.caseDefinitionVersionTag, showTaskList);
@@ -5678,13 +5744,13 @@ class CaseDetailComponent {
5678
5744
  }
5679
5745
  }));
5680
5746
  }
5681
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseDetailComponent, deps: [{ token: i2.BreadcrumbService }, { token: i1$2.CaseStatusService }, { token: i2.CdsThemeService }, { token: i0.ComponentFactoryResolver }, { token: i1$2.DocumentService }, { token: CaseDetailLayoutService }, { token: CaseService }, { token: CaseTabService }, { token: i4$1.IconService }, { token: i5$4.KeycloakService }, { token: i1$4.NGXLogger }, { token: i1.GlobalNotificationService }, { token: i2.PageHeaderService }, { token: i2.PageTitleService }, { token: i2$2.PermissionService }, { token: i4.TranslateService }, { token: i0.Renderer2 }, { token: i1$3.ActivatedRoute }, { token: i1$3.Router }, { token: WidgetsService }, { token: i12.UserProviderService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
5682
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseDetailComponent, isStandalone: false, selector: "ng-component", providers: [CaseTabService, CaseDetailLayoutService, ObserveSizeDirective], viewQueries: [{ propertyName: "supportingProcessStart", first: true, predicate: ["supportingProcessStartModal"], descendants: true }, { propertyName: "viewContainerRef", first: true, predicate: ["tabContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_tabContentContainer", first: true, predicate: ["tabContentContainer"], 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<div\n class=\"main-content\"\n [ngClass]=\"{'main-content--no-horizontal-overflow': $tabHorizontalOverflowDisabled()}\"\n>\n <div class=\"container-fluid\">\n <div\n class=\"main-content__header\"\n observeSize\n (heightChange)=\"onMainContentHeaderHeightChange($event)\"\n >\n <valtimo-case-detail-header-widget></valtimo-case-detail-header-widget>\n\n <ng-container *ngIf=\"caseTags$ | async as caseTags\">\n @if ((caseTags || []).length > 0) {\n <div class=\"spacing-case-tags\">\n @for (tag of caseTags; track tag) {\n <cds-tag size=\"sm\" [type]=\"tag.tagType\">\n {{ tag.title }}\n </cds-tag>\n }\n </div>\n }\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n\n <ng-template #tabs>\n <ng-container *ngIf=\"{activeTab: activeTab$ | async} as obs\">\n <cds-tabs *ngIf=\"tabLoader\" type=\"inline\" class=\"case-detail-tabs\">\n <cds-tab\n *ngFor=\"let tab of tabLoader.tabs\"\n [active]=\"tab.name === (activeTabName$ | async)\"\n heading=\"{{ tab | tabTranslate | async }}\"\n (selected)=\"onTabSelected(tab, obs.activeTab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n </ng-template>\n </div>\n\n <div\n *ngIf=\"{\n noTabsConfigured: noTabsConfigured$ | async,\n showTaskList: showTaskList$ | async,\n showNoAccess: showNoAccess$ | async,\n caseDetailLayout: caseDetailLayout$ | async,\n openTaskAndProcessLinkInModal: openTaskAndProcessLinkInModal$ | async,\n taskAndProcessLinkOpenedInPanel: taskAndProcessLinkOpenedInPanel$ | async,\n startFormPanel: startFormPanel$ | async,\n isDarkMode: isDarkMode$ | async,\n compactMode: compactMode$ | async,\n tabContentContainerMaxHeight: tabContentContainerMaxHeight$ | async,\n } as tabContentObs\"\n #tabContentContainer\n class=\"tab-content-container\"\n [ngClass]=\"{\n 'tab-content-container--dark': tabContentObs.isDarkMode,\n 'tab-content-container--compact': tabContentObs.compactMode,\n }\"\n [style.max-height]=\"tabContentObs.tabContentContainerMaxHeight\"\n [style.height]=\"tabContentObs.tabContentContainerMaxHeight\"\n >\n <as-split\n direction=\"horizontal\"\n [disabled]=\"!tabContentObs.caseDetailLayout.widthAdjustable\"\n [gutterSize]=\"CASE_DETAIL_GUTTER_SIZE\"\n [unit]=\"tabContentObs.caseDetailLayout.unit\"\n class=\"split-area\"\n >\n <as-split-area\n [size]=\"tabContentObs.caseDetailLayout.leftPanelWidth\"\n [minSize]=\"tabContentObs.caseDetailLayout.leftPanelMinWidth\"\n [maxSize]=\"tabContentObs.caseDetailLayout.leftPanelMaxWidth\"\n class=\"split-area__content\"\n >\n <div\n class=\"card-body bg-white p-5 position-relative tab-container\"\n [class.tab-container--compact]=\"compactMode$ | async\"\n >\n <div *ngIf=\"loadingTabs$ | async\" class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.showNoAccess\"\n description=\"{{ 'case.noAccess.description' | translate }}\"\n title=\"{{ 'case.noAccess.title' | translate }}\"\n illustration=\"valtimo-layout/img/emptystate-not-authorised.svg\"\n >\n </valtimo-no-results>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.noTabsConfigured\"\n [description]=\"'case.tabs.noResultsDescription' | translate\"\n [title]=\"'case.tabs.noResults' | translate\"\n ></valtimo-no-results>\n\n <ng-template #tabContainer></ng-template>\n\n <div class=\"clearfix\"></div>\n </div>\n </as-split-area>\n\n <as-split-area\n *ngIf=\"tabContentObs.caseDetailLayout.showRightPanel\"\n [size]=\"tabContentObs.caseDetailLayout.rightPanelWidth\"\n [minSize]=\"tabContentObs.caseDetailLayout.rightPanelMinWidth\"\n [maxSize]=\"tabContentObs.caseDetailLayout.rightPanelMaxWidth\"\n >\n @if (tabContentObs.showTaskList) {\n <div class=\"task-panel\">\n @if (tabContentObs.startFormPanel) {\n <div class=\"start-form-panel\">\n <section class=\"start-form-panel__header\">\n <h4 class=\"start-form-panel__title\">{{ tabContentObs.startFormPanel.title }}</h4>\n\n <button cdsButton=\"ghost\" [iconOnly]=\"true\" (click)=\"onStartFormPanelClose()\">\n <svg cdsIcon=\"close\" size=\"16\"></svg>\n </button>\n </section>\n\n <section class=\"start-form-panel__body\">\n <ng-container\n *ngTemplateOutlet=\"tabContentObs.startFormPanel.template\"\n ></ng-container>\n </section>\n </div>\n } @else if (tabContentObs.taskAndProcessLinkOpenedInPanel) {\n <valtimo-case-detail-task-detail\n [taskAndProcessLink]=\"tabContentObs.taskAndProcessLinkOpenedInPanel\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (closeEvent)=\"onTaskDetailsClose()\"\n (formSubmit)=\"onFormSubmitEvent()\"\n (dueDateChanged)=\"onDueDateChanged()\"\n >\n </valtimo-case-detail-task-detail>\n } @else {\n <valtimo-case-detail-task-list\n [openTaskAndProcessLinkInModal]=\"tabContentObs.openTaskAndProcessLinkInModal\"\n (taskClickEvent)=\"onTaskClickEvent($event)\"\n (formSubmitEvent)=\"onFormSubmitEvent()\"\n ></valtimo-case-detail-task-list>\n }\n </div>\n }\n </as-split-area>\n </as-split>\n </div>\n </div>\n\n <valtimo-case-supporting-process-start-modal\n [isAdmin]=\"isAdmin$ | async\"\n (formSubmit)=\"onFormSubmitEvent()\"\n #supportingProcessStartModal\n ></valtimo-case-supporting-process-start-modal>\n</div>\n\n<ng-template\n #caseDetailHeader\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {canHaveAssignee: canHaveAssignee, document: document, canAssign: canAssign}\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template\n #caseDetailAssignee\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div *ngIf=\"canHaveAssignee && document\">\n <valtimo-assignment\n *ngIf=\"canAssignLoaded$ | async\"\n mode=\"case\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n [assigneeId]=\"document.assigneeId\"\n [assignedTeamKey]=\"document.assignedTeamKey\"\n [assignedTeamTitle]=\"document.assignedTeamTitle\"\n [hasPermission]=\"canAssign\"\n [candidateUsers$]=\"candidateUsers$\"\n [candidateTeams$]=\"candidateTeams$\"\n (assignmentChangedEvent)=\"onAssignmentChanged($event)\"\n (unassignedEvent)=\"onUnassigned()\"\n ></valtimo-assignment>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canClaim=\"canClaim\" let-canHaveAssignee=\"canHaveAssignee\">\n <v-overflow-menu-option\n *ngIf=\"canClaim && canHaveAssignee\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n (selected)=\"claimAssignee()\"\n >\n {{ 'case.claimAssigneeCase' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template\n #unassignButton\n let-canAssign=\"canAssign\"\n let-canHaveAssignee=\"canHaveAssignee\"\n let-assigneeId=\"assigneeId\"\n>\n <v-overflow-menu-option\n *ngIf=\"canHaveAssignee && canAssign\"\n [disabled]=\"!assigneeId\"\n (selected)=\"unassignAssignee()\"\n >\n {{ 'assignDocument.remove' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template #deleteButton let-canDelete=\"canDelete\">\n <v-overflow-menu-option\n *ngIf=\"canDelete\"\n [disabled]=\"isDeleting$ | async\"\n (selected)=\"deleteDocument()\"\n type=\"danger\"\n >\n {{ 'case.delete.delete' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template #inspectButton let-canInspect=\"canInspect\">\n <v-overflow-menu-option *ngIf=\"canInspect\" (selected)=\"navigateToInspection()\">\n {{ 'case.inspection.openInspector' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template #customStartTrigger>\n <button\n [size]=\"(compactMode$ | async) ? 'sm' : 'lg'\"\n cdsButton=\"primary\"\n [disabled]=\"startableItems.length === 0\"\n [ngbTooltip]=\"startableItems.length === 0 ? 'No action' : null\"\n >\n {{ 'case.startSubProcess' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"chevron--down\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.delete.confirm\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"case.delete.description\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"case.delete.delete\"\n (confirmEvent)=\"onConfirmDelete()\"\n></valtimo-confirmation-modal>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div\n class=\"case-actions\"\n [ngClass]=\"{\n 'case-actions--compact': compactMode$ | async,\n 'case-actions--small-title': smallTitle$ | async,\n }\"\n *ngIf=\"{\n assigneeId: assigneeId$ | async,\n canAssign: canAssign$ | async,\n canClaim: canClaim$ | async,\n canHaveAssignee: canHaveAssignee$ | async,\n canDelete: canDelete$ | async,\n canInspect: canInspect$ | async,\n document: document$ | async,\n caseStatus: caseStatus$ | async,\n } as obs\"\n >\n <div class=\"case-status-assign-custom-title\" [ngClass]=\"{'--compact': compactMode$ | async}\">\n @if (obs.caseStatus) {\n <cds-tag size=\"sm\" [type]=\"obs.caseStatus.tagType\" [title]=\"obs.caseStatus.title\">{{\n obs.caseStatus.title\n }}</cds-tag>\n }\n\n <div [ngClass]=\"{'--compact': compactMode$ | async}\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {\n canHaveAssignee: obs.canHaveAssignee,\n document: obs.document,\n canAssign: obs.canAssign,\n }\n \"\n ></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"caseDetailHeader\"></ng-container>\n </div>\n\n <div class=\"buttons-container\">\n <v-overflow-menu\n *ngIf=\"obs.canHaveAssignee || obs.canDelete || obs.canInspect\"\n placement=\"bottom-end\"\n class=\"overflow-button assign-overflow\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n >\n <v-overflow-menu-trigger\n overflowTrigger\n [compact]=\"compactMode$ | async\"\n ></v-overflow-menu-trigger>\n\n <ng-container\n *ngTemplateOutlet=\"\n claimButton;\n context: {canClaim: obs.canClaim, canHaveAssignee: obs.canHaveAssignee}\n \"\n >\n </ng-container>\n\n <ng-container\n *ngTemplateOutlet=\"\n unassignButton;\n context: {\n canAssign: obs.canAssign,\n canHaveAssignee: obs.canHaveAssignee,\n assigneeId: obs.assigneeId,\n }\n \"\n >\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"inspectButton; context: {canInspect: obs.canInspect}\">\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"deleteButton; context: {canDelete: obs.canDelete}\">\n </ng-container>\n </v-overflow-menu>\n\n <v-overflow-menu\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n [menuWidth]=\"dropdownWidth$ | async\"\n placement=\"bottom-end\"\n class=\"overflow-button case-detail-overflow\"\n >\n <ng-container overflowTrigger>\n <ng-container *ngTemplateOutlet=\"customStartTrigger\"></ng-container>\n </ng-container>\n <v-overflow-menu-option\n *ngFor=\"let startableItem of startableItems\"\n [attr.title]=\"startableItem.displayName\"\n (selected)=\"startItem(startableItem)\"\n >\n {{ startableItem.displayName }}\n </v-overflow-menu-option>\n </v-overflow-menu>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".main-content{overflow:hidden;padding-bottom:0}.main-content--no-horizontal-overflow{overflow-x:hidden}.tab-container{height:min-content;min-height:300px;overflow-y:auto;overflow-x:hidden}.tab-container:has(>.tab--no-margin){padding:0!important}.tab-container:has(>.tab--no-min-height){min-height:unset}.tab-container:has(>.tab--no-background){background:transparent!important}.tab-content-container{display:flex;gap:32px;overflow:auto;margin-bottom:16px}.loading-container{display:flex;justify-content:center;flex-direction:row}.case-detail-tabs{display:flex;margin-bottom:24px}.case-detail-tabs cds-tab{display:none!important}.buttons-container{display:flex;flex-direction:row;gap:8px;align-items:center}.case-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end;padding-bottom:4px}.case-actions--compact,.case-actions--small-title{padding-bottom:0;align-items:flex-start}.case-actions ::ng-deep .version-selection{width:160px}.case-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.case-status-assign-custom-title{display:flex;gap:16px;align-items:flex-end}.case-status-assign-custom-title .cds--tag{margin:0;overflow:hidden;text-overflow:ellipsis;line-height:24px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;max-width:100%}.case-status-assign-custom-title.--compact{align-items:center}.task-panel{width:100%;transition:height .15s ease-in-out}.start-form-panel{display:flex;flex-direction:column;width:100%;height:100%;background-color:var(--cds-layer);padding:8px 16px 16px}.start-form-panel__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.start-form-panel__title{margin:0;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.start-form-panel__body{flex:1;overflow-y:auto}.split-area__content{height:100%!important}.split-area__content .tab-container{height:min-content!important;overflow:hidden!important}:host ::ng-deep .container-fluid{height:100%!important;width:100%!important;margin:0!important;padding:0!important}::ng-deep .tab-content-container .as-split-gutter{background-color:transparent!important;--_as-gutter-icon-disabled: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1' height='1'/%3E\");--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABQJJREFUeF7dWll22zAMpNwzlM5xmpMlOVl6mzrKHexWm8UFy4xIp+/FP3mxQWAwWAiRGsJ3/gwhhJvt4CRCfgCtosYhDOHm4SlW7rZyq9t/R7GsZoYQDhCA89UIrzakKuQtpRTiHv03ycJB3t8KuU9AByNfw5dWJpj1h5YABmGRsvgufzsSG21NEwGWUrv5yiuZb31yMZoAAjBFPqBdor9G0vpwu2+PBgE6TK/q0pUxxiwZxnE0SefkE0sHWQUygGG3ll0c2tGNn+M0DiSfHDlHQBu2rffoWgBWPRHWIUreM654li5bMwDQBIhI9naHFgVQCSS2PHliWlLm0/YsMrcwK6ISp1QGANhzG7XFDj2gUFr8yzrkydOJ6CyACBB1lIWkbPyeQ2UQ2ZKxksCLft4EaWqB/AshHCdg0b/1gB7wJB1QBrQ0ml4E2MMyFgxJ6iABuEGdgCUeZVQm+fQ7fhfAsflzAKFLS1G2ptmMwUpDl1oyAGxo2fw2hHBzjpsm+XiO2TGQF1GWACJGfecAjHmgCTZum/lQfezQTZ3L7z+g3goc2xGtFT86A0qLh5pgjPF13aLmv9aHdYiVn8uMwFNixQlYqVuNvayK3sZxNElgHarlP6duo2bpOcbXWxheVhkTj7Tv4ATsTG/OL6CG8DZ+KCQMIcSf6HnAAo8hrAjGRpIblLxveDm8/q4YC6fT6flyufzWBhXGoTWd4QOUp6enX9fr9X2od6SFhJlTu4FBGZA5n+jbnddZjPG8nz8lo222ItHJEraRICAAMmG6rPGb2FTjedqHsET+4/Lbu+phHWLlJ/g+Cd4gpJDgp71HHzAHFCqOEFCSULjrNkaxw2rO/zidnv/MNY99WIcY+TKufibUmOcSEB5IxLTHXLal2FG4h83VPzET1h6wUxDP8fXfJW5V8xuQhqFwVtGNgDuQ6Yo367Pb9ixdjVckVE1QS/0ekZhybRw/zMZblkBpd1sMPIdJkAsClF2ghQQPYJYBQjp5BKCBEHD4JZDi6bED3AebRDFbAp58Ski3JrgphQcgozEwXZ2dBH3nZ2Bq5KcyahuEgO1wIWBnyIuoS5hA9pHIp01dnANSdlvKwXWocRC6Pw/U70MBozCQAWI5JKDF5wFrtk8uR6XKYQibnL9dr+/CjgA5v81AamMFByTTmOhQp56hPw5/vrrvx61euz2gZKfHgcj98bUkgjo/WJCxeMrJFyQgR8ocQcGnwqsJpgSK8pymTPeIThus4DKwBKWJFNsFklEcOT9ApyFADswAQJMiwkaUldeQ7ZTKDWf79tsSgIasDwGduro1CbY+hVqZgpJ1SA5L6bQHMJNjOy19MsCgBiNgV8DK+1GxSXoYAcMwhNttOedPIZTPAhm8bQ6Anx57ZMBGgfHuXs6yuEANBBtR/2bIjzkj8bAMSIYU+KLDaoKSU8KFCOP7LAsTcDTZ2jPAfrUWf3VGnwdo1pgF5xiz9yhazwOExwfv9suEm2XArJwNtSP/+AxgwlHL1iVwiAUdhEaAxhtLWGbZDEbPEiCyhHWIla93KO7AvMoAwre7bW5jxCAfwaHnoa4N3gVU5X2RthX0gdVNBPhDZnYgzMH7ImKbCOA8wnfsVO+jeUgIEHfYFUs7jHYNLN2YvJkBXwYaNuQIwnp2cgoCag3LN1Z2+EwfwCVPLPAOJ1n05oDt9x5oRR37Pb72s/e+kU81L/EXSRwjcUdkvjUAAAAASUVORK5CYII=)}::ng-deep .tab-content-container .as-split-gutter-icon{background-repeat:no-repeat;background-size:16px 16px}::ng-deep .tab-content-container--dark .as-split-gutter{--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABPlJREFUeF7tm1tW3DAMhu2+krCmdmWlKytrIuGV9HjixDddfjkOtOd0XmAGWZfPsiw7g3fVyzvntvpD9H01+JIuwCamX5YKf9VfmCVaDze2S2fXIDG+CGC8YsrqMCvDFDmHZYCeI5gE6LietD2LlNb6uQAQTLWfCDTLmLpOIfoRvxEZydZn+pH7+vdlAEJyoIwIwDIrFtk7C2TyA/Po9gxY1zVWrN2haZq85FqS3zEF+YET3qi6rFzjfAR0yGkBwQA0wyFU75zf5MaOBYDoR2YGDigqY+U7HOKHlAsFiQOXqax+JYCYBGJr32ZAB+lEpxwc3i1nDcDWtBUYPjN8p35VBxf/4/MQUI7lqAGPzwjYBQDv3PQ0+Ue/CjV/sODp8+UiyNE7XLHO6EM+Dg4/ntBdAI69zdIqBlgTlDldADLN9a7R551cDot0kDPNbn40AIh6LSS4DS0Be9jJg7sAXPHJfBZojbXriMscGgDvvhUYmRGEes6iocJiyVejWdelYDPNk5cquhnAxVSAlgDZQG/7bUqKjvZEDqgdYwaAzQsrVQHowFkPqd5bA4LlO1ytp+zoFM0Ml2V5CYPmeX78lF7v67rla8B6GpynKZxnxBfmD03MvASCMe/9z+DRtm2/SAiZLXRGqcapbYTaICB/BHwggN1wbuzQSUHI3UQBHPqo+wPO/7dlefkWJ0PyR0ofEIAjg49Z8GOe51fOCAYgIcPkd2vLsnz33v+ubadJ0TZw8Fqcmnkk+CBjCahHXodQ49mhHGjUDJCDf37Vjmn54Sa4MuxGaL/weWzDdggJigjgDL7KpG3bxLTPmY/PALqa90JgAahpf/ohb8jjAfAlrQdCCSDG0gRPxCiHzf81XwKUVA1M7gDwbojbspsM4GZea3jov5cFp6cGoHYRFCWE5FthQwKAGCnLS9vD6UXwXbnIRpGUcsH3D6JxI2sADwFHwEnqAI4HKW0AB07ci6QDXgLHELUIghPxbxRBBukICDuAZMCaAbu8XnLf1K4wzBjdGYpzSUGI66ntBQg/8QzYB+PyyW18++sAEHvu8wSY02IbosyONaBTPj7XO6/F+SxVzgPKRooWlN7l0A0g+i0tGXrmvdu2D/qYTrBgO0GKG3ocRlrhB/jm6a13zR2i8GAk+BOOw/lmy95RMIlgAlAvh4ex5/ll5CUndYMkJfGNFyL84sCuoHa3tSVQW9HkGxjeueUNv6Krx7dbTO5R/J1FARSQ9X3d8gyh13RSZAYA9iOcmHkJWO1ZA+LkRdbaRAlO3wogKL/+/YDZl5cuFQogC/P4k/j+mx0AYVDyYVQGWDMPlbcDQDVHOREA1DmGDAgv7emA0bEofgmAmn3euXUpT3d9Z4G+4PRR+6PR9oigRqarPiT6ng4nBzRguCe0ZJEBatyqQGvkfw249VtiHTNSzdGZAddVESmW1YBDv5bSpoxBnOZkst7h6jISx5sCEltnJFp7KKkG3KNfPQvULluB2UMuR1zaBiXjB08+IJr4FQA9c3gDgNINKSDK4SCff67VjEsZEI+Cl3Scg3vwA4cU6uu0bRL3d4k3ZEDm3mAoY2YqdX7BvVsA2OJW9qlhUe+KQvObX1DYANS+2iIdHArR0bArgXfUBoAMoewopH9ROd3oBmcZiMkOANA3sXUq9mm5Pqrvq7IYXLo3Vs713ao7WRAZ8NULfTACRd0fdjtUcYyr1cIAAAAASUVORK5CYII=)}.spacing-case-tags{margin-bottom:8px}\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: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6$1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i4$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.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: i4$1.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i4$1.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive", "tabContent", "templateContext"], outputs: ["selected"] }, { kind: "component", type: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "directive", type: i2.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i4$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "component", type: i2.OverflowMenuComponent, selector: "v-overflow-menu", inputs: ["open", "placement", "menuWidth", "offsetX", "offsetY", "closeOnSelect", "useHostAsReference", "portalToBody"], outputs: ["openChange"] }, { kind: "component", type: i2.OverflowMenuOptionComponent, selector: "v-overflow-menu-option", inputs: ["disabled", "type", "testId", "optionId"], outputs: ["selected"] }, { kind: "component", type: i2.OverflowMenuTriggerComponent, selector: "v-overflow-menu-trigger", inputs: ["compact"] }, { kind: "component", type: CaseDetailTaskListComponent, selector: "valtimo-case-detail-task-list", inputs: ["openTaskAndProcessLinkInModal"], outputs: ["taskClickEvent", "formSubmitEvent"] }, { kind: "component", type: CaseDetailsTaskDetailComponent, selector: "valtimo-case-detail-task-detail", inputs: ["taskAndProcessLink"], outputs: ["closeEvent", "assignmentOfTaskChanged", "dueDateChanged", "activeChange", "formSubmit"] }, { kind: "component", type: i17.SplitComponent, selector: "as-split", inputs: ["gutterSize", "gutterStep", "disabled", "gutterClickDeltaPx", "direction", "dir", "unit", "gutterAriaLabel", "restrictMove", "useTransition", "gutterDblClickDuration"], outputs: ["gutterClick", "gutterDblClick", "dragStart", "dragEnd", "transitionEnd"], exportAs: ["asSplit"] }, { kind: "component", type: i17.SplitAreaComponent, selector: "as-split-area", inputs: ["size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { kind: "component", type: CaseDetailHeaderWidgetComponent, selector: "valtimo-case-detail-header-widget" }, { kind: "directive", type: i2.ObserveSizeDirective, selector: "[observeSize]", outputs: ["widthChange", "heightChange"] }, { kind: "component", type: i2.AssignmentComponent, selector: "valtimo-assignment", inputs: ["mode", "hasPermission", "assigneeId", "assigneeFullName", "assignedTeamKey", "assignedTeamTitle", "candidateUsers$", "candidateTeams$"], outputs: ["assignmentChangedEvent", "unassignedEvent"] }, { kind: "component", type: CaseSupportingProcessStartModalComponent, selector: "valtimo-case-supporting-process-start-modal", inputs: ["isAdmin"], outputs: ["formSubmit"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "pipe", type: TabTranslatePipe, name: "tabTranslate" }] }); }
5747
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseDetailComponent, deps: [{ token: i2.BreadcrumbService }, { token: i1$2.CaseStatusService }, { token: i2.CdsThemeService }, { token: i0.ComponentFactoryResolver }, { token: i1$2.DocumentService }, { token: CaseDetailLayoutService }, { token: CaseService }, { token: CaseTabService }, { token: i4$1.IconService }, { token: i5$4.KeycloakService }, { token: i1$4.NGXLogger }, { token: i1.GlobalNotificationService }, { token: i2.PageHeaderService }, { token: i2.PageTitleService }, { token: i2$2.PermissionService }, { token: i4.TranslateService }, { token: i0.Renderer2 }, { token: i1$3.ActivatedRoute }, { token: i1$3.Router }, { token: WidgetsService }, { token: i12.UserProviderService }, { token: i5.SseService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
5748
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseDetailComponent, isStandalone: false, selector: "ng-component", providers: [CaseTabService, CaseDetailLayoutService, ObserveSizeDirective], viewQueries: [{ propertyName: "supportingProcessStart", first: true, predicate: ["supportingProcessStartModal"], descendants: true }, { propertyName: "viewContainerRef", first: true, predicate: ["tabContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_tabContentContainer", first: true, predicate: ["tabContentContainer"], 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<div\n class=\"main-content\"\n [ngClass]=\"{'main-content--no-horizontal-overflow': $tabHorizontalOverflowDisabled()}\"\n>\n <div class=\"container-fluid\">\n <div\n class=\"main-content__header\"\n observeSize\n (heightChange)=\"onMainContentHeaderHeightChange($event)\"\n >\n <valtimo-case-detail-header-widget></valtimo-case-detail-header-widget>\n\n <ng-container *ngIf=\"caseTags$ | async as caseTags\">\n @if ((caseTags || []).length > 0) {\n <div class=\"spacing-case-tags\">\n @for (tag of caseTags; track tag) {\n <cds-tag size=\"sm\" [type]=\"tag.tagType\">\n {{ tag.title }}\n </cds-tag>\n }\n </div>\n }\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n\n <ng-template #tabs>\n <ng-container *ngIf=\"{activeTab: activeTab$ | async} as obs\">\n <cds-tabs *ngIf=\"tabLoader\" type=\"inline\" class=\"case-detail-tabs\">\n <cds-tab\n *ngFor=\"let tab of tabLoader.tabs\"\n [active]=\"tab.name === (activeTabName$ | async)\"\n heading=\"{{ tab | tabTranslate | async }}\"\n (selected)=\"onTabSelected(tab, obs.activeTab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n </ng-template>\n </div>\n\n <div\n *ngIf=\"{\n noTabsConfigured: noTabsConfigured$ | async,\n showTaskList: showTaskList$ | async,\n showNoAccess: showNoAccess$ | async,\n caseDetailLayout: caseDetailLayout$ | async,\n openTaskAndProcessLinkInModal: openTaskAndProcessLinkInModal$ | async,\n taskAndProcessLinkOpenedInPanel: taskAndProcessLinkOpenedInPanel$ | async,\n startFormPanel: startFormPanel$ | async,\n isDarkMode: isDarkMode$ | async,\n compactMode: compactMode$ | async,\n tabContentContainerMaxHeight: tabContentContainerMaxHeight$ | async,\n } as tabContentObs\"\n #tabContentContainer\n class=\"tab-content-container\"\n [ngClass]=\"{\n 'tab-content-container--dark': tabContentObs.isDarkMode,\n 'tab-content-container--compact': tabContentObs.compactMode,\n }\"\n [style.max-height]=\"tabContentObs.tabContentContainerMaxHeight\"\n [style.height]=\"tabContentObs.tabContentContainerMaxHeight\"\n >\n <as-split\n direction=\"horizontal\"\n [disabled]=\"!tabContentObs.caseDetailLayout.widthAdjustable\"\n [gutterSize]=\"CASE_DETAIL_GUTTER_SIZE\"\n [unit]=\"tabContentObs.caseDetailLayout.unit\"\n class=\"split-area\"\n >\n <as-split-area\n [size]=\"tabContentObs.caseDetailLayout.leftPanelWidth\"\n [minSize]=\"tabContentObs.caseDetailLayout.leftPanelMinWidth\"\n [maxSize]=\"tabContentObs.caseDetailLayout.leftPanelMaxWidth\"\n class=\"split-area__content\"\n >\n <div\n class=\"card-body bg-white p-5 position-relative tab-container\"\n [class.tab-container--compact]=\"compactMode$ | async\"\n >\n <div *ngIf=\"loadingTabs$ | async\" class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.showNoAccess\"\n description=\"{{ 'case.noAccess.description' | translate }}\"\n title=\"{{ 'case.noAccess.title' | translate }}\"\n illustration=\"valtimo-layout/img/emptystate-not-authorised.svg\"\n >\n </valtimo-no-results>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.noTabsConfigured\"\n [description]=\"'case.tabs.noResultsDescription' | translate\"\n [title]=\"'case.tabs.noResults' | translate\"\n ></valtimo-no-results>\n\n <ng-template #tabContainer></ng-template>\n\n <div class=\"clearfix\"></div>\n </div>\n </as-split-area>\n\n <as-split-area\n *ngIf=\"tabContentObs.caseDetailLayout.showRightPanel\"\n [size]=\"tabContentObs.caseDetailLayout.rightPanelWidth\"\n [minSize]=\"tabContentObs.caseDetailLayout.rightPanelMinWidth\"\n [maxSize]=\"tabContentObs.caseDetailLayout.rightPanelMaxWidth\"\n >\n @if (tabContentObs.showTaskList) {\n <div class=\"task-panel\">\n @if (tabContentObs.startFormPanel) {\n <div class=\"start-form-panel\">\n <section class=\"start-form-panel__header\">\n <h4 class=\"start-form-panel__title\">{{ tabContentObs.startFormPanel.title }}</h4>\n\n <button cdsButton=\"ghost\" [iconOnly]=\"true\" (click)=\"onStartFormPanelClose()\">\n <svg cdsIcon=\"close\" size=\"16\"></svg>\n </button>\n </section>\n\n <section class=\"start-form-panel__body\">\n <ng-container\n *ngTemplateOutlet=\"tabContentObs.startFormPanel.template\"\n ></ng-container>\n </section>\n </div>\n } @else if (tabContentObs.taskAndProcessLinkOpenedInPanel) {\n <valtimo-case-detail-task-detail\n [taskAndProcessLink]=\"tabContentObs.taskAndProcessLinkOpenedInPanel\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (closeEvent)=\"onTaskDetailsClose()\"\n (formSubmit)=\"onFormSubmitEvent()\"\n (dueDateChanged)=\"onDueDateChanged()\"\n >\n </valtimo-case-detail-task-detail>\n } @else {\n <valtimo-case-detail-task-list\n [openTaskAndProcessLinkInModal]=\"tabContentObs.openTaskAndProcessLinkInModal\"\n (taskClickEvent)=\"onTaskClickEvent($event)\"\n (formSubmitEvent)=\"onFormSubmitEvent()\"\n ></valtimo-case-detail-task-list>\n }\n </div>\n }\n </as-split-area>\n </as-split>\n </div>\n </div>\n\n <valtimo-case-supporting-process-start-modal\n [isAdmin]=\"isAdmin$ | async\"\n (formSubmit)=\"onFormSubmitEvent()\"\n #supportingProcessStartModal\n ></valtimo-case-supporting-process-start-modal>\n</div>\n\n<ng-template\n #caseDetailHeader\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {canHaveAssignee: canHaveAssignee, document: document, canAssign: canAssign}\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template\n #caseDetailAssignee\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div *ngIf=\"canHaveAssignee && document\">\n <valtimo-assignment\n *ngIf=\"canAssignLoaded$ | async\"\n mode=\"case\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n [assigneeId]=\"document.assigneeId\"\n [assignedTeamKey]=\"document.assignedTeamKey\"\n [assignedTeamTitle]=\"document.assignedTeamTitle\"\n [hasPermission]=\"canAssign\"\n [candidateUsers$]=\"candidateUsers$\"\n [candidateTeams$]=\"candidateTeams$\"\n (assignmentChangedEvent)=\"onAssignmentChanged($event)\"\n (unassignedEvent)=\"onUnassigned()\"\n ></valtimo-assignment>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canClaim=\"canClaim\" let-canHaveAssignee=\"canHaveAssignee\">\n <v-overflow-menu-option\n *ngIf=\"canClaim && canHaveAssignee\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n (selected)=\"claimAssignee()\"\n >\n {{ 'case.claimAssigneeCase' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template\n #unassignButton\n let-canAssign=\"canAssign\"\n let-canHaveAssignee=\"canHaveAssignee\"\n let-assigneeId=\"assigneeId\"\n>\n <v-overflow-menu-option\n *ngIf=\"canHaveAssignee && canAssign\"\n [disabled]=\"!assigneeId\"\n (selected)=\"unassignAssignee()\"\n >\n {{ 'assignDocument.remove' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template #deleteButton let-canDelete=\"canDelete\">\n <v-overflow-menu-option\n *ngIf=\"canDelete\"\n [disabled]=\"isDeleting$ | async\"\n (selected)=\"deleteDocument()\"\n type=\"danger\"\n >\n {{ 'case.delete.delete' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template #inspectButton let-canInspect=\"canInspect\">\n <v-overflow-menu-option *ngIf=\"canInspect\" (selected)=\"navigateToInspection()\">\n {{ 'case.inspection.openInspector' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template #customStartTrigger>\n <button\n [size]=\"(compactMode$ | async) ? 'sm' : 'lg'\"\n cdsButton=\"primary\"\n [disabled]=\"startableItems.length === 0\"\n [ngbTooltip]=\"startableItems.length === 0 ? 'No action' : null\"\n >\n {{ 'case.startSubProcess' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"chevron--down\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.delete.confirm\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"case.delete.description\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"case.delete.delete\"\n (confirmEvent)=\"onConfirmDelete()\"\n></valtimo-confirmation-modal>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div\n class=\"case-actions\"\n [ngClass]=\"{\n 'case-actions--compact': compactMode$ | async,\n 'case-actions--small-title': smallTitle$ | async,\n }\"\n *ngIf=\"{\n assigneeId: assigneeId$ | async,\n canAssign: canAssign$ | async,\n canClaim: canClaim$ | async,\n canHaveAssignee: canHaveAssignee$ | async,\n canDelete: canDelete$ | async,\n canInspect: canInspect$ | async,\n document: document$ | async,\n caseStatus: caseStatus$ | async,\n } as obs\"\n >\n <div class=\"case-status-assign-custom-title\" [ngClass]=\"{'--compact': compactMode$ | async}\">\n @if (obs.caseStatus) {\n <cds-tag size=\"sm\" [type]=\"obs.caseStatus.tagType\" [title]=\"obs.caseStatus.title\">{{\n obs.caseStatus.title\n }}</cds-tag>\n }\n\n <div [ngClass]=\"{'--compact': compactMode$ | async}\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {\n canHaveAssignee: obs.canHaveAssignee,\n document: obs.document,\n canAssign: obs.canAssign,\n }\n \"\n ></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"caseDetailHeader\"></ng-container>\n </div>\n\n <div class=\"buttons-container\">\n <v-overflow-menu\n *ngIf=\"obs.canHaveAssignee || obs.canDelete || obs.canInspect\"\n placement=\"bottom-end\"\n class=\"overflow-button assign-overflow\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n >\n <v-overflow-menu-trigger\n overflowTrigger\n [compact]=\"compactMode$ | async\"\n ></v-overflow-menu-trigger>\n\n <ng-container\n *ngTemplateOutlet=\"\n claimButton;\n context: {canClaim: obs.canClaim, canHaveAssignee: obs.canHaveAssignee}\n \"\n >\n </ng-container>\n\n <ng-container\n *ngTemplateOutlet=\"\n unassignButton;\n context: {\n canAssign: obs.canAssign,\n canHaveAssignee: obs.canHaveAssignee,\n assigneeId: obs.assigneeId,\n }\n \"\n >\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"inspectButton; context: {canInspect: obs.canInspect}\">\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"deleteButton; context: {canDelete: obs.canDelete}\">\n </ng-container>\n </v-overflow-menu>\n\n <v-overflow-menu\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n [menuWidth]=\"dropdownWidth$ | async\"\n placement=\"bottom-end\"\n class=\"overflow-button case-detail-overflow\"\n >\n <ng-container overflowTrigger>\n <ng-container *ngTemplateOutlet=\"customStartTrigger\"></ng-container>\n </ng-container>\n <v-overflow-menu-option\n *ngFor=\"let startableItem of startableItems\"\n [attr.title]=\"startableItem.displayName\"\n (selected)=\"startItem(startableItem)\"\n >\n {{ startableItem.displayName }}\n </v-overflow-menu-option>\n </v-overflow-menu>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".main-content{overflow:hidden;padding-bottom:0}.main-content--no-horizontal-overflow{overflow-x:hidden}.tab-container{height:min-content;min-height:300px;overflow-y:auto;overflow-x:hidden}.tab-container:has(>.tab--no-margin){padding:0!important}.tab-container:has(>.tab--no-min-height){min-height:unset}.tab-container:has(>.tab--no-background){background:transparent!important}.tab-content-container{display:flex;gap:32px;overflow:auto;margin-bottom:16px}.loading-container{display:flex;justify-content:center;flex-direction:row}.case-detail-tabs{display:flex;margin-bottom:24px}.case-detail-tabs cds-tab{display:none!important}.buttons-container{display:flex;flex-direction:row;gap:8px;align-items:center}.case-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end;padding-bottom:4px}.case-actions--compact,.case-actions--small-title{padding-bottom:0;align-items:flex-start}.case-actions ::ng-deep .version-selection{width:160px}.case-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.case-status-assign-custom-title{display:flex;gap:16px;align-items:flex-end}.case-status-assign-custom-title .cds--tag{margin:0;overflow:hidden;text-overflow:ellipsis;line-height:24px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;max-width:100%}.case-status-assign-custom-title.--compact{align-items:center}.task-panel{width:100%;transition:height .15s ease-in-out}.start-form-panel{display:flex;flex-direction:column;width:100%;height:100%;background-color:var(--cds-layer);padding:8px 16px 16px}.start-form-panel__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.start-form-panel__title{margin:0;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.start-form-panel__body{flex:1;overflow-y:auto}.split-area__content{height:100%!important}.split-area__content .tab-container{height:min-content!important;overflow:hidden!important}:host ::ng-deep .container-fluid{height:100%!important;width:100%!important;margin:0!important;padding:0!important}::ng-deep .tab-content-container .as-split-gutter{background-color:transparent!important;--_as-gutter-icon-disabled: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1' height='1'/%3E\");--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABQJJREFUeF7dWll22zAMpNwzlM5xmpMlOVl6mzrKHexWm8UFy4xIp+/FP3mxQWAwWAiRGsJ3/gwhhJvt4CRCfgCtosYhDOHm4SlW7rZyq9t/R7GsZoYQDhCA89UIrzakKuQtpRTiHv03ycJB3t8KuU9AByNfw5dWJpj1h5YABmGRsvgufzsSG21NEwGWUrv5yiuZb31yMZoAAjBFPqBdor9G0vpwu2+PBgE6TK/q0pUxxiwZxnE0SefkE0sHWQUygGG3ll0c2tGNn+M0DiSfHDlHQBu2rffoWgBWPRHWIUreM654li5bMwDQBIhI9naHFgVQCSS2PHliWlLm0/YsMrcwK6ISp1QGANhzG7XFDj2gUFr8yzrkydOJ6CyACBB1lIWkbPyeQ2UQ2ZKxksCLft4EaWqB/AshHCdg0b/1gB7wJB1QBrQ0ml4E2MMyFgxJ6iABuEGdgCUeZVQm+fQ7fhfAsflzAKFLS1G2ptmMwUpDl1oyAGxo2fw2hHBzjpsm+XiO2TGQF1GWACJGfecAjHmgCTZum/lQfezQTZ3L7z+g3goc2xGtFT86A0qLh5pgjPF13aLmv9aHdYiVn8uMwFNixQlYqVuNvayK3sZxNElgHarlP6duo2bpOcbXWxheVhkTj7Tv4ATsTG/OL6CG8DZ+KCQMIcSf6HnAAo8hrAjGRpIblLxveDm8/q4YC6fT6flyufzWBhXGoTWd4QOUp6enX9fr9X2od6SFhJlTu4FBGZA5n+jbnddZjPG8nz8lo222ItHJEraRICAAMmG6rPGb2FTjedqHsET+4/Lbu+phHWLlJ/g+Cd4gpJDgp71HHzAHFCqOEFCSULjrNkaxw2rO/zidnv/MNY99WIcY+TKufibUmOcSEB5IxLTHXLal2FG4h83VPzET1h6wUxDP8fXfJW5V8xuQhqFwVtGNgDuQ6Yo367Pb9ixdjVckVE1QS/0ekZhybRw/zMZblkBpd1sMPIdJkAsClF2ghQQPYJYBQjp5BKCBEHD4JZDi6bED3AebRDFbAp58Ski3JrgphQcgozEwXZ2dBH3nZ2Bq5KcyahuEgO1wIWBnyIuoS5hA9pHIp01dnANSdlvKwXWocRC6Pw/U70MBozCQAWI5JKDF5wFrtk8uR6XKYQibnL9dr+/CjgA5v81AamMFByTTmOhQp56hPw5/vrrvx61euz2gZKfHgcj98bUkgjo/WJCxeMrJFyQgR8ocQcGnwqsJpgSK8pymTPeIThus4DKwBKWJFNsFklEcOT9ApyFADswAQJMiwkaUldeQ7ZTKDWf79tsSgIasDwGduro1CbY+hVqZgpJ1SA5L6bQHMJNjOy19MsCgBiNgV8DK+1GxSXoYAcMwhNttOedPIZTPAhm8bQ6Anx57ZMBGgfHuXs6yuEANBBtR/2bIjzkj8bAMSIYU+KLDaoKSU8KFCOP7LAsTcDTZ2jPAfrUWf3VGnwdo1pgF5xiz9yhazwOExwfv9suEm2XArJwNtSP/+AxgwlHL1iVwiAUdhEaAxhtLWGbZDEbPEiCyhHWIla93KO7AvMoAwre7bW5jxCAfwaHnoa4N3gVU5X2RthX0gdVNBPhDZnYgzMH7ImKbCOA8wnfsVO+jeUgIEHfYFUs7jHYNLN2YvJkBXwYaNuQIwnp2cgoCag3LN1Z2+EwfwCVPLPAOJ1n05oDt9x5oRR37Pb72s/e+kU81L/EXSRwjcUdkvjUAAAAASUVORK5CYII=)}::ng-deep .tab-content-container .as-split-gutter-icon{background-repeat:no-repeat;background-size:16px 16px}::ng-deep .tab-content-container--dark .as-split-gutter{--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABPlJREFUeF7tm1tW3DAMhu2+krCmdmWlKytrIuGV9HjixDddfjkOtOd0XmAGWZfPsiw7g3fVyzvntvpD9H01+JIuwCamX5YKf9VfmCVaDze2S2fXIDG+CGC8YsrqMCvDFDmHZYCeI5gE6LietD2LlNb6uQAQTLWfCDTLmLpOIfoRvxEZydZn+pH7+vdlAEJyoIwIwDIrFtk7C2TyA/Po9gxY1zVWrN2haZq85FqS3zEF+YET3qi6rFzjfAR0yGkBwQA0wyFU75zf5MaOBYDoR2YGDigqY+U7HOKHlAsFiQOXqax+JYCYBGJr32ZAB+lEpxwc3i1nDcDWtBUYPjN8p35VBxf/4/MQUI7lqAGPzwjYBQDv3PQ0+Ue/CjV/sODp8+UiyNE7XLHO6EM+Dg4/ntBdAI69zdIqBlgTlDldADLN9a7R551cDot0kDPNbn40AIh6LSS4DS0Be9jJg7sAXPHJfBZojbXriMscGgDvvhUYmRGEes6iocJiyVejWdelYDPNk5cquhnAxVSAlgDZQG/7bUqKjvZEDqgdYwaAzQsrVQHowFkPqd5bA4LlO1ytp+zoFM0Ml2V5CYPmeX78lF7v67rla8B6GpynKZxnxBfmD03MvASCMe/9z+DRtm2/SAiZLXRGqcapbYTaICB/BHwggN1wbuzQSUHI3UQBHPqo+wPO/7dlefkWJ0PyR0ofEIAjg49Z8GOe51fOCAYgIcPkd2vLsnz33v+ubadJ0TZw8Fqcmnkk+CBjCahHXodQ49mhHGjUDJCDf37Vjmn54Sa4MuxGaL/weWzDdggJigjgDL7KpG3bxLTPmY/PALqa90JgAahpf/ohb8jjAfAlrQdCCSDG0gRPxCiHzf81XwKUVA1M7gDwbojbspsM4GZea3jov5cFp6cGoHYRFCWE5FthQwKAGCnLS9vD6UXwXbnIRpGUcsH3D6JxI2sADwFHwEnqAI4HKW0AB07ci6QDXgLHELUIghPxbxRBBukICDuAZMCaAbu8XnLf1K4wzBjdGYpzSUGI66ntBQg/8QzYB+PyyW18++sAEHvu8wSY02IbosyONaBTPj7XO6/F+SxVzgPKRooWlN7l0A0g+i0tGXrmvdu2D/qYTrBgO0GKG3ocRlrhB/jm6a13zR2i8GAk+BOOw/lmy95RMIlgAlAvh4ex5/ll5CUndYMkJfGNFyL84sCuoHa3tSVQW9HkGxjeueUNv6Krx7dbTO5R/J1FARSQ9X3d8gyh13RSZAYA9iOcmHkJWO1ZA+LkRdbaRAlO3wogKL/+/YDZl5cuFQogC/P4k/j+mx0AYVDyYVQGWDMPlbcDQDVHOREA1DmGDAgv7emA0bEofgmAmn3euXUpT3d9Z4G+4PRR+6PR9oigRqarPiT6ng4nBzRguCe0ZJEBatyqQGvkfw249VtiHTNSzdGZAddVESmW1YBDv5bSpoxBnOZkst7h6jISx5sCEltnJFp7KKkG3KNfPQvULluB2UMuR1zaBiXjB08+IJr4FQA9c3gDgNINKSDK4SCff67VjEsZEI+Cl3Scg3vwA4cU6uu0bRL3d4k3ZEDm3mAoY2YqdX7BvVsA2OJW9qlhUe+KQvObX1DYANS+2iIdHArR0bArgXfUBoAMoewopH9ROd3oBmcZiMkOANA3sXUq9mm5Pqrvq7IYXLo3Vs713ao7WRAZ8NULfTACRd0fdjtUcYyr1cIAAAAASUVORK5CYII=)}.spacing-case-tags{margin-bottom:8px}\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: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6$1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i4$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.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: i4$1.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i4$1.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive", "tabContent", "templateContext"], outputs: ["selected"] }, { kind: "component", type: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "directive", type: i2.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i4$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "component", type: i2.OverflowMenuComponent, selector: "v-overflow-menu", inputs: ["open", "placement", "menuWidth", "offsetX", "offsetY", "closeOnSelect", "useHostAsReference", "portalToBody"], outputs: ["openChange"] }, { kind: "component", type: i2.OverflowMenuOptionComponent, selector: "v-overflow-menu-option", inputs: ["disabled", "type", "testId", "optionId"], outputs: ["selected"] }, { kind: "component", type: i2.OverflowMenuTriggerComponent, selector: "v-overflow-menu-trigger", inputs: ["compact"] }, { kind: "component", type: CaseDetailTaskListComponent, selector: "valtimo-case-detail-task-list", inputs: ["openTaskAndProcessLinkInModal"], outputs: ["taskClickEvent", "formSubmitEvent"] }, { kind: "component", type: CaseDetailsTaskDetailComponent, selector: "valtimo-case-detail-task-detail", inputs: ["taskAndProcessLink"], outputs: ["closeEvent", "assignmentOfTaskChanged", "dueDateChanged", "activeChange", "formSubmit"] }, { kind: "component", type: i18.SplitComponent, selector: "as-split", inputs: ["gutterSize", "gutterStep", "disabled", "gutterClickDeltaPx", "direction", "dir", "unit", "gutterAriaLabel", "restrictMove", "useTransition", "gutterDblClickDuration"], outputs: ["gutterClick", "gutterDblClick", "dragStart", "dragEnd", "transitionEnd"], exportAs: ["asSplit"] }, { kind: "component", type: i18.SplitAreaComponent, selector: "as-split-area", inputs: ["size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { kind: "component", type: CaseDetailHeaderWidgetComponent, selector: "valtimo-case-detail-header-widget" }, { kind: "directive", type: i2.ObserveSizeDirective, selector: "[observeSize]", outputs: ["widthChange", "heightChange"] }, { kind: "component", type: i2.AssignmentComponent, selector: "valtimo-assignment", inputs: ["mode", "hasPermission", "assigneeId", "assigneeFullName", "assignedTeamKey", "assignedTeamTitle", "candidateUsers$", "candidateTeams$"], outputs: ["assignmentChangedEvent", "unassignedEvent"] }, { kind: "component", type: CaseSupportingProcessStartModalComponent, selector: "valtimo-case-supporting-process-start-modal", inputs: ["isAdmin"], outputs: ["formSubmit"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "pipe", type: TabTranslatePipe, name: "tabTranslate" }] }); }
5683
5749
  }
5684
5750
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseDetailComponent, decorators: [{
5685
5751
  type: Component,
5686
5752
  args: [{ standalone: false, providers: [CaseTabService, CaseDetailLayoutService, ObserveSizeDirective], 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<div\n class=\"main-content\"\n [ngClass]=\"{'main-content--no-horizontal-overflow': $tabHorizontalOverflowDisabled()}\"\n>\n <div class=\"container-fluid\">\n <div\n class=\"main-content__header\"\n observeSize\n (heightChange)=\"onMainContentHeaderHeightChange($event)\"\n >\n <valtimo-case-detail-header-widget></valtimo-case-detail-header-widget>\n\n <ng-container *ngIf=\"caseTags$ | async as caseTags\">\n @if ((caseTags || []).length > 0) {\n <div class=\"spacing-case-tags\">\n @for (tag of caseTags; track tag) {\n <cds-tag size=\"sm\" [type]=\"tag.tagType\">\n {{ tag.title }}\n </cds-tag>\n }\n </div>\n }\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n\n <ng-template #tabs>\n <ng-container *ngIf=\"{activeTab: activeTab$ | async} as obs\">\n <cds-tabs *ngIf=\"tabLoader\" type=\"inline\" class=\"case-detail-tabs\">\n <cds-tab\n *ngFor=\"let tab of tabLoader.tabs\"\n [active]=\"tab.name === (activeTabName$ | async)\"\n heading=\"{{ tab | tabTranslate | async }}\"\n (selected)=\"onTabSelected(tab, obs.activeTab)\"\n ></cds-tab>\n </cds-tabs>\n </ng-container>\n </ng-template>\n </div>\n\n <div\n *ngIf=\"{\n noTabsConfigured: noTabsConfigured$ | async,\n showTaskList: showTaskList$ | async,\n showNoAccess: showNoAccess$ | async,\n caseDetailLayout: caseDetailLayout$ | async,\n openTaskAndProcessLinkInModal: openTaskAndProcessLinkInModal$ | async,\n taskAndProcessLinkOpenedInPanel: taskAndProcessLinkOpenedInPanel$ | async,\n startFormPanel: startFormPanel$ | async,\n isDarkMode: isDarkMode$ | async,\n compactMode: compactMode$ | async,\n tabContentContainerMaxHeight: tabContentContainerMaxHeight$ | async,\n } as tabContentObs\"\n #tabContentContainer\n class=\"tab-content-container\"\n [ngClass]=\"{\n 'tab-content-container--dark': tabContentObs.isDarkMode,\n 'tab-content-container--compact': tabContentObs.compactMode,\n }\"\n [style.max-height]=\"tabContentObs.tabContentContainerMaxHeight\"\n [style.height]=\"tabContentObs.tabContentContainerMaxHeight\"\n >\n <as-split\n direction=\"horizontal\"\n [disabled]=\"!tabContentObs.caseDetailLayout.widthAdjustable\"\n [gutterSize]=\"CASE_DETAIL_GUTTER_SIZE\"\n [unit]=\"tabContentObs.caseDetailLayout.unit\"\n class=\"split-area\"\n >\n <as-split-area\n [size]=\"tabContentObs.caseDetailLayout.leftPanelWidth\"\n [minSize]=\"tabContentObs.caseDetailLayout.leftPanelMinWidth\"\n [maxSize]=\"tabContentObs.caseDetailLayout.leftPanelMaxWidth\"\n class=\"split-area__content\"\n >\n <div\n class=\"card-body bg-white p-5 position-relative tab-container\"\n [class.tab-container--compact]=\"compactMode$ | async\"\n >\n <div *ngIf=\"loadingTabs$ | async\" class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.showNoAccess\"\n description=\"{{ 'case.noAccess.description' | translate }}\"\n title=\"{{ 'case.noAccess.title' | translate }}\"\n illustration=\"valtimo-layout/img/emptystate-not-authorised.svg\"\n >\n </valtimo-no-results>\n\n <valtimo-no-results\n *ngIf=\"tabContentObs.noTabsConfigured\"\n [description]=\"'case.tabs.noResultsDescription' | translate\"\n [title]=\"'case.tabs.noResults' | translate\"\n ></valtimo-no-results>\n\n <ng-template #tabContainer></ng-template>\n\n <div class=\"clearfix\"></div>\n </div>\n </as-split-area>\n\n <as-split-area\n *ngIf=\"tabContentObs.caseDetailLayout.showRightPanel\"\n [size]=\"tabContentObs.caseDetailLayout.rightPanelWidth\"\n [minSize]=\"tabContentObs.caseDetailLayout.rightPanelMinWidth\"\n [maxSize]=\"tabContentObs.caseDetailLayout.rightPanelMaxWidth\"\n >\n @if (tabContentObs.showTaskList) {\n <div class=\"task-panel\">\n @if (tabContentObs.startFormPanel) {\n <div class=\"start-form-panel\">\n <section class=\"start-form-panel__header\">\n <h4 class=\"start-form-panel__title\">{{ tabContentObs.startFormPanel.title }}</h4>\n\n <button cdsButton=\"ghost\" [iconOnly]=\"true\" (click)=\"onStartFormPanelClose()\">\n <svg cdsIcon=\"close\" size=\"16\"></svg>\n </button>\n </section>\n\n <section class=\"start-form-panel__body\">\n <ng-container\n *ngTemplateOutlet=\"tabContentObs.startFormPanel.template\"\n ></ng-container>\n </section>\n </div>\n } @else if (tabContentObs.taskAndProcessLinkOpenedInPanel) {\n <valtimo-case-detail-task-detail\n [taskAndProcessLink]=\"tabContentObs.taskAndProcessLinkOpenedInPanel\"\n (activeChange)=\"onActiveChangeEvent($event)\"\n (closeEvent)=\"onTaskDetailsClose()\"\n (formSubmit)=\"onFormSubmitEvent()\"\n (dueDateChanged)=\"onDueDateChanged()\"\n >\n </valtimo-case-detail-task-detail>\n } @else {\n <valtimo-case-detail-task-list\n [openTaskAndProcessLinkInModal]=\"tabContentObs.openTaskAndProcessLinkInModal\"\n (taskClickEvent)=\"onTaskClickEvent($event)\"\n (formSubmitEvent)=\"onFormSubmitEvent()\"\n ></valtimo-case-detail-task-list>\n }\n </div>\n }\n </as-split-area>\n </as-split>\n </div>\n </div>\n\n <valtimo-case-supporting-process-start-modal\n [isAdmin]=\"isAdmin$ | async\"\n (formSubmit)=\"onFormSubmitEvent()\"\n #supportingProcessStartModal\n ></valtimo-case-supporting-process-start-modal>\n</div>\n\n<ng-template\n #caseDetailHeader\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {canHaveAssignee: canHaveAssignee, document: document, canAssign: canAssign}\n \"\n ></ng-container>\n</ng-template>\n\n<ng-template\n #caseDetailAssignee\n let-canHaveAssignee=\"canHaveAssignee\"\n let-document=\"document\"\n let-canAssign=\"canAssign\"\n>\n <div *ngIf=\"canHaveAssignee && document\">\n <valtimo-assignment\n *ngIf=\"canAssignLoaded$ | async\"\n mode=\"case\"\n [assigneeFullName]=\"document?.assigneeFullName\"\n [assigneeId]=\"document.assigneeId\"\n [assignedTeamKey]=\"document.assignedTeamKey\"\n [assignedTeamTitle]=\"document.assignedTeamTitle\"\n [hasPermission]=\"canAssign\"\n [candidateUsers$]=\"candidateUsers$\"\n [candidateTeams$]=\"candidateTeams$\"\n (assignmentChangedEvent)=\"onAssignmentChanged($event)\"\n (unassignedEvent)=\"onUnassigned()\"\n ></valtimo-assignment>\n </div>\n</ng-template>\n\n<ng-template #claimButton let-canClaim=\"canClaim\" let-canHaveAssignee=\"canHaveAssignee\">\n <v-overflow-menu-option\n *ngIf=\"canClaim && canHaveAssignee\"\n [disabled]=\"(isAssigning$ | async) || (isAssignedToCurrentUser$ | async)\"\n (selected)=\"claimAssignee()\"\n >\n {{ 'case.claimAssigneeCase' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template\n #unassignButton\n let-canAssign=\"canAssign\"\n let-canHaveAssignee=\"canHaveAssignee\"\n let-assigneeId=\"assigneeId\"\n>\n <v-overflow-menu-option\n *ngIf=\"canHaveAssignee && canAssign\"\n [disabled]=\"!assigneeId\"\n (selected)=\"unassignAssignee()\"\n >\n {{ 'assignDocument.remove' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template #deleteButton let-canDelete=\"canDelete\">\n <v-overflow-menu-option\n *ngIf=\"canDelete\"\n [disabled]=\"isDeleting$ | async\"\n (selected)=\"deleteDocument()\"\n type=\"danger\"\n >\n {{ 'case.delete.delete' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template #inspectButton let-canInspect=\"canInspect\">\n <v-overflow-menu-option *ngIf=\"canInspect\" (selected)=\"navigateToInspection()\">\n {{ 'case.inspection.openInspector' | translate }}\n </v-overflow-menu-option>\n</ng-template>\n\n<ng-template #customStartTrigger>\n <button\n [size]=\"(compactMode$ | async) ? 'sm' : 'lg'\"\n cdsButton=\"primary\"\n [disabled]=\"startableItems.length === 0\"\n [ngbTooltip]=\"startableItems.length === 0 ? 'No action' : null\"\n >\n {{ 'case.startSubProcess' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"chevron--down\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.delete.confirm\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"case.delete.description\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"case.delete.delete\"\n (confirmEvent)=\"onConfirmDelete()\"\n></valtimo-confirmation-modal>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <div\n class=\"case-actions\"\n [ngClass]=\"{\n 'case-actions--compact': compactMode$ | async,\n 'case-actions--small-title': smallTitle$ | async,\n }\"\n *ngIf=\"{\n assigneeId: assigneeId$ | async,\n canAssign: canAssign$ | async,\n canClaim: canClaim$ | async,\n canHaveAssignee: canHaveAssignee$ | async,\n canDelete: canDelete$ | async,\n canInspect: canInspect$ | async,\n document: document$ | async,\n caseStatus: caseStatus$ | async,\n } as obs\"\n >\n <div class=\"case-status-assign-custom-title\" [ngClass]=\"{'--compact': compactMode$ | async}\">\n @if (obs.caseStatus) {\n <cds-tag size=\"sm\" [type]=\"obs.caseStatus.tagType\" [title]=\"obs.caseStatus.title\">{{\n obs.caseStatus.title\n }}</cds-tag>\n }\n\n <div [ngClass]=\"{'--compact': compactMode$ | async}\">\n <ng-container\n *ngTemplateOutlet=\"\n caseDetailAssignee;\n context: {\n canHaveAssignee: obs.canHaveAssignee,\n document: obs.document,\n canAssign: obs.canAssign,\n }\n \"\n ></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"caseDetailHeader\"></ng-container>\n </div>\n\n <div class=\"buttons-container\">\n <v-overflow-menu\n *ngIf=\"obs.canHaveAssignee || obs.canDelete || obs.canInspect\"\n placement=\"bottom-end\"\n class=\"overflow-button assign-overflow\"\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n >\n <v-overflow-menu-trigger\n overflowTrigger\n [compact]=\"compactMode$ | async\"\n ></v-overflow-menu-trigger>\n\n <ng-container\n *ngTemplateOutlet=\"\n claimButton;\n context: {canClaim: obs.canClaim, canHaveAssignee: obs.canHaveAssignee}\n \"\n >\n </ng-container>\n\n <ng-container\n *ngTemplateOutlet=\"\n unassignButton;\n context: {\n canAssign: obs.canAssign,\n canHaveAssignee: obs.canHaveAssignee,\n assigneeId: obs.assigneeId,\n }\n \"\n >\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"inspectButton; context: {canInspect: obs.canInspect}\">\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"deleteButton; context: {canDelete: obs.canDelete}\">\n </ng-container>\n </v-overflow-menu>\n\n <v-overflow-menu\n [ngClass]=\"{'--compact': compactMode$ | async}\"\n [menuWidth]=\"dropdownWidth$ | async\"\n placement=\"bottom-end\"\n class=\"overflow-button case-detail-overflow\"\n >\n <ng-container overflowTrigger>\n <ng-container *ngTemplateOutlet=\"customStartTrigger\"></ng-container>\n </ng-container>\n <v-overflow-menu-option\n *ngFor=\"let startableItem of startableItems\"\n [attr.title]=\"startableItem.displayName\"\n (selected)=\"startItem(startableItem)\"\n >\n {{ startableItem.displayName }}\n </v-overflow-menu-option>\n </v-overflow-menu>\n </div>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".main-content{overflow:hidden;padding-bottom:0}.main-content--no-horizontal-overflow{overflow-x:hidden}.tab-container{height:min-content;min-height:300px;overflow-y:auto;overflow-x:hidden}.tab-container:has(>.tab--no-margin){padding:0!important}.tab-container:has(>.tab--no-min-height){min-height:unset}.tab-container:has(>.tab--no-background){background:transparent!important}.tab-content-container{display:flex;gap:32px;overflow:auto;margin-bottom:16px}.loading-container{display:flex;justify-content:center;flex-direction:row}.case-detail-tabs{display:flex;margin-bottom:24px}.case-detail-tabs cds-tab{display:none!important}.buttons-container{display:flex;flex-direction:row;gap:8px;align-items:center}.case-actions{display:flex;width:100%;justify-content:space-between;align-items:flex-end;padding-bottom:4px}.case-actions--compact,.case-actions--small-title{padding-bottom:0;align-items:flex-start}.case-actions ::ng-deep .version-selection{width:160px}.case-actions ::ng-deep .version-selection .cds--list-box__selection{display:none}.case-status-assign-custom-title{display:flex;gap:16px;align-items:flex-end}.case-status-assign-custom-title .cds--tag{margin:0;overflow:hidden;text-overflow:ellipsis;line-height:24px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;max-width:100%}.case-status-assign-custom-title.--compact{align-items:center}.task-panel{width:100%;transition:height .15s ease-in-out}.start-form-panel{display:flex;flex-direction:column;width:100%;height:100%;background-color:var(--cds-layer);padding:8px 16px 16px}.start-form-panel__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.start-form-panel__title{margin:0;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.start-form-panel__body{flex:1;overflow-y:auto}.split-area__content{height:100%!important}.split-area__content .tab-container{height:min-content!important;overflow:hidden!important}:host ::ng-deep .container-fluid{height:100%!important;width:100%!important;margin:0!important;padding:0!important}::ng-deep .tab-content-container .as-split-gutter{background-color:transparent!important;--_as-gutter-icon-disabled: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1' height='1'/%3E\");--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABQJJREFUeF7dWll22zAMpNwzlM5xmpMlOVl6mzrKHexWm8UFy4xIp+/FP3mxQWAwWAiRGsJ3/gwhhJvt4CRCfgCtosYhDOHm4SlW7rZyq9t/R7GsZoYQDhCA89UIrzakKuQtpRTiHv03ycJB3t8KuU9AByNfw5dWJpj1h5YABmGRsvgufzsSG21NEwGWUrv5yiuZb31yMZoAAjBFPqBdor9G0vpwu2+PBgE6TK/q0pUxxiwZxnE0SefkE0sHWQUygGG3ll0c2tGNn+M0DiSfHDlHQBu2rffoWgBWPRHWIUreM654li5bMwDQBIhI9naHFgVQCSS2PHliWlLm0/YsMrcwK6ISp1QGANhzG7XFDj2gUFr8yzrkydOJ6CyACBB1lIWkbPyeQ2UQ2ZKxksCLft4EaWqB/AshHCdg0b/1gB7wJB1QBrQ0ml4E2MMyFgxJ6iABuEGdgCUeZVQm+fQ7fhfAsflzAKFLS1G2ptmMwUpDl1oyAGxo2fw2hHBzjpsm+XiO2TGQF1GWACJGfecAjHmgCTZum/lQfezQTZ3L7z+g3goc2xGtFT86A0qLh5pgjPF13aLmv9aHdYiVn8uMwFNixQlYqVuNvayK3sZxNElgHarlP6duo2bpOcbXWxheVhkTj7Tv4ATsTG/OL6CG8DZ+KCQMIcSf6HnAAo8hrAjGRpIblLxveDm8/q4YC6fT6flyufzWBhXGoTWd4QOUp6enX9fr9X2od6SFhJlTu4FBGZA5n+jbnddZjPG8nz8lo222ItHJEraRICAAMmG6rPGb2FTjedqHsET+4/Lbu+phHWLlJ/g+Cd4gpJDgp71HHzAHFCqOEFCSULjrNkaxw2rO/zidnv/MNY99WIcY+TKufibUmOcSEB5IxLTHXLal2FG4h83VPzET1h6wUxDP8fXfJW5V8xuQhqFwVtGNgDuQ6Yo367Pb9ixdjVckVE1QS/0ekZhybRw/zMZblkBpd1sMPIdJkAsClF2ghQQPYJYBQjp5BKCBEHD4JZDi6bED3AebRDFbAp58Ski3JrgphQcgozEwXZ2dBH3nZ2Bq5KcyahuEgO1wIWBnyIuoS5hA9pHIp01dnANSdlvKwXWocRC6Pw/U70MBozCQAWI5JKDF5wFrtk8uR6XKYQibnL9dr+/CjgA5v81AamMFByTTmOhQp56hPw5/vrrvx61euz2gZKfHgcj98bUkgjo/WJCxeMrJFyQgR8ocQcGnwqsJpgSK8pymTPeIThus4DKwBKWJFNsFklEcOT9ApyFADswAQJMiwkaUldeQ7ZTKDWf79tsSgIasDwGduro1CbY+hVqZgpJ1SA5L6bQHMJNjOy19MsCgBiNgV8DK+1GxSXoYAcMwhNttOedPIZTPAhm8bQ6Anx57ZMBGgfHuXs6yuEANBBtR/2bIjzkj8bAMSIYU+KLDaoKSU8KFCOP7LAsTcDTZ2jPAfrUWf3VGnwdo1pgF5xiz9yhazwOExwfv9suEm2XArJwNtSP/+AxgwlHL1iVwiAUdhEaAxhtLWGbZDEbPEiCyhHWIla93KO7AvMoAwre7bW5jxCAfwaHnoa4N3gVU5X2RthX0gdVNBPhDZnYgzMH7ImKbCOA8wnfsVO+jeUgIEHfYFUs7jHYNLN2YvJkBXwYaNuQIwnp2cgoCag3LN1Z2+EwfwCVPLPAOJ1n05oDt9x5oRR37Pb72s/e+kU81L/EXSRwjcUdkvjUAAAAASUVORK5CYII=)}::ng-deep .tab-content-container .as-split-gutter-icon{background-repeat:no-repeat;background-size:16px 16px}::ng-deep .tab-content-container--dark .as-split-gutter{--_as-gutter-icon-horizontal: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABPlJREFUeF7tm1tW3DAMhu2+krCmdmWlKytrIuGV9HjixDddfjkOtOd0XmAGWZfPsiw7g3fVyzvntvpD9H01+JIuwCamX5YKf9VfmCVaDze2S2fXIDG+CGC8YsrqMCvDFDmHZYCeI5gE6LietD2LlNb6uQAQTLWfCDTLmLpOIfoRvxEZydZn+pH7+vdlAEJyoIwIwDIrFtk7C2TyA/Po9gxY1zVWrN2haZq85FqS3zEF+YET3qi6rFzjfAR0yGkBwQA0wyFU75zf5MaOBYDoR2YGDigqY+U7HOKHlAsFiQOXqax+JYCYBGJr32ZAB+lEpxwc3i1nDcDWtBUYPjN8p35VBxf/4/MQUI7lqAGPzwjYBQDv3PQ0+Ue/CjV/sODp8+UiyNE7XLHO6EM+Dg4/ntBdAI69zdIqBlgTlDldADLN9a7R551cDot0kDPNbn40AIh6LSS4DS0Be9jJg7sAXPHJfBZojbXriMscGgDvvhUYmRGEes6iocJiyVejWdelYDPNk5cquhnAxVSAlgDZQG/7bUqKjvZEDqgdYwaAzQsrVQHowFkPqd5bA4LlO1ytp+zoFM0Ml2V5CYPmeX78lF7v67rla8B6GpynKZxnxBfmD03MvASCMe/9z+DRtm2/SAiZLXRGqcapbYTaICB/BHwggN1wbuzQSUHI3UQBHPqo+wPO/7dlefkWJ0PyR0ofEIAjg49Z8GOe51fOCAYgIcPkd2vLsnz33v+ubadJ0TZw8Fqcmnkk+CBjCahHXodQ49mhHGjUDJCDf37Vjmn54Sa4MuxGaL/weWzDdggJigjgDL7KpG3bxLTPmY/PALqa90JgAahpf/ohb8jjAfAlrQdCCSDG0gRPxCiHzf81XwKUVA1M7gDwbojbspsM4GZea3jov5cFp6cGoHYRFCWE5FthQwKAGCnLS9vD6UXwXbnIRpGUcsH3D6JxI2sADwFHwEnqAI4HKW0AB07ci6QDXgLHELUIghPxbxRBBukICDuAZMCaAbu8XnLf1K4wzBjdGYpzSUGI66ntBQg/8QzYB+PyyW18++sAEHvu8wSY02IbosyONaBTPj7XO6/F+SxVzgPKRooWlN7l0A0g+i0tGXrmvdu2D/qYTrBgO0GKG3ocRlrhB/jm6a13zR2i8GAk+BOOw/lmy95RMIlgAlAvh4ex5/ll5CUndYMkJfGNFyL84sCuoHa3tSVQW9HkGxjeueUNv6Krx7dbTO5R/J1FARSQ9X3d8gyh13RSZAYA9iOcmHkJWO1ZA+LkRdbaRAlO3wogKL/+/YDZl5cuFQogC/P4k/j+mx0AYVDyYVQGWDMPlbcDQDVHOREA1DmGDAgv7emA0bEofgmAmn3euXUpT3d9Z4G+4PRR+6PR9oigRqarPiT6ng4nBzRguCe0ZJEBatyqQGvkfw249VtiHTNSzdGZAddVESmW1YBDv5bSpoxBnOZkst7h6jISx5sCEltnJFp7KKkG3KNfPQvULluB2UMuR1zaBiXjB08+IJr4FQA9c3gDgNINKSDK4SCff67VjEsZEI+Cl3Scg3vwA4cU6uu0bRL3d4k3ZEDm3mAoY2YqdX7BvVsA2OJW9qlhUe+KQvObX1DYANS+2iIdHArR0bArgXfUBoAMoewopH9ROd3oBmcZiMkOANA3sXUq9mm5Pqrvq7IYXLo3Vs713ao7WRAZ8NULfTACRd0fdjtUcYyr1cIAAAAASUVORK5CYII=)}.spacing-case-tags{margin-bottom:8px}\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"] }]
5687
- }], ctorParameters: () => [{ type: i2.BreadcrumbService }, { type: i1$2.CaseStatusService }, { type: i2.CdsThemeService }, { type: i0.ComponentFactoryResolver }, { type: i1$2.DocumentService }, { type: CaseDetailLayoutService }, { type: CaseService }, { type: CaseTabService }, { type: i4$1.IconService }, { type: i5$4.KeycloakService }, { type: i1$4.NGXLogger }, { type: i1.GlobalNotificationService }, { type: i2.PageHeaderService }, { type: i2.PageTitleService }, { type: i2$2.PermissionService }, { type: i4.TranslateService }, { type: i0.Renderer2 }, { type: i1$3.ActivatedRoute }, { type: i1$3.Router }, { type: WidgetsService }, { type: i12.UserProviderService }, { type: Document, decorators: [{
5753
+ }], ctorParameters: () => [{ type: i2.BreadcrumbService }, { type: i1$2.CaseStatusService }, { type: i2.CdsThemeService }, { type: i0.ComponentFactoryResolver }, { type: i1$2.DocumentService }, { type: CaseDetailLayoutService }, { type: CaseService }, { type: CaseTabService }, { type: i4$1.IconService }, { type: i5$4.KeycloakService }, { type: i1$4.NGXLogger }, { type: i1.GlobalNotificationService }, { type: i2.PageHeaderService }, { type: i2.PageTitleService }, { type: i2$2.PermissionService }, { type: i4.TranslateService }, { type: i0.Renderer2 }, { type: i1$3.ActivatedRoute }, { type: i1$3.Router }, { type: WidgetsService }, { type: i12.UserProviderService }, { type: i5.SseService }, { type: Document, decorators: [{
5688
5754
  type: Inject,
5689
5755
  args: [DOCUMENT]
5690
5756
  }] }], propDecorators: { supportingProcessStart: [{
@@ -6289,7 +6355,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
6289
6355
  }] } });
6290
6356
 
6291
6357
  /*
6292
- * Copyright 2015-2025 Ritense BV, the Netherlands.
6358
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
6293
6359
  *
6294
6360
  * Licensed under EUPL, Version 1.2 (the "License");
6295
6361
  * you may not use this file except in compliance with the License.
@@ -6354,6 +6420,9 @@ class CaseListComponent {
6354
6420
  search(searchFieldValues) {
6355
6421
  this.searchService.search(searchFieldValues);
6356
6422
  }
6423
+ onGlobalSearchFilterChange(value) {
6424
+ this.searchService.setGlobalSearchFilter(value);
6425
+ }
6357
6426
  // --- Row click ---
6358
6427
  rowClick(item) {
6359
6428
  this.listService.caseDefinitionKey$.pipe(take(1)).subscribe(caseDefinitionKey => {
@@ -6467,6 +6536,7 @@ class CaseListComponent {
6467
6536
  this.statusService.setSelectedStatuses(this.parameterService.getSearchObject(queryParams['status']));
6468
6537
  this.caseListCaseTagService.setSelectedCaseTags(this.parameterService.getSearchObject(queryParams['casetags']));
6469
6538
  this.parameterService.setSearchFieldValues(this.parameterService.getSearchObject(queryParams['search']));
6539
+ this.searchService.setGlobalSearchFilter(null);
6470
6540
  });
6471
6541
  }
6472
6542
  onClearEvent() {
@@ -6527,7 +6597,7 @@ class CaseListComponent {
6527
6597
  provide: QUICK_SEARCH_SERVICE,
6528
6598
  useClass: CaseListQuickSearchService,
6529
6599
  },
6530
- ], viewQueries: [{ propertyName: "carbonList", first: true, predicate: CarbonListComponent, descendants: true }, { propertyName: "listActionsComponent", first: true, predicate: CaseListActionsComponent, descendants: true }, { propertyName: "tabsComponent", first: true, predicate: CaseListTabsComponent, 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 availableFields: orchestration.availableFields$ | async,\n fields: orchestration.fields$ | async,\n documentItems: orchestration.documentItems$ | async,\n noResultsMessage: orchestration.noResultsMessage$ | async,\n hasApiColumnConfig: orchestration.hasApiColumnConfig$ | async,\n searchFields: orchestration.searchFields$ | async,\n schema: orchestration.schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedCaseIds: selectedCaseIds$ | async,\n statuses: orchestration.statuses$ | async,\n caseTags: orchestration.caseTags$ | async,\n selectedStatusKeys: orchestration.selectedStatusKeys$ | async,\n selectedCaseTagKeys: orchestration.selectedCaseTagKeys$ | async,\n showStatusSelector: orchestration.showStatusSelector$ | async,\n showCaseTagsSelector: orchestration.showCaseTagsSelector$ | async,\n loaded: orchestration.loaded$ | async,\n canCreate: orchestration.canCreateCase$ | async,\n canExport: orchestration.canExportCase$ | async,\n disableExport: orchestration.disableExportButton$ | async,\n disableSaveSearch: orchestration.disableSaveSearch$ | async,\n assigneeFilter: orchestration.assigneeFilter$ | async,\n hiddenColumns: orchestration.hiddenColumns$ | async,\n disableStartButton: disableStartButton$ | async,\n } as obs\"\n>\n <valtimo-case-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-case-list-actions>\n\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <valtimo-quick-search (quickSearchEvent)=\"onQuickSearchEvent($event)\"></valtimo-quick-search>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <valtimo-search-fields\n [disableSaveSearch]=\"obs.disableSaveSearch\"\n [canSaveSearch]=\"true\"\n [searchFields]=\"obs.searchFields\"\n [caseDefinitionKey]=\"orchestration.caseDefinitionKey$ | async\"\n [defaultValues]=\"orchestration.searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n (clearEvent)=\"onClearEvent()\"\n (doSearch)=\"search($event)\"\n (saveSearchEvent)=\"onSaveSearchEvent($event)\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatusKeys]=\"obs.selectedStatusKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n\n <valtimo-case-tags-selector\n *ngIf=\"obs.showCaseTagsSelector\"\n [caseTags]=\"obs.caseTags\"\n [selectedCaseTagKeys]=\"obs.selectedCaseTagKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedCaseTagsChangeEvent)=\"onSelectedCaseTagsChange($event)\"\n ></valtimo-case-tags-selector>\n </valtimo-search-fields>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n\n lockedTooltipTranslationKey=\"case.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'case.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <valtimo-case-list-toolbar\n [availableFields]=\"obs.availableFields\"\n [canCreate]=\"obs.canCreate\"\n [canExport]=\"obs.canExport\"\n [disableExport]=\"obs.disableExport\"\n [disableStart]=\"obs.disableStartButton\"\n [hasApiColumnConfig]=\"obs.hasApiColumnConfig\"\n [hiddenColumns]=\"obs.hiddenColumns\"\n [loadingExport]=\"loadingExport\"\n (exportEvent)=\"export()\"\n (startCaseEvent)=\"startCase()\"\n (viewUpdateEvent)=\"onViewUpdateEvent($event)\"\n ></valtimo-case-list-toolbar>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : caseListActionsNoResult\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"obs.assigneeFilter\"\n [selectedRowCount]=\"carbonList?.model?.selectedRowsCount() ?? 0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #loading>\n <valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"orchestration.assigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-case-bulk-assign-modal\n [documentIds]=\"obs.selectedCaseIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event)\"\n ></valtimo-case-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.changePageModal.confirm\"\n contentTranslationKey=\"case.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"case.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #caseListActionsNoResult>\n <button\n *ngIf=\"orchestration.canCreateCase$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startCase()\"\n >\n {{ 'Start Case' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:16px}\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: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "caseDefinitionKey", "setValuesSubject$", "clearValuesSubject$", "defaultValues", "disableSaveSearch", "inputDisabled", "externalSearchField", "canSaveSearch"], outputs: ["doSearch", "saveSearchEvent", "clearEvent"] }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.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: i2.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.StatusSelectorComponent, selector: "valtimo-status-selector", inputs: ["statuses", "selectedStatusKeys", "carbonTheme", "disabled"], outputs: ["selectedStatusesChangeEvent"] }, { kind: "component", type: i2.CaseTagsSelectorComponent, selector: "valtimo-case-tags-selector", inputs: ["caseTags", "selectedCaseTagKeys", "carbonTheme", "disabled"], outputs: ["selectedCaseTagsChangeEvent"] }, { kind: "component", type: i2.QuickSearchComponent, selector: "valtimo-quick-search", outputs: ["quickSearchEvent"] }, { kind: "component", type: CaseListActionsComponent, selector: "valtimo-case-list-actions", inputs: ["loading", "navigateAfterSubmit"], outputs: ["formFlowComplete", "startButtonDisableEvent"] }, { kind: "component", type: CaseBulkAssignModalComponent, selector: "valtimo-case-bulk-assign-modal", inputs: ["documentIds", "open"], outputs: ["closeEvent"] }, { kind: "component", type: CaseListTabsComponent, selector: "valtimo-case-list-tabs", inputs: ["assigneeFilter", "selectedRowCount", "visibleTabs"], outputs: ["tabChangeEvent"] }, { kind: "component", type: CaseListToolbarComponent, selector: "valtimo-case-list-toolbar", inputs: ["availableFields", "canCreate", "canExport", "disableExport", "disableStart", "hasApiColumnConfig", "hiddenColumns", "loadingExport"], outputs: ["exportEvent", "startCaseEvent", "viewUpdateEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
6600
+ ], viewQueries: [{ propertyName: "carbonList", first: true, predicate: CarbonListComponent, descendants: true }, { propertyName: "listActionsComponent", first: true, predicate: CaseListActionsComponent, descendants: true }, { propertyName: "tabsComponent", first: true, predicate: CaseListTabsComponent, 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 availableFields: orchestration.availableFields$ | async,\n fields: orchestration.fields$ | async,\n documentItems: orchestration.documentItems$ | async,\n noResultsMessage: orchestration.noResultsMessage$ | async,\n hasApiColumnConfig: orchestration.hasApiColumnConfig$ | async,\n searchFields: orchestration.searchFields$ | async,\n schema: orchestration.schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedCaseIds: selectedCaseIds$ | async,\n statuses: orchestration.statuses$ | async,\n caseTags: orchestration.caseTags$ | async,\n selectedStatusKeys: orchestration.selectedStatusKeys$ | async,\n selectedCaseTagKeys: orchestration.selectedCaseTagKeys$ | async,\n showStatusSelector: orchestration.showStatusSelector$ | async,\n showCaseTagsSelector: orchestration.showCaseTagsSelector$ | async,\n loaded: orchestration.loaded$ | async,\n canCreate: orchestration.canCreateCase$ | async,\n canExport: orchestration.canExportCase$ | async,\n disableExport: orchestration.disableExportButton$ | async,\n disableSaveSearch: orchestration.disableSaveSearch$ | async,\n assigneeFilter: orchestration.assigneeFilter$ | async,\n hiddenColumns: orchestration.hiddenColumns$ | async,\n disableStartButton: disableStartButton$ | async,\n invalidSearchFields: orchestration.invalidSearchFields$ | async,\n } as obs\"\n>\n <valtimo-case-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-case-list-actions>\n\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <valtimo-quick-search (quickSearchEvent)=\"onQuickSearchEvent($event)\"></valtimo-quick-search>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <valtimo-search-fields\n [disableSaveSearch]=\"obs.disableSaveSearch\"\n [canSaveSearch]=\"true\"\n [searchFields]=\"obs.searchFields\"\n [caseDefinitionKey]=\"orchestration.caseDefinitionKey$ | async\"\n [defaultValues]=\"orchestration.searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n (clearEvent)=\"onClearEvent()\"\n (doSearch)=\"search($event)\"\n (saveSearchEvent)=\"onSaveSearchEvent($event)\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatusKeys]=\"obs.selectedStatusKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n\n <valtimo-case-tags-selector\n *ngIf=\"obs.showCaseTagsSelector\"\n [caseTags]=\"obs.caseTags\"\n [selectedCaseTagKeys]=\"obs.selectedCaseTagKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedCaseTagsChangeEvent)=\"onSelectedCaseTagsChange($event)\"\n ></valtimo-case-tags-selector>\n </valtimo-search-fields>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [invalidSearchFields]=\"obs.invalidSearchFields || []\"\n [isSearchable]=\"true\"\n [searchDebounceMs]=\"2000\"\n [searchFields]=\"obs.searchFields || []\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n lockedTooltipTranslationKey=\"case.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (search)=\"onGlobalSearchFilterChange($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'case.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <valtimo-case-list-toolbar\n [availableFields]=\"obs.availableFields\"\n [canCreate]=\"obs.canCreate\"\n [canExport]=\"obs.canExport\"\n [disableExport]=\"obs.disableExport\"\n [disableStart]=\"obs.disableStartButton\"\n [hasApiColumnConfig]=\"obs.hasApiColumnConfig\"\n [hiddenColumns]=\"obs.hiddenColumns\"\n [loadingExport]=\"loadingExport\"\n (exportEvent)=\"export()\"\n (startCaseEvent)=\"startCase()\"\n (viewUpdateEvent)=\"onViewUpdateEvent($event)\"\n ></valtimo-case-list-toolbar>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : caseListActionsNoResult\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"obs.assigneeFilter\"\n [selectedRowCount]=\"carbonList?.model?.selectedRowsCount() ?? 0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #loading>\n <valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"orchestration.assigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-case-bulk-assign-modal\n [documentIds]=\"obs.selectedCaseIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event)\"\n ></valtimo-case-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.changePageModal.confirm\"\n contentTranslationKey=\"case.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"case.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #caseListActionsNoResult>\n <button\n *ngIf=\"orchestration.canCreateCase$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startCase()\"\n >\n {{ 'Start Case' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:16px}\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: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "caseDefinitionKey", "setValuesSubject$", "clearValuesSubject$", "defaultValues", "disableSaveSearch", "inputDisabled", "externalSearchField", "canSaveSearch"], outputs: ["doSearch", "saveSearchEvent", "clearEvent"] }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.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: i2.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: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.StatusSelectorComponent, selector: "valtimo-status-selector", inputs: ["statuses", "selectedStatusKeys", "carbonTheme", "disabled"], outputs: ["selectedStatusesChangeEvent"] }, { kind: "component", type: i2.CaseTagsSelectorComponent, selector: "valtimo-case-tags-selector", inputs: ["caseTags", "selectedCaseTagKeys", "carbonTheme", "disabled"], outputs: ["selectedCaseTagsChangeEvent"] }, { kind: "component", type: i2.QuickSearchComponent, selector: "valtimo-quick-search", outputs: ["quickSearchEvent"] }, { kind: "component", type: CaseListActionsComponent, selector: "valtimo-case-list-actions", inputs: ["loading", "navigateAfterSubmit"], outputs: ["formFlowComplete", "startButtonDisableEvent"] }, { kind: "component", type: CaseBulkAssignModalComponent, selector: "valtimo-case-bulk-assign-modal", inputs: ["documentIds", "open"], outputs: ["closeEvent"] }, { kind: "component", type: CaseListTabsComponent, selector: "valtimo-case-list-tabs", inputs: ["assigneeFilter", "selectedRowCount", "visibleTabs"], outputs: ["tabChangeEvent"] }, { kind: "component", type: CaseListToolbarComponent, selector: "valtimo-case-list-toolbar", inputs: ["availableFields", "canCreate", "canExport", "disableExport", "disableStart", "hasApiColumnConfig", "hiddenColumns", "loadingExport"], outputs: ["exportEvent", "startCaseEvent", "viewUpdateEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
6531
6601
  }
6532
6602
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseListComponent, decorators: [{
6533
6603
  type: Component,
@@ -6546,7 +6616,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
6546
6616
  provide: QUICK_SEARCH_SERVICE,
6547
6617
  useClass: CaseListQuickSearchService,
6548
6618
  },
6549
- ], 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 availableFields: orchestration.availableFields$ | async,\n fields: orchestration.fields$ | async,\n documentItems: orchestration.documentItems$ | async,\n noResultsMessage: orchestration.noResultsMessage$ | async,\n hasApiColumnConfig: orchestration.hasApiColumnConfig$ | async,\n searchFields: orchestration.searchFields$ | async,\n schema: orchestration.schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedCaseIds: selectedCaseIds$ | async,\n statuses: orchestration.statuses$ | async,\n caseTags: orchestration.caseTags$ | async,\n selectedStatusKeys: orchestration.selectedStatusKeys$ | async,\n selectedCaseTagKeys: orchestration.selectedCaseTagKeys$ | async,\n showStatusSelector: orchestration.showStatusSelector$ | async,\n showCaseTagsSelector: orchestration.showCaseTagsSelector$ | async,\n loaded: orchestration.loaded$ | async,\n canCreate: orchestration.canCreateCase$ | async,\n canExport: orchestration.canExportCase$ | async,\n disableExport: orchestration.disableExportButton$ | async,\n disableSaveSearch: orchestration.disableSaveSearch$ | async,\n assigneeFilter: orchestration.assigneeFilter$ | async,\n hiddenColumns: orchestration.hiddenColumns$ | async,\n disableStartButton: disableStartButton$ | async,\n } as obs\"\n>\n <valtimo-case-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-case-list-actions>\n\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <valtimo-quick-search (quickSearchEvent)=\"onQuickSearchEvent($event)\"></valtimo-quick-search>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <valtimo-search-fields\n [disableSaveSearch]=\"obs.disableSaveSearch\"\n [canSaveSearch]=\"true\"\n [searchFields]=\"obs.searchFields\"\n [caseDefinitionKey]=\"orchestration.caseDefinitionKey$ | async\"\n [defaultValues]=\"orchestration.searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n (clearEvent)=\"onClearEvent()\"\n (doSearch)=\"search($event)\"\n (saveSearchEvent)=\"onSaveSearchEvent($event)\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatusKeys]=\"obs.selectedStatusKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n\n <valtimo-case-tags-selector\n *ngIf=\"obs.showCaseTagsSelector\"\n [caseTags]=\"obs.caseTags\"\n [selectedCaseTagKeys]=\"obs.selectedCaseTagKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedCaseTagsChangeEvent)=\"onSelectedCaseTagsChange($event)\"\n ></valtimo-case-tags-selector>\n </valtimo-search-fields>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n\n lockedTooltipTranslationKey=\"case.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'case.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <valtimo-case-list-toolbar\n [availableFields]=\"obs.availableFields\"\n [canCreate]=\"obs.canCreate\"\n [canExport]=\"obs.canExport\"\n [disableExport]=\"obs.disableExport\"\n [disableStart]=\"obs.disableStartButton\"\n [hasApiColumnConfig]=\"obs.hasApiColumnConfig\"\n [hiddenColumns]=\"obs.hiddenColumns\"\n [loadingExport]=\"loadingExport\"\n (exportEvent)=\"export()\"\n (startCaseEvent)=\"startCase()\"\n (viewUpdateEvent)=\"onViewUpdateEvent($event)\"\n ></valtimo-case-list-toolbar>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : caseListActionsNoResult\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"obs.assigneeFilter\"\n [selectedRowCount]=\"carbonList?.model?.selectedRowsCount() ?? 0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #loading>\n <valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"orchestration.assigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-case-bulk-assign-modal\n [documentIds]=\"obs.selectedCaseIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event)\"\n ></valtimo-case-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.changePageModal.confirm\"\n contentTranslationKey=\"case.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"case.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #caseListActionsNoResult>\n <button\n *ngIf=\"orchestration.canCreateCase$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startCase()\"\n >\n {{ 'Start Case' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:16px}\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"] }]
6619
+ ], 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 availableFields: orchestration.availableFields$ | async,\n fields: orchestration.fields$ | async,\n documentItems: orchestration.documentItems$ | async,\n noResultsMessage: orchestration.noResultsMessage$ | async,\n hasApiColumnConfig: orchestration.hasApiColumnConfig$ | async,\n searchFields: orchestration.searchFields$ | async,\n schema: orchestration.schema$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedCaseIds: selectedCaseIds$ | async,\n statuses: orchestration.statuses$ | async,\n caseTags: orchestration.caseTags$ | async,\n selectedStatusKeys: orchestration.selectedStatusKeys$ | async,\n selectedCaseTagKeys: orchestration.selectedCaseTagKeys$ | async,\n showStatusSelector: orchestration.showStatusSelector$ | async,\n showCaseTagsSelector: orchestration.showCaseTagsSelector$ | async,\n loaded: orchestration.loaded$ | async,\n canCreate: orchestration.canCreateCase$ | async,\n canExport: orchestration.canExportCase$ | async,\n disableExport: orchestration.disableExportButton$ | async,\n disableSaveSearch: orchestration.disableSaveSearch$ | async,\n assigneeFilter: orchestration.assigneeFilter$ | async,\n hiddenColumns: orchestration.hiddenColumns$ | async,\n disableStartButton: disableStartButton$ | async,\n invalidSearchFields: orchestration.invalidSearchFields$ | async,\n } as obs\"\n>\n <valtimo-case-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-case-list-actions>\n\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <valtimo-quick-search (quickSearchEvent)=\"onQuickSearchEvent($event)\"></valtimo-quick-search>\n\n <ng-container *ngIf=\"obs.loaded; else loading\">\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"bulkAssignModal; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"changePageModal\"></ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <valtimo-search-fields\n [disableSaveSearch]=\"obs.disableSaveSearch\"\n [canSaveSearch]=\"true\"\n [searchFields]=\"obs.searchFields\"\n [caseDefinitionKey]=\"orchestration.caseDefinitionKey$ | async\"\n [defaultValues]=\"orchestration.searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n (clearEvent)=\"onClearEvent()\"\n (doSearch)=\"search($event)\"\n (saveSearchEvent)=\"onSaveSearchEvent($event)\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatusKeys]=\"obs.selectedStatusKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n\n <valtimo-case-tags-selector\n *ngIf=\"obs.showCaseTagsSelector\"\n [caseTags]=\"obs.caseTags\"\n [selectedCaseTagKeys]=\"obs.selectedCaseTagKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedCaseTagsChangeEvent)=\"onSelectedCaseTagsChange($event)\"\n ></valtimo-case-tags-selector>\n </valtimo-search-fields>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination.sort\"\n [invalidSearchFields]=\"obs.invalidSearchFields || []\"\n [isSearchable]=\"true\"\n [searchDebounceMs]=\"2000\"\n [searchFields]=\"obs.searchFields || []\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n lockedTooltipTranslationKey=\"case.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (search)=\"onGlobalSearchFilterChange($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'case.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <valtimo-case-list-toolbar\n [availableFields]=\"obs.availableFields\"\n [canCreate]=\"obs.canCreate\"\n [canExport]=\"obs.canExport\"\n [disableExport]=\"obs.disableExport\"\n [disableStart]=\"obs.disableStartButton\"\n [hasApiColumnConfig]=\"obs.hasApiColumnConfig\"\n [hiddenColumns]=\"obs.hiddenColumns\"\n [loadingExport]=\"loadingExport\"\n (exportEvent)=\"export()\"\n (startCaseEvent)=\"startCase()\"\n (viewUpdateEvent)=\"onViewUpdateEvent($event)\"\n ></valtimo-case-list-toolbar>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage.isSearchResult ? null : caseListActionsNoResult\"\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"obs.assigneeFilter\"\n [selectedRowCount]=\"carbonList?.model?.selectedRowsCount() ?? 0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #loading>\n <valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"orchestration.assigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #bulkAssignModal let-obs=\"obs\">\n <valtimo-case-bulk-assign-modal\n [documentIds]=\"obs.selectedCaseIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event)\"\n ></valtimo-case-bulk-assign-modal>\n</ng-template>\n\n<ng-template #changePageModal>\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.changePageModal.confirm\"\n contentTranslationKey=\"case.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"case.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n</ng-template>\n\n<ng-template #caseListActionsNoResult>\n <button\n *ngIf=\"orchestration.canCreateCase$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startCase()\"\n >\n {{ 'Start Case' | translate }}\n\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column;gap:16px}\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"] }]
6550
6620
  }], ctorParameters: () => [{ type: CaseListAssigneeService }, { type: i2.BreadcrumbService }, { type: CaseBulkAssignService }, { type: CaseExportService }, { type: CaseListCaseTagService }, { type: CaseListService }, { type: i2.PageTitleService }, { type: CaseListPaginationService }, { type: CaseParameterService }, { type: i2.QuickSearchStateService }, { type: i1$3.ActivatedRoute }, { type: i1$3.Router }, { type: CaseListSearchService }, { type: CaseListStatusService }, { type: undefined, decorators: [{
6551
6621
  type: Inject,
6552
6622
  args: [QUICK_SEARCH_SERVICE]
@@ -7202,7 +7272,7 @@ class CaseInspectionLogsTabComponent {
7202
7272
  });
7203
7273
  }
7204
7274
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseInspectionLogsTabComponent, deps: [{ token: CaseInspectionService }, { token: i1$5.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
7205
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseInspectionLogsTabComponent, isStandalone: true, selector: "valtimo-case-inspection-logs", inputs: { documentId: "documentId", pendingProcessInstanceId: "pendingProcessInstanceId" }, viewQueries: [{ propertyName: "_afterDatePicker", first: true, predicate: ["afterPicker"], descendants: true }, { propertyName: "_beforeDatePicker", first: true, predicate: ["beforePicker"], descendants: true }, { propertyName: "timestampTemplate", first: true, predicate: ["timestampTemplate"], descendants: true }, { propertyName: "levelTemplate", first: true, predicate: ["levelTemplate"], descendants: true }, { propertyName: "messageTemplate", first: true, predicate: ["messageTemplate"], descendants: true }], usesOnChanges: 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<section class=\"case-inspection-logs-tab\">\n <form\n class=\"case-inspection-logs-tab__filters\"\n [formGroup]=\"formGroup\"\n (ngSubmit)=\"onApplyFilter()\"\n >\n <cds-text-label\n class=\"case-inspection-logs-tab__filter case-inspection-logs-tab__filter--message\"\n >\n {{ 'case.inspection.logs.filters.message' | translate }}\n\n <input\n cdsText\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'case.inspection.logs.filters.messagePlaceholder' | translate\"\n cdsLayer=\"1\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"case-inspection-logs-tab__filter case-inspection-logs-tab__filter--level\"\n formControlName=\"level\"\n [label]=\"'case.inspection.logs.filters.level' | translate\"\n [placeholder]=\"'case.inspection.logs.filters.levelPlaceholder' | translate\"\n [dropUp]=\"false\"\n cdsLayer=\"1\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-date-picker\n #afterPicker\n class=\"case-inspection-logs-tab__filter\"\n [label]=\"'case.inspection.logs.filters.after' | translate\"\n [dateFormat]=\"'d-m-Y H:i'\"\n [flatpickrOptions]=\"{enableTime: true, time_24hr: true}\"\n placeholder=\"DD-MM-YYYY HH:mm\"\n cdsLayer=\"1\"\n (valueChange)=\"onAfterDateSelected($event)\"\n ></cds-date-picker>\n\n <cds-date-picker\n #beforePicker\n class=\"case-inspection-logs-tab__filter\"\n [label]=\"'case.inspection.logs.filters.before' | translate\"\n [dateFormat]=\"'d-m-Y H:i'\"\n [flatpickrOptions]=\"{enableTime: true, time_24hr: true}\"\n placeholder=\"DD-MM-YYYY HH:mm\"\n cdsLayer=\"1\"\n (valueChange)=\"onBeforeDateSelected($event)\"\n ></cds-date-picker>\n\n <div class=\"case-inspection-logs-tab__filter-actions\">\n <button cdsButton=\"primary\" size=\"md\" type=\"submit\">\n {{ 'case.inspection.logs.filters.apply' | translate }}\n </button>\n\n <button cdsButton=\"tertiary\" size=\"md\" type=\"button\" (click)=\"onResetFilter()\">\n {{ 'case.inspection.logs.filters.reset' | translate }}\n </button>\n </div>\n </form>\n\n <ng-container *ngIf=\"$activeProcessInstanceFilter() as processInstanceId\">\n <div class=\"case-inspection-logs-tab__chip-row\">\n <cds-tag type=\"purple\" size=\"md\">\n {{ 'case.inspection.logs.filters.processInstanceChip' | translate }}:\n <code>{{ processInstanceId }}</code>\n </cds-tag>\n\n <button cdsButton=\"ghost\" size=\"sm\" type=\"button\" (click)=\"onClearProcessInstanceFilter()\">\n {{ 'case.inspection.logs.filters.clearProcessInstance' | translate }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"$errorMessage() as message\">\n <p class=\"case-inspection-logs-tab__error\">{{ message }}</p>\n </ng-container>\n\n <div *ngIf=\"$loading()\" class=\"loading-container\">\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n\n <ng-container *ngIf=\"!$loading() && !$errorMessage()\">\n <p *ngIf=\"$rows().length === 0\" class=\"case-inspection-logs-tab__empty\">\n {{\n ($hasActiveSearch() ? 'case.inspection.logs.emptyFiltered' : 'case.inspection.logs.empty')\n | translate\n }}\n </p>\n\n <div *ngIf=\"$rows().length > 0\" class=\"case-inspection-logs-tab__layout\">\n <div\n class=\"case-inspection-logs-tab__list-panel\"\n [attr.data-selected-row]=\"$selectedIndex()\"\n >\n <valtimo-carbon-list\n [fields]=\"fields\"\n [header]=\"false\"\n [hideToolbar]=\"true\"\n [items]=\"$rows()\"\n [loading]=\"$loading()\"\n [pagination]=\"pagination\"\n [cdsLayer]=\"1\"\n (paginationClicked)=\"onPageSelected($event)\"\n (rowClicked)=\"onSelectRow($event)\"\n >\n <valtimo-no-results\n description=\"{{\n ($hasActiveSearch()\n ? 'case.inspection.logs.emptyFiltered'\n : 'case.inspection.logs.empty'\n ) | translate\n }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n </div>\n\n <aside class=\"case-inspection-logs-tab__detail\" *ngIf=\"$selected() as selected\">\n <header class=\"case-inspection-logs-tab__detail-header\">\n <cds-tag size=\"sm\" [type]=\"LEVEL_TAG[selected.level] || 'gray'\">{{\n selected.level\n }}</cds-tag>\n <span class=\"case-inspection-logs-tab__detail-timestamp\">\n {{ selected.timestamp | date: 'dd-MM-yyyy HH:mm:ss' }}\n </span>\n </header>\n\n <pre class=\"case-inspection-logs-tab__detail-message\">{{ selected.formattedMessage }}</pre>\n\n <h4>{{ 'case.inspection.logs.detail.properties' | translate }}</h4>\n <dl class=\"case-inspection-logs-tab__detail-properties\">\n <ng-container *ngFor=\"let prop of selected.properties\">\n <dt>\n <code>{{ prop.key }}</code>\n </dt>\n <dd>\n <code>{{ prop.value }}</code>\n </dd>\n </ng-container>\n </dl>\n\n <ng-container *ngIf=\"selected.stacktrace\">\n <h4>{{ 'case.inspection.logs.detail.stacktrace' | translate }}</h4>\n <pre class=\"case-inspection-logs-tab__detail-stacktrace\">{{ selected.stacktrace }}</pre>\n </ng-container>\n </aside>\n </div>\n </ng-container>\n</section>\n\n<ng-template #timestampTemplate let-data=\"data\">\n {{ data.item.timestamp | date: 'dd-MM HH:mm:ss' }}\n</ng-template>\n\n<ng-template #levelTemplate let-data=\"data\">\n <cds-tag size=\"sm\" [type]=\"LEVEL_TAG[data.item.level] || 'gray'\">\n {{ data.item.level }}\n </cds-tag>\n</ng-template>\n\n<ng-template #messageTemplate let-data=\"data\">\n <span class=\"case-inspection-logs-tab__message-cell\">{{ data.item.formattedMessage }}</span>\n</ng-template>\n", styles: [".case-inspection-logs-tab{display:flex;flex-direction:column;padding:16px;gap:var(--cds-spacing-05)}.case-inspection-logs-tab__filters{display:grid;grid-template-columns:minmax(200px,1fr) minmax(140px,200px) 220px 220px auto;gap:var(--cds-spacing-04);align-items:end}.case-inspection-logs-tab__filter{min-width:0}.case-inspection-logs-tab cds-date-picker{display:block;width:100%}.case-inspection-logs-tab cds-date-picker ::ng-deep .cds--date-picker,.case-inspection-logs-tab cds-date-picker ::ng-deep .cds--date-picker--single,.case-inspection-logs-tab cds-date-picker ::ng-deep .cds--date-picker-container,.case-inspection-logs-tab cds-date-picker ::ng-deep .cds--date-picker-input,.case-inspection-logs-tab cds-date-picker ::ng-deep input.cds--date-picker__input{width:100%;min-width:0}.case-inspection-logs-tab__filter-actions{display:flex;gap:var(--cds-spacing-03)}.case-inspection-logs-tab__chip-row{display:flex;align-items:center;gap:var(--cds-spacing-03)}.case-inspection-logs-tab__error{color:var(--cds-support-error)}.case-inspection-logs-tab__empty{color:var(--cds-text-secondary);font-style:italic}.case-inspection-logs-tab__layout{display:flex;gap:var(--cds-spacing-05)}.case-inspection-logs-tab__list-panel{flex:0 0 65%;min-width:0}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table{width:100%}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table tbody tr{cursor:pointer}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table td:first-child{width:136px;min-width:136px;max-width:136px}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table td:nth-child(2){width:96px;min-width:96px;max-width:96px}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table td:nth-child(3){max-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.case-inspection-logs-tab__list-panel[data-selected-row=\"0\"] ::ng-deep .cds--data-table tbody tr:nth-child(1){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"1\"] ::ng-deep .cds--data-table tbody tr:nth-child(2){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"2\"] ::ng-deep .cds--data-table tbody tr:nth-child(3){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"3\"] ::ng-deep .cds--data-table tbody tr:nth-child(4){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"4\"] ::ng-deep .cds--data-table tbody tr:nth-child(5){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"5\"] ::ng-deep .cds--data-table tbody tr:nth-child(6){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"6\"] ::ng-deep .cds--data-table tbody tr:nth-child(7){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"7\"] ::ng-deep .cds--data-table tbody tr:nth-child(8){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"8\"] ::ng-deep .cds--data-table tbody tr:nth-child(9){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"9\"] ::ng-deep .cds--data-table tbody tr:nth-child(10){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__message-cell{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.case-inspection-logs-tab__pagination{margin-top:var(--cds-spacing-03)}.case-inspection-logs-tab__detail{flex:0 0 calc(35% - var(--cds-spacing-05));background-color:var(--cds-layer);border:1px solid var(--cds-border-subtle);padding:var(--cds-spacing-05);overflow:auto}.case-inspection-logs-tab__detail h4{margin-top:var(--cds-spacing-05);margin-bottom:var(--cds-spacing-03);font-size:var(--cds-body-compact-01-font-size);font-weight:600}.case-inspection-logs-tab__detail-header{display:flex;flex-direction:column;align-items:flex-start;gap:var(--cds-spacing-02)}.case-inspection-logs-tab__detail-timestamp{color:var(--cds-text-secondary);font-size:var(--cds-helper-text-01-font-size)}.case-inspection-logs-tab__detail-message{margin:var(--cds-spacing-04) 0;padding:var(--cds-spacing-03);background-color:var(--cds-background);border:1px solid var(--cds-border-subtle);white-space:pre-wrap;word-break:break-word;font-size:var(--cds-helper-text-01-font-size)}.case-inspection-logs-tab__detail-properties{display:flex;flex-direction:column;gap:var(--cds-spacing-03)}.case-inspection-logs-tab__detail-properties dt{margin-bottom:var(--cds-spacing-01)}.case-inspection-logs-tab__detail-properties dt code{color:var(--cds-text-secondary)}.case-inspection-logs-tab__detail-properties dd{margin:0 0 var(--cds-spacing-02) 0}.case-inspection-logs-tab__detail-properties dd code{color:var(var(--cds-status-purple))}.case-inspection-logs-tab__detail-properties dt,.case-inspection-logs-tab__detail-properties dd{font-size:var(--cds-helper-text-01-font-size);word-break:break-all}.case-inspection-logs-tab__detail-stacktrace{margin:0;padding:var(--cds-spacing-03);background-color:var(--cds-background);border:1px solid var(--cds-border-subtle);white-space:pre-wrap;word-break:break-word;font-family:var(--cds-code-01-font-family);font-size:var(--cds-helper-text-01-font-size);max-height:256px;overflow:auto}\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: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$5.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$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i2.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i4$1.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "readonly", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i4$1.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: i4$1.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i4$1.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "fluid"] }, { kind: "directive", type: i4$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i4$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i4$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i4$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7275
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseInspectionLogsTabComponent, isStandalone: true, selector: "valtimo-case-inspection-logs", inputs: { documentId: "documentId", pendingProcessInstanceId: "pendingProcessInstanceId" }, viewQueries: [{ propertyName: "_afterDatePicker", first: true, predicate: ["afterPicker"], descendants: true }, { propertyName: "_beforeDatePicker", first: true, predicate: ["beforePicker"], descendants: true }, { propertyName: "timestampTemplate", first: true, predicate: ["timestampTemplate"], descendants: true }, { propertyName: "levelTemplate", first: true, predicate: ["levelTemplate"], descendants: true }, { propertyName: "messageTemplate", first: true, predicate: ["messageTemplate"], descendants: true }], usesOnChanges: 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<section class=\"case-inspection-logs-tab\">\n <form\n class=\"case-inspection-logs-tab__filters\"\n [formGroup]=\"formGroup\"\n (ngSubmit)=\"onApplyFilter()\"\n >\n <cds-text-label\n class=\"case-inspection-logs-tab__filter case-inspection-logs-tab__filter--message\"\n >\n {{ 'case.inspection.logs.filters.message' | translate }}\n\n <input\n cdsText\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'case.inspection.logs.filters.messagePlaceholder' | translate\"\n cdsLayer=\"1\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"case-inspection-logs-tab__filter case-inspection-logs-tab__filter--level\"\n formControlName=\"level\"\n [label]=\"'case.inspection.logs.filters.level' | translate\"\n [placeholder]=\"'case.inspection.logs.filters.levelPlaceholder' | translate\"\n [dropUp]=\"false\"\n cdsLayer=\"1\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-date-picker\n #afterPicker\n class=\"case-inspection-logs-tab__filter\"\n [label]=\"'case.inspection.logs.filters.after' | translate\"\n [dateFormat]=\"'d-m-Y H:i'\"\n [flatpickrOptions]=\"{enableTime: true, time_24hr: true}\"\n placeholder=\"DD-MM-YYYY HH:mm\"\n cdsLayer=\"1\"\n (valueChange)=\"onAfterDateSelected($event)\"\n ></cds-date-picker>\n\n <cds-date-picker\n #beforePicker\n class=\"case-inspection-logs-tab__filter\"\n [label]=\"'case.inspection.logs.filters.before' | translate\"\n [dateFormat]=\"'d-m-Y H:i'\"\n [flatpickrOptions]=\"{enableTime: true, time_24hr: true}\"\n placeholder=\"DD-MM-YYYY HH:mm\"\n cdsLayer=\"1\"\n (valueChange)=\"onBeforeDateSelected($event)\"\n ></cds-date-picker>\n\n <div class=\"case-inspection-logs-tab__filter-actions\">\n <button cdsButton=\"primary\" size=\"md\" type=\"submit\">\n {{ 'case.inspection.logs.filters.apply' | translate }}\n </button>\n\n <button cdsButton=\"tertiary\" size=\"md\" type=\"button\" (click)=\"onResetFilter()\">\n {{ 'case.inspection.logs.filters.reset' | translate }}\n </button>\n </div>\n </form>\n\n <ng-container *ngIf=\"$activeProcessInstanceFilter() as processInstanceId\">\n <div class=\"case-inspection-logs-tab__chip-row\">\n <cds-tag type=\"purple\" size=\"md\">\n {{ 'case.inspection.logs.filters.processInstanceChip' | translate }}:\n <code>{{ processInstanceId }}</code>\n </cds-tag>\n\n <button cdsButton=\"ghost\" size=\"sm\" type=\"button\" (click)=\"onClearProcessInstanceFilter()\">\n {{ 'case.inspection.logs.filters.clearProcessInstance' | translate }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"$errorMessage() as message\">\n <p class=\"case-inspection-logs-tab__error\">{{ message }}</p>\n </ng-container>\n\n <div *ngIf=\"$loading()\" class=\"loading-container\">\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n\n <ng-container *ngIf=\"!$loading() && !$errorMessage()\">\n <p *ngIf=\"$rows().length === 0\" class=\"case-inspection-logs-tab__empty\">\n {{\n ($hasActiveSearch() ? 'case.inspection.logs.emptyFiltered' : 'case.inspection.logs.empty')\n | translate\n }}\n </p>\n\n <div *ngIf=\"$rows().length > 0\" class=\"case-inspection-logs-tab__layout\">\n <div\n class=\"case-inspection-logs-tab__list-panel\"\n [attr.data-selected-row]=\"$selectedIndex()\"\n >\n <valtimo-carbon-list\n [fields]=\"fields\"\n [header]=\"false\"\n [hideToolbar]=\"true\"\n [items]=\"$rows()\"\n [loading]=\"$loading()\"\n [pagination]=\"pagination\"\n [cdsLayer]=\"1\"\n (paginationClicked)=\"onPageSelected($event)\"\n (rowClicked)=\"onSelectRow($event)\"\n >\n <valtimo-no-results\n description=\"{{\n ($hasActiveSearch()\n ? 'case.inspection.logs.emptyFiltered'\n : 'case.inspection.logs.empty'\n ) | translate\n }}\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n </div>\n\n <aside class=\"case-inspection-logs-tab__detail\" *ngIf=\"$selected() as selected\">\n <header class=\"case-inspection-logs-tab__detail-header\">\n <cds-tag size=\"sm\" [type]=\"LEVEL_TAG[selected.level] || 'gray'\">{{\n selected.level\n }}</cds-tag>\n <span class=\"case-inspection-logs-tab__detail-timestamp\">\n {{ selected.timestamp | date: 'dd-MM-yyyy HH:mm:ss' }}\n </span>\n </header>\n\n <pre class=\"case-inspection-logs-tab__detail-message\">{{ selected.formattedMessage }}</pre>\n\n <h4>{{ 'case.inspection.logs.detail.properties' | translate }}</h4>\n <dl class=\"case-inspection-logs-tab__detail-properties\">\n <ng-container *ngFor=\"let prop of selected.properties\">\n <dt>\n <code>{{ prop.key }}</code>\n </dt>\n <dd>\n <code>{{ prop.value }}</code>\n </dd>\n </ng-container>\n </dl>\n\n <ng-container *ngIf=\"selected.stacktrace\">\n <h4>{{ 'case.inspection.logs.detail.stacktrace' | translate }}</h4>\n <pre class=\"case-inspection-logs-tab__detail-stacktrace\">{{ selected.stacktrace }}</pre>\n </ng-container>\n </aside>\n </div>\n </ng-container>\n</section>\n\n<ng-template #timestampTemplate let-data=\"data\">\n {{ data.item.timestamp | date: 'dd-MM HH:mm:ss' }}\n</ng-template>\n\n<ng-template #levelTemplate let-data=\"data\">\n <cds-tag size=\"sm\" [type]=\"LEVEL_TAG[data.item.level] || 'gray'\">\n {{ data.item.level }}\n </cds-tag>\n</ng-template>\n\n<ng-template #messageTemplate let-data=\"data\">\n <span class=\"case-inspection-logs-tab__message-cell\">{{ data.item.formattedMessage }}</span>\n</ng-template>\n", styles: [".case-inspection-logs-tab{display:flex;flex-direction:column;padding:16px;gap:var(--cds-spacing-05)}.case-inspection-logs-tab__filters{display:grid;grid-template-columns:minmax(200px,1fr) minmax(140px,200px) 220px 220px auto;gap:var(--cds-spacing-04);align-items:end}.case-inspection-logs-tab__filter{min-width:0}.case-inspection-logs-tab cds-date-picker{display:block;width:100%}.case-inspection-logs-tab cds-date-picker ::ng-deep .cds--date-picker,.case-inspection-logs-tab cds-date-picker ::ng-deep .cds--date-picker--single,.case-inspection-logs-tab cds-date-picker ::ng-deep .cds--date-picker-container,.case-inspection-logs-tab cds-date-picker ::ng-deep .cds--date-picker-input,.case-inspection-logs-tab cds-date-picker ::ng-deep input.cds--date-picker__input{width:100%;min-width:0}.case-inspection-logs-tab__filter-actions{display:flex;gap:var(--cds-spacing-03)}.case-inspection-logs-tab__chip-row{display:flex;align-items:center;gap:var(--cds-spacing-03)}.case-inspection-logs-tab__error{color:var(--cds-support-error)}.case-inspection-logs-tab__empty{color:var(--cds-text-secondary);font-style:italic}.case-inspection-logs-tab__layout{display:flex;gap:var(--cds-spacing-05)}.case-inspection-logs-tab__list-panel{flex:0 0 65%;min-width:0}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table{width:100%}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table tbody tr{cursor:pointer}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table td:first-child{width:136px;min-width:136px;max-width:136px}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table td:nth-child(2){width:96px;min-width:96px;max-width:96px}.case-inspection-logs-tab__list-panel ::ng-deep .cds--data-table td:nth-child(3){max-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.case-inspection-logs-tab__list-panel[data-selected-row=\"0\"] ::ng-deep .cds--data-table tbody tr:nth-child(1){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"1\"] ::ng-deep .cds--data-table tbody tr:nth-child(2){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"2\"] ::ng-deep .cds--data-table tbody tr:nth-child(3){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"3\"] ::ng-deep .cds--data-table tbody tr:nth-child(4){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"4\"] ::ng-deep .cds--data-table tbody tr:nth-child(5){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"5\"] ::ng-deep .cds--data-table tbody tr:nth-child(6){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"6\"] ::ng-deep .cds--data-table tbody tr:nth-child(7){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"7\"] ::ng-deep .cds--data-table tbody tr:nth-child(8){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"8\"] ::ng-deep .cds--data-table tbody tr:nth-child(9){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__list-panel[data-selected-row=\"9\"] ::ng-deep .cds--data-table tbody tr:nth-child(10){background-color:var(--cds-layer-selected)}.case-inspection-logs-tab__message-cell{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.case-inspection-logs-tab__pagination{margin-top:var(--cds-spacing-03)}.case-inspection-logs-tab__detail{flex:0 0 calc(35% - var(--cds-spacing-05));background-color:var(--cds-layer);border:1px solid var(--cds-border-subtle);padding:var(--cds-spacing-05);overflow:auto}.case-inspection-logs-tab__detail h4{margin-top:var(--cds-spacing-05);margin-bottom:var(--cds-spacing-03);font-size:var(--cds-body-compact-01-font-size);font-weight:600}.case-inspection-logs-tab__detail-header{display:flex;flex-direction:column;align-items:flex-start;gap:var(--cds-spacing-02)}.case-inspection-logs-tab__detail-timestamp{color:var(--cds-text-secondary);font-size:var(--cds-helper-text-01-font-size)}.case-inspection-logs-tab__detail-message{margin:var(--cds-spacing-04) 0;padding:var(--cds-spacing-03);background-color:var(--cds-background);border:1px solid var(--cds-border-subtle);white-space:pre-wrap;word-break:break-word;font-size:var(--cds-helper-text-01-font-size)}.case-inspection-logs-tab__detail-properties{display:flex;flex-direction:column;gap:var(--cds-spacing-03)}.case-inspection-logs-tab__detail-properties dt{margin-bottom:var(--cds-spacing-01)}.case-inspection-logs-tab__detail-properties dt code{color:var(--cds-text-secondary)}.case-inspection-logs-tab__detail-properties dd{margin:0 0 var(--cds-spacing-02) 0}.case-inspection-logs-tab__detail-properties dd code{color:var(var(--cds-status-purple))}.case-inspection-logs-tab__detail-properties dt,.case-inspection-logs-tab__detail-properties dd{font-size:var(--cds-helper-text-01-font-size);word-break:break-all}.case-inspection-logs-tab__detail-stacktrace{margin:0;padding:var(--cds-spacing-03);background-color:var(--cds-background);border:1px solid var(--cds-border-subtle);white-space:pre-wrap;word-break:break-word;font-family:var(--cds-code-01-font-family);font-size:var(--cds-helper-text-01-font-size);max-height:256px;overflow:auto}\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: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$5.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$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i2.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: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i4$1.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "readonly", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i4$1.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: i4$1.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i4$1.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "fluid"] }, { kind: "directive", type: i4$1.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i4$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i4$1.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i4$1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7206
7276
  }
7207
7277
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseInspectionLogsTabComponent, decorators: [{
7208
7278
  type: Component,
@@ -8062,7 +8132,10 @@ class GenericCaseListComponent {
8062
8132
  this._allCasesSort$ = new BehaviorSubject(null);
8063
8133
  this._allCasesReload$ = new BehaviorSubject(false);
8064
8134
  this._allCasesAssigneeFilter$ = new BehaviorSubject('ALL');
8135
+ this._allCasesGlobalSearch$ = new BehaviorSubject('');
8065
8136
  this.allCasesAssigneeFilter$ = this._allCasesAssigneeFilter$.asObservable();
8137
+ this.allCasesGlobalSearch$ = this._allCasesGlobalSearch$.asObservable();
8138
+ this.allCasesInvalidSearchFields$ = this.documentService.invalidSearchFields$;
8066
8139
  this.allCasesFields$ = this.translateService
8067
8140
  .stream('fieldLabels')
8068
8141
  .pipe(map(() => this.mapDefaultColumnsToListFields(this.configService.config?.defaultDefinitionTable || [])));
@@ -8073,8 +8146,9 @@ class GenericCaseListComponent {
8073
8146
  this._allCasesSort$,
8074
8147
  this._allCasesReload$,
8075
8148
  this._allCasesAssigneeFilter$,
8076
- ]).pipe(tap(() => this.allCasesLoading$.next(true)), switchMap(([page, size, sort, _, assigneeFilter]) => {
8077
- const request = new DocumentSearchRequestImpl('', page - 1, size, undefined, undefined, undefined, sort, undefined, assigneeFilter !== 'ALL' ? assigneeFilter : undefined);
8149
+ this._allCasesGlobalSearch$,
8150
+ ]).pipe(tap(() => this.allCasesLoading$.next(true)), switchMap(([page, size, sort, _, assigneeFilter, globalSearch]) => {
8151
+ const request = new DocumentSearchRequestImpl('', page - 1, size, undefined, undefined, globalSearch || undefined, sort, undefined, assigneeFilter !== 'ALL' ? assigneeFilter : undefined);
8078
8152
  return this.documentService.getDocuments(request).pipe(map((documents) => ({
8079
8153
  items: documents.content.map(document => {
8080
8154
  const { content, ...others } = document;
@@ -8113,6 +8187,7 @@ class GenericCaseListComponent {
8113
8187
  this.parameterService.clearSearchFieldValues();
8114
8188
  this.paginationService.clearPagination();
8115
8189
  this.assigneeService.resetAssigneeFilter();
8190
+ this.searchService.setGlobalSearchFilter(null);
8116
8191
  this.listService.setCaseDefinitionKey(newId);
8117
8192
  this.orchestration.setLoading();
8118
8193
  this.subscribeToPagination();
@@ -8120,6 +8195,7 @@ class GenericCaseListComponent {
8120
8195
  this.subscribeToSearchFields();
8121
8196
  }
8122
8197
  else {
8198
+ this._allCasesGlobalSearch$.next('');
8123
8199
  this._allCasesPage$.next(1);
8124
8200
  this._allCasesReload$.next(!this._allCasesReload$.getValue());
8125
8201
  }
@@ -8238,6 +8314,7 @@ class GenericCaseListComponent {
8238
8314
  this.statusService.setSelectedStatuses(this.parameterService.getSearchObject(queryParams['status']));
8239
8315
  this.caseListCaseTagService.setSelectedCaseTags(this.parameterService.getSearchObject(queryParams['casetags']));
8240
8316
  this.parameterService.setSearchFieldValues(this.parameterService.getSearchObject(queryParams['search']));
8317
+ this.searchService.setGlobalSearchFilter(null);
8241
8318
  });
8242
8319
  }
8243
8320
  onClearEvent() {
@@ -8259,6 +8336,13 @@ class GenericCaseListComponent {
8259
8336
  this._allCasesAssigneeFilter$.next(tab);
8260
8337
  this._allCasesPage$.next(1);
8261
8338
  }
8339
+ allCasesSearch(searchTerm) {
8340
+ this._allCasesGlobalSearch$.next(searchTerm);
8341
+ this._allCasesPage$.next(1);
8342
+ }
8343
+ onGlobalSearchFilterChange(value) {
8344
+ this.searchService.setGlobalSearchFilter(value);
8345
+ }
8262
8346
  // --- Private ---
8263
8347
  subscribeToPagination() {
8264
8348
  this._paginationSubscription?.unsubscribe();
@@ -8315,7 +8399,7 @@ class GenericCaseListComponent {
8315
8399
  provide: QUICK_SEARCH_SERVICE,
8316
8400
  useClass: CaseListQuickSearchService,
8317
8401
  },
8318
- ], viewQueries: [{ propertyName: "carbonList", first: true, predicate: ["specificCaseList"], descendants: true }, { propertyName: "listActionsComponent", first: true, predicate: CaseListActionsComponent, descendants: true }, { propertyName: "tabsComponent", first: true, predicate: CaseListTabsComponent, 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 *ngIf=\"{isAllCases: isAllCases$ | async} as mode\">\n <!-- All Cases mode -->\n <ng-container *ngIf=\"mode.isAllCases\">\n <valtimo-carbon-list\n [fields]=\"allCasesFields$ | async\"\n [header]=\"false\"\n [items]=\"(allCasesData$ | async)?.items\"\n [loading]=\"allCasesLoading$ | async\"\n [pagination]=\"(allCasesData$ | async)?.pagination\"\n paginationIdentifier=\"genericCaseList\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"allCasesPageChange($event)\"\n (paginationSet)=\"allCasesPageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"allCasesSortChanged($event)\"\n >\n <valtimo-no-results\n [description]=\"'case.noResults.ALL.description' | translate\"\n [title]=\"'case.noResults.ALL.title' | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"visibleCaseTabs\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"allCasesAssigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"allCasesTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-container>\n\n <!-- Specific case definition mode -->\n <ng-container *ngIf=\"!mode.isAllCases\">\n <ng-container\n *ngIf=\"{\n availableFields: orchestration.availableFields$ | async,\n fields: orchestration.fields$ | async,\n documentItems: orchestration.documentItems$ | async,\n noResultsMessage: orchestration.noResultsMessage$ | async,\n hasApiColumnConfig: orchestration.hasApiColumnConfig$ | async,\n searchFields: orchestration.searchFields$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedCaseIds: selectedCaseIds$ | async,\n statuses: orchestration.statuses$ | async,\n caseTags: orchestration.caseTags$ | async,\n selectedStatusKeys: orchestration.selectedStatusKeys$ | async,\n selectedCaseTagKeys: orchestration.selectedCaseTagKeys$ | async,\n showStatusSelector: orchestration.showStatusSelector$ | async,\n showCaseTagsSelector: orchestration.showCaseTagsSelector$ | async,\n loaded: orchestration.loaded$ | async,\n canCreate: orchestration.canCreateCase$ | async,\n canExport: orchestration.canExportCase$ | async,\n disableExport: orchestration.disableExportButton$ | async,\n disableSaveSearch: orchestration.disableSaveSearch$ | async,\n assigneeFilter: orchestration.assigneeFilter$ | async,\n hiddenColumns: orchestration.hiddenColumns$ | async,\n disableStartButton: disableStartButton$ | async,\n } as obs\"\n >\n <valtimo-case-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-case-list-actions>\n\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <valtimo-quick-search\n (quickSearchEvent)=\"onQuickSearchEvent($event)\"\n ></valtimo-quick-search>\n\n <ng-container *ngIf=\"obs.loaded; else specificLoading\">\n <valtimo-carbon-list\n #specificCaseList\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination?.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"genericCaseListSpecific\"\n lockedTooltipTranslationKey=\"case.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'case.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <valtimo-case-list-toolbar\n [availableFields]=\"obs.availableFields\"\n [canCreate]=\"obs.canCreate\"\n [canExport]=\"obs.canExport\"\n [disableExport]=\"obs.disableExport\"\n [disableStart]=\"obs.disableStartButton\"\n [hasApiColumnConfig]=\"obs.hasApiColumnConfig\"\n [hiddenColumns]=\"obs.hiddenColumns\"\n [loadingExport]=\"loadingExport\"\n (exportEvent)=\"export()\"\n (startCaseEvent)=\"startCase()\"\n (viewUpdateEvent)=\"onViewUpdateEvent($event)\"\n ></valtimo-case-list-toolbar>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage?.isSearchResult ? null : caseListActionsNoResult\"\n [description]=\"obs.noResultsMessage?.description | translate\"\n [title]=\"obs.noResultsMessage?.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"obs.assigneeFilter\"\n [selectedRowCount]=\"carbonList?.model?.selectedRowsCount() ?? 0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-container>\n\n <ng-template #specificLoading>\n <valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"orchestration.assigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-template>\n\n <valtimo-case-bulk-assign-modal\n [documentIds]=\"obs.selectedCaseIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event)\"\n ></valtimo-case-bulk-assign-modal>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.changePageModal.confirm\"\n contentTranslationKey=\"case.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"case.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <valtimo-search-fields\n [disableSaveSearch]=\"obs.disableSaveSearch\"\n [canSaveSearch]=\"true\"\n [searchFields]=\"obs.searchFields\"\n [caseDefinitionKey]=\"orchestration.caseDefinitionKey$ | async\"\n [defaultValues]=\"orchestration.searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n (clearEvent)=\"onClearEvent()\"\n (doSearch)=\"search($event)\"\n (saveSearchEvent)=\"onSaveSearchEvent($event)\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatusKeys]=\"obs.selectedStatusKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n\n <valtimo-case-tags-selector\n *ngIf=\"obs.showCaseTagsSelector\"\n [caseTags]=\"obs.caseTags\"\n [selectedCaseTagKeys]=\"obs.selectedCaseTagKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedCaseTagsChangeEvent)=\"onSelectedCaseTagsChange($event)\"\n ></valtimo-case-tags-selector>\n </valtimo-search-fields>\n</ng-template>\n\n<ng-template #caseListActionsNoResult>\n <button\n *ngIf=\"orchestration.canCreateCase$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startCase()\"\n >\n {{ 'Start Case' | translate }}\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <cds-dropdown\n class=\"case-definition-selection\"\n *ngIf=\"{\n loadingCaseListItems: loadingCaseListItems$ | async,\n caseListItems: caseListItems$ | async,\n } as dropdownObs\"\n [attr.data-testid]=\"'generic-case-list-dropdown'\"\n [disabled]=\"dropdownObs.loadingCaseListItems || (dropdownObs.caseListItems || []).length === 1\"\n [skeleton]=\"dropdownObs.loadingCaseListItems\"\n (selected)=\"setCaseDefinition($event)\"\n >\n <cds-dropdown-list [items]=\"dropdownObs.caseListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-template>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;gap:16px}.case-definition-selection{display:flex;width:250px}\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: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "caseDefinitionKey", "setValuesSubject$", "clearValuesSubject$", "defaultValues", "disableSaveSearch", "inputDisabled", "externalSearchField", "canSaveSearch"], outputs: ["doSearch", "saveSearchEvent", "clearEvent"] }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.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: i4$1.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: i4$1.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.StatusSelectorComponent, selector: "valtimo-status-selector", inputs: ["statuses", "selectedStatusKeys", "carbonTheme", "disabled"], outputs: ["selectedStatusesChangeEvent"] }, { kind: "directive", type: i2.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i2.CaseTagsSelectorComponent, selector: "valtimo-case-tags-selector", inputs: ["caseTags", "selectedCaseTagKeys", "carbonTheme", "disabled"], outputs: ["selectedCaseTagsChangeEvent"] }, { kind: "component", type: i2.QuickSearchComponent, selector: "valtimo-quick-search", outputs: ["quickSearchEvent"] }, { kind: "component", type: CaseListActionsComponent, selector: "valtimo-case-list-actions", inputs: ["loading", "navigateAfterSubmit"], outputs: ["formFlowComplete", "startButtonDisableEvent"] }, { kind: "component", type: CaseBulkAssignModalComponent, selector: "valtimo-case-bulk-assign-modal", inputs: ["documentIds", "open"], outputs: ["closeEvent"] }, { kind: "component", type: CaseListTabsComponent, selector: "valtimo-case-list-tabs", inputs: ["assigneeFilter", "selectedRowCount", "visibleTabs"], outputs: ["tabChangeEvent"] }, { kind: "component", type: CaseListToolbarComponent, selector: "valtimo-case-list-toolbar", inputs: ["availableFields", "canCreate", "canExport", "disableExport", "disableStart", "hasApiColumnConfig", "hiddenColumns", "loadingExport"], outputs: ["exportEvent", "startCaseEvent", "viewUpdateEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
8402
+ ], viewQueries: [{ propertyName: "carbonList", first: true, predicate: ["specificCaseList"], descendants: true }, { propertyName: "listActionsComponent", first: true, predicate: CaseListActionsComponent, descendants: true }, { propertyName: "tabsComponent", first: true, predicate: CaseListTabsComponent, descendants: true }], ngImport: i0, template: "<!--\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 -->\n\n<ng-container *ngIf=\"{isAllCases: isAllCases$ | async} as mode\">\n <!-- All Cases mode -->\n <ng-container *ngIf=\"mode.isAllCases\">\n <valtimo-carbon-list\n [fields]=\"allCasesFields$ | async\"\n [header]=\"false\"\n [initialSearchValue]=\"allCasesGlobalSearch$ | async\"\n [invalidSearchFields]=\"allCasesInvalidSearchFields$ | async\"\n [isSearchable]=\"true\"\n [items]=\"(allCasesData$ | async)?.items\"\n [loading]=\"allCasesLoading$ | async\"\n [pagination]=\"(allCasesData$ | async)?.pagination\"\n paginationIdentifier=\"genericCaseList\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"allCasesPageChange($event)\"\n (paginationSet)=\"allCasesPageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (search)=\"allCasesSearch($event)\"\n (sortChanged)=\"allCasesSortChanged($event)\"\n >\n <valtimo-no-results\n [description]=\"'case.noResults.ALL.description' | translate\"\n [title]=\"'case.noResults.ALL.title' | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"visibleCaseTabs\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"allCasesAssigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"allCasesTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-container>\n\n <!-- Specific case definition mode -->\n <ng-container *ngIf=\"!mode.isAllCases\">\n <ng-container\n *ngIf=\"{\n availableFields: orchestration.availableFields$ | async,\n fields: orchestration.fields$ | async,\n documentItems: orchestration.documentItems$ | async,\n noResultsMessage: orchestration.noResultsMessage$ | async,\n hasApiColumnConfig: orchestration.hasApiColumnConfig$ | async,\n searchFields: orchestration.searchFields$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedCaseIds: selectedCaseIds$ | async,\n statuses: orchestration.statuses$ | async,\n caseTags: orchestration.caseTags$ | async,\n selectedStatusKeys: orchestration.selectedStatusKeys$ | async,\n selectedCaseTagKeys: orchestration.selectedCaseTagKeys$ | async,\n showStatusSelector: orchestration.showStatusSelector$ | async,\n showCaseTagsSelector: orchestration.showCaseTagsSelector$ | async,\n loaded: orchestration.loaded$ | async,\n canCreate: orchestration.canCreateCase$ | async,\n canExport: orchestration.canExportCase$ | async,\n disableExport: orchestration.disableExportButton$ | async,\n disableSaveSearch: orchestration.disableSaveSearch$ | async,\n assigneeFilter: orchestration.assigneeFilter$ | async,\n hiddenColumns: orchestration.hiddenColumns$ | async,\n disableStartButton: disableStartButton$ | async,\n invalidSearchFields: orchestration.invalidSearchFields$ | async,\n } as obs\"\n >\n <valtimo-case-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-case-list-actions>\n\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <valtimo-quick-search\n (quickSearchEvent)=\"onQuickSearchEvent($event)\"\n ></valtimo-quick-search>\n\n <ng-container *ngIf=\"obs.loaded; else specificLoading\">\n <valtimo-carbon-list\n #specificCaseList\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSearchValue]=\"searchService.globalSearchFilter$ | async\"\n [initialSortState]=\"pagination?.sort\"\n [isSearchable]=\"true\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"genericCaseListSpecific\"\n lockedTooltipTranslationKey=\"case.rowLocked\"\n [searchFields]=\"obs.searchFields || []\"\n [invalidSearchFields]=\"obs.invalidSearchFields || []\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (search)=\"onGlobalSearchFilterChange($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'case.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <valtimo-case-list-toolbar\n [availableFields]=\"obs.availableFields\"\n [canCreate]=\"obs.canCreate\"\n [canExport]=\"obs.canExport\"\n [disableExport]=\"obs.disableExport\"\n [disableStart]=\"obs.disableStartButton\"\n [hasApiColumnConfig]=\"obs.hasApiColumnConfig\"\n [hiddenColumns]=\"obs.hiddenColumns\"\n [loadingExport]=\"loadingExport\"\n (exportEvent)=\"export()\"\n (startCaseEvent)=\"startCase()\"\n (viewUpdateEvent)=\"onViewUpdateEvent($event)\"\n ></valtimo-case-list-toolbar>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage?.isSearchResult ? null : caseListActionsNoResult\"\n [description]=\"obs.noResultsMessage?.description | translate\"\n [title]=\"obs.noResultsMessage?.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"obs.assigneeFilter\"\n [selectedRowCount]=\"carbonList?.model?.selectedRowsCount() ?? 0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-container>\n\n <ng-template #specificLoading>\n <valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"orchestration.assigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-template>\n\n <valtimo-case-bulk-assign-modal\n [documentIds]=\"obs.selectedCaseIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event)\"\n ></valtimo-case-bulk-assign-modal>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.changePageModal.confirm\"\n contentTranslationKey=\"case.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"case.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <valtimo-search-fields\n [disableSaveSearch]=\"obs.disableSaveSearch\"\n [canSaveSearch]=\"true\"\n [searchFields]=\"obs.searchFields\"\n [caseDefinitionKey]=\"orchestration.caseDefinitionKey$ | async\"\n [defaultValues]=\"orchestration.searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n (clearEvent)=\"onClearEvent()\"\n (doSearch)=\"search($event)\"\n (saveSearchEvent)=\"onSaveSearchEvent($event)\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatusKeys]=\"obs.selectedStatusKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n\n <valtimo-case-tags-selector\n *ngIf=\"obs.showCaseTagsSelector\"\n [caseTags]=\"obs.caseTags\"\n [selectedCaseTagKeys]=\"obs.selectedCaseTagKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedCaseTagsChangeEvent)=\"onSelectedCaseTagsChange($event)\"\n ></valtimo-case-tags-selector>\n </valtimo-search-fields>\n</ng-template>\n\n<ng-template #caseListActionsNoResult>\n <button\n *ngIf=\"orchestration.canCreateCase$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startCase()\"\n >\n {{ 'Start Case' | translate }}\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <cds-dropdown\n class=\"case-definition-selection\"\n *ngIf=\"{\n loadingCaseListItems: loadingCaseListItems$ | async,\n caseListItems: caseListItems$ | async,\n } as dropdownObs\"\n [attr.data-testid]=\"'generic-case-list-dropdown'\"\n [disabled]=\"dropdownObs.loadingCaseListItems || (dropdownObs.caseListItems || []).length === 1\"\n [skeleton]=\"dropdownObs.loadingCaseListItems\"\n (selected)=\"setCaseDefinition($event)\"\n >\n <cds-dropdown-list [items]=\"dropdownObs.caseListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-template>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;gap:16px}.case-definition-selection{display:flex;width:250px}\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: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "caseDefinitionKey", "setValuesSubject$", "clearValuesSubject$", "defaultValues", "disableSaveSearch", "inputDisabled", "externalSearchField", "canSaveSearch"], outputs: ["doSearch", "saveSearchEvent", "clearEvent"] }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i4$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.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: i4$1.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: i4$1.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i2.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: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i2.StatusSelectorComponent, selector: "valtimo-status-selector", inputs: ["statuses", "selectedStatusKeys", "carbonTheme", "disabled"], outputs: ["selectedStatusesChangeEvent"] }, { kind: "directive", type: i2.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i2.CaseTagsSelectorComponent, selector: "valtimo-case-tags-selector", inputs: ["caseTags", "selectedCaseTagKeys", "carbonTheme", "disabled"], outputs: ["selectedCaseTagsChangeEvent"] }, { kind: "component", type: i2.QuickSearchComponent, selector: "valtimo-quick-search", outputs: ["quickSearchEvent"] }, { kind: "component", type: CaseListActionsComponent, selector: "valtimo-case-list-actions", inputs: ["loading", "navigateAfterSubmit"], outputs: ["formFlowComplete", "startButtonDisableEvent"] }, { kind: "component", type: CaseBulkAssignModalComponent, selector: "valtimo-case-bulk-assign-modal", inputs: ["documentIds", "open"], outputs: ["closeEvent"] }, { kind: "component", type: CaseListTabsComponent, selector: "valtimo-case-list-tabs", inputs: ["assigneeFilter", "selectedRowCount", "visibleTabs"], outputs: ["tabChangeEvent"] }, { kind: "component", type: CaseListToolbarComponent, selector: "valtimo-case-list-toolbar", inputs: ["availableFields", "canCreate", "canExport", "disableExport", "disableStart", "hasApiColumnConfig", "hiddenColumns", "loadingExport"], outputs: ["exportEvent", "startCaseEvent", "viewUpdateEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
8319
8403
  }
8320
8404
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: GenericCaseListComponent, decorators: [{
8321
8405
  type: Component,
@@ -8334,7 +8418,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
8334
8418
  provide: QUICK_SEARCH_SERVICE,
8335
8419
  useClass: CaseListQuickSearchService,
8336
8420
  },
8337
- ], 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 *ngIf=\"{isAllCases: isAllCases$ | async} as mode\">\n <!-- All Cases mode -->\n <ng-container *ngIf=\"mode.isAllCases\">\n <valtimo-carbon-list\n [fields]=\"allCasesFields$ | async\"\n [header]=\"false\"\n [items]=\"(allCasesData$ | async)?.items\"\n [loading]=\"allCasesLoading$ | async\"\n [pagination]=\"(allCasesData$ | async)?.pagination\"\n paginationIdentifier=\"genericCaseList\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"allCasesPageChange($event)\"\n (paginationSet)=\"allCasesPageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"allCasesSortChanged($event)\"\n >\n <valtimo-no-results\n [description]=\"'case.noResults.ALL.description' | translate\"\n [title]=\"'case.noResults.ALL.title' | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"visibleCaseTabs\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"allCasesAssigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"allCasesTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-container>\n\n <!-- Specific case definition mode -->\n <ng-container *ngIf=\"!mode.isAllCases\">\n <ng-container\n *ngIf=\"{\n availableFields: orchestration.availableFields$ | async,\n fields: orchestration.fields$ | async,\n documentItems: orchestration.documentItems$ | async,\n noResultsMessage: orchestration.noResultsMessage$ | async,\n hasApiColumnConfig: orchestration.hasApiColumnConfig$ | async,\n searchFields: orchestration.searchFields$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedCaseIds: selectedCaseIds$ | async,\n statuses: orchestration.statuses$ | async,\n caseTags: orchestration.caseTags$ | async,\n selectedStatusKeys: orchestration.selectedStatusKeys$ | async,\n selectedCaseTagKeys: orchestration.selectedCaseTagKeys$ | async,\n showStatusSelector: orchestration.showStatusSelector$ | async,\n showCaseTagsSelector: orchestration.showCaseTagsSelector$ | async,\n loaded: orchestration.loaded$ | async,\n canCreate: orchestration.canCreateCase$ | async,\n canExport: orchestration.canExportCase$ | async,\n disableExport: orchestration.disableExportButton$ | async,\n disableSaveSearch: orchestration.disableSaveSearch$ | async,\n assigneeFilter: orchestration.assigneeFilter$ | async,\n hiddenColumns: orchestration.hiddenColumns$ | async,\n disableStartButton: disableStartButton$ | async,\n } as obs\"\n >\n <valtimo-case-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-case-list-actions>\n\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <valtimo-quick-search\n (quickSearchEvent)=\"onQuickSearchEvent($event)\"\n ></valtimo-quick-search>\n\n <ng-container *ngIf=\"obs.loaded; else specificLoading\">\n <valtimo-carbon-list\n #specificCaseList\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSortState]=\"pagination?.sort\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"genericCaseListSpecific\"\n lockedTooltipTranslationKey=\"case.rowLocked\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'case.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <valtimo-case-list-toolbar\n [availableFields]=\"obs.availableFields\"\n [canCreate]=\"obs.canCreate\"\n [canExport]=\"obs.canExport\"\n [disableExport]=\"obs.disableExport\"\n [disableStart]=\"obs.disableStartButton\"\n [hasApiColumnConfig]=\"obs.hasApiColumnConfig\"\n [hiddenColumns]=\"obs.hiddenColumns\"\n [loadingExport]=\"loadingExport\"\n (exportEvent)=\"export()\"\n (startCaseEvent)=\"startCase()\"\n (viewUpdateEvent)=\"onViewUpdateEvent($event)\"\n ></valtimo-case-list-toolbar>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage?.isSearchResult ? null : caseListActionsNoResult\"\n [description]=\"obs.noResultsMessage?.description | translate\"\n [title]=\"obs.noResultsMessage?.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"obs.assigneeFilter\"\n [selectedRowCount]=\"carbonList?.model?.selectedRowsCount() ?? 0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-container>\n\n <ng-template #specificLoading>\n <valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"orchestration.assigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-template>\n\n <valtimo-case-bulk-assign-modal\n [documentIds]=\"obs.selectedCaseIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event)\"\n ></valtimo-case-bulk-assign-modal>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.changePageModal.confirm\"\n contentTranslationKey=\"case.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"case.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <valtimo-search-fields\n [disableSaveSearch]=\"obs.disableSaveSearch\"\n [canSaveSearch]=\"true\"\n [searchFields]=\"obs.searchFields\"\n [caseDefinitionKey]=\"orchestration.caseDefinitionKey$ | async\"\n [defaultValues]=\"orchestration.searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n (clearEvent)=\"onClearEvent()\"\n (doSearch)=\"search($event)\"\n (saveSearchEvent)=\"onSaveSearchEvent($event)\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatusKeys]=\"obs.selectedStatusKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n\n <valtimo-case-tags-selector\n *ngIf=\"obs.showCaseTagsSelector\"\n [caseTags]=\"obs.caseTags\"\n [selectedCaseTagKeys]=\"obs.selectedCaseTagKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedCaseTagsChangeEvent)=\"onSelectedCaseTagsChange($event)\"\n ></valtimo-case-tags-selector>\n </valtimo-search-fields>\n</ng-template>\n\n<ng-template #caseListActionsNoResult>\n <button\n *ngIf=\"orchestration.canCreateCase$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startCase()\"\n >\n {{ 'Start Case' | translate }}\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <cds-dropdown\n class=\"case-definition-selection\"\n *ngIf=\"{\n loadingCaseListItems: loadingCaseListItems$ | async,\n caseListItems: caseListItems$ | async,\n } as dropdownObs\"\n [attr.data-testid]=\"'generic-case-list-dropdown'\"\n [disabled]=\"dropdownObs.loadingCaseListItems || (dropdownObs.caseListItems || []).length === 1\"\n [skeleton]=\"dropdownObs.loadingCaseListItems\"\n (selected)=\"setCaseDefinition($event)\"\n >\n <cds-dropdown-list [items]=\"dropdownObs.caseListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-template>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;gap:16px}.case-definition-selection{display:flex;width:250px}\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"] }]
8421
+ ], template: "<!--\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 -->\n\n<ng-container *ngIf=\"{isAllCases: isAllCases$ | async} as mode\">\n <!-- All Cases mode -->\n <ng-container *ngIf=\"mode.isAllCases\">\n <valtimo-carbon-list\n [fields]=\"allCasesFields$ | async\"\n [header]=\"false\"\n [initialSearchValue]=\"allCasesGlobalSearch$ | async\"\n [invalidSearchFields]=\"allCasesInvalidSearchFields$ | async\"\n [isSearchable]=\"true\"\n [items]=\"(allCasesData$ | async)?.items\"\n [loading]=\"allCasesLoading$ | async\"\n [pagination]=\"(allCasesData$ | async)?.pagination\"\n paginationIdentifier=\"genericCaseList\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"allCasesPageChange($event)\"\n (paginationSet)=\"allCasesPageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (search)=\"allCasesSearch($event)\"\n (sortChanged)=\"allCasesSortChanged($event)\"\n >\n <valtimo-no-results\n [description]=\"'case.noResults.ALL.description' | translate\"\n [title]=\"'case.noResults.ALL.title' | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"visibleCaseTabs\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"allCasesAssigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"allCasesTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-container>\n\n <!-- Specific case definition mode -->\n <ng-container *ngIf=\"!mode.isAllCases\">\n <ng-container\n *ngIf=\"{\n availableFields: orchestration.availableFields$ | async,\n fields: orchestration.fields$ | async,\n documentItems: orchestration.documentItems$ | async,\n noResultsMessage: orchestration.noResultsMessage$ | async,\n hasApiColumnConfig: orchestration.hasApiColumnConfig$ | async,\n searchFields: orchestration.searchFields$ | async,\n showAssignModal: showAssignModal$ | async,\n selectedCaseIds: selectedCaseIds$ | async,\n statuses: orchestration.statuses$ | async,\n caseTags: orchestration.caseTags$ | async,\n selectedStatusKeys: orchestration.selectedStatusKeys$ | async,\n selectedCaseTagKeys: orchestration.selectedCaseTagKeys$ | async,\n showStatusSelector: orchestration.showStatusSelector$ | async,\n showCaseTagsSelector: orchestration.showCaseTagsSelector$ | async,\n loaded: orchestration.loaded$ | async,\n canCreate: orchestration.canCreateCase$ | async,\n canExport: orchestration.canExportCase$ | async,\n disableExport: orchestration.disableExportButton$ | async,\n disableSaveSearch: orchestration.disableSaveSearch$ | async,\n assigneeFilter: orchestration.assigneeFilter$ | async,\n hiddenColumns: orchestration.hiddenColumns$ | async,\n disableStartButton: disableStartButton$ | async,\n invalidSearchFields: orchestration.invalidSearchFields$ | async,\n } as obs\"\n >\n <valtimo-case-list-actions\n [loading]=\"!obs.loaded\"\n (formFlowComplete)=\"forceRefresh()\"\n (startButtonDisableEvent)=\"onStartButtonDisableEvent($event)\"\n ></valtimo-case-list-actions>\n\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n\n <valtimo-quick-search\n (quickSearchEvent)=\"onQuickSearchEvent($event)\"\n ></valtimo-quick-search>\n\n <ng-container *ngIf=\"obs.loaded; else specificLoading\">\n <valtimo-carbon-list\n #specificCaseList\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [initialSearchValue]=\"searchService.globalSearchFilter$ | async\"\n [initialSortState]=\"pagination?.sort\"\n [isSearchable]=\"true\"\n [items]=\"obs.documentItems\"\n [pagination]=\"pagination\"\n paginationIdentifier=\"genericCaseListSpecific\"\n lockedTooltipTranslationKey=\"case.rowLocked\"\n [searchFields]=\"obs.searchFields || []\"\n [invalidSearchFields]=\"obs.invalidSearchFields || []\"\n [showSelectionColumn]=\"canHaveAssignee\"\n [tableTranslations]=\"tableTranslations\"\n (paginationClicked)=\"pageChange($event)\"\n (paginationSet)=\"pageSizeChange($event)\"\n (rowClicked)=\"rowClick($event)\"\n (search)=\"onGlobalSearchFilterChange($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <ng-container carbonToolbarActions>\n <button cdsButton=\"primary\" (click)=\"showAssignModal()\">\n {{ 'case.bulkAssign.assign' | translate }}\n </button>\n </ng-container>\n\n <div carbonToolbarContent>\n <valtimo-case-list-toolbar\n [availableFields]=\"obs.availableFields\"\n [canCreate]=\"obs.canCreate\"\n [canExport]=\"obs.canExport\"\n [disableExport]=\"obs.disableExport\"\n [disableStart]=\"obs.disableStartButton\"\n [hasApiColumnConfig]=\"obs.hasApiColumnConfig\"\n [hiddenColumns]=\"obs.hiddenColumns\"\n [loadingExport]=\"loadingExport\"\n (exportEvent)=\"export()\"\n (startCaseEvent)=\"startCase()\"\n (viewUpdateEvent)=\"onViewUpdateEvent($event)\"\n ></valtimo-case-list-toolbar>\n </div>\n\n <valtimo-no-results\n [action]=\"obs.noResultsMessage?.isSearchResult ? null : caseListActionsNoResult\"\n [description]=\"obs.noResultsMessage?.description | translate\"\n [title]=\"obs.noResultsMessage?.title | translate\"\n ></valtimo-no-results>\n\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"obs.assigneeFilter\"\n [selectedRowCount]=\"carbonList?.model?.selectedRowsCount() ?? 0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-container>\n\n <ng-template #specificLoading>\n <valtimo-carbon-list [loading]=\"true\">\n <div tabs *ngIf=\"canHaveAssignee\">\n <valtimo-case-list-tabs\n [assigneeFilter]=\"orchestration.assigneeFilter$ | async\"\n [selectedRowCount]=\"0\"\n [visibleTabs]=\"visibleCaseTabs\"\n (tabChangeEvent)=\"onTabChange($event)\"\n ></valtimo-case-list-tabs>\n </div>\n </valtimo-carbon-list>\n </ng-template>\n\n <valtimo-case-bulk-assign-modal\n [documentIds]=\"obs.selectedCaseIds\"\n [open]=\"obs.showAssignModal\"\n (closeEvent)=\"onCloseEvent($event)\"\n ></valtimo-case-bulk-assign-modal>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.changePageModal.confirm\"\n contentTranslationKey=\"case.changePageModal.content\"\n [outputOnConfirm]=\"paginationChange$ | async\"\n [showModalSubject$]=\"showChangePageModal$\"\n titleTranslationKey=\"case.changePageModal.title\"\n (confirmEvent)=\"onChangePageConfirm($event)\"\n ></valtimo-confirmation-modal>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #searchFields let-obs=\"obs\">\n <valtimo-search-fields\n [disableSaveSearch]=\"obs.disableSaveSearch\"\n [canSaveSearch]=\"true\"\n [searchFields]=\"obs.searchFields\"\n [caseDefinitionKey]=\"orchestration.caseDefinitionKey$ | async\"\n [defaultValues]=\"orchestration.searchFieldValues$ | async\"\n [inputDisabled]=\"!obs.loaded\"\n [externalSearchField]=\"obs.showStatusSelector\"\n (clearEvent)=\"onClearEvent()\"\n (doSearch)=\"search($event)\"\n (saveSearchEvent)=\"onSaveSearchEvent($event)\"\n >\n <valtimo-status-selector\n *ngIf=\"obs.showStatusSelector\"\n [statuses]=\"obs.statuses\"\n [selectedStatusKeys]=\"obs.selectedStatusKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedStatusesChangeEvent)=\"onSelectedStatusesChange($event)\"\n ></valtimo-status-selector>\n\n <valtimo-case-tags-selector\n *ngIf=\"obs.showCaseTagsSelector\"\n [caseTags]=\"obs.caseTags\"\n [selectedCaseTagKeys]=\"obs.selectedCaseTagKeys\"\n [disabled]=\"!obs.loaded\"\n (selectedCaseTagsChangeEvent)=\"onSelectedCaseTagsChange($event)\"\n ></valtimo-case-tags-selector>\n </valtimo-search-fields>\n</ng-template>\n\n<ng-template #caseListActionsNoResult>\n <button\n *ngIf=\"orchestration.canCreateCase$ | async\"\n cdsButton=\"primary\"\n [disabled]=\"disableStartButton$ | async\"\n (click)=\"startCase()\"\n >\n {{ 'Start Case' | translate }}\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <cds-dropdown\n class=\"case-definition-selection\"\n *ngIf=\"{\n loadingCaseListItems: loadingCaseListItems$ | async,\n caseListItems: caseListItems$ | async,\n } as dropdownObs\"\n [attr.data-testid]=\"'generic-case-list-dropdown'\"\n [disabled]=\"dropdownObs.loadingCaseListItems || (dropdownObs.caseListItems || []).length === 1\"\n [skeleton]=\"dropdownObs.loadingCaseListItems\"\n (selected)=\"setCaseDefinition($event)\"\n >\n <cds-dropdown-list [items]=\"dropdownObs.caseListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-template>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;gap:16px}.case-definition-selection{display:flex;width:250px}\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"] }]
8338
8422
  }], ctorParameters: () => [{ type: CaseListAssigneeService }, { type: i2.BreadcrumbService }, { type: CaseBulkAssignService }, { type: CaseExportService }, { type: CaseListCaseTagService }, { type: CaseListService }, { type: i2.PageTitleService }, { type: CaseListPaginationService }, { type: CaseParameterService }, { type: i2.QuickSearchStateService }, { type: i1$3.Router }, { type: CaseListSearchService }, { type: CaseListStatusService }, { type: undefined, decorators: [{
8339
8423
  type: Inject,
8340
8424
  args: [QUICK_SEARCH_SERVICE]