diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/base-task-filters-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/base-task-filters-cloud.component.ts index 7b29a37291..d9e68f47c4 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/base-task-filters-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/base-task-filters-cloud.component.ts @@ -45,7 +45,11 @@ export abstract class BaseTaskFiltersCloudComponent implements OnDestroy { @Output() error: EventEmitter = new EventEmitter(); - counters$: {[key: string]: Observable} = {}; + /** Emitted when filter is updated. */ + @Output() + updatedFilter: EventEmitter = new EventEmitter(); + + counters$: { [key: string]: Observable } = {}; updatedCounters: string[] = []; protected onDestroy$ = new Subject(); @@ -62,6 +66,7 @@ export abstract class BaseTaskFiltersCloudComponent implements OnDestroy { addToUpdatedCounters(filterKey: string) { if (!this.updatedCounters.includes(filterKey)) { this.updatedCounters.push(filterKey); + this.updatedFilter.emit(filterKey); } } diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.spec.ts index ad336bcd82..72e8cc6491 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.spec.ts @@ -18,7 +18,7 @@ import { SimpleChange } from '@angular/core'; import { ComponentFixture, TestBed, fakeAsync } from '@angular/core/testing'; import { AppConfigService } from '@alfresco/adf-core'; -import { of, throwError } from 'rxjs'; +import { first, of, throwError } from 'rxjs'; import { TASK_FILTERS_SERVICE_TOKEN } from '../../../services/cloud-token.service'; import { LocalPreferenceCloudService } from '../../../services/local-preference-cloud.service'; import { TaskFilterCloudService } from '../services/task-filter-cloud.service'; @@ -26,7 +26,7 @@ import { TaskFiltersCloudComponent } from './task-filters-cloud.component'; import { By } from '@angular/platform-browser'; import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module'; import { TaskFiltersCloudModule } from '../task-filters-cloud.module'; -import { fakeGlobalFilter, defaultTaskFiltersMock, taskNotifications } from '../mock/task-filters-cloud.mock'; +import { fakeGlobalFilter, defaultTaskFiltersMock, taskNotifications, fakeFilter, fakeFilterNotification } from '../mock/task-filters-cloud.mock'; describe('TaskFiltersCloudComponent', () => { let taskFilterService: TaskFilterCloudService; @@ -39,13 +39,8 @@ describe('TaskFiltersCloudComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [ - ProcessServiceCloudTestingModule, - TaskFiltersCloudModule - ], - providers: [ - { provide: TASK_FILTERS_SERVICE_TOKEN, useClass: LocalPreferenceCloudService } - ] + imports: [ProcessServiceCloudTestingModule, TaskFiltersCloudModule], + providers: [{ provide: TASK_FILTERS_SERVICE_TOKEN, useClass: LocalPreferenceCloudService }] }); taskFilterService = TestBed.inject(TaskFilterCloudService); getTaskFilterCounterSpy = spyOn(taskFilterService, 'getTaskFilterCounter').and.returnValue(of(11)); @@ -334,8 +329,38 @@ describe('TaskFiltersCloudComponent', () => { expect(getTaskFilterCounterSpy).toHaveBeenCalledWith(fakeGlobalFilter[0]); }); - describe('Highlight Selected Filter', () => { + it('should emit filter key when counter is updated', (done) => { + component.appName = 'my-app-1'; + component.showIcons = true; + const testKey = 'my-tasks'; + component.updatedCounters = []; + fixture.detectChanges(); + component.updatedFilter.pipe(first()).subscribe((updatedFilter: string) => { + expect(updatedFilter).toBe(testKey); + done(); + }); + + component.addToUpdatedCounters(testKey); + fixture.detectChanges(); + }); + + it('should emit filter key when filter counter is checked', (done) => { + component.appName = 'my-app-1'; + component.showIcons = true; + component.filters = [fakeFilter]; + fixture.detectChanges(); + + component.updatedFilter.pipe(first()).subscribe((updatedFilter: string) => { + expect(updatedFilter).not.toBe(fakeFilter.key); + done(); + }); + + component.checkFilterCounter(fakeFilterNotification); + fixture.detectChanges(); + }); + + describe('Highlight Selected Filter', () => { const assignedTasksFilterKey = defaultTaskFiltersMock[1].key; const queuedTasksFilterKey = defaultTaskFiltersMock[0].key; const completedTasksFilterKey = defaultTaskFiltersMock[2].key; diff --git a/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.ts index 64bd909508..b61e806e0a 100644 --- a/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.ts @@ -121,6 +121,7 @@ export class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent imp this.filters.map((filter) => { if (this.isFilterPresent(filter, filterNotification)) { this.addToUpdatedCounters(filter.key); + this.updatedFilter.emit(filter.key); } }); } 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 6584cd4d13..23e165e76e 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 @@ -15,6 +15,7 @@ * limitations under the License. */ +import { TaskDetailsCloudModel } from '@alfresco/adf-process-services-cloud'; import { assignedTaskDetailsCloudMock } from '../../task-header/mocks/task-details-cloud.mock'; import { TaskFilterCloudModel, ServiceTaskFilterCloudModel, AssignmentType, TaskStatusFilter } from '../models/filter-cloud.model'; @@ -321,3 +322,8 @@ export const defaultTaskFiltersMock = [ order: 'DESC' } ]; + +export const fakeFilterNotification: TaskDetailsCloudModel = { + status: TaskStatusFilter.ASSIGNED, + assignee: 'AssignedTaskUser' +} as TaskDetailsCloudModel;