From 4019f7e9acd895bf60647e4fd3b89435ff363ace Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Mon, 8 Nov 2021 21:50:03 +0200 Subject: [PATCH] fix RED-2671 --- .../active-fields-listing.component.ts | 17 +++++----- ...-attributes-csv-import-dialog.component.ts | 33 ++++++++----------- .../src/lib/file-attributes/field.ts | 11 +++++++ .../src/lib/file-attributes/index.ts | 1 + 4 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 libs/red-domain/src/lib/file-attributes/field.ts diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.ts index 1a0df33c3..bc5317096 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.ts @@ -1,9 +1,8 @@ import { Component, EventEmitter, forwardRef, Injector, Input, OnChanges, Output, SimpleChanges } from '@angular/core'; -import { Field } from '../file-attributes-csv-import-dialog.component'; import { CircleButtonTypes, DefaultListingServices, ListingComponent, TableColumnConfig } from '@iqser/common-ui'; import { fileAttributeTypesTranslations } from '../../../translations/file-attribute-types-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { FileAttributeConfigTypes } from '@red/domain'; +import { FileAttributeConfigTypes, IField } from '@red/domain'; @Component({ selector: 'redaction-active-fields-listing', @@ -11,11 +10,11 @@ import { FileAttributeConfigTypes } from '@red/domain'; styleUrls: ['./active-fields-listing.component.scss'], providers: [...DefaultListingServices, { provide: ListingComponent, useExisting: forwardRef(() => ActiveFieldsListingComponent) }], }) -export class ActiveFieldsListingComponent extends ListingComponent implements OnChanges { +export class ActiveFieldsListingComponent extends ListingComponent implements OnChanges { readonly circleButtonTypes = CircleButtonTypes; readonly translations = fileAttributeTypesTranslations; readonly tableHeaderLabel = _('file-attributes-csv-import.table-header.title'); - readonly tableColumnConfigs: TableColumnConfig[] = [ + readonly tableColumnConfigs: TableColumnConfig[] = [ { label: _('file-attributes-csv-import.table-col-names.name'), class: 'name', @@ -40,10 +39,10 @@ export class ActiveFieldsListingComponent extends ListingComponent implem }, ]; readonly typeOptions = Object.keys(FileAttributeConfigTypes); - @Input() entities: Field[]; - @Output() readonly entitiesChange = new EventEmitter(); + @Input() entities: IField[]; + @Output() readonly entitiesChange = new EventEmitter(); @Output() readonly setHoveredColumn = new EventEmitter(); - @Output() readonly toggleFieldActive = new EventEmitter(); + @Output() readonly toggleFieldActive = new EventEmitter(); constructor(protected readonly _injector: Injector) { super(_injector); @@ -68,7 +67,7 @@ export class ActiveFieldsListingComponent extends ListingComponent implem } } - togglePrimary(field: Field) { + togglePrimary(field: IField) { if (field.primaryAttribute) { field.primaryAttribute = false; return; @@ -80,6 +79,6 @@ export class ActiveFieldsListingComponent extends ListingComponent implem field.primaryAttribute = true; } - itemMouseEnterFn = (field: Field) => this.setHoveredColumn.emit(field.csvColumn); + itemMouseEnterFn = (field: IField) => this.setHoveredColumn.emit(field.csvColumn); itemMouseLeaveFn = () => this.setHoveredColumn.emit(); } diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts index e0d094671..349cd8c55 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts @@ -1,33 +1,25 @@ -import { Component, Inject, Injector } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Inject, Injector } from '@angular/core'; import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import * as Papa from 'papaparse'; import { Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; -import { DefaultListingServices, IListable, ListingComponent, TableColumnConfig, Toaster } from '@iqser/common-ui'; +import { DefaultListingServices, ListingComponent, TableColumnConfig, Toaster } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { FileAttributeConfig, FileAttributeConfigType, FileAttributeConfigTypes, IFileAttributesConfig } from '@red/domain'; +import { FileAttributeConfig, FileAttributeConfigTypes, IField, IFileAttributesConfig } from '@red/domain'; import { FileAttributesService } from '@services/entity-services/file-attributes.service'; -export interface Field extends IListable { - id: string; - csvColumn: string; - name: string; - type: FileAttributeConfigType; - readonly: boolean; - primaryAttribute: boolean; -} - @Component({ templateUrl: './file-attributes-csv-import-dialog.component.html', styleUrls: ['./file-attributes-csv-import-dialog.component.scss'], providers: [...DefaultListingServices], + changeDetection: ChangeDetectionStrategy.OnPush, }) -export class FileAttributesCsvImportDialogComponent extends ListingComponent { - readonly tableColumnConfigs: TableColumnConfig[] = []; - parseResult: { data: any[]; errors: any[]; meta: any; fields: Field[] }; +export class FileAttributesCsvImportDialogComponent extends ListingComponent { + readonly tableColumnConfigs: TableColumnConfig[] = []; + parseResult: { data: any[]; errors: any[]; meta: any; fields: IField[] }; hoveredColumn: string; - activeFields: Field[] = []; + activeFields: IField[] = []; readonly baseConfigForm: FormGroup; isSearchOpen = false; previewExpanded = true; @@ -62,6 +54,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent a.csvColumnHeader === entity.csvColumn); + const existing = this.data.existingConfiguration.fileAttributeConfigs?.find(a => a.csvColumnHeader === entity.csvColumn); if (existing) { entity.id = existing.id; entity.name = existing.label; @@ -142,11 +135,11 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent f.id === field.id); } - toggleFieldActive(field: Field) { + toggleFieldActive(field: IField) { if (!this.isActive(field)) { this.activeFields = [...this.activeFields, { ...field, searchKey: field.csvColumn }]; } else { @@ -219,7 +212,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent