[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
This commit is contained in:
tomasz hanaj 2024-09-12 18:17:25 +02:00 committed by GitHub
parent 6b6c680b4e
commit cf9f4cc681
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 64 additions and 24 deletions

View File

@ -45,10 +45,6 @@ export abstract class BaseTaskFiltersCloudComponent implements OnDestroy {
@Output()
error: EventEmitter<any> = new EventEmitter<any>();
/** Emitted when filter is updated. */
@Output()
updatedFilter: EventEmitter<string> = new EventEmitter<string>();
counters$: { [key: string]: Observable<number> } = {};
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);
}
}

View File

@ -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();
});

View File

@ -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<TaskCloudEngineEvent[]> = new EventEmitter<TaskCloudEngineEvent[]>();
/** Emitted when filter is updated. */
@Output()
updatedFilter: EventEmitter<string> = new EventEmitter<string>();
filters$: Observable<TaskFilterCloudModel[]>;
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);
}
}
}