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 { Router, ActivatedRoute, Params } from '@angular/router';
|
||||||
import { NodePaging, Pagination } from 'alfresco-js-api';
|
import { NodePaging, Pagination } from 'alfresco-js-api';
|
||||||
import { SearchComponent, SearchQueryBuilderService } from '@alfresco/adf-content-services';
|
import { SearchComponent, SearchQueryBuilderService } from '@alfresco/adf-content-services';
|
||||||
import { UserPreferencesService, SearchService } from '@alfresco/adf-core';
|
import { UserPreferencesService, SearchService, SearchConfigurationService } from '@alfresco/adf-core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-search-result-component',
|
selector: 'app-search-result-component',
|
||||||
@ -44,6 +44,7 @@ export class SearchResultComponent implements OnInit {
|
|||||||
constructor(public router: Router,
|
constructor(public router: Router,
|
||||||
private preferences: UserPreferencesService,
|
private preferences: UserPreferencesService,
|
||||||
private queryBuilder: SearchQueryBuilderService,
|
private queryBuilder: SearchQueryBuilderService,
|
||||||
|
private searchConfiguration: SearchConfigurationService,
|
||||||
@Optional() private route: ActivatedRoute) {
|
@Optional() private route: ActivatedRoute) {
|
||||||
this.maxItems = this.preferences.paginationSize;
|
this.maxItems = this.preferences.paginationSize;
|
||||||
queryBuilder.paging = {
|
queryBuilder.paging = {
|
||||||
@ -63,8 +64,12 @@ export class SearchResultComponent implements OnInit {
|
|||||||
if (this.route) {
|
if (this.route) {
|
||||||
this.route.params.forEach((params: Params) => {
|
this.route.params.forEach((params: Params) => {
|
||||||
this.searchedWord = params.hasOwnProperty(this.queryParamName) ? params[this.queryParamName] : null;
|
this.searchedWord = params.hasOwnProperty(this.queryParamName) ? params[this.queryParamName] : null;
|
||||||
this.queryBuilder.queryFragments['queryName'] = `cm:name:'${this.searchedWord}'`;
|
if (this.searchedWord) {
|
||||||
this.queryBuilder.update();
|
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;
|
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', () => {
|
it('should use only enabled categories', () => {
|
||||||
const config: SearchConfiguration = {
|
const config: SearchConfiguration = {
|
||||||
categories: [
|
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()
|
@Injectable()
|
||||||
export class SearchQueryBuilderService {
|
export class SearchQueryBuilderService {
|
||||||
|
|
||||||
|
private _userQuery = '';
|
||||||
|
|
||||||
updated: Subject<QueryBody> = new Subject();
|
updated: Subject<QueryBody> = new Subject();
|
||||||
executed: Subject<any> = new Subject();
|
executed: Subject<any> = new Subject();
|
||||||
|
|
||||||
@ -39,12 +41,21 @@ export class SearchQueryBuilderService {
|
|||||||
paging: { maxItems?: number; skipCount?: number } = null;
|
paging: { maxItems?: number; skipCount?: number } = null;
|
||||||
sorting: Array<SearchSortingDefinition> = [];
|
sorting: Array<SearchSortingDefinition> = [];
|
||||||
|
|
||||||
|
get userQuery(): string {
|
||||||
|
return this._userQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
set userQuery(value: string) {
|
||||||
|
value = (value || '').trim();
|
||||||
|
this._userQuery = value ? `(${value})` : '';
|
||||||
|
}
|
||||||
|
|
||||||
config: SearchConfiguration;
|
config: SearchConfiguration;
|
||||||
|
|
||||||
// TODO: to be supported in future iterations
|
// TODO: to be supported in future iterations
|
||||||
ranges: { [id: string]: SearchRange } = {};
|
ranges: { [id: string]: SearchRange } = {};
|
||||||
|
|
||||||
constructor(appConfig: AppConfigService, private alfrescoApiService: AlfrescoApiService) {
|
constructor(appConfig: AppConfigService, private alfrescoApiService: AlfrescoApiService) {
|
||||||
this.config = appConfig.get<SearchConfiguration>('search');
|
this.config = appConfig.get<SearchConfiguration>('search');
|
||||||
|
|
||||||
if (this.config) {
|
if (this.config) {
|
||||||
@ -100,17 +111,7 @@ export class SearchQueryBuilderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
buildQuery(): QueryBody {
|
buildQuery(): QueryBody {
|
||||||
let query = '';
|
let query = this.getFinalQuery();
|
||||||
|
|
||||||
this.categories.forEach(facet => {
|
|
||||||
const customQuery = this.queryFragments[facet.id];
|
|
||||||
if (customQuery) {
|
|
||||||
if (query.length > 0) {
|
|
||||||
query += ' AND ';
|
|
||||||
}
|
|
||||||
query += `(${customQuery})`;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const include = this.config.include || [];
|
const include = this.config.include || [];
|
||||||
if (include.length === 0) {
|
if (include.length === 0) {
|
||||||
@ -118,7 +119,6 @@ export class SearchQueryBuilderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (query) {
|
if (query) {
|
||||||
|
|
||||||
const result: QueryBody = {
|
const result: QueryBody = {
|
||||||
query: {
|
query: {
|
||||||
query: query,
|
query: query,
|
||||||
@ -179,6 +179,26 @@ export class SearchQueryBuilderService {
|
|||||||
return null;
|
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 {
|
private get facetFields(): RequestFacetFields {
|
||||||
const facetFields = this.config.facetFields;
|
const facetFields = this.config.facetFields;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user