mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-13 04:53:06 +00:00
54053: Filter-labels uses FilterService instead of SearchService
This commit is contained in:
@@ -20,7 +20,8 @@ import { SortDirection, SortOptions } from '../../../core/cache/models/sort-opti
|
|||||||
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
|
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
|
||||||
import { SearchOptions } from '../../search-options.model';
|
import { SearchOptions } from '../../search-options.model';
|
||||||
import { PaginatedSearchOptions } from '../../paginated-search-options.model';
|
import { PaginatedSearchOptions } from '../../paginated-search-options.model';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute, Params } from '@angular/router';
|
||||||
|
import { FilterLabel } from '../../search-service/filter-label.model';
|
||||||
|
|
||||||
const filterStateSelector = (state: SearchFiltersState) => state.searchFilter;
|
const filterStateSelector = (state: SearchFiltersState) => state.searchFilter;
|
||||||
|
|
||||||
@@ -76,7 +77,7 @@ export class SearchFilterService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
getCurrentFilters(): Observable<any> {
|
getCurrentFilters(): Observable<Params> {
|
||||||
return this.routeService.getQueryParamsWithPrefix('f.').map((filterParams) => {
|
return this.routeService.getQueryParamsWithPrefix('f.').map((filterParams) => {
|
||||||
if (isNotEmpty(filterParams)) {
|
if (isNotEmpty(filterParams)) {
|
||||||
const params = {};
|
const params = {};
|
||||||
@@ -98,6 +99,20 @@ export class SearchFilterService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getCurrentFilterLabels(): Observable<FilterLabel[]> {
|
||||||
|
return this.getCurrentFilters().pipe(
|
||||||
|
map((params: Params) => {
|
||||||
|
const filterLabels: FilterLabel[] = [];
|
||||||
|
Object.keys(params).forEach((key) => {
|
||||||
|
params[key].forEach((p: string) => {
|
||||||
|
filterLabels.push(new FilterLabel(p, key));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return filterLabels;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
getCurrentFrontendFilters(): Observable<any> {
|
getCurrentFrontendFilters(): Observable<any> {
|
||||||
return this.routeService.getQueryParamsWithPrefix('f.');
|
return this.routeService.getQueryParamsWithPrefix('f.');
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,7 @@ import { Observable } from 'rxjs/Observable';
|
|||||||
import { Params } from '@angular/router';
|
import { Params } from '@angular/router';
|
||||||
import { FilterLabel } from '../search-service/filter-label.model';
|
import { FilterLabel } from '../search-service/filter-label.model';
|
||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
|
import { SearchFilterService } from '../search-filters/search-filter/search-filter.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-search-labels',
|
selector: 'ds-search-labels',
|
||||||
@@ -13,8 +14,8 @@ import { map } from 'rxjs/operators';
|
|||||||
export class SearchLabelsComponent {
|
export class SearchLabelsComponent {
|
||||||
appliedFilters: Observable<FilterLabel[]>;
|
appliedFilters: Observable<FilterLabel[]>;
|
||||||
|
|
||||||
constructor(private searchService: SearchService) {
|
constructor(private searchService: SearchService, private filterService: SearchFilterService) {
|
||||||
this.appliedFilters = this.searchService.getFilterLabels();
|
this.appliedFilters = this.filterService.getCurrentFilterLabels();
|
||||||
}
|
}
|
||||||
|
|
||||||
getRemoveParams(filterLabel: FilterLabel): Observable<Params> {
|
getRemoveParams(filterLabel: FilterLabel): Observable<Params> {
|
||||||
|
@@ -247,36 +247,5 @@ describe('SearchService', () => {
|
|||||||
expect((searchService as any).responseCache.get).toHaveBeenCalledWith(requestUrl);
|
expect((searchService as any).responseCache.get).toHaveBeenCalledWith(requestUrl);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when getFilterLabels is called', () => {
|
|
||||||
let obs: Observable<FilterLabel[]>;
|
|
||||||
const value = 'Test';
|
|
||||||
const orgField = 'author';
|
|
||||||
const field = 'f.' + orgField;
|
|
||||||
const mockConfig = new RemoteData(false, false, true, null, [
|
|
||||||
{
|
|
||||||
name: orgField,
|
|
||||||
type: null,
|
|
||||||
hasFacets: false,
|
|
||||||
pageSize: 5,
|
|
||||||
isOpenByDefault: false,
|
|
||||||
paramName: field
|
|
||||||
} as SearchFilterConfig
|
|
||||||
]);
|
|
||||||
const mockParams = [];
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
spyOn((searchService as any), 'getConfig').and.returnValue(Observable.of(mockConfig));
|
|
||||||
mockParams[field] = value;
|
|
||||||
(searchService as any).route.queryParams = Observable.of(mockParams);
|
|
||||||
obs = searchService.getFilterLabels();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return the correct labels', () => {
|
|
||||||
obs.subscribe((filters) => {
|
|
||||||
expect(filters[0].value).toEqual(value);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -262,27 +262,6 @@ export class SearchService implements OnDestroy {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getFilterLabels(): Observable<FilterLabel[]> {
|
|
||||||
return combineLatest(this.getConfig(), this.route.queryParams).pipe(
|
|
||||||
map(([rd, params]) => {
|
|
||||||
const filterLabels: FilterLabel[] = [];
|
|
||||||
rd.payload.forEach((config: SearchFilterConfig) => {
|
|
||||||
const param = params[config.paramName];
|
|
||||||
if (param !== undefined) {
|
|
||||||
if (param instanceof Array && param.length > 1) {
|
|
||||||
param.forEach((p: string) => {
|
|
||||||
filterLabels.push(new FilterLabel(p, config.paramName))
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
filterLabels.push(new FilterLabel(param, config.paramName));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return filterLabels.filter((n) => n !== undefined && n.value.length > 0);
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
getViewMode(): Observable<ViewMode> {
|
getViewMode(): Observable<ViewMode> {
|
||||||
return this.route.queryParams.map((params) => {
|
return this.route.queryParams.map((params) => {
|
||||||
if (isNotEmpty(params.view) && hasValue(params.view)) {
|
if (isNotEmpty(params.view) && hasValue(params.view)) {
|
||||||
|
Reference in New Issue
Block a user