mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-19 07:53:02 +00:00
[CST-4499] Version history (WIP) - Redirect after deleting a version
This commit is contained in:
@@ -117,7 +117,7 @@ export class VersionHistoryDataService extends DataService<VersionHistory> {
|
|||||||
|
|
||||||
const latestVersionSearch = new PaginatedSearchOptions({pagination: latestVersionOptions});
|
const latestVersionSearch = new PaginatedSearchOptions({pagination: latestVersionOptions});
|
||||||
|
|
||||||
return this.getVersions(versionHistory.id, latestVersionSearch, true, true, followLink('item')).pipe(
|
return this.getVersions(versionHistory.id, latestVersionSearch, false, true, followLink('item')).pipe(
|
||||||
getAllSucceededRemoteData(),
|
getAllSucceededRemoteData(),
|
||||||
getRemoteDataPayload(),
|
getRemoteDataPayload(),
|
||||||
hasValueOperator(),
|
hasValueOperator(),
|
||||||
@@ -128,10 +128,14 @@ export class VersionHistoryDataService extends DataService<VersionHistory> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getLatestVersion$(version: Version): Observable<Version> {
|
getLatestVersion$(version: Version): Observable<Version> {
|
||||||
return version.versionhistory.pipe(
|
// retrieve again version, including with versionHistory
|
||||||
|
return this.versionDataService.findById(version.id, false, true, followLink('versionhistory')).pipe(
|
||||||
getFirstSucceededRemoteDataPayload(),
|
getFirstSucceededRemoteDataPayload(),
|
||||||
switchMap((versionHistoryRD) =>
|
switchMap((res) => res.versionhistory),
|
||||||
this.getLatestVersionFromHistory$(versionHistoryRD)
|
getFirstSucceededRemoteDataPayload(),
|
||||||
|
switchMap((versionHistoryRD) => {
|
||||||
|
return this.getLatestVersionFromHistory$(versionHistoryRD);
|
||||||
|
}
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,10 @@ export function getItemEditRoute(item: Item) {
|
|||||||
return new URLCombiner(getItemPageRoute(item), ITEM_EDIT_PATH).toString();
|
return new URLCombiner(getItemPageRoute(item), ITEM_EDIT_PATH).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getItemEditVersionhistoryRoute(item: Item) {
|
||||||
|
return new URLCombiner(getItemPageRoute(item), ITEM_EDIT_PATH, ITEM_EDIT_VERSIONHISTORY_PATH).toString();
|
||||||
|
}
|
||||||
|
|
||||||
export function getEntityPageRoute(entityType: string, itemId: string) {
|
export function getEntityPageRoute(entityType: string, itemId: string) {
|
||||||
if (isNotEmpty(entityType)) {
|
if (isNotEmpty(entityType)) {
|
||||||
return new URLCombiner('/entities', encodeURIComponent(entityType.toLowerCase()), itemId).toString();
|
return new URLCombiner('/entities', encodeURIComponent(entityType.toLowerCase()), itemId).toString();
|
||||||
@@ -43,5 +47,6 @@ export function getItemVersionRoute(versionId: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const ITEM_EDIT_PATH = 'edit';
|
export const ITEM_EDIT_PATH = 'edit';
|
||||||
|
export const ITEM_EDIT_VERSIONHISTORY_PATH = 'versionhistory';
|
||||||
export const ITEM_VERSION_PATH = 'version';
|
export const ITEM_VERSION_PATH = 'version';
|
||||||
export const UPLOAD_BITSTREAM_PATH = 'bitstreams/new';
|
export const UPLOAD_BITSTREAM_PATH = 'bitstreams/new';
|
||||||
|
@@ -70,7 +70,7 @@
|
|||||||
<button class="btn btn-sm"
|
<button class="btn btn-sm"
|
||||||
[ngClass]="isAnyBeingEdited() ? 'btn-outline-primary' : 'btn-outline-danger'"
|
[ngClass]="isAnyBeingEdited() ? 'btn-outline-primary' : 'btn-outline-danger'"
|
||||||
[disabled]="isAnyBeingEdited()"
|
[disabled]="isAnyBeingEdited()"
|
||||||
(click)="deleteVersion(version)"
|
(click)="deleteVersion(version, itemVersion)"
|
||||||
title="{{'item.version.history.table.action.deleteVersion' | translate}}">
|
title="{{'item.version.history.table.action.deleteVersion' | translate}}">
|
||||||
<i class="fas fa-trash fa-fw"></i>
|
<i class="fas fa-trash fa-fw"></i>
|
||||||
</button>
|
</button>
|
||||||
|
@@ -21,7 +21,11 @@ import { AlertType } from '../../alert/aletr-type';
|
|||||||
import { followLink } from '../../utils/follow-link-config.model';
|
import { followLink } from '../../utils/follow-link-config.model';
|
||||||
import { hasValue, hasValueOperator } from '../../empty.util';
|
import { hasValue, hasValueOperator } from '../../empty.util';
|
||||||
import { PaginationService } from '../../../core/pagination/pagination.service';
|
import { PaginationService } from '../../../core/pagination/pagination.service';
|
||||||
import { getItemPageRoute, getItemVersionRoute } from '../../../item-page/item-page-routing-paths';
|
import {
|
||||||
|
getItemEditVersionhistoryRoute,
|
||||||
|
getItemPageRoute,
|
||||||
|
getItemVersionRoute
|
||||||
|
} from '../../../item-page/item-page-routing-paths';
|
||||||
import { FormBuilder } from '@angular/forms';
|
import { FormBuilder } from '@angular/forms';
|
||||||
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { ItemVersionsSummaryModalComponent } from './item-versions-summary-modal/item-versions-summary-modal.component';
|
import { ItemVersionsSummaryModalComponent } from './item-versions-summary-modal/item-versions-summary-modal.component';
|
||||||
@@ -30,6 +34,7 @@ import { TranslateService } from '@ngx-translate/core';
|
|||||||
import { ItemVersionsDeleteModalComponent } from './item-versions-delete-modal/item-versions-delete-modal.component';
|
import { ItemVersionsDeleteModalComponent } from './item-versions-delete-modal/item-versions-delete-modal.component';
|
||||||
import { VersionDataService } from '../../../core/data/version-data.service';
|
import { VersionDataService } from '../../../core/data/version-data.service';
|
||||||
import { ItemDataService } from '../../../core/data/item-data.service';
|
import { ItemDataService } from '../../../core/data/item-data.service';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ds-item-versions',
|
selector: 'ds-item-versions',
|
||||||
@@ -154,7 +159,7 @@ export class ItemVersionsComponent implements OnInit {
|
|||||||
private modalService: NgbModal,
|
private modalService: NgbModal,
|
||||||
private notificationsService: NotificationsService,
|
private notificationsService: NotificationsService,
|
||||||
private translateService: TranslateService,
|
private translateService: TranslateService,
|
||||||
// private cacheService: ObjectCacheService,
|
private router: Router,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,11 +237,13 @@ export class ItemVersionsComponent implements OnInit {
|
|||||||
/**
|
/**
|
||||||
* Deletes the specified version
|
* Deletes the specified version
|
||||||
* @param version the version to be deleted
|
* @param version the version to be deleted
|
||||||
|
* @param redirectToLatest force the redirect to the latest version in the history
|
||||||
*/
|
*/
|
||||||
deleteVersion(version: Version) {
|
deleteVersion(version: Version, redirectToLatest: boolean) {
|
||||||
const successMessageKey = 'item.version.delete.notification.success';
|
const successMessageKey = 'item.version.delete.notification.success';
|
||||||
const failureMessageKey = 'item.version.delete.notification.failure';
|
const failureMessageKey = 'item.version.delete.notification.failure';
|
||||||
const versionNumber = version.version;
|
const versionNumber = version.version;
|
||||||
|
const versionItem$ = version.item;
|
||||||
|
|
||||||
// Open modal
|
// Open modal
|
||||||
const activeModal = this.modalService.open(ItemVersionsDeleteModalComponent);
|
const activeModal = this.modalService.open(ItemVersionsDeleteModalComponent);
|
||||||
@@ -247,22 +254,30 @@ export class ItemVersionsComponent implements OnInit {
|
|||||||
activeModal.result.then(() => {
|
activeModal.result.then(() => {
|
||||||
console.log('Deleting item...');
|
console.log('Deleting item...');
|
||||||
|
|
||||||
version.item.pipe(
|
versionItem$.pipe(
|
||||||
getFirstSucceededRemoteDataPayload<Item>(),
|
getFirstSucceededRemoteDataPayload<Item>(),
|
||||||
map((item) => item.id),
|
map((item) => item.id),
|
||||||
switchMap((itemId) => this.itemService.delete(itemId)),
|
switchMap((itemId) => this.itemService.delete(itemId)),
|
||||||
getFirstCompletedRemoteData()
|
getFirstCompletedRemoteData(),
|
||||||
).subscribe(
|
map((deleteItemRes) => deleteItemRes.hasSucceeded),
|
||||||
(deleteItemRes) => {
|
switchMap((deleteHasSucceeded) => {
|
||||||
console.log('DELETE: ' + JSON.stringify(deleteItemRes));
|
if (deleteHasSucceeded) {
|
||||||
if (deleteItemRes.hasSucceeded) {
|
|
||||||
this.notificationsService.success(null, this.translateService.get(successMessageKey, {'version': versionNumber}));
|
this.notificationsService.success(null, this.translateService.get(successMessageKey, {'version': versionNumber}));
|
||||||
this.refreshSubject.next(null);
|
|
||||||
} else {
|
} else {
|
||||||
this.notificationsService.error(null, this.translateService.get(failureMessageKey, {'version': versionNumber}));
|
this.notificationsService.error(null, this.translateService.get(failureMessageKey, {'version': versionNumber}));
|
||||||
}
|
}
|
||||||
|
return this.versionHistoryService.getLatestVersion$(version);
|
||||||
|
}),
|
||||||
|
switchMap((latestVersion) => latestVersion.item),
|
||||||
|
getFirstSucceededRemoteDataPayload(),
|
||||||
|
).subscribe((latestVersionItem) => {
|
||||||
|
console.log('LATEST VERSION = ' + latestVersionItem.uuid);
|
||||||
|
if (redirectToLatest) {
|
||||||
|
const tmpPath = getItemEditVersionhistoryRoute(latestVersionItem);
|
||||||
|
console.log('PATH = ' + tmpPath);
|
||||||
|
this.router.navigateByUrl(tmpPath);
|
||||||
}
|
}
|
||||||
);
|
});
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -274,6 +289,27 @@ export class ItemVersionsComponent implements OnInit {
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*map((item) => {
|
||||||
|
item.version.pipe(
|
||||||
|
getFirstSucceededRemoteDataPayload(),
|
||||||
|
switchMap( (itemVersion) => this.versionHistoryService.isLatest$(itemVersion)),
|
||||||
|
).subscribe((isLatestVersion) => {
|
||||||
|
isDeletingLatestVersion = isLatestVersion;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return item;
|
||||||
|
}),*/
|
||||||
|
/*mergeMap((versionItem) => combineLatest([
|
||||||
|
of(versionItem).pipe(
|
||||||
|
map((item) => item.id),
|
||||||
|
switchMap((itemId) => this.itemService.delete(itemId)),
|
||||||
|
getFirstCompletedRemoteData()
|
||||||
|
),
|
||||||
|
versionHistory$.pipe(
|
||||||
|
getFirstSucceededRemoteDataPayload(),
|
||||||
|
)
|
||||||
|
])),*/
|
||||||
|
|
||||||
|
|
||||||
// FUNZIONANTE:
|
// FUNZIONANTE:
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user