diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.html index 8bdf5db9b..12e2c35f3 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.html @@ -8,7 +8,7 @@ 'file-attributes-configurations.form.support-csv-mapping' | translate }} - +
+
+
@@ -37,14 +39,15 @@
+
-
+
- + diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.ts index 9b2d9aa79..8760eed8b 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-configurations-dialog/file-attributes-configurations-dialog.component.ts @@ -1,12 +1,10 @@ -import { ChangeDetectionStrategy, Component, Inject, Injector } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Inject, Injector, OnInit } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { FileAttributeEncodingTypes, IFileAttributesConfig } from '@red/domain'; import { fileAttributeEncodingTypesTranslations } from '@translations/file-attribute-encoding-types-translations'; import { BaseDialogComponent, Toaster } from '@iqser/common-ui'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; -import { firstValueFrom } from 'rxjs'; -import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { FileAttributesService } from '@services/entity-services/file-attributes.service'; @Component({ @@ -14,10 +12,10 @@ import { FileAttributesService } from '@services/entity-services/file-attributes styleUrls: ['./file-attributes-configurations-dialog.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class FileAttributesConfigurationsDialogComponent extends BaseDialogComponent { +export class FileAttributesConfigurationsDialogComponent extends BaseDialogComponent implements OnInit { readonly encodingTypeOptions = Object.keys(FileAttributeEncodingTypes); readonly translations = fileAttributeEncodingTypesTranslations; - private readonly _configuration: IFileAttributesConfig = this._data.config; + readonly #configuration = this._data.config; constructor( private readonly _formBuilder: UntypedFormBuilder, @@ -26,10 +24,10 @@ export class FileAttributesConfigurationsDialogComponent extends BaseDialogCompo private readonly _toaster: Toaster, protected readonly _injector: Injector, protected readonly _dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) private _data: { config: IFileAttributesConfig; dossierTemplateId: string }, + @Inject(MAT_DIALOG_DATA) private readonly _data: { config: IFileAttributesConfig; dossierTemplateId: string }, ) { super(_injector, _dialogRef, true); - this.form = this._getForm(); + this.form = this.#getForm(); this.initialFormValue = this.form.getRawValue(); } @@ -37,33 +35,41 @@ export class FileAttributesConfigurationsDialogComponent extends BaseDialogCompo if (!this.changed) { return true; } + if (!this.form.get('supportCsvMapping').value) { return false; } + return !this.valid; } - async save() { - this._configuration.filenameMappingColumnHeaderName = this.form.get('keyColumn').value; - this._configuration.delimiter = this.form.get('delimiter').value; - this._configuration.encoding = this.form.get('encodingType').value; - - try { - await firstValueFrom(this._fileAttributesService.setFileAttributeConfig(this._configuration, this._data.dossierTemplateId)); - this._toaster.success(_('file-attributes-configurations.update.success')); - } catch (e) { - this._toaster.error(_('file-attributes-configurations.update.error')); - } - - this._dialogRef.close(); + save() { + this._dialogRef.close(this.#getConfiguration()); } - private _getForm(): UntypedFormGroup { + #getConfiguration() { + const supportCsvMapping = this.form.get('supportCsvMapping').value; + if (supportCsvMapping) { + return { + ...this.#configuration, + filenameMappingColumnHeaderName: this.form.get('keyColumn').value, + delimiter: this.form.get('delimiter').value, + encoding: this.form.get('encodingType').value, + }; + } + + return { + ...this.#configuration, + filenameMappingColumnHeaderName: '', + }; + } + + #getForm(): UntypedFormGroup { return this._formBuilder.group({ - supportCsvMapping: [!!this._configuration.filenameMappingColumnHeaderName], - keyColumn: [this._configuration.filenameMappingColumnHeaderName || '', [Validators.required]], - delimiter: [this._configuration.delimiter || '', [Validators.required]], - encodingType: [this._configuration.encoding || FileAttributeEncodingTypes['UTF-8'], [Validators.required]], + supportCsvMapping: [!!this.#configuration.filenameMappingColumnHeaderName], + keyColumn: [this.#configuration.filenameMappingColumnHeaderName || '', [Validators.required]], + delimiter: [this.#configuration.delimiter || '', [Validators.required]], + encodingType: [this.#configuration.encoding || FileAttributeEncodingTypes['UTF-8'], [Validators.required]], }); } } 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 d93717f5e..c3c19130b 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 @@ -59,7 +59,7 @@ export class FileAttributesListingScreenComponent extends ListingComponent; - private _existingConfiguration: IFileAttributesConfig; + #existingConfiguration: IFileAttributesConfig; @ViewChild('fileInput') private _fileInput: ElementRef; readonly #dossierTemplateId: string; @@ -87,7 +87,7 @@ export class FileAttributesListingScreenComponent extends ListingComponent { - this._loadingService.loadWhile(this._createNewFileAttributeAndRefreshView(newValue)); + this._loadingService.loadWhile(this.#createNewFileAttributeAndRefreshView(newValue)); }); } @@ -117,7 +117,7 @@ export class FileAttributesListingScreenComponent extends ListingComponent a.id); await firstValueFrom(this._fileAttributesService.deleteFileAttributes(ids, this.#dossierTemplateId)); await firstValueFrom(this._dossierTemplatesService.refreshDossierTemplate(this.#dossierTemplateId)); - await this._loadData(); + await this.#loadData(); }, ); } @@ -132,21 +132,39 @@ export class FileAttributesListingScreenComponent extends ListingComponent this._loadData(), + async () => this.#loadData(), ); } openConfigurationsDialog($event: MouseEvent) { - this._dialogService.openDialog('fileAttributesConfigurations', $event, { - config: this._existingConfiguration, + const ref = this._dialogService.openDialog('fileAttributesConfigurations', $event, { + config: this.#existingConfiguration, dossierTemplateId: this.#dossierTemplateId, }); + + ref.afterClosed().subscribe(async (configuration: IFileAttributesConfig) => { + if (configuration) { + await this.#setConfigAndLoadData(configuration); + } + }); } - private async _createNewFileAttributeAndRefreshView(newValue: IFileAttributeConfig): Promise { - await firstValueFrom(this._fileAttributesService.setFileAttributesConfig(newValue, this.#dossierTemplateId)).catch(error => { + async #setConfigAndLoadData(configuration: IFileAttributesConfig) { + const request = this._fileAttributesService.setFileAttributeConfig(configuration, this.#dossierTemplateId); + try { + await firstValueFrom(request); + this._toaster.success(_('file-attributes-configurations.update.success')); + await this.#loadData(); + } catch (e) { + this._toaster.error(_('file-attributes-configurations.update.error')); + } + } + + async #createNewFileAttributeAndRefreshView(newValue: IFileAttributeConfig): Promise { + const request = this._fileAttributesService.setFileAttributesConfig(newValue, this.#dossierTemplateId); + await firstValueFrom(request).catch(error => { if (error.status === HttpStatusCode.Conflict) { this._toaster.error(_('file-attributes-listing.error.conflict')); } else { @@ -155,15 +173,15 @@ export class FileAttributesListingScreenComponent extends ListingComponent new FileAttributeConfig(item)) || []; this.entitiesService.setEntities(fileAttributeConfig); } catch (e) {}