diff --git a/docs/extending/application-actions.md b/docs/extending/application-actions.md
index b0e6ff7b4..368e09826 100644
--- a/docs/extending/application-actions.md
+++ b/docs/extending/application-actions.md
@@ -118,3 +118,6 @@ Below is the list of public actions types you can use in the plugin definitions
| FULLSCREEN_VIEWER | n/a | Enters fullscreen mode to view the file opened in the Viewer. |
| LOGOUT | n/a | Log out and redirect to Login screen. |
| RELOAD_DOCUMENT_LIST | n/a | Reload active document list |
+| TOGGLE_SEARCH_FILTER | n/a | Toggle Filter component visibility in Search Results. |
+| SHOW_SEARCH_FILTER | n/a | Show Filter component in Search Results. |
+| HIDE_SEARCH_FILTER | n/a | Hide Filter component in Search Results |
diff --git a/e2e/components/toolbar/toolbar.ts b/e2e/components/toolbar/toolbar.ts
index ed1ff9cf7..2525f594e 100755
--- a/e2e/components/toolbar/toolbar.ts
+++ b/e2e/components/toolbar/toolbar.ts
@@ -36,6 +36,7 @@ export class Toolbar extends Component {
share: `.mat-icon-button[title='Share']`,
shareEdit: `.mat-icon-button[title='Shared link settings']`,
view: `.mat-icon-button[title='View']`,
+ searchFilterToggle: `.mat-icon-button[title='Toggle search filter']`,
download: `.mat-icon-button[title='Download']`,
editFolder: 'app.toolbar.editFolder',
viewDetails: `.mat-icon-button[title='View details']`,
@@ -52,6 +53,7 @@ export class Toolbar extends Component {
shareButton: ElementFinder = this.component.element(by.css(Toolbar.selectors.share));
shareEditButton: ElementFinder = this.component.element(by.css(Toolbar.selectors.shareEdit));
viewButton: ElementFinder = this.component.element(by.css(Toolbar.selectors.view));
+ searchFiltersToggleButton: ElementFinder = this.component.element(by.css(Toolbar.selectors.searchFilterToggle));
downloadButton: ElementFinder = this.component.element(by.css(Toolbar.selectors.download));
editFolderButton: ElementFinder = this.component.element(by.id(Toolbar.selectors.editFolder));
viewDetailsButton: ElementFinder = this.component.element(by.css(Toolbar.selectors.viewDetails));
@@ -71,6 +73,10 @@ export class Toolbar extends Component {
return count === 0;
}
+ async numberOfAvailableActions() {
+ return await this.buttons.count();
+ }
+
async isButtonPresent(title: string) {
const elem = this.component.element(by.css(`${Toolbar.selectors.button}[title="${title}"]`));
return await elem.isPresent();
@@ -121,6 +127,10 @@ export class Toolbar extends Component {
return await browser.isElementPresent(this.viewButton);
}
+ async isToggleSearchFiltersPresent() {
+ return await browser.isElementPresent(this.searchFiltersToggleButton);
+ }
+
async isDownloadPresent() {
return await browser.isElementPresent(this.downloadButton);
}
@@ -232,7 +242,6 @@ export class Toolbar extends Component {
return await this.menu.clickMenuItem('Upload new version');
}
-
async clickFullScreen() {
return await this.fullScreenButton.click();
}
diff --git a/e2e/suites/actions/toolbar-single-selection.test.ts b/e2e/suites/actions/toolbar-single-selection.test.ts
index d2b930f44..e61fa2cb4 100755
--- a/e2e/suites/actions/toolbar-single-selection.test.ts
+++ b/e2e/suites/actions/toolbar-single-selection.test.ts
@@ -673,12 +673,13 @@ describe('Toolbar actions - single selection : ', () => {
done();
});
- it('actions are not displayed when no item is selected - [C291815]', async () => {
+ it('nodes actions are not displayed when no item is selected - [C291815]', async () => {
await searchInput.clickSearchButton();
await searchInput.checkFilesAndFolders();
await searchInput.searchForTextAndCloseSearchOptions(fileInSite);
- expect(await toolbar.isEmpty()).toBe(true, `actions displayed though nothing selected`);
+ expect(await toolbar.isToggleSearchFiltersPresent()).toBe(true, `Search filter toggle is not displayed`);
+ expect(await toolbar.numberOfAvailableActions()).toBe(1, `more than 1 action is present`);
});
it('correct actions appear when a file is selected - [C291816]', async () => {
diff --git a/src/app/components/search/search-results/search-results.component.html b/src/app/components/search/search-results/search-results.component.html
index 5a5243016..85f1ba426 100644
--- a/src/app/components/search/search-results/search-results.component.html
+++ b/src/app/components/search/search-results/search-results.component.html
@@ -13,7 +13,10 @@
;
+
searchedWord: string;
queryParamName = 'q';
data: NodePaging;
@@ -73,6 +77,8 @@ export class SearchResultsComponent extends PageComponent implements OnInit {
skipCount: 0,
maxItems: 25
};
+
+ this.showFacetFilter$ = store.select(showFacetFilter);
}
ngOnInit() {
diff --git a/src/app/store/actions/search.actions.ts b/src/app/store/actions/search.actions.ts
index ba3ffafae..087e38e9d 100644
--- a/src/app/store/actions/search.actions.ts
+++ b/src/app/store/actions/search.actions.ts
@@ -26,8 +26,23 @@
import { Action } from '@ngrx/store';
export const SEARCH_BY_TERM = 'SEARCH_BY_TERM';
+export const TOGGLE_SEARCH_FILTER = 'TOGGLE_SEARCH_FILTER';
+export const SHOW_SEARCH_FILTER = 'SHOW_SEARCH_FILTER';
+export const HIDE_SEARCH_FILTER = 'HIDE_SEARCH_FILTER';
export class SearchByTermAction implements Action {
readonly type = SEARCH_BY_TERM;
constructor(public payload: string, public searchOptions?: any) {}
}
+
+export class ToggleSearchFilterAction implements Action {
+ readonly type = TOGGLE_SEARCH_FILTER;
+}
+
+export class ShowSearchFilterAction implements Action {
+ readonly type = SHOW_SEARCH_FILTER;
+}
+
+export class HideSearchFilterAction implements Action {
+ readonly type = HIDE_SEARCH_FILTER;
+}
diff --git a/src/app/store/reducers/app.reducer.ts b/src/app/store/reducers/app.reducer.ts
index 289f175a3..7b7e3a23e 100644
--- a/src/app/store/reducers/app.reducer.ts
+++ b/src/app/store/reducers/app.reducer.ts
@@ -49,6 +49,11 @@ import {
SET_INITIAL_STATE,
SetInitialStateAction
} from '../actions/app.actions';
+import {
+ TOGGLE_SEARCH_FILTER,
+ SHOW_SEARCH_FILTER,
+ HIDE_SEARCH_FILTER
+} from '../actions/search.actions';
export function appReducer(
state: AppState = INITIAL_APP_STATE,
@@ -89,6 +94,15 @@ export function appReducer(
case SET_REPOSITORY_INFO:
newState = updateRepositoryStatus(state, action);
break;
+ case TOGGLE_SEARCH_FILTER:
+ newState = toggleSearchFilter(state);
+ break;
+ case SHOW_SEARCH_FILTER:
+ newState = showSearchFilter(state);
+ break;
+ case HIDE_SEARCH_FILTER:
+ newState = hideSearchFilter(state);
+ break;
default:
newState = Object.assign({}, state);
}
@@ -96,6 +110,24 @@ export function appReducer(
return newState;
}
+function toggleSearchFilter(state: AppState): AppState {
+ const newState = Object.assign({}, state);
+ newState.showFacetFilter = !newState.showFacetFilter;
+ return newState;
+}
+
+function hideSearchFilter(state: AppState): AppState {
+ const newState = Object.assign({}, state);
+ newState.showFacetFilter = false;
+ return newState;
+}
+
+function showSearchFilter(state: AppState): AppState {
+ const newState = Object.assign({}, state);
+ newState.showFacetFilter = true;
+ return newState;
+}
+
function updateLanguagePicker(
state: AppState,
action: SetLanguagePickerAction
diff --git a/src/app/store/selectors/app.selectors.ts b/src/app/store/selectors/app.selectors.ts
index 0030b7354..0b9eb3189 100644
--- a/src/app/store/selectors/app.selectors.ts
+++ b/src/app/store/selectors/app.selectors.ts
@@ -78,6 +78,11 @@ export const infoDrawerOpened = createSelector(
state => state.infoDrawerOpened
);
+export const showFacetFilter = createSelector(
+ selectApp,
+ state => state.showFacetFilter
+);
+
export const documentDisplayMode = createSelector(
selectApp,
state => state.documentDisplayMode
diff --git a/src/app/store/states/app.state.ts b/src/app/store/states/app.state.ts
index ea85c8209..76955d0d1 100644
--- a/src/app/store/states/app.state.ts
+++ b/src/app/store/states/app.state.ts
@@ -40,6 +40,7 @@ export interface AppState {
user: ProfileState;
navigation: NavigationState;
infoDrawerOpened: boolean;
+ showFacetFilter: boolean;
documentDisplayMode: string;
repository: RepositoryInfo;
}
@@ -66,6 +67,7 @@ export const INITIAL_APP_STATE: AppState = {
currentFolder: null
},
infoDrawerOpened: false,
+ showFacetFilter: true,
documentDisplayMode: 'list',
repository: {
status: {
diff --git a/src/assets/app.extensions.json b/src/assets/app.extensions.json
index ad81825b9..f8ff29062 100644
--- a/src/assets/app.extensions.json
+++ b/src/assets/app.extensions.json
@@ -417,6 +417,18 @@
}
],
"toolbar": [
+ {
+ "id": "app.toolbar.searchFilter",
+ "order": 50,
+ "title": "APP.BROWSE.SEARCH.TOGGLE_SEARCH_FILTER",
+ "icon": "view_list",
+ "actions": {
+ "click": "TOGGLE_SEARCH_FILTER"
+ },
+ "rules": {
+ "visible": "app.navigation.isSearchResults"
+ }
+ },
{
"id": "app.toolbar.share",
"order": 100,
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 83e55abe5..61b297b58 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -168,7 +168,8 @@
"SIZE": "Size"
},
"UNKNOWN_LOCATION": "Unknown",
- "NO_RESULTS": "Your search returned 0 results"
+ "NO_RESULTS": "Your search returned 0 results",
+ "TOGGLE_SEARCH_FILTER": "Toggle search filter"
},
"SEARCH_LIBRARIES": {
"TITLE": "Libraries found...",