search filter now remembers original user query (#3384)

This commit is contained in:
Denys Vuika
2018-05-23 19:06:49 +01:00
committed by Eugenio Romano
parent ecd7c85de5
commit 44a39b76a5
3 changed files with 73 additions and 16 deletions

View File

@@ -27,6 +27,23 @@ describe('SearchQueryBuilder', () => {
return config;
};
it('should have empty user query by default', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null);
expect(builder.userQuery).toBe('');
});
it('should wrap user query with brackets', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null);
builder.userQuery = 'my query';
expect(builder.userQuery).toEqual('(my query)');
});
it('should trim user query value', () => {
const builder = new SearchQueryBuilderService(buildConfig({}), null);
builder.userQuery = ' something ';
expect(builder.userQuery).toEqual('(something)');
});
it('should use only enabled categories', () => {
const config: SearchConfiguration = {
categories: [
@@ -363,4 +380,19 @@ describe('SearchQueryBuilder', () => {
});
});
it('should build final request with user and custom queries', () => {
const config: SearchConfiguration = {
categories: [
<any> { id: 'cat1', enabled: true }
]
};
const builder = new SearchQueryBuilderService(buildConfig(config), null);
builder.userQuery = 'my query';
builder.queryFragments['cat1'] = 'cm:name:test';
const compiled = builder.buildQuery();
expect(compiled.query.query).toBe('(my query) AND (cm:name:test)');
});
});

View File

@@ -30,6 +30,8 @@ import { FacetField } from './facet-field.interface';
@Injectable()
export class SearchQueryBuilderService {
private _userQuery = '';
updated: Subject<QueryBody> = new Subject();
executed: Subject<any> = new Subject();
@@ -39,12 +41,21 @@ export class SearchQueryBuilderService {
paging: { maxItems?: number; skipCount?: number } = null;
sorting: Array<SearchSortingDefinition> = [];
get userQuery(): string {
return this._userQuery;
}
set userQuery(value: string) {
value = (value || '').trim();
this._userQuery = value ? `(${value})` : '';
}
config: SearchConfiguration;
// TODO: to be supported in future iterations
ranges: { [id: string]: SearchRange } = {};
constructor(appConfig: AppConfigService, private alfrescoApiService: AlfrescoApiService) {
constructor(appConfig: AppConfigService, private alfrescoApiService: AlfrescoApiService) {
this.config = appConfig.get<SearchConfiguration>('search');
if (this.config) {
@@ -100,17 +111,7 @@ export class SearchQueryBuilderService {
}
buildQuery(): QueryBody {
let query = '';
this.categories.forEach(facet => {
const customQuery = this.queryFragments[facet.id];
if (customQuery) {
if (query.length > 0) {
query += ' AND ';
}
query += `(${customQuery})`;
}
});
let query = this.getFinalQuery();
const include = this.config.include || [];
if (include.length === 0) {
@@ -118,7 +119,6 @@ export class SearchQueryBuilderService {
}
if (query) {
const result: QueryBody = {
query: {
query: query,
@@ -179,6 +179,26 @@ export class SearchQueryBuilderService {
return null;
}
private getFinalQuery(): string {
let query = '';
this.categories.forEach(facet => {
const customQuery = this.queryFragments[facet.id];
if (customQuery) {
if (query.length > 0) {
query += ' AND ';
}
query += `(${customQuery})`;
}
});
const result = [this.userQuery, query]
.filter(entry => entry)
.join(' AND ');
return result;
}
private get facetFields(): RequestFacetFields {
const facetFields = this.config.facetFields;