[CST-4499] Version history (WIP) - Redirect after deleting a version

This commit is contained in:
Davide Negretti
2021-09-14 18:20:58 +02:00
parent 5d8f625d01
commit 60bbb9ace4
4 changed files with 61 additions and 16 deletions

View File

@@ -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);
}
), ),
); );
} }

View File

@@ -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';

View File

@@ -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>

View File

@@ -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: