mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 01:54:15 +00:00
CST-5253] Finished functionalities
This commit is contained in:
@@ -70,6 +70,12 @@ export function getWorkflowItemModuleRoute() {
|
||||
return `/${WORKFLOW_ITEM_MODULE_PATH}`;
|
||||
}
|
||||
|
||||
export const WORKSPACE_ITEM_MODULE_PATH = 'workspaceitems';
|
||||
|
||||
export function getWorkspaceItemModuleRoute() {
|
||||
return `/${WORKSPACE_ITEM_MODULE_PATH}`;
|
||||
}
|
||||
|
||||
export function getDSORoute(dso: DSpaceObject): string {
|
||||
if (hasValue(dso)) {
|
||||
switch ((dso as any).type) {
|
||||
|
@@ -0,0 +1,43 @@
|
||||
import { DSpaceObject } from './../../shared/dspace-object.model';
|
||||
import { followLink } from './../../../shared/utils/follow-link-config.model';
|
||||
import { ChildHALResource } from './../../shared/child-hal-resource.model';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { switchMap } from 'rxjs/operators';
|
||||
import { DataService } from '../../data/data.service';
|
||||
import { RemoteData } from '../../data/remote-data';
|
||||
import { getFirstCompletedRemoteData } from '../../shared/operators';
|
||||
|
||||
/**
|
||||
* This class represents a resolver that requests a specific item before the route is activated
|
||||
*/
|
||||
@Injectable()
|
||||
export class SubmissionObjectResolver<T> implements Resolve<RemoteData<T>> {
|
||||
constructor(
|
||||
protected dataService: DataService<any>,
|
||||
protected store: Store<any>
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for resolving an item based on the parameters in the current route
|
||||
* @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot
|
||||
* @param {RouterStateSnapshot} state The current RouterStateSnapshot
|
||||
* @returns Observable<<RemoteData<Item>> Emits the found item based on the parameters in the current route,
|
||||
* or an error if something went wrong
|
||||
*/
|
||||
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<RemoteData<T>> {
|
||||
const itemRD$ = this.dataService.findById(route.params.id,
|
||||
true,
|
||||
false,
|
||||
followLink('item'),
|
||||
).pipe(
|
||||
getFirstCompletedRemoteData(),
|
||||
switchMap((wfiRD: RemoteData<any>) => wfiRD.payload.item as Observable<RemoteData<T>>),
|
||||
getFirstCompletedRemoteData()
|
||||
);
|
||||
return itemRD$;
|
||||
}
|
||||
}
|
@@ -1,21 +1,17 @@
|
||||
<ng-container *ngVar="(actionRD$ | async)?.payload as workflowAction">
|
||||
<div class="mt-1 mb-3 space-children-mr">
|
||||
<ds-claimed-task-actions-loader *ngFor="let option of workflowAction?.options"
|
||||
[option]="option"
|
||||
[object]="object"
|
||||
<ds-claimed-task-actions-loader *ngFor="let option of workflowAction?.options" [option]="option" [object]="object"
|
||||
(processCompleted)="this.processCompleted.emit($event)">
|
||||
</ds-claimed-task-actions-loader>
|
||||
|
||||
<ng-container *ngIf="hasViewAction(workflowAction)">
|
||||
<button class="btn btn-primary workflow-view"
|
||||
ngbTooltip="{{'submission.workflow.generic.view-help' | translate}}"
|
||||
<!-- <ng-container *ngIf="hasViewAction(workflowAction)"> -->
|
||||
<button class="btn btn-primary workflow-view" ngbTooltip="{{'submission.workflow.generic.view-help' | translate}}"
|
||||
[routerLink]="[getWorkflowItemViewRoute((workflowitem$ | async))]">
|
||||
<i class="fa fa-info-circle"></i> {{"submission.workflow.generic.view" | translate}}
|
||||
</button>
|
||||
</ng-container>
|
||||
<!-- </ng-container> -->
|
||||
|
||||
<ds-claimed-task-actions-loader [option]="returnToPoolOption"
|
||||
[object]="object"
|
||||
<ds-claimed-task-actions-loader [option]="returnToPoolOption" [object]="object"
|
||||
(processCompleted)="this.processCompleted.emit($event)">
|
||||
</ds-claimed-task-actions-loader>
|
||||
</div>
|
||||
|
@@ -1,8 +1,13 @@
|
||||
<button type="button"
|
||||
class="btn btn-info mt-1 mb-3"
|
||||
ngbTooltip="{{'submission.workflow.tasks.pool.claim_help' | translate}}"
|
||||
[disabled]="(processing$ | async)"
|
||||
<button type="button" class="btn btn-info mt-1 mb-3"
|
||||
ngbTooltip="{{'submission.workflow.tasks.pool.claim_help' | translate}}" [disabled]="(processing$ | async)"
|
||||
(click)="claim()">
|
||||
<span *ngIf="(processing$ | async)"><i class='fas fa-circle-notch fa-spin'></i> {{'submission.workflow.tasks.generic.processing' | translate}}</span>
|
||||
<span *ngIf="!(processing$ | async)"><i class="fas fa-hand-paper"></i> {{'submission.workflow.tasks.pool.claim' | translate}}</span>
|
||||
<span *ngIf="(processing$ | async)"><i class='fas fa-circle-notch fa-spin'></i>
|
||||
{{'submission.workflow.tasks.generic.processing' | translate}}</span>
|
||||
<span *ngIf="!(processing$ | async)"><i class="fas fa-hand-paper"></i> {{'submission.workflow.tasks.pool.claim' |
|
||||
translate}}</span>
|
||||
</button>
|
||||
<button class="btn btn-primary workflow-view ml-1 mt-1 mb-3"
|
||||
ngbTooltip="{{'submission.workflow.generic.view-help' | translate}}"
|
||||
[routerLink]="[getWorkflowItemViewRoute((workflowitem$ | async))]">
|
||||
<i class="fa fa-info-circle"></i> {{"submission.workflow.generic.view" | translate}}
|
||||
</button>
|
@@ -2,7 +2,7 @@ import { Component, Injector, Input, OnDestroy } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
|
||||
import { Observable } from 'rxjs';
|
||||
import {filter, map, switchMap, take} from 'rxjs/operators';
|
||||
import { filter, map, switchMap, take } from 'rxjs/operators';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
import { WorkflowItem } from '../../../core/submission/models/workflowitem.model';
|
||||
@@ -19,6 +19,7 @@ import { Item } from '../../../core/shared/item.model';
|
||||
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
|
||||
import { MyDSpaceReloadableActionsComponent } from '../mydspace-reloadable-actions';
|
||||
import { ProcessTaskResponse } from '../../../core/tasks/models/process-task-response';
|
||||
import { getWorkflowItemViewRoute } from '../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths';
|
||||
|
||||
/**
|
||||
* This component represents mydspace actions related to PoolTask object.
|
||||
@@ -115,4 +116,11 @@ export class PoolTaskActionsComponent extends MyDSpaceReloadableActionsComponent
|
||||
this.subs.forEach((sub) => sub.unsubscribe());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the workflowitem view route.
|
||||
*/
|
||||
getWorkflowItemViewRoute(workflowitem: WorkflowItem): string {
|
||||
return getWorkflowItemViewRoute(workflowitem?.id);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,22 +1,28 @@
|
||||
<div class="space-children-mr">
|
||||
<a class="btn btn-primary mt-1 mb-3"
|
||||
id="{{'edit_' + object.id}}"
|
||||
|
||||
<button class="btn btn-primary workflow-view mt-1 mb-3"
|
||||
ngbTooltip="{{'submission.workspace.generic.view-help' | translate}}"
|
||||
[routerLink]="[getWorkspaceItemViewRoute(object)]">
|
||||
<i class="fa fa-info-circle"></i> {{"submission.workspace.generic.view" | translate}}
|
||||
</button>
|
||||
|
||||
<a class="btn btn-primary mt-1 mb-3" id="{{'edit_' + object.id}}"
|
||||
ngbTooltip="{{'submission.workflow.generic.edit-help' | translate}}"
|
||||
[routerLink]="['/workspaceitems/' + object.id + '/edit']"
|
||||
role="button">
|
||||
[routerLink]="['/workspaceitems/' + object.id + '/edit']" role="button">
|
||||
<i class="fa fa-edit"></i> {{'submission.workflow.generic.edit' | translate}}
|
||||
</a>
|
||||
|
||||
<button type="button"
|
||||
id="{{'delete_' + object.id}}"
|
||||
class="btn btn-danger mt-1 mb-3"
|
||||
<button type="button" id="{{'delete_' + object.id}}" class="btn btn-danger mt-1 mb-3"
|
||||
ngbTooltip="{{'submission.workflow.generic.delete-help' | translate}}"
|
||||
(click)="$event.preventDefault();confirmDiscard(content)">
|
||||
<span *ngIf="(processingDelete$ | async)"><i class='fas fa-circle-notch fa-spin'></i> {{'submission.workflow.tasks.generic.processing' | translate}}</span>
|
||||
<span *ngIf="!(processingDelete$ | async)"><i class="fa fa-trash"></i> {{'submission.workflow.generic.delete' | translate}}</span>
|
||||
<span *ngIf="(processingDelete$ | async)"><i class='fas fa-circle-notch fa-spin'></i>
|
||||
{{'submission.workflow.tasks.generic.processing' | translate}}</span>
|
||||
<span *ngIf="!(processingDelete$ | async)"><i class="fa fa-trash"></i> {{'submission.workflow.generic.delete' |
|
||||
translate}}</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
<ng-template #content let-c="close" let-d="dismiss">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title text-danger">{{'submission.general.discard.confirm.title' | translate}}</h4>
|
||||
@@ -28,7 +34,9 @@
|
||||
<p>{{'submission.general.discard.confirm.info' | translate}}</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="delete_cancel" class="btn btn-secondary" (click)="c('cancel')">{{'submission.general.discard.confirm.cancel' | translate}}</button>
|
||||
<button type="button" id="delete_confirm"class="btn btn-danger" (click)="c('ok')">{{'submission.general.discard.confirm.submit' | translate}}</button>
|
||||
<button type="button" id="delete_cancel" class="btn btn-secondary"
|
||||
(click)="c('cancel')">{{'submission.general.discard.confirm.cancel' | translate}}</button>
|
||||
<button type="button" id="delete_confirm" class="btn btn-danger"
|
||||
(click)="c('ok')">{{'submission.general.discard.confirm.submit' | translate}}</button>
|
||||
</div>
|
||||
</ng-template>
|
@@ -14,6 +14,7 @@ import { SearchService } from '../../../core/shared/search/search.service';
|
||||
import { getFirstCompletedRemoteData } from '../../../core/shared/operators';
|
||||
import { RemoteData } from '../../../core/data/remote-data';
|
||||
import { NoContent } from '../../../core/shared/NoContent.model';
|
||||
import { getWorkspaceItemViewRoute } from '../../../workspaceitems-edit-page/workspaceitems-edit-page-routing-paths';
|
||||
|
||||
/**
|
||||
* This component represents actions related to WorkspaceItem object.
|
||||
@@ -85,4 +86,11 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent<Work
|
||||
this.object = object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the workflowitem view route.
|
||||
*/
|
||||
getWorkspaceItemViewRoute(workspaceItem: WorkspaceItem): string {
|
||||
return getWorkspaceItemViewRoute(workspaceItem?.id);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,43 +1,21 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Resolve } from '@angular/router';
|
||||
import { RemoteData } from '../core/data/remote-data';
|
||||
import { Item } from '../core/shared/item.model';
|
||||
import { followLink } from '../shared/utils/follow-link-config.model';
|
||||
import { getFirstCompletedRemoteData } from '../core/shared/operators';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { WorkflowItemDataService } from '../core/submission/workflowitem-data.service';
|
||||
import { WorkflowItem } from '../core/submission/models/workflowitem.model';
|
||||
import { switchMap } from 'rxjs/operators';
|
||||
import { SubmissionObjectResolver } from '../core/submission/resolver/submission-object.resolver';
|
||||
|
||||
/**
|
||||
* This class represents a resolver that requests a specific item before the route is activated
|
||||
*/
|
||||
@Injectable()
|
||||
export class ItemFromWorkflowResolver implements Resolve<RemoteData<Item>> {
|
||||
export class ItemFromWorkflowResolver extends SubmissionObjectResolver<Item> implements Resolve<RemoteData<Item>> {
|
||||
constructor(
|
||||
private workflowItemService: WorkflowItemDataService,
|
||||
protected store: Store<any>
|
||||
) {
|
||||
super(workflowItemService, store);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for resolving an item based on the parameters in the current route
|
||||
* @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot
|
||||
* @param {RouterStateSnapshot} state The current RouterStateSnapshot
|
||||
* @returns Observable<<RemoteData<Item>> Emits the found item based on the parameters in the current route,
|
||||
* or an error if something went wrong
|
||||
*/
|
||||
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<RemoteData<Item>> {
|
||||
const itemRD$ = this.workflowItemService.findById(route.params.id,
|
||||
true,
|
||||
false,
|
||||
followLink('item'),
|
||||
).pipe(
|
||||
getFirstCompletedRemoteData(),
|
||||
switchMap((wfiRD: RemoteData<WorkflowItem>) => wfiRD.payload.item as Observable<RemoteData<Item>>),
|
||||
getFirstCompletedRemoteData()
|
||||
);
|
||||
return itemRD$;
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,21 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Resolve } from '@angular/router';
|
||||
import { RemoteData } from '../core/data/remote-data';
|
||||
import { Item } from '../core/shared/item.model';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { SubmissionObjectResolver } from '../core/submission/resolver/submission-object.resolver';
|
||||
import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service';
|
||||
|
||||
/**
|
||||
* This class represents a resolver that requests a specific item before the route is activated
|
||||
*/
|
||||
@Injectable()
|
||||
export class ItemFromWorkspaceResolver extends SubmissionObjectResolver<Item> implements Resolve<RemoteData<Item>> {
|
||||
constructor(
|
||||
private workspaceItemService: WorkspaceitemDataService,
|
||||
protected store: Store<any>
|
||||
) {
|
||||
super(workspaceItemService, store);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
import { getWorkspaceItemModuleRoute } from '../app-routing-paths';
|
||||
import { URLCombiner } from '../core/url-combiner/url-combiner';
|
||||
|
||||
export function getWorkspaceItemViewRoute(wfiId: string) {
|
||||
return new URLCombiner(getWorkspaceItemModuleRoute(), wfiId, WORKSPACE_ITEM_VIEW_PATH).toString();
|
||||
}
|
||||
|
||||
export const WORKSPACE_ITEM_VIEW_PATH = 'view';
|
@@ -4,6 +4,8 @@ import { RouterModule } from '@angular/router';
|
||||
import { AuthenticatedGuard } from '../core/auth/authenticated.guard';
|
||||
import { ThemedSubmissionEditComponent } from '../submission/edit/themed-submission-edit.component';
|
||||
import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
|
||||
import { ThemedFullItemPageComponent } from '../item-page/full/themed-full-item-page.component';
|
||||
import { ItemFromWorkspaceResolver } from './item-from-workspace.resolver';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
@@ -17,7 +19,17 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso
|
||||
breadcrumb: I18nBreadcrumbResolver
|
||||
},
|
||||
data: { title: 'submission.edit.title', breadcrumbKey: 'submission.edit' }
|
||||
}
|
||||
},
|
||||
{
|
||||
canActivate: [AuthenticatedGuard],
|
||||
path: ':id/view',
|
||||
component: ThemedFullItemPageComponent,
|
||||
resolve: {
|
||||
dso: ItemFromWorkspaceResolver,
|
||||
breadcrumb: I18nBreadcrumbResolver
|
||||
},
|
||||
data: { title: 'workspace-item.view.title', breadcrumbKey: 'workspace-item.view' }
|
||||
},
|
||||
])
|
||||
]
|
||||
})
|
||||
|
@@ -3,6 +3,7 @@ import { NgModule } from '@angular/core';
|
||||
import { SharedModule } from '../shared/shared.module';
|
||||
import { WorkspaceitemsEditPageRoutingModule } from './workspaceitems-edit-page-routing.module';
|
||||
import { SubmissionModule } from '../submission/submission.module';
|
||||
import { ItemFromWorkspaceResolver } from './item-from-workspace.resolver';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
@@ -11,7 +12,8 @@ import { SubmissionModule } from '../submission/submission.module';
|
||||
SharedModule,
|
||||
SubmissionModule,
|
||||
],
|
||||
declarations: []
|
||||
declarations: [],
|
||||
providers: [ItemFromWorkspaceResolver]
|
||||
})
|
||||
/**
|
||||
* This module handles all modules that need to access the workspaceitems edit page.
|
||||
|
@@ -4054,6 +4054,10 @@
|
||||
"submission.workflow.tasks.pool.show-detail": "Show detail",
|
||||
|
||||
|
||||
"submission.workspace.generic.view": "View",
|
||||
|
||||
"submission.workspace.generic.view-help": "Select this option to view the item's metadata.",
|
||||
|
||||
|
||||
"thumbnail.default.alt": "Thumbnail Image",
|
||||
|
||||
@@ -4160,6 +4164,9 @@
|
||||
|
||||
"workflow-item.view.breadcrumbs": "Workflow View",
|
||||
|
||||
"workspace-item.view.breadcrumbs": "Workspace View",
|
||||
|
||||
"workspace-item.view.title": "Workspace View",
|
||||
|
||||
"idle-modal.header": "Session will expire soon",
|
||||
|
||||
|
Reference in New Issue
Block a user