From 4797888aa7e5119ed7deebc759072f85dcf3efaf Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Tue, 6 Sep 2022 09:54:25 +0300 Subject: [PATCH] RED-4788: fix workflow view permissions --- .../dossier-overview/config.service.ts | 44 ++++++++++++++----- .../dossier-overview-screen.component.ts | 2 +- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts index 91a65a4f3..df69e776f 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts @@ -1,6 +1,7 @@ import { Injectable, TemplateRef } from '@angular/core'; import { ActionConfig, + getParam, IFilterGroup, INestedFilter, keyChecker, @@ -15,7 +16,7 @@ import { import { annotationDefaultColorConfig, AnnotationShapeMap, - Dossier, + DOSSIER_ID, File, IFileAttributeConfig, ProcessingType, @@ -39,10 +40,12 @@ import { DefaultColorsService } from '@services/entity-services/default-colors.s import { map } from 'rxjs/operators'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; import { UserPreferenceService } from '@users/user-preference.service'; +import { DossiersService } from '@services/dossiers/dossiers.service'; @Injectable() export class ConfigService { readonly listingMode$: Observable; + readonly dossierId = getParam(DOSSIER_ID); private readonly _listingMode$ = new BehaviorSubject(ListingModes.table); constructor( @@ -55,6 +58,7 @@ export class ConfigService { private readonly _defaultColorsService: DefaultColorsService, private readonly _dictionariesMapService: DictionariesMapService, private readonly _userPreferenceService: UserPreferenceService, + private readonly _dossiersService: DossiersService, ) { this.listingMode$ = this._listingMode$.asObservable(); @@ -71,14 +75,18 @@ export class ConfigService { this._userPreferenceService.saveFilesListingMode(listingMode); } - workflowConfig(dossier: Dossier): WorkflowConfig { + get #dossier() { + return this._dossiersService.find(this.dossierId); + } + + workflowConfig(): WorkflowConfig { const { NEW, UNDER_REVIEW, UNDER_APPROVAL, APPROVED } = WorkflowFileStatuses; const newColumn: WorkflowColumn = { label: workflowFileStatusTranslations[NEW], key: NEW, enterFn: files => this._bulkActionsService.setToNew(files), - enterPredicate: files => this._permissionsService.canSetToNew(files, dossier), + enterPredicate: files => this._permissionsService.canSetToNew(files, this.#dossier), color: '#D3D5DA', entities: new BehaviorSubject([]), }; @@ -93,11 +101,15 @@ export class ConfigService { await this._bulkActionsService.assignToMe(files); } }, - enterPredicate: files => - this._permissionsService.canSetUnderReview(files, dossier) || - this._permissionsService.canAssignToSelf(files, dossier) || - this._permissionsService.canAssignUser(files, dossier) || - this._permissionsService.canUndoApproval(files, dossier), + enterPredicate: files => { + const dossier = this.#dossier; + return ( + this._permissionsService.canSetUnderReview(files, dossier) || + this._permissionsService.canAssignToSelf(files, dossier) || + this._permissionsService.canAssignUser(files, dossier) || + this._permissionsService.canUndoApproval(files, dossier) + ); + }, key: UNDER_REVIEW, color: '#FDBD00', entities: new BehaviorSubject([]), @@ -106,8 +118,12 @@ export class ConfigService { const underApprovalColumn: WorkflowColumn = { label: workflowFileStatusTranslations[UNDER_APPROVAL], enterFn: files => this._bulkActionsService.setToUnderApproval(files), - enterPredicate: files => - this._permissionsService.canSetUnderApproval(files, dossier) || this._permissionsService.canUndoApproval(files, dossier), + enterPredicate: files => { + const dossier = this.#dossier; + return ( + this._permissionsService.canSetUnderApproval(files, dossier) || this._permissionsService.canUndoApproval(files, dossier) + ); + }, key: UNDER_APPROVAL, color: '#374C81', entities: new BehaviorSubject([]), @@ -116,8 +132,12 @@ export class ConfigService { const approvedColumn: WorkflowColumn = { label: workflowFileStatusTranslations[APPROVED], enterFn: files => this._bulkActionsService.approve(files), - enterPredicate: files => - this._permissionsService.isReadyForApproval(files, dossier) && this._permissionsService.canBeApproved(files, dossier), + enterPredicate: files => { + const dossier = this.#dossier; + return ( + this._permissionsService.isReadyForApproval(files, dossier) && this._permissionsService.canBeApproved(files, dossier) + ); + }, key: APPROVED, color: '#48C9F7', entities: new BehaviorSubject([]), diff --git a/apps/red-ui/src/app/modules/dossier-overview/screen/dossier-overview-screen.component.ts b/apps/red-ui/src/app/modules/dossier-overview/screen/dossier-overview-screen.component.ts index 6c5836135..70b88ed92 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/screen/dossier-overview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/screen/dossier-overview-screen.component.ts @@ -90,7 +90,7 @@ export class DossierOverviewScreenComponent extends ListingComponent imple super(); this.dossier$ = _dossiersService.getEntityChanged$(this.dossierId).pipe(tap(dossier => (this.#currentDossier = dossier))); this.#currentDossier = _dossiersService.find(this.dossierId); - this.workflowConfig = configService.workflowConfig(this.#currentDossier); + this.workflowConfig = configService.workflowConfig(); this.dossierTemplateId = this.#currentDossier.dossierTemplateId; this.files$ = merge(this.#files$, this.#dossierFilesChange$).pipe(shareLast()); this._updateFileAttributes();