From ea753f02d647392586d1eb3d7a489c5357f3255d Mon Sep 17 00:00:00 2001 From: Timo Date: Thu, 22 Jul 2021 15:04:00 +0300 Subject: [PATCH] Report Templates are now used for download package, old enums have been removed --- .../file/dossier-template-model.wrapper.ts | 4 +- .../admin-side-nav.component.ts | 2 +- ...dit-dossier-template-dialog.component.html | 64 ++++++----------- ...-edit-dossier-template-dialog.component.ts | 50 ++++++-------- .../add-dossier-dialog.component.html | 43 ++++-------- .../add-dossier-dialog.component.ts | 36 +++++++--- ...it-dossier-download-package.component.html | 12 +++- ...edit-dossier-download-package.component.ts | 29 +++++--- .../edit-dossier-general-info.component.ts | 1 - .../dossier/services/file-action.service.ts | 39 +++-------- .../components/select/select.component.html | 24 +++---- .../components/select/select.component.ts | 68 ++++++++++++------- .../src/app/services/loading.service.ts | 1 - .../src/app/services/sorting.service.ts | 4 +- .../red-ui/src/app/state/app-state.service.ts | 16 ++++- apps/red-ui/src/app/utils/functions.ts | 2 + apps/red-ui/src/assets/config/config.json | 4 +- libs/red-ui-http/src/lib/model/dossier.ts | 23 +------ .../src/lib/model/dossierRequest.ts | 23 +------ .../src/lib/model/dossierTemplateModel.ts | 21 +----- .../src/lib/model/downloadDetails.ts | 22 +----- 21 files changed, 209 insertions(+), 279 deletions(-) diff --git a/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts b/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts index 8fcfada48..d1889902f 100644 --- a/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts +++ b/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts @@ -38,8 +38,8 @@ export class DossierTemplateModelWrapper { return this.dossierTemplateModel.name; } - get reportTypes() { - return this.dossierTemplateModel.reportTypes; + get reportTemplateIds() { + return this.dossierTemplateModel.reportTemplateIds; } get validFrom() { diff --git a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts index d172faaaf..5ae87cb59 100644 --- a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts +++ b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts @@ -36,7 +36,7 @@ export class AdminSideNavComponent { { screen: 'watermark' }, { screen: 'file-attributes' }, { screen: 'dossier-attributes' }, - { screen: 'reports', onlyDevMode: true } + { screen: 'reports' } ] }; diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.html index 313b74132..2ae3c1e47 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.html @@ -1,10 +1,8 @@
{{ - (dossierTemplate - ? 'add-edit-dossier-template.title.edit' - : 'add-edit-dossier-template.title.new' - ) | translate: { name: dossierTemplate?.name } + (dossierTemplate ? 'add-edit-dossier-template.title.edit' : 'add-edit-dossier-template.title.new') + | translate: { name: dossierTemplate?.name } }}
@@ -15,9 +13,7 @@ @@ -27,9 +23,7 @@ @@ -46,12 +40,7 @@ {{ 'add-edit-dossier-template.form.valid-from' | translate }} - + {{ 'add-edit-dossier-template.form.valid-to' | translate }} @@ -59,11 +48,7 @@
- + @@ -73,11 +58,7 @@
- + @@ -89,27 +70,29 @@

{{ 'download-includes' | translate }}

+
-
- +
+ + + {{ option.fileName }} + diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts index 712d9405f..eff9a3730 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts @@ -1,10 +1,15 @@ -import { Component, Inject } from '@angular/core'; +import { Component, Inject, OnInit } from '@angular/core'; import { AppStateService } from '@state/app-state.service'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import * as moment from 'moment'; import { Moment } from 'moment'; -import { DossierTemplateControllerService, DossierTemplateModel } from '@redaction/red-ui-http'; +import { + DossierTemplateControllerService, + DossierTemplateModel, + ReportTemplate, + ReportTemplateControllerService +} from '@redaction/red-ui-http'; import { applyIntervalConstraints } from '@utils/date-inputs-utils'; @Component({ @@ -12,20 +17,23 @@ import { applyIntervalConstraints } from '@utils/date-inputs-utils'; templateUrl: './add-edit-dossier-template-dialog.component.html', styleUrls: ['./add-edit-dossier-template-dialog.component.scss'] }) -export class AddEditDossierTemplateDialogComponent { +export class AddEditDossierTemplateDialogComponent implements OnInit { dossierTemplateForm: FormGroup; hasValidFrom: boolean; hasValidTo: boolean; downloadTypesEnum = ['ORIGINAL', 'PREVIEW', 'REDACTED']; - reportTypesEnum = Object.values(DossierTemplateModel.ReportTypesEnum); + availableReportTypes = []; private _previousValidFrom: Moment; private _previousValidTo: Moment; + reportTemplateValueMapper = (reportTemplate: ReportTemplate) => reportTemplate.templateId; + constructor( private readonly _appStateService: AppStateService, private readonly _formBuilder: FormBuilder, private readonly _dossierTemplateController: DossierTemplateControllerService, + private readonly _reportTemplateController: ReportTemplateControllerService, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public dossierTemplate: DossierTemplateModel ) { @@ -40,21 +48,8 @@ export class AddEditDossierTemplateDialogComponent { this.dossierTemplate?.validTo ? moment(this.dossierTemplate?.validTo) : null, this._requiredIfValidator(() => this.hasValidTo) ], - downloadFileTypes: [ - this.dossierTemplate - ? this.dossierTemplate.downloadFileTypes - : ['PREVIEW', 'REDACTED'] - ], - reportTypes: [ - this.dossierTemplate - ? this.dossierTemplate.reportTypes - : [ - 'WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE', - 'WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE', - 'EXCEL_MULTI_FILE' - ], - Validators.required - ] + downloadFileTypes: [this.dossierTemplate?.downloadFileTypes || ['PREVIEW', 'REDACTED']], + reportTemplateIds: [this.dossierTemplate?.reportTemplateIds || [], Validators.required] }); this.hasValidFrom = !!this.dossierTemplate?.validFrom; this.hasValidTo = !!this.dossierTemplate?.validTo; @@ -67,6 +62,11 @@ export class AddEditDossierTemplateDialogComponent { }); } + async ngOnInit() { + this.availableReportTypes = + (await this._reportTemplateController.getAvailableReportTemplates(this.dossierTemplate?.dossierTemplateId).toPromise()) || []; + } + get changed(): boolean { if (!this.dossierTemplate) return true; @@ -77,9 +77,7 @@ export class AddEditDossierTemplateDialogComponent { } if ( this.hasValidFrom && - !moment(this.dossierTemplate.validFrom).isSame( - moment(this.dossierTemplateForm.get('validFrom').value) - ) + !moment(this.dossierTemplate.validFrom).isSame(moment(this.dossierTemplateForm.get('validFrom').value)) ) { return true; } @@ -89,9 +87,7 @@ export class AddEditDossierTemplateDialogComponent { } if ( this.hasValidTo && - !moment(this.dossierTemplate.validTo).isSame( - moment(this.dossierTemplateForm.get('validTo').value) - ) + !moment(this.dossierTemplate.validTo).isSame(moment(this.dossierTemplateForm.get('validTo').value)) ) { return true; } @@ -110,9 +106,7 @@ export class AddEditDossierTemplateDialogComponent { validFrom: this.hasValidFrom ? this.dossierTemplateForm.get('validFrom').value : null, validTo: this.hasValidTo ? this.dossierTemplateForm.get('validTo').value : null }; - await this._dossierTemplateController - .createOrUpdateDossierTemplate(dossierTemplate) - .toPromise(); + await this._dossierTemplateController.createOrUpdateDossierTemplate(dossierTemplate).toPromise(); await this._appStateService.loadAllDossierTemplates(); await this._appStateService.loadDictionaryData(); this.dialogRef.close(dossierTemplate); diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.html index 3584648d4..784c1e915 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.html @@ -16,18 +16,10 @@
{{ 'add-dossier-dialog.form.template' | translate }} - + @@ -54,21 +46,12 @@
- + {{ 'add-dossier-dialog.form.due-date' | translate }}
- + @@ -79,11 +62,13 @@

{{ 'download-includes' | translate }}

- + + + + {{ option.fileName }} + diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts index a0cf0b415..4b20ceb5d 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; import { MatDialogRef } from '@angular/material/dialog'; -import { Dossier, DossierTemplateModel } from '@redaction/red-ui-http'; +import { Dossier, DossierTemplateModel, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { AppStateService } from '@state/app-state.service'; import * as moment from 'moment'; @@ -14,12 +14,14 @@ export class AddDossierDialogComponent { dossierForm: FormGroup; hasDueDate = false; downloadTypesEnum = ['ORIGINAL', 'PREVIEW', 'REDACTED']; - reportTypesEnum = Object.values(DossierTemplateModel.ReportTypesEnum); dossierTemplates: DossierTemplateModel[]; + availableReportTypes = []; + reportTemplateValueMapper = (reportTemplate: ReportTemplate) => reportTemplate.templateId; constructor( private readonly _appStateService: AppStateService, private readonly _formBuilder: FormBuilder, + private readonly _reportTemplateController: ReportTemplateControllerService, public dialogRef: MatDialogRef ) { this._filterInvalidDossierTemplates(); @@ -28,20 +30,22 @@ export class AddDossierDialogComponent { dossierName: [null, Validators.required], dossierTemplateId: [null, Validators.required], downloadFileTypes: [null], - reportTypes: [null], + reportTemplateIds: [null], description: [null], dueDate: [null], watermarkEnabled: [true] }, { validators: control => - control.value.reportTypes?.length > 0 || control.value.downloadFileTypes?.length > 0 ? null : { downloadPackage: true } + control.value.reportTemplateIds?.length > 0 || control.value.downloadFileTypes?.length > 0 + ? null + : { downloadPackage: true } } ); } - get reportTypesLength() { - return this.dossierForm.controls['reportTypes']?.value?.length || 0; + get reportTemplateIdsLength() { + return this.dossierForm.controls['reportTemplateIds']?.value?.length || 0; } get downloadFileTypesLength() { @@ -78,15 +82,27 @@ export class AddDossierDialogComponent { } } - dossierTemplateChanged(dossierTemplateId) { + async dossierTemplateChanged(dossierTemplateId) { // get current selected dossierTemplate const dossierTemplate = this.dossierTemplates.find(r => r.dossierTemplateId === dossierTemplateId); + if (dossierTemplate) { + this.availableReportTypes = + (await this._reportTemplateController.getAvailableReportTemplates(dossierTemplate.dossierTemplateId).toPromise()) || []; // update dropdown values this.dossierForm.patchValue( { downloadFileTypes: dossierTemplate.downloadFileTypes, - reportTypes: dossierTemplate.reportTypes + reportTemplateIds: dossierTemplate.reportTemplateIds + }, + { emitEvent: false } + ); + } else { + this.availableReportTypes = []; + this.dossierForm.patchValue( + { + downloadFileTypes: [], + reportTemplateIds: [] }, { emitEvent: false } ); @@ -108,7 +124,9 @@ export class AddDossierDialogComponent { dueDate: this.hasDueDate ? this.dossierForm.get('dueDate').value : undefined, dossierTemplateId: this.dossierForm.get('dossierTemplateId').value, downloadFileTypes: this.dossierForm.get('downloadFileTypes').value, - reportTypes: this.dossierForm.get('reportTypes').value, + reportTemplateIds: this.dossierForm.get('reportTemplateIds').value, + // TODO REMOVE THIS + reportTypes: [], watermarkEnabled: this.dossierForm.get('watermarkEnabled').value }; } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.html index 3e84f42dd..9c4360695 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.html @@ -1,10 +1,12 @@ -
+
+ + + {{ option.fileName }} + diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts index b336ede21..20abe1ba4 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { DossierTemplateModel } from '@redaction/red-ui-http'; +import { DossierTemplateModel, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http'; import { FormBuilder, FormGroup } from '@angular/forms'; import { AppStateService } from '@state/app-state.service'; import { DossierWrapper } from '@state/model/dossier.wrapper'; @@ -13,16 +13,22 @@ import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; export class EditDossierDownloadPackageComponent implements OnInit, EditDossierSectionInterface { dossierForm: FormGroup; downloadTypesEnum = ['ORIGINAL', 'PREVIEW', 'REDACTED']; - reportTypesEnum = Object.values(DossierTemplateModel.ReportTypesEnum); dossierTemplates: DossierTemplateModel[]; + availableReportTypes = []; @Input() dossierWrapper: DossierWrapper; @Output() updateDossier = new EventEmitter(); - constructor(private readonly _appStateService: AppStateService, private readonly _formBuilder: FormBuilder) {} + reportTemplateValueMapper = (reportTemplate: ReportTemplate) => reportTemplate.templateId; + + constructor( + private readonly _appStateService: AppStateService, + private readonly _reportTemplateController: ReportTemplateControllerService, + private readonly _formBuilder: FormBuilder + ) {} get reportTypesLength() { - return this.dossierForm.controls['reportTypes']?.value?.length || 0; + return this.dossierForm.controls['reportTemplateIds']?.value?.length || 0; } get downloadFileTypesLength() { @@ -52,15 +58,20 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS return this.dossierForm.invalid; } - ngOnInit() { + async ngOnInit() { + this.availableReportTypes = + (await this._reportTemplateController.getAvailableReportTemplates(this.dossierWrapper.dossierTemplateId).toPromise()) || []; + this.dossierForm = this._formBuilder.group( { - reportTypes: [this.dossierWrapper.dossier.reportTypes], + reportTemplateIds: [this.dossierWrapper.dossier.reportTemplateIds], downloadFileTypes: [this.dossierWrapper.dossier.downloadFileTypes] }, { validators: control => - control.value.reportTypes?.length > 0 || control.value.downloadFileTypes?.length > 0 ? null : { downloadPackage: true } + control.value.reportTemplateIds?.length > 0 || control.value.downloadFileTypes?.length > 0 + ? null + : { downloadPackage: true } } ); } @@ -69,7 +80,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS const dossier = { ...this.dossierWrapper.dossier, downloadFileTypes: this.dossierForm.get('downloadFileTypes').value, - reportTypes: this.dossierForm.get('reportTypes').value + reportTemplateIds: this.dossierForm.get('reportTemplateIds').value }; const updatedDossier = await this._appStateService.createOrUpdateDossier(dossier); this.updateDossier.emit(updatedDossier); @@ -78,7 +89,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS revert() { this.dossierForm.reset({ downloadFileTypes: this.dossierWrapper.dossier.downloadFileTypes, - reportTypes: this.dossierWrapper.dossier.reportTypes + reportTemplateIds: this.dossierWrapper.dossier.reportTemplateIds }); } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts index dc52079f7..5bcf0558a 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts @@ -20,7 +20,6 @@ import { Toaster } from '../../../../../services/toaster.service'; export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSectionInterface { dossierForm: FormGroup; hasDueDate: boolean; - readonly reportTypesEnum = Object.values(DossierTemplateModel.ReportTypesEnum); dossierTemplates: DossierTemplateModel[]; @Input() dossierWrapper: DossierWrapper; diff --git a/apps/red-ui/src/app/modules/dossier/services/file-action.service.ts b/apps/red-ui/src/app/modules/dossier/services/file-action.service.ts index 3c6634fae..30d46ee8e 100644 --- a/apps/red-ui/src/app/modules/dossier/services/file-action.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/file-action.service.ts @@ -24,7 +24,8 @@ export class FileActionService { } return this._reanalysisControllerService.reanalyzeFile( this._appStateService.activeDossier.dossier.dossierId, - fileStatusWrapper.fileId + fileStatusWrapper.fileId, + true ); } @@ -47,11 +48,7 @@ export class FileActionService { } } - assignDossierApprover( - file?: FileStatusWrapper, - callback?: Function, - ignoreDialogChanges = false - ) { + assignDossierApprover(file?: FileStatusWrapper, callback?: Function, ignoreDialogChanges = false) { this._dialogService.openAssignFileToUserDialog( file ? [file] : [this._appStateService.activeFile], 'approver', @@ -65,11 +62,7 @@ export class FileActionService { ); } - assignDossierReviewer( - file?: FileStatusWrapper, - callback?: Function, - ignoreDialogChanges = false - ) { + assignDossierReviewer(file?: FileStatusWrapper, callback?: Function, ignoreDialogChanges = false) { this._dialogService.openAssignFileToUserDialog( file ? [file] : [this._appStateService.activeFile], 'reviewer', @@ -88,10 +81,7 @@ export class FileActionService { fileStatus = [fileStatus]; } - const atLeastOneFileHasReviewer = fileStatus.reduce( - (acc, fs) => acc || !!fs.currentReviewer, - false - ); + const atLeastOneFileHasReviewer = fileStatus.reduce((acc, fs) => acc || !!fs.currentReviewer, false); if (atLeastOneFileHasReviewer) { this._dialogService.openAssignFileToMeDialog(async () => { await this._assignReviewerToCurrentUser(fileStatus, callback); @@ -148,22 +138,15 @@ export class FileActionService { } private _openAssignReviewerDialog(file?: FileStatusWrapper, callback?: Function) { - this._dialogService.openAssignFileToUserDialog( - file ? [file] : [this._appStateService.activeFile], - 'reviewer', - async () => { - await this._appStateService.reloadActiveDossierFiles(); - if (callback) { - callback(); - } + this._dialogService.openAssignFileToUserDialog(file ? [file] : [this._appStateService.activeFile], 'reviewer', async () => { + await this._appStateService.reloadActiveDossierFiles(); + if (callback) { + callback(); } - ); + }); } - private async _assignReviewerToCurrentUser( - fileStatus: FileStatusWrapper | FileStatusWrapper[], - callback?: Function - ) { + private async _assignReviewerToCurrentUser(fileStatus: FileStatusWrapper | FileStatusWrapper[], callback?: Function) { if (!isArray(fileStatus)) { fileStatus = [fileStatus]; } diff --git a/apps/red-ui/src/app/modules/shared/components/select/select.component.html b/apps/red-ui/src/app/modules/shared/components/select/select.component.html index 64daca14b..561dbeb31 100644 --- a/apps/red-ui/src/app/modules/shared/components/select/select.component.html +++ b/apps/red-ui/src/app/modules/shared/components/select/select.component.html @@ -1,16 +1,8 @@
{{ label }}
-
-
+
+
@@ -18,9 +10,17 @@ - {{ translatePrefix + option | translate }} + + + + {{ translatePrefix + option | translate }} + diff --git a/apps/red-ui/src/app/modules/shared/components/select/select.component.ts b/apps/red-ui/src/app/modules/shared/components/select/select.component.ts index 2ad05e879..d61112356 100644 --- a/apps/red-ui/src/app/modules/shared/components/select/select.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/select/select.component.ts @@ -1,7 +1,6 @@ -import { AfterViewInit, ChangeDetectorRef, Component, Input, ViewChild } from '@angular/core'; +import { AfterViewInit, ChangeDetectorRef, Component, Input, TemplateRef, ViewChild } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; -import { MatChip, MatChipList } from '@angular/material/chips'; -import { map } from 'rxjs/operators'; +import { MatChip, MatChipList, MatChipSelectionChange } from '@angular/material/chips'; @Component({ selector: 'redaction-select', @@ -16,32 +15,40 @@ import { map } from 'rxjs/operators'; ] }) export class SelectComponent implements AfterViewInit, ControlValueAccessor { + @Input() optionTemplate: TemplateRef; @Input() label: string; - @Input() options: string[]; + @Input() options: any[]; @Input() translatePrefix = ''; @Input() disabled = false; @Input() multiple = true; @ViewChild(MatChipList) chipList: MatChipList; - private _value: string[] = []; - private _onChange: (value: string[]) => void; + private _value: any[] = []; + private _onChange: (value: any[]) => void; + + @Input() valueMapper: (option: any) => any = option => option; constructor(private readonly _changeDetector: ChangeDetectorRef) {} ngAfterViewInit(): void { - this._selectChips(this._value); - this.chipList.chipSelectionChanges.pipe(map(event => event.source)).subscribe(chip => { + setTimeout(() => { + this._selectChips(this._value); + this._changeDetector.detectChanges(); + }); + } + + selectChange($event: MatChipSelectionChange) { + const chip = $event.source; + if ($event.isUserInput) { if (chip.selected) { this._value = [...this._value, chip.value]; } else { this._value = this._value.filter(o => o !== chip.value); } - this._propagateChange(this._value); - }); - - this._changeDetector.detectChanges(); + this._propagateChange([...new Set(this._value)]); + } } registerOnChange(fn: any): void { @@ -51,9 +58,12 @@ export class SelectComponent implements AfterViewInit, ControlValueAccessor { // eslint-disable-next-line @typescript-eslint/no-unused-vars registerOnTouched(fn: any): void {} - writeValue(value: string[]): void { - if (this.chipList && value) this._selectChips(value); - else if (value) this._value = value; + writeValue(value: any[]): void { + if (this.chipList && value) { + this._selectChips(value); + } else if (value) { + this._value = value; + } } setDisabledState?(isDisabled: boolean): void { @@ -61,28 +71,34 @@ export class SelectComponent implements AfterViewInit, ControlValueAccessor { } toggleSelection(chip: MatChip): void { - if (!this.disabled) chip.toggleSelected(); + if (!this.disabled) chip.toggleSelected(true); } selectAll($event) { $event.stopPropagation(); - this.chipList.chips.forEach(chip => chip.select()); + this.chipList.chips.forEach(chip => { + if (!chip.selected) { + chip.toggleSelected(true); + } + }); } - deselectAll($event) { - $event.stopPropagation(); - this.chipList.chips.forEach(chip => chip.deselect()); + deselectAll($event?) { + $event?.stopPropagation(); + this.chipList.chips.forEach(chip => { + if (chip.selected) { + chip.toggleSelected(true); + } + }); } - private _selectChips(value: string[]): void { - this.chipList.chips.forEach(chip => chip.deselect()); - + private _selectChips(value: any[]): void { + this.deselectAll(); const chipsToSelect = this.chipList.chips.filter(c => value.includes(c.value)); - - chipsToSelect.forEach(chip => chip.select()); + chipsToSelect.forEach(chip => chip.toggleSelected(true)); } - private _propagateChange(value: string[]): void { + private _propagateChange(value: any[]): void { if (this._onChange) this._onChange(value); } } diff --git a/apps/red-ui/src/app/services/loading.service.ts b/apps/red-ui/src/app/services/loading.service.ts index 2a1ea4b13..66f938fe1 100644 --- a/apps/red-ui/src/app/services/loading.service.ts +++ b/apps/red-ui/src/app/services/loading.service.ts @@ -15,7 +15,6 @@ export class LoadingService { } start(): void { - console.log('start'); this._loadingEvent.next(true); this._loadingStarted = new Date().getTime(); } diff --git a/apps/red-ui/src/app/services/sorting.service.ts b/apps/red-ui/src/app/services/sorting.service.ts index c6f620aeb..bb5736b71 100644 --- a/apps/red-ui/src/app/services/sorting.service.ts +++ b/apps/red-ui/src/app/services/sorting.service.ts @@ -13,7 +13,9 @@ export interface SortingOption { column: string; } -@Injectable() +@Injectable({ + providedIn: 'root' +}) export class SortingService { private _sortingOption: SortingOption; diff --git a/apps/red-ui/src/app/state/app-state.service.ts b/apps/red-ui/src/app/state/app-state.service.ts index ce9146e7d..3d2ac93f5 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -15,7 +15,7 @@ import { Event, NavigationEnd, ResolveStart, Router } from '@angular/router'; import { UserService } from '@services/user.service'; import { forkJoin, Observable, of } from 'rxjs'; import { catchError, tap } from 'rxjs/operators'; -import { humanize } from '@utils/functions'; +import { FALLBACK_COLOR, hexToRgb, humanize } from '@utils/functions'; import { FileStatusWrapper } from '@models/file/file-status.wrapper'; import { DossierWrapper } from './model/dossier.wrapper'; import { TypeValueWrapper } from '@models/file/type-value.wrapper'; @@ -258,7 +258,7 @@ export class AppStateService { } async reanalyzeDossier({ dossierId }: DossierWrapper = this.activeDossier) { - await this._reanalysisControllerService.reanalyzeDossier(dossierId).toPromise(); + await this._reanalysisControllerService.reanalyzeDossier(dossierId, true).toPromise(); } activateDossier(dossierId: string): void { @@ -403,6 +403,18 @@ export class AppStateService { const colorsObs = this._dictionaryControllerService.getColors(dossierTemplateId).pipe( tap(colors => { + for (const key of Object.keys(colors)) { + const color = colors[key]; + try { + const rgbValue = hexToRgb(color); + if (!rgbValue) { + colors[key] = FALLBACK_COLOR; + } + } catch (e) { + colors[key] = FALLBACK_COLOR; + } + } + // declined dictionaryData['declined-suggestion'] = new TypeValueWrapper( { diff --git a/apps/red-ui/src/app/utils/functions.ts b/apps/red-ui/src/app/utils/functions.ts index e4f6d99b8..83f1a5ed5 100644 --- a/apps/red-ui/src/app/utils/functions.ts +++ b/apps/red-ui/src/app/utils/functions.ts @@ -1,3 +1,5 @@ +export const FALLBACK_COLOR = '#CCCCCC'; + export function groupBy(xs: any[], key: string) { return xs.reduce((rv, x) => { (rv[x[key]] = rv[x[key]] || []).push(x); diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index 6cfc820ed..4b001a0b1 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -1,6 +1,6 @@ { - "OAUTH_URL": "https://dev-06.iqser.cloud/auth/realms/redaction", - "API_URL": "https://dev-06.iqser.cloud/redaction-gateway-v1", + "OAUTH_URL": "https://red-staging.iqser.cloud/auth/realms/redaction", + "API_URL": "https://red-staging.iqser.cloud/redaction-gateway-v1", "OAUTH_CLIENT_ID": "redaction", "BACKEND_APP_VERSION": "4.4.40", "FRONTEND_APP_VERSION": "1.1", diff --git a/libs/red-ui-http/src/lib/model/dossier.ts b/libs/red-ui-http/src/lib/model/dossier.ts index 66668b2e5..e5f28bc68 100644 --- a/libs/red-ui-http/src/lib/model/dossier.ts +++ b/libs/red-ui-http/src/lib/model/dossier.ts @@ -23,19 +23,14 @@ export interface Dossier { memberIds?: Array; ownerId?: string; reportTemplateIds?: Array; - reportTypes?: Array; + reportTypes?: Array; softDeletedTime?: string; status?: Dossier.StatusEnum; watermarkEnabled?: boolean; } export namespace Dossier { - export type DownloadFileTypesEnum = - | 'ANNOTATED' - | 'FLATTEN' - | 'ORIGINAL' - | 'PREVIEW' - | 'REDACTED'; + export type DownloadFileTypesEnum = 'ANNOTATED' | 'FLATTEN' | 'ORIGINAL' | 'PREVIEW' | 'REDACTED'; export const DownloadFileTypesEnum = { ANNOTATED: 'ANNOTATED' as DownloadFileTypesEnum, FLATTEN: 'FLATTEN' as DownloadFileTypesEnum, @@ -43,20 +38,6 @@ export namespace Dossier { PREVIEW: 'PREVIEW' as DownloadFileTypesEnum, REDACTED: 'REDACTED' as DownloadFileTypesEnum }; - export type ReportTypesEnum = - | 'EXCEL_MULTI_FILE' - | 'EXCEL_SINGLE_FILE' - | 'WORD_SINGLE_FILE' - | 'WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE' - | 'WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE'; - export const ReportTypesEnum = { - EXCELMULTIFILE: 'EXCEL_MULTI_FILE' as ReportTypesEnum, - EXCELSINGLEFILE: 'EXCEL_SINGLE_FILE' as ReportTypesEnum, - WORDSINGLEFILE: 'WORD_SINGLE_FILE' as ReportTypesEnum, - WORDSINGLEFILEAPPENDIXA1TEMPLATE: - 'WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE' as ReportTypesEnum, - WORDSINGLEFILEAPPENDIXA2TEMPLATE: 'WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE' as ReportTypesEnum - }; export type StatusEnum = 'ACTIVE' | 'DELETED'; export const StatusEnum = { ACTIVE: 'ACTIVE' as StatusEnum, diff --git a/libs/red-ui-http/src/lib/model/dossierRequest.ts b/libs/red-ui-http/src/lib/model/dossierRequest.ts index 831598926..744fa20c5 100644 --- a/libs/red-ui-http/src/lib/model/dossierRequest.ts +++ b/libs/red-ui-http/src/lib/model/dossierRequest.ts @@ -57,7 +57,7 @@ export interface DossierRequest { /** * Report File Types for this dossiers submission package. */ - reportTypes?: Array; + reportTypes?: Array; /** * Whether a watermark will be applied to the redacted files or not. */ @@ -65,12 +65,7 @@ export interface DossierRequest { } export namespace DossierRequest { - export type DownloadFileTypesEnum = - | 'ANNOTATED' - | 'FLATTEN' - | 'ORIGINAL' - | 'PREVIEW' - | 'REDACTED'; + export type DownloadFileTypesEnum = 'ANNOTATED' | 'FLATTEN' | 'ORIGINAL' | 'PREVIEW' | 'REDACTED'; export const DownloadFileTypesEnum = { ANNOTATED: 'ANNOTATED' as DownloadFileTypesEnum, FLATTEN: 'FLATTEN' as DownloadFileTypesEnum, @@ -78,18 +73,4 @@ export namespace DossierRequest { PREVIEW: 'PREVIEW' as DownloadFileTypesEnum, REDACTED: 'REDACTED' as DownloadFileTypesEnum }; - export type ReportTypesEnum = - | 'EXCEL_MULTI_FILE' - | 'EXCEL_SINGLE_FILE' - | 'WORD_SINGLE_FILE' - | 'WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE' - | 'WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE'; - export const ReportTypesEnum = { - EXCELMULTIFILE: 'EXCEL_MULTI_FILE' as ReportTypesEnum, - EXCELSINGLEFILE: 'EXCEL_SINGLE_FILE' as ReportTypesEnum, - WORDSINGLEFILE: 'WORD_SINGLE_FILE' as ReportTypesEnum, - WORDSINGLEFILEAPPENDIXA1TEMPLATE: - 'WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE' as ReportTypesEnum, - WORDSINGLEFILEAPPENDIXA2TEMPLATE: 'WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE' as ReportTypesEnum - }; } diff --git a/libs/red-ui-http/src/lib/model/dossierTemplateModel.ts b/libs/red-ui-http/src/lib/model/dossierTemplateModel.ts index ea2ccecea..77146e580 100644 --- a/libs/red-ui-http/src/lib/model/dossierTemplateModel.ts +++ b/libs/red-ui-http/src/lib/model/dossierTemplateModel.ts @@ -46,7 +46,7 @@ export interface DossierTemplateModel { /** * Report File Types for this dossierTemplate's dossiers submission package. */ - reportTypes?: Array; + reportTemplateIds?: string[]; /** * Validity of start this dossierTemplate. */ @@ -58,12 +58,7 @@ export interface DossierTemplateModel { } export namespace DossierTemplateModel { - export type DownloadFileTypesEnum = - | 'ANNOTATED' - | 'FLATTEN' - | 'ORIGINAL' - | 'PREVIEW' - | 'REDACTED'; + export type DownloadFileTypesEnum = 'ANNOTATED' | 'FLATTEN' | 'ORIGINAL' | 'PREVIEW' | 'REDACTED'; export const DownloadFileTypesEnum = { ANNOTATED: 'ANNOTATED' as DownloadFileTypesEnum, FLATTEN: 'FLATTEN' as DownloadFileTypesEnum, @@ -71,16 +66,4 @@ export namespace DossierTemplateModel { PREVIEW: 'PREVIEW' as DownloadFileTypesEnum, REDACTED: 'REDACTED' as DownloadFileTypesEnum }; - export type ReportTypesEnum = - | 'EXCEL_MULTI_FILE' - | 'EXCEL_SINGLE_FILE' - | 'WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE' - | 'WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE'; - export const ReportTypesEnum = { - EXCELMULTIFILE: 'EXCEL_MULTI_FILE' as ReportTypesEnum, - EXCELSINGLEFILE: 'EXCEL_SINGLE_FILE' as ReportTypesEnum, - WORDSINGLEFILEAPPENDIXA1TEMPLATE: - 'WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE' as ReportTypesEnum, - WORDSINGLEFILEAPPENDIXA2TEMPLATE: 'WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE' as ReportTypesEnum - }; } diff --git a/libs/red-ui-http/src/lib/model/downloadDetails.ts b/libs/red-ui-http/src/lib/model/downloadDetails.ts index 410063eda..4f5543a9f 100644 --- a/libs/red-ui-http/src/lib/model/downloadDetails.ts +++ b/libs/red-ui-http/src/lib/model/downloadDetails.ts @@ -14,16 +14,10 @@ export interface DownloadDetails { downloadFileTypes?: Array; fileIds?: Array; reportTemplateIds?: Array; - reportTypes?: Array; } export namespace DownloadDetails { - export type DownloadFileTypesEnum = - | 'ANNOTATED' - | 'FLATTEN' - | 'ORIGINAL' - | 'PREVIEW' - | 'REDACTED'; + export type DownloadFileTypesEnum = 'ANNOTATED' | 'FLATTEN' | 'ORIGINAL' | 'PREVIEW' | 'REDACTED'; export const DownloadFileTypesEnum = { ANNOTATED: 'ANNOTATED' as DownloadFileTypesEnum, FLATTEN: 'FLATTEN' as DownloadFileTypesEnum, @@ -31,18 +25,4 @@ export namespace DownloadDetails { PREVIEW: 'PREVIEW' as DownloadFileTypesEnum, REDACTED: 'REDACTED' as DownloadFileTypesEnum }; - export type ReportTypesEnum = - | 'EXCEL_MULTI_FILE' - | 'EXCEL_SINGLE_FILE' - | 'WORD_SINGLE_FILE' - | 'WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE' - | 'WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE'; - export const ReportTypesEnum = { - EXCELMULTIFILE: 'EXCEL_MULTI_FILE' as ReportTypesEnum, - EXCELSINGLEFILE: 'EXCEL_SINGLE_FILE' as ReportTypesEnum, - WORDSINGLEFILE: 'WORD_SINGLE_FILE' as ReportTypesEnum, - WORDSINGLEFILEAPPENDIXA1TEMPLATE: - 'WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE' as ReportTypesEnum, - WORDSINGLEFILEAPPENDIXA2TEMPLATE: 'WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE' as ReportTypesEnum - }; }