From 93fc7c166c2516480fc77ea9927bc8b52cbea34a Mon Sep 17 00:00:00 2001 From: Robert Duda Date: Wed, 18 Feb 2026 11:50:14 +0100 Subject: [PATCH] AAE-41605 Add ability to filter by linked processes (#11664) --- .../models/process-filter-cloud.model.ts | 2 + .../process-list-cloud.component.spec.ts | 29 +++++++++++++ .../process-list-cloud.component.ts | 5 +++ .../process-cloud-query-request.model.ts | 2 + .../process-list-cloud.service.spec.ts | 42 +++++++++++++++++++ .../services/process-list-cloud.service.ts | 1 + 6 files changed, 81 insertions(+) diff --git a/lib/process-services-cloud/src/lib/process/process-filters/models/process-filter-cloud.model.ts b/lib/process-services-cloud/src/lib/process/process-filters/models/process-filter-cloud.model.ts index ccf2031ce7..ec20fede24 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/models/process-filter-cloud.model.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/models/process-filter-cloud.model.ts @@ -49,6 +49,7 @@ export class ProcessFilterCloudModel { suspendedDateType: DateCloudFilterType | null; includeSubprocesses: boolean | null; includeUnlinkedProcesses: boolean | null; + includeLinkedProcesses: boolean | null; completedDate: Date | null; environmentId: string | null; showCounter: boolean; @@ -116,6 +117,7 @@ export class ProcessFilterCloudModel { this._suspendedTo = obj._suspendedTo || null; this.includeSubprocesses = obj.includeSubprocesses || null; this.includeUnlinkedProcesses = obj.includeUnlinkedProcesses || null; + this.includeLinkedProcesses = obj.includeLinkedProcesses || null; this.initArrayProperties(obj); } diff --git a/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.spec.ts index aeb1cccf8c..27a1918442 100644 --- a/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.spec.ts @@ -735,6 +735,35 @@ describe('ProcessListCloudComponent', () => { }); }); + describe('includeLinkedProcesses', () => { + it('should set includeLinkedProcesses to true in request node when input is true', () => { + spyOn(processListCloudService, 'fetchProcessList').and.returnValue(of(fakeProcessCloudList)); + component.includeLinkedProcesses = true; + component.ngAfterContentInit(); + component.reload(); + + expect(component.processListRequestNode.includeLinkedProcesses).toBeTrue(); + }); + + it('should set includeLinkedProcesses to false in request node when input is false', () => { + spyOn(processListCloudService, 'fetchProcessList').and.returnValue(of(fakeProcessCloudList)); + component.includeLinkedProcesses = false; + component.ngAfterContentInit(); + component.reload(); + + expect(component.processListRequestNode.includeLinkedProcesses).toBeFalse(); + }); + + it('should omit includeLinkedProcesses in request node when input is null', () => { + spyOn(processListCloudService, 'fetchProcessList').and.returnValue(of(fakeProcessCloudList)); + component.includeLinkedProcesses = null; + component.ngAfterContentInit(); + component.reload(); + + expect(component.processListRequestNode.includeLinkedProcesses).toBeNull(); + }); + }); + describe('processRelatedTo', () => { it('should include processRelatedTo in request node when values are provided', () => { spyOn(processListCloudService, 'fetchProcessList').and.returnValue(of(fakeProcessCloudList)); diff --git a/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.ts b/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.ts index 2ef755b369..5a86553067 100644 --- a/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/process/process-list/components/process-list-cloud.component.ts @@ -310,6 +310,10 @@ export class ProcessListCloudComponent @Input() includeUnlinkedProcesses: boolean | null = null; + /** Include linked processes in the process list. */ + @Input() + includeLinkedProcesses: boolean | null = null; + /** Emitted when a row in the process list is clicked. */ @Output() rowClick: EventEmitter = new EventEmitter(); @@ -655,6 +659,7 @@ export class ProcessListCloudComponent suspendedTo: this.suspendedTo, includeSubprocesses: this.includeSubprocesses, includeUnlinkedProcesses: this.includeUnlinkedProcesses, + includeLinkedProcesses: this.includeLinkedProcesses, processVariableKeys: this.getVariableDefinitionsRequestModel(), processVariableFilters: this.processVariables, processRelatedTo: this.processRelatedTo() diff --git a/lib/process-services-cloud/src/lib/process/process-list/models/process-cloud-query-request.model.ts b/lib/process-services-cloud/src/lib/process/process-list/models/process-cloud-query-request.model.ts index d7e2e8f575..a3ad457fbf 100644 --- a/lib/process-services-cloud/src/lib/process/process-list/models/process-cloud-query-request.model.ts +++ b/lib/process-services-cloud/src/lib/process/process-list/models/process-cloud-query-request.model.ts @@ -104,6 +104,7 @@ export class ProcessListRequestModel { suspendedTo?: string; includeSubprocesses?: boolean; includeUnlinkedProcesses?: boolean; + includeLinkedProcesses?: boolean; processRelatedTo?: string[]; processVariableFilters?: ProcessVariableFilterModel[]; @@ -135,6 +136,7 @@ export class ProcessListRequestModel { this.suspendedTo = obj.suspendedTo; this.includeSubprocesses = obj.includeSubprocesses; this.includeUnlinkedProcesses = obj.includeUnlinkedProcesses; + this.includeLinkedProcesses = obj.includeLinkedProcesses; this.processVariableKeys = obj.processVariableKeys; this.processVariableFilters = obj.processVariableFilters; diff --git a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.spec.ts b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.spec.ts index 81777adbd9..ade57cf4f9 100644 --- a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.spec.ts @@ -258,6 +258,48 @@ describe('ProcessListCloudService', () => { expect(requestBodyParams.includeUnlinkedProcesses).toBeUndefined(); }); }); + + describe('includeLinkedProcesses', () => { + it('should include includeLinkedProcesses=true in body', async () => { + const processRequest = { + appName: 'fakeName', + pagination: { skipCount: 0, maxItems: 20 }, + includeLinkedProcesses: true + } as ProcessListRequestModel; + requestSpy.and.callFake(returnCallBody); + + const requestBodyParams = await firstValueFrom(service.fetchProcessList(processRequest)); + + expect(requestBodyParams).toEqual({ includeLinkedProcesses: true }); + }); + + it('should include includeLinkedProcesses=false in body', async () => { + const processRequest = { + appName: 'fakeName', + pagination: { skipCount: 0, maxItems: 20 }, + includeLinkedProcesses: false + } as ProcessListRequestModel; + requestSpy.and.callFake(returnCallBody); + + const requestBodyParams = await firstValueFrom(service.fetchProcessList(processRequest)); + + expect(requestBodyParams).toEqual({ includeLinkedProcesses: false }); + }); + + it('should omit includeLinkedProcesses when null', async () => { + const processRequest = { + appName: 'fakeName', + pagination: { skipCount: 0, maxItems: 20 }, + includeLinkedProcesses: null + } as unknown as ProcessListRequestModel; + requestSpy.and.callFake(returnCallBody); + + const requestBodyParams = await firstValueFrom(service.fetchProcessList(processRequest)); + + expect(requestBodyParams).toEqual({}); + expect(requestBodyParams.includeLinkedProcesses).toBeUndefined(); + }); + }); }); describe('getAdminProcessRequest', () => { diff --git a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts index 35e3f58481..85437f546a 100644 --- a/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts +++ b/lib/process-services-cloud/src/lib/process/process-list/services/process-list-cloud.service.ts @@ -121,6 +121,7 @@ export class ProcessListCloudService extends BaseCloudService { processVariableFilters: requestNode.processVariableFilters, includeSubprocesses: requestNode.includeSubprocesses, includeUnlinkedProcesses: requestNode.includeUnlinkedProcesses, + includeLinkedProcesses: requestNode.includeLinkedProcesses, processRelatedTo: requestNode.processRelatedTo };