Skip to content

Commit e94b094

Browse files
Merge branch 'advanced-search_contribute-7.6' into advanced-search_contribute-main
# Conflicts: # src/app/core/shared/search/search-configuration.service.ts # src/app/shared/search/advanced-search/advanced-search.component.ts # src/app/shared/search/search-sidebar/search-sidebar.component.html # src/app/shared/search/search-sidebar/search-sidebar.component.spec.ts # src/app/shared/search/search-sidebar/search-sidebar.component.ts # src/app/shared/testing/search-configuration-service.stub.ts
2 parents 029359b + 8064300 commit e94b094

6 files changed

Lines changed: 74 additions & 17 deletions

File tree

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ import {
5656
getFirstSucceededRemoteData,
5757
} from '../operators';
5858
import { ViewMode } from '../view-mode.model';
59+
import { SearchFilterConfig } from '../../../shared/search/models/search-filter-config.model';
60+
import { FacetConfigResponse } from '../../../shared/search/models/facet-config-response.model';
61+
import { addOperatorToFilterValue } from '../../../shared/search/search.utils';
62+
import { FilterConfig } from './search-filters/search-config.model';
63+
import { FilterType } from '../../../shared/search/models/filter-type.model';
5964
import {
6065
SearchConfig,
6166
SortConfig,
@@ -282,6 +287,21 @@ export class SearchConfigurationService implements OnDestroy {
282287
}));
283288
}
284289

290+
/**
291+
* Return the {@link FilterConfig}s of the filters that should be displayed for the current configuration/scope
292+
*
293+
* @param configuration The search configuration
294+
* @param scope The scope if exists
295+
*/
296+
public getConfigurationAdvancedSearchFilters(configuration: string, scope?: string): Observable<FilterConfig[]> {
297+
return this.getConfigurationSearchConfig(configuration, scope).pipe(
298+
map((searchConfiguration: SearchConfig) => {
299+
return searchConfiguration.filters
300+
.filter((filterConfig: FilterConfig) => filterConfig.type !== FilterType.range);
301+
}),
302+
);
303+
}
304+
285305
setPaginationId(paginationId): void {
286306
if (isNotEmpty(paginationId)) {
287307
const currentValue: PaginatedSearchOptions = this.paginatedSearchOptions.getValue();

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

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import {
1717
} from '@angular/router';
1818
import { TranslateModule } from '@ngx-translate/core';
1919
import {
20-
map,
2120
Observable,
2221
of as observableOf,
2322
Subscription,
@@ -31,10 +30,7 @@ import {
3130
import { SearchService } from '../../../core/shared/search/search.service';
3231
import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service';
3332
import { SearchFilterService } from '../../../core/shared/search/search-filter.service';
34-
import {
35-
FilterConfig,
36-
SearchConfig,
37-
} from '../../../core/shared/search/search-filters/search-config.model';
33+
import { FilterConfig } from '../../../core/shared/search/search-filters/search-config.model';
3834
import {
3935
hasValue,
4036
isNotEmpty,
@@ -44,6 +40,9 @@ import { InputSuggestion } from '../../input-suggestions/input-suggestions.model
4440
import { FilterType } from '../models/filter-type.model';
4541
import { SearchFilterConfig } from '../models/search-filter-config.model';
4642

43+
/**
44+
* This component represents the advanced search in the search sidebar.
45+
*/
4746
@Component({
4847
selector: 'ds-advanced-search',
4948
templateUrl: './advanced-search.component.html',
@@ -60,10 +59,21 @@ import { SearchFilterConfig } from '../models/search-filter-config.model';
6059
})
6160
export class AdvancedSearchComponent implements OnInit, OnDestroy {
6261

62+
/**
63+
* The current search configuration
64+
*/
6365
@Input() configuration: string;
6466

67+
/**
68+
* The facet configurations, used to determine if suggestions should be retrieved for the selected search filter
69+
*/
6570
@Input() filtersConfig: SearchFilterConfig[];
6671

72+
/**
73+
* The current search scope
74+
*/
75+
@Input() scope: string;
76+
6777
advancedFilters$: Observable<FilterConfig[]>;
6878

6979
advancedFilterMap: Map<string, FilterConfig> = new Map();
@@ -94,13 +104,7 @@ export class AdvancedSearchComponent implements OnInit, OnDestroy {
94104
}
95105

96106
ngOnInit(): void {
97-
this.advancedFilters$ = this.searchConfigurationService.getConfigurationSearchConfig(this.configuration).pipe(
98-
map((searchConfiguration: SearchConfig) => {
99-
return searchConfiguration.filters
100-
.filter((filter: FilterConfig) => this.appConfig.search.advancedFilters.filter.includes(filter.filter))
101-
.filter((filter: FilterConfig) => filter.type !== FilterType.range);
102-
}),
103-
);
107+
this.advancedFilters$ = this.searchConfigurationService.getConfigurationAdvancedSearchFilters(this.configuration, this.scope);
104108
this.subs.push(this.advancedFilters$.subscribe((filters: FilterConfig[]) => {
105109
const filterMap: Map<string, FilterConfig> = new Map();
106110
if (filters.length > 0) {

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424
[refreshFilters]="refreshFilters"
2525
[inPlaceSearch]="inPlaceSearch">
2626
</ds-search-filters>
27-
<ds-advanced-search *ngIf="inPlaceSearch && appConfig.search.advancedFilters.enabled"
27+
<ds-advanced-search *ngIf="inPlaceSearch && (this.showAdvancedSearch$ | async) === true"
2828
[configuration]="configuration"
29-
[filtersConfig]="(filters | async)?.payload">
29+
[filtersConfig]="(filters | async)?.payload"
30+
[scope]="currentScope">
3031
</ds-advanced-search>
3132
<ds-search-settings *ngIf="inPlaceSearch"
3233
[currentSortOption]="currentSortOption"

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,21 @@ import { AdvancedSearchComponent } from '../advanced-search/advanced-search.comp
1717
import { ThemedSearchFiltersComponent } from '../search-filters/themed-search-filters.component';
1818
import { ThemedSearchSettingsComponent } from '../search-settings/themed-search-settings.component';
1919
import { SearchSidebarComponent } from './search-sidebar.component';
20+
import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap';
21+
import { By } from '@angular/platform-browser';
22+
import { SearchConfigurationServiceStub } from '../../testing/search-configuration-service.stub';
23+
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
24+
import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service';
2025

2126
describe('SearchSidebarComponent', () => {
2227
let comp: SearchSidebarComponent;
2328
let fixture: ComponentFixture<SearchSidebarComponent>;
24-
// waitForAsync beforeEach
29+
30+
let searchConfigurationService: SearchConfigurationServiceStub;
31+
2532
beforeEach(waitForAsync(() => {
33+
searchConfigurationService = new SearchConfigurationServiceStub();
34+
2635
TestBed.configureTestingModule({
2736
imports: [
2837
TranslateModule.forRoot(),

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,24 @@ import {
77
EventEmitter,
88
Inject,
99
Input,
10+
OnInit,
1011
Output,
1112
} from '@angular/core';
1213
import { TranslateModule } from '@ngx-translate/core';
1314
import {
1415
BehaviorSubject,
1516
Observable,
1617
} from 'rxjs';
18+
import { map } from 'rxjs/operators';
1719

1820
import {
1921
APP_CONFIG,
2022
AppConfig,
2123
} from '../../../../config/app-config.interface';
2224
import { SortOptions } from '../../../core/cache/models/sort-options.model';
2325
import { RemoteData } from '../../../core/data/remote-data';
26+
import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service';
27+
import { FilterConfig } from '../../../core/shared/search/search-filters/search-config.model';
2428
import { ViewMode } from '../../../core/shared/view-mode.model';
2529
import { ViewModeSwitchComponent } from '../../view-mode-switch/view-mode-switch.component';
2630
import { AdvancedSearchComponent } from '../advanced-search/advanced-search.component';
@@ -48,7 +52,7 @@ import { SearchSwitchConfigurationComponent } from '../search-switch-configurati
4852
/**
4953
* Component representing the sidebar on the search page
5054
*/
51-
export class SearchSidebarComponent {
55+
export class SearchSidebarComponent implements OnInit {
5256

5357
/**
5458
* The configuration to use for the search options
@@ -125,9 +129,18 @@ export class SearchSidebarComponent {
125129
*/
126130
@Output() changeViewMode: EventEmitter<ViewMode> = new EventEmitter<ViewMode>();
127131

132+
showAdvancedSearch$: Observable<boolean>;
133+
128134
constructor(
129135
@Inject(APP_CONFIG) protected appConfig: AppConfig,
136+
protected searchConfigurationService: SearchConfigurationService,
130137
) {
131138
}
132139

140+
ngOnInit(): void {
141+
this.showAdvancedSearch$ = this.searchConfigurationService.getConfigurationAdvancedSearchFilters(this.configuration, this.currentScope).pipe(
142+
map((advancedFilters: FilterConfig[]) => this.appConfig.search.advancedFilters.enabled && advancedFilters.length > 0),
143+
);
144+
}
145+
133146
}

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,14 @@ import {
55
of as observableOf,
66
} from 'rxjs';
77

8-
import { SearchConfig } from '../../core/shared/search/search-filters/search-config.model';
8+
import {
9+
FilterConfig,
10+
SearchConfig,
11+
} from '../../core/shared/search/search-filters/search-config.model';
912

13+
/**
14+
* Stub class of {@link SearchConfigurationService}
15+
*/
1016
export class SearchConfigurationServiceStub {
1117

1218
public paginationID = 'test-id';
@@ -30,6 +36,10 @@ export class SearchConfigurationServiceStub {
3036
return observableOf(a);
3137
}
3238

39+
getConfigurationAdvancedSearchFilters(_configuration: string, _scope?: string): Observable<FilterConfig[]> {
40+
return observableOf([]);
41+
}
42+
3343
getConfig () {
3444
return observableOf({ hasSucceeded: true, payload: [] });
3545
}

0 commit comments

Comments
 (0)