From cf9f4cc68196907e28dd1a79ccabdb9407b4cd15 Mon Sep 17 00:00:00 2001 From: tomasz hanaj <12088991+tomaszhanaj@users.noreply.github.com> Date: Thu, 12 Sep 2024 18:17:25 +0200 Subject: [PATCH] [AAE-25268] emit filter key when it's value increased or decreased (#10186) * [AAE-25268] emit filter key when it's value increased or decreased * [AAE-25268] simplified if --- .../base-task-filters-cloud.component.ts | 5 -- .../task-filters-cloud.component.spec.ts | 58 ++++++++++++++----- .../task-filters-cloud.component.ts | 25 +++++++- 3 files changed, 64 insertions(+), 24 deletions(-) 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 d9e68f47c4..c135cb4578 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,10 +45,6 @@ export abstract class BaseTaskFiltersCloudComponent implements OnDestroy { @Output() error: EventEmitter = new EventEmitter(); - /** Emitted when filter is updated. */ - @Output() - updatedFilter: EventEmitter = new EventEmitter(); - counters$: { [key: string]: Observable } = {}; updatedCounters: string[] = []; @@ -66,7 +62,6 @@ 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 72e8cc6491..897e393ef7 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 @@ -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, fakeFilter, fakeFilterNotification } from '../mock/task-filters-cloud.mock'; +import { fakeGlobalFilter, defaultTaskFiltersMock, taskNotifications } from '../mock/task-filters-cloud.mock'; describe('TaskFiltersCloudComponent', () => { let taskFilterService: TaskFilterCloudService; @@ -329,34 +329,60 @@ describe('TaskFiltersCloudComponent', () => { expect(getTaskFilterCounterSpy).toHaveBeenCalledWith(fakeGlobalFilter[0]); }); - it('should emit filter key when counter is updated', (done) => { - component.appName = 'my-app-1'; - component.showIcons = true; - const testKey = 'my-tasks'; - component.updatedCounters = []; + it('should not emit filter key when filter counter is set for first time', () => { + component.currentFiltersValues = {}; + const fakeFilterKey = 'testKey'; + const fakeFilterValue = 10; + const updatedFilterSpy = spyOn(component.updatedFilter, 'emit'); + component.checkIfFilterValuesHasBeenUpdated(fakeFilterKey, fakeFilterValue); fixture.detectChanges(); + expect(component.currentFiltersValues).not.toEqual({}); + expect(component.currentFiltersValues[fakeFilterKey]).toBe(fakeFilterValue); + expect(updatedFilterSpy).not.toHaveBeenCalled(); + }); + + it('should not emit filter key when filter counter has not changd', () => { + component.currentFiltersValues = {}; + const fakeFilterKey = 'testKey'; + const fakeFilterValue = 10; + const updatedFilterSpy = spyOn(component.updatedFilter, 'emit'); + component.checkIfFilterValuesHasBeenUpdated(fakeFilterKey, fakeFilterValue); + fixture.detectChanges(); + + expect(component.currentFiltersValues).not.toEqual({}); + expect(component.currentFiltersValues[fakeFilterKey]).toBe(fakeFilterValue); + + component.checkIfFilterValuesHasBeenUpdated(fakeFilterKey, fakeFilterValue); + expect(component.currentFiltersValues[fakeFilterKey]).toBe(fakeFilterValue); + expect(updatedFilterSpy).not.toHaveBeenCalled(); + }); + + it('should emit filter key when filter counter is increased', (done) => { + component.currentFiltersValues = {}; + const fakeFilterKey = 'testKey'; + component.checkIfFilterValuesHasBeenUpdated(fakeFilterKey, 10); + component.updatedFilter.pipe(first()).subscribe((updatedFilter: string) => { - expect(updatedFilter).toBe(testKey); + expect(updatedFilter).toBe(fakeFilterKey); + expect(component.currentFiltersValues[fakeFilterKey]).toBe(20); done(); }); - - component.addToUpdatedCounters(testKey); + component.checkIfFilterValuesHasBeenUpdated(fakeFilterKey, 20); 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(); + it('should emit filter key when filter counter is decreased', (done) => { + component.currentFiltersValues = {}; + const fakeFilterKey = 'testKey'; + component.checkIfFilterValuesHasBeenUpdated(fakeFilterKey, 10); component.updatedFilter.pipe(first()).subscribe((updatedFilter: string) => { - expect(updatedFilter).not.toBe(fakeFilter.key); + expect(updatedFilter).toBe(fakeFilterKey); done(); }); - component.checkFilterCounter(fakeFilterNotification); + component.checkIfFilterValuesHasBeenUpdated(fakeFilterKey, 5); fixture.detectChanges(); }); 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 b61e806e0a..952afc891a 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 @@ -20,7 +20,7 @@ import { Observable } from 'rxjs'; import { TaskFilterCloudService } from '../services/task-filter-cloud.service'; import { TaskFilterCloudModel, FilterParamsModel } from '../models/filter-cloud.model'; import { AppConfigService, TranslationService } from '@alfresco/adf-core'; -import { debounceTime, takeUntil } from 'rxjs/operators'; +import { debounceTime, takeUntil, tap } from 'rxjs/operators'; import { BaseTaskFiltersCloudComponent } from './base-task-filters-cloud.component'; import { TaskDetailsCloudModel } from '../../start-task/models/task-details-cloud.model'; import { TaskCloudEngineEvent } from '../../../models/engine-event-cloud.model'; @@ -44,10 +44,15 @@ export class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent imp @Output() filterCounterUpdated: EventEmitter = new EventEmitter(); + /** Emitted when filter is updated. */ + @Output() + updatedFilter: EventEmitter = new EventEmitter(); + filters$: Observable; filters: TaskFilterCloudModel[] = []; currentFilter: TaskFilterCloudModel; enableNotifications: boolean; + currentFiltersValues = {}; private readonly taskFilterCloudService = inject(TaskFilterCloudService); private readonly translationService = inject(TranslationService); @@ -97,7 +102,11 @@ export class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent imp updateFilterCounter(filter: TaskFilterCloudModel) { if (filter?.showCounter) { - this.counters$[filter.key] = this.taskFilterCloudService.getTaskFilterCounter(filter); + this.counters$[filter.key] = this.taskFilterCloudService.getTaskFilterCounter(filter).pipe( + tap((filterCounter) => { + this.checkIfFilterValuesHasBeenUpdated(filter.key, filterCounter); + }) + ); } } @@ -121,7 +130,6 @@ export class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent imp this.filters.map((filter) => { if (this.isFilterPresent(filter, filterNotification)) { this.addToUpdatedCounters(filter.key); - this.updatedFilter.emit(filter.key); } }); } @@ -204,4 +212,15 @@ export class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent imp this.filters = []; this.currentFilter = undefined; } + + checkIfFilterValuesHasBeenUpdated(filterKey: string, filterValue: number) { + if (!this.currentFiltersValues[filterKey]) { + this.currentFiltersValues[filterKey] = filterValue; + return; + } + if (this.currentFiltersValues[filterKey] !== filterValue) { + this.currentFiltersValues[filterKey] = filterValue; + this.updatedFilter.emit(filterKey); + } + } }