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: []
+ }
+ });
}
}