diff --git a/demo-shell/src/app.config.json b/demo-shell/src/app.config.json
index 7e967686ff..19e574b21b 100644
--- a/demo-shell/src/app.config.json
+++ b/demo-shell/src/app.config.json
@@ -460,7 +460,8 @@
"pattern": "cm:name:'(.*?)'",
"field": "cm:name",
"placeholder": "SEARCH.SEARCH_HEADER.FILTERS.NAME.PLACEHOLDER",
- "searchSuffix" : "*"
+ "searchSuffix" : "*",
+ "allowUpdateOnChange" : false
}
}
},
@@ -473,6 +474,7 @@
"selector": "check-list",
"settings": {
"pageSize": 5,
+ "allowUpdateOnChange" : false,
"operator": "OR",
"options": [
{
@@ -495,6 +497,7 @@
"component": {
"selector": "check-list",
"settings": {
+ "allowUpdateOnChange" : false,
"options": [
{
"name": "SEARCH.SEARCH_HEADER.FILTERS.SIZE.SMALL",
@@ -524,6 +527,7 @@
"component": {
"selector": "date-range",
"settings": {
+ "allowUpdateOnChange" : false,
"field": "cm:created",
"dateFormat": "DD-MMM-YY",
"maxDate": "today"
diff --git a/demo-shell/src/app/components/files/files.component.html b/demo-shell/src/app/components/files/files.component.html
index 6a7877a0fe..3b8079742f 100644
--- a/demo-shell/src/app/components/files/files.component.html
+++ b/demo-shell/src/app/components/files/files.component.html
@@ -240,11 +240,13 @@
+ (clear)="onAllFilterCleared()"
+ (selection)="onFilterSelected($event)">
diff --git a/demo-shell/src/app/components/files/files.component.ts b/demo-shell/src/app/components/files/files.component.ts
index 0614066625..3e6c3321b6 100644
--- a/demo-shell/src/app/components/files/files.component.ts
+++ b/demo-shell/src/app/components/files/files.component.ts
@@ -163,6 +163,9 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
@Input()
enableCustomHeaderFilter = false;
+ @Input()
+ paramValues: Map = null;
+
@Output()
documentListReady: EventEmitter = new EventEmitter();
@@ -655,7 +658,27 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
onAllFilterCleared() {
this.documentList.node = null;
+ if (this.currentFolderId === '-my-') {
+ this.router.navigate([this.navigationRoute, '']);
+ } else {
+ this.router.navigate([this.navigationRoute, this.currentFolderId, 'display', this.displayMode]);
+ }
this.documentList.reload();
}
+ onFilterSelected(currentActiveFilters: Map) {
+ const objectFromMap = {};
+ currentActiveFilters.forEach((value: any, key) => {
+ let paramValue = null;
+ if (value && value.from && value.to) {
+ paramValue = `${value.from}||${value.to}`;
+ } else {
+ paramValue = value;
+ }
+ objectFromMap[key] = paramValue;
+ });
+
+ this.router.navigate([], { relativeTo: this.route, queryParams: objectFromMap });
+ }
+
}
diff --git a/demo-shell/src/app/components/files/filtered-search.component.html b/demo-shell/src/app/components/files/filtered-search.component.html
index 56eaa79e5b..e45851c28f 100644
--- a/demo-shell/src/app/components/files/filtered-search.component.html
+++ b/demo-shell/src/app/components/files/filtered-search.component.html
@@ -4,5 +4,6 @@
[showSettingsPanel]="false"
[navigationRoute]="navigationRoute"
[currentFolderId]="currentFolderId"
- [enableCustomHeaderFilter]="true">
+ [enableCustomHeaderFilter]="true"
+ [paramValues]="queryParams">
diff --git a/demo-shell/src/app/components/files/filtered-search.component.ts b/demo-shell/src/app/components/files/filtered-search.component.ts
index 70fb4e29f7..2806f99891 100644
--- a/demo-shell/src/app/components/files/filtered-search.component.ts
+++ b/demo-shell/src/app/components/files/filtered-search.component.ts
@@ -29,13 +29,20 @@ export class FilteredSearchComponent {
navigationRoute = '/filtered-search';
currentFolderId = '-my-';
+ queryParams = null;
+
constructor(@Optional() private route: ActivatedRoute) {
+
if (this.route) {
this.route.params.forEach((params: Params) => {
if (params['id'] && this.currentFolderId !== params['id']) {
this.currentFolderId = params['id'];
}
});
+
+ this.route.queryParamMap.subscribe((queryMap: Params) => {
+ this.queryParams = queryMap.params;
+ });
}
}
diff --git a/docs/content-services/components/search-check-list.component.md b/docs/content-services/components/search-check-list.component.md
index 237c881466..eef5bdc112 100644
--- a/docs/content-services/components/search-check-list.component.md
+++ b/docs/content-services/components/search-check-list.component.md
@@ -26,6 +26,7 @@ Implements a checklist [widget](../../../lib/testing/src/lib/core/pages/form/wid
"pageSize": 5,
"settings": {
"operator": "OR",
+ "allowUpdateOnChange": true,
"options": [
{ "name": "Folder", "value": "TYPE:'cm:folder'" },
{ "name": "Document", "value": "TYPE:'cm:content'" }
@@ -44,6 +45,7 @@ Implements a checklist [widget](../../../lib/testing/src/lib/core/pages/form/wid
| ---- | ---- | ----------- |
| operator | `string` | Logical operator to combine query fragments. Can be 'AND' or 'OR'. |
| options | `array` | Array of objects with `name` and `value` properties. Each object defines a checkbox, labelled with `name`, that adds the query fragment in `value` to the query when enabled. |
+| allowUpdateOnChange | `boolean` | Enable/Disable the update fire event when text has been changed. By default is true.
## Details
diff --git a/docs/content-services/components/search-text.component.md b/docs/content-services/components/search-text.component.md
index aa8e26489a..e950e323d1 100644
--- a/docs/content-services/components/search-text.component.md
+++ b/docs/content-services/components/search-text.component.md
@@ -29,7 +29,8 @@ Implements a text input [widget](../../../lib/testing/src/lib/core/pages/form/wi
"searchSuffix": "",
"pattern": "cm:name:'(.*?)'",
"field": "cm:name",
- "placeholder": "Enter the name"
+ "placeholder": "Enter the name",
+ "allowUpdateOnChange": true
}
}
}
@@ -47,6 +48,7 @@ Implements a text input [widget](../../../lib/testing/src/lib/core/pages/form/wi
| placeholder | string | Text displayed in the [widget](../../../lib/testing/src/lib/core/pages/form/widgets/widget.ts) when the input string is empty |
| searchSuffix | string | Text to append always in the search of a string|
| searchPrefix | string | Text to prepend always in the search of a string|
+| allowUpdateOnChange | `boolean` | Enable/Disable the update fire event when text has been changed. By default is true.
## Details
diff --git a/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.html b/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.html
index 85aabc4adb..c1c0c1ee9a 100644
--- a/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.html
+++ b/lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.html
@@ -15,7 +15,7 @@
-
+
diff --git a/lib/content-services/src/lib/search/components/search-header/search-header.component.spec.ts b/lib/content-services/src/lib/search/components/search-header/search-header.component.spec.ts
index d37ccfd5d2..7e8222c670 100644
--- a/lib/content-services/src/lib/search/components/search-header/search-header.component.spec.ts
+++ b/lib/content-services/src/lib/search/components/search-header/search-header.component.spec.ts
@@ -173,7 +173,8 @@ describe('SearchHeaderComponent', () => {
spyOn(queryBuilder, 'isNoFilterActive').and.returnValue(false);
spyOn(alfrescoApiService.searchApi, 'search').and.returnValue(Promise.resolve(fakeNodePaging));
spyOn(queryBuilder, 'buildQuery').and.returnValue({});
- spyOn(component.widgetContainer, 'resetInnerWidget').and.stub();
+ queryBuilder.queryFragments['fake'] = 'test';
+ spyOn(component.widgetContainer, 'resetInnerWidget').and.callThrough();
const fakeEvent = jasmine.createSpyObj('event', ['stopPropagation']);
const menuButton: HTMLButtonElement = fixture.nativeElement.querySelector('#filter-menu-button');
component.update.subscribe((newNodePaging) => {
diff --git a/lib/content-services/src/lib/search/components/search-header/search-header.component.ts b/lib/content-services/src/lib/search/components/search-header/search-header.component.ts
index 6c0bcde183..88c974d716 100644
--- a/lib/content-services/src/lib/search/components/search-header/search-header.component.ts
+++ b/lib/content-services/src/lib/search/components/search-header/search-header.component.ts
@@ -33,7 +33,7 @@ import { ConfigurableFocusTrapFactory, ConfigurableFocusTrap } from '@angular/cd
import { DataColumn, TranslationService } from '@alfresco/adf-core';
import { SearchWidgetContainerComponent } from '../search-widget-container/search-widget-container.component';
import { SearchHeaderQueryBuilderService } from '../../search-header-query-builder.service';
-import { NodePaging } from '@alfresco/js-api';
+import { NodePaging, MinimalNode } from '@alfresco/js-api';
import { SearchCategory } from '../../search-category.interface';
import { SEARCH_QUERY_SERVICE_TOKEN } from '../../search-query-service.token';
import { Subject } from 'rxjs';
@@ -52,6 +52,9 @@ export class SearchHeaderComponent implements OnInit, OnChanges, OnDestroy {
@Input()
col: DataColumn;
+ @Input()
+ value: any;
+
/** The id of the current folder of the document list. */
@Input()
currentFolderNodeId: string;
@@ -72,6 +75,10 @@ export class SearchHeaderComponent implements OnInit, OnChanges, OnDestroy {
@Output()
clear: EventEmitter = new EventEmitter();
+ /** Emitted when a filter value is selected */
+ @Output()
+ selection: EventEmitter