Skip to content

Commit 8064300

Browse files
111731: Hide advanced search section when no filters are available and hide it on the home page
1 parent 92cc112 commit 8064300

7 files changed

Lines changed: 86 additions & 17 deletions

File tree

src/app/core/shared/search/search-configuration.service.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import { ViewMode } from '../view-mode.model';
2929
import { SearchFilterConfig } from '../../../shared/search/models/search-filter-config.model';
3030
import { FacetConfigResponse } from '../../../shared/search/models/facet-config-response.model';
3131
import { addOperatorToFilterValue } from '../../../shared/search/search.utils';
32+
import { FilterConfig } from './search-filters/search-config.model';
33+
import { FilterType } from '../../../shared/search/models/filter-type.model';
3234

3335
/**
3436
* Service that performs all actions that have to do with the current search configuration
@@ -251,6 +253,21 @@ export class SearchConfigurationService implements OnDestroy {
251253
}));
252254
}
253255

256+
/**
257+
* Return the {@link FilterConfig}s of the filters that should be displayed for the current configuration/scope
258+
*
259+
* @param configuration The search configuration
260+
* @param scope The scope if exists
261+
*/
262+
public getConfigurationAdvancedSearchFilters(configuration: string, scope?: string): Observable<FilterConfig[]> {
263+
return this.getConfigurationSearchConfig(configuration, scope).pipe(
264+
map((searchConfiguration: SearchConfig) => {
265+
return searchConfiguration.filters
266+
.filter((filterConfig: FilterConfig) => filterConfig.type !== FilterType.range);
267+
}),
268+
);
269+
}
270+
254271
setPaginationId(paginationId): void {
255272
if (isNotEmpty(paginationId)) {
256273
const currentValue: PaginatedSearchOptions = this.paginatedSearchOptions.getValue();

src/app/shared/search/advanced-search/advanced-search.component.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Component, Input, OnInit, OnDestroy } from '@angular/core';
2-
import { map, Observable, of as observableOf, Subscription } from 'rxjs';
2+
import { Observable, of as observableOf, Subscription } from 'rxjs';
33
import { take } from 'rxjs/operators';
44
import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service';
5-
import { FilterConfig, SearchConfig } from '../../../core/shared/search/search-filters/search-config.model';
5+
import { FilterConfig } from '../../../core/shared/search/search-filters/search-config.model';
66
import { SearchFilterService } from '../../../core/shared/search/search-filter.service';
77
import { SearchFilterConfig } from '../models/search-filter-config.model';
88
import { Router, Params } from '@angular/router';
@@ -11,17 +11,31 @@ import { hasValue, isNotEmpty } from '../../empty.util';
1111
import { SearchService } from '../../../core/shared/search/search.service';
1212
import { FilterType } from '../models/filter-type.model';
1313

14+
/**
15+
* This component represents the advanced search in the search sidebar.
16+
*/
1417
@Component({
1518
selector: 'ds-advanced-search',
1619
templateUrl: './advanced-search.component.html',
1720
styleUrls: ['./advanced-search.component.scss'],
1821
})
1922
export class AdvancedSearchComponent implements OnInit, OnDestroy {
2023

24+
/**
25+
* The current search configuration
26+
*/
2127
@Input() configuration: string;
2228

29+
/**
30+
* The facet configurations, used to determine if suggestions should be retrieved for the selected search filter
31+
*/
2332
@Input() filtersConfig: SearchFilterConfig[];
2433

34+
/**
35+
* The current search scope
36+
*/
37+
@Input() scope: string;
38+
2539
advancedFilters$: Observable<FilterConfig[]>;
2640

2741
advancedFilterMap: Map<string, FilterConfig> = new Map();
@@ -51,9 +65,7 @@ export class AdvancedSearchComponent implements OnInit, OnDestroy {
5165
}
5266

5367
ngOnInit(): void {
54-
this.advancedFilters$ = this.searchConfigurationService.getConfigurationSearchConfig(this.configuration).pipe(
55-
map((searchConfiguration: SearchConfig) => searchConfiguration.filters.filter((filter: FilterConfig) => filter.type !== FilterType.range)),
56-
);
68+
this.advancedFilters$ = this.searchConfigurationService.getConfigurationAdvancedSearchFilters(this.configuration, this.scope);
5769
this.subs.push(this.advancedFilters$.subscribe((filters: FilterConfig[]) => {
5870
const filterMap: Map<string, FilterConfig> = new Map();
5971
if (filters.length > 0) {

src/app/shared/search/search-sidebar/search-sidebar.component.html

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
[refreshFilters]="refreshFilters"
2424
[inPlaceSearch]="inPlaceSearch">
2525
</ds-themed-search-filters>
26-
<ds-advanced-search [configuration]="configuration"
27-
[filtersConfig]="(filters | async)?.payload">
26+
<ds-advanced-search *ngIf="inPlaceSearch && (this.showAdvancedSearch$ | async) === true"
27+
[configuration]="configuration"
28+
[filtersConfig]="(filters | async)?.payload"
29+
[scope]="currentScope">
2830
</ds-advanced-search>
2931
<ds-themed-search-settings [currentSortOption]="currentSortOption"
3032
[sortOptionsList]="sortOptionsList"></ds-themed-search-settings>

src/app/shared/search/search-sidebar/search-sidebar.component.spec.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,30 @@ import { TranslateModule } from '@ngx-translate/core';
33
import { SearchSidebarComponent } from './search-sidebar.component';
44
import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap';
55
import { By } from '@angular/platform-browser';
6-
import { NO_ERRORS_SCHEMA } from '@angular/core';
6+
import { SearchConfigurationServiceStub } from '../../testing/search-configuration-service.stub';
7+
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
8+
import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service';
79

810
describe('SearchSidebarComponent', () => {
911
let comp: SearchSidebarComponent;
1012
let fixture: ComponentFixture<SearchSidebarComponent>;
11-
// waitForAsync beforeEach
13+
14+
let searchConfigurationService: SearchConfigurationServiceStub;
15+
1216
beforeEach(waitForAsync(() => {
17+
searchConfigurationService = new SearchConfigurationServiceStub();
18+
1319
TestBed.configureTestingModule({
14-
imports: [TranslateModule.forRoot(), NgbCollapseModule],
20+
imports: [
21+
TranslateModule.forRoot(),
22+
NgbCollapseModule,
23+
],
1524
declarations: [SearchSidebarComponent],
16-
schemas: [NO_ERRORS_SCHEMA],
17-
})
18-
.compileComponents(); // compile template and css
25+
providers: [
26+
{ provide: SearchConfigurationService, useValue: searchConfigurationService },
27+
],
28+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
29+
}).compileComponents();
1930
}));
2031

2132
// synchronous beforeEach

src/app/shared/search/search-sidebar/search-sidebar.component.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { Component, EventEmitter, Input, Output } from '@angular/core';
1+
import { Component, EventEmitter, Input, Output, OnInit } from '@angular/core';
2+
import { map } from 'rxjs/operators';
23

34
import { SearchConfigurationOption } from '../search-switch-configuration/search-configuration-option.model';
45
import { BehaviorSubject, Observable } from 'rxjs';
@@ -7,6 +8,8 @@ import { SortOptions } from '../../../core/cache/models/sort-options.model';
78
import { ViewMode } from '../../../core/shared/view-mode.model';
89
import { RemoteData } from '../../../core/data/remote-data';
910
import { SearchFilterConfig } from '../models/search-filter-config.model';
11+
import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service';
12+
import { FilterConfig } from '../../../core/shared/search/search-filters/search-config.model';
1013

1114
/**
1215
* This component renders a simple item page.
@@ -23,7 +26,7 @@ import { SearchFilterConfig } from '../models/search-filter-config.model';
2326
/**
2427
* Component representing the sidebar on the search page
2528
*/
26-
export class SearchSidebarComponent {
29+
export class SearchSidebarComponent implements OnInit {
2730

2831
/**
2932
* The configuration to use for the search options
@@ -100,4 +103,17 @@ export class SearchSidebarComponent {
100103
*/
101104
@Output() changeViewMode: EventEmitter<ViewMode> = new EventEmitter<ViewMode>();
102105

106+
showAdvancedSearch$: Observable<boolean>;
107+
108+
constructor(
109+
protected searchConfigurationService: SearchConfigurationService,
110+
) {
111+
}
112+
113+
ngOnInit(): void {
114+
this.showAdvancedSearch$ = this.searchConfigurationService.getConfigurationAdvancedSearchFilters(this.configuration, this.currentScope).pipe(
115+
map((advancedFilters: FilterConfig[]) => advancedFilters.length > 0),
116+
);
117+
}
118+
103119
}

src/app/shared/search/search.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
[searchOptions]="(searchOptions$ | async)"
7373
[sortOptionsList]="(sortOptionsList$ | async)"
7474
[currentSortOption]="(currentSortOptions$ | async)"
75+
[inPlaceSearch]="inPlaceSearch"
7576
[viewModeList]="viewModeList"
7677
[showViewModes]="showViewModes"
7778
(toggleSidebar)="closeSidebar()"

src/app/shared/testing/search-configuration-service.stub.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
import { BehaviorSubject, of as observableOf, Observable } from 'rxjs';
22
import { Params } from '@angular/router';
3-
import { SearchConfig } from '../../core/shared/search/search-filters/search-config.model';
4-
3+
import {
4+
FilterConfig,
5+
SearchConfig,
6+
} from '../../core/shared/search/search-filters/search-config.model';
7+
8+
/**
9+
* Stub class of {@link SearchConfigurationService}
10+
*/
511
export class SearchConfigurationServiceStub {
612

713
public paginationID = 'test-id';
@@ -25,6 +31,10 @@ export class SearchConfigurationServiceStub {
2531
return observableOf(a);
2632
}
2733

34+
getConfigurationAdvancedSearchFilters(_configuration: string, _scope?: string): Observable<FilterConfig[]> {
35+
return observableOf([]);
36+
}
37+
2838
getConfig () {
2939
return observableOf({ hasSucceeded: true, payload: [] });
3040
}

0 commit comments

Comments
 (0)