From 30e980837ab5748dc231eeaecf36857a210e3285 Mon Sep 17 00:00:00 2001 From: Vito Date: Tue, 7 Jul 2020 17:07:49 +0100 Subject: [PATCH] [ADF-5176] - fixed apply when no value is given (#5841) * [ADF-5176] - added check for when values are empty for headers * [ADF-5176] - added test for the clear check --- .../search-check-list.component.spec.ts | 4 ++-- .../search-check-list.component.ts | 15 ++++++++++--- .../search-date-range.component.ts | 6 +++++- .../search-header.component.spec.ts | 21 +++++++++++++++++++ .../search-header/search-header.component.ts | 12 +++++------ .../search-number-range.component.ts | 8 +++++++ .../search-radio/search-radio.component.ts | 10 +++++++++ .../search-slider/search-slider.component.ts | 8 +++++++ .../search-text/search-text.component.ts | 8 +++++++ .../search-widget-container.component.ts | 8 ++++--- .../src/lib/search/search-widget.interface.ts | 2 ++ 11 files changed, 86 insertions(+), 16 deletions(-) diff --git a/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.spec.ts b/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.spec.ts index c0c89f8038..c903314fa0 100644 --- a/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.spec.ts +++ b/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.spec.ts @@ -178,14 +178,14 @@ describe('SearchCheckListComponent', () => { update: () => {} }; component.settings = { options: sizeOptions }; - spyOn(component, 'flush').and.stub(); + spyOn(component, 'submitValues').and.stub(); component.ngOnInit(); fixture.detectChanges(); const optionElements = fixture.debugElement.query(By.css('mat-checkbox')); optionElements.triggerEventHandler('change', { checked: true }); - expect(component.flush).toHaveBeenCalled(); + expect(component.submitValues).toHaveBeenCalled(); const clearAllElement = fixture.debugElement.query(By.css('button[title="SEARCH.FILTER.ACTIONS.CLEAR-ALL"]')); clearAllElement.triggerEventHandler('click', {} ); diff --git a/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.ts b/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.ts index a448c5c6ff..b28859333b 100644 --- a/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.ts +++ b/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.ts @@ -74,13 +74,22 @@ export class SearchCheckListComponent implements SearchWidget, OnInit { changeHandler(event: MatCheckboxChange, option: any) { option.checked = event.checked; - this.flush(); + this.submitValues(); } - flush() { - const checkedValues = this.options.items + hasValidValue() { + const checkedValues = this.getCheckedValues(); + return !!checkedValues.length; + } + + private getCheckedValues() { + return this.options.items .filter((option) => option.checked) .map((option) => option.value); + } + + submitValues() { + const checkedValues = this.getCheckedValues(); this.isActive = !!checkedValues.length; diff --git a/lib/content-services/src/lib/search/components/search-date-range/search-date-range.component.ts b/lib/content-services/src/lib/search/components/search-date-range/search-date-range.component.ts index 797291cc30..4a69f127dd 100644 --- a/lib/content-services/src/lib/search/components/search-date-range/search-date-range.component.ts +++ b/lib/content-services/src/lib/search/components/search-date-range/search-date-range.component.ts @@ -129,10 +129,14 @@ export class SearchDateRangeComponent implements SearchWidget, OnInit, OnDestroy } } - applyCurrentForm() { + submitValues() { this.apply(this.form.value, this.form.valid); } + hasValidValue() { + return this.form.valid; + } + reset() { this.isActive = false; this.form.reset({ diff --git a/lib/content-services/src/lib/search/components/search-header/search-header.component.spec.ts b/lib/content-services/src/lib/search/components/search-header/search-header.component.spec.ts index 31b197ba73..1194e4d784 100644 --- a/lib/content-services/src/lib/search/components/search-header/search-header.component.spec.ts +++ b/lib/content-services/src/lib/search/components/search-header/search-header.component.spec.ts @@ -188,4 +188,25 @@ describe('SearchHeaderComponent', () => { fixture.detectChanges(); await fixture.whenStable(); }); + + it('should emit the clear event when no filter has valued applied', async (done) => { + spyOn(queryBuilder, 'isNoFilterActive').and.returnValue(true); + spyOn(alfrescoApiService.searchApi, 'search').and.returnValue(Promise.resolve(fakeNodePaging)); + spyOn(queryBuilder, 'buildQuery').and.returnValue({}); + spyOn(component.widgetContainer, 'resetInnerWidget').and.stub(); + component.widgetContainer.componentRef.instance.value = ''; + const fakeEvent = jasmine.createSpyObj('event', ['stopPropagation']); + component.clear.subscribe(() => { + done(); + }); + + const menuButton: HTMLButtonElement = fixture.nativeElement.querySelector('#filter-menu-button'); + menuButton.click(); + fixture.detectChanges(); + await fixture.whenStable(); + const applyButton = fixture.debugElement.query(By.css('#apply-filter-button')); + applyButton.triggerEventHandler('click', fakeEvent); + fixture.detectChanges(); + await fixture.whenStable(); + }); }); diff --git a/lib/content-services/src/lib/search/components/search-header/search-header.component.ts b/lib/content-services/src/lib/search/components/search-header/search-header.component.ts index a155d907e4..b506b15497 100644 --- a/lib/content-services/src/lib/search/components/search-header/search-header.component.ts +++ b/lib/content-services/src/lib/search/components/search-header/search-header.component.ts @@ -129,15 +129,13 @@ export class SearchHeaderComponent implements OnInit, OnChanges, OnDestroy { } onApply() { - // TODO Move this piece of code in the search text widget - if (this.widgetContainer.selector === 'text' && this.widgetContainer.componentRef.instance.value === '') { + if (this.widgetContainer.hasValueSelected()) { + this.widgetContainer.applyInnerWidget(); + this.searchHeaderQueryBuilder.setActiveFilter(this.category.columnKey); + this.searchHeaderQueryBuilder.execute(); + } else { this.clearHeader(); - return; } - - this.widgetContainer.applyInnerWidget(); - this.searchHeaderQueryBuilder.setActiveFilter(this.category.columnKey); - this.searchHeaderQueryBuilder.execute(); } onClearButtonClick(event: Event) { diff --git a/lib/content-services/src/lib/search/components/search-number-range/search-number-range.component.ts b/lib/content-services/src/lib/search/components/search-number-range/search-number-range.component.ts index ccc626fd0c..dbc90b94c1 100644 --- a/lib/content-services/src/lib/search/components/search-number-range/search-number-range.component.ts +++ b/lib/content-services/src/lib/search/components/search-number-range/search-number-range.component.ts @@ -100,6 +100,14 @@ export class SearchNumberRangeComponent implements SearchWidget, OnInit { return result; } + submitValues() { + this.apply(this.form.value, this.form.valid); + } + + hasValidValue() { + return this.form.valid; + } + reset() { this.isActive = false; diff --git a/lib/content-services/src/lib/search/components/search-radio/search-radio.component.ts b/lib/content-services/src/lib/search/components/search-radio/search-radio.component.ts index 664da5a88d..277b27fb5a 100644 --- a/lib/content-services/src/lib/search/components/search-radio/search-radio.component.ts +++ b/lib/content-services/src/lib/search/components/search-radio/search-radio.component.ts @@ -83,6 +83,16 @@ export class SearchRadioComponent implements SearchWidget, OnInit { return null; } + submitValues() { + const currentValue = this.getSelectedValue(); + this.setValue(currentValue); + } + + hasValidValue() { + const currentValue = this.getSelectedValue(); + return !!currentValue; + } + private setValue(newValue: string) { this.value = newValue; this.context.queryFragments[this.id] = newValue; diff --git a/lib/content-services/src/lib/search/components/search-slider/search-slider.component.ts b/lib/content-services/src/lib/search/components/search-slider/search-slider.component.ts index de5cda69ed..1debea4c42 100644 --- a/lib/content-services/src/lib/search/components/search-slider/search-slider.component.ts +++ b/lib/content-services/src/lib/search/components/search-slider/search-slider.component.ts @@ -70,6 +70,14 @@ export class SearchSliderComponent implements SearchWidget, OnInit { this.updateQuery(this.value); } + submitValues() { + this.updateQuery(this.value); + } + + hasValidValue() { + return !!this.value; + } + private updateQuery(value: number | null) { if (this.id && this.context && this.settings && this.settings.field) { if (value === null) { diff --git a/lib/content-services/src/lib/search/components/search-text/search-text.component.ts b/lib/content-services/src/lib/search/components/search-text/search-text.component.ts index 27b6a1e642..99533efcf7 100644 --- a/lib/content-services/src/lib/search/components/search-text/search-text.component.ts +++ b/lib/content-services/src/lib/search/components/search-text/search-text.component.ts @@ -71,6 +71,14 @@ export class SearchTextComponent implements SearchWidget, OnInit { } + submitValues() { + this.updateQuery(this.value); + } + + hasValidValue() { + return !!this.value; + } + private getSearchPrefix(): string { return this.settings.searchPrefix ? this.settings.searchPrefix : ''; } diff --git a/lib/content-services/src/lib/search/components/search-widget-container/search-widget-container.component.ts b/lib/content-services/src/lib/search/components/search-widget-container/search-widget-container.component.ts index ce9224a70c..446ab4e30f 100644 --- a/lib/content-services/src/lib/search/components/search-widget-container/search-widget-container.component.ts +++ b/lib/content-services/src/lib/search/components/search-widget-container/search-widget-container.component.ts @@ -77,9 +77,11 @@ export class SearchWidgetContainerComponent implements OnInit, OnDestroy { } applyInnerWidget() { - if (this.selector === 'date-range' && this.componentRef && this.componentRef.instance) { - this.componentRef.instance.applyCurrentForm(); - } + this.componentRef.instance.submitValues(); + } + + hasValueSelected() { + return this.componentRef.instance.hasValidValue(); } resetInnerWidget() { diff --git a/lib/content-services/src/lib/search/search-widget.interface.ts b/lib/content-services/src/lib/search/search-widget.interface.ts index fe06b5a842..59933e9f27 100644 --- a/lib/content-services/src/lib/search/search-widget.interface.ts +++ b/lib/content-services/src/lib/search/search-widget.interface.ts @@ -24,4 +24,6 @@ export interface SearchWidget { context?: SearchQueryBuilderService; isActive?: boolean; reset(); + submitValues(); + hasValidValue(); }