From 1f163d58ec8770ba43c0ee782b5796dc20213264 Mon Sep 17 00:00:00 2001 From: Silviu Popa Date: Fri, 23 Oct 2020 12:33:03 +0300 Subject: [PATCH] [ACA-3706] implement startedBy process filter property (#6077) * [ACA-3706] implement startedBy filter property * fix lint * [ACA-3706] implement startedBy filter * replace initiator with people cloud component * small changes * fix user selection mode * revert unnecesary change * fix e2e * fix process filter e2e tests * fix more e2e Co-authored-by: Silviu Popa --- .../cloud/processes-cloud-demo.component.html | 2 +- .../cloud/processes-cloud-demo.component.ts | 4 +++ .../config/process-list-cloud.config.ts | 2 +- .../process-custom-filters.e2e.ts | 8 +++--- .../process-filter-results.e2e.ts | 6 ++--- .../process-header-cloud.e2e.ts | 2 +- .../process-list-selection-cloud.e2e.ts | 13 +++++----- lib/core/services/oauth2.service.ts | 3 ++- .../src/lib/i18n/en.json | 2 ++ .../edit-process-filter-cloud.component.html | 10 +++++++ ...dit-process-filter-cloud.component.spec.ts | 11 +++++++- .../edit-process-filter-cloud.component.ts | 26 ++++++++++++------- .../models/process-filter-cloud.model.ts | 6 ++++- .../process-filters-cloud.module.ts | 4 ++- .../base-edit-task-filter-cloud.component.ts | 8 +++++- .../edit-task-filter-cloud.component.spec.ts | 3 ++- ...dit-process-filter-cloud-component.page.ts | 8 +++++- 17 files changed, 86 insertions(+), 32 deletions(-) diff --git a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.html b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.html index ab6e701555..acb24cf12e 100644 --- a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.html +++ b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.html @@ -13,7 +13,7 @@ fxFlex class="app-cloud-layout-overflow" [appName]="editedFilter.appName" - [initiator]="editedFilter.initiator" + [initiator]="getInitiatorValue()" [processDefinitionId]="editedFilter.processDefinitionId" [processDefinitionName]="editedFilter.processDefinitionName" [processDefinitionKey]="editedFilter.processDefinitionKey" diff --git a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts index bef4b8a9bd..3dcb140d50 100644 --- a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts +++ b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts @@ -116,6 +116,10 @@ export class ProcessesCloudDemoComponent implements OnInit, OnDestroy { } } + getInitiatorValue(): string { + return this.editedFilter.initiator?.map(initiator => initiator.username).join(','); + } + onChangePageSize(event: Pagination) { this.userPreference.paginationSize = event.maxItems; } diff --git a/e2e/process-services-cloud/config/process-list-cloud.config.ts b/e2e/process-services-cloud/config/process-list-cloud.config.ts index 5c75beffc8..8cc321584b 100644 --- a/e2e/process-services-cloud/config/process-list-cloud.config.ts +++ b/e2e/process-services-cloud/config/process-list-cloud.config.ts @@ -61,7 +61,7 @@ export class ProcessListCloudConfiguration { { 'key': 'entry.initiator', 'type': 'text', - 'title': 'ADF_CLOUD_PROCESS_LIST.PROPERTIES.INITIATOR', + 'title': 'ADF_CLOUD_PROCESS_LIST.PROPERTIES.STARTED_BY', 'sortable': true }, { diff --git a/e2e/process-services-cloud/process-custom-filters.e2e.ts b/e2e/process-services-cloud/process-custom-filters.e2e.ts index 08d13918aa..ed4a7b845c 100644 --- a/e2e/process-services-cloud/process-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/process-custom-filters.e2e.ts @@ -145,15 +145,15 @@ describe('Process list cloud', () => { await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Status')).toBe(true); }); - it('[C305054] Should display processes ordered by initiator when Initiator is selected from sort dropdown', async () => { - await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ status: 'ALL', sort: 'Initiator', order: 'ASC' }); + it('[C305054] Should display processes ordered by started by when Started By is selected from sort dropdown', async () => { + await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ status: 'ALL', sort: 'Started by', order: 'ASC' }); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Initiator')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Started by')).toBe(true); await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ order: 'DESC'}); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); - await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Initiator')).toBe(true); + await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Started by')).toBe(true); }); it('[C305054] Should display processes ordered by processdefinitionid date when ProcessDefinitionId is selected from sort dropdown', async () => { diff --git a/e2e/process-services-cloud/process-filter-results.e2e.ts b/e2e/process-services-cloud/process-filter-results.e2e.ts index f0a0e32b6d..7cdbcaab82 100644 --- a/e2e/process-services-cloud/process-filter-results.e2e.ts +++ b/e2e/process-services-cloud/process-filter-results.e2e.ts @@ -150,7 +150,7 @@ describe('Process filters cloud', () => { it('[C306887] Should be able to filter by appName', async () => { await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown(candidateBaseApp); - await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + await processCloudDemoPage.editProcessFilterCloudComponent().setInitiator(`${testUser.firstName} ${testUser.lastName}`); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); @@ -160,14 +160,14 @@ describe('Process filters cloud', () => { it('[C306889] Should be able to see "No process found" when using an app with no processes in the appName field', async () => { await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown('subprocessapp'); - await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + await processCloudDemoPage.editProcessFilterCloudComponent().setInitiator(`${testUser.firstName} ${testUser.lastName}`); await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found'); }); it('[C306890] Should be able to filter by initiator', async () => { await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); - await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + await processCloudDemoPage.editProcessFilterCloudComponent().setInitiator(`${testUser.firstName} ${testUser.lastName}`); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); diff --git a/e2e/process-services-cloud/process-header-cloud.e2e.ts b/e2e/process-services-cloud/process-header-cloud.e2e.ts index 31628634dc..3a27b14106 100644 --- a/e2e/process-services-cloud/process-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-header-cloud.e2e.ts @@ -126,7 +126,7 @@ describe('Process Header cloud component', () => { await processCloudDemoPage.processFilterCloudComponent.clickCompletedProcessesFilter(); await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe(PROCESSES.COMPLETED); - await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ initiator: testUser.username }); + await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ initiator: `${testUser.firstName} ${testUser.lastName}` }); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(childCompleteProcess.entry.name); diff --git a/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts b/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts index 01161f9cec..d3ec66eceb 100644 --- a/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-list-selection-cloud.e2e.ts @@ -96,7 +96,8 @@ describe('Process list cloud', () => { await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); - await processCloudDemoPage.editProcessFilterCloudComponent().setProperty('initiator', testUser.username); + await processCloudDemoPage.editProcessFilterCloudComponent().setInitiator(`${testUser.firstName} ${testUser.lastName}`); + await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().getDataTable().checkNoRowIsSelected(); }); @@ -108,7 +109,7 @@ describe('Process list cloud', () => { await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); - await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username }); + await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`}); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); @@ -124,7 +125,7 @@ describe('Process list cloud', () => { await tasksCloudDemoPage.clickAppButton(); await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); - await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username }); + await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`}); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); @@ -141,7 +142,7 @@ describe('Process list cloud', () => { await tasksCloudDemoPage.clickAppButton(); await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); - await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username }); + await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`}); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); @@ -158,7 +159,7 @@ describe('Process list cloud', () => { await tasksCloudDemoPage.enableMultiSelection(); await tasksCloudDemoPage.clickAppButton(); await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); - await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username }); + await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`}); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); await browser.sleep(1000); @@ -182,7 +183,7 @@ describe('Process list cloud', () => { await tasksCloudDemoPage.clickAppButton(); await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); - await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': testUser.username }); + await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ 'initiator': `${testUser.firstName} ${testUser.lastName}`}); await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); diff --git a/lib/core/services/oauth2.service.ts b/lib/core/services/oauth2.service.ts index 668b6b0343..8ec376e5cc 100644 --- a/lib/core/services/oauth2.service.ts +++ b/lib/core/services/oauth2.service.ts @@ -18,6 +18,7 @@ import { Injectable } from '@angular/core'; import { AlfrescoApiService } from './alfresco-api.service'; import { Observable, from } from 'rxjs'; +import { Oauth2Auth } from '@alfresco/js-api'; export const JSON_TYPE = ['application/json']; @@ -33,7 +34,7 @@ export interface OAuth2RequestParams { export class OAuth2Service { constructor(private alfrescoApiService: AlfrescoApiService) {} - get apiClient() { + get apiClient(): Oauth2Auth { return this.alfrescoApiService.getInstance().oauth2Auth; } diff --git a/lib/process-services-cloud/src/lib/i18n/en.json b/lib/process-services-cloud/src/lib/i18n/en.json index 6efbcea0b6..42d92835f2 100644 --- a/lib/process-services-cloud/src/lib/i18n/en.json +++ b/lib/process-services-cloud/src/lib/i18n/en.json @@ -14,6 +14,7 @@ "COMPLETED_BY": "Completed By", "ID": "Id", "INITIATOR": "Initiator", + "STARTED_BY": "Started by", "APP_NAME": "Application Name", "BUSINESS_KEY": "Business Key", "DESCRIPTION": "Description", @@ -208,6 +209,7 @@ "PROCESS_NAME": "Process Name", "APP_VERSION": "AppReleaseVersion", "STARTED_DATE": "Started Date", + "STARTED_BY": "Started by", "COMPLETED_DATE": "Completed Date", "DATE_RANGE": { "NO_DATE": "No Date", diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.html b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.html index 17017200cd..be493bf8e5 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.html +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.html @@ -72,6 +72,16 @@ [options]="processFilterProperty.dateFilterOptions" (dateTypeChange)="onDateTypeChange($event, processFilterProperty)" (dateChanged)="onDateRangeFilterChanged($event, processFilterProperty)"> + +
+ +
diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts index 1bea0c4de4..b5fa29e8e1 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts @@ -19,7 +19,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { SimpleChange } from '@angular/core'; import { By } from '@angular/platform-browser'; -import { setupTestBed } from '@alfresco/adf-core'; +import { setupTestBed, AlfrescoApiService } from '@alfresco/adf-core'; import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module'; import { MatDialog } from '@angular/material/dialog'; import { of } from 'rxjs'; @@ -48,6 +48,7 @@ describe('EditProcessFilterCloudComponent', () => { let processService: ProcessCloudService; let getRunningApplicationsSpy: jasmine.Spy; let getProcessFilterByIdSpy: jasmine.Spy; + let alfrescoApiService: AlfrescoApiService; const fakeFilter = new ProcessFilterCloudModel({ name: 'FakeRunningProcess', @@ -61,6 +62,12 @@ describe('EditProcessFilterCloudComponent', () => { sort: 'id' }); + const mock = { + oauth2Auth: { + callCustomApi: () => Promise.resolve(fakeApplicationInstance) + } + }; + setupTestBed({ imports: [ TranslateModule.forRoot(), @@ -79,6 +86,7 @@ describe('EditProcessFilterCloudComponent', () => { service = TestBed.inject(ProcessFilterCloudService); appsService = TestBed.inject(AppsProcessCloudService); processService = TestBed.inject(ProcessCloudService); + alfrescoApiService = TestBed.inject(AlfrescoApiService); dialog = TestBed.inject(MatDialog); spyOn(dialog, 'open').and.returnValue({ afterClosed() { @@ -91,6 +99,7 @@ describe('EditProcessFilterCloudComponent', () => { }); getProcessFilterByIdSpy = spyOn(service, 'getFilterById').and.returnValue(of(fakeFilter)); getRunningApplicationsSpy = spyOn(appsService, 'getDeployedApplicationsByStatus').and.returnValue(of(fakeApplicationInstance)); + spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock); fixture.detectChanges(); }); diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts index 2ce90d87bc..4b9fb0be75 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts @@ -23,10 +23,9 @@ import { debounceTime, filter, takeUntil, finalize, switchMap } from 'rxjs/opera import { Subject, Observable } from 'rxjs'; import moment from 'moment-es6'; import { Moment } from 'moment'; - import { AppsProcessCloudService } from '../../../app/services/apps-process-cloud.service'; import { ProcessFilterCloudModel, ProcessFilterProperties, ProcessFilterAction, ProcessFilterOptions, ProcessSortFilterProperties } from '../models/process-filter-cloud.model'; -import { TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core'; +import { IdentityUserModel, TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core'; import { ProcessFilterCloudService } from '../services/process-filter-cloud.service'; import { ProcessFilterDialogCloudComponent } from './process-filter-dialog-cloud.component'; import { ApplicationInstanceModel } from '../../../app/models/application-instance.model'; @@ -333,6 +332,10 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes ); } + onChangedUser(users: IdentityUserModel[], processProperty: ProcessFilterProperties) { + this.getPropertyController(processProperty).setValue(users); + } + hasError(property: ProcessFilterProperties): boolean { return this.getPropertyController(property).errors && this.getPropertyController(property).errors.invalid; } @@ -492,6 +495,10 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes return property.type === 'number'; } + isUserSelectType(property: ProcessFilterProperties): boolean { + return property.type === 'people'; + } + isDisabledAction(action: ProcessFilterAction): boolean { return this.isDisabledForDefaultFilters(action) ? true : this.hasFormChanged(action); } @@ -589,7 +596,7 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes value: 'status' }, { - label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.INITIATOR', + label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.STARTED_BY', key: 'initiator', value: 'initiator' }, @@ -670,12 +677,6 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes value: currentProcessFilter.processDefinitionName || '', options: this.processDefinitionNames }), - new ProcessFilterProperties({ - label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.INITIATOR', - type: 'text', - key: 'initiator', - value: currentProcessFilter.initiator || '' - }), new ProcessFilterProperties({ label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.STATUS', type: 'select', @@ -714,6 +715,13 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes type: 'date', key: 'completedDate', value: currentProcessFilter.completedDate || false + }), + new ProcessFilterProperties({ + label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.STARTED_BY', + type: 'people', + key: 'initiator', + value: currentProcessFilter.initiator, + selectionMode: 'multiple' }), new ProcessFilterProperties({ label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.COMPLETED_DATE', 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 fc30d6553a..4160294b13 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 @@ -16,6 +16,8 @@ */ import { DateCloudFilterType } from '../../../models/date-cloud-filter.model'; import { DateRangeFilterService } from '../../../common/date-range-filter/date-range-filter.service'; +import { ComponentSelectionMode } from '../../../types'; +import { IdentityUserModel } from '@alfresco/adf-core'; export class ProcessFilterCloudModel { @@ -30,7 +32,7 @@ export class ProcessFilterCloudModel { appVersion?: number; processName: string; processInstanceId: string; - initiator: string; + initiator: IdentityUserModel[]; status: string; sort: string; order: string; @@ -168,6 +170,7 @@ export class ProcessFilterProperties { attributes?: { [key: string]: string; }; options?: ProcessFilterOptions[]; dateFilterOptions?: DateCloudFilterType[]; + selectionMode?: ComponentSelectionMode; constructor(obj?: any) { if (obj) { @@ -178,6 +181,7 @@ export class ProcessFilterProperties { this.attributes = obj.attributes || null; this.options = obj.options || null; this.dateFilterOptions = obj.dateFilterOptions || null; + this.selectionMode = obj.selectionMode || null; } } } diff --git a/lib/process-services-cloud/src/lib/process/process-filters/process-filters-cloud.module.ts b/lib/process-services-cloud/src/lib/process/process-filters/process-filters-cloud.module.ts index b5a66b47a9..eb4c6bcaf0 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/process-filters-cloud.module.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/process-filters-cloud.module.ts @@ -28,6 +28,7 @@ import { ProcessFilterDialogCloudComponent } from './components/process-filter-d import { AppListCloudModule } from './../../app/app-list-cloud.module'; import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core'; import { ProcessCommonModule } from '../../common/process-common.module'; +import { PeopleCloudModule } from '../../people/people-cloud.module'; @NgModule({ imports: [ @@ -39,7 +40,8 @@ import { ProcessCommonModule } from '../../common/process-common.module'; MaterialModule, AppListCloudModule, CoreModule, - ProcessCommonModule + ProcessCommonModule, + PeopleCloudModule ], declarations: [ProcessFiltersCloudComponent, EditProcessFilterCloudComponent, ProcessFilterDialogCloudComponent], exports: [ProcessFiltersCloudComponent, EditProcessFilterCloudComponent, ProcessFilterDialogCloudComponent], diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts index e2e5c71585..993a2449c1 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.ts @@ -301,7 +301,13 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnChan } onChangedUser(users: IdentityUserModel[], userProperty: TaskFilterProperties) { - this.getPropertyController(userProperty).setValue(users[0]); + let selectedUsers; + if (userProperty.selectionMode === 'single') { + selectedUsers = users[0]; + } else { + selectedUsers = users; + } + this.getPropertyController(userProperty).setValue(selectedUsers); } onAssignedChange(assignedValue: IdentityUserModel) { diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.spec.ts index ddb98eeda5..93f7bce244 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.spec.ts @@ -529,7 +529,8 @@ describe('EditTaskFilterCloudComponent', () => { key: 'completedBy', label: '', type: 'people', - value: null + value: null, + selectionMode: 'single' }); fixture.detectChanges(); diff --git a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts index 0af9defff7..6b5ab40691 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts @@ -19,6 +19,7 @@ import { EditProcessFilterDialogPage } from './dialog/edit-process-filter-dialog import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; import { DropdownPage } from '../../core/pages/material/dropdown.page'; +import { PeopleCloudComponentPage } from './people-cloud-component.page'; export class EditProcessFilterCloudComponentPage { @@ -39,6 +40,7 @@ export class EditProcessFilterCloudComponentPage { sortDropdown = new DropdownPage(this.locatorSortDropdown); orderDropdown = new DropdownPage(this.locatorOrderDropdown); processDefinitionNameDropdown = new DropdownPage(this.locatorProcessDefinitionNameDropdown); + peopleCloudComponent = new PeopleCloudComponentPage(); editProcessFilterDialogPage = new EditProcessFilterDialogPage(); @@ -133,6 +135,10 @@ export class EditProcessFilterCloudComponentPage { await this.setProperty('processName', option); } + async setInitiator(value: string): Promise { + await this.peopleCloudComponent.searchAssigneeAndSelect(value); + } + async getProcessInstanceId(): Promise { return this.getProperty('processInstanceId'); } @@ -205,7 +211,7 @@ export class EditProcessFilterCloudComponentPage { if (status) { await this.setStatusFilterDropDown(status); } if (sort) { await this.setSortFilterDropDown(sort); } if (order) { await this.setOrderFilterDropDown(order); } - if (initiator) { await this.setProperty('initiator', initiator); } + if (initiator) { await this.setInitiator(initiator); } if (processName) { await this.setProcessName(processName); } await this.openFilter(); }