[ADF-3055] fix bug with page size for facet fields (#3359)

* fix bug with page size for facet fields

* move page size to a constant

* move const inside the scope

* test fixes
This commit is contained in:
Denys Vuika 2018-05-22 10:33:46 +01:00 committed by Eugenio Romano
parent b92cc2ad60
commit 5aa523d9ac
4 changed files with 59 additions and 8 deletions

View File

@ -35,13 +35,15 @@ import { SearchFilterList } from './models/search-filter-list.model';
})
export class SearchFilterComponent implements OnInit {
private DEFAULT_PAGE_SIZE = 5;
selectedFacetQueries: string[] = [];
selectedBuckets: FacetFieldBucket[] = [];
responseFacetQueries: ResponseFacetQueryList;
responseFacetFields: ResponseFacetField[] = [];
facetQueriesLabel: string = 'Facet Queries';
facetQueriesPageSize = 5;
facetQueriesPageSize = this.DEFAULT_PAGE_SIZE;
facetQueriesExpanded = false;
constructor(public queryBuilder: SearchQueryBuilderService,
@ -51,7 +53,7 @@ export class SearchFilterComponent implements OnInit {
if (queryBuilder.config && queryBuilder.config.facetQueries) {
this.facetQueriesLabel = queryBuilder.config.facetQueries.label || 'Facet Queries';
this.facetQueriesPageSize = queryBuilder.config.facetQueries.pageSize || 5;
this.facetQueriesPageSize = queryBuilder.config.facetQueries.pageSize || this.DEFAULT_PAGE_SIZE;
this.facetQueriesExpanded = queryBuilder.config.facetQueries.expanded;
}
@ -161,12 +163,21 @@ export class SearchFilterComponent implements OnInit {
this.responseFacetQueries = new ResponseFacetQueryList(facetQueries, this.facetQueriesPageSize);
const expandedFields = this.responseFacetFields.filter(field => field.expanded).map(field => field.label);
const expandedFields = this.responseFacetFields
.filter(field => field.expanded)
.map(field => field.label);
this.responseFacetFields = (context.facetsFields || []).map(
field => {
const settings = this.queryBuilder.getFacetField(field.label);
let fallbackPageSize = this.DEFAULT_PAGE_SIZE;
if (settings && settings.pageSize) {
fallbackPageSize = settings.pageSize;
}
field.label = this.translationService.instant(field.label);
field.pageSize = field.pageSize || 5;
field.pageSize = field.pageSize || fallbackPageSize;
field.currentPageSize = field.pageSize;
field.expanded = expandedFields.includes(field.label);

View File

@ -23,5 +23,6 @@ export interface FacetField {
offset?: number;
prefix?: string;
pageSize?: number;
$checked?: boolean;
}

View File

@ -144,6 +144,35 @@ describe('SearchQueryBuilder', () => {
expect(query2).toBeNull();
});
it('should fetch facet from the config by label', () => {
const config: SearchConfiguration = {
categories: [],
facetFields: [
{ 'field': 'content.mimetype', 'mincount': 1, 'label': 'Type' },
{ 'field': 'content.size', 'mincount': 1, 'label': 'Size' }
]
};
const builder = new SearchQueryBuilderService(buildConfig(config), null);
const field = builder.getFacetField('Size');
expect(field.label).toBe('Size');
expect(field.field).toBe('content.size');
});
it('should not fetch facet from the config by label', () => {
const config: SearchConfiguration = {
categories: [],
facetFields: [
{ 'field': 'content.mimetype', 'mincount': 1, 'label': 'Type' },
{ 'field': 'content.size', 'mincount': 1, 'label': 'Size' }
]
};
const builder = new SearchQueryBuilderService(buildConfig(config), null);
const field = builder.getFacetField('Missing');
expect(field).toBeUndefined();
});
xit('should build query and raise an event on update', async () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null);
const query = {};

View File

@ -25,6 +25,7 @@ import { SearchRange } from './search-range.interface';
import { SearchConfiguration } from './search-configuration.interface';
import { FacetQuery } from './facet-query.interface';
import { SearchSortingDefinition } from './search-sorting-definition.interface';
import { FacetField } from './facet-field.interface';
@Injectable()
export class SearchQueryBuilderService {
@ -47,7 +48,7 @@ export class SearchQueryBuilderService {
this.config = appConfig.get<SearchConfiguration>('search');
if (this.config) {
this.categories = (this.config.categories || []).filter(f => f.enabled);
this.categories = (this.config.categories || []).filter(category => category.enabled);
this.filterQueries = this.config.filterQueries || [];
if (this.config.sorting) {
@ -58,7 +59,7 @@ export class SearchQueryBuilderService {
addFilterQuery(query: string): void {
if (query) {
const existing = this.filterQueries.find(q => q.query === query);
const existing = this.filterQueries.find(filterQuery => filterQuery.query === query);
if (!existing) {
this.filterQueries.push({ query: query });
}
@ -67,14 +68,23 @@ export class SearchQueryBuilderService {
removeFilterQuery(query: string): void {
if (query) {
this.filterQueries = this.filterQueries.filter(f => f.query !== query);
this.filterQueries = this.filterQueries
.filter(filterQuery => filterQuery.query !== query);
}
}
getFacetQuery(label: string): FacetQuery {
if (label) {
const queries = this.config.facetQueries.queries || [];
return queries.find(q => q.label === label);
return queries.find(query => query.label === label);
}
return null;
}
getFacetField(label: string): FacetField {
if (label) {
const fields = this.config.facetFields || [];
return fields.find(field => field.label === label);
}
return null;
}