mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-13 04:53:06 +00:00
[DURACOM-134] Administer workflow actions fixed
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
import { NotificationsService } from 'src/app/shared/notifications/notifications.service';
|
||||
import { NoContent } from './../../core/shared/NoContent.model';
|
||||
import { RouteService } from 'src/app/core/services/route.service';
|
||||
import { getFirstCompletedRemoteData, getRemoteDataPayload } from './../../core/shared/operators';
|
||||
import { RemoteData } from 'src/app/core/data/remote-data';
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model';
|
||||
import { Observable, map, switchMap, take } from 'rxjs';
|
||||
import { ActivatedRoute, Data, Params, Router } from '@angular/router';
|
||||
import { Location } from '@angular/common';
|
||||
import { WorkspaceitemDataService } from 'src/app/core/submission/workspaceitem-data.service';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
||||
import { DSpaceObject } from 'src/app/core/shared/dspace-object.model';
|
||||
|
||||
@Component({
|
||||
selector: 'ds-workspaceitems-delete-page',
|
||||
templateUrl: './workspaceitems-delete-page.component.html',
|
||||
styleUrls: ['./workspaceitems-delete-page.component.scss']
|
||||
})
|
||||
export class WorkspaceItemsDeletePageComponent implements OnInit {
|
||||
|
||||
/**
|
||||
* The workspaceitem to delete
|
||||
*/
|
||||
public wsi$: Observable<WorkspaceItem>;
|
||||
|
||||
/**
|
||||
* The dspace object
|
||||
*/
|
||||
public dso$: Observable<DSpaceObject>;
|
||||
|
||||
/**
|
||||
* The previous query parameters
|
||||
*/
|
||||
private previousQueryParameters?: Params;
|
||||
|
||||
constructor(
|
||||
private activatedRoute: ActivatedRoute,
|
||||
private router: Router,
|
||||
private routeService: RouteService,
|
||||
private workspaceItemService: WorkspaceitemDataService,
|
||||
private notificationsService: NotificationsService,
|
||||
private translationService: TranslateService,
|
||||
private location: Location,
|
||||
private modalService: NgbModal,
|
||||
) { }
|
||||
|
||||
ngOnInit(): void {
|
||||
this.wsi$ = this.activatedRoute.data.pipe(map((data: Data) => data.wsi as RemoteData<WorkspaceItem>), getRemoteDataPayload());
|
||||
this.dso$ = this.activatedRoute.data.pipe(map((data: Data) => data.dso as RemoteData<WorkspaceItem>), getRemoteDataPayload());
|
||||
this.previousQueryParameters = (this.location.getState() as { [key: string]: any }).previousQueryParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates to the previous url
|
||||
* If there's not previous url, it continues to the mydspace page instead
|
||||
*/
|
||||
previousPage() {
|
||||
this.routeService.getPreviousUrl().pipe(take(1))
|
||||
.subscribe((url: string) => {
|
||||
let params: Params = {};
|
||||
if (!url) {
|
||||
url = '/mydspace';
|
||||
params = this.previousQueryParameters;
|
||||
}
|
||||
if (url.split('?').length > 1) {
|
||||
for (const param of url.split('?')[1].split('&')) {
|
||||
params[param.split('=')[0]] = decodeURIComponent(param.split('=')[1]);
|
||||
}
|
||||
}
|
||||
void this.router.navigate([url.split('?')[0]], { queryParams: params });
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Open the modal to confirm the deletion of the workspaceitem
|
||||
*/
|
||||
public async confirmDelete(content) {
|
||||
await this.modalService.open(content).result.then(
|
||||
(result) => {
|
||||
if (result === 'ok') {
|
||||
this.sendDeleteRequest();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the target workspaceitem object
|
||||
*/
|
||||
sendDeleteRequest() {
|
||||
this.wsi$.pipe(
|
||||
switchMap((wsi: WorkspaceItem) => this.workspaceItemService.delete(wsi.id).pipe(
|
||||
getFirstCompletedRemoteData(),
|
||||
))
|
||||
).subscribe((response: RemoteData<NoContent>) => {
|
||||
if (response.hasSucceeded) {
|
||||
const title = this.translationService.get('workspace-item.delete.notification.success.title');
|
||||
const content = this.translationService.get('workspace-item.delete.title');
|
||||
this.notificationsService.success(title, content);
|
||||
this.previousPage();
|
||||
} else {
|
||||
const title = this.translationService.get('workspace-item.delete.notification.error.title');
|
||||
const content = this.translationService.get('workspace-item.delete.notification.error.content');
|
||||
this.notificationsService.error(title, content);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user