diff --git a/docs/content-services/services/search-query-builder.service.md b/docs/content-services/services/search-query-builder.service.md index ac180cf915..8b04806a22 100644 --- a/docs/content-services/services/search-query-builder.service.md +++ b/docs/content-services/services/search-query-builder.service.md @@ -11,6 +11,14 @@ Stores information from all the custom search and faceted search widgets, compil ## Class members +### Events + +| Name | Type | Details | +| --- | --- | --- | +| updated | QueryBody | Raised when query gets updated but before query is executed | +| executed | ResultSetPaging | Raised when query gets executed and results are available | +| error | any | Raised when search api emits internal error | + ### Methods - **addFilterQuery**(query: `string`)
diff --git a/lib/content-services/search/search-query-builder.service.spec.ts b/lib/content-services/search/search-query-builder.service.spec.ts index b9f81228d0..db743ae0c9 100644 --- a/lib/content-services/search/search-query-builder.service.spec.ts +++ b/lib/content-services/search/search-query-builder.service.spec.ts @@ -613,4 +613,38 @@ describe('SearchQueryBuilder', () => { expect(compiled.highlight.mergeContiguous).toBe(true); }); + it('should emit error event', (done) => { + const config: SearchConfiguration = { + categories: [ + { id: 'cat1', enabled: true } + ] + }; + const builder = new SearchQueryBuilderService(buildConfig(config), null); + spyOn(builder, 'buildQuery').and.throwError('some error'); + + builder.error.subscribe(() => { + done(); + }); + + builder.execute(); + }); + + it('should emit empty results on error', (done) => { + const config: SearchConfiguration = { + categories: [ + { id: 'cat1', enabled: true } + ] + }; + const builder = new SearchQueryBuilderService(buildConfig(config), null); + spyOn(builder, 'buildQuery').and.throwError('some error'); + + builder.executed.subscribe((data) => { + expect(data.list.entries).toEqual([]); + expect(data.list.pagination.totalItems).toBe(0); + done(); + }); + + builder.execute(); + }); + }); diff --git a/lib/content-services/search/search-query-builder.service.ts b/lib/content-services/search/search-query-builder.service.ts index b0ae03c1b0..872847c66c 100644 --- a/lib/content-services/search/search-query-builder.service.ts +++ b/lib/content-services/search/search-query-builder.service.ts @@ -42,8 +42,9 @@ export class SearchQueryBuilderService { private _userQuery = ''; - updated: Subject = new Subject(); - executed: Subject = new Subject(); + updated = new Subject(); + executed = new Subject(); + error = new Subject(); categories: Array = []; queryFragments: { [id: string]: string } = {}; @@ -196,10 +197,23 @@ export class SearchQueryBuilderService { * @returns Nothing */ async execute() { - const query = this.buildQuery(); - if (query) { - const resultSetPaging: ResultSetPaging = await this.alfrescoApiService.searchApi.search(query); - this.executed.next(resultSetPaging); + try { + const query = this.buildQuery(); + if (query) { + const resultSetPaging: ResultSetPaging = await this.alfrescoApiService.searchApi.search(query); + this.executed.next(resultSetPaging); + } + } catch (error) { + this.error.next(error); + + this.executed.next({ + list: { + pagination: { + totalItems: 0 + }, + entries: [] + } + }); } }