From 55e77d1edba5b4dd2fcf7adbddda5465937f90da Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 29 Apr 2022 09:19:14 +0200 Subject: [PATCH] [CST-5253] Fix view item button for workspace items in the mydspace results list --- .../workspaceitem-actions.component.html | 4 +- .../workspaceitem-actions.component.spec.ts | 6 +++ .../workspace-item-page.resolver.spec.ts | 30 ++++++++++++ .../workspace-item-page.resolver.ts | 34 ++++++++++++++ ...workspaceitems-edit-page-routing.module.ts | 46 +++++++++++-------- .../workspaceitems-edit-page.module.ts | 4 +- 6 files changed, 100 insertions(+), 24 deletions(-) create mode 100644 src/app/workspaceitems-edit-page/workspace-item-page.resolver.spec.ts create mode 100644 src/app/workspaceitems-edit-page/workspace-item-page.resolver.ts 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.