diff --git a/src/app/item-page/versions/item-versions.component.html b/src/app/item-page/versions/item-versions.component.html index e9ea3bb0f9..6184b42aa8 100644 --- a/src/app/item-page/versions/item-versions.component.html +++ b/src/app/item-page/versions/item-versions.component.html @@ -1,91 +1,90 @@ -
-
-
-

{{"item.version.history.head" | translate}}

- - {{ "item.version.history.selected.alert" | translate : {version: itemVersion.version} }} - - - - - - - - - - - - - - - - - + + +
{{"item.version.history.table.version" | translate}}{{"item.version.history.table.editor" | translate}}{{"item.version.history.table.date" | translate}}{{"item.version.history.table.summary" | translate}}
- - - {{version?.submitterName}} - - {{version?.created | date : 'yyyy-MM-dd HH:mm:ss'}} - -
- - {{version?.summary}} - - - -
+
+
+

{{"item.version.history.head" | translate}}

+ + {{ "item.version.history.selected.alert" | translate : { version: itemVersion.version } }} + + + + + + + + + + + + + + + + + - - -
{{ "item.version.history.table.version" | translate }}{{ "item.version.history.table.editor" | translate }}{{ "item.version.history.table.date" | translate }}{{ "item.version.history.table.summary" | translate }}
+ + + {{ versionDTO.version.submitterName }} + + {{ versionDTO.version.created | date : 'yyyy-MM-dd HH:mm:ss' }} + +
+ + {{ versionDTO.version.summary }} + + + +
-
- - - - - - - - - -
- - -
-
* {{"item.version.history.selected" | translate}}
-
- -
+
+ + + + + + + + + + +
+
+
* {{"item.version.history.selected" | translate}}
+
+ + + + diff --git a/src/app/item-page/versions/item-versions.component.ts b/src/app/item-page/versions/item-versions.component.ts index a4f9d9328b..8b820713a6 100644 --- a/src/app/item-page/versions/item-versions.component.ts +++ b/src/app/item-page/versions/item-versions.component.ts @@ -18,7 +18,6 @@ import { TranslateService, } from '@ngx-translate/core'; import { - BehaviorSubject, combineLatest, Observable, Subscription, @@ -64,6 +63,16 @@ import { VarDirective } from '../../shared/utils/var.directive'; import { getItemPageRoute } from '../item-page-routing-paths'; import { ItemVersionsRowElementVersionComponent } from './item-versions-row-element-version/item-versions-row-element-version.component'; +interface VersionsDTO { + totalElements: number; + versionDTOs: VersionDTO[]; +} + +interface VersionDTO { + version: Version; + canEditVersion: Observable; +} + @Component({ selector: 'ds-item-versions', templateUrl: './item-versions.component.html', @@ -126,16 +135,15 @@ export class ItemVersionsComponent implements OnDestroy, OnInit { versionHistory$: Observable; /** - * The version history's list of versions + * The version history information that is used to render the HTML */ - versionsRD$: BehaviorSubject>> = new BehaviorSubject>>(null); + versionsDTO$: Observable; /** * Verify if the list of versions has at least one e-person to display * Used to hide the "Editor" column when no e-persons are present to display */ hasEpersons$: Observable; - /** * Verify if there is an inprogress submission in the version history * Used to disable the "Create version" button @@ -186,9 +194,6 @@ export class ItemVersionsComponent implements OnDestroy, OnInit { */ versionBeingEditedSummary: string; - canCreateVersion$: Observable; - createVersionTitle$: Observable; - constructor(private versionHistoryService: VersionHistoryDataService, private versionService: VersionDataService, private paginationService: PaginationService, @@ -305,16 +310,22 @@ export class ItemVersionsComponent implements OnDestroy, OnInit { */ getAllVersions(versionHistory$: Observable): void { const currentPagination = this.paginationService.getCurrentPagination(this.options.id, this.options); - combineLatest([versionHistory$, currentPagination]).pipe( + this.versionsDTO$ = combineLatest([versionHistory$, currentPagination]).pipe( switchMap(([versionHistory, options]: [VersionHistory, PaginationComponentOptions]) => { return this.versionHistoryService.getVersions(versionHistory.id, new PaginatedSearchOptions({ pagination: Object.assign({}, options, { currentPage: options.currentPage }) }), false, true, followLink('item'), followLink('eperson')); }), getFirstCompletedRemoteData(), - ).subscribe((res: RemoteData>) => { - this.versionsRD$.next(res); - }); + getRemoteDataPayload(), + map((versions: PaginatedList) => ({ + totalElements: versions.totalElements, + versionDTOs: (versions?.page ?? []).map((version: Version) => ({ + version: version, + canEditVersion: this.canEditVersion$(version), + })), + })), + ); } /** @@ -348,16 +359,12 @@ export class ItemVersionsComponent implements OnDestroy, OnInit { ); this.getAllVersions(this.versionHistory$); - this.hasEpersons$ = this.versionsRD$.pipe( - getAllSucceededRemoteData(), - getRemoteDataPayload(), - hasValueOperator(), - map((versions: PaginatedList) => versions.page.filter((version: Version) => version.eperson !== undefined).length > 0), + this.hasEpersons$ = this.versionsDTO$.pipe( + map((versionsDTO: VersionsDTO) => versionsDTO.versionDTOs.filter((versionDTO: VersionDTO) => versionDTO.version.eperson !== undefined).length > 0), startWith(false), ); - this.itemPageRoutes$ = this.versionsRD$.pipe( - getAllSucceededRemoteDataPayload(), - switchMap((versions) => combineLatest(versions.page.map((version) => version.item.pipe(getAllSucceededRemoteDataPayload())))), + this.itemPageRoutes$ = this.versionsDTO$.pipe( + switchMap((versionsDTO: VersionsDTO) => combineLatest(versionsDTO.versionDTOs.map((versionDTO: VersionDTO) => versionDTO.version.item.pipe(getAllSucceededRemoteDataPayload())))), map((versions) => { const itemPageRoutes = {}; versions.forEach((item) => itemPageRoutes[item.uuid] = getItemPageRoute(item));