-
-
-
-
-
-
-
-
- {{version.version}}
-
-
- {{version.version}}
-
- *
-
-
- {{ "item.version.history.table.workspaceItem" | translate }}
-
-
-
- {{ "item.version.history.table.workflowItem" | translate }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
|
{{version?.submitterName}}
diff --git a/src/app/item-page/versions/item-versions.component.scss b/src/app/item-page/versions/item-versions.component.scss
index 5594e0cafe..e69de29bb2 100644
--- a/src/app/item-page/versions/item-versions.component.scss
+++ b/src/app/item-page/versions/item-versions.component.scss
@@ -1,9 +0,0 @@
-.left-column {
- float: left;
- text-align: left;
-}
-
-.right-column {
- float: right;
- text-align: right;
-}
diff --git a/src/app/item-page/versions/item-versions.component.ts b/src/app/item-page/versions/item-versions.component.ts
index d93cdeb3b9..46852a8477 100644
--- a/src/app/item-page/versions/item-versions.component.ts
+++ b/src/app/item-page/versions/item-versions.component.ts
@@ -11,15 +11,8 @@ import {
OnDestroy,
OnInit,
} from '@angular/core';
-import {
- FormsModule,
- UntypedFormBuilder,
-} from '@angular/forms';
-import {
- Router,
- RouterLink,
-} from '@angular/router';
-import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
+import { FormsModule } from '@angular/forms';
+import { RouterLink } from '@angular/router';
import {
TranslateModule,
TranslateService,
@@ -28,22 +21,18 @@ import {
BehaviorSubject,
combineLatest,
Observable,
- of,
Subscription,
} from 'rxjs';
import {
map,
- mergeMap,
startWith,
switchMap,
take,
- tap,
} from 'rxjs/operators';
import { ConfigurationDataService } from '../../core/data/configuration-data.service';
import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service';
import { FeatureID } from '../../core/data/feature-authorization/feature-id';
-import { ItemDataService } from '../../core/data/item-data.service';
import { PaginatedList } from '../../core/data/paginated-list.model';
import { RemoteData } from '../../core/data/remote-data';
import { VersionDataService } from '../../core/data/version-data.service';
@@ -60,9 +49,6 @@ import {
} from '../../core/shared/operators';
import { Version } from '../../core/shared/version.model';
import { VersionHistory } from '../../core/shared/version-history.model';
-import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model';
-import { WorkflowItemDataService } from '../../core/submission/workflowitem-data.service';
-import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service';
import { AlertComponent } from '../../shared/alert/alert.component';
import { AlertType } from '../../shared/alert/alert-type';
import {
@@ -75,21 +61,15 @@ import { PaginationComponentOptions } from '../../shared/pagination/pagination-c
import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model';
import { followLink } from '../../shared/utils/follow-link-config.model';
import { VarDirective } from '../../shared/utils/var.directive';
-import {
- getItemEditVersionhistoryRoute,
- getItemPageRoute,
- getItemVersionRoute,
-} from '../item-page-routing-paths';
-import { ItemVersionsDeleteModalComponent } from './item-versions-delete-modal/item-versions-delete-modal.component';
-import { ItemVersionsSharedService } from './item-versions-shared.service';
-import { ItemVersionsSummaryModalComponent } from './item-versions-summary-modal/item-versions-summary-modal.component';
+import { getItemPageRoute } from '../item-page-routing-paths';
+import { ItemVersionsRowElementVersionComponent } from './item-versions-row-element-version/item-versions-row-element-version.component';
@Component({
selector: 'ds-item-versions',
templateUrl: './item-versions.component.html',
styleUrls: ['./item-versions.component.scss'],
standalone: true,
- imports: [VarDirective, NgIf, AlertComponent, PaginationComponent, NgFor, RouterLink, NgClass, FormsModule, AsyncPipe, DatePipe, TranslateModule],
+ imports: [VarDirective, NgIf, AlertComponent, PaginationComponent, NgFor, RouterLink, NgClass, FormsModule, AsyncPipe, DatePipe, TranslateModule, ItemVersionsRowElementVersionComponent],
})
/**
@@ -206,17 +186,10 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
constructor(private versionHistoryService: VersionHistoryDataService,
private versionService: VersionDataService,
- private itemService: ItemDataService,
private paginationService: PaginationService,
- private formBuilder: UntypedFormBuilder,
- private modalService: NgbModal,
private notificationsService: NotificationsService,
private translateService: TranslateService,
- private router: Router,
- private itemVersionShared: ItemVersionsSharedService,
private authorizationService: AuthorizationDataService,
- private workspaceItemDataService: WorkspaceitemDataService,
- private workflowItemDataService: WorkflowItemDataService,
private configurationService: ConfigurationDataService,
) {
}
@@ -255,14 +228,6 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
this.versionBeingEditedId = undefined;
}
- /**
- * Get the route to the specified version
- * @param versionId the ID of the version for which the route will be retrieved
- */
- getVersionRoute(versionId: string) {
- return getItemVersionRoute(versionId);
- }
-
/**
* Applies changes to version currently being edited
*/
@@ -291,121 +256,6 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
);
}
- /**
- * Delete the item and get the result of the operation
- * @param item
- */
- deleteItemAndGetResult$(item: Item): Observable {
- return this.itemService.delete(item.id).pipe(
- getFirstCompletedRemoteData(),
- map((deleteItemRes) => deleteItemRes.hasSucceeded),
- take(1),
- );
- }
-
- /**
- * Deletes the specified version, notify the success/failure and redirect to latest version
- * @param version the version to be deleted
- * @param redirectToLatest force the redirect to the latest version in the history
- */
- deleteVersion(version: Version, redirectToLatest: boolean): void {
- const successMessageKey = 'item.version.delete.notification.success';
- const failureMessageKey = 'item.version.delete.notification.failure';
- const versionNumber = version.version;
- const versionItem$ = version.item;
-
- // Open modal
- const activeModal = this.modalService.open(ItemVersionsDeleteModalComponent);
- activeModal.componentInstance.versionNumber = version.version;
- activeModal.componentInstance.firstVersion = false;
-
- // On modal submit/dismiss
- activeModal.componentInstance.response.pipe(take(1)).subscribe((ok) => {
- if (ok) {
- versionItem$.pipe(
- getFirstSucceededRemoteDataPayload- (),
- // Retrieve version history
- mergeMap((item: Item) => combineLatest([
- of(item),
- this.versionHistoryService.getVersionHistoryFromVersion$(version),
- ])),
- // Delete item
- mergeMap(([item, versionHistory]: [Item, VersionHistory]) => combineLatest([
- this.deleteItemAndGetResult$(item),
- of(versionHistory),
- ])),
- // Retrieve new latest version
- mergeMap(([deleteItemResult, versionHistory]: [boolean, VersionHistory]) => combineLatest([
- of(deleteItemResult),
- this.versionHistoryService.getLatestVersionItemFromHistory$(versionHistory).pipe(
- tap(() => {
- this.getAllVersions(of(versionHistory));
- }),
- ),
- ])),
- ).subscribe(([deleteHasSucceeded, newLatestVersionItem]: [boolean, Item]) => {
- // Notify operation result and redirect to latest item
- if (deleteHasSucceeded) {
- this.notificationsService.success(null, this.translateService.get(successMessageKey, { 'version': versionNumber }));
- } else {
- this.notificationsService.error(null, this.translateService.get(failureMessageKey, { 'version': versionNumber }));
- }
- if (redirectToLatest) {
- const path = getItemEditVersionhistoryRoute(newLatestVersionItem);
- this.router.navigateByUrl(path);
- }
- });
- }
- });
- }
-
- /**
- * Creates a new version starting from the specified one
- * @param version the version from which a new one will be created
- */
- createNewVersion(version: Version) {
- const versionNumber = version.version;
-
- // Open modal and set current version number
- const activeModal = this.modalService.open(ItemVersionsSummaryModalComponent);
- activeModal.componentInstance.versionNumber = versionNumber;
-
- // On createVersionEvent emitted create new version and notify
- activeModal.componentInstance.createVersionEvent.pipe(
- mergeMap((summary: string) => combineLatest([
- of(summary),
- version.item.pipe(getFirstSucceededRemoteDataPayload()),
- ])),
- mergeMap(([summary, item]: [string, Item]) => this.versionHistoryService.createVersion(item._links.self.href, summary)),
- getFirstCompletedRemoteData(),
- // close model (should be displaying loading/waiting indicator) when version creation failed/succeeded
- tap(() => activeModal.close()),
- // show success/failure notification
- tap((newVersionRD: RemoteData) => {
- this.itemVersionShared.notifyCreateNewVersion(newVersionRD);
- if (newVersionRD.hasSucceeded) {
- const versionHistory$ = this.versionService.getHistoryFromVersion(version).pipe(
- tap((versionHistory: VersionHistory) => {
- this.itemService.invalidateItemCache(this.item.uuid);
- this.versionHistoryService.invalidateVersionHistoryCache(versionHistory.id);
- }),
- );
- this.getAllVersions(versionHistory$);
- }
- }),
- // get workspace item
- getFirstSucceededRemoteDataPayload(),
- switchMap((newVersion: Version) => this.itemService.findByHref(newVersion._links.item.href)),
- getFirstSucceededRemoteDataPayload
- (),
- switchMap((newVersionItem: Item) => this.workspaceItemDataService.findByItem(newVersionItem.uuid, true, false)),
- getFirstSucceededRemoteDataPayload(),
- ).subscribe((wsItem) => {
- const wsiId = wsItem.id;
- const route = 'workspaceitems/' + wsiId + '/edit';
- this.router.navigateByUrl(route);
- });
- }
-
/**
* Check is the current user can edit the version summary
* @param version
@@ -444,14 +294,6 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
}
- /**
- * Check if the current user can delete the version
- * @param version
- */
- canDeleteVersion$(version: Version): Observable {
- return this.authorizationService.isAuthorized(FeatureID.CanDeleteVersion, version.self);
- }
-
/**
* Get all versions for the given version history and store them in versionRD$
* @param versionHistory$
@@ -477,44 +319,6 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
this.getAllVersions(this.versionHistory$);
}
- /**
- * Get the ID of the workspace item, if present, otherwise return undefined
- * @param versionItem the item for which retrieve the workspace item id
- */
- getWorkspaceId(versionItem): Observable {
- return versionItem.pipe(
- getFirstSucceededRemoteDataPayload(),
- map((item: Item) => item.uuid),
- switchMap((itemUuid: string) => this.workspaceItemDataService.findByItem(itemUuid, true)),
- getFirstCompletedRemoteData(),
- map((res: RemoteData) => res?.payload?.id ),
- );
- }
-
- /**
- * Get the ID of the workflow item, if present, otherwise return undefined
- * @param versionItem the item for which retrieve the workspace item id
- */
- getWorkflowId(versionItem): Observable {
- return versionItem.pipe(
- getFirstSucceededRemoteDataPayload(),
- map((item: Item) => item.uuid),
- switchMap((itemUuid: string) => this.workflowItemDataService.findByItem(itemUuid, true)),
- getFirstCompletedRemoteData(),
- map((res: RemoteData) => res?.payload?.id ),
- );
- }
-
- /**
- * redirect to the edit page of the workspace item
- * @param id$ the id of the workspace item
- */
- editWorkspaceItem(id$: Observable) {
- id$.subscribe((id) => {
- this.router.navigateByUrl('workspaceitems/' + id + '/edit');
- });
- }
-
/**
* Initialize all observables
*/
@@ -532,19 +336,12 @@ export class ItemVersionsComponent implements OnDestroy, OnInit {
hasValueOperator(),
);
- this.canCreateVersion$ = this.authorizationService.isAuthorized(FeatureID.CanCreateVersion, this.item.self);
-
// If there is a draft item in the version history the 'Create version' button is disabled and a different tooltip message is shown
this.hasDraftVersion$ = this.versionHistoryRD$.pipe(
getFirstSucceededRemoteDataPayload(),
map((res) => Boolean(res?.draftVersion)),
);
- this.createVersionTitle$ = this.hasDraftVersion$.pipe(
- take(1),
- switchMap((res) => of(res ? 'item.version.history.table.action.hasDraft' : 'item.version.history.table.action.newVersion')),
- );
-
this.getAllVersions(this.versionHistory$);
this.hasEpersons$ = this.versionsRD$.pipe(
getAllSucceededRemoteData(),
|