Skip to content

Commit 06a90b5

Browse files
Fix - Change loading of options by faceted search values in date component
1 parent 12ecca6 commit 06a90b5

File tree

1 file changed

+46
-38
lines changed

1 file changed

+46
-38
lines changed

src/app/browse-by/browse-by-date/browse-by-date.component.ts

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ import {
1919
Observable,
2020
} from 'rxjs';
2121
import {
22-
map,
22+
filter,
23+
map, switchMap,
2324
take,
2425
} from 'rxjs/operators';
2526
import { ThemedBrowseByComponent } from 'src/app/shared/browse-by/themed-browse-by.component';
@@ -46,6 +47,11 @@ import { ComcolPageLogoComponent } from '../../shared/comcol/comcol-page-logo/co
4647
import { isValidDate } from '../../shared/date.util';
4748
import { DsoEditMenuComponent } from '../../shared/dso-page/dso-edit-menu/dso-edit-menu.component';
4849
import {
50+
getFirstSucceededRemoteDataPayload,
51+
getAllSucceededRemoteDataPayload
52+
} from '../../core/shared/operators';
53+
import {
54+
hasNoValue,
4955
hasValue,
5056
isNotEmpty,
5157
} from '../../shared/empty.util';
@@ -57,6 +63,11 @@ import {
5763
BrowseByMetadataComponent,
5864
browseParamsToOptions,
5965
} from '../browse-by-metadata/browse-by-metadata.component';
66+
import { SearchOptions } from '../../shared/search/models/search-options.model';
67+
import { SearchConfigurationService } from '../../core/shared/search/search-configuration.service';
68+
import { SearchService } from "../../core/shared/search/search.service";
69+
import { FacetValues } from '../../shared/search/models/facet-values.model';
70+
6071

6172
@Component({
6273
selector: 'ds-browse-by-date',
@@ -99,6 +110,8 @@ export class BrowseByDateComponent extends BrowseByMetadataComponent implements
99110
@Inject(APP_CONFIG) public appConfig: AppConfig,
100111
public dsoNameService: DSONameService,
101112
protected cdRef: ChangeDetectorRef,
113+
public searchConfigService: SearchConfigurationService,
114+
public searchService: SearchService
102115
) {
103116
super(route, browseService, dsoService, paginationService, router, appConfig, dsoNameService);
104117
}
@@ -140,50 +153,45 @@ export class BrowseByDateComponent extends BrowseByMetadataComponent implements
140153
* @param scope The scope under which to fetch the earliest item for
141154
*/
142155
updateStartsWithOptions(definition: string, metadataKeys: string[], scope?: string) {
143-
const firstItemRD$: Observable<RemoteData<Item>> = this.browseService.getFirstItemFor(definition, scope, SortDirection.ASC);
144-
const lastItemRD$: Observable<RemoteData<Item>> = this.browseService.getFirstItemFor(definition, scope, SortDirection.DESC);
145-
this.loading$ = observableCombineLatest([
146-
firstItemRD$,
147-
lastItemRD$,
148-
]).pipe(
149-
map(([firstItemRD, lastItemRD]: [RemoteData<Item>, RemoteData<Item>]) => firstItemRD.isLoading || lastItemRD.isLoading),
150-
);
151-
this.subs.push(
152-
observableCombineLatest([
153-
firstItemRD$,
154-
lastItemRD$,
155-
]).subscribe(([firstItemRD, lastItemRD]: [RemoteData<Item>, RemoteData<Item>]) => {
156-
let lowerLimit: number = this.getLimit(firstItemRD, metadataKeys, this.appConfig.browseBy.defaultLowerLimit);
157-
const upperLimit: number = this.getLimit(lastItemRD, metadataKeys, new Date().getUTCFullYear());
158-
const options: number[] = [];
159-
const oneYearBreak: number = Math.floor((upperLimit - this.appConfig.browseBy.oneYearLimit) / 5) * 5;
160-
const fiveYearBreak: number = Math.floor((upperLimit - this.appConfig.browseBy.fiveYearLimit) / 10) * 10;
161-
if (lowerLimit <= fiveYearBreak) {
162-
lowerLimit -= 10;
163-
} else if (lowerLimit <= oneYearBreak) {
164-
lowerLimit -= 5;
165-
} else {
166-
lowerLimit -= 1;
167-
}
168-
let i: number = upperLimit;
169-
while (i > lowerLimit) {
170-
options.push(i);
171-
if (i <= fiveYearBreak) {
172-
i -= 10;
173-
} else if (i <= oneYearBreak) {
174-
i -= 5;
175-
} else {
176-
i--;
177-
}
178-
}
156+
this.searchConfigService.getConfig(null,definition).pipe(
157+
getFirstSucceededRemoteDataPayload(),
158+
map( configs => configs.filter( filter => filter.name.toUpperCase() === definition.toUpperCase() ) ),
159+
filter( configs => configs.length > 0 ),
160+
map( findConfig => findConfig[0]),
161+
switchMap( config => {
162+
return this.searchService.getFacetValuesFor(config, 10).pipe(
163+
getAllSucceededRemoteDataPayload()
164+
);
165+
}),
166+
map( facetValue => facetValue.page ),
167+
).subscribe(
168+
values => {
169+
const options = this.generateYearFromFacetValue(values);
179170
if (isNotEmpty(options)) {
180171
this.startsWithOptions = options;
181172
this.cdRef.detectChanges();
182173
}
183-
}),
174+
}
184175
);
185176
}
186177

178+
/**
179+
* Prepare options
180+
* @param data The facets values
181+
*/
182+
generateYearFromFacetValue = (data: any[]) => {
183+
const years: number[] = [];
184+
185+
data.forEach(item => {
186+
const [start, end] = item.value.split(" - ").map(Number);
187+
for (let year = start; year <= end; year++) {
188+
years.push(year);
189+
}
190+
});
191+
192+
return years;
193+
};
194+
187195
/**
188196
* Returns the year from the item metadata field or the limit.
189197
* @param itemRD the item remote data

0 commit comments

Comments
 (0)