mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-18 15:33:04 +00:00
[CST-4499] Version history (WIP) - Authorization features - Deleting
This commit is contained in:
@@ -47,7 +47,6 @@ export class VersionPageComponent implements OnInit {
|
|||||||
redirectOn4xx(this.router, this.authService),
|
redirectOn4xx(this.router, this.authService),
|
||||||
getFirstCompletedRemoteData(),
|
getFirstCompletedRemoteData(),
|
||||||
).subscribe((itemRD) => {
|
).subscribe((itemRD) => {
|
||||||
console.log(JSON.stringify(itemRD));
|
|
||||||
if (itemRD.hasNoContent) {
|
if (itemRD.hasNoContent) {
|
||||||
this.router.navigateByUrl(getPageNotFoundRoute(), { skipLocationChange: true });
|
this.router.navigateByUrl(getPageNotFoundRoute(), { skipLocationChange: true });
|
||||||
} else {
|
} else {
|
||||||
|
@@ -75,7 +75,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, itemVersion)"
|
(click)="deleteVersion(version, version.id==itemVersion.id)"
|
||||||
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>
|
||||||
|
@@ -131,11 +131,6 @@ export class ItemVersionsComponent implements OnInit {
|
|||||||
pageSize: this.pageSize
|
pageSize: this.pageSize
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* The current page being displayed
|
|
||||||
*/
|
|
||||||
currentPage$ = new BehaviorSubject<number>(1);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The routes to the versions their item pages
|
* The routes to the versions their item pages
|
||||||
* Key: Item ID
|
* Key: Item ID
|
||||||
@@ -253,6 +248,29 @@ export class ItemVersionsComponent implements OnInit {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getVersionHistory$(version: Version): Observable<VersionHistory> {
|
||||||
|
return this.versionHistoryService.getHistoryIdFromVersion$(version).pipe(
|
||||||
|
take(1),
|
||||||
|
switchMap((res) => this.versionHistoryService.findById(res)),
|
||||||
|
getFirstSucceededRemoteDataPayload(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteItemAndGetResult$(item: Item): Observable<boolean> {
|
||||||
|
return this.itemService.delete(item.id).pipe(
|
||||||
|
getFirstCompletedRemoteData(),
|
||||||
|
map((deleteItemRes) => deleteItemRes.hasSucceeded),
|
||||||
|
take(1),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
getLatestVersionItem$(versionHistory: VersionHistory): Observable<Item> {
|
||||||
|
return this.versionHistoryService.getLatestVersionFromHistory$(versionHistory).pipe(
|
||||||
|
switchMap((newLatestVersion) => newLatestVersion.item),
|
||||||
|
getFirstSucceededRemoteDataPayload(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes the specified version
|
* Deletes the specified version
|
||||||
* @param version the version to be deleted
|
* @param version the version to be deleted
|
||||||
@@ -269,8 +287,6 @@ export class ItemVersionsComponent implements OnInit {
|
|||||||
activeModal.componentInstance.versionNumber = version.version;
|
activeModal.componentInstance.versionNumber = version.version;
|
||||||
activeModal.componentInstance.firstVersion = false;
|
activeModal.componentInstance.firstVersion = false;
|
||||||
|
|
||||||
|
|
||||||
// OLD
|
|
||||||
const versionHistory$ = this.versionHistoryService.getHistoryIdFromVersion$(version).pipe(
|
const versionHistory$ = this.versionHistoryService.getHistoryIdFromVersion$(version).pipe(
|
||||||
take(1),
|
take(1),
|
||||||
switchMap((res) => this.versionHistoryService.findById(res)),
|
switchMap((res) => this.versionHistoryService.findById(res)),
|
||||||
@@ -280,118 +296,27 @@ export class ItemVersionsComponent implements OnInit {
|
|||||||
// On modal submit/dismiss
|
// On modal submit/dismiss
|
||||||
activeModal.result.then(() => {
|
activeModal.result.then(() => {
|
||||||
|
|
||||||
/*const versionHistory$ = this.versionHistoryService.getHistoryIdFromVersion$(version).pipe(
|
|
||||||
take(1),
|
|
||||||
map((versionHistoryId) => {
|
|
||||||
console.log('Version history ID = ' + versionHistoryId);
|
|
||||||
return versionHistoryId;
|
|
||||||
}),
|
|
||||||
switchMap((res) => this.versionHistoryService.findById(res)),
|
|
||||||
getFirstSucceededRemoteDataPayload(),
|
|
||||||
);*/
|
|
||||||
|
|
||||||
/*const deleteResultWithVersionHistory$ = versionHistory$.pipe(
|
|
||||||
switchMap((versionHisory) => combineLatest([
|
|
||||||
versionItem$.pipe(
|
|
||||||
getFirstSucceededRemoteDataPayload<Item>(),
|
|
||||||
switchMap((itemBeingDeleted) => this.itemService.delete(itemBeingDeleted.id)),
|
|
||||||
getFirstCompletedRemoteData(),
|
|
||||||
map((deleteItemRes) => deleteItemRes.hasSucceeded),
|
|
||||||
),
|
|
||||||
of(versionHisory)
|
|
||||||
])
|
|
||||||
)
|
|
||||||
);*/
|
|
||||||
|
|
||||||
/*const deleteResultWithNewLatestVersion = deleteResultWithVersionHistory$.pipe(
|
|
||||||
switchMap( ([deleteHasSucceeded, versionHisory]) => [
|
|
||||||
of(deleteHasSucceeded),
|
|
||||||
of(versionHisory).pipe(
|
|
||||||
switchMap((vh) => this.versionHistoryService.getLatestVersionFromHistory$(vh)),
|
|
||||||
switchMap((newLatestVersion) => newLatestVersion.item),
|
|
||||||
getFirstSucceededRemoteDataPayload(),
|
|
||||||
)
|
|
||||||
]),
|
|
||||||
).subscribe(([deleteHasSucceeded, newLatestVersionItem] ) => {
|
|
||||||
if (deleteHasSucceeded) {
|
|
||||||
this.notificationsService.success(null, this.translateService.get(successMessageKey, {'version': versionNumber}));
|
|
||||||
} else {
|
|
||||||
this.notificationsService.error(null, this.translateService.get(failureMessageKey, {'version': versionNumber}));
|
|
||||||
}
|
|
||||||
console.log('LATEST VERSION = ' + newLatestVersionItem.uuid);
|
|
||||||
if (redirectToLatest) {
|
|
||||||
const tmpPath = getItemEditVersionhistoryRoute(newLatestVersionItem);
|
|
||||||
console.log('PATH = ' + tmpPath);
|
|
||||||
this.router.navigateByUrl(tmpPath);
|
|
||||||
}
|
|
||||||
return this.versionHistoryService.getLatestVersion$(version);
|
|
||||||
});*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 1. recuperare version history
|
|
||||||
* 2. successivamente eliminare l'item
|
|
||||||
* 3. dopo aver eliminato l'item, recuperare la nuova versione
|
|
||||||
* 4. fare il redirect
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*versionItem$.pipe(
|
|
||||||
getFirstSucceededRemoteDataPayload<Item>(),
|
|
||||||
map((item) => item.id),
|
|
||||||
mergeMap((itemId) => combineLatest([
|
|
||||||
of(itemId).pipe(
|
|
||||||
// BEGIN DELETE
|
|
||||||
switchMap((id) => this.itemService.delete(id)),
|
|
||||||
getFirstCompletedRemoteData(),
|
|
||||||
map((deleteItemRes) => deleteItemRes.hasSucceeded),
|
|
||||||
// END DELETE
|
|
||||||
),
|
|
||||||
|
|
||||||
this.versionHistoryService.getHistoryIdFromVersion$(version).pipe(
|
|
||||||
take(1),
|
|
||||||
map((versionHistoryId) => {
|
|
||||||
console.log('Version history ID = ' + versionHistoryId);
|
|
||||||
return versionHistoryId;
|
|
||||||
}),
|
|
||||||
switchMap((res) => this.versionHistoryService.findById(res)),
|
|
||||||
getFirstSucceededRemoteDataPayload(),
|
|
||||||
switchMap((vh) => this.versionHistoryService.getLatestVersionFromHistory$(vh)),
|
|
||||||
switchMap((newLatestVersion) => newLatestVersion.item),
|
|
||||||
getFirstSucceededRemoteDataPayload(),
|
|
||||||
mergeMap((deleteHasSucceeded) => combineLatest([]))
|
|
||||||
)
|
|
||||||
|
|
||||||
])
|
|
||||||
),
|
|
||||||
).subscribe(([deleteHasSucceeded, newLatestVersionItem]) => {
|
|
||||||
if (deleteHasSucceeded) {
|
|
||||||
this.notificationsService.success(null, this.translateService.get(successMessageKey, {'version': versionNumber}));
|
|
||||||
} else {
|
|
||||||
this.notificationsService.error(null, this.translateService.get(failureMessageKey, {'version': versionNumber}));
|
|
||||||
}
|
|
||||||
console.log('LATEST VERSION = ' + newLatestVersionItem.uuid);
|
|
||||||
if (redirectToLatest) {
|
|
||||||
const tmpPath = getItemEditVersionhistoryRoute(newLatestVersionItem);
|
|
||||||
console.log('PATH = ' + tmpPath);
|
|
||||||
this.router.navigateByUrl(tmpPath);
|
|
||||||
}
|
|
||||||
return this.versionHistoryService.getLatestVersion$(version);
|
|
||||||
});*/
|
|
||||||
|
|
||||||
versionItem$.pipe(
|
versionItem$.pipe(
|
||||||
getFirstSucceededRemoteDataPayload<Item>(),
|
getFirstSucceededRemoteDataPayload<Item>(),
|
||||||
map((item) => item.id),
|
mergeMap((item) => combineLatest([
|
||||||
switchMap((itemId) => this.itemService.delete(itemId)),
|
// passa item, recupera vh
|
||||||
getFirstCompletedRemoteData(),
|
of(item),
|
||||||
map((deleteItemRes) => deleteItemRes.hasSucceeded),
|
versionHistory$.pipe(
|
||||||
mergeMap((deleteHasSucceeded) => combineLatest([
|
switchMap((vh) => this.versionHistoryService.getLatestVersionFromHistory$(vh)),
|
||||||
of(deleteHasSucceeded),
|
switchMap((newLatestVersion) => newLatestVersion.item),
|
||||||
versionHistory$.pipe(
|
getFirstSucceededRemoteDataPayload()
|
||||||
switchMap((vh) => this.versionHistoryService.getLatestVersionFromHistory$(vh)),
|
)
|
||||||
switchMap((newLatestVersion) => newLatestVersion.item),
|
])),
|
||||||
getFirstSucceededRemoteDataPayload()
|
mergeMap(([item, versionHistory]) => combineLatest([
|
||||||
)
|
// cancella item, passa vh
|
||||||
])
|
of(item).pipe(
|
||||||
),
|
map((itemBeingDeleted) => itemBeingDeleted.id),
|
||||||
|
switchMap((itemId) => this.itemService.delete(itemId)),
|
||||||
|
getFirstCompletedRemoteData(),
|
||||||
|
map((deleteItemRes) => deleteItemRes.hasSucceeded)
|
||||||
|
),
|
||||||
|
of(versionHistory)
|
||||||
|
])),
|
||||||
).subscribe(([deleteHasSucceeded, newLatestVersionItem]) => {
|
).subscribe(([deleteHasSucceeded, newLatestVersionItem]) => {
|
||||||
if (deleteHasSucceeded) {
|
if (deleteHasSucceeded) {
|
||||||
this.notificationsService.success(null, this.translateService.get(successMessageKey, {'version': versionNumber}));
|
this.notificationsService.success(null, this.translateService.get(successMessageKey, {'version': versionNumber}));
|
||||||
@@ -452,11 +377,11 @@ export class ItemVersionsComponent implements OnInit {
|
|||||||
);
|
);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
canEditVersion$(versionItem: Version) {
|
canEditVersion$(versionItem: Version): Observable<boolean> {
|
||||||
return this.authorizationService.isAuthorized(FeatureID.CanEditVersion, versionItem.self);
|
return this.authorizationService.isAuthorized(FeatureID.CanEditVersion, versionItem.self);
|
||||||
}
|
}
|
||||||
|
|
||||||
canDeleteVersion$(versionItem: Version) {
|
canDeleteVersion$(versionItem: Version): Observable<boolean> {
|
||||||
return this.authorizationService.isAuthorized(FeatureID.CanDeleteVersion, versionItem.self);
|
return this.authorizationService.isAuthorized(FeatureID.CanDeleteVersion, versionItem.self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user