mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-26 17:24:56 +00:00
search filter now remembers original user query (#3384)
This commit is contained in:
parent
ecd7c85de5
commit
44a39b76a5
@ -19,7 +19,7 @@ import { Component, OnInit, Optional, ViewChild } from '@angular/core';
|
||||
import { Router, ActivatedRoute, Params } from '@angular/router';
|
||||
import { NodePaging, Pagination } from 'alfresco-js-api';
|
||||
import { SearchComponent, SearchQueryBuilderService } from '@alfresco/adf-content-services';
|
||||
import { UserPreferencesService, SearchService } from '@alfresco/adf-core';
|
||||
import { UserPreferencesService, SearchService, SearchConfigurationService } from '@alfresco/adf-core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-search-result-component',
|
||||
@ -44,6 +44,7 @@ export class SearchResultComponent implements OnInit {
|
||||
constructor(public router: Router,
|
||||
private preferences: UserPreferencesService,
|
||||
private queryBuilder: SearchQueryBuilderService,
|
||||
private searchConfiguration: SearchConfigurationService,
|
||||
@Optional() private route: ActivatedRoute) {
|
||||
this.maxItems = this.preferences.paginationSize;
|
||||
queryBuilder.paging = {
|
||||
@ -63,8 +64,12 @@ export class SearchResultComponent implements OnInit {
|
||||
if (this.route) {
|
||||
this.route.params.forEach((params: Params) => {
|
||||
this.searchedWord = params.hasOwnProperty(this.queryParamName) ? params[this.queryParamName] : null;
|
||||
this.queryBuilder.queryFragments['queryName'] = `cm:name:'${this.searchedWord}'`;
|
||||
if (this.searchedWord) {
|
||||
const queryBody = this.searchConfiguration.generateQueryBody(this.searchedWord, 0, 100);
|
||||
|
||||
this.queryBuilder.userQuery = queryBody.query.query;
|
||||
this.queryBuilder.update();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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)');
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -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,6 +41,15 @@ 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
|
||||
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user