diff --git a/src/app/item-page/versions/item-versions.component.html b/src/app/item-page/versions/item-versions.component.html
index e9ea3bb0f9..d20dd70845 100644
--- a/src/app/item-page/versions/item-versions.component.html
+++ b/src/app/item-page/versions/item-versions.component.html
@@ -1,91 +1,92 @@
-
-
-
0 || displayWhenEmpty">
-
{{"item.version.history.head" | translate}}
-
- {{ "item.version.history.selected.alert" | translate : {version: itemVersion.version} }}
-
-
0"
- (paginationChange)="onPageChange()"
- [hideGear]="true"
- [hidePagerWhenSinglePage]="true"
- [paginationOptions]="options"
- [collectionSize]="versions?.totalElements"
- [retainScrollPosition]="true">
-
-
-
- {{"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 } }}
+
+ 0"
+ (paginationChange)="onPageChange()"
+ [hideGear]="true"
+ [hidePagerWhenSinglePage]="true"
+ [paginationOptions]="options"
+ [collectionSize]="versionsDTO.totalElements"
+ [retainScrollPosition]="true">
+
- * {{"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));