diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.html index ea0944da4..0b5378a37 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.html @@ -3,7 +3,7 @@ {{ dialogHeader }} -
+
@@ -95,7 +95,7 @@
-
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts index 914672729..737d96915 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts @@ -29,6 +29,7 @@ export class AddEditDictionaryDialogComponent extends BaseDialogComponent { name: this._data.dictionary?.label, }); readonly hasColor$: Observable; + readonly disabled = false; private readonly _dossierTemplateId = this._data.dossierTemplateId; constructor( @@ -47,20 +48,8 @@ export class AddEditDictionaryDialogComponent extends BaseDialogComponent { this.technicalName$ = this.form.get('label').valueChanges.pipe(map(value => this._toTechnicalName(value))); } - private _getForm(dictionary: Dictionary): FormGroup { - return this._formBuilder.group({ - label: [dictionary?.label, [Validators.required, Validators.minLength(3)]], - description: [dictionary?.description], - rank: [dictionary?.rank, Validators.required], - hexColor: [dictionary?.hexColor, [Validators.required, Validators.minLength(7)]], - hint: [!!dictionary?.hint], - addToDictionaryAction: [!!dictionary?.addToDictionaryAction], - caseSensitive: [this.getDictCaseSensitive(dictionary)], - }); - } - - getDictCaseSensitive(dictionary: Dictionary): boolean { - return dictionary ? !dictionary.caseInsensitive : false; + get valid(): boolean { + return this.form.valid; } get changed(): boolean { @@ -92,6 +81,10 @@ export class AddEditDictionaryDialogComponent extends BaseDialogComponent { return this.form.get('hexColor').valueChanges.pipe(map((value: string) => !value || value?.length === 0)); } + getDictCaseSensitive(dictionary: Dictionary): boolean { + return dictionary ? !dictionary.caseInsensitive : false; + } + async save(): Promise { const dictionary = this._formToObject(); let observable: Observable; @@ -119,6 +112,18 @@ export class AddEditDictionaryDialogComponent extends BaseDialogComponent { }); } + private _getForm(dictionary: Dictionary): FormGroup { + return this._formBuilder.group({ + label: [dictionary?.label, [Validators.required, Validators.minLength(3)]], + description: [dictionary?.description], + rank: [dictionary?.rank, Validators.required], + hexColor: [dictionary?.hexColor, [Validators.required, Validators.minLength(7)]], + hint: [!!dictionary?.hint], + addToDictionaryAction: [!!dictionary?.addToDictionaryAction], + caseSensitive: [this.getDictCaseSensitive(dictionary)], + }); + } + private _toTechnicalName(value: string) { const existingTechnicalNames = Object.keys(this._appStateService.dictionaryData[this._dossierTemplateId]); const baseTechnicalName = toKebabCase(value.trim()); diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.html index d02dcb25b..3bb9ea807 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.html @@ -8,7 +8,7 @@ class="dialog-header heading-l" >
- +
@@ -35,7 +35,7 @@
-
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 84635ea0a..2bd9b5a53 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 @@ -8,7 +8,7 @@ class="dialog-header heading-l" > - +
@@ -87,7 +87,7 @@
-
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 f0881128f..39025d390 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 @@ -25,7 +25,7 @@ export class AddEditDossierTemplateDialogComponent extends BaseDialogComponent { key: type, label: downloadTypesTranslations[type], })); - + readonly disabled = false; private _previousValidFrom: Moment; private _previousValidTo: Moment; @@ -49,20 +49,8 @@ export class AddEditDossierTemplateDialogComponent extends BaseDialogComponent { }); } - private _getForm(): FormGroup { - return this._formBuilder.group({ - name: [this.dossierTemplate?.name, Validators.required], - description: [this.dossierTemplate?.description], - validFrom: [ - this.dossierTemplate?.validFrom ? moment(this.dossierTemplate?.validFrom) : null, - this._requiredIfValidator(() => this.hasValidFrom), - ], - validTo: [ - this.dossierTemplate?.validTo ? moment(this.dossierTemplate?.validTo) : null, - this._requiredIfValidator(() => this.hasValidTo), - ], - downloadFileTypes: [this.dossierTemplate?.downloadFileTypes || ['PREVIEW', 'REDACTED']], - }); + get valid(): boolean { + return this.form.valid; } get changed(): boolean { @@ -119,6 +107,22 @@ export class AddEditDossierTemplateDialogComponent extends BaseDialogComponent { } } + private _getForm(): FormGroup { + return this._formBuilder.group({ + name: [this.dossierTemplate?.name, Validators.required], + description: [this.dossierTemplate?.description], + validFrom: [ + this.dossierTemplate?.validFrom ? moment(this.dossierTemplate?.validFrom) : null, + this._requiredIfValidator(() => this.hasValidFrom), + ], + validTo: [ + this.dossierTemplate?.validTo ? moment(this.dossierTemplate?.validTo) : null, + this._requiredIfValidator(() => this.hasValidTo), + ], + downloadFileTypes: [this.dossierTemplate?.downloadFileTypes || ['PREVIEW', 'REDACTED']], + }); + } + private _applyValidityIntervalConstraints(value): boolean { if (applyIntervalConstraints(value, this._previousValidFrom, this._previousValidTo, this.form, 'validFrom', 'validTo')) { return true; diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html index 22dcf5751..ac1d3a8e8 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html @@ -8,7 +8,7 @@ class="dialog-header heading-l" >
- +
@@ -53,20 +53,38 @@
- + {{ 'add-edit-file-attribute.form.filterable' | translate }}
- + {{ 'add-edit-file-attribute.form.displayedInFileList' | translate }}
-
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts index c963908a1..7346bf384 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts @@ -1,29 +1,48 @@ -import { Component, Inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FileAttributeConfigTypes, IFileAttributeConfig } from '@red/domain'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { fileAttributeTypesTranslations } from '../../translations/file-attribute-types-translations'; +import { FileAttributesService } from '@services/entity-services/file-attributes.service'; import { BaseDialogComponent } from '@iqser/common-ui'; @Component({ selector: 'redaction-add-edit-file-attribute-dialog', templateUrl: './add-edit-file-attribute-dialog.component.html', styleUrls: ['./add-edit-file-attribute-dialog.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class AddEditFileAttributeDialogComponent extends BaseDialogComponent { + readonly disabled = false; + DISPLAYED_FILTERABLE_LIMIT = 3; + translations = fileAttributeTypesTranslations; fileAttribute: IFileAttributeConfig = this.data.fileAttribute; dossierTemplateId: string = this.data.dossierTemplateId; - readonly form: FormGroup = this._getForm(this.fileAttribute); + readonly form!: FormGroup; readonly typeOptions = Object.keys(FileAttributeConfigTypes); - translations = fileAttributeTypesTranslations; + readonly canSetDisplayed!: boolean; + readonly canSetFilterable!: boolean; constructor( private readonly _formBuilder: FormBuilder, + private readonly _fileAttributesService: FileAttributesService, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) - public data: { fileAttribute: IFileAttributeConfig; dossierTemplateId: string }, + public data: { + fileAttribute: IFileAttributeConfig; + dossierTemplateId: string; + numberOfDisplayedAttrs: number; + numberOfFilterableAttrs: number; + }, ) { super(); + this.canSetDisplayed = data.numberOfDisplayedAttrs < this.DISPLAYED_FILTERABLE_LIMIT || data.fileAttribute?.displayedInFileList; + this.canSetFilterable = data.numberOfFilterableAttrs < this.DISPLAYED_FILTERABLE_LIMIT || data.fileAttribute?.filterable; + this.form = this._getForm(this.fileAttribute); + } + + get valid(): boolean { + return this.form.valid; } get changed(): boolean { @@ -60,8 +79,8 @@ export class AddEditFileAttributeDialogComponent extends BaseDialogComponent { type: [fileAttribute?.type || FileAttributeConfigTypes.TEXT, Validators.required], readonly: [fileAttribute ? !fileAttribute.editable : false], primaryAttribute: [fileAttribute?.primaryAttribute], - filterable: [fileAttribute?.filterable], - displayedInFileList: [fileAttribute?.displayedInFileList], + filterable: { value: fileAttribute?.filterable, disabled: !this.canSetFilterable }, + displayedInFileList: { value: fileAttribute?.displayedInFileList, disabled: !this.canSetDisplayed }, }); } } diff --git a/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.html index 9ffe7ccc1..d5d542d30 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.html @@ -1,7 +1,7 @@
- +
@@ -28,7 +28,7 @@
-
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.ts index 231e1edc4..519eb2dd2 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.ts @@ -21,6 +21,7 @@ interface IEditColorData { export class EditColorDialogComponent extends BaseDialogComponent { readonly form: FormGroup; translations = defaultColorsTranslations; + readonly disabled = false; private readonly _initialColor: string; private readonly _dossierTemplateId: string; @@ -44,10 +45,8 @@ export class EditColorDialogComponent extends BaseDialogComponent { return this.form.get('color').value !== this._initialColor; } - private _getForm(): FormGroup { - return this._formBuilder.group({ - color: [this.data.colors[this.data.colorKey], [Validators.required, Validators.minLength(7)]], - }); + get valid(): boolean { + return this.form.valid; } async save() { @@ -65,4 +64,10 @@ export class EditColorDialogComponent extends BaseDialogComponent { this._toaster.error(_('edit-color-dialog.error')); } } + + private _getForm(): FormGroup { + return this._formBuilder.group({ + color: [this.data.colors[this.data.colorKey], [Validators.required, Validators.minLength(7)]], + }); + } } diff --git a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts index 63c984f73..86390b6e1 100644 --- a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts @@ -63,19 +63,28 @@ export class FileAttributesListingScreenComponent extends ListingComponent attr.displayedInFileList).length; + } + + private get _numberOfFilterableAttrs(): number { + return this.entitiesService.all.filter(attr => attr.filterable).length; + } + async ngOnInit() { await this._loadData(); } openAddEditAttributeDialog($event: MouseEvent, fileAttribute?: IFileAttributeConfig) { - this._dialogService.openDialog( - 'addEditFileAttribute', - $event, - { fileAttribute, dossierTemplateId: this._dossierTemplatesService.activeDossierTemplateId }, - (newValue: IFileAttributeConfig) => { - this._loadingService.loadWhile(this._createNewFileAttributeAndRefreshView(newValue)); - }, - ); + const data = { + fileAttribute, + dossierTemplateId: this._dossierTemplatesService.activeDossierTemplateId, + numberOfDisplayedAttrs: this._numberOfDisplayedAttrs, + numberOfFilterableAttrs: this._numberOfFilterableAttrs, + }; + this._dialogService.openDialog('addEditFileAttribute', $event, data, (newValue: IFileAttributeConfig) => { + this._loadingService.loadWhile(this._createNewFileAttributeAndRefreshView(newValue)); + }); } openConfirmDeleteAttributeDialog($event: MouseEvent, fileAttribute?: IFileAttributeConfig) { diff --git a/apps/red-ui/src/app/modules/admin/screens/justifications/add-edit-justification-dialog/add-edit-justification-dialog.component.ts b/apps/red-ui/src/app/modules/admin/screens/justifications/add-edit-justification-dialog/add-edit-justification-dialog.component.ts index 117b02663..f8048607f 100644 --- a/apps/red-ui/src/app/modules/admin/screens/justifications/add-edit-justification-dialog/add-edit-justification-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/justifications/add-edit-justification-dialog/add-edit-justification-dialog.component.ts @@ -4,7 +4,7 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { Justification } from '@red/domain'; import { JustificationsService } from '@services/entity-services/justifications.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; -import { BaseDialogComponent, LoadingService } from '@iqser/common-ui'; +import { LoadingService } from '@iqser/common-ui'; @Component({ selector: 'redaction-add-edit-justification-dialog', @@ -12,7 +12,7 @@ import { BaseDialogComponent, LoadingService } from '@iqser/common-ui'; styleUrls: ['./add-edit-justification-dialog.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class AddEditJustificationDialogComponent extends BaseDialogComponent { +export class AddEditJustificationDialogComponent { readonly form: FormGroup = this._getForm(); constructor( @@ -22,17 +22,7 @@ export class AddEditJustificationDialogComponent extends BaseDialogComponent { private readonly _loadingService: LoadingService, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public justification: Justification, - ) { - super(); - } - - private _getForm(): FormGroup { - return this._formBuilder.group({ - name: [{ value: this.justification?.name, disabled: !!this.justification }, Validators.required], - reason: [this.justification?.reason, Validators.required], - description: [this.justification?.description, Validators.required], - }); - } + ) {} get changed(): boolean { return ( @@ -50,4 +40,12 @@ export class AddEditJustificationDialogComponent extends BaseDialogComponent { this._loadingService.stop(); this.dialogRef.close(true); } + + private _getForm(): FormGroup { + return this._formBuilder.group({ + name: [{ value: this.justification?.name, disabled: !!this.justification }, Validators.required], + reason: [this.justification?.reason, Validators.required], + description: [this.justification?.description, Validators.required], + }); + } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.html index 937c75510..6657b935e 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.html @@ -1,4 +1,4 @@ - +
{{ 'edit-dossier-dialog.attributes.custom-attributes' | translate }} @@ -57,7 +57,7 @@
-
+
implements EditDossierSectionInterface, OnInit { @Input() dossier: Dossier; readonly changed = false; + readonly valid = false; readonly canRestoreSelected$ = this._canRestoreSelected$; disabled: boolean; readonly tableColumnConfigs: TableColumnConfig[] = [ diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts index ba2dc7296..2e309c464 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts @@ -29,14 +29,18 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa private readonly _toaster: Toaster, ) {} - get changed() { + get changed(): boolean { return this._dictionaryManager.editor.hasChanges; } - get disabled() { + get disabled(): boolean { return !this.canEdit; } + get valid(): boolean { + return this._dictionaryManager.editor.hasChanges; + } + async ngOnInit() { this._loadingService.start(); this.canEdit = this._permissionsService.isDossierMember(this.dossier); 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 9cfb28039..090c8d9ca 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,9 +1,9 @@ - + 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 402e8a3c8..9ddc8a127 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 @@ -12,7 +12,7 @@ import { ReportTemplateService } from '@services/report-template.service'; styleUrls: ['./edit-dossier-download-package.component.scss'], }) export class EditDossierDownloadPackageComponent implements OnInit, EditDossierSectionInterface { - dossierForm: FormGroup; + form: FormGroup; downloadTypes: { key: DownloadFileType; label: string }[] = ['ORIGINAL', 'PREVIEW', 'REDACTED'].map((type: DownloadFileType) => ({ key: type, label: downloadTypesTranslations[type], @@ -28,22 +28,22 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS ) {} get reportTypesLength() { - return this.dossierForm.controls['reportTemplateIds']?.value?.length || 0; + return this.form.controls['reportTemplateIds']?.value?.length || 0; } get downloadFileTypesLength() { - return this.dossierForm.controls['downloadFileTypes']?.value?.length || 0; + return this.form.controls['downloadFileTypes']?.value?.length || 0; } get changed() { - if (this.dossierForm) { - for (const key of Object.keys(this.dossierForm.getRawValue())) { - if (this.dossier[key].length !== this.dossierForm.get(key).value.length) { + if (this.form) { + for (const key of Object.keys(this.form.getRawValue())) { + if (this.dossier[key].length !== this.form.get(key).value.length) { return true; } const originalItems = [...this.dossier[key]].sort(); - const newItems = [...this.dossierForm.get(key).value].sort(); + const newItems = [...this.form.get(key).value].sort(); for (let idx = 0; idx < originalItems.length; ++idx) { if (originalItems[idx] !== newItems[idx]) { @@ -57,7 +57,11 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS } get disabled() { - return this.dossierForm?.invalid || !this.dossierForm?.value?.downloadFileTypes?.length; + return !this.form?.value?.downloadFileTypes?.length; + } + + get valid(): boolean { + return this.form.valid; } reportTemplateValueMapper = (reportTemplate: IReportTemplate) => reportTemplate.templateId; @@ -66,14 +70,14 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS this.availableReportTypes = (await this._reportTemplateController.getAvailableReportTemplates(this.dossier.dossierTemplateId).toPromise()) || []; - this.dossierForm = this._getForm(); + this.form = this._getForm(); } async save(): EditDossierSaveResult { const dossier = { ...this.dossier, - downloadFileTypes: this.dossierForm.get('downloadFileTypes').value, - reportTemplateIds: this.dossierForm.get('reportTemplateIds').value, + downloadFileTypes: this.form.get('downloadFileTypes').value, + reportTemplateIds: this.form.get('reportTemplateIds').value, }; try { await this._dossiersService.createOrUpdate(dossier).toPromise(); @@ -84,7 +88,7 @@ export class EditDossierDownloadPackageComponent implements OnInit, EditDossierS } revert() { - this.dossierForm.reset({ + this.form.reset({ downloadFileTypes: this.dossier.downloadFileTypes, reportTemplateIds: this.dossier.reportTemplateIds, }); diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html index 30aa8a155..8b9f90c77 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html @@ -49,17 +49,12 @@
- diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts index 4c7a6b9a7..8959c4e45 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts @@ -4,7 +4,7 @@ import { Dossier } from '@red/domain'; import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component'; import { EditDossierDownloadPackageComponent } from './download-package/edit-dossier-download-package.component'; import { EditDossierSectionInterface } from './edit-dossier-section.interface'; -import { IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; +import { BaseDialogComponent, IconButtonTypes, LoadingService, Toaster } from '@iqser/common-ui'; import { EditDossierDictionaryComponent } from './dictionary/edit-dossier-dictionary.component'; import { EditDossierAttributesComponent } from './attributes/edit-dossier-attributes.component'; @@ -21,7 +21,7 @@ type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'member templateUrl: './edit-dossier-dialog.component.html', styleUrls: ['./edit-dossier-dialog.component.scss'], }) -export class EditDossierDialogComponent { +export class EditDossierDialogComponent extends BaseDialogComponent { readonly navItems: { key: Section; title?: string; sideNavTitle?: string }[]; readonly iconButtonTypes = IconButtonTypes; activeNav: Section; @@ -47,6 +47,7 @@ export class EditDossierDialogComponent { section?: Section; }, ) { + super(); this.navItems = [ { key: 'dossierInfo', @@ -111,6 +112,18 @@ export class EditDossierDialogComponent { return !['deletedDocuments'].includes(this.activeNav); } + get changed(): boolean { + return this.activeComponent?.changed; + } + + get valid(): boolean { + return this.activeComponent?.valid; + } + + get disabled(): boolean { + return this.activeComponent?.disabled; + } + afterSave() { this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this._dossierName } }); } @@ -134,7 +147,7 @@ export class EditDossierDialogComponent { } changeTab(key: Section) { - if (this.activeComponent.changed) { + if (this.changed) { this._toaster.error(_('edit-dossier-dialog.unsaved-changes')); return; } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-section.interface.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-section.interface.ts index 84d05ca47..d575480ed 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-section.interface.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-section.interface.ts @@ -2,6 +2,7 @@ export type EditDossierSaveResult = Promise<{ success: boolean }>; export interface EditDossierSectionInterface { changed: boolean; + valid: boolean; disabled: boolean; save: (...args: any) => EditDossierSaveResult; revert: Function; diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html index 0dc4ec35f..26d46072e 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.html @@ -1,4 +1,4 @@ - +
{{ 'assign-dossier-owner.dialog.single-user' | translate }} diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html index f27c24b26..4e2abec05 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html @@ -1,4 +1,4 @@ - +