diff --git a/src/app/components/search/search-input/search-input.component.ts b/src/app/components/search/search-input/search-input.component.ts index deae299e6..ca480b03c 100644 --- a/src/app/components/search/search-input/search-input.component.ts +++ b/src/app/components/search/search-input/search-input.component.ts @@ -44,14 +44,13 @@ import { Store } from '@ngrx/store'; import { AppStore } from '../../../store/states/app.state'; import { SearchByTermAction } from '../../../store/actions'; import { filter, takeUntil } from 'rxjs/operators'; -import { SearchLibrariesQueryBuilderService } from '../search-libraries-results/search-libraries-query-builder.service'; import { SearchQueryBuilderService } from '@alfresco/adf-content-services'; import { ContentManagementService } from '../../../services/content-management.service'; import { Subject } from 'rxjs'; export enum SearchOptionIds { - Files = 'files', - Folders = 'folders', + Files = 'content', + Folders = 'folder', Libraries = 'libraries' } @@ -94,7 +93,6 @@ export class SearchInputComponent implements OnInit, OnDestroy { searchInputControl: SearchInputControlComponent; constructor( - private librariesQueryBuilder: SearchLibrariesQueryBuilderService, private queryBuilder: SearchQueryBuilderService, private content: ContentManagementService, private router: Router, @@ -185,24 +183,27 @@ export class SearchInputComponent implements OnInit, OnDestroy { onOptionChange() { this.has400LibraryError = false; - if (this.searchedWord) { - if (this.isLibrariesChecked()) { - if (this.onLibrariesSearchResults) { - this.librariesQueryBuilder.update(); - } else { - this.store.dispatch( - new SearchByTermAction(this.searchedWord, this.searchOptions) - ); - } - } else if (this.isContentChecked()) { - if (this.onSearchResults) { - // TODO: send here data to this.queryBuilder to be able to search for files/folders - this.queryBuilder.update(); - } else { - this.store.dispatch( - new SearchByTermAction(this.searchedWord, this.searchOptions) - ); - } + if (this.isLibrariesChecked()) { + if (this.searchedWord && !this.onLibrariesSearchResults) { + this.store.dispatch( + new SearchByTermAction(this.searchedWord, this.searchOptions) + ); + } + } else { + if (this.isFoldersChecked() && !this.isFilesChecked()) { + this.filterContent(SearchOptionIds.Folders); + } else if (this.isFilesChecked() && !this.isFoldersChecked()) { + this.filterContent(SearchOptionIds.Files); + } else { + this.removeContentFilters(); + } + + if (this.onSearchResults) { + this.queryBuilder.update(); + } else if (this.searchedWord) { + this.store.dispatch( + new SearchByTermAction(this.searchedWord, this.searchOptions) + ); } } } @@ -246,4 +247,21 @@ export class SearchInputComponent implements OnInit, OnDestroy { } return false; } + + filterContent(option: SearchOptionIds.Folders | SearchOptionIds.Files) { + const oppositeOption = + option === SearchOptionIds.Folders + ? SearchOptionIds.Files + : SearchOptionIds.Folders; + + this.queryBuilder.addFilterQuery(`+TYPE:'cm:${option}'`); + this.queryBuilder.removeFilterQuery(`+TYPE:'cm:${oppositeOption}'`); + } + + removeContentFilters() { + this.queryBuilder.removeFilterQuery(`+TYPE:'cm:${SearchOptionIds.Files}'`); + this.queryBuilder.removeFilterQuery( + `+TYPE:'cm:${SearchOptionIds.Folders}'` + ); + } } diff --git a/src/app/components/search/search-libraries-results/search-libraries-results.component.ts b/src/app/components/search/search-libraries-results/search-libraries-results.component.ts index c33c96a24..74a29ee8e 100644 --- a/src/app/components/search/search-libraries-results/search-libraries-results.component.ts +++ b/src/app/components/search/search-libraries-results/search-libraries-results.component.ts @@ -87,8 +87,6 @@ export class SearchLibrariesResultsComponent extends PageComponent }), this.librariesQueryBuilder.executed.subscribe(data => { - this.librariesQueryBuilder.paging.skipCount = 0; - this.onSearchResultLoaded(data); this.isLoading = false; }), @@ -119,6 +117,7 @@ export class SearchLibrariesResultsComponent extends PageComponent const query = this.formatSearchQuery(this.searchedWord); if (query && query.length > 1) { + this.librariesQueryBuilder.paging.skipCount = 0; this.librariesQueryBuilder.userQuery = query; this.librariesQueryBuilder.update(); } else { diff --git a/src/app/components/search/search-results/search-results.component.ts b/src/app/components/search/search-results/search-results.component.ts index 579458572..e5b14adc2 100644 --- a/src/app/components/search/search-results/search-results.component.ts +++ b/src/app/components/search/search-results/search-results.component.ts @@ -42,8 +42,7 @@ import { AppConfigService } from '@alfresco/adf-core'; @Component({ selector: 'aca-search-results', templateUrl: './search-results.component.html', - styleUrls: ['./search-results.component.scss'], - providers: [SearchQueryBuilderService] + styleUrls: ['./search-results.component.scss'] }) export class SearchResultsComponent extends PageComponent implements OnInit { @ViewChild('search') diff --git a/src/app/store/effects/search.effects.ts b/src/app/store/effects/search.effects.ts index 59b9a0a42..01447cb82 100644 --- a/src/app/store/effects/search.effects.ts +++ b/src/app/store/effects/search.effects.ts @@ -28,6 +28,7 @@ import { Injectable } from '@angular/core'; import { map } from 'rxjs/operators'; import { SEARCH_BY_TERM, SearchByTermAction } from '../actions/search.actions'; import { Router } from '@angular/router'; +import { SearchOptionIds } from '../../components/search/search-input/search-input.component'; @Injectable() export class SearchEffects { @@ -37,11 +38,12 @@ export class SearchEffects { searchByTerm$ = this.actions$.pipe( ofType(SEARCH_BY_TERM), map(action => { - if ( - action.searchOptions && - action.searchOptions[2] && - action.searchOptions[2].value - ) { + const libItem = action.searchOptions.find( + item => item.id === SearchOptionIds.Libraries + ); + const librarySelected = !!libItem && libItem.value; + + if (librarySelected) { this.router.navigateByUrl('/search-libraries;q=' + action.payload); } else { this.router.navigateByUrl('/search;q=' + action.payload);