diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html
index 2db89464a6..3a4ca575db 100644
--- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html
+++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.html
@@ -101,6 +101,16 @@
(dateTypeChange)="onDateTypeChange($event, taskFilterProperty)"
(dateChanged)="onDateRangeFilterChanged($event, taskFilterProperty)">
+
+
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 55abebdc0e..cb1c29e358 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
@@ -27,7 +27,7 @@ import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
import { debounceTime, filter, takeUntil } from 'rxjs/operators';
import { Subject } from 'rxjs';
import { DateAdapter } from '@angular/material/core';
-import { UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
+import { IdentityUserModel, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
@Directive()
// tslint:disable-next-line: directive-class-suffix
@@ -182,6 +182,10 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnChan
return property.type === 'date-range';
}
+ isUserSelectType(property: TaskFilterProperties): boolean {
+ return property.type === 'people';
+ }
+
isSelectType(property: TaskFilterProperties): boolean {
return property.type === 'select';
}
@@ -292,6 +296,10 @@ export abstract class BaseEditTaskFilterCloudComponent implements OnInit, OnChan
);
}
+ onChangedUser(users: IdentityUserModel[], userProperty: TaskFilterProperties) {
+ this.getPropertyController(userProperty).setValue(users[0]);
+ }
+
hasError(property: TaskFilterProperties): boolean {
return this.getPropertyController(property).errors && this.getPropertyController(property).errors.invalid;
}
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 333d537458..b32ba49433 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
@@ -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 { AlfrescoApiService, IdentityUserModel, setupTestBed } from '@alfresco/adf-core';
import { MatDialog } from '@angular/material/dialog';
import { of } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
@@ -38,6 +38,7 @@ import moment from 'moment-es6';
import { TranslateModule } from '@ngx-translate/core';
import { DateCloudFilterType } from '../../../../models/date-cloud-filter.model';
import { TaskFilterCloudModel } from '../../models/filter-cloud.model';
+import { PeopleCloudModule } from '../../../../people/people-cloud.module';
describe('EditTaskFilterCloudComponent', () => {
let component: EditTaskFilterCloudComponent;
@@ -45,15 +46,23 @@ describe('EditTaskFilterCloudComponent', () => {
let appsService: AppsProcessCloudService;
let fixture: ComponentFixture;
let dialog: MatDialog;
+ let alfrescoApiService: AlfrescoApiService;
let getTaskFilterSpy: jasmine.Spy;
let getRunningApplicationsSpy: jasmine.Spy;
let taskService: TaskCloudService;
+ const mock = {
+ oauth2Auth: {
+ callCustomApi: () => Promise.resolve(fakeApplicationInstance)
+ }
+ };
+
setupTestBed({
imports: [
TranslateModule.forRoot(),
ProcessServiceCloudTestingModule,
- TaskFiltersCloudModule
+ TaskFiltersCloudModule,
+ PeopleCloudModule
],
providers: [
MatDialog,
@@ -67,6 +76,7 @@ describe('EditTaskFilterCloudComponent', () => {
service = TestBed.inject(TaskFilterCloudService);
appsService = TestBed.inject(AppsProcessCloudService);
taskService = TestBed.inject(TaskCloudService);
+ alfrescoApiService = TestBed.inject(AlfrescoApiService);
dialog = TestBed.inject(MatDialog);
spyOn(dialog, 'open').and.returnValue({
afterClosed: of({
@@ -75,6 +85,7 @@ describe('EditTaskFilterCloudComponent', () => {
name: 'fake-name'
})
});
+ spyOn(alfrescoApiService, 'getInstance').and.returnValue(mock);
getTaskFilterSpy = spyOn(service, 'getTaskFilterById').and.returnValue(of(fakeFilter));
getRunningApplicationsSpy = spyOn(appsService, 'getDeployedApplicationsByStatus').and.returnValue(of(fakeApplicationInstance));
fixture.detectChanges();
@@ -471,6 +482,64 @@ describe('EditTaskFilterCloudComponent', () => {
});
}));
+ it('should fetch data in completedBy filter', async(() => {
+ component.filterProperties = ['appName', 'processInstanceId', 'priority', 'completedBy'];
+ fixture.detectChanges();
+ const taskFilterIdChange = new SimpleChange(undefined, 'mock-task-filter-id', true);
+ component.ngOnChanges({ 'id': taskFilterIdChange });
+ const appController = component.editTaskFilterForm.get('completedBy');
+ fixture.detectChanges();
+ fixture.whenStable().then(() => {
+ expect(appController).toBeDefined();
+ expect(JSON.stringify(appController.value)).toBe(JSON.stringify({
+ id: 'mock-id',
+ username: 'testCompletedByUser'
+ }));
+ });
+ }));
+
+ it('should show completedBy filter', async(() => {
+ component.filterProperties = ['appName', 'processInstanceId', 'priority', 'completedBy'];
+ fixture.detectChanges();
+ const taskFilterIdChange = new SimpleChange(undefined, 'mock-task-filter-id', true);
+ component.ngOnChanges({ 'id': taskFilterIdChange });
+ fixture.detectChanges();
+ fixture.whenStable().then(() => {
+ const peopleCloudComponent = fixture.debugElement.nativeElement.querySelector('adf-cloud-people');
+ expect(peopleCloudComponent).toBeTruthy();
+ });
+ }));
+
+ it('should update form on completed by user is updated', (done) => {
+ component.appName = 'fake';
+ component.filterProperties = ['appName', 'processInstanceId', 'priority', 'completedBy'];
+ const taskFilterIdChange = new SimpleChange(undefined, 'mock-task-filter-id', true);
+ component.ngOnChanges({ 'id': taskFilterIdChange });
+ fixture.detectChanges();
+
+ const mockUser: IdentityUserModel[] = [{
+ id: 'id',
+ username: 'test'
+ }];
+
+ const startedDateTypeControl: AbstractControl = component.editTaskFilterForm.get('completedBy');
+ startedDateTypeControl.setValue('hruser');
+
+ component.onChangedUser(mockUser, {
+ key: 'completedBy',
+ label: '',
+ type: 'people',
+ value: null
+ });
+
+ fixture.detectChanges();
+ component.filterChange.subscribe(() => {
+ expect(component.changedTaskFilter.completedBy).toEqual(mockUser[0]);
+ done();
+ });
+ component.onFilterChange();
+ });
+
it('should set the correct started date range when date range option is changed', (done) => {
component.appName = 'fake';
component.filterProperties = ['appName', 'processInstanceId', 'priority', 'dueDateRange'];
diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts
index 74db85a97e..765c781dc1 100644
--- a/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts
+++ b/lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filters/edit-task-filter-cloud.component.ts
@@ -339,6 +339,13 @@ export class EditTaskFilterCloudComponent extends BaseEditTaskFilterCloudCompone
_completedFrom: this.taskFilter.completedFrom || null,
_completedTo: this.taskFilter.completedTo || null
}
+ }),
+ new TaskFilterProperties({
+ label: 'ADF_CLOUD_EDIT_TASK_FILTER.LABEL.COMPLETED_BY',
+ type: 'people',
+ key: 'completedBy',
+ value: this.taskFilter.completedBy ? [this.taskFilter.completedBy] : null,
+ selectionMode: 'single'
})
];
}
diff --git a/lib/process-services-cloud/src/lib/task/task-filters/mock/task-filters-cloud.mock.ts b/lib/process-services-cloud/src/lib/task/task-filters/mock/task-filters-cloud.mock.ts
index 84b074d78d..c5523049df 100644
--- a/lib/process-services-cloud/src/lib/task/task-filters/mock/task-filters-cloud.mock.ts
+++ b/lib/process-services-cloud/src/lib/task/task-filters/mock/task-filters-cloud.mock.ts
@@ -77,7 +77,11 @@ export const fakeFilter = new TaskFilterCloudModel({
processDefinitionId: 'process-def-id',
assignee: 'fake-involved',
order: 'ASC',
- sort: 'id'
+ sort: 'id',
+ completedBy: {
+ id: 'mock-id',
+ username: 'testCompletedByUser'
+ }
});
export const fakeServiceFilter = {
diff --git a/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts b/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts
index 57f514341d..9cdd74d6c5 100644
--- a/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts
+++ b/lib/process-services-cloud/src/lib/task/task-filters/models/filter-cloud.model.ts
@@ -18,6 +18,7 @@
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 TaskFilterCloudModel {
id: string;
@@ -42,11 +43,11 @@ export class TaskFilterCloudModel {
parentTaskId: string;
priority: number;
standalone: boolean;
- completedBy: string;
lastModifiedFrom: string;
lastModifiedTo: string;
completedDateType: DateCloudFilterType;
completedDate: Date;
+ completedBy: IdentityUserModel;
private _completedFrom: string;
private _completedTo: string;