mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[AAE-1725] ADF Task filters - default filters should be recreated when they all get deleted. (#5551)
This commit is contained in:
@@ -561,5 +561,61 @@ describe('EditProcessFilterCloudComponent', () => {
|
||||
});
|
||||
component.onFilterChange();
|
||||
});
|
||||
|
||||
it('should call restore default filters service on deletion of last filter', (done) => {
|
||||
component.toggleFilterActions = true;
|
||||
const deleteFilterSpy = spyOn(service, 'deleteFilter').and.returnValue(of([]));
|
||||
const restoreFiltersSpy = spyOn(component, 'restoreDefaultProcessFilters').and.returnValue(of([]));
|
||||
const deleteSpy: jasmine.Spy = spyOn(component.action, 'emit');
|
||||
fixture.detectChanges();
|
||||
|
||||
const expansionPanel = fixture.debugElement.nativeElement.querySelector('mat-expansion-panel-header');
|
||||
expansionPanel.click();
|
||||
fixture.detectChanges();
|
||||
const stateElement = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-cloud-edit-process-property-status"] .mat-select-trigger');
|
||||
stateElement.click();
|
||||
fixture.detectChanges();
|
||||
const deleteButton = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-filter-action-delete"]');
|
||||
deleteButton.click();
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
expect(deleteFilterSpy).toHaveBeenCalled();
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
expect(deleteSpy).toHaveBeenCalled();
|
||||
expect(restoreFiltersSpy).toHaveBeenCalled();
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
it('should not call restore default filters service on deletion first filter', (done) => {
|
||||
component.toggleFilterActions = true;
|
||||
const deleteFilterSpy = spyOn(service, 'deleteFilter').and.returnValue(of([{ name: 'mock-filter-name'}]));
|
||||
const restoreFiltersSpy = spyOn(component, 'restoreDefaultProcessFilters').and.returnValue(of([]));
|
||||
const deleteSpy: jasmine.Spy = spyOn(component.action, 'emit');
|
||||
fixture.detectChanges();
|
||||
|
||||
const expansionPanel = fixture.debugElement.nativeElement.querySelector('mat-expansion-panel-header');
|
||||
expansionPanel.click();
|
||||
fixture.detectChanges();
|
||||
const stateElement = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-cloud-edit-process-property-status"] .mat-select-trigger');
|
||||
stateElement.click();
|
||||
fixture.detectChanges();
|
||||
const deleteButton = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-filter-action-delete"]');
|
||||
deleteButton.click();
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
expect(deleteFilterSpy).toHaveBeenCalled();
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
expect(deleteSpy).toHaveBeenCalled();
|
||||
expect(restoreFiltersSpy).not.toHaveBeenCalled();
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -18,8 +18,8 @@
|
||||
import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';
|
||||
import { FormGroup, FormBuilder, AbstractControl } from '@angular/forms';
|
||||
import { MatDialog, DateAdapter } from '@angular/material';
|
||||
import { debounceTime, filter, takeUntil, finalize } from 'rxjs/operators';
|
||||
import { Subject } from 'rxjs';
|
||||
import { debounceTime, filter, takeUntil, finalize, switchMap } from 'rxjs/operators';
|
||||
import { Subject, Observable } from 'rxjs';
|
||||
import moment from 'moment-es6';
|
||||
import { Moment } from 'moment';
|
||||
|
||||
@@ -338,11 +338,15 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
|
||||
delete(deleteAction: ProcessFilterAction) {
|
||||
this.processFilterCloudService
|
||||
.deleteFilter(this.processFilter)
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(() => {
|
||||
deleteAction.filter = this.processFilter;
|
||||
this.action.emit(deleteAction);
|
||||
});
|
||||
.pipe(
|
||||
filter((filters) => {
|
||||
deleteAction.filter = this.processFilter;
|
||||
this.action.emit(deleteAction);
|
||||
return filters.length === 0;
|
||||
}),
|
||||
switchMap(() => this.restoreDefaultProcessFilters()),
|
||||
takeUntil(this.onDestroy$))
|
||||
.subscribe(() => {});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -396,6 +400,10 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes
|
||||
return name.replace(regExt, '-');
|
||||
}
|
||||
|
||||
restoreDefaultProcessFilters(): Observable<ProcessFilterCloudModel[]> {
|
||||
return this.processFilterCloudService.getProcessFilters(this.appName);
|
||||
}
|
||||
|
||||
showActions(): boolean {
|
||||
return this.showFilterActions;
|
||||
}
|
||||
|
@@ -159,7 +159,7 @@ export class ProcessFilterCloudService {
|
||||
filters = filters.filter(filter => filter.id !== deletedFilter.id);
|
||||
return this.updateProcessFilters(deletedFilter.appName, key, filters);
|
||||
} else {
|
||||
return [];
|
||||
return of([]);
|
||||
}
|
||||
}),
|
||||
map((filters: ProcessFilterCloudModel[]) => {
|
||||
|
@@ -493,5 +493,49 @@ describe('EditTaskFilterCloudComponent', () => {
|
||||
expect(dialog.open).toHaveBeenCalled();
|
||||
});
|
||||
}));
|
||||
|
||||
it('should call restore default filters service on deletion of last filter', async(() => {
|
||||
component.toggleFilterActions = true;
|
||||
spyOn(service, 'deleteFilter').and.returnValue(of([]));
|
||||
const restoreDefaultFiltersSpy = spyOn(component, 'restoreDefaultTaskFilters').and.returnValue(of([]));
|
||||
fixture.detectChanges();
|
||||
const expansionPanel = fixture.debugElement.nativeElement.querySelector('mat-expansion-panel-header');
|
||||
expansionPanel.click();
|
||||
fixture.detectChanges();
|
||||
const stateElement = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-cloud-edit-task-property-sort"] .mat-select-trigger');
|
||||
stateElement.click();
|
||||
fixture.detectChanges();
|
||||
const deleteButton = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-filter-action-delete"]');
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(deleteButton.disabled).toBe(false);
|
||||
deleteButton.click();
|
||||
expect(service.deleteFilter).toHaveBeenCalled();
|
||||
expect(component.action.emit).toHaveBeenCalled();
|
||||
expect(restoreDefaultFiltersSpy).toHaveBeenCalled();
|
||||
});
|
||||
}));
|
||||
|
||||
it('should not call restore default filters service on deletion of first filter', async(() => {
|
||||
component.toggleFilterActions = true;
|
||||
spyOn(service, 'deleteFilter').and.returnValue(of([{ name: 'mock-filter-name'}]));
|
||||
const restoreDefaultFiltersSpy = spyOn(component, 'restoreDefaultTaskFilters').and.returnValue(of([]));
|
||||
fixture.detectChanges();
|
||||
const expansionPanel = fixture.debugElement.nativeElement.querySelector('mat-expansion-panel-header');
|
||||
expansionPanel.click();
|
||||
fixture.detectChanges();
|
||||
const stateElement = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-cloud-edit-task-property-sort"] .mat-select-trigger');
|
||||
stateElement.click();
|
||||
fixture.detectChanges();
|
||||
const deleteButton = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-filter-action-delete"]');
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(deleteButton.disabled).toBe(false);
|
||||
deleteButton.click();
|
||||
expect(service.deleteFilter).toHaveBeenCalled();
|
||||
expect(component.action.emit).toHaveBeenCalled();
|
||||
expect(restoreDefaultFiltersSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
@@ -18,8 +18,8 @@
|
||||
import { Component, OnChanges, Input, Output, EventEmitter, SimpleChanges, OnInit, OnDestroy } from '@angular/core';
|
||||
import { AbstractControl, FormGroup, FormBuilder } from '@angular/forms';
|
||||
import { MatDialog, DateAdapter } from '@angular/material';
|
||||
import { debounceTime, filter, takeUntil, finalize } from 'rxjs/operators';
|
||||
import { Subject } from 'rxjs';
|
||||
import { debounceTime, filter, takeUntil, finalize, switchMap } from 'rxjs/operators';
|
||||
import { Subject, Observable } from 'rxjs';
|
||||
import moment from 'moment-es6';
|
||||
import { Moment } from 'moment';
|
||||
|
||||
@@ -357,11 +357,15 @@ export class EditTaskFilterCloudComponent implements OnInit, OnChanges, OnDestro
|
||||
delete(deleteAction: TaskFilterAction): void {
|
||||
this.taskFilterCloudService
|
||||
.deleteFilter(this.taskFilter)
|
||||
.pipe(takeUntil(this.onDestroy$))
|
||||
.subscribe(() => {
|
||||
deleteAction.filter = this.taskFilter;
|
||||
this.action.emit(deleteAction);
|
||||
});
|
||||
.pipe(
|
||||
filter((filters) => {
|
||||
deleteAction.filter = this.taskFilter;
|
||||
this.action.emit(deleteAction);
|
||||
return filters.length === 0;
|
||||
}),
|
||||
switchMap(() => this.restoreDefaultTaskFilters()),
|
||||
takeUntil(this.onDestroy$))
|
||||
.subscribe(() => {});
|
||||
}
|
||||
|
||||
saveAs(saveAsAction: TaskFilterAction): void {
|
||||
@@ -410,6 +414,10 @@ export class EditTaskFilterCloudComponent implements OnInit, OnChanges, OnDestro
|
||||
return name.replace(regExt, '-');
|
||||
}
|
||||
|
||||
restoreDefaultTaskFilters(): Observable<TaskFilterCloudModel[]> {
|
||||
return this.taskFilterCloudService.getTaskListFilters(this.appName);
|
||||
}
|
||||
|
||||
showActions(): boolean {
|
||||
return this.showFilterActions;
|
||||
}
|
||||
|
@@ -206,7 +206,7 @@ export class TaskFilterCloudService {
|
||||
filters = filters.filter(filter => filter.id !== deletedFilter.id);
|
||||
return this.updateTaskFilters(deletedFilter.appName, key, filters);
|
||||
}
|
||||
return [];
|
||||
return of([]);
|
||||
}),
|
||||
map(filters => {
|
||||
this.addFiltersToStream(filters);
|
||||
|
Reference in New Issue
Block a user