11import { ChangeDetectorRef , Component , Inject , OnInit } from '@angular/core' ;
2- import {
3- BrowseByMetadataPageComponent ,
4- browseParamsToOptions ,
5- getBrowseSearchOptions
6- } from '../browse-by-metadata-page/browse-by-metadata-page.component' ;
7- import { combineLatest as observableCombineLatest } from 'rxjs' ;
2+ import { BrowseByMetadataComponent , browseParamsToOptions , getBrowseSearchOptions } from '../browse-by-metadata/browse-by-metadata.component' ;
3+ import { combineLatest as observableCombineLatest , Observable } from 'rxjs' ;
84import { hasValue , isNotEmpty } from '../../shared/empty.util' ;
95import { ActivatedRoute , Params , Router } from '@angular/router' ;
106import { BrowseService } from '../../core/browse/browse.service' ;
@@ -23,31 +19,32 @@ import { rendersBrowseBy } from '../browse-by-switcher/browse-by-decorator';
2319import { BrowseByDataType } from '../browse-by-switcher/browse-by-data-type' ;
2420
2521@Component ( {
26- selector : 'ds-browse-by-date-page ' ,
27- styleUrls : [ '../browse-by-metadata-page /browse-by-metadata-page .component.scss' ] ,
28- templateUrl : '../browse-by-metadata-page /browse-by-metadata-page .component.html'
22+ selector : 'ds-browse-by-date' ,
23+ styleUrls : [ '../browse-by-metadata/browse-by-metadata.component.scss' ] ,
24+ templateUrl : '../browse-by-metadata/browse-by-metadata.component.html' ,
2925} )
3026/**
3127 * Component for browsing items by metadata definition of type 'date'
3228 * A metadata definition (a.k.a. browse id) is a short term used to describe one or multiple metadata fields.
3329 * An example would be 'dateissued' for 'dc.date.issued'
3430 */
3531@rendersBrowseBy ( BrowseByDataType . Date )
36- export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent implements OnInit {
32+ export class BrowseByDateComponent extends BrowseByMetadataComponent implements OnInit {
3733
3834 /**
3935 * The default metadata keys to use for determining the lower limit of the StartsWith dropdown options
4036 */
4137 defaultMetadataKeys = [ 'dc.date.issued' ] ;
4238
43- public constructor ( protected route : ActivatedRoute ,
44- protected browseService : BrowseService ,
45- protected dsoService : DSpaceObjectDataService ,
46- protected router : Router ,
47- protected paginationService : PaginationService ,
48- protected cdRef : ChangeDetectorRef ,
49- @Inject ( APP_CONFIG ) public appConfig : AppConfig ,
50- public dsoNameService : DSONameService ,
39+ public constructor (
40+ protected route : ActivatedRoute ,
41+ protected browseService : BrowseService ,
42+ protected dsoService : DSpaceObjectDataService ,
43+ protected paginationService : PaginationService ,
44+ protected router : Router ,
45+ @Inject ( APP_CONFIG ) public appConfig : AppConfig ,
46+ public dsoNameService : DSONameService ,
47+ protected cdRef : ChangeDetectorRef ,
5148 ) {
5249 super ( route , browseService , dsoService , paginationService , router , appConfig , dsoNameService ) ;
5350 }
@@ -60,19 +57,17 @@ export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent imp
6057 this . currentPagination$ = this . paginationService . getCurrentPagination ( this . paginationConfig . id , this . paginationConfig ) ;
6158 this . currentSort$ = this . paginationService . getCurrentSort ( this . paginationConfig . id , sortConfig ) ;
6259 this . subs . push (
63- observableCombineLatest ( [ this . route . params , this . route . queryParams , this . route . data ,
60+ observableCombineLatest ( [ this . route . params , this . route . queryParams , this . scope$ , this . route . data ,
6461 this . currentPagination$ , this . currentSort$ ] ) . pipe (
65- map ( ( [ routeParams , queryParams , data , currentPage , currentSort ] ) => {
66- return [ Object . assign ( { } , routeParams , queryParams , data ) , currentPage , currentSort ] ;
62+ map ( ( [ routeParams , queryParams , scope , data , currentPage , currentSort ] ) => {
63+ return [ Object . assign ( { } , routeParams , queryParams , data ) , scope , currentPage , currentSort ] ;
6764 } )
68- ) . subscribe ( ( [ params , currentPage , currentSort ] : [ Params , PaginationComponentOptions , SortOptions ] ) => {
65+ ) . subscribe ( ( [ params , scope , currentPage , currentSort ] : [ Params , string , PaginationComponentOptions , SortOptions ] ) => {
6966 const metadataKeys = params . browseDefinition ? params . browseDefinition . metadataKeys : this . defaultMetadataKeys ;
7067 this . browseId = params . id || this . defaultBrowseId ;
7168 this . startsWith = + params . startsWith || params . startsWith ;
72- const searchOptions = browseParamsToOptions ( params , currentPage , currentSort , this . browseId , this . fetchThumbnails ) ;
69+ const searchOptions = browseParamsToOptions ( params , scope , currentPage , currentSort , this . browseId , this . fetchThumbnails ) ;
7370 this . updatePageWithItems ( searchOptions , this . value , undefined ) ;
74- this . updateParent ( params . scope ) ;
75- this . updateLogo ( ) ;
7671 this . updateStartsWithOptions ( this . browseId , metadataKeys , params . scope ) ;
7772 } ) ) ;
7873 }
@@ -88,12 +83,21 @@ export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent imp
8883 * @param scope The scope under which to fetch the earliest item for
8984 */
9085 updateStartsWithOptions ( definition : string , metadataKeys : string [ ] , scope ?: string ) {
91- const firstItemRD = this . browseService . getFirstItemFor ( definition , scope , SortDirection . ASC ) ;
92- const lastItemRD = this . browseService . getFirstItemFor ( definition , scope , SortDirection . DESC ) ;
86+ const firstItemRD$ : Observable < RemoteData < Item > > = this . browseService . getFirstItemFor ( definition , scope , SortDirection . ASC ) ;
87+ const lastItemRD$ : Observable < RemoteData < Item > > = this . browseService . getFirstItemFor ( definition , scope , SortDirection . DESC ) ;
88+ this . loading$ = observableCombineLatest ( [
89+ firstItemRD$ ,
90+ lastItemRD$ ,
91+ ] ) . pipe (
92+ map ( ( [ firstItemRD , lastItemRD ] : [ RemoteData < Item > , RemoteData < Item > ] ) => firstItemRD . isLoading || lastItemRD . isLoading )
93+ ) ;
9394 this . subs . push (
94- observableCombineLatest ( [ firstItemRD , lastItemRD ] ) . subscribe ( ( [ firstItem , lastItem ] ) => {
95- let lowerLimit : number = this . getLimit ( firstItem , metadataKeys , this . appConfig . browseBy . defaultLowerLimit ) ;
96- let upperLimit : number = this . getLimit ( lastItem , metadataKeys , new Date ( ) . getUTCFullYear ( ) ) ;
95+ observableCombineLatest ( [
96+ firstItemRD$ ,
97+ lastItemRD$ ,
98+ ] ) . subscribe ( ( [ firstItemRD , lastItemRD ] : [ RemoteData < Item > , RemoteData < Item > ] ) => {
99+ let lowerLimit : number = this . getLimit ( firstItemRD , metadataKeys , this . appConfig . browseBy . defaultLowerLimit ) ;
100+ let upperLimit : number = this . getLimit ( lastItemRD , metadataKeys , new Date ( ) . getUTCFullYear ( ) ) ;
97101 const options : number [ ] = [ ] ;
98102 const oneYearBreak : number = Math . floor ( ( upperLimit - this . appConfig . browseBy . oneYearLimit ) / 5 ) * 5 ;
99103 const fiveYearBreak : number = Math . floor ( ( upperLimit - this . appConfig . browseBy . fiveYearLimit ) / 10 ) * 10 ;
0 commit comments