diff --git a/projects/aca-content/assets/app.extensions.json b/projects/aca-content/assets/app.extensions.json index 66a77d937..356d1c09c 100644 --- a/projects/aca-content/assets/app.extensions.json +++ b/projects/aca-content/assets/app.extensions.json @@ -287,6 +287,23 @@ } ], "toolbar": [ + { + "id": "app.toolbar.search.separator", + "type": "separator", + "order": 90 + }, + { + "id": "app.toolbar.search", + "order": 90, + "title": "SEARCH.BUTTON.TOOLTIP", + "icon": "search", + "actions": { + "click": "SEARCH" + }, + "rules": { + "visible": "app.isSearchSupported" + } + }, { "id": "app.toolbar.share", "type": "custom", diff --git a/projects/aca-content/src/lib/components/header-actions/header-actions.component.html b/projects/aca-content/src/lib/components/header-actions/header-actions.component.html index 9eec2c0a8..8072bd181 100644 --- a/projects/aca-content/src/lib/components/header-actions/header-actions.component.html +++ b/projects/aca-content/src/lib/components/header-actions/header-actions.component.html @@ -21,6 +21,5 @@ - diff --git a/projects/aca-content/src/lib/components/header-actions/header-actions.component.ts b/projects/aca-content/src/lib/components/header-actions/header-actions.component.ts index 4019bea0f..59c18882d 100644 --- a/projects/aca-content/src/lib/components/header-actions/header-actions.component.ts +++ b/projects/aca-content/src/lib/components/header-actions/header-actions.component.ts @@ -78,8 +78,4 @@ export class HeaderActionsComponent implements OnInit, OnDestroy { canShowUploadButton(): boolean { return this.uploadActions.length > 0; } - - canShowSearchSeparator(): boolean { - return this.canShowUploadButton() || this.canShowCreateButton(); - } } diff --git a/projects/aca-content/src/lib/components/search/search-input/search-input.component.html b/projects/aca-content/src/lib/components/search/search-input/search-input.component.html index 5bc13c3d9..5e508e498 100644 --- a/projects/aca-content/src/lib/components/search/search-input/search-input.component.html +++ b/projects/aca-content/src/lib/components/search/search-input/search-input.component.html @@ -28,13 +28,6 @@ -
- -
-
diff --git a/projects/aca-content/src/lib/components/search/search-input/search-input.component.spec.ts b/projects/aca-content/src/lib/components/search/search-input/search-input.component.spec.ts index 852ecd588..b4d483c87 100644 --- a/projects/aca-content/src/lib/components/search/search-input/search-input.component.spec.ts +++ b/projects/aca-content/src/lib/components/search/search-input/search-input.component.spec.ts @@ -210,26 +210,6 @@ describe('SearchInputComponent', () => { }); }); - describe('navigateToSearch()', () => { - it('should navigate to search on click of search icon', async () => { - spyOn(searchInputService, 'isSearchRoute').and.returnValue(false); - spyOn(component, 'navigateToSearch').and.callThrough(); - spyOn(searchInputService, 'navigateToSearch').and.callThrough(); - - fixture.detectChanges(); - await fixture.whenStable(); - - const searchIcon = fixture.debugElement.nativeElement.querySelector('.app-search-button'); - searchIcon.click(); - - fixture.detectChanges(); - await fixture.whenStable(); - - expect(component.navigateToSearch).toHaveBeenCalled(); - expect(searchInputService.navigateToSearch).toHaveBeenCalledWith(); - }); - }); - describe('exitSearch()', () => { it('should exit search on click of close icon', async () => { spyOn(searchInputService, 'isSearchRoute').and.returnValue(true); diff --git a/projects/aca-content/src/lib/components/search/search-input/search-input.component.ts b/projects/aca-content/src/lib/components/search/search-input/search-input.component.ts index cef16888f..652abd5a9 100644 --- a/projects/aca-content/src/lib/components/search/search-input/search-input.component.ts +++ b/projects/aca-content/src/lib/components/search/search-input/search-input.component.ts @@ -111,10 +111,6 @@ export class SearchInputComponent implements OnInit, OnDestroy { } } - navigateToSearch() { - this.searchInputService.navigateToSearch(); - } - exitSearch() { this.searchInputService.navigateBack(); } diff --git a/projects/aca-content/src/lib/store/effects/search.effects.ts b/projects/aca-content/src/lib/store/effects/search.effects.ts index e6f5e215b..ad9b00cf2 100644 --- a/projects/aca-content/src/lib/store/effects/search.effects.ts +++ b/projects/aca-content/src/lib/store/effects/search.effects.ts @@ -26,12 +26,24 @@ import { Actions, ofType, createEffect } from '@ngrx/effects'; import { Injectable } from '@angular/core'; import { map } from 'rxjs/operators'; -import { SearchActionTypes, SearchByTermAction, SearchOptionIds } from '@alfresco/aca-shared/store'; +import { SearchAction, SearchActionTypes, SearchByTermAction, SearchOptionIds } from '@alfresco/aca-shared/store'; import { Router } from '@angular/router'; +import { SearchNavigationService } from '../../components/search/search-navigation.service'; @Injectable() export class SearchEffects { - constructor(private actions$: Actions, private router: Router) {} + constructor(private actions$: Actions, private router: Router, private searchNavigationService: SearchNavigationService) {} + + search$ = createEffect( + () => + this.actions$.pipe( + ofType(SearchActionTypes.Search), + map(() => { + this.searchNavigationService.navigateToSearch(); + }) + ), + { dispatch: false } + ); searchByTerm$ = createEffect( () => diff --git a/projects/aca-shared/rules/src/app.rules.ts b/projects/aca-shared/rules/src/app.rules.ts index 792f8d642..d0e16af7d 100644 --- a/projects/aca-shared/rules/src/app.rules.ts +++ b/projects/aca-shared/rules/src/app.rules.ts @@ -91,6 +91,13 @@ export interface AcaRuleContext extends RuleContext { */ export const isContentServiceEnabled = (): boolean => localStorage && localStorage.getItem('contentService') !== 'false'; +/** + * Checks if Search is supported for active view + * JSON ref: `app.isSearchSupported` + */ +export const isSearchSupported = (context: RuleContext): boolean => + [navigation.isNotSearchResults(context) /*, !hasSelection(context)*/].every(Boolean); + /** * Checks if upload action is supported for the given context * JSON ref: `app.isUploadSupported` diff --git a/projects/aca-shared/store/src/actions/search.actions.ts b/projects/aca-shared/store/src/actions/search.actions.ts index 6da0dcaa2..596916fa1 100644 --- a/projects/aca-shared/store/src/actions/search.actions.ts +++ b/projects/aca-shared/store/src/actions/search.actions.ts @@ -27,9 +27,15 @@ import { Action } from '@ngrx/store'; import { SearchOptionModel } from '../models/search-option.model'; export enum SearchActionTypes { + Search = 'SEARCH', SearchByTerm = 'SEARCH_BY_TERM' } +export class SearchAction implements Action { + readonly type = SearchActionTypes.Search; + constructor() {} +} + export class SearchByTermAction implements Action { readonly type = SearchActionTypes.SearchByTerm; constructor(public payload: string, public searchOptions?: SearchOptionModel[]) {}