[CST-5253] Fix view item button for workspace items in the mydspace results list

This commit is contained in:
Giuseppe Digilio
2022-04-29 09:19:14 +02:00
parent d3ef3d3079
commit 55e77d1edb
6 changed files with 100 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
<div class="space-children-mr"> <div class="space-children-mr">
<button class="btn btn-primary workflow-view mt-1 mb-3" <button class="btn btn-primary workflow-view mt-1 mb-3" data-test="view-btn"
ngbTooltip="{{'submission.workspace.generic.view-help' | translate}}" ngbTooltip="{{'submission.workspace.generic.view-help' | translate}}"
[routerLink]="[getWorkspaceItemViewRoute(object)]"> [routerLink]="[getWorkspaceItemViewRoute(object)]">
<i class="fa fa-info-circle"></i> {{"submission.workspace.generic.view" | translate}} <i class="fa fa-info-circle"></i> {{"submission.workspace.generic.view" | translate}}
@@ -39,4 +39,4 @@
<button type="button" id="delete_confirm" class="btn btn-danger" <button type="button" id="delete_confirm" class="btn btn-danger"
(click)="c('ok')">{{'submission.general.discard.confirm.submit' | translate}}</button> (click)="c('ok')">{{'submission.general.discard.confirm.submit' | translate}}</button>
</div> </div>
</ng-template> </ng-template>

View File

@@ -132,6 +132,12 @@ describe('WorkspaceitemActionsComponent', () => {
expect(btn).toBeDefined(); 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', () => { describe('on discard confirmation', () => {
beforeEach((done) => { beforeEach((done) => {
mockDataService.delete.and.returnValue(observableOf(true)); mockDataService.delete.and.returnValue(observableOf(true));

View File

@@ -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();
}
);
});
});
});

View File

@@ -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<RemoteData<WorkflowItem>> {
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<<RemoteData<Item>> 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<RemoteData<WorkflowItem>> {
return this.workspaceItemService.findById(route.params.id,
true,
false,
followLink('item'),
).pipe(
getFirstCompletedRemoteData(),
);
}
}

View File

@@ -6,32 +6,40 @@ import { ThemedSubmissionEditComponent } from '../submission/edit/themed-submiss
import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
import { ThemedFullItemPageComponent } from '../item-page/full/themed-full-item-page.component'; import { ThemedFullItemPageComponent } from '../item-page/full/themed-full-item-page.component';
import { ItemFromWorkspaceResolver } from './item-from-workspace.resolver'; import { ItemFromWorkspaceResolver } from './item-from-workspace.resolver';
import { WorkspaceItemPageResolver } from './workspace-item-page.resolver';
@NgModule({ @NgModule({
imports: [ imports: [
RouterModule.forChild([ RouterModule.forChild([
{ path: '', redirectTo: '/home', pathMatch: 'full' }, { path: '', redirectTo: '/home', pathMatch: 'full' },
{ {
canActivate: [AuthenticatedGuard], path: ':id',
path: ':id/edit', resolve: { wsi: WorkspaceItemPageResolver },
component: ThemedSubmissionEditComponent, children: [
resolve: { {
breadcrumb: I18nBreadcrumbResolver canActivate: [AuthenticatedGuard],
}, path: 'edit',
data: { title: 'submission.edit.title', breadcrumbKey: 'submission.edit' } component: ThemedSubmissionEditComponent,
}, resolve: {
{ breadcrumb: I18nBreadcrumbResolver
canActivate: [AuthenticatedGuard], },
path: ':id/view', data: { title: 'submission.edit.title', breadcrumbKey: 'submission.edit' }
component: ThemedFullItemPageComponent, },
resolve: { {
dso: ItemFromWorkspaceResolver, canActivate: [AuthenticatedGuard],
breadcrumb: I18nBreadcrumbResolver path: 'view',
}, component: ThemedFullItemPageComponent,
data: { title: 'workspace-item.view.title', breadcrumbKey: 'workspace-item.view' } 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 * This module defines the default component to load when navigating to the workspaceitems edit page path

View File

@@ -3,7 +3,6 @@ import { NgModule } from '@angular/core';
import { SharedModule } from '../shared/shared.module'; import { SharedModule } from '../shared/shared.module';
import { WorkspaceitemsEditPageRoutingModule } from './workspaceitems-edit-page-routing.module'; import { WorkspaceitemsEditPageRoutingModule } from './workspaceitems-edit-page-routing.module';
import { SubmissionModule } from '../submission/submission.module'; import { SubmissionModule } from '../submission/submission.module';
import { ItemFromWorkspaceResolver } from './item-from-workspace.resolver';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -12,8 +11,7 @@ import { ItemFromWorkspaceResolver } from './item-from-workspace.resolver';
SharedModule, SharedModule,
SubmissionModule, SubmissionModule,
], ],
declarations: [], declarations: []
providers: [ItemFromWorkspaceResolver]
}) })
/** /**
* This module handles all modules that need to access the workspaceitems edit page. * This module handles all modules that need to access the workspaceitems edit page.