Skip to content

Commit 22e87a5

Browse files
111639: Added scope @input() and made the search facets & search results use that scope
1 parent 404ccd9 commit 22e87a5

14 files changed

Lines changed: 97 additions & 47 deletions

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const filterStateSelector = (state: SearchFiltersState) => state.searchFilter;
2727
export const FILTER_CONFIG: InjectionToken<SearchFilterConfig> = new InjectionToken<SearchFilterConfig>('filterConfig');
2828
export const IN_PLACE_SEARCH: InjectionToken<boolean> = new InjectionToken<boolean>('inPlaceSearch');
2929
export const REFRESH_FILTER: InjectionToken<BehaviorSubject<any>> = new InjectionToken<boolean>('refreshFilters');
30+
export const SCOPE: InjectionToken<string> = new InjectionToken<string>('scope');
3031

3132
/**
3233
* Service that performs all actions that have to do with search filters and facets

src/app/shared/search/search-filters/search-filter/search-facet-filter-wrapper/search-facet-filter-wrapper.component.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { FilterType } from '../../../models/filter-type.model';
44
import { SearchFilterConfig } from '../../../models/search-filter-config.model';
55
import {
66
FILTER_CONFIG,
7+
SCOPE,
78
IN_PLACE_SEARCH,
89
REFRESH_FILTER
910
} from '../../../../../core/shared/search/search-filter.service';
@@ -35,6 +36,11 @@ export class SearchFacetFilterWrapperComponent implements OnInit {
3536
*/
3637
@Input() refreshFilters: BehaviorSubject<boolean>;
3738

39+
/**
40+
* The current scope
41+
*/
42+
@Input() scope: string;
43+
3844
/**
3945
* The constructor of the search facet filter that should be rendered, based on the filter config's type
4046
*/
@@ -56,7 +62,8 @@ export class SearchFacetFilterWrapperComponent implements OnInit {
5662
providers: [
5763
{ provide: FILTER_CONFIG, useFactory: () => (this.filterConfig), deps: [] },
5864
{ provide: IN_PLACE_SEARCH, useFactory: () => (this.inPlaceSearch), deps: [] },
59-
{ provide: REFRESH_FILTER, useFactory: () => (this.refreshFilters), deps: [] }
65+
{ provide: REFRESH_FILTER, useFactory: () => (this.refreshFilters), deps: [] },
66+
{ provide: SCOPE, useFactory: () => (this.scope), deps: [] },
6067
],
6168
parent: this.injector
6269
});

src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { TranslateModule } from '@ngx-translate/core';
44
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
55
import {
66
FILTER_CONFIG,
7+
SCOPE,
78
IN_PLACE_SEARCH,
89
REFRESH_FILTER,
910
SearchFilterService
@@ -99,6 +100,7 @@ describe('SearchFacetFilterComponent', () => {
99100
{ provide: SEARCH_CONFIG_SERVICE, useValue: new SearchConfigurationServiceStub() },
100101
{ provide: IN_PLACE_SEARCH, useValue: false },
101102
{ provide: REFRESH_FILTER, useValue: new BehaviorSubject<boolean>(false) },
103+
{ provide: SCOPE, useValue: undefined },
102104
{
103105
provide: SearchFilterService, useValue: {
104106
getSelectedValuesForFilter: () => observableOf(selectedValues),

src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { SearchFilterConfig } from '../../../models/search-filter-config.model';
2222
import { SearchService } from '../../../../../core/shared/search/search.service';
2323
import {
2424
FILTER_CONFIG,
25+
SCOPE,
2526
IN_PLACE_SEARCH,
2627
REFRESH_FILTER,
2728
SearchFilterService
@@ -104,7 +105,9 @@ export class SearchFacetFilterComponent implements OnInit, OnDestroy {
104105
@Inject(SEARCH_CONFIG_SERVICE) public searchConfigService: SearchConfigurationService,
105106
@Inject(IN_PLACE_SEARCH) public inPlaceSearch: boolean,
106107
@Inject(FILTER_CONFIG) public filterConfig: SearchFilterConfig,
107-
@Inject(REFRESH_FILTER) public refreshFilters: BehaviorSubject<boolean>) {
108+
@Inject(REFRESH_FILTER) public refreshFilters: BehaviorSubject<boolean>,
109+
@Inject(SCOPE) public scope: string,
110+
) {
108111
}
109112

110113
/**
@@ -114,8 +117,11 @@ export class SearchFacetFilterComponent implements OnInit, OnDestroy {
114117
this.currentUrl = this.router.url;
115118
this.filterValues$ = new BehaviorSubject(createPendingRemoteDataObject());
116119
this.currentPage = this.getCurrentPage().pipe(distinctUntilChanged());
117-
118-
this.searchOptions$ = this.searchConfigService.searchOptions;
120+
this.searchOptions$ = this.searchConfigService.searchOptions.pipe(
121+
map((options: SearchOptions) => hasNoValue(this.scope) ? options : Object.assign({}, options, {
122+
scope: this.scope,
123+
})),
124+
);
119125
this.subs.push(
120126
this.searchOptions$.subscribe(() => this.updateFilterValueList()),
121127
this.refreshFilters.asObservable().pipe(

src/app/shared/search/search-filters/search-filter/search-filter.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ <h5 class="d-inline-block mb-0">
1818
(@slide.start)="startSlide($event)" (@slide.done)="finishSlide($event)"
1919
class="search-filter-wrapper" [ngClass]="{ 'closed' : closed, 'notab': notab }">
2020
<ds-search-facet-filter-wrapper
21+
[scope]="scope"
2122
[filterConfig]="filter"
2223
[inPlaceSearch]="inPlaceSearch"
2324
[refreshFilters]="refreshFilters" >

src/app/shared/search/search-filters/search-filter/search-filter.component.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { filter, map, startWith, switchMap, take } from 'rxjs/operators';
66
import { SearchFilterConfig } from '../../models/search-filter-config.model';
77
import { SearchFilterService } from '../../../../core/shared/search/search-filter.service';
88
import { slide } from '../../../animations/slide';
9-
import { isNotEmpty } from '../../../empty.util';
9+
import { isNotEmpty, hasValue } from '../../../empty.util';
1010
import { SearchService } from '../../../../core/shared/search/search.service';
1111
import { SearchConfigurationService } from '../../../../core/shared/search/search-configuration.service';
1212
import { SEARCH_CONFIG_SERVICE } from '../../../../my-dspace-page/my-dspace-page.component';
@@ -38,6 +38,11 @@ export class SearchFilterComponent implements OnInit {
3838
*/
3939
@Input() refreshFilters: BehaviorSubject<boolean>;
4040

41+
/**
42+
* The current scope
43+
*/
44+
@Input() scope: string;
45+
4146
/**
4247
* True when the filter is 100% collapsed in the UI
4348
*/
@@ -171,6 +176,9 @@ export class SearchFilterComponent implements OnInit {
171176
} else {
172177
return this.searchConfigService.searchOptions.pipe(
173178
switchMap((options) => {
179+
if (hasValue(this.scope)) {
180+
options.scope = this.scope;
181+
}
174182
return this.searchService.getFacetValuesFor(this.filter, 1, options).pipe(
175183
filter((RD) => !RD.isLoading),
176184
map((valuesRD) => {

src/app/shared/search/search-filters/search-filter/search-hierarchy-filter/search-hierarchy-filter.component.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { CommonModule } from '@angular/common';
1414
import { SearchService } from '../../../../../core/shared/search/search.service';
1515
import {
1616
FILTER_CONFIG,
17+
SCOPE,
1718
IN_PLACE_SEARCH,
1819
SearchFilterService,
1920
REFRESH_FILTER
@@ -75,7 +76,8 @@ describe('SearchHierarchyFilterComponent', () => {
7576
{ provide: SEARCH_CONFIG_SERVICE, useValue: new SearchConfigurationServiceStub() },
7677
{ provide: IN_PLACE_SEARCH, useValue: false },
7778
{ provide: FILTER_CONFIG, useValue: Object.assign(new SearchFilterConfig(), { name: testSearchFilter }) },
78-
{ provide: REFRESH_FILTER, useValue: new BehaviorSubject<boolean>(false)}
79+
{ provide: REFRESH_FILTER, useValue: new BehaviorSubject<boolean>(false)},
80+
{ provide: SCOPE, useValue: undefined },
7981
],
8082
schemas: [NO_ERRORS_SCHEMA],
8183
}).compileComponents();

src/app/shared/search/search-filters/search-filter/search-hierarchy-filter/search-hierarchy-filter.component.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
import { SearchService } from '../../../../../core/shared/search/search.service';
1010
import {
1111
FILTER_CONFIG,
12+
SCOPE,
1213
IN_PLACE_SEARCH,
1314
SearchFilterService, REFRESH_FILTER
1415
} from '../../../../../core/shared/search/search-filter.service';
@@ -49,9 +50,10 @@ export class SearchHierarchyFilterComponent extends SearchFacetFilterComponent i
4950
@Inject(SEARCH_CONFIG_SERVICE) public searchConfigService: SearchConfigurationService,
5051
@Inject(IN_PLACE_SEARCH) public inPlaceSearch: boolean,
5152
@Inject(FILTER_CONFIG) public filterConfig: SearchFilterConfig,
52-
@Inject(REFRESH_FILTER) public refreshFilters: BehaviorSubject<boolean>
53+
@Inject(REFRESH_FILTER) public refreshFilters: BehaviorSubject<boolean>,
54+
@Inject(SCOPE) public scope: string,
5355
) {
54-
super(searchService, filterService, rdbs, router, searchConfigService, inPlaceSearch, filterConfig, refreshFilters);
56+
super(searchService, filterService, rdbs, router, searchConfigService, inPlaceSearch, filterConfig, refreshFilters, scope);
5557
}
5658

5759
vocabularyExists$: Observable<boolean>;

src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { TranslateModule } from '@ngx-translate/core';
44
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
55
import {
66
FILTER_CONFIG,
7+
SCOPE,
78
IN_PLACE_SEARCH,
89
REFRESH_FILTER,
910
SearchFilterService
@@ -105,6 +106,7 @@ describe('SearchRangeFilterComponent', () => {
105106
{ provide: SEARCH_CONFIG_SERVICE, useValue: new SearchConfigurationServiceStub() },
106107
{ provide: IN_PLACE_SEARCH, useValue: false },
107108
{ provide: REFRESH_FILTER, useValue: new BehaviorSubject<boolean>(false) },
109+
{ provide: SCOPE, useValue: undefined },
108110
{
109111
provide: SearchFilterService, useValue: {
110112
getSelectedValuesForFilter: () => selectedValues,

src/app/shared/search/search-filters/search-filter/search-range-filter/search-range-filter.component.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { facetLoad, SearchFacetFilterComponent } from '../search-facet-filter/se
99
import { SearchFilterConfig } from '../../../models/search-filter-config.model';
1010
import {
1111
FILTER_CONFIG,
12+
SCOPE,
1213
IN_PLACE_SEARCH,
1314
REFRESH_FILTER,
1415
SearchFilterService
@@ -83,8 +84,9 @@ export class SearchRangeFilterComponent extends SearchFacetFilterComponent imple
8384
@Inject(FILTER_CONFIG) public filterConfig: SearchFilterConfig,
8485
@Inject(PLATFORM_ID) private platformId: any,
8586
@Inject(REFRESH_FILTER) public refreshFilters: BehaviorSubject<boolean>,
87+
@Inject(SCOPE) public scope: string,
8688
private route: RouteService) {
87-
super(searchService, filterService, rdbs, router, searchConfigService, inPlaceSearch, filterConfig, refreshFilters);
89+
super(searchService, filterService, rdbs, router, searchConfigService, inPlaceSearch, filterConfig, refreshFilters, scope);
8890

8991
}
9092

0 commit comments

Comments
 (0)