@valtimo/case 13.39.0 → 13.40.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/valtimo-case.mjs +178 -16
- package/fesm2022/valtimo-case.mjs.map +1 -1
- package/lib/components/case-detail/tab/progress/progress.component.d.ts +32 -2
- package/lib/components/case-detail/tab/progress/progress.component.d.ts.map +1 -1
- package/lib/components/case-detail/tab/widgets/components/text/case-widget-text.component.d.ts +30 -0
- package/lib/components/case-detail/tab/widgets/components/text/case-widget-text.component.d.ts.map +1 -0
- package/lib/components/case-detail/tab/widgets/widgets.component.d.ts.map +1 -1
- package/lib/models/pending-skip.model.d.ts +8 -0
- package/lib/models/pending-skip.model.d.ts.map +1 -0
- package/lib/services/case-process-timer.service.d.ts +16 -0
- package/lib/services/case-process-timer.service.d.ts.map +1 -0
- package/lib/services/index.d.ts +1 -0
- package/lib/services/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -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,
|
|
3
|
+
import { combineLatest, map, distinctUntilChanged, BehaviorSubject, take, Subject, switchMap, of, tap, filter, Subscription, startWith, forkJoin, shareReplay, catchError as catchError$1, 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';
|
|
@@ -24,6 +24,7 @@ import * as i6 from '@angular/common';
|
|
|
24
24
|
import { CommonModule, DOCUMENT, NgComponentOutlet } from '@angular/common';
|
|
25
25
|
import * as i4$1 from 'carbon-components-angular';
|
|
26
26
|
import { InputModule, ButtonModule, PaginationModule, TilesModule, LoadingModule, LayerModule, TagModule, IconModule, DialogModule, ModalModule, NotificationModule, Tabs, StructuredListModule, DatePickerModule, DropdownModule, NumberModule, ToggleModule, LinkModule, TabsModule, SelectModule as SelectModule$1, ComboBoxModule, SkeletonModule, ToggletipModule, TooltipModule } from 'carbon-components-angular';
|
|
27
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
27
28
|
import * as i2$1 from '@valtimo/process';
|
|
28
29
|
import { ProcessDiagramComponent, ProcessModule } from '@valtimo/process';
|
|
29
30
|
import * as i3$1 from 'ngx-spinner';
|
|
@@ -34,8 +35,7 @@ import * as i2$2 from '@valtimo/access-control';
|
|
|
34
35
|
import * as i1$5 from '@angular/forms';
|
|
35
36
|
import { Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
36
37
|
import * as i5$1 from '@valtimo/layout';
|
|
37
|
-
import { WidgetFieldComponent, WidgetCustomComponent, WidgetFormioComponent, WidgetTableComponent, WidgetCollectionComponent, WidgetMapComponent, WidgetPersonCardComponent, WidgetMetrolineComponent, WidgetHighlightComponent, WidgetImageComponent, WidgetType, WidgetContainerComponent } from '@valtimo/layout';
|
|
38
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
38
|
+
import { WidgetFieldComponent, WidgetCustomComponent, WidgetFormioComponent, WidgetTableComponent, WidgetCollectionComponent, WidgetMapComponent, WidgetPersonCardComponent, WidgetMetrolineComponent, WidgetHighlightComponent, WidgetImageComponent, WidgetTextComponent, WidgetType, WidgetContainerComponent } from '@valtimo/layout';
|
|
39
39
|
import { isEqual } from 'lodash-es';
|
|
40
40
|
import { isEqual as isEqual$1 } from 'lodash';
|
|
41
41
|
import * as i5$2 from '@valtimo/teams';
|
|
@@ -1271,7 +1271,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
1271
1271
|
}], ctorParameters: () => [{ type: i1$2.DocumentService }, { type: i1$3.ActivatedRoute }, { type: i3.FormService }, { type: i4.TranslateService }, { type: i5.SseService }] });
|
|
1272
1272
|
|
|
1273
1273
|
/*
|
|
1274
|
-
* Copyright 2015-
|
|
1274
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
1275
1275
|
*
|
|
1276
1276
|
* Licensed under EUPL, Version 1.2 (the "License");
|
|
1277
1277
|
* you may not use this file except in compliance with the License.
|
|
@@ -1286,43 +1286,122 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
1286
1286
|
* limitations under the License.
|
|
1287
1287
|
*/
|
|
1288
1288
|
class CaseDetailTabProgressComponent {
|
|
1289
|
-
constructor(route, documentService) {
|
|
1289
|
+
constructor(route, documentService, caseProcessTimerService, notificationService, translateService, destroyRef) {
|
|
1290
1290
|
this.route = route;
|
|
1291
1291
|
this.documentService = documentService;
|
|
1292
|
-
this.
|
|
1292
|
+
this.caseProcessTimerService = caseProcessTimerService;
|
|
1293
|
+
this.notificationService = notificationService;
|
|
1294
|
+
this.translateService = translateService;
|
|
1295
|
+
this.destroyRef = destroyRef;
|
|
1296
|
+
this._documentId$ = this.route.paramMap.pipe(map((params) => params.get('documentId')), shareReplay({ bufferSize: 1, refCount: true }));
|
|
1297
|
+
this._reloadProcessInstances$ = new BehaviorSubject(undefined);
|
|
1298
|
+
this.selectedProcessInstanceId$ = new BehaviorSubject(null);
|
|
1299
|
+
this.processDocumentInstances$ = combineLatest([this.route.paramMap, this._reloadProcessInstances$]).pipe(switchMap(([params]) => this.documentService.findProcessDocumentInstances(params.get('documentId'))), map(processDocumentInstances => processDocumentInstances.map(processDocumentInstance => ({
|
|
1293
1300
|
...processDocumentInstance,
|
|
1294
1301
|
startedOn: new Date(processDocumentInstance.startedOn),
|
|
1295
1302
|
}))), map(processDocumentInstances => processDocumentInstances.sort((a, b) => a.active === b.active ? b.startedOn.getTime() - a.startedOn.getTime() : a.active ? -1 : 1)), tap(processDocumentInstances => {
|
|
1296
|
-
if (processDocumentInstances.length
|
|
1303
|
+
if (processDocumentInstances.length === 0) {
|
|
1304
|
+
return;
|
|
1305
|
+
}
|
|
1306
|
+
// Reloading keeps the selected process instance, as long as it is still part of the case.
|
|
1307
|
+
const stillPresent = processDocumentInstances.some(processDocumentInstance => processDocumentInstance.id.processInstanceId === this.selectedProcessInstanceId$.value);
|
|
1308
|
+
if (!stillPresent) {
|
|
1297
1309
|
this.selectedProcessInstanceId$.next(processDocumentInstances[0].id.processInstanceId);
|
|
1298
1310
|
}
|
|
1299
1311
|
}));
|
|
1300
|
-
this.processInstanceItems$ =
|
|
1312
|
+
this.processInstanceItems$ = combineLatest([
|
|
1313
|
+
this.processDocumentInstances$,
|
|
1314
|
+
this.selectedProcessInstanceId$,
|
|
1315
|
+
]).pipe(map(([processDocumentInstances, selectedProcessInstanceId]) => processDocumentInstances.map(processDocumentInstance => ({
|
|
1301
1316
|
processInstanceId: processDocumentInstance.id.processInstanceId,
|
|
1302
1317
|
content: processDocumentInstance.processName || '-',
|
|
1303
|
-
selected:
|
|
1318
|
+
selected: processDocumentInstance.id.processInstanceId === selectedProcessInstanceId,
|
|
1304
1319
|
}))), map(processInstanceItems => ({
|
|
1305
1320
|
value: processInstanceItems,
|
|
1306
1321
|
isLoading: false,
|
|
1307
1322
|
})), startWith({ isLoading: true }));
|
|
1308
|
-
this.selectedProcessInstanceId$ = new BehaviorSubject(null);
|
|
1309
1323
|
this.selectedProcessInstance$ = combineLatest([this.processDocumentInstances$, this.selectedProcessInstanceId$]).pipe(map(([processDocumentInstances, selectedProcessInstanceId]) => processDocumentInstances.find(instance => instance.id.processInstanceId === selectedProcessInstanceId)), map(processInstanceItems => ({
|
|
1310
1324
|
value: processInstanceItems,
|
|
1311
1325
|
isLoading: false,
|
|
1312
1326
|
})), startWith({ isLoading: true }));
|
|
1327
|
+
this.diagramReloadToken$ = new BehaviorSubject(0);
|
|
1328
|
+
this.showSkipConfirm$ = new BehaviorSubject(false);
|
|
1329
|
+
this._reloadTimers$ = new BehaviorSubject(undefined);
|
|
1330
|
+
/**
|
|
1331
|
+
* The endpoint only returns the timers the user is allowed to complete, so no separate permission
|
|
1332
|
+
* check is needed here. Checking the `complete` permission on `OperatonTimer` up front would not
|
|
1333
|
+
* work for permissions that are conditional on the timer or the case it belongs to.
|
|
1334
|
+
*/
|
|
1335
|
+
this.skippableTimers$ = combineLatest([
|
|
1336
|
+
this._documentId$,
|
|
1337
|
+
this.selectedProcessInstanceId$,
|
|
1338
|
+
this._reloadTimers$,
|
|
1339
|
+
]).pipe(switchMap(([documentId, processInstanceId]) => {
|
|
1340
|
+
if (!documentId || !processInstanceId) {
|
|
1341
|
+
return of([]);
|
|
1342
|
+
}
|
|
1343
|
+
return this.caseProcessTimerService.getSkippableTimers(documentId, processInstanceId).pipe(map(jobs => jobs.map(job => ({ jobId: job.id, activityId: job.activityId }))), catchError$1(() => of([])));
|
|
1344
|
+
}), startWith([]), shareReplay({ bufferSize: 1, refCount: true }));
|
|
1345
|
+
this.canSkipTimer$ = this.skippableTimers$.pipe(map(timers => timers.length > 0));
|
|
1346
|
+
this._pendingSkip$ = new BehaviorSubject(null);
|
|
1313
1347
|
}
|
|
1314
1348
|
loadProcessInstance(processInstanceId) {
|
|
1315
1349
|
if (!!processInstanceId) {
|
|
1316
1350
|
this.selectedProcessInstanceId$.next(processInstanceId);
|
|
1317
1351
|
}
|
|
1318
1352
|
}
|
|
1319
|
-
|
|
1320
|
-
|
|
1353
|
+
/**
|
|
1354
|
+
* The case and process instance the timer belongs to are captured here, so confirming skips the
|
|
1355
|
+
* timer in the context it was requested from, even when the selection or the route changed in the
|
|
1356
|
+
* meantime.
|
|
1357
|
+
*/
|
|
1358
|
+
onRequestSkipTimer(timer) {
|
|
1359
|
+
const processInstanceId = this.selectedProcessInstanceId$.value;
|
|
1360
|
+
this._documentId$.pipe(take(1), takeUntilDestroyed(this.destroyRef)).subscribe(documentId => {
|
|
1361
|
+
if (!documentId || !processInstanceId) {
|
|
1362
|
+
return;
|
|
1363
|
+
}
|
|
1364
|
+
this._pendingSkip$.next({ timer, documentId, processInstanceId });
|
|
1365
|
+
this.showSkipConfirm$.next(true);
|
|
1366
|
+
});
|
|
1367
|
+
}
|
|
1368
|
+
onConfirmSkipTimer() {
|
|
1369
|
+
this.showSkipConfirm$.next(false);
|
|
1370
|
+
const pendingSkip = this._pendingSkip$.value;
|
|
1371
|
+
if (!pendingSkip) {
|
|
1372
|
+
return;
|
|
1373
|
+
}
|
|
1374
|
+
/*
|
|
1375
|
+
The pending skip is cleared before the request is sent, so a repeated confirm cannot submit the
|
|
1376
|
+
same timer twice and a completing request cannot clear a newer pending skip.
|
|
1377
|
+
*/
|
|
1378
|
+
this._pendingSkip$.next(null);
|
|
1379
|
+
this.caseProcessTimerService
|
|
1380
|
+
.skipTimer(pendingSkip.documentId, pendingSkip.processInstanceId, pendingSkip.timer.jobId)
|
|
1381
|
+
// HTTP failures are surfaced globally by HttpErrorInterceptor, so only success is handled here.
|
|
1382
|
+
.subscribe(() => {
|
|
1383
|
+
this.notificationService.showToast({
|
|
1384
|
+
type: 'success',
|
|
1385
|
+
title: this.translateService.instant('progress.skipTimer.successToast'),
|
|
1386
|
+
message: '',
|
|
1387
|
+
});
|
|
1388
|
+
// Skipping a timer can complete the process, so the process instance data is stale too.
|
|
1389
|
+
this._reloadProcessInstances$.next();
|
|
1390
|
+
this._reloadTimers$.next();
|
|
1391
|
+
this.diagramReloadToken$.next(this.diagramReloadToken$.value + 1);
|
|
1392
|
+
});
|
|
1393
|
+
}
|
|
1394
|
+
onCancelSkipTimer() {
|
|
1395
|
+
this.showSkipConfirm$.next(false);
|
|
1396
|
+
this._pendingSkip$.next(null);
|
|
1397
|
+
}
|
|
1398
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseDetailTabProgressComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: i1$2.DocumentService }, { token: CaseProcessTimerService }, { token: i1.GlobalNotificationService }, { token: i4.TranslateService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1399
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseDetailTabProgressComponent, isStandalone: false, selector: "valtimo-case-detail-tab-progress", ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n class=\"full-height-tab-content\"\n *ngIf=\"{\n processInstanceItems: processInstanceItems$ | async,\n selectedProcessInstance: selectedProcessInstance$ | async,\n canSkipTimer: canSkipTimer$ | async,\n skippableTimers: skippableTimers$ | async,\n diagramReloadToken: diagramReloadToken$ | async,\n } as obs\"\n>\n <span *ngIf=\"!obs.processInstanceItems.isLoading && !obs.processInstanceItems.value\">{{\n 'progress.noProcessDocumentInstances' | translate\n }}</span>\n\n <div class=\"process-info-row\">\n <cds-dropdown\n [dropUp]=\"false\"\n [label]=\"'progress.process' | translate\"\n [skeleton]=\"obs.processInstanceItems.isLoading\"\n [style.width.px]=\"350\"\n (selected)=\"loadProcessInstance($event.item.processInstanceId)\"\n >\n <cds-dropdown-list [items]=\"obs.processInstanceItems.value || []\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div>\n <v-input-label [title]=\"'progress.version' | translate\"></v-input-label>\n\n <cds-skeleton-text\n *ngIf=\"obs.selectedProcessInstance.isLoading\"\n [lines]=\"1\"\n [maxLineWidth]=\"30\"\n ></cds-skeleton-text>\n\n <span *ngIf=\"!obs.selectedProcessInstance.isLoading\" class=\"process-info-text\">\n {{ obs.selectedProcessInstance.value.version }} ({{ 'progress.of' | translate }}\n {{ obs.selectedProcessInstance.value.latestVersion }})\n </span>\n </div>\n\n <div>\n <v-input-label [title]=\"'progress.startedBy' | translate\"></v-input-label>\n\n <cds-skeleton-text\n *ngIf=\"obs.selectedProcessInstance.isLoading\"\n [lines]=\"1\"\n [maxLineWidth]=\"50\"\n ></cds-skeleton-text>\n\n <span *ngIf=\"!obs.selectedProcessInstance.isLoading\" class=\"process-info-text\">\n {{ obs.selectedProcessInstance.value.startedBy || ('progress.system' | translate) }}\n </span>\n </div>\n\n <div>\n <v-input-label [title]=\"'progress.startedOn' | translate\"></v-input-label>\n\n <cds-skeleton-text\n *ngIf=\"obs.selectedProcessInstance.isLoading\"\n [lines]=\"1\"\n [maxLineWidth]=\"50\"\n ></cds-skeleton-text>\n\n <span *ngIf=\"!obs.selectedProcessInstance.isLoading\" class=\"process-info-text\">\n {{ obs.selectedProcessInstance.value.startedOn.toLocaleDateString() }}\n </span>\n </div>\n </div>\n\n <div>\n <valtimo-process-diagram\n *ngIf=\"!obs.selectedProcessInstance.isLoading\"\n [canSkipTimer]=\"obs.canSkipTimer || false\"\n [processInstanceId]=\"obs.selectedProcessInstance.value.id.processInstanceId\"\n [reloadToken]=\"obs.diagramReloadToken || 0\"\n [skipTimerLabel]=\"'progress.skipTimer.action' | translate\"\n [skippableTimers]=\"obs.skippableTimers || []\"\n (skipTimerEvent)=\"onRequestSkipTimer($event)\"\n ></valtimo-process-diagram>\n </div>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"progress.skipTimer.confirmButton\"\n titleTranslationKey=\"progress.skipTimer.confirmTitle\"\n [content]=\"'progress.skipTimer.confirmContent' | translate\"\n [showModalSubject$]=\"showSkipConfirm$\"\n (cancelEvent)=\"onCancelSkipTimer()\"\n (confirmEvent)=\"onConfirmSkipTimer()\"\n ></valtimo-confirmation-modal>\n</ng-container>\n", styles: [".full-height-tab-content{height:calc(100vh - 380px);width:100%}.process-info-row{display:flex;gap:24px}.process-info-text{color:var(--v-color-black);font-size:var(--v-font-size-default)}.process-info-text{display:flex;height:40px;align-items:center}\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: "component", type: i2$1.ProcessDiagramComponent, selector: "valtimo-process-diagram", inputs: ["processDefinitionKey", "processInstanceId", "skippableTimers", "canSkipTimer", "skipTimerLabel", "reloadToken"], outputs: ["importDone", "skipTimerEvent"] }, { kind: "component", type: i2.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "tooltipTranslationKey", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { 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: i4$1.SkeletonText, selector: "cds-skeleton-text, ibm-skeleton-text", inputs: ["lines", "minLineWidth", "maxLineWidth"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
|
|
1321
1400
|
}
|
|
1322
1401
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseDetailTabProgressComponent, decorators: [{
|
|
1323
1402
|
type: Component,
|
|
1324
|
-
args: [{ standalone: false, selector: 'valtimo-case-detail-tab-progress', template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n class=\"full-height-tab-content\"\n *ngIf=\"{\n processInstanceItems: processInstanceItems$ | async,\n selectedProcessInstance: selectedProcessInstance$ | async,\n } as obs\"\n>\n <span *ngIf=\"!obs.processInstanceItems.isLoading && !obs.processInstanceItems.value\">{{\n 'progress.noProcessDocumentInstances' | translate\n }}</span>\n\n <div class=\"process-info-row\">\n <cds-dropdown\n [dropUp]=\"false\"\n [label]=\"'progress.process' | translate\"\n [skeleton]=\"obs.processInstanceItems.isLoading\"\n [style.width.px]=\"350\"\n (selected)=\"loadProcessInstance($event.item.processInstanceId)\"\n >\n <cds-dropdown-list [items]=\"obs.processInstanceItems.value || []\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div>\n <v-input-label [title]=\"'progress.version' | translate\"></v-input-label>\n\n <cds-skeleton-text\n *ngIf=\"obs.selectedProcessInstance.isLoading\"\n [lines]=\"1\"\n [maxLineWidth]=\"30\"\n ></cds-skeleton-text>\n\n <span *ngIf=\"!obs.selectedProcessInstance.isLoading\" class=\"process-info-text\">\n {{ obs.selectedProcessInstance.value.version }} ({{ 'progress.of' | translate }}\n {{ obs.selectedProcessInstance.value.latestVersion }})\n </span>\n </div>\n\n <div>\n <v-input-label [title]=\"'progress.startedBy' | translate\"></v-input-label>\n\n <cds-skeleton-text\n *ngIf=\"obs.selectedProcessInstance.isLoading\"\n [lines]=\"1\"\n [maxLineWidth]=\"50\"\n ></cds-skeleton-text>\n\n <span *ngIf=\"!obs.selectedProcessInstance.isLoading\" class=\"process-info-text\">\n {{ obs.selectedProcessInstance.value.startedBy || ('progress.system' | translate) }}\n </span>\n </div>\n\n <div>\n <v-input-label [title]=\"'progress.startedOn' | translate\"></v-input-label>\n\n <cds-skeleton-text\n *ngIf=\"obs.selectedProcessInstance.isLoading\"\n [lines]=\"1\"\n [maxLineWidth]=\"50\"\n ></cds-skeleton-text>\n\n <span *ngIf=\"!obs.selectedProcessInstance.isLoading\" class=\"process-info-text\">\n {{ obs.selectedProcessInstance.value.startedOn.toLocaleDateString() }}\n </span>\n </div>\n </div>\n\n <div>\n <valtimo-process-diagram\n *ngIf=\"!obs.selectedProcessInstance.isLoading\"\n [processInstanceId]=\"obs.selectedProcessInstance.value.id.processInstanceId\"\n ></valtimo-process-diagram>\n </div>\n</ng-container>\n", styles: [".full-height-tab-content{height:calc(100vh - 380px);width:100%}.process-info-row{display:flex;gap:24px}.process-info-text{color:var(--v-color-black);font-size:var(--v-font-size-default)}.process-info-text{display:flex;height:40px;align-items:center}\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"] }]
|
|
1325
|
-
}], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: i1$2.DocumentService }] });
|
|
1403
|
+
args: [{ standalone: false, selector: 'valtimo-case-detail-tab-progress', template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n class=\"full-height-tab-content\"\n *ngIf=\"{\n processInstanceItems: processInstanceItems$ | async,\n selectedProcessInstance: selectedProcessInstance$ | async,\n canSkipTimer: canSkipTimer$ | async,\n skippableTimers: skippableTimers$ | async,\n diagramReloadToken: diagramReloadToken$ | async,\n } as obs\"\n>\n <span *ngIf=\"!obs.processInstanceItems.isLoading && !obs.processInstanceItems.value\">{{\n 'progress.noProcessDocumentInstances' | translate\n }}</span>\n\n <div class=\"process-info-row\">\n <cds-dropdown\n [dropUp]=\"false\"\n [label]=\"'progress.process' | translate\"\n [skeleton]=\"obs.processInstanceItems.isLoading\"\n [style.width.px]=\"350\"\n (selected)=\"loadProcessInstance($event.item.processInstanceId)\"\n >\n <cds-dropdown-list [items]=\"obs.processInstanceItems.value || []\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div>\n <v-input-label [title]=\"'progress.version' | translate\"></v-input-label>\n\n <cds-skeleton-text\n *ngIf=\"obs.selectedProcessInstance.isLoading\"\n [lines]=\"1\"\n [maxLineWidth]=\"30\"\n ></cds-skeleton-text>\n\n <span *ngIf=\"!obs.selectedProcessInstance.isLoading\" class=\"process-info-text\">\n {{ obs.selectedProcessInstance.value.version }} ({{ 'progress.of' | translate }}\n {{ obs.selectedProcessInstance.value.latestVersion }})\n </span>\n </div>\n\n <div>\n <v-input-label [title]=\"'progress.startedBy' | translate\"></v-input-label>\n\n <cds-skeleton-text\n *ngIf=\"obs.selectedProcessInstance.isLoading\"\n [lines]=\"1\"\n [maxLineWidth]=\"50\"\n ></cds-skeleton-text>\n\n <span *ngIf=\"!obs.selectedProcessInstance.isLoading\" class=\"process-info-text\">\n {{ obs.selectedProcessInstance.value.startedBy || ('progress.system' | translate) }}\n </span>\n </div>\n\n <div>\n <v-input-label [title]=\"'progress.startedOn' | translate\"></v-input-label>\n\n <cds-skeleton-text\n *ngIf=\"obs.selectedProcessInstance.isLoading\"\n [lines]=\"1\"\n [maxLineWidth]=\"50\"\n ></cds-skeleton-text>\n\n <span *ngIf=\"!obs.selectedProcessInstance.isLoading\" class=\"process-info-text\">\n {{ obs.selectedProcessInstance.value.startedOn.toLocaleDateString() }}\n </span>\n </div>\n </div>\n\n <div>\n <valtimo-process-diagram\n *ngIf=\"!obs.selectedProcessInstance.isLoading\"\n [canSkipTimer]=\"obs.canSkipTimer || false\"\n [processInstanceId]=\"obs.selectedProcessInstance.value.id.processInstanceId\"\n [reloadToken]=\"obs.diagramReloadToken || 0\"\n [skipTimerLabel]=\"'progress.skipTimer.action' | translate\"\n [skippableTimers]=\"obs.skippableTimers || []\"\n (skipTimerEvent)=\"onRequestSkipTimer($event)\"\n ></valtimo-process-diagram>\n </div>\n\n <valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"progress.skipTimer.confirmButton\"\n titleTranslationKey=\"progress.skipTimer.confirmTitle\"\n [content]=\"'progress.skipTimer.confirmContent' | translate\"\n [showModalSubject$]=\"showSkipConfirm$\"\n (cancelEvent)=\"onCancelSkipTimer()\"\n (confirmEvent)=\"onConfirmSkipTimer()\"\n ></valtimo-confirmation-modal>\n</ng-container>\n", styles: [".full-height-tab-content{height:calc(100vh - 380px);width:100%}.process-info-row{display:flex;gap:24px}.process-info-text{color:var(--v-color-black);font-size:var(--v-font-size-default)}.process-info-text{display:flex;height:40px;align-items:center}\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"] }]
|
|
1404
|
+
}], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: i1$2.DocumentService }, { type: CaseProcessTimerService }, { type: i1.GlobalNotificationService }, { type: i4.TranslateService }, { type: i0.DestroyRef }] });
|
|
1326
1405
|
|
|
1327
1406
|
/*
|
|
1328
1407
|
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
@@ -3082,6 +3161,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
3082
3161
|
type: Input
|
|
3083
3162
|
}] } });
|
|
3084
3163
|
|
|
3164
|
+
/*
|
|
3165
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
3166
|
+
*
|
|
3167
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3168
|
+
* you may not use this file except in compliance with the License.
|
|
3169
|
+
* You may obtain a copy of the License at
|
|
3170
|
+
*
|
|
3171
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
3172
|
+
*
|
|
3173
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3174
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
3175
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3176
|
+
* See the License for the specific language governing permissions and
|
|
3177
|
+
* limitations under the License.
|
|
3178
|
+
*/
|
|
3179
|
+
class CaseWidgetTextComponent extends WidgetProcess {
|
|
3180
|
+
set documentId(value) {
|
|
3181
|
+
this.baseDocumentId = value;
|
|
3182
|
+
}
|
|
3183
|
+
set widgetConfiguration(value) {
|
|
3184
|
+
if (!value)
|
|
3185
|
+
return;
|
|
3186
|
+
this.widgetConfiguration$.next(value);
|
|
3187
|
+
this.baseWidgetConfiguration = value;
|
|
3188
|
+
}
|
|
3189
|
+
constructor(documentService, permissionService, widgetsService, widgetLayoutService) {
|
|
3190
|
+
super(documentService, permissionService);
|
|
3191
|
+
this.documentService = documentService;
|
|
3192
|
+
this.permissionService = permissionService;
|
|
3193
|
+
this.widgetsService = widgetsService;
|
|
3194
|
+
this.widgetLayoutService = widgetLayoutService;
|
|
3195
|
+
this.widgetConfiguration$ = new BehaviorSubject(null);
|
|
3196
|
+
}
|
|
3197
|
+
/**
|
|
3198
|
+
* The content of a text widget is part of its configuration, so there is no data to fetch.
|
|
3199
|
+
* The layout still has to be told the widget is ready, because it only considers itself loaded
|
|
3200
|
+
* once at least one widget has reported in — a tab containing only text widgets would otherwise
|
|
3201
|
+
* keep showing its loading state.
|
|
3202
|
+
*/
|
|
3203
|
+
ngOnInit() {
|
|
3204
|
+
this.widgetLayoutService.setWidgetDataLoaded(this.widgetUuid);
|
|
3205
|
+
}
|
|
3206
|
+
onProcessStartClick(process) {
|
|
3207
|
+
if (!process.processDefinitionKey)
|
|
3208
|
+
return;
|
|
3209
|
+
this.widgetsService.startProcess(process.processDefinitionKey);
|
|
3210
|
+
}
|
|
3211
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseWidgetTextComponent, deps: [{ token: i1$2.DocumentService }, { token: i2$2.PermissionService }, { token: WidgetsService }, { token: i5$1.WidgetLayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3212
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseWidgetTextComponent, isStandalone: true, selector: "valtimo-case-widget-text", inputs: { documentId: "documentId", widgetConfiguration: "widgetConfiguration", widgetUuid: "widgetUuid" }, usesInheritance: 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<valtimo-widget-text\n *ngIf=\"{widgetConfiguration: widgetConfiguration$ | async} as obs\"\n [widgetConfiguration]=\"obs.widgetConfiguration\"\n>\n @if (\n obs.widgetConfiguration?.actions?.length === 1 &&\n obs.widgetConfiguration.actions[0]?.processDefinitionKey &&\n (canCreateCamundaExecution$ | async)\n ) {\n <button cdsButton=\"ghost\" (click)=\"onProcessStartClick(obs.widgetConfiguration.actions[0])\">\n {{ obs.widgetConfiguration.actions[0].name }}\n </button>\n }\n</valtimo-widget-text>\n", dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: WidgetTextComponent, selector: "valtimo-widget-text", inputs: ["widgetConfiguration"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3213
|
+
}
|
|
3214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseWidgetTextComponent, decorators: [{
|
|
3215
|
+
type: Component,
|
|
3216
|
+
args: [{ selector: 'valtimo-case-widget-text', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ButtonModule, CommonModule, TranslateModule, WidgetTextComponent], 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<valtimo-widget-text\n *ngIf=\"{widgetConfiguration: widgetConfiguration$ | async} as obs\"\n [widgetConfiguration]=\"obs.widgetConfiguration\"\n>\n @if (\n obs.widgetConfiguration?.actions?.length === 1 &&\n obs.widgetConfiguration.actions[0]?.processDefinitionKey &&\n (canCreateCamundaExecution$ | async)\n ) {\n <button cdsButton=\"ghost\" (click)=\"onProcessStartClick(obs.widgetConfiguration.actions[0])\">\n {{ obs.widgetConfiguration.actions[0].name }}\n </button>\n }\n</valtimo-widget-text>\n" }]
|
|
3217
|
+
}], ctorParameters: () => [{ type: i1$2.DocumentService }, { type: i2$2.PermissionService }, { type: WidgetsService }, { type: i5$1.WidgetLayoutService }], propDecorators: { documentId: [{
|
|
3218
|
+
type: Input,
|
|
3219
|
+
args: [{ required: true }]
|
|
3220
|
+
}], widgetConfiguration: [{
|
|
3221
|
+
type: Input
|
|
3222
|
+
}], widgetUuid: [{
|
|
3223
|
+
type: Input
|
|
3224
|
+
}] } });
|
|
3225
|
+
|
|
3085
3226
|
/*
|
|
3086
3227
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
3087
3228
|
*
|
|
@@ -3135,6 +3276,7 @@ class CaseDetailWidgetsComponent {
|
|
|
3135
3276
|
[WidgetType.METROLINE]: CaseWidgetMetrolineComponent,
|
|
3136
3277
|
[WidgetType.HIGHLIGHT]: CaseWidgetHighlightComponent,
|
|
3137
3278
|
[WidgetType.IMAGE]: CaseWidgetImageComponent,
|
|
3279
|
+
[WidgetType.TEXT]: CaseWidgetTextComponent,
|
|
3138
3280
|
};
|
|
3139
3281
|
}
|
|
3140
3282
|
ngOnInit() {
|
|
@@ -4371,6 +4513,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
4371
4513
|
args: [{ providedIn: 'root' }]
|
|
4372
4514
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.ConfigService }] });
|
|
4373
4515
|
|
|
4516
|
+
class CaseProcessTimerService {
|
|
4517
|
+
constructor(http, configService) {
|
|
4518
|
+
this.http = http;
|
|
4519
|
+
this.configService = configService;
|
|
4520
|
+
this._baseUrl = this.configService.config.valtimoApi.endpointUri;
|
|
4521
|
+
}
|
|
4522
|
+
getSkippableTimers(caseId, processInstanceId) {
|
|
4523
|
+
return this.http.get(`${this._baseUrl}v1/process-document/case/${caseId}/process-instance/${processInstanceId}/timers`);
|
|
4524
|
+
}
|
|
4525
|
+
skipTimer(caseId, processInstanceId, jobId) {
|
|
4526
|
+
return this.http.post(`${this._baseUrl}v1/process-document/case/${caseId}/process-instance/${processInstanceId}/timer/${jobId}/skip`, {});
|
|
4527
|
+
}
|
|
4528
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseProcessTimerService, deps: [{ token: i1$1.HttpClient }, { token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4529
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseProcessTimerService, providedIn: 'root' }); }
|
|
4530
|
+
}
|
|
4531
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseProcessTimerService, decorators: [{
|
|
4532
|
+
type: Injectable,
|
|
4533
|
+
args: [{ providedIn: 'root' }]
|
|
4534
|
+
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1.ConfigService }] });
|
|
4535
|
+
|
|
4374
4536
|
/*
|
|
4375
4537
|
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
4376
4538
|
*
|
|
@@ -7763,7 +7925,7 @@ class CaseInspectionProcessDetailComponent {
|
|
|
7763
7925
|
});
|
|
7764
7926
|
}
|
|
7765
7927
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseInspectionProcessDetailComponent, deps: [{ token: CaseInspectionService }, { token: i1.GlobalNotificationService }, { token: i4.TranslateService }, { token: i4$1.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7766
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseInspectionProcessDetailComponent, isStandalone: true, selector: "valtimo-case-inspection-process-detail", inputs: { row: "row", documentId: "documentId", canInspectModify: "canInspectModify" }, outputs: { viewBuildingBlockEvent: "viewBuildingBlockEvent", variablesChangedEvent: "variablesChangedEvent", viewProcessLogsEvent: "viewProcessLogsEvent" }, 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-process-detail\">\n <header class=\"case-inspection-process-detail__header\">\n <h3>\n {{ row.processName || row.processDefinitionKey }}\n <small>{{ 'case.inspection.processes.version' | translate }} {{ row.version }}</small>\n </h3>\n\n <div class=\"case-inspection-process-detail__tags\">\n <cds-tag\n size=\"sm\"\n [type]=\"row.active ? 'blue' : 'cool-gray'\"\n [title]=\"\n row.active\n ? ('case.inspection.processes.active' | translate)\n : ('case.inspection.processes.completed' | translate)\n \"\n >\n {{\n row.active\n ? ('case.inspection.processes.active' | translate)\n : ('case.inspection.processes.completed' | translate)\n }}\n </cds-tag>\n\n @if (row.buildingBlock; as bb) {\n <cds-tag\n size=\"sm\"\n type=\"green\"\n [title]=\"'case.inspection.processes.buildingBlockTagTooltip' | translate\"\n >\n {{ 'case.inspection.processes.buildingBlockTag' | translate }}: {{ bb.definitionKey }}\n {{ bb.definitionVersionTag }}\n </cds-tag>\n }\n\n <button cdsButton=\"ghost\" size=\"sm\" type=\"button\" (click)=\"onViewProcessLogs()\">\n {{ 'case.inspection.processes.viewLogs' | translate }}\n </button>\n </div>\n\n <cds-structured-list class=\"case-inspection-process-detail__meta\" [condensed]=\"true\">\n <cds-list-row>\n <cds-list-column>{{ 'case.inspection.processes.instanceId' | translate }}</cds-list-column>\n <cds-list-column\n ><code>{{ row.processInstanceId }}</code></cds-list-column\n >\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column>{{ 'case.inspection.processes.startedBy' | translate }}</cds-list-column>\n <cds-list-column>{{ row.startedBy || row.startedByUserId || '\u2014' }}</cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column>{{ 'case.inspection.processes.startedOn' | translate }}</cds-list-column>\n <cds-list-column>{{ row.startedOn | date: 'medium' }}</cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"row.buildingBlock as bb\">\n <cds-list-column>{{\n 'case.inspection.processes.buildingBlock' | translate\n }}</cds-list-column>\n <cds-list-column>\n <a\n cdsLink\n href=\"javascript:void(0)\"\n (click)=\"onViewBuildingBlock(bb); $event.preventDefault()\"\n >\n {{ bb.definitionKey }} {{ bb.definitionVersionTag }}\n <span aria-hidden=\"true\">\u2192</span>\n </a>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </header>\n\n <cds-tabs type=\"inline\">\n <cds-tab\n [active]=\"$activeTab() === ProcessDetailTab.DETAILS\"\n [heading]=\"'case.inspection.processes.detailsTab' | translate\"\n (selected)=\"onSelectTab(ProcessDetailTab.DETAILS)\"\n >\n <div class=\"case-inspection-process-detail__pane\">\n @if (row.incidents.length > 0) {\n <h4 class=\"case-inspection-process-detail__subhead\">\n {{ 'case.inspection.processes.incidentsHeader' | translate }}\n </h4>\n\n <cds-structured-list>\n <cds-list-header>\n @for (column of incidentColumns; track column) {\n <cds-list-column>{{ column | translate }}</cds-list-column>\n }\n </cds-list-header>\n\n @for (incident of row.incidents; track incident.id) {\n <cds-list-row>\n <cds-list-column>{{ incident.incidentType }}</cds-list-column>\n <cds-list-column>{{ incident.activityId || '\u2014' }}</cds-list-column>\n <cds-list-column>{{ incident.incidentMessage || '\u2014' }}</cds-list-column>\n <cds-list-column>{{ incident.incidentTimestamp | date: 'medium' }}</cds-list-column>\n </cds-list-row>\n }\n </cds-structured-list>\n }\n\n <h4\n class=\"case-inspection-process-detail__subhead case-inspection-process-detail__subhead--no-margin\"\n >\n {{ 'case.inspection.processes.tasksHeader' | translate }}\n </h4>\n\n @if (row.tasks.length > 0) {\n <cds-structured-list>\n <cds-list-header>\n @for (column of taskColumns; track column) {\n <cds-list-column>{{ column | translate }}</cds-list-column>\n }\n </cds-list-header>\n\n @for (task of row.tasks; track task.id) {\n <cds-list-row>\n <cds-list-column>{{ task.name }}</cds-list-column>\n <cds-list-column>{{ task.assignee || '\u2014' }}</cds-list-column>\n <cds-list-column>{{ task.created | date: 'medium' }}</cds-list-column>\n </cds-list-row>\n }\n </cds-structured-list>\n } @else {\n <p class=\"case-inspection-process-detail__empty\">\n {{ 'case.inspection.processes.noTasks' | translate }}\n </p>\n }\n\n <div class=\"case-inspection-process-detail__subhead-row\">\n <h4 class=\"case-inspection-process-detail__subhead\">\n {{ 'case.inspection.processes.variablesHeader' | translate }}\n </h4>\n <button\n *ngIf=\"$canMutate()\"\n cdsButton=\"ghost\"\n size=\"sm\"\n type=\"button\"\n (click)=\"onAddVariable()\"\n >\n {{ 'case.inspection.processes.variableActions.add' | translate }}\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n\n @if (row.variables.length > 0) {\n <cds-structured-list>\n <cds-list-header>\n @for (column of variableColumns; track column) {\n <cds-list-column>{{ column | translate }}</cds-list-column>\n }\n @if ($canMutate()) {\n <cds-list-column></cds-list-column>\n }\n </cds-list-header>\n\n @for (variable of row.variables; track variable.name) {\n <cds-list-row>\n <cds-list-column>\n <code>{{ variable.name }}</code>\n </cds-list-column>\n <cds-list-column>{{ variable.type }}</cds-list-column>\n <cds-list-column>\n <code class=\"case-inspection-process-detail__variable-value\">{{\n formatVariableValue(variable)\n }}</code>\n </cds-list-column>\n @if ($canMutate()) {\n <cds-list-column>\n <div class=\"case-inspection-process-detail__variable-actions\">\n <button\n cdsButton=\"ghost\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [title]=\"'case.inspection.processes.variableActions.edit' | translate\"\n (click)=\"onEditVariable(variable)\"\n >\n <svg cdsIcon=\"edit\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"danger--ghost\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [title]=\"'case.inspection.processes.variableActions.delete' | translate\"\n (click)=\"onRequestDelete(variable)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n </cds-list-column>\n }\n </cds-list-row>\n }\n </cds-structured-list>\n } @else {\n <p class=\"case-inspection-process-detail__empty\">\n {{ 'case.inspection.processes.noVariables' | translate }}\n </p>\n }\n\n <h4 class=\"case-inspection-process-detail__subhead\">\n {{ 'case.inspection.processes.jobsHeader' | translate }}\n </h4>\n\n @if (row.jobs.length > 0) {\n <cds-structured-list>\n <cds-list-header>\n @for (column of jobColumns; track column) {\n <cds-list-column>{{ column | translate }}</cds-list-column>\n }\n </cds-list-header>\n\n @for (job of row.jobs; track job.id) {\n <cds-list-row>\n <cds-list-column>\n {{ 'case.inspection.processes.jobTypeLabel.' + job.jobType | translate }}\n </cds-list-column>\n <cds-list-column>\n @if (job.activityId) {\n <code>{{ job.activityId }}</code>\n } @else {\n \u2014\n }\n </cds-list-column>\n <cds-list-column>{{ job.retries }}</cds-list-column>\n <cds-list-column>{{ job.dueDate | date: 'medium' }}</cds-list-column>\n <cds-list-column>{{ job.exceptionMessage || '\u2014' }}</cds-list-column>\n </cds-list-row>\n }\n </cds-structured-list>\n } @else {\n <p class=\"case-inspection-process-detail__empty\">\n {{ 'case.inspection.processes.noJobs' | translate }}\n </p>\n }\n </div>\n </cds-tab>\n\n <cds-tab\n [active]=\"$activeTab() === ProcessDetailTab.DIAGRAM\"\n [heading]=\"'case.inspection.processes.diagramTab' | translate\"\n (selected)=\"onSelectTab(ProcessDetailTab.DIAGRAM)\"\n >\n <div class=\"case-inspection-process-detail__pane case-inspection-process-detail__diagram\">\n @if ($activeTab() === ProcessDetailTab.DIAGRAM) {\n <valtimo-process-diagram\n [processInstanceId]=\"row.processInstanceId\"\n ></valtimo-process-diagram>\n }\n </div>\n </cds-tab>\n </cds-tabs>\n</section>\n\n<valtimo-case-inspection-process-variable-modal\n [open]=\"$modalOpen()\"\n [mode]=\"$modalMode()\"\n [initialVariable]=\"$modalInitial()\"\n (modalClosed)=\"onModalClosed($event)\"\n></valtimo-case-inspection-process-variable-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.inspection.processes.variableActions.delete\"\n confirmButtonType=\"danger\"\n titleTranslationKey=\"case.inspection.processes.variableActions.deleteConfirmTitle\"\n [content]=\"\n 'case.inspection.processes.variableActions.deleteConfirmContent'\n | translate: {name: (pendingDeleteName$ | async) ?? ''}\n \"\n [showModalSubject$]=\"showConfirmDelete$\"\n (cancelEvent)=\"onCancelDelete()\"\n (confirmEvent)=\"onConfirmDelete()\"\n></valtimo-confirmation-modal>\n", styles: [".case-inspection-process-detail{padding-top:var(--cds-spacing-05);padding-bottom:var(--cds-spacing-05);padding-right:var(--cds-spacing-05)}.case-inspection-process-detail__header{margin-bottom:var(--cds-spacing-05)}.case-inspection-process-detail__header h3{margin:0}.case-inspection-process-detail__header h3 small{font-weight:400;color:var(--cds-text-helper);margin-left:var(--cds-spacing-03);font-size:var(--cds-body-compact-01-font-size)}.case-inspection-process-detail__tags{display:flex;gap:var(--cds-spacing-03);flex-wrap:wrap;margin-top:var(--cds-spacing-03);margin-bottom:var(--cds-spacing-03)}.case-inspection-process-detail__meta code{word-break:break-all}.case-inspection-process-detail__subhead{margin:var(--cds-spacing-06) 0 var(--cds-spacing-03);font-size:var(--cds-body-compact-01-font-size);font-weight:600;color:var(--cds-text-secondary)}.case-inspection-process-detail__subhead--no-margin{margin-top:0}.case-inspection-process-detail__variable-actions{display:flex;flex-shrink:0;gap:8px}.case-inspection-process-detail__empty{color:var(--cds-text-helper)}.case-inspection-process-detail__variable-value{overflow-wrap:anywhere;white-space:pre-wrap;max-height:96px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:4;line-clamp:4;-webkit-box-orient:vertical}.case-inspection-process-detail__pane{padding-top:var(--cds-spacing-05)}.case-inspection-process-detail__diagram{margin-top:16px;height:480px;border:1px solid var(--cds-border-subtle);overflow:hidden}.case-inspection-process-detail__diagram ::ng-deep valtimo-process-diagram,.case-inspection-process-detail__diagram ::ng-deep .process-diagram-container{display:flex;flex-direction:column;height:100%}.case-inspection-process-detail__diagram ::ng-deep .diagram-container{flex:1 1 auto;min-height:0;height:auto!important}.case-inspection-process-detail__diagram ::ng-deep .legenda-holder{flex-shrink:0;padding:var(--cds-spacing-03) var(--cds-spacing-05)}\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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i4$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: LinkModule }, { kind: "directive", type: i4$1.Link, selector: "[cdsLink], [ibmLink]", inputs: ["inline", "disabled"] }, { kind: "ngmodule", type: StructuredListModule }, { kind: "component", type: i4$1.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i4$1.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i4$1.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i4$1.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "ngmodule", type: TabsModule }, { 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: "ngmodule", type: TagModule }, { kind: "component", type: i4$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "component", type: ProcessDiagramComponent, selector: "valtimo-process-diagram", inputs: ["processDefinitionKey", "processInstanceId"], outputs: ["importDone"] }, { kind: "component", type: CaseInspectionProcessVariableModalComponent, selector: "valtimo-case-inspection-process-variable-modal", inputs: ["open", "mode", "initialVariable"], outputs: ["modalClosed"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { 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: "ngmodule", type: LayerModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7928
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseInspectionProcessDetailComponent, isStandalone: true, selector: "valtimo-case-inspection-process-detail", inputs: { row: "row", documentId: "documentId", canInspectModify: "canInspectModify" }, outputs: { viewBuildingBlockEvent: "viewBuildingBlockEvent", variablesChangedEvent: "variablesChangedEvent", viewProcessLogsEvent: "viewProcessLogsEvent" }, 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-process-detail\">\n <header class=\"case-inspection-process-detail__header\">\n <h3>\n {{ row.processName || row.processDefinitionKey }}\n <small>{{ 'case.inspection.processes.version' | translate }} {{ row.version }}</small>\n </h3>\n\n <div class=\"case-inspection-process-detail__tags\">\n <cds-tag\n size=\"sm\"\n [type]=\"row.active ? 'blue' : 'cool-gray'\"\n [title]=\"\n row.active\n ? ('case.inspection.processes.active' | translate)\n : ('case.inspection.processes.completed' | translate)\n \"\n >\n {{\n row.active\n ? ('case.inspection.processes.active' | translate)\n : ('case.inspection.processes.completed' | translate)\n }}\n </cds-tag>\n\n @if (row.buildingBlock; as bb) {\n <cds-tag\n size=\"sm\"\n type=\"green\"\n [title]=\"'case.inspection.processes.buildingBlockTagTooltip' | translate\"\n >\n {{ 'case.inspection.processes.buildingBlockTag' | translate }}: {{ bb.definitionKey }}\n {{ bb.definitionVersionTag }}\n </cds-tag>\n }\n\n <button cdsButton=\"ghost\" size=\"sm\" type=\"button\" (click)=\"onViewProcessLogs()\">\n {{ 'case.inspection.processes.viewLogs' | translate }}\n </button>\n </div>\n\n <cds-structured-list class=\"case-inspection-process-detail__meta\" [condensed]=\"true\">\n <cds-list-row>\n <cds-list-column>{{ 'case.inspection.processes.instanceId' | translate }}</cds-list-column>\n <cds-list-column\n ><code>{{ row.processInstanceId }}</code></cds-list-column\n >\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column>{{ 'case.inspection.processes.startedBy' | translate }}</cds-list-column>\n <cds-list-column>{{ row.startedBy || row.startedByUserId || '\u2014' }}</cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column>{{ 'case.inspection.processes.startedOn' | translate }}</cds-list-column>\n <cds-list-column>{{ row.startedOn | date: 'medium' }}</cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"row.buildingBlock as bb\">\n <cds-list-column>{{\n 'case.inspection.processes.buildingBlock' | translate\n }}</cds-list-column>\n <cds-list-column>\n <a\n cdsLink\n href=\"javascript:void(0)\"\n (click)=\"onViewBuildingBlock(bb); $event.preventDefault()\"\n >\n {{ bb.definitionKey }} {{ bb.definitionVersionTag }}\n <span aria-hidden=\"true\">\u2192</span>\n </a>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </header>\n\n <cds-tabs type=\"inline\">\n <cds-tab\n [active]=\"$activeTab() === ProcessDetailTab.DETAILS\"\n [heading]=\"'case.inspection.processes.detailsTab' | translate\"\n (selected)=\"onSelectTab(ProcessDetailTab.DETAILS)\"\n >\n <div class=\"case-inspection-process-detail__pane\">\n @if (row.incidents.length > 0) {\n <h4 class=\"case-inspection-process-detail__subhead\">\n {{ 'case.inspection.processes.incidentsHeader' | translate }}\n </h4>\n\n <cds-structured-list>\n <cds-list-header>\n @for (column of incidentColumns; track column) {\n <cds-list-column>{{ column | translate }}</cds-list-column>\n }\n </cds-list-header>\n\n @for (incident of row.incidents; track incident.id) {\n <cds-list-row>\n <cds-list-column>{{ incident.incidentType }}</cds-list-column>\n <cds-list-column>{{ incident.activityId || '\u2014' }}</cds-list-column>\n <cds-list-column>{{ incident.incidentMessage || '\u2014' }}</cds-list-column>\n <cds-list-column>{{ incident.incidentTimestamp | date: 'medium' }}</cds-list-column>\n </cds-list-row>\n }\n </cds-structured-list>\n }\n\n <h4\n class=\"case-inspection-process-detail__subhead case-inspection-process-detail__subhead--no-margin\"\n >\n {{ 'case.inspection.processes.tasksHeader' | translate }}\n </h4>\n\n @if (row.tasks.length > 0) {\n <cds-structured-list>\n <cds-list-header>\n @for (column of taskColumns; track column) {\n <cds-list-column>{{ column | translate }}</cds-list-column>\n }\n </cds-list-header>\n\n @for (task of row.tasks; track task.id) {\n <cds-list-row>\n <cds-list-column>{{ task.name }}</cds-list-column>\n <cds-list-column>{{ task.assignee || '\u2014' }}</cds-list-column>\n <cds-list-column>{{ task.created | date: 'medium' }}</cds-list-column>\n </cds-list-row>\n }\n </cds-structured-list>\n } @else {\n <p class=\"case-inspection-process-detail__empty\">\n {{ 'case.inspection.processes.noTasks' | translate }}\n </p>\n }\n\n <div class=\"case-inspection-process-detail__subhead-row\">\n <h4 class=\"case-inspection-process-detail__subhead\">\n {{ 'case.inspection.processes.variablesHeader' | translate }}\n </h4>\n <button\n *ngIf=\"$canMutate()\"\n cdsButton=\"ghost\"\n size=\"sm\"\n type=\"button\"\n (click)=\"onAddVariable()\"\n >\n {{ 'case.inspection.processes.variableActions.add' | translate }}\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n\n @if (row.variables.length > 0) {\n <cds-structured-list>\n <cds-list-header>\n @for (column of variableColumns; track column) {\n <cds-list-column>{{ column | translate }}</cds-list-column>\n }\n @if ($canMutate()) {\n <cds-list-column></cds-list-column>\n }\n </cds-list-header>\n\n @for (variable of row.variables; track variable.name) {\n <cds-list-row>\n <cds-list-column>\n <code>{{ variable.name }}</code>\n </cds-list-column>\n <cds-list-column>{{ variable.type }}</cds-list-column>\n <cds-list-column>\n <code class=\"case-inspection-process-detail__variable-value\">{{\n formatVariableValue(variable)\n }}</code>\n </cds-list-column>\n @if ($canMutate()) {\n <cds-list-column>\n <div class=\"case-inspection-process-detail__variable-actions\">\n <button\n cdsButton=\"ghost\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [title]=\"'case.inspection.processes.variableActions.edit' | translate\"\n (click)=\"onEditVariable(variable)\"\n >\n <svg cdsIcon=\"edit\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"danger--ghost\"\n size=\"sm\"\n type=\"button\"\n [iconOnly]=\"true\"\n [title]=\"'case.inspection.processes.variableActions.delete' | translate\"\n (click)=\"onRequestDelete(variable)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n </cds-list-column>\n }\n </cds-list-row>\n }\n </cds-structured-list>\n } @else {\n <p class=\"case-inspection-process-detail__empty\">\n {{ 'case.inspection.processes.noVariables' | translate }}\n </p>\n }\n\n <h4 class=\"case-inspection-process-detail__subhead\">\n {{ 'case.inspection.processes.jobsHeader' | translate }}\n </h4>\n\n @if (row.jobs.length > 0) {\n <cds-structured-list>\n <cds-list-header>\n @for (column of jobColumns; track column) {\n <cds-list-column>{{ column | translate }}</cds-list-column>\n }\n </cds-list-header>\n\n @for (job of row.jobs; track job.id) {\n <cds-list-row>\n <cds-list-column>\n {{ 'case.inspection.processes.jobTypeLabel.' + job.jobType | translate }}\n </cds-list-column>\n <cds-list-column>\n @if (job.activityId) {\n <code>{{ job.activityId }}</code>\n } @else {\n \u2014\n }\n </cds-list-column>\n <cds-list-column>{{ job.retries }}</cds-list-column>\n <cds-list-column>{{ job.dueDate | date: 'medium' }}</cds-list-column>\n <cds-list-column>{{ job.exceptionMessage || '\u2014' }}</cds-list-column>\n </cds-list-row>\n }\n </cds-structured-list>\n } @else {\n <p class=\"case-inspection-process-detail__empty\">\n {{ 'case.inspection.processes.noJobs' | translate }}\n </p>\n }\n </div>\n </cds-tab>\n\n <cds-tab\n [active]=\"$activeTab() === ProcessDetailTab.DIAGRAM\"\n [heading]=\"'case.inspection.processes.diagramTab' | translate\"\n (selected)=\"onSelectTab(ProcessDetailTab.DIAGRAM)\"\n >\n <div class=\"case-inspection-process-detail__pane case-inspection-process-detail__diagram\">\n @if ($activeTab() === ProcessDetailTab.DIAGRAM) {\n <valtimo-process-diagram\n [processInstanceId]=\"row.processInstanceId\"\n ></valtimo-process-diagram>\n }\n </div>\n </cds-tab>\n </cds-tabs>\n</section>\n\n<valtimo-case-inspection-process-variable-modal\n [open]=\"$modalOpen()\"\n [mode]=\"$modalMode()\"\n [initialVariable]=\"$modalInitial()\"\n (modalClosed)=\"onModalClosed($event)\"\n></valtimo-case-inspection-process-variable-modal>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"case.inspection.processes.variableActions.delete\"\n confirmButtonType=\"danger\"\n titleTranslationKey=\"case.inspection.processes.variableActions.deleteConfirmTitle\"\n [content]=\"\n 'case.inspection.processes.variableActions.deleteConfirmContent'\n | translate: {name: (pendingDeleteName$ | async) ?? ''}\n \"\n [showModalSubject$]=\"showConfirmDelete$\"\n (cancelEvent)=\"onCancelDelete()\"\n (confirmEvent)=\"onConfirmDelete()\"\n></valtimo-confirmation-modal>\n", styles: [".case-inspection-process-detail{padding-top:var(--cds-spacing-05);padding-bottom:var(--cds-spacing-05);padding-right:var(--cds-spacing-05)}.case-inspection-process-detail__header{margin-bottom:var(--cds-spacing-05)}.case-inspection-process-detail__header h3{margin:0}.case-inspection-process-detail__header h3 small{font-weight:400;color:var(--cds-text-helper);margin-left:var(--cds-spacing-03);font-size:var(--cds-body-compact-01-font-size)}.case-inspection-process-detail__tags{display:flex;gap:var(--cds-spacing-03);flex-wrap:wrap;margin-top:var(--cds-spacing-03);margin-bottom:var(--cds-spacing-03)}.case-inspection-process-detail__meta code{word-break:break-all}.case-inspection-process-detail__subhead{margin:var(--cds-spacing-06) 0 var(--cds-spacing-03);font-size:var(--cds-body-compact-01-font-size);font-weight:600;color:var(--cds-text-secondary)}.case-inspection-process-detail__subhead--no-margin{margin-top:0}.case-inspection-process-detail__variable-actions{display:flex;flex-shrink:0;gap:8px}.case-inspection-process-detail__empty{color:var(--cds-text-helper)}.case-inspection-process-detail__variable-value{overflow-wrap:anywhere;white-space:pre-wrap;max-height:96px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:4;line-clamp:4;-webkit-box-orient:vertical}.case-inspection-process-detail__pane{padding-top:var(--cds-spacing-05)}.case-inspection-process-detail__diagram{margin-top:16px;height:480px;border:1px solid var(--cds-border-subtle);overflow:hidden}.case-inspection-process-detail__diagram ::ng-deep valtimo-process-diagram,.case-inspection-process-detail__diagram ::ng-deep .process-diagram-container{display:flex;flex-direction:column;height:100%}.case-inspection-process-detail__diagram ::ng-deep .diagram-container{flex:1 1 auto;min-height:0;height:auto!important}.case-inspection-process-detail__diagram ::ng-deep .legenda-holder{flex-shrink:0;padding:var(--cds-spacing-03) var(--cds-spacing-05)}\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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4$1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i4$1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: LinkModule }, { kind: "directive", type: i4$1.Link, selector: "[cdsLink], [ibmLink]", inputs: ["inline", "disabled"] }, { kind: "ngmodule", type: StructuredListModule }, { kind: "component", type: i4$1.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i4$1.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i4$1.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i4$1.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "ngmodule", type: TabsModule }, { 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: "ngmodule", type: TagModule }, { kind: "component", type: i4$1.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "component", type: ProcessDiagramComponent, selector: "valtimo-process-diagram", inputs: ["processDefinitionKey", "processInstanceId", "skippableTimers", "canSkipTimer", "skipTimerLabel", "reloadToken"], outputs: ["importDone", "skipTimerEvent"] }, { kind: "component", type: CaseInspectionProcessVariableModalComponent, selector: "valtimo-case-inspection-process-variable-modal", inputs: ["open", "mode", "initialVariable"], outputs: ["modalClosed"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { 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: "ngmodule", type: LayerModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7767
7929
|
}
|
|
7768
7930
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseInspectionProcessDetailComponent, decorators: [{
|
|
7769
7931
|
type: Component,
|
|
@@ -8898,5 +9060,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
8898
9060
|
* Generated bundle index. Do not edit.
|
|
8899
9061
|
*/
|
|
8900
9062
|
|
|
8901
|
-
export { ApiTabType, CASE_DETAIL_DEFAULT_DISPLAY_SIZE, CASE_DETAIL_DEFAULT_DISPLAY_TYPE, CASE_DETAIL_GUTTER_SIZE, CASE_DETAIL_LEFT_PANEL_MIN_WIDTH, CASE_DETAIL_RIGHT_PANEL_MIN_WIDTHS, CASE_DETAIL_START_PROCESS_DROPDOWN_WIDTH, CASE_DETAIL_TASK_LIST_WIDTH, CASE_INSPECTION_LOG_LEVEL_TAG, CASE_LIST_NO_RESULTS_MESSAGE, CASE_LIST_TABLE_TRANSLATIONS, CASE_TAB_TOKEN, CASE_WITHOUT_STATUS_STATUS, CaseBulkAssignModalComponent, CaseBulkAssignService, CaseColumnService, CaseDetailComponent, CaseDetailLayoutService, CaseDetailTabAuditComponent, CaseDetailTabDocumentsComponent, CaseDetailTabNotesComponent, CaseDetailTabProgressComponent, CaseDetailTabSummaryComponent, CaseExportService, CaseHeaderWidgetApiService, CaseInspectionLogLevel, CaseInspectionService, CaseInspectionTab, CaseListActionsComponent, CaseListAssigneeService, CaseListCaseTagService, CaseListComponent, CaseListHiddenColumnsService, CaseListOrchestrationService, CaseListPaginationService, CaseListQuickSearchService, CaseListSearchService, CaseListService, CaseListStatusService, CaseMenuService, CaseModule, CaseParameterService, CaseProcessStartModalComponent, CaseService, CaseSupportingProcessStartModalComponent, CaseTabApiService, CaseTabService, CaseWidgetsApiService, DEFAULT_CASE_LIST_TABS, DEFAULT_TABS, DEFAULT_TAB_COMPONENTS, DefaultTabs, ProcessDetailTab, StartModalService, TAB_MAP, TabImpl, TabLoaderImpl, WIDGET_HEIGHT_1X, WIDGET_WIDTH_1X, ZGW_CASE_INSPECTION_TAB_TOKEN };
|
|
9063
|
+
export { ApiTabType, CASE_DETAIL_DEFAULT_DISPLAY_SIZE, CASE_DETAIL_DEFAULT_DISPLAY_TYPE, CASE_DETAIL_GUTTER_SIZE, CASE_DETAIL_LEFT_PANEL_MIN_WIDTH, CASE_DETAIL_RIGHT_PANEL_MIN_WIDTHS, CASE_DETAIL_START_PROCESS_DROPDOWN_WIDTH, CASE_DETAIL_TASK_LIST_WIDTH, CASE_INSPECTION_LOG_LEVEL_TAG, CASE_LIST_NO_RESULTS_MESSAGE, CASE_LIST_TABLE_TRANSLATIONS, CASE_TAB_TOKEN, CASE_WITHOUT_STATUS_STATUS, CaseBulkAssignModalComponent, CaseBulkAssignService, CaseColumnService, CaseDetailComponent, CaseDetailLayoutService, CaseDetailTabAuditComponent, CaseDetailTabDocumentsComponent, CaseDetailTabNotesComponent, CaseDetailTabProgressComponent, CaseDetailTabSummaryComponent, CaseExportService, CaseHeaderWidgetApiService, CaseInspectionLogLevel, CaseInspectionService, CaseInspectionTab, CaseListActionsComponent, CaseListAssigneeService, CaseListCaseTagService, CaseListComponent, CaseListHiddenColumnsService, CaseListOrchestrationService, CaseListPaginationService, CaseListQuickSearchService, CaseListSearchService, CaseListService, CaseListStatusService, CaseMenuService, CaseModule, CaseParameterService, CaseProcessStartModalComponent, CaseProcessTimerService, CaseService, CaseSupportingProcessStartModalComponent, CaseTabApiService, CaseTabService, CaseWidgetsApiService, DEFAULT_CASE_LIST_TABS, DEFAULT_TABS, DEFAULT_TAB_COMPONENTS, DefaultTabs, ProcessDetailTab, StartModalService, TAB_MAP, TabImpl, TabLoaderImpl, WIDGET_HEIGHT_1X, WIDGET_WIDTH_1X, ZGW_CASE_INSPECTION_TAB_TOKEN };
|
|
8902
9064
|
//# sourceMappingURL=valtimo-case.mjs.map
|