111731: Fixed selected filters not being displayed as labels

This commit is contained in:
Alexandre Vryghem
2024-04-23 17:46:08 +02:00
parent 8d1d04ed58
commit d40d0b7c9c
21 changed files with 56 additions and 104 deletions

View File

@@ -1,7 +1,7 @@
/* eslint-disable max-classes-per-file */
import { combineLatest as observableCombineLatest, Observable } from 'rxjs';
import { combineLatest as observableCombineLatest, Observable, BehaviorSubject } from 'rxjs';
import { Injectable, OnDestroy } from '@angular/core';
import { map, switchMap, take } from 'rxjs/operators';
import { map, switchMap, take, tap } from 'rxjs/operators';
import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model';
import { ResponseParsingService } from '../../data/parsing.service';
import { RemoteData } from '../../data/remote-data';
@@ -32,6 +32,7 @@ import { PaginationComponentOptions } from '../../../shared/pagination/paginatio
import { RestRequest } from '../../data/rest-request.model';
import { BaseDataService } from '../../data/base/base-data.service';
import { Angulartics2 } from 'angulartics2';
import { AppliedFilter } from '../../../shared/search/models/applied-filter.model';
/**
* A limited data service implementation for the 'discover' endpoint
@@ -87,6 +88,8 @@ export class SearchService implements OnDestroy {
*/
private searchDataService: SearchDataService;
public appliedFilters$: BehaviorSubject<AppliedFilter[]> = new BehaviorSubject([]);
constructor(
private routeService: RouteService,
protected requestService: RequestService,
@@ -293,7 +296,19 @@ export class SearchService implements OnDestroy {
});
this.requestService.send(request, useCachedVersionIfAvailable);
return this.rdb.buildFromHref(href);
return this.rdb.buildFromHref(href).pipe(
tap((facetValuesRD: RemoteData<FacetValues>) => {
if (facetValuesRD.hasSucceeded) {
const appliedFilters: AppliedFilter[] = (facetValuesRD.payload.appliedFilters ?? [])
.filter((appliedFilter: AppliedFilter) => hasValue(appliedFilter))
// TODO this should ideally be fixed in the backend
.map((appliedFilter: AppliedFilter) => Object.assign({}, appliedFilter, {
operator: hasValue(appliedFilter.value.match(/\[\s*(\*|\d+)\s*TO\s*(\*|\d+)\s*]/)) ? 'range' : appliedFilter.operator,
}));
this.appliedFilters$.next(appliedFilters);
}
}),
);
}
/**