diff --git a/src/app/shared/search/advanced-search/advanced-search.component.html b/src/app/shared/search/advanced-search/advanced-search.component.html index f6948b455a..a3e5db6138 100644 --- a/src/app/shared/search/advanced-search/advanced-search.component.html +++ b/src/app/shared/search/advanced-search/advanced-search.component.html @@ -1,12 +1,12 @@

{{ 'search.sidebar.advanced-search.title' | translate }}

diff --git a/src/app/shared/search/advanced-search/advanced-search.component.spec.ts b/src/app/shared/search/advanced-search/advanced-search.component.spec.ts index cbda0cf3c0..3b80c6abee 100644 --- a/src/app/shared/search/advanced-search/advanced-search.component.spec.ts +++ b/src/app/shared/search/advanced-search/advanced-search.component.spec.ts @@ -2,8 +2,10 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedSearchComponent } from './advanced-search.component'; import { Router } from '@angular/router'; import { RouterStub } from '../../testing/router.stub'; +import { SearchService } from '../../../core/shared/search/search.service'; import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; import { SearchFilterService } from '../../../core/shared/search/search-filter.service'; +import { SearchServiceStub } from '../../testing/search-service.stub'; import { SearchConfigurationServiceStub } from '../../testing/search-configuration-service.stub'; import { SearchFilterServiceStub } from '../../testing/search-filter-service.stub'; import { TranslateModule } from '@ngx-translate/core'; @@ -13,11 +15,13 @@ describe('AdvancedSearchComponent', () => { let fixture: ComponentFixture; let router: RouterStub; + let searchService: SearchServiceStub; let searchConfigurationService: SearchConfigurationServiceStub; let searchFilterService: SearchFilterServiceStub; beforeEach(async () => { router = new RouterStub(); + searchService = new SearchServiceStub(); searchConfigurationService = new SearchConfigurationServiceStub(); searchFilterService = new SearchFilterServiceStub(); @@ -30,6 +34,7 @@ describe('AdvancedSearchComponent', () => { ], providers: [ { provide: Router, useValue: router }, + { provide: SearchService, useValue: searchService }, { provide: SearchConfigurationService, useValue: searchConfigurationService }, { provide: SearchFilterService, useValue: searchFilterService }, ], diff --git a/src/app/shared/search/advanced-search/advanced-search.component.ts b/src/app/shared/search/advanced-search/advanced-search.component.ts index 220649fb03..2864ba02eb 100644 --- a/src/app/shared/search/advanced-search/advanced-search.component.ts +++ b/src/app/shared/search/advanced-search/advanced-search.component.ts @@ -1,19 +1,21 @@ -import { Component, Input, OnInit } from '@angular/core'; -import { map, Observable, of as observableOf } from 'rxjs'; +import { Component, Input, OnInit, OnDestroy } from '@angular/core'; +import { map, Observable, of as observableOf, Subscription } from 'rxjs'; +import { take } from 'rxjs/operators'; import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; import { FilterConfig, SearchConfig } from '../../../core/shared/search/search-filters/search-config.model'; import { SearchFilterService } from '../../../core/shared/search/search-filter.service'; import { SearchFilterConfig } from '../models/search-filter-config.model'; -import { Router } from '@angular/router'; +import { Router, Params } from '@angular/router'; import { InputSuggestion } from '../../input-suggestions/input-suggestions.model'; -import { hasValue } from '../../empty.util'; +import { hasValue, isNotEmpty } from '../../empty.util'; +import { SearchService } from '../../../core/shared/search/search.service'; @Component({ selector: 'ds-advanced-search', templateUrl: './advanced-search.component.html', styleUrls: ['./advanced-search.component.scss'], }) -export class AdvancedSearchComponent implements OnInit { +export class AdvancedSearchComponent implements OnInit, OnDestroy { @Input() configuration: string; @@ -37,8 +39,11 @@ export class AdvancedSearchComponent implements OnInit { */ filterSearchResults$: Observable = observableOf([]); + subs: Subscription[] = []; + constructor( protected router: Router, + protected searchService: SearchService, protected searchConfigurationService: SearchConfigurationService, protected searchFilterService: SearchFilterService, ) { @@ -63,6 +68,10 @@ export class AdvancedSearchComponent implements OnInit { ); } + ngOnDestroy(): void { + this.subs.forEach((sub: Subscription) => sub.unsubscribe()); + } + findSuggestions(query: string): void { if (hasValue(this.filtersConfig)) { for (const filterConfig of this.filtersConfig) { @@ -73,4 +82,15 @@ export class AdvancedSearchComponent implements OnInit { } } + applyFilter(): void { + if (isNotEmpty(this.currentValue)) { + this.subs.push(this.searchConfigurationService.selectNewAppliedFilterParams(this.currentFilter, this.currentValue.trim(), this.currentOperator).pipe(take(1)).subscribe((params: Params) => { + void this.router.navigate([this.searchService.getSearchLink()], { + queryParams: params, + }); + this.currentValue = ''; + })); + } + } + }