diff --git a/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-workflow-action-abstract.component.ts b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-workflow-action-abstract.component.ts new file mode 100644 index 0000000000..be6935d900 --- /dev/null +++ b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-workflow-action-abstract.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'ds-advanced-workflow-action-abstract', + template: '', +}) +export abstract class AdvancedWorkflowActionAbstractComponent { +} diff --git a/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.html b/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.html index 8ed7b18640..84d3aa7cc7 100644 --- a/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.html +++ b/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.html @@ -1,4 +1,4 @@ diff --git a/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.ts b/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.ts index 0fb660b6e6..bfa676b30e 100644 --- a/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/rating-reviewer/advanced-claimed-task-action-rating-reviewer.component.ts @@ -4,12 +4,13 @@ import { NotificationsService } from '../../../notifications/notifications.servi import { TranslateService } from '@ngx-translate/core'; import { SearchService } from '../../../../core/shared/search/search.service'; import { RequestService } from '../../../../core/data/request.service'; -import { - getWorkflowRatingReviewerRoute -} from '../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; +import { getAdvancedWorkflowRoute } from '../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; import { AdvancedClaimedTaskActionsAbstractComponent } from '../abstract/advanced-claimed-task-actions-abstract.component'; +import { + ADVANCED_WORKFLOW_ACTION_RATING_REVIEWER +} from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component'; export const WORKFLOW_ADVANCED_TASK_OPTION_RATING_REVIEWER = 'submit_rating_reviewer'; @@ -25,6 +26,8 @@ export class AdvancedClaimedTaskActionRatingReviewerComponent extends AdvancedCl */ option = WORKFLOW_ADVANCED_TASK_OPTION_RATING_REVIEWER; + workflowType = ADVANCED_WORKFLOW_ACTION_RATING_REVIEWER; + /** * Route to the workflow's task page */ @@ -48,8 +51,8 @@ export class AdvancedClaimedTaskActionRatingReviewerComponent extends AdvancedCl /** * Initialise the route to the rating reviewer's page */ - initPageRoute() { - this.workflowTaskPageRoute = getWorkflowRatingReviewerRoute(this.object.id); + initPageRoute(): void { + this.workflowTaskPageRoute = getAdvancedWorkflowRoute(this.object.id); } } diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.html b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.html index 8ed7b18640..84d3aa7cc7 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.html +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.html @@ -1,4 +1,4 @@ diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts index 4ce3ec224a..6cb6c68816 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts @@ -8,9 +8,10 @@ import { NotificationsService } from '../../../notifications/notifications.servi import { TranslateService } from '@ngx-translate/core'; import { SearchService } from '../../../../core/shared/search/search.service'; import { RequestService } from '../../../../core/data/request.service'; +import { getAdvancedWorkflowRoute } from '../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; import { - getWorkflowSelectReviewerRoute -} from '../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; + ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER +} from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component'; export const WORKFLOW_ADVANCED_TASK_OPTION_SELECT_REVIEWER = 'submit_select_reviewer'; @@ -27,6 +28,8 @@ export class AdvancedClaimedTaskActionSelectReviewerComponent extends AdvancedCl */ option = WORKFLOW_ADVANCED_TASK_OPTION_SELECT_REVIEWER; + workflowType = ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER; + /** * Route to the workflow's task page */ @@ -51,7 +54,7 @@ export class AdvancedClaimedTaskActionSelectReviewerComponent extends AdvancedCl * Initialise the route to the select reviewer's page */ initPageRoute() { - this.workflowTaskPageRoute = getWorkflowSelectReviewerRoute(this.object.id); + this.workflowTaskPageRoute = getAdvancedWorkflowRoute(this.object.id); } } diff --git a/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator.ts b/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator.ts index a115c4e5b8..8e4dede9bb 100644 --- a/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator.ts +++ b/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator.ts @@ -1,23 +1,44 @@ import { hasNoValue } from '../../../empty.util'; -const map = new Map(); +const workflowOptions = new Map(); +const advancedWorkflowOptions = new Map(); /** * Decorator used for rendering ClaimedTaskActions pages by option type */ export function rendersWorkflowTaskOption(option: string) { return function decorator(component: any) { - if (hasNoValue(map.get(option))) { - map.set(option, component); + if (hasNoValue(workflowOptions.get(option))) { + workflowOptions.set(option, component); } else { throw new Error(`There can't be more than one component to render ClaimedTaskActions for option "${option}"`); } }; } +/** + * Decorator used for rendering AdvancedClaimedTaskActions pages by option type + */ +export function rendersAdvancedWorkflowTaskOption(option: string) { + return function decorator(component: any) { + if (hasNoValue(advancedWorkflowOptions.get(option))) { + advancedWorkflowOptions.set(option, component); + } else { + throw new Error(`There can't be more than one component to render AdvancedClaimedTaskActions for option "${option}"`); + } + }; +} + /** * Get the component used for rendering a ClaimedTaskActions page by option type */ export function getComponentByWorkflowTaskOption(option: string) { - return map.get(option); + return workflowOptions.get(option); +} + +/** + * Get the component used for rendering a AdvancedClaimedTaskActions page by option type + */ +export function getAdvancedComponentByWorkflowTaskOption(option: string) { + return advancedWorkflowOptions.get(option); } diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.html b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.html new file mode 100644 index 0000000000..7b0528d906 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.html @@ -0,0 +1,5 @@ +
+

{{'workflow-item.' + type + '.header' | translate}}

+ + +
diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.scss b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.spec.ts new file mode 100644 index 0000000000..ac713fa443 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { AdvancedWorkflowActionPageComponent } from './advanced-workflow-action-page.component'; + +describe('AdvancedWorkflowActionPageComponent', () => { + let component: AdvancedWorkflowActionPageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + AdvancedWorkflowActionPageComponent, + ], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AdvancedWorkflowActionPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.ts new file mode 100644 index 0000000000..e6c7da7d59 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'ds-advanced-workflow-action-page', + templateUrl: './advanced-workflow-action-page.component.html', + styleUrls: ['./advanced-workflow-action-page.component.scss'] +}) +export class AdvancedWorkflowActionPageComponent implements OnInit { + + public type: string; + + constructor( + protected route: ActivatedRoute, + ) { + } + + ngOnInit(): void { + this.type = this.route.snapshot.queryParams.workflow; + } + +} diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.html b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.html new file mode 100644 index 0000000000..1b26ba3599 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.html @@ -0,0 +1 @@ +

advanced-workflow-action-rating-reviewer works!

diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.scss b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.spec.ts new file mode 100644 index 0000000000..c08e3c0a78 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AdvancedWorkflowActionRatingReviewerComponent } from './advanced-workflow-action-rating-reviewer.component'; + +describe('AdvancedWorkflowActionRatingReviewerComponent', () => { + let component: AdvancedWorkflowActionRatingReviewerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AdvancedWorkflowActionRatingReviewerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AdvancedWorkflowActionRatingReviewerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.ts new file mode 100644 index 0000000000..4e0185401d --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { + rendersAdvancedWorkflowTaskOption +} from '../../../shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator'; + +export const ADVANCED_WORKFLOW_ACTION_RATING_REVIEWER = 'ratingrevieweraction'; + +@rendersAdvancedWorkflowTaskOption(ADVANCED_WORKFLOW_ACTION_RATING_REVIEWER) +@Component({ + selector: 'ds-advanced-workflow-action-rating-reviewer', + templateUrl: './advanced-workflow-action-rating-reviewer.component.html', + styleUrls: ['./advanced-workflow-action-rating-reviewer.component.scss'] +}) +export class AdvancedWorkflowActionRatingReviewerComponent { +} diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.html b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.html new file mode 100644 index 0000000000..4380e45594 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.html @@ -0,0 +1 @@ +advancedInfo: {{ (workflowAction | async)?.advancedInfo | json }} diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.scss b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts new file mode 100644 index 0000000000..b4f420774b --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AdvancedWorkflowActionSelectReviewerComponent } from './advanced-workflow-action-select-reviewer.component'; + +describe('AdvancedWorkflowActionSelectReviewerComponent', () => { + let component: AdvancedWorkflowActionSelectReviewerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AdvancedWorkflowActionSelectReviewerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AdvancedWorkflowActionSelectReviewerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts new file mode 100644 index 0000000000..8ba2850202 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { + rendersAdvancedWorkflowTaskOption +} from '../../../shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator'; +import { AdvancedWorkflowActionComponent } from '../advanced-workflow-action/advanced-workflow-action.component'; + +export const ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER = 'selectrevieweraction'; + +@rendersAdvancedWorkflowTaskOption(ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER) +@Component({ + selector: 'ds-advanced-workflow-action-select-reviewer', + templateUrl: './advanced-workflow-action-select-reviewer.component.html', + styleUrls: ['./advanced-workflow-action-select-reviewer.component.scss'], +}) +export class AdvancedWorkflowActionSelectReviewerComponent extends AdvancedWorkflowActionComponent { +} diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.html b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.html new file mode 100644 index 0000000000..4fbedb9f3e --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.html @@ -0,0 +1 @@ +

advanced-workflow-action works!

diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.scss b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts new file mode 100644 index 0000000000..974dd4c257 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AdvancedWorkflowActionComponent } from './advanced-workflow-action.component'; + +describe('AdvancedWorkflowActionComponent', () => { + let component: AdvancedWorkflowActionComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AdvancedWorkflowActionComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AdvancedWorkflowActionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.ts new file mode 100644 index 0000000000..0554e8463f --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.ts @@ -0,0 +1,29 @@ +import { Component, OnInit } from '@angular/core'; +import { WorkflowAction } from '../../../core/tasks/models/workflow-action-object.model'; +import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service'; +import { ActivatedRoute } from '@angular/router'; +import { Observable } from 'rxjs'; +import { getFirstSucceededRemoteDataPayload } from '../../../core/shared/operators'; + +@Component({ + selector: 'ds-advanced-workflow-action', + templateUrl: './advanced-workflow-action.component.html', + styleUrls: ['./advanced-workflow-action.component.scss'] +}) +export class AdvancedWorkflowActionComponent implements OnInit { + + workflowAction: Observable; + + constructor( + protected route: ActivatedRoute, + protected workflowActionService: WorkflowActionDataService, + ) { + } + + ngOnInit(): void { + this.workflowAction = this.workflowActionService.findById(this.route.snapshot.queryParams.workflow).pipe( + getFirstSucceededRemoteDataPayload(), + ); + } + +} diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-claimed-task-actions.directive.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-claimed-task-actions.directive.ts new file mode 100644 index 0000000000..b2ed49b502 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-claimed-task-actions.directive.ts @@ -0,0 +1,16 @@ +import { Directive, ViewContainerRef } from '@angular/core'; + +@Directive({ + selector: '[dsAdvancedClaimedTaskActions]', +}) +/** + * Directive used as a hook to know where to inject the dynamic Advanced Claimed Task Actions component + */ +export class AdvancedClaimedTaskActionsDirective { + + constructor( + public viewContainerRef: ViewContainerRef, + ) { + } + +} diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.html b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.html new file mode 100644 index 0000000000..2374ed7913 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.html @@ -0,0 +1 @@ + diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.scss b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts new file mode 100644 index 0000000000..49cf92b171 --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { AdvancedWorkflowActionsLoaderComponent } from './advanced-workflow-actions-loader.component'; + +describe('AdvancedWorkflowActionsLoaderComponent', () => { + let component: AdvancedWorkflowActionsLoaderComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + AdvancedWorkflowActionsLoaderComponent, + ], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AdvancedWorkflowActionsLoaderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.ts new file mode 100644 index 0000000000..ac6d2f171d --- /dev/null +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component.ts @@ -0,0 +1,54 @@ +import { Component, Input, ViewChild, ComponentFactoryResolver, OnInit } from '@angular/core'; +import { hasValue } from '../../../shared/empty.util'; +import { + getAdvancedComponentByWorkflowTaskOption +} from '../../../shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator'; +import { AdvancedClaimedTaskActionsDirective } from './advanced-claimed-task-actions.directive'; +import { Router } from '@angular/router'; +import { PAGE_NOT_FOUND_PATH } from '../../../app-routing-paths'; + +@Component({ + selector: 'ds-advanced-workflow-actions-loader', + templateUrl: './advanced-workflow-actions-loader.component.html', + styleUrls: ['./advanced-workflow-actions-loader.component.scss'], +}) +export class AdvancedWorkflowActionsLoaderComponent implements OnInit { + + /** + * The name of the type to render + * Passed on to the decorator to fetch the relevant component for this option + */ + @Input() type: string; + + /** + * Directive to determine where the dynamic child component is located + */ + @ViewChild(AdvancedClaimedTaskActionsDirective, { static: true }) claimedTaskActionsDirective: AdvancedClaimedTaskActionsDirective; + + constructor( + private componentFactoryResolver: ComponentFactoryResolver, + private router: Router, + ) { + } + + /** + * Fetch, create and initialize the relevant component + */ + ngOnInit(): void { + const comp = this.getComponentByWorkflowTaskOption(this.type); + if (hasValue(comp)) { + const componentFactory = this.componentFactoryResolver.resolveComponentFactory(comp); + + const viewContainerRef = this.claimedTaskActionsDirective.viewContainerRef; + viewContainerRef.clear(); + viewContainerRef.createComponent(componentFactory); + } else { + void this.router.navigate([PAGE_NOT_FOUND_PATH]); + } + } + + getComponentByWorkflowTaskOption(option: string) { + return getAdvancedComponentByWorkflowTaskOption(option); + } + +} diff --git a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing-paths.ts b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing-paths.ts index c39bd1fc48..ece61f0321 100644 --- a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing-paths.ts +++ b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing-paths.ts @@ -1,6 +1,5 @@ import { URLCombiner } from '../core/url-combiner/url-combiner'; import { getWorkflowItemModuleRoute } from '../app-routing-paths'; -import { RATING_REVIEWER_ACTION_ADVANCED_INFO } from '../core/tasks/models/reviewer-action-advanced-info.resource-type'; export function getWorkflowItemPageRoute(wfiId: string) { return new URLCombiner(getWorkflowItemModuleRoute(), wfiId).toString(); @@ -21,16 +20,12 @@ export function getWorkflowItemSendBackRoute(wfiId: string) { return new URLCombiner(getWorkflowItemModuleRoute(), wfiId, WORKFLOW_ITEM_SEND_BACK_PATH).toString(); } -export function getWorkflowSelectReviewerRoute(wfiId: string) { - return new URLCombiner(getWorkflowItemModuleRoute(), wfiId, WORKFLOW_SELECT_REVIEWER_PATH).toString(); -} -export function getWorkflowRatingReviewerRoute(wfiId: string) { - return new URLCombiner(getWorkflowItemModuleRoute(), wfiId, WORKFLOW_RATING_REVIEWER_PATH).toString(); +export function getAdvancedWorkflowRoute(wfiId: string) { + return new URLCombiner(getWorkflowItemModuleRoute(), wfiId, ADVANCED_WORKFLOW_PATH).toString(); } export const WORKFLOW_ITEM_EDIT_PATH = 'edit'; export const WORKFLOW_ITEM_DELETE_PATH = 'delete'; export const WORKFLOW_ITEM_VIEW_PATH = 'view'; export const WORKFLOW_ITEM_SEND_BACK_PATH = 'sendback'; -export const WORKFLOW_SELECT_REVIEWER_PATH = 'selectreviewer'; -export const WORKFLOW_RATING_REVIEWER_PATH = 'ratingreviewer'; +export const ADVANCED_WORKFLOW_PATH = 'advanced'; diff --git a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts index 722e8b3768..06536d5816 100644 --- a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts +++ b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts @@ -8,8 +8,7 @@ import { WORKFLOW_ITEM_EDIT_PATH, WORKFLOW_ITEM_SEND_BACK_PATH, WORKFLOW_ITEM_VIEW_PATH, - WORKFLOW_SELECT_REVIEWER_PATH, - WORKFLOW_RATING_REVIEWER_PATH, + ADVANCED_WORKFLOW_PATH, } from './workflowitems-edit-page-routing-paths'; import { ThemedSubmissionEditComponent } from '../submission/edit/themed-submission-edit.component'; import { ThemedWorkflowItemDeleteComponent } from './workflow-item-delete/themed-workflow-item-delete.component'; @@ -17,6 +16,9 @@ import { ThemedWorkflowItemSendBackComponent } from './workflow-item-send-back/t import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; import { ItemFromWorkflowResolver } from './item-from-workflow.resolver'; import { ThemedFullItemPageComponent } from '../item-page/full/themed-full-item-page.component'; +import { + AdvancedWorkflowActionPageComponent +} from './advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component'; @NgModule({ imports: [ @@ -64,21 +66,12 @@ import { ThemedFullItemPageComponent } from '../item-page/full/themed-full-item- }, { canActivate: [AuthenticatedGuard], - path: WORKFLOW_SELECT_REVIEWER_PATH, - component: ThemedWorkflowItemSendBackComponent, + path: ADVANCED_WORKFLOW_PATH, + component: AdvancedWorkflowActionPageComponent, resolve: { breadcrumb: I18nBreadcrumbResolver }, - data: { title: 'workflow-item.select-reviewer.title', breadcrumbKey: 'workflow-item.edit' } - }, - { - canActivate: [AuthenticatedGuard], - path: WORKFLOW_RATING_REVIEWER_PATH, - component: ThemedWorkflowItemSendBackComponent, - resolve: { - breadcrumb: I18nBreadcrumbResolver - }, - data: { title: 'workflow-item.rating-reviewer.title', breadcrumbKey: 'workflow-item.edit' } + data: { title: 'workflow-item.advanced.title', breadcrumbKey: 'workflow-item.edit' } }, ] }] diff --git a/src/app/workflowitems-edit-page/workflowitems-edit-page.module.ts b/src/app/workflowitems-edit-page/workflowitems-edit-page.module.ts index e99a3ca958..2e1ae4c820 100644 --- a/src/app/workflowitems-edit-page/workflowitems-edit-page.module.ts +++ b/src/app/workflowitems-edit-page/workflowitems-edit-page.module.ts @@ -9,6 +9,16 @@ import { ThemedWorkflowItemDeleteComponent } from './workflow-item-delete/themed import { ThemedWorkflowItemSendBackComponent } from './workflow-item-send-back/themed-workflow-item-send-back.component'; import { StatisticsModule } from '../statistics/statistics.module'; import { ItemPageModule } from '../item-page/item-page.module'; +import { + AdvancedWorkflowActionsLoaderComponent +} from './advanced-workflow-action/advanced-workflow-actions-loader/advanced-workflow-actions-loader.component'; +import { AdvancedWorkflowActionRatingReviewerComponent } from './advanced-workflow-action/advanced-workflow-action-rating-reviewer/advanced-workflow-action-rating-reviewer.component'; +import { AdvancedWorkflowActionSelectReviewerComponent } from './advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component'; +import { AdvancedWorkflowActionPageComponent } from './advanced-workflow-action/advanced-workflow-action-page/advanced-workflow-action-page.component'; +import { + AdvancedClaimedTaskActionsDirective +} from './advanced-workflow-action/advanced-workflow-actions-loader/advanced-claimed-task-actions.directive'; +import { AdvancedWorkflowActionComponent } from './advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component'; @NgModule({ imports: [ @@ -23,7 +33,13 @@ import { ItemPageModule } from '../item-page/item-page.module'; WorkflowItemDeleteComponent, ThemedWorkflowItemDeleteComponent, WorkflowItemSendBackComponent, - ThemedWorkflowItemSendBackComponent + ThemedWorkflowItemSendBackComponent, + AdvancedWorkflowActionsLoaderComponent, + AdvancedWorkflowActionRatingReviewerComponent, + AdvancedWorkflowActionSelectReviewerComponent, + AdvancedWorkflowActionPageComponent, + AdvancedClaimedTaskActionsDirective, + AdvancedWorkflowActionComponent, ] }) /** diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index f2b6a6459a..5f3ac8e069 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -4164,11 +4164,11 @@ "workflow-item.view.breadcrumbs": "Workflow View", + "workflow-item.advanced.title": "Advanced workflow", - "workflow-item.select-reviewer.title": "Select Reviewer", + "workflow-item.selectrevieweraction.header": "Select Reviewer", - - "workflow-item.rating-reviewer.title": "Rating Reviewer", + "workflow-item.ratingrevieweraction.header": "Rating Reviewer", "idle-modal.header": "Session will expire soon", diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index e2e97b9087..98b8c553af 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -178,6 +178,9 @@ const DECLARATIONS = [ ResourcePoliciesModule, ComcolModule ], + exports: [ + FullItemPageComponent + ], declarations: DECLARATIONS })