[ADF-3716] Add filterWithContains configuration option for SearchFilt… (#4017)

* [ADF-3716] Add filterWithContains configuration option for SearchFilterComponent

* [ADF-3716] Add unit test and modify translationMock
This commit is contained in:
samuelengelen
2018-12-05 15:25:57 +01:00
committed by Eugenio Romano
parent 41ba258452
commit 9881e52873
5 changed files with 63 additions and 2 deletions

View File

@@ -40,7 +40,7 @@ describe('SearchFilterComponent', () => {
const searchMock: any = {
dataLoaded: new Subject()
};
translationMock.instant = (key) => `translated${key}`;
translationMock.instant = (key) => `${key}_translated`;
component = new SearchFilterComponent(queryBuilder, searchMock, translationMock);
component.ngOnInit();
});
@@ -217,6 +217,53 @@ describe('SearchFilterComponent', () => {
expect(component.responseFacetFields.length).toEqual(2);
});
it('should filter response facet fields based on search filter config method', () => {
queryBuilder.config = {
categories: [],
facetFields: { fields: [
{ label: 'f1', field: 'f1' }
]},
facetQueries: {
queries: []
},
filterWithContains: false
};
const initialFields: any = [
{ label: 'f1', buckets: [
{ label: 'firstLabel', display: 'firstLabel', count: 5 },
{ label: 'secondLabel', display: 'secondLabel', count: 5 },
{ label: 'thirdLabel', display: 'thirdLabel', count: 5 }
]
}
];
const data = {
list: {
context: {
facetsFields: initialFields
}
}
};
component.onDataLoaded(data);
expect(component.responseFacetFields[0].buckets.visibleItems.length).toBe(3);
component.responseFacetFields[0].buckets.filterText = 'f';
expect(component.responseFacetFields[0].buckets.visibleItems.length).toBe(1);
expect(component.responseFacetFields[0].buckets.visibleItems[0].label).toEqual('firstLabel');
component.responseFacetFields[0].buckets.filterText = 'label';
expect(component.responseFacetFields[0].buckets.visibleItems.length).toBe(0);
// Set filter method to use contains and test again
queryBuilder.config.filterWithContains = true;
component.responseFacetFields[0].buckets.filterText = 'f';
expect(component.responseFacetFields[0].buckets.visibleItems.length).toBe(1);
component.responseFacetFields[0].buckets.filterText = 'label';
expect(component.responseFacetFields[0].buckets.visibleItems.length).toBe(3);
});
it('should fetch facet fields from response payload and show the bucket values', () => {
component.responseFacetFields = null;

View File

@@ -233,7 +233,7 @@ export class SearchFilterComponent implements OnInit, OnDestroy {
if (bucket && bucketList.filterText) {
const pattern = (bucketList.filterText || '').toLowerCase();
const label = (this.translationService.instant(bucket.display) || this.translationService.instant(bucket.label)).toLowerCase();
return label.startsWith(pattern);
return this.queryBuilder.config.filterWithContains ? label.indexOf(pattern) !== -1 : label.startsWith(pattern);
}
return true;
};

View File

@@ -26,6 +26,7 @@ export interface SearchConfiguration {
fields?: Array<string>;
categories: Array<SearchCategory>;
filterQueries?: Array<FilterQuery>;
filterWithContains?: boolean;
facetQueries?: {
label?: string;
pageSize?: number;