From 5f76a7c340e38c7ac35bcf0c2e620b11292ef165 Mon Sep 17 00:00:00 2001 From: arditdomi <32884230+arditdomi@users.noreply.github.com> Date: Wed, 4 Nov 2020 15:57:40 +0000 Subject: [PATCH] Improve search filter component: hide a facet if there is no filter category (#6282) * New feature: Search Filter Component - Hide facet if there is no filter category * remove comments * Fix lint errors * Fix-Add unit tests * Change demo shell facet query to current year * Fix search e2e to use always current year Co-authored-by: Raphael Kister Co-authored-by: Eugenio Romano --- e2e/search/search-filters.e2e.ts | 9 ++++ .../src/lib/mock/search-filter-mock.ts | 18 +++++++ .../search-filter.component.spec.ts | 26 +++++++-- .../search-filter/search-filter.component.ts | 54 ++++++++++--------- 4 files changed, 77 insertions(+), 30 deletions(-) diff --git a/e2e/search/search-filters.e2e.ts b/e2e/search/search-filters.e2e.ts index 0abbfe3586..4dac987e91 100644 --- a/e2e/search/search-filters.e2e.ts +++ b/e2e/search/search-filters.e2e.ts @@ -34,6 +34,7 @@ import { } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { SearchConfiguration } from './search.config'; +import moment from 'moment-es6'; describe('Search Filters', () => { @@ -177,6 +178,14 @@ describe('Search Filters', () => { }); it('[C291980] Should group search facets under specified labels', async () => { + const currentYear = moment().year(); + + jsonFile.facetQueries.queries[0] = {'query': `created:${currentYear}`, 'label': 'SEARCH.FACET_QUERIES.CREATED_THIS_YEAR'}; + jsonFile.facetQueries.queries[1] = {'query': `content.mimetype:text/html`, 'label': 'SEARCH.FACET_QUERIES.MIMETYPE', 'group': 'Type facet queries'}; + jsonFile.facetQueries.queries[2] = {'query': `content.size:[0 TO 10240]`, 'label': 'SEARCH.FACET_QUERIES.XTRASMALL', 'group': 'Size facet queries'}; + + await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); + await searchBarPage.clickOnSearchIcon(); await searchBarPage.enterTextAndPressEnter('*'); await searchResults.dataTable.waitTillContentLoaded(); diff --git a/lib/content-services/src/lib/mock/search-filter-mock.ts b/lib/content-services/src/lib/mock/search-filter-mock.ts index 361fbc171e..3b492c2585 100644 --- a/lib/content-services/src/lib/mock/search-filter-mock.ts +++ b/lib/content-services/src/lib/mock/search-filter-mock.ts @@ -609,3 +609,21 @@ export const filteredResult = [ 'my4 (665)', 'my5 (1866)' ]; + +export const mockContentSizeResponseBucket = { + 'label': '5875', + 'filterQuery': 'content.size:5875', + 'metrics': [ + { + 'type': 'count', + 'value': { + 'count': 364 + } + } + ] + }; + +export function getMockSearchResultWithResponseBucket() { + mockSearchResult.list.context.facets[3].buckets.push(mockContentSizeResponseBucket); + return mockSearchResult; +} diff --git a/lib/content-services/src/lib/search/components/search-filter/search-filter.component.spec.ts b/lib/content-services/src/lib/search/components/search-filter/search-filter.component.spec.ts index 3f3e845239..291302ceb3 100644 --- a/lib/content-services/src/lib/search/components/search-filter/search-filter.component.spec.ts +++ b/lib/content-services/src/lib/search/components/search-filter/search-filter.component.spec.ts @@ -30,6 +30,7 @@ import { expandableCategories, expandedCategories, filteredResult, + getMockSearchResultWithResponseBucket, mockSearchResult, searchFilter, simpleCategories, @@ -340,7 +341,7 @@ describe('SearchFilterComponent', () => { }; component.onDataLoaded(data); - expect(component.responseFacets.length).toEqual(2); + expect(component.responseFacets.length).toEqual(1); expect(component.responseFacets[0].buckets.items[0].count).toEqual(10); expect(component.responseFacets[0].buckets.items[1].count).toEqual(1); }); @@ -706,9 +707,8 @@ describe('SearchFilterComponent', () => { component.onDataLoaded(data); - expect(component.responseFacets.length).toBe(2); + expect(component.responseFacets.length).toBe(1); expect(component.responseFacets[0].buckets.length).toEqual(1); - expect(component.responseFacets[1].buckets.length).toEqual(0); }); }); @@ -799,9 +799,27 @@ describe('SearchFilterComponent', () => { fixture.detectChanges(); panels = fixture.debugElement.queryAll(By.css('.mat-expansion-panel')); - expect(panels.length).toBe(16); + expect(panels.length).toBe(8); })); + it('should add a panel only for the response buckets that are present in the response', async () => { + appConfigService.config.search = searchFilter; + queryBuilder.resetToDefaults(); + + fixture.detectChanges(); + await fixture.whenStable(); + + const inputElement = fixture.debugElement.query(By.css('[data-automation-id="expansion-panel-Name"] input')); + inputElement.triggerEventHandler('change', { target: { value: '*' } }); + + queryBuilder.executed.next( getMockSearchResultWithResponseBucket()); + fixture.detectChanges(); + + const panels = fixture.debugElement.queryAll(By.css('.mat-expansion-panel')); + + expect(panels.length).toBe(9); + }); + it('should show the long facet options list with pagination', () => { const panel = '[data-automation-id="expansion-panel-Size facet queries"]'; appConfigService.config.search = searchFilter; diff --git a/lib/content-services/src/lib/search/components/search-filter/search-filter.component.ts b/lib/content-services/src/lib/search/components/search-filter/search-filter.component.ts index f192ad876a..167d7caa66 100644 --- a/lib/content-services/src/lib/search/components/search-filter/search-filter.component.ts +++ b/lib/content-services/src/lib/search/components/search-filter/search-filter.component.ts @@ -214,21 +214,22 @@ export class SearchFilterComponent implements OnInit, OnDestroy { this.updateExistingBuckets(responseField, responseBuckets, alreadyExistingField, alreadyExistingBuckets); } else if (responseField && this.showContextFacets) { + if (responseBuckets.length > 0) { + const bucketList = new SearchFilterList(responseBuckets, field.pageSize); + bucketList.filter = this.getBucketFilterFunction(bucketList); - const bucketList = new SearchFilterList(responseBuckets, field.pageSize); - bucketList.filter = this.getBucketFilterFunction(bucketList); - - if (!this.responseFacets) { - this.responseFacets = []; + if (!this.responseFacets) { + this.responseFacets = []; + } + this.responseFacets.push( { + ...field, + type: responseField.type || itemType, + label: field.label, + pageSize: field.pageSize | this.DEFAULT_PAGE_SIZE, + currentPageSize: field.pageSize | this.DEFAULT_PAGE_SIZE, + buckets: bucketList + }); } - this.responseFacets.push( { - ...field, - type: responseField.type || itemType, - label: field.label, - pageSize: field.pageSize | this.DEFAULT_PAGE_SIZE, - currentPageSize: field.pageSize | this.DEFAULT_PAGE_SIZE, - buckets: bucketList - }); } }); } @@ -269,21 +270,22 @@ export class SearchFilterComponent implements OnInit, OnDestroy { this.updateExistingBuckets(responseField, responseBuckets, alreadyExistingField, alreadyExistingBuckets); } else if (responseField && this.showContextFacets) { + if (responseBuckets.length > 0) { + const bucketList = new SearchFilterList(responseBuckets, this.facetQueriesPageSize); + bucketList.filter = this.getBucketFilterFunction(bucketList); - const bucketList = new SearchFilterList(responseBuckets, this.facetQueriesPageSize); - bucketList.filter = this.getBucketFilterFunction(bucketList); - - if (!this.responseFacets) { - this.responseFacets = []; + if (!this.responseFacets) { + this.responseFacets = []; + } + this.responseFacets.push( { + field: group, + type: responseField.type || 'query', + label: group, + pageSize: this.DEFAULT_PAGE_SIZE, + currentPageSize: this.DEFAULT_PAGE_SIZE, + buckets: bucketList + }); } - this.responseFacets.push( { - field: group, - type: responseField.type || 'query', - label: group, - pageSize: this.DEFAULT_PAGE_SIZE, - currentPageSize: this.DEFAULT_PAGE_SIZE, - buckets: bucketList - }); } });