move search button to extensions

This commit is contained in:
Denys Vuika
2023-03-01 15:45:22 +00:00
committed by Sheena Malhotra
parent be64da15ef
commit 52cbf442d4
9 changed files with 44 additions and 38 deletions

View File

@@ -287,6 +287,23 @@
} }
], ],
"toolbar": [ "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", "id": "app.toolbar.share",
"type": "custom", "type": "custom",

View File

@@ -21,6 +21,5 @@
</div> </div>
</mat-menu> </mat-menu>
<adf-toolbar-divider *ngIf="canShowSearchSeparator()"></adf-toolbar-divider>
<aca-search-input class="app-search-input"></aca-search-input> <aca-search-input class="app-search-input"></aca-search-input>
</adf-toolbar> </adf-toolbar>

View File

@@ -78,8 +78,4 @@ export class HeaderActionsComponent implements OnInit, OnDestroy {
canShowUploadButton(): boolean { canShowUploadButton(): boolean {
return this.uploadActions.length > 0; return this.uploadActions.length > 0;
} }
canShowSearchSeparator(): boolean {
return this.canShowUploadButton() || this.canShowCreateButton();
}
} }

View File

@@ -28,13 +28,6 @@
</mat-form-field> </mat-form-field>
</div> </div>
<div *ngIf="!searchInputService.isSearchRoute()"
class="app-search-container">
<button mat-icon-button class="app-search-button" (click)="navigateToSearch()" [title]="'SEARCH.BUTTON.TOOLTIP' | translate">
<mat-icon [attr.aria-label]="'SEARCH.BUTTON.ARIA-LABEL' | translate">search</mat-icon>
</button>
</div>
<mat-menu #searchOptionsMenu="matMenu" [overlapTrigger]="true" class="app-search-options-menu"> <mat-menu #searchOptionsMenu="matMenu" [overlapTrigger]="true" class="app-search-options-menu">
<div (keydown.tab)="$event.stopPropagation()" (keydown.shift.tab)="$event.stopPropagation()"> <div (keydown.tab)="$event.stopPropagation()" (keydown.shift.tab)="$event.stopPropagation()">
<div cdkTrapFocus> <div cdkTrapFocus>

View File

@@ -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()', () => { describe('exitSearch()', () => {
it('should exit search on click of close icon', async () => { it('should exit search on click of close icon', async () => {
spyOn(searchInputService, 'isSearchRoute').and.returnValue(true); spyOn(searchInputService, 'isSearchRoute').and.returnValue(true);

View File

@@ -111,10 +111,6 @@ export class SearchInputComponent implements OnInit, OnDestroy {
} }
} }
navigateToSearch() {
this.searchInputService.navigateToSearch();
}
exitSearch() { exitSearch() {
this.searchInputService.navigateBack(); this.searchInputService.navigateBack();
} }

View File

@@ -26,12 +26,24 @@
import { Actions, ofType, createEffect } from '@ngrx/effects'; import { Actions, ofType, createEffect } from '@ngrx/effects';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { map } from 'rxjs/operators'; 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 { Router } from '@angular/router';
import { SearchNavigationService } from '../../components/search/search-navigation.service';
@Injectable() @Injectable()
export class SearchEffects { 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<SearchAction>(SearchActionTypes.Search),
map(() => {
this.searchNavigationService.navigateToSearch();
})
),
{ dispatch: false }
);
searchByTerm$ = createEffect( searchByTerm$ = createEffect(
() => () =>

View File

@@ -91,6 +91,13 @@ export interface AcaRuleContext extends RuleContext {
*/ */
export const isContentServiceEnabled = (): boolean => localStorage && localStorage.getItem('contentService') !== 'false'; 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 * Checks if upload action is supported for the given context
* JSON ref: `app.isUploadSupported` * JSON ref: `app.isUploadSupported`

View File

@@ -27,9 +27,15 @@ import { Action } from '@ngrx/store';
import { SearchOptionModel } from '../models/search-option.model'; import { SearchOptionModel } from '../models/search-option.model';
export enum SearchActionTypes { export enum SearchActionTypes {
Search = 'SEARCH',
SearchByTerm = 'SEARCH_BY_TERM' SearchByTerm = 'SEARCH_BY_TERM'
} }
export class SearchAction implements Action {
readonly type = SearchActionTypes.Search;
constructor() {}
}
export class SearchByTermAction implements Action { export class SearchByTermAction implements Action {
readonly type = SearchActionTypes.SearchByTerm; readonly type = SearchActionTypes.SearchByTerm;
constructor(public payload: string, public searchOptions?: SearchOptionModel[]) {} constructor(public payload: string, public searchOptions?: SearchOptionModel[]) {}