[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 <p3701014@L3700101120.ness.com>
This commit is contained in:
Silviu Popa
2020-10-23 12:33:03 +03:00
committed by GitHub
parent a3771a70bd
commit 1f163d58ec
17 changed files with 86 additions and 32 deletions

View File

@@ -13,7 +13,7 @@
fxFlex fxFlex
class="app-cloud-layout-overflow" class="app-cloud-layout-overflow"
[appName]="editedFilter.appName" [appName]="editedFilter.appName"
[initiator]="editedFilter.initiator" [initiator]="getInitiatorValue()"
[processDefinitionId]="editedFilter.processDefinitionId" [processDefinitionId]="editedFilter.processDefinitionId"
[processDefinitionName]="editedFilter.processDefinitionName" [processDefinitionName]="editedFilter.processDefinitionName"
[processDefinitionKey]="editedFilter.processDefinitionKey" [processDefinitionKey]="editedFilter.processDefinitionKey"

View File

@@ -116,6 +116,10 @@ export class ProcessesCloudDemoComponent implements OnInit, OnDestroy {
} }
} }
getInitiatorValue(): string {
return this.editedFilter.initiator?.map(initiator => initiator.username).join(',');
}
onChangePageSize(event: Pagination) { onChangePageSize(event: Pagination) {
this.userPreference.paginationSize = event.maxItems; this.userPreference.paginationSize = event.maxItems;
} }

View File

@@ -61,7 +61,7 @@ export class ProcessListCloudConfiguration {
{ {
'key': 'entry.initiator', 'key': 'entry.initiator',
'type': 'text', 'type': 'text',
'title': 'ADF_CLOUD_PROCESS_LIST.PROPERTIES.INITIATOR', 'title': 'ADF_CLOUD_PROCESS_LIST.PROPERTIES.STARTED_BY',
'sortable': true 'sortable': true
}, },
{ {

View File

@@ -145,15 +145,15 @@ describe('Process list cloud', () => {
await expect(await processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Status')).toBe(true); 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 () => { 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: 'Initiator', order: 'ASC' }); await processCloudDemoPage.editProcessFilterCloudComponent().setFilter({ status: 'ALL', sort: 'Started by', order: 'ASC' });
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); 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.editProcessFilterCloudComponent().setFilter({ order: 'DESC'});
await processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded(); 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 () => { it('[C305054] Should display processes ordered by processdefinitionid date when ProcessDefinitionId is selected from sort dropdown', async () => {

View File

@@ -150,7 +150,7 @@ describe('Process filters cloud', () => {
it('[C306887] Should be able to filter by appName', async () => { it('[C306887] Should be able to filter by appName', async () => {
await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); await processCloudDemoPage.editProcessFilterCloudComponent().openFilter();
await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown(candidateBaseApp); 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().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); 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 () => { 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().openFilter();
await processCloudDemoPage.editProcessFilterCloudComponent().setAppNameDropDown('subprocessapp'); 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'); await expect(await processListPage.getDisplayedProcessListTitle()).toEqual('No Processes Found');
}); });
it('[C306890] Should be able to filter by initiator', async () => { it('[C306890] Should be able to filter by initiator', async () => {
await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); 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().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name); await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(runningProcessInstance.entry.name);

View File

@@ -126,7 +126,7 @@ describe('Process Header cloud component', () => {
await processCloudDemoPage.processFilterCloudComponent.clickCompletedProcessesFilter(); await processCloudDemoPage.processFilterCloudComponent.clickCompletedProcessesFilter();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toBe(PROCESSES.COMPLETED); 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().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(childCompleteProcess.entry.name); await processCloudDemoPage.processListCloudComponent().checkContentIsDisplayedByName(childCompleteProcess.entry.name);

View File

@@ -96,7 +96,8 @@ describe('Process list cloud', () => {
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING);
await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); 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().selectRowById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().getDataTable().checkNoRowIsSelected(); await processCloudDemoPage.processListCloudComponent().getDataTable().checkNoRowIsSelected();
}); });
@@ -108,7 +109,7 @@ describe('Process list cloud', () => {
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); 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().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]);
@@ -124,7 +125,7 @@ describe('Process list cloud', () => {
await tasksCloudDemoPage.clickAppButton(); await tasksCloudDemoPage.clickAppButton();
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); 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().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().selectRowById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkRowIsSelectedById(processInstances[0]);
@@ -141,7 +142,7 @@ describe('Process list cloud', () => {
await tasksCloudDemoPage.clickAppButton(); await tasksCloudDemoPage.clickAppButton();
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); 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().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]);
@@ -158,7 +159,7 @@ describe('Process list cloud', () => {
await tasksCloudDemoPage.enableMultiSelection(); await tasksCloudDemoPage.enableMultiSelection();
await tasksCloudDemoPage.clickAppButton(); await tasksCloudDemoPage.clickAppButton();
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); 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 processCloudDemoPage.processListCloudComponent().getDataTable().waitTillContentLoaded();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING);
await browser.sleep(1000); await browser.sleep(1000);
@@ -182,7 +183,7 @@ describe('Process list cloud', () => {
await tasksCloudDemoPage.clickAppButton(); await tasksCloudDemoPage.clickAppButton();
await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible(); await processCloudDemoPage.processFilterCloudComponent.isProcessFiltersListVisible();
await expect(await processCloudDemoPage.processFilterCloudComponent.getActiveFilterName()).toEqual(PROCESSES.RUNNING); 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().getDataTable().waitTillContentLoaded();
await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkCheckboxById(processInstances[0]);
await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]); await processCloudDemoPage.processListCloudComponent().checkRowIsCheckedById(processInstances[0]);

View File

@@ -18,6 +18,7 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { AlfrescoApiService } from './alfresco-api.service'; import { AlfrescoApiService } from './alfresco-api.service';
import { Observable, from } from 'rxjs'; import { Observable, from } from 'rxjs';
import { Oauth2Auth } from '@alfresco/js-api';
export const JSON_TYPE = ['application/json']; export const JSON_TYPE = ['application/json'];
@@ -33,7 +34,7 @@ export interface OAuth2RequestParams {
export class OAuth2Service { export class OAuth2Service {
constructor(private alfrescoApiService: AlfrescoApiService) {} constructor(private alfrescoApiService: AlfrescoApiService) {}
get apiClient() { get apiClient(): Oauth2Auth {
return this.alfrescoApiService.getInstance().oauth2Auth; return this.alfrescoApiService.getInstance().oauth2Auth;
} }

View File

@@ -14,6 +14,7 @@
"COMPLETED_BY": "Completed By", "COMPLETED_BY": "Completed By",
"ID": "Id", "ID": "Id",
"INITIATOR": "Initiator", "INITIATOR": "Initiator",
"STARTED_BY": "Started by",
"APP_NAME": "Application Name", "APP_NAME": "Application Name",
"BUSINESS_KEY": "Business Key", "BUSINESS_KEY": "Business Key",
"DESCRIPTION": "Description", "DESCRIPTION": "Description",
@@ -208,6 +209,7 @@
"PROCESS_NAME": "Process Name", "PROCESS_NAME": "Process Name",
"APP_VERSION": "AppReleaseVersion", "APP_VERSION": "AppReleaseVersion",
"STARTED_DATE": "Started Date", "STARTED_DATE": "Started Date",
"STARTED_BY": "Started by",
"COMPLETED_DATE": "Completed Date", "COMPLETED_DATE": "Completed Date",
"DATE_RANGE": { "DATE_RANGE": {
"NO_DATE": "No Date", "NO_DATE": "No Date",

View File

@@ -72,6 +72,16 @@
[options]="processFilterProperty.dateFilterOptions" [options]="processFilterProperty.dateFilterOptions"
(dateTypeChange)="onDateTypeChange($event, processFilterProperty)" (dateTypeChange)="onDateTypeChange($event, processFilterProperty)"
(dateChanged)="onDateRangeFilterChanged($event, processFilterProperty)"></adf-cloud-date-range-filter> (dateChanged)="onDateRangeFilterChanged($event, processFilterProperty)"></adf-cloud-date-range-filter>
<div fxFlex="23%" *ngIf="isUserSelectType(processFilterProperty)">
<adf-cloud-people
[preSelectUsers]="processFilterProperty.value"
[title]="processFilterProperty.label"
[validate]="true"
[appName]="appName"
[mode]="processFilterProperty.selectionMode"
(changedUsers)="onChangedUser($event, processFilterProperty)"></adf-cloud-people>
</div>
</ng-container> </ng-container>
</div> </div>
</form> </form>

View File

@@ -19,7 +19,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SimpleChange } from '@angular/core'; import { SimpleChange } from '@angular/core';
import { By } from '@angular/platform-browser'; 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 { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { of } from 'rxjs'; import { of } from 'rxjs';
@@ -48,6 +48,7 @@ describe('EditProcessFilterCloudComponent', () => {
let processService: ProcessCloudService; let processService: ProcessCloudService;
let getRunningApplicationsSpy: jasmine.Spy; let getRunningApplicationsSpy: jasmine.Spy;
let getProcessFilterByIdSpy: jasmine.Spy; let getProcessFilterByIdSpy: jasmine.Spy;
let alfrescoApiService: AlfrescoApiService;
const fakeFilter = new ProcessFilterCloudModel({ const fakeFilter = new ProcessFilterCloudModel({
name: 'FakeRunningProcess', name: 'FakeRunningProcess',
@@ -61,6 +62,12 @@ describe('EditProcessFilterCloudComponent', () => {
sort: 'id' sort: 'id'
}); });
const mock = {
oauth2Auth: {
callCustomApi: () => Promise.resolve(fakeApplicationInstance)
}
};
setupTestBed({ setupTestBed({
imports: [ imports: [
TranslateModule.forRoot(), TranslateModule.forRoot(),
@@ -79,6 +86,7 @@ describe('EditProcessFilterCloudComponent', () => {
service = TestBed.inject(ProcessFilterCloudService); service = TestBed.inject(ProcessFilterCloudService);
appsService = TestBed.inject(AppsProcessCloudService); appsService = TestBed.inject(AppsProcessCloudService);
processService = TestBed.inject(ProcessCloudService); processService = TestBed.inject(ProcessCloudService);
alfrescoApiService = TestBed.inject(AlfrescoApiService);
dialog = TestBed.inject(MatDialog); dialog = TestBed.inject(MatDialog);
spyOn(dialog, 'open').and.returnValue({ spyOn(dialog, 'open').and.returnValue({
afterClosed() { afterClosed() {
@@ -91,6 +99,7 @@ describe('EditProcessFilterCloudComponent', () => {
}); });
getProcessFilterByIdSpy = spyOn(service, 'getFilterById').and.returnValue(of(fakeFilter)); getProcessFilterByIdSpy = spyOn(service, 'getFilterById').and.returnValue(of(fakeFilter));
getRunningApplicationsSpy = spyOn(appsService, 'getDeployedApplicationsByStatus').and.returnValue(of(fakeApplicationInstance)); getRunningApplicationsSpy = spyOn(appsService, 'getDeployedApplicationsByStatus').and.returnValue(of(fakeApplicationInstance));
spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock);
fixture.detectChanges(); fixture.detectChanges();
}); });

View File

@@ -23,10 +23,9 @@ import { debounceTime, filter, takeUntil, finalize, switchMap } from 'rxjs/opera
import { Subject, Observable } from 'rxjs'; import { Subject, Observable } from 'rxjs';
import moment from 'moment-es6'; import moment from 'moment-es6';
import { Moment } from 'moment'; import { Moment } from 'moment';
import { AppsProcessCloudService } from '../../../app/services/apps-process-cloud.service'; import { AppsProcessCloudService } from '../../../app/services/apps-process-cloud.service';
import { ProcessFilterCloudModel, ProcessFilterProperties, ProcessFilterAction, ProcessFilterOptions, ProcessSortFilterProperties } from '../models/process-filter-cloud.model'; 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 { ProcessFilterCloudService } from '../services/process-filter-cloud.service';
import { ProcessFilterDialogCloudComponent } from './process-filter-dialog-cloud.component'; import { ProcessFilterDialogCloudComponent } from './process-filter-dialog-cloud.component';
import { ApplicationInstanceModel } from '../../../app/models/application-instance.model'; 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 { hasError(property: ProcessFilterProperties): boolean {
return this.getPropertyController(property).errors && this.getPropertyController(property).errors.invalid; 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'; return property.type === 'number';
} }
isUserSelectType(property: ProcessFilterProperties): boolean {
return property.type === 'people';
}
isDisabledAction(action: ProcessFilterAction): boolean { isDisabledAction(action: ProcessFilterAction): boolean {
return this.isDisabledForDefaultFilters(action) ? true : this.hasFormChanged(action); return this.isDisabledForDefaultFilters(action) ? true : this.hasFormChanged(action);
} }
@@ -589,7 +596,7 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
value: 'status' value: 'status'
}, },
{ {
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.INITIATOR', label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.STARTED_BY',
key: 'initiator', key: 'initiator',
value: 'initiator' value: 'initiator'
}, },
@@ -670,12 +677,6 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
value: currentProcessFilter.processDefinitionName || '', value: currentProcessFilter.processDefinitionName || '',
options: this.processDefinitionNames options: this.processDefinitionNames
}), }),
new ProcessFilterProperties({
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.INITIATOR',
type: 'text',
key: 'initiator',
value: currentProcessFilter.initiator || ''
}),
new ProcessFilterProperties({ new ProcessFilterProperties({
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.STATUS', label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.STATUS',
type: 'select', type: 'select',
@@ -714,6 +715,13 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
type: 'date', type: 'date',
key: 'completedDate', key: 'completedDate',
value: currentProcessFilter.completedDate || false 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({ new ProcessFilterProperties({
label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.COMPLETED_DATE', label: 'ADF_CLOUD_EDIT_PROCESS_FILTER.LABEL.COMPLETED_DATE',

View File

@@ -16,6 +16,8 @@
*/ */
import { DateCloudFilterType } from '../../../models/date-cloud-filter.model'; import { DateCloudFilterType } from '../../../models/date-cloud-filter.model';
import { DateRangeFilterService } from '../../../common/date-range-filter/date-range-filter.service'; import { DateRangeFilterService } from '../../../common/date-range-filter/date-range-filter.service';
import { ComponentSelectionMode } from '../../../types';
import { IdentityUserModel } from '@alfresco/adf-core';
export class ProcessFilterCloudModel { export class ProcessFilterCloudModel {
@@ -30,7 +32,7 @@ export class ProcessFilterCloudModel {
appVersion?: number; appVersion?: number;
processName: string; processName: string;
processInstanceId: string; processInstanceId: string;
initiator: string; initiator: IdentityUserModel[];
status: string; status: string;
sort: string; sort: string;
order: string; order: string;
@@ -168,6 +170,7 @@ export class ProcessFilterProperties {
attributes?: { [key: string]: string; }; attributes?: { [key: string]: string; };
options?: ProcessFilterOptions[]; options?: ProcessFilterOptions[];
dateFilterOptions?: DateCloudFilterType[]; dateFilterOptions?: DateCloudFilterType[];
selectionMode?: ComponentSelectionMode;
constructor(obj?: any) { constructor(obj?: any) {
if (obj) { if (obj) {
@@ -178,6 +181,7 @@ export class ProcessFilterProperties {
this.attributes = obj.attributes || null; this.attributes = obj.attributes || null;
this.options = obj.options || null; this.options = obj.options || null;
this.dateFilterOptions = obj.dateFilterOptions || null; this.dateFilterOptions = obj.dateFilterOptions || null;
this.selectionMode = obj.selectionMode || null;
} }
} }
} }

View File

@@ -28,6 +28,7 @@ import { ProcessFilterDialogCloudComponent } from './components/process-filter-d
import { AppListCloudModule } from './../../app/app-list-cloud.module'; import { AppListCloudModule } from './../../app/app-list-cloud.module';
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core'; import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
import { ProcessCommonModule } from '../../common/process-common.module'; import { ProcessCommonModule } from '../../common/process-common.module';
import { PeopleCloudModule } from '../../people/people-cloud.module';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -39,7 +40,8 @@ import { ProcessCommonModule } from '../../common/process-common.module';
MaterialModule, MaterialModule,
AppListCloudModule, AppListCloudModule,
CoreModule, CoreModule,
ProcessCommonModule ProcessCommonModule,
PeopleCloudModule
], ],
declarations: [ProcessFiltersCloudComponent, EditProcessFilterCloudComponent, ProcessFilterDialogCloudComponent], declarations: [ProcessFiltersCloudComponent, EditProcessFilterCloudComponent, ProcessFilterDialogCloudComponent],
exports: [ProcessFiltersCloudComponent, EditProcessFilterCloudComponent, ProcessFilterDialogCloudComponent], exports: [ProcessFiltersCloudComponent, EditProcessFilterCloudComponent, ProcessFilterDialogCloudComponent],

View File

@@ -301,7 +301,13 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnChan
} }
onChangedUser(users: IdentityUserModel[], userProperty: TaskFilterProperties) { 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) { onAssignedChange(assignedValue: IdentityUserModel) {

View File

@@ -529,7 +529,8 @@ describe('EditTaskFilterCloudComponent', () => {
key: 'completedBy', key: 'completedBy',
label: '', label: '',
type: 'people', type: 'people',
value: null value: null,
selectionMode: 'single'
}); });
fixture.detectChanges(); fixture.detectChanges();

View File

@@ -19,6 +19,7 @@ import { EditProcessFilterDialogPage } from './dialog/edit-process-filter-dialog
import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserVisibility } from '../../core/utils/browser-visibility';
import { BrowserActions } from '../../core/utils/browser-actions'; import { BrowserActions } from '../../core/utils/browser-actions';
import { DropdownPage } from '../../core/pages/material/dropdown.page'; import { DropdownPage } from '../../core/pages/material/dropdown.page';
import { PeopleCloudComponentPage } from './people-cloud-component.page';
export class EditProcessFilterCloudComponentPage { export class EditProcessFilterCloudComponentPage {
@@ -39,6 +40,7 @@ export class EditProcessFilterCloudComponentPage {
sortDropdown = new DropdownPage(this.locatorSortDropdown); sortDropdown = new DropdownPage(this.locatorSortDropdown);
orderDropdown = new DropdownPage(this.locatorOrderDropdown); orderDropdown = new DropdownPage(this.locatorOrderDropdown);
processDefinitionNameDropdown = new DropdownPage(this.locatorProcessDefinitionNameDropdown); processDefinitionNameDropdown = new DropdownPage(this.locatorProcessDefinitionNameDropdown);
peopleCloudComponent = new PeopleCloudComponentPage();
editProcessFilterDialogPage = new EditProcessFilterDialogPage(); editProcessFilterDialogPage = new EditProcessFilterDialogPage();
@@ -133,6 +135,10 @@ export class EditProcessFilterCloudComponentPage {
await this.setProperty('processName', option); await this.setProperty('processName', option);
} }
async setInitiator(value: string): Promise<void> {
await this.peopleCloudComponent.searchAssigneeAndSelect(value);
}
async getProcessInstanceId(): Promise<string> { async getProcessInstanceId(): Promise<string> {
return this.getProperty('processInstanceId'); return this.getProperty('processInstanceId');
} }
@@ -205,7 +211,7 @@ export class EditProcessFilterCloudComponentPage {
if (status) { await this.setStatusFilterDropDown(status); } if (status) { await this.setStatusFilterDropDown(status); }
if (sort) { await this.setSortFilterDropDown(sort); } if (sort) { await this.setSortFilterDropDown(sort); }
if (order) { await this.setOrderFilterDropDown(order); } 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); } if (processName) { await this.setProcessName(processName); }
await this.openFilter(); await this.openFilter();
} }