diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html
index 8b6ad87ca2..c658651790 100644
--- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html
+++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html
@@ -1,6 +1,6 @@
-
-
\ No newline at end of file
+
diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts
index f5f98a26ce..7299c28df2 100644
--- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts
+++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts
@@ -132,6 +132,12 @@ describe('WorkspaceitemActionsComponent', () => {
expect(btn).toBeDefined();
});
+ it('should display view button', () => {
+ const btn = fixture.debugElement.query(By.css('button [data-test="view-btn"]'));
+
+ expect(btn).toBeDefined();
+ });
+
describe('on discard confirmation', () => {
beforeEach((done) => {
mockDataService.delete.and.returnValue(observableOf(true));
diff --git a/src/app/workspaceitems-edit-page/workspace-item-page.resolver.spec.ts b/src/app/workspaceitems-edit-page/workspace-item-page.resolver.spec.ts
new file mode 100644
index 0000000000..bbd3360db4
--- /dev/null
+++ b/src/app/workspaceitems-edit-page/workspace-item-page.resolver.spec.ts
@@ -0,0 +1,30 @@
+import { first } from 'rxjs/operators';
+import { WorkspaceItemPageResolver } from './workspace-item-page.resolver';
+import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service';
+import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils';
+
+describe('WorkflowItemPageResolver', () => {
+ describe('resolve', () => {
+ let resolver: WorkspaceItemPageResolver;
+ let wsiService: WorkspaceitemDataService;
+ const uuid = '1234-65487-12354-1235';
+
+ beforeEach(() => {
+ wsiService = {
+ findById: (id: string) => createSuccessfulRemoteDataObject$({ id })
+ } as any;
+ resolver = new WorkspaceItemPageResolver(wsiService);
+ });
+
+ it('should resolve a workspace item with the correct id', (done) => {
+ resolver.resolve({ params: { id: uuid } } as any, undefined)
+ .pipe(first())
+ .subscribe(
+ (resolved) => {
+ expect(resolved.payload.id).toEqual(uuid);
+ done();
+ }
+ );
+ });
+ });
+});
diff --git a/src/app/workspaceitems-edit-page/workspace-item-page.resolver.ts b/src/app/workspaceitems-edit-page/workspace-item-page.resolver.ts
new file mode 100644
index 0000000000..1b1aa25492
--- /dev/null
+++ b/src/app/workspaceitems-edit-page/workspace-item-page.resolver.ts
@@ -0,0 +1,34 @@
+import { Injectable } from '@angular/core';
+import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
+import { Observable } from 'rxjs';
+import { RemoteData } from '../core/data/remote-data';
+import { followLink } from '../shared/utils/follow-link-config.model';
+import { WorkspaceitemDataService } from '../core/submission/workspaceitem-data.service';
+import { WorkflowItem } from '../core/submission/models/workflowitem.model';
+import { getFirstCompletedRemoteData } from '../core/shared/operators';
+
+/**
+ * This class represents a resolver that requests a specific workflow item before the route is activated
+ */
+@Injectable()
+export class WorkspaceItemPageResolver implements Resolve> {
+ constructor(private workspaceItemService: WorkspaceitemDataService) {
+ }
+
+ /**
+ * Method for resolving a workflow item based on the parameters in the current route
+ * @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot
+ * @param {RouterStateSnapshot} state The current RouterStateSnapshot
+ * @returns Observable<> Emits the found workflow item based on the parameters in the current route,
+ * or an error if something went wrong
+ */
+ resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable> {
+ return this.workspaceItemService.findById(route.params.id,
+ true,
+ false,
+ followLink('item'),
+ ).pipe(
+ getFirstCompletedRemoteData(),
+ );
+ }
+}
diff --git a/src/app/workspaceitems-edit-page/workspaceitems-edit-page-routing.module.ts b/src/app/workspaceitems-edit-page/workspaceitems-edit-page-routing.module.ts
index 10c2f2a1d0..cc76634c03 100644
--- a/src/app/workspaceitems-edit-page/workspaceitems-edit-page-routing.module.ts
+++ b/src/app/workspaceitems-edit-page/workspaceitems-edit-page-routing.module.ts
@@ -6,32 +6,40 @@ import { ThemedSubmissionEditComponent } from '../submission/edit/themed-submiss
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';
+import { WorkspaceItemPageResolver } from './workspace-item-page.resolver';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', redirectTo: '/home', pathMatch: 'full' },
{
- canActivate: [AuthenticatedGuard],
- path: ':id/edit',
- component: ThemedSubmissionEditComponent,
- resolve: {
- 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' }
- },
+ path: ':id',
+ resolve: { wsi: WorkspaceItemPageResolver },
+ children: [
+ {
+ canActivate: [AuthenticatedGuard],
+ path: 'edit',
+ component: ThemedSubmissionEditComponent,
+ resolve: {
+ breadcrumb: I18nBreadcrumbResolver
+ },
+ data: { title: 'submission.edit.title', breadcrumbKey: 'submission.edit' }
+ },
+ {
+ canActivate: [AuthenticatedGuard],
+ path: 'view',
+ component: ThemedFullItemPageComponent,
+ resolve: {
+ dso: ItemFromWorkspaceResolver,
+ breadcrumb: I18nBreadcrumbResolver
+ },
+ data: { title: 'workspace-item.view.title', breadcrumbKey: 'workspace-item.view' }
+ }
+ ]
+ }
])
- ]
+ ],
+ providers: [WorkspaceItemPageResolver, ItemFromWorkspaceResolver]
})
/**
* This module defines the default component to load when navigating to the workspaceitems edit page path
diff --git a/src/app/workspaceitems-edit-page/workspaceitems-edit-page.module.ts b/src/app/workspaceitems-edit-page/workspaceitems-edit-page.module.ts
index 83f869881a..65a40f3f7c 100644
--- a/src/app/workspaceitems-edit-page/workspaceitems-edit-page.module.ts
+++ b/src/app/workspaceitems-edit-page/workspaceitems-edit-page.module.ts
@@ -3,7 +3,6 @@ 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: [
@@ -12,8 +11,7 @@ import { ItemFromWorkspaceResolver } from './item-from-workspace.resolver';
SharedModule,
SubmissionModule,
],
- declarations: [],
- providers: [ItemFromWorkspaceResolver]
+ declarations: []
})
/**
* This module handles all modules that need to access the workspaceitems edit page.