diff --git a/src/app/item-page/simple/field-components/clarin-item-versions-field/clarin-item-versions-field.component.ts b/src/app/item-page/simple/field-components/clarin-item-versions-field/clarin-item-versions-field.component.ts index 5ed269c5988..d0507103c12 100644 --- a/src/app/item-page/simple/field-components/clarin-item-versions-field/clarin-item-versions-field.component.ts +++ b/src/app/item-page/simple/field-components/clarin-item-versions-field/clarin-item-versions-field.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { Observable, of, combineLatest } from 'rxjs'; -import { map, switchMap } from 'rxjs/operators'; +import { map, switchMap, shareReplay } from 'rxjs/operators'; import { ItemVersionsComponent } from '../../../versions/item-versions.component'; import { Item } from '../../../../core/shared/item.model'; import { Version } from '../../../../core/shared/version.model'; @@ -40,6 +40,11 @@ interface EnhancedVersionDTO extends VersionDTO { }) export class ClarinItemVersionsFieldComponent extends ItemVersionsComponent implements OnInit { + /** + * Maximum number of versions to fetch at once for the dropdown display. + */ + private readonly MAX_VERSIONS_TO_DISPLAY = 9999; + /** * Icon name for the clarin field */ @@ -62,7 +67,12 @@ export class ClarinItemVersionsFieldComponent extends ItemVersionsComponent impl enhancedVersions$: Observable; ngOnInit(): void { - // Call parent's ngOnInit first to set up all the observables + // Override the parent's pageSize to fetch all versions at once for the dropdown display + this.pageSize = this.MAX_VERSIONS_TO_DISPLAY; + this.options = Object.assign(this.options, { + pageSize: this.pageSize + }); + super.ngOnInit(); // Set up clarin-specific showMetadataValue logic @@ -98,7 +108,8 @@ export class ClarinItemVersionsFieldComponent extends ItemVersionsComponent impl isCurrentVersion: versionDTO.version.id === currentVersionId } as EnhancedVersionDTO; }); - }) + }), + shareReplay(1) // Cache the result to prevent duplicate requests ); } else { // Fallback: check if isAdmin$ is available, otherwise hide the component