mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[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:
committed by
Eugenio Romano
parent
41ba258452
commit
9881e52873
@@ -123,6 +123,16 @@ results:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can choose to filter facet field results using 'contains' instead of 'starts with', by using the `filterWithContains` boolean (default is `false`):
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"search": {
|
||||||
|
"filterWithContains": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
You can also provide a set of queries that are always executed alongside the user-defined
|
You can also provide a set of queries that are always executed alongside the user-defined
|
||||||
settings:
|
settings:
|
||||||
|
|
||||||
|
@@ -40,7 +40,7 @@ describe('SearchFilterComponent', () => {
|
|||||||
const searchMock: any = {
|
const searchMock: any = {
|
||||||
dataLoaded: new Subject()
|
dataLoaded: new Subject()
|
||||||
};
|
};
|
||||||
translationMock.instant = (key) => `translated${key}`;
|
translationMock.instant = (key) => `${key}_translated`;
|
||||||
component = new SearchFilterComponent(queryBuilder, searchMock, translationMock);
|
component = new SearchFilterComponent(queryBuilder, searchMock, translationMock);
|
||||||
component.ngOnInit();
|
component.ngOnInit();
|
||||||
});
|
});
|
||||||
@@ -217,6 +217,53 @@ describe('SearchFilterComponent', () => {
|
|||||||
expect(component.responseFacetFields.length).toEqual(2);
|
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', () => {
|
it('should fetch facet fields from response payload and show the bucket values', () => {
|
||||||
component.responseFacetFields = null;
|
component.responseFacetFields = null;
|
||||||
|
|
||||||
|
@@ -233,7 +233,7 @@ export class SearchFilterComponent implements OnInit, OnDestroy {
|
|||||||
if (bucket && bucketList.filterText) {
|
if (bucket && bucketList.filterText) {
|
||||||
const pattern = (bucketList.filterText || '').toLowerCase();
|
const pattern = (bucketList.filterText || '').toLowerCase();
|
||||||
const label = (this.translationService.instant(bucket.display) || this.translationService.instant(bucket.label)).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;
|
return true;
|
||||||
};
|
};
|
||||||
|
@@ -26,6 +26,7 @@ export interface SearchConfiguration {
|
|||||||
fields?: Array<string>;
|
fields?: Array<string>;
|
||||||
categories: Array<SearchCategory>;
|
categories: Array<SearchCategory>;
|
||||||
filterQueries?: Array<FilterQuery>;
|
filterQueries?: Array<FilterQuery>;
|
||||||
|
filterWithContains?: boolean;
|
||||||
facetQueries?: {
|
facetQueries?: {
|
||||||
label?: string;
|
label?: string;
|
||||||
pageSize?: number;
|
pageSize?: number;
|
||||||
|
@@ -905,6 +905,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"filterWithContains": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"facetFields": {
|
"facetFields": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
|
Reference in New Issue
Block a user