diff --git a/src/app/+search-page/search-filters/search-filter/search-boolean-filter/search-boolean-filter.component.html b/src/app/+search-page/search-filters/search-filter/search-boolean-filter/search-boolean-filter.component.html index 32d9ea6e77..216683c122 100644 --- a/src/app/+search-page/search-filters/search-filter/search-boolean-filter/search-boolean-filter.component.html +++ b/src/app/+search-page/search-filters/search-filter/search-boolean-filter/search-boolean-filter.component.html @@ -8,7 +8,7 @@
- + diff --git a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts index 1675dd051a..f4f835c152 100644 --- a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts +++ b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts @@ -290,6 +290,14 @@ export class SearchFacetFilterComponent implements OnInit, OnDestroy { getDisplayValue(facet: FacetValue, query: string): string { return new EmphasizePipe().transform(facet.value, query) + ' (' + facet.count + ')'; } + + + /** + * Prevent unnecessary rerendering + */ + trackUpdate(index, value: FacetValue) { + return value ? value.search : undefined; + } } export const facetLoad = trigger('facetLoad', [ diff --git a/src/app/+search-page/search-filters/search-filter/search-filter.service.ts b/src/app/+search-page/search-filters/search-filter/search-filter.service.ts index bf21eab367..34c34ee4cc 100644 --- a/src/app/+search-page/search-filters/search-filter/search-filter.service.ts +++ b/src/app/+search-page/search-filters/search-filter/search-filter.service.ts @@ -1,6 +1,6 @@ import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; import { Injectable, InjectionToken } from '@angular/core'; -import { map } from 'rxjs/operators'; +import { distinctUntilChanged, map } from 'rxjs/operators'; import { SearchFiltersState, SearchFilterState } from './search-filter.reducer'; import { createSelector, MemoizedSelector, select, Store } from '@ngrx/store'; import { @@ -65,7 +65,9 @@ export class SearchFilterService { return observableCombineLatest(values$, prefixValues$).pipe( map(([values, prefixValues]) => { - if (isNotEmpty(values)) { + console.log('getSelectedValuesForFilter ', values, prefixValues); + + if (isNotEmpty(values)) { return values; } return prefixValues; @@ -88,13 +90,14 @@ export class SearchFilterService { } else { return false; } - }) + }), + distinctUntilChanged() ); } /** * Request the current page of a given filter - * @param {string} filterName The filtername for which the page state is checked + * @param {string} filterName The filter name for which the page state is checked * @returns {Observable} Emits the current page state of the given filter, if it's unavailable, return 1 */ getPage(filterName: string): Observable { @@ -106,7 +109,8 @@ export class SearchFilterService { } else { return 1; } - })); + }), + distinctUntilChanged()); } /** diff --git a/src/app/+search-page/search-filters/search-filter/search-hierarchy-filter/search-hierarchy-filter.component.html b/src/app/+search-page/search-filters/search-filter/search-hierarchy-filter/search-hierarchy-filter.component.html index 812f543716..5434f0e0f4 100644 --- a/src/app/+search-page/search-filters/search-filter/search-hierarchy-filter/search-hierarchy-filter.component.html +++ b/src/app/+search-page/search-filters/search-filter/search-hierarchy-filter/search-hierarchy-filter.component.html @@ -8,7 +8,7 @@
- + diff --git a/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.html b/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.html index 352c1710c0..1cc0556ed5 100644 --- a/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.html +++ b/src/app/+search-page/search-filters/search-filter/search-range-filter/search-range-filter.component.html @@ -24,7 +24,7 @@
- + diff --git a/src/app/+search-page/search-filters/search-filter/search-text-filter/search-text-filter.component.html b/src/app/+search-page/search-filters/search-filter/search-text-filter/search-text-filter.component.html index fcc2393b93..32f6fe2153 100644 --- a/src/app/+search-page/search-filters/search-filter/search-text-filter/search-text-filter.component.html +++ b/src/app/+search-page/search-filters/search-filter/search-text-filter/search-text-filter.component.html @@ -9,7 +9,7 @@
- + diff --git a/src/app/+search-page/search-filters/search-filters.component.html b/src/app/+search-page/search-filters/search-filters.component.html index 0522c1fba0..de725f0958 100644 --- a/src/app/+search-page/search-filters/search-filters.component.html +++ b/src/app/+search-page/search-filters/search-filters.component.html @@ -1,6 +1,6 @@

{{"search.filters.head" | translate}}

-
+
diff --git a/src/app/+search-page/search-filters/search-filters.component.ts b/src/app/+search-page/search-filters/search-filters.component.ts index f16faff1f3..0d32df4867 100644 --- a/src/app/+search-page/search-filters/search-filters.component.ts +++ b/src/app/+search-page/search-filters/search-filters.component.ts @@ -1,6 +1,6 @@ import { Observable, of as observableOf } from 'rxjs'; -import { filter, map, mergeMap, startWith, switchMap } from 'rxjs/operators'; +import { filter, first, map, mergeMap, startWith, switchMap, tap } from 'rxjs/operators'; import { Component } from '@angular/core'; import { SearchService } from '../search-service/search.service'; import { RemoteData } from '../../core/data/remote-data'; @@ -9,6 +9,7 @@ import { SearchConfigurationService } from '../search-service/search-configurati import { isNotEmpty } from '../../shared/empty.util'; import { SearchFilterService } from './search-filter/search-filter.service'; import { getSucceededRemoteData } from '../../core/shared/operators'; +import { FieldUpdate } from '../../core/data/object-updates/object-updates.reducer'; @Component({ selector: 'ds-search-filters', @@ -59,11 +60,13 @@ export class SearchFiltersComponent { */ isActive(filterConfig: SearchFilterConfig): Observable { return this.filterService.getSelectedValuesForFilter(filterConfig).pipe( - mergeMap((isActive) => { + switchMap((isActive) => { + console.log('selected fires'); if (isNotEmpty(isActive)) { return observableOf(true); } else { return this.searchConfigService.searchOptions.pipe( + first(), switchMap((options) => { return this.searchService.getFacetValuesFor(filterConfig, 1, options).pipe( filter((RD) => !RD.isLoading), @@ -73,6 +76,13 @@ export class SearchFiltersComponent { } )) } - }),startWith(true),); + }), tap(t => console.log(t)), startWith(true)); + } + + /** + * Prevent unnecessary rerendering + */ + trackUpdate(index, config: SearchFilterConfig) { + return config ? config.name : undefined; } } diff --git a/src/app/shared/services/route.service.ts b/src/app/shared/services/route.service.ts index 9dd9a0f164..478d92c21e 100644 --- a/src/app/shared/services/route.service.ts +++ b/src/app/shared/services/route.service.ts @@ -16,7 +16,7 @@ export class RouteService { getQueryParameterValues(paramName: string): Observable { return this.route.queryParamMap.pipe( map((params) => [...params.getAll(paramName)]), - distinctUntilChanged() + distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)) ); }