@@ -19,7 +19,8 @@ import {
1919 Observable ,
2020} from 'rxjs' ;
2121import {
22- map ,
22+ filter ,
23+ map , switchMap ,
2324 take ,
2425} from 'rxjs/operators' ;
2526import { ThemedBrowseByComponent } from 'src/app/shared/browse-by/themed-browse-by.component' ;
@@ -46,6 +47,11 @@ import { ComcolPageLogoComponent } from '../../shared/comcol/comcol-page-logo/co
4647import { isValidDate } from '../../shared/date.util' ;
4748import { DsoEditMenuComponent } from '../../shared/dso-page/dso-edit-menu/dso-edit-menu.component' ;
4849import {
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