diff --git a/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.spec.ts b/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.spec.ts index 77f41be76a..bb2187d9a6 100644 --- a/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.spec.ts +++ b/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.spec.ts @@ -39,7 +39,7 @@ describe('BrowseByDatePageComponent', () => { const mockBrowseService = { getBrowseEntriesFor: (options: BrowseEntrySearchOptions) => toRemoteData([]), getBrowseItemsFor: (value: string, options: BrowseEntrySearchOptions) => toRemoteData([firstItem]), - getFirstItemFor: () => toRemoteData([firstItem]) + getFirstItemFor: () => observableOf(new RemoteData(false, false, true, undefined, firstItem)) }; const mockDsoService = { diff --git a/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.ts b/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.ts index 701082b6a2..c5048c9520 100644 --- a/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.ts +++ b/src/app/+browse-by/+browse-by-date-page/browse-by-date-page.component.ts @@ -75,10 +75,10 @@ export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent { */ updateStartsWithOptions(definition: string, metadataField: string, scope?: string) { this.subs.push( - this.browseService.getFirstItemFor(definition, scope).subscribe((firstItemRD: RemoteData>) => { + this.browseService.getFirstItemFor(definition, scope).subscribe((firstItemRD: RemoteData) => { let lowerLimit = this.config.browseBy.defaultLowerLimit; - if (firstItemRD.payload.page.length > 0) { - const date = firstItemRD.payload.page[0].findMetadata(metadataField); + if (hasValue(firstItemRD.payload)) { + const date = firstItemRD.payload.findMetadata(metadataField); if (hasValue(date) && hasValue(+date.split('-')[0])) { lowerLimit = +date.split('-')[0]; } diff --git a/src/app/core/browse/browse.service.ts b/src/app/core/browse/browse.service.ts index 40c51130d6..c7ff4d3478 100644 --- a/src/app/core/browse/browse.service.ts +++ b/src/app/core/browse/browse.service.ts @@ -26,7 +26,7 @@ import { BrowseEntry } from '../shared/browse-entry.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { configureRequest, - filterSuccessfulResponses, getBrowseDefinitionLinks, + filterSuccessfulResponses, getBrowseDefinitionLinks, getFirstOccurrence, getRemoteDataPayload, getRequestFromSelflink, getResponseFromSelflink @@ -170,7 +170,7 @@ export class BrowseService { * @param definition * @param scope */ - getFirstItemFor(definition: string, scope?: string): Observable>> { + getFirstItemFor(definition: string, scope?: string): Observable> { return this.getBrowseDefinitions().pipe( getBrowseDefinitionLinks(definition), hasValueOperator(), @@ -188,7 +188,8 @@ export class BrowseService { } return href; }), - getBrowseItemsFor(this.requestService, this.responseCache, this.rdb) + getBrowseItemsFor(this.requestService, this.responseCache, this.rdb), + getFirstOccurrence() ); } diff --git a/src/app/core/shared/operators.ts b/src/app/core/shared/operators.ts index a9294b2fc9..2dfe2691da 100644 --- a/src/app/core/shared/operators.ts +++ b/src/app/core/shared/operators.ts @@ -88,3 +88,12 @@ export const getBrowseDefinitionLinks = (definitionID: string) => } }) ); + +/** + * Get the first occurrence of an object within a paginated list + */ +export const getFirstOccurrence = () => + (source: Observable>>): Observable> => + source.pipe( + map((rd) => Object.assign(rd, { payload: rd.payload.page.length > 0 ? rd.payload.page[0] : undefined })) + );