From d1cc15ec2368fca1f9e2c7889595083ae221236c Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Sat, 25 Sep 2021 10:46:22 +0300 Subject: [PATCH] add class for dossier attributes & rename interface --- .../downloads-list-screen.component.ts | 1 - .../app/models/dossier-attributes.model.ts | 4 +- .../app/models/file/file-status.wrapper.ts | 2 +- ...edit-dossier-attribute-dialog.component.ts | 18 +++------ ...ier-attributes-listing-screen.component.ts | 8 ++-- .../dossier-attribute-types-translations.ts | 4 +- .../dossier-details.component.ts | 6 +-- .../dossier-listing-screen.component.ts | 2 +- .../dossier-attributes.service.ts | 16 ++++---- .../model/download-status.wrapper.ts | 6 ++- .../red-ui/src/app/state/app-state.service.ts | 12 ++---- .../state/model/dossier-attribute-config.ts | 22 +++++++++++ apps/red-ui/src/app/state/model/dossier.ts | 6 ++- .../dossierAttributesController.service.ts | 38 +++++++++---------- .../src/lib/model/dossierAttributeConfig.ts | 28 +++++++------- .../src/lib/model/dossierAttributesConfig.ts | 4 +- 16 files changed, 96 insertions(+), 81 deletions(-) create mode 100644 apps/red-ui/src/app/state/model/dossier-attribute-config.ts diff --git a/apps/red-ui/src/app/components/downloads-list-screen/downloads-list-screen.component.ts b/apps/red-ui/src/app/components/downloads-list-screen/downloads-list-screen.component.ts index dd7ed4d72..41207582a 100644 --- a/apps/red-ui/src/app/components/downloads-list-screen/downloads-list-screen.component.ts +++ b/apps/red-ui/src/app/components/downloads-list-screen/downloads-list-screen.component.ts @@ -21,7 +21,6 @@ export class DownloadsListScreenComponent extends ListingComponent; @ViewChild('creationDateTemplate', { static: true }) creationDateTemplate: TemplateRef; @ViewChild('statusTemplate', { static: true }) statusTemplate: TemplateRef; - protected readonly _primaryKey = 'storageId'; constructor( protected readonly _injector: Injector, diff --git a/apps/red-ui/src/app/models/dossier-attributes.model.ts b/apps/red-ui/src/app/models/dossier-attributes.model.ts index 59b49755e..cf99a25cc 100644 --- a/apps/red-ui/src/app/models/dossier-attributes.model.ts +++ b/apps/red-ui/src/app/models/dossier-attributes.model.ts @@ -1,3 +1,3 @@ -import { DossierAttributeConfig } from '@redaction/red-ui-http'; +import { IDossierAttributeConfig } from '@redaction/red-ui-http'; -export type DossierAttributeWithValue = DossierAttributeConfig & { value: any }; +export type DossierAttributeWithValue = IDossierAttributeConfig & { value: any }; diff --git a/apps/red-ui/src/app/models/file/file-status.wrapper.ts b/apps/red-ui/src/app/models/file/file-status.wrapper.ts index 5d45b7654..16abefbb2 100644 --- a/apps/red-ui/src/app/models/file/file-status.wrapper.ts +++ b/apps/red-ui/src/app/models/file/file-status.wrapper.ts @@ -84,7 +84,7 @@ export class FileStatusWrapper implements FileStatus, IListable { readonly isWorkable = !this.isProcessing && this.canBeOpened; readonly canBeOCRed = !this.excluded && !this.lastOCRTime && ['UNASSIGNED', 'UNDER_REVIEW', 'UNDER_APPROVAL'].includes(this.status); - get id() { + get id(): string { return this.fileId; } diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.ts index dcb61f207..c90bf699f 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.ts @@ -1,10 +1,9 @@ import { Component, Inject, OnDestroy } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { DossierAttributeConfig, FileAttributeConfig } from '@redaction/red-ui-http'; +import { DossierAttributeConfigTypes, FileAttributeConfig, IDossierAttributeConfig } from '@redaction/red-ui-http'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { AutoUnsubscribe, LoadingService } from '@iqser/common-ui'; +import { AutoUnsubscribe, LoadingService, Toaster } from '@iqser/common-ui'; import { HttpErrorResponse } from '@angular/common/http'; -import { Toaster } from '@iqser/common-ui'; import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service'; import { dossierAttributeTypesTranslations } from '../../translations/dossier-attribute-types-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -15,14 +14,9 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; }) export class AddEditDossierAttributeDialogComponent extends AutoUnsubscribe implements OnDestroy { dossierAttributeForm: FormGroup; - dossierAttribute: DossierAttributeConfig; + dossierAttribute: IDossierAttributeConfig; readonly translations = dossierAttributeTypesTranslations; - readonly typeOptions = [ - DossierAttributeConfig.TypeEnum.TEXT, - DossierAttributeConfig.TypeEnum.NUMBER, - DossierAttributeConfig.TypeEnum.DATE, - DossierAttributeConfig.TypeEnum.IMAGE - ]; + readonly typeOptions = Object.keys(DossierAttributeConfigTypes); constructor( private readonly _formBuilder: FormBuilder, @@ -31,7 +25,7 @@ export class AddEditDossierAttributeDialogComponent extends AutoUnsubscribe impl private readonly _toaster: Toaster, readonly dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) - readonly data: { readonly dossierAttribute: DossierAttributeConfig } + readonly data: { readonly dossierAttribute: IDossierAttributeConfig } ) { super(); this.dossierAttribute = data.dossierAttribute; @@ -65,7 +59,7 @@ export class AddEditDossierAttributeDialogComponent extends AutoUnsubscribe impl saveFileAttribute() { this._loadingService.start(); - const attribute: DossierAttributeConfig = { + const attribute: IDossierAttributeConfig = { id: this.dossierAttribute?.id, editable: true, ...this.dossierAttributeForm.getRawValue() diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts index 8ed266871..09cd2466f 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts @@ -7,7 +7,7 @@ import { LoadingService, TableColumnConfig } from '@iqser/common-ui'; -import { DossierAttributeConfig } from '@redaction/red-ui-http'; +import { IDossierAttributeConfig } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; import { ActivatedRoute } from '@angular/router'; import { AdminDialogService } from '../../services/admin-dialog.service'; @@ -15,6 +15,7 @@ import { DossierAttributesService } from '@shared/services/controller-wrappers/d import { dossierAttributeTypesTranslations } from '../../translations/dossier-attribute-types-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { UserService } from '@services/user.service'; +import { DossierAttributeConfig } from '@state/model/dossier-attribute-config'; @Component({ templateUrl: './dossier-attributes-listing-screen.component.html', @@ -34,7 +35,6 @@ export class DossierAttributesListingScreenComponent extends ListingComponent; @ViewChild('placeholderTemplate', { static: true }) placeholderTemplate: TemplateRef; @ViewChild('typeTemplate', { static: true }) typeTemplate: TemplateRef; - protected readonly _primaryKey = 'label'; constructor( protected readonly _injector: Injector, @@ -54,7 +54,7 @@ export class DossierAttributesListingScreenComponent extends ListingComponent { this._loadingService.start(); const ids = dossierAttribute ? [dossierAttribute.id] : this.entitiesService.selected.map(item => item.id); @@ -64,7 +64,7 @@ export class DossierAttributesListingScreenComponent extends ListingComponent { - return ( - (await this._dossierAttributesControllerService.getDossierAttributesConfig(dossierTemplateId).toPromise()) - ?.dossierAttributeConfigs || [] - ); + const config$ = this._dossierAttributesControllerService.getDossierAttributesConfig(dossierTemplateId); + const result = (await config$.toPromise())?.dossierAttributeConfigs || []; + return result.map(item => new DossierAttributeConfig(item)); } addOrUpdateConfig( - attribute: DossierAttributeConfig, + attribute: IDossierAttributeConfig, dossierTemplateId = this._appStateService.activeDossierTemplateId - ): Observable { + ): Observable { return this._dossierAttributesControllerService.addOrUpdateDossierAttributesConfig(attribute, dossierTemplateId); } } diff --git a/apps/red-ui/src/app/modules/upload-download/model/download-status.wrapper.ts b/apps/red-ui/src/app/modules/upload-download/model/download-status.wrapper.ts index c677eb2dd..156e1ebc7 100644 --- a/apps/red-ui/src/app/modules/upload-download/model/download-status.wrapper.ts +++ b/apps/red-ui/src/app/modules/upload-download/model/download-status.wrapper.ts @@ -7,7 +7,11 @@ export class DownloadStatusWrapper implements IListable { constructor(private _downloadStatus: DownloadStatus) {} get id() { - return this._downloadStatus.storageId; + return this.storageId; + } + + get searchKey(): string { + return this.storageId; } get size() { 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 59868c4fe..74e969f25 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -221,9 +221,7 @@ export class AppStateService { return; } - const mappedDossiers = dossiers.map( - p => new Dossier(p, this.getDossierTemplateById(p.dossierTemplateId).name, this._getExistingFiles(p.dossierId)) - ); + const mappedDossiers = dossiers.map(p => new Dossier(p, this._getExistingFiles(p.dossierId))); const fileData = await this._statusControllerService.getFileStatusForDossiers(mappedDossiers.map(p => p.id)).toPromise(); for (const dossierId of Object.keys(fileData)) { @@ -353,13 +351,9 @@ export class AppStateService { let foundDossier = this.allDossiers.find(p => p.id === updatedDossier.dossierId); if (foundDossier) { this._appState.dossiers.splice(this._appState.dossiers.indexOf(foundDossier), 1); - foundDossier = new Dossier( - updatedDossier, - this.getDossierTemplateById(updatedDossier.dossierTemplateId).name, - foundDossier.files - ); + foundDossier = new Dossier(updatedDossier, foundDossier.files); } else { - foundDossier = new Dossier(updatedDossier, this.getDossierTemplateById(updatedDossier.dossierTemplateId).name, []); + foundDossier = new Dossier(updatedDossier, []); } this._appState.dossiers.push(foundDossier); diff --git a/apps/red-ui/src/app/state/model/dossier-attribute-config.ts b/apps/red-ui/src/app/state/model/dossier-attribute-config.ts new file mode 100644 index 000000000..28da877ca --- /dev/null +++ b/apps/red-ui/src/app/state/model/dossier-attribute-config.ts @@ -0,0 +1,22 @@ +import { DossierAttributeConfigType, IDossierAttributeConfig } from '@redaction/red-ui-http'; +import { IListable } from '@iqser/common-ui'; + +export class DossierAttributeConfig implements IDossierAttributeConfig, IListable { + readonly id: string; + readonly editable: boolean; + readonly label?: string; + readonly placeholder?: string; + readonly type?: DossierAttributeConfigType; + + constructor(dossierAttributeConfig: IDossierAttributeConfig) { + this.id = dossierAttributeConfig.id; + this.editable = !!dossierAttributeConfig.editable; + this.label = dossierAttributeConfig.label; + this.placeholder = dossierAttributeConfig.placeholder; + this.type = dossierAttributeConfig.type; + } + + get searchKey(): string { + return this.label; + } +} diff --git a/apps/red-ui/src/app/state/model/dossier.ts b/apps/red-ui/src/app/state/model/dossier.ts index 5af2fd91e..acfd7d9ac 100644 --- a/apps/red-ui/src/app/state/model/dossier.ts +++ b/apps/red-ui/src/app/state/model/dossier.ts @@ -35,7 +35,7 @@ export class Dossier implements IDossier, IListable { allFilesApproved?: boolean; type?: Dictionary; - constructor(dossier: IDossier, readonly dossierTemplateName: string, private _files: FileStatusWrapper[] = []) { + constructor(dossier: IDossier, private _files: FileStatusWrapper[] = []) { this.id = dossier.dossierId; this.approverIds = dossier.approverIds; this.date = dossier.date; @@ -57,6 +57,10 @@ export class Dossier implements IDossier, IListable { this._recomputeFileStatus(); } + get searchKey(): string { + return this.dossierName; + } + get files() { return this._files; } diff --git a/libs/red-ui-http/src/lib/api/dossierAttributesController.service.ts b/libs/red-ui-http/src/lib/api/dossierAttributesController.service.ts index cfa08f4b4..9e809d6c6 100644 --- a/libs/red-ui-http/src/lib/api/dossierAttributesController.service.ts +++ b/libs/red-ui-http/src/lib/api/dossierAttributesController.service.ts @@ -10,20 +10,20 @@ * Do not edit the class manually. */ /* tslint:disable:no-unused-variable member-ordering */ -import { Inject, Injectable, Optional } from '@angular/core'; -import { HttpClient, HttpEvent, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http'; +import { Inject, Injectable, Optional } from "@angular/core"; +import { HttpClient, HttpEvent, HttpHeaders, HttpParams, HttpResponse } from "@angular/common/http"; -import { Observable } from 'rxjs'; +import { Observable } from "rxjs"; -import { DossierAttributeConfig } from '../model/dossierAttributeConfig'; -import { DossierAttributeReq } from '../model/dossierAttributeReq'; -import { DossierAttributesConfig } from '../model/dossierAttributesConfig'; -import { DossierAttributesReq } from '../model/dossierAttributesReq'; -import { DossierAttributesRes } from '../model/dossierAttributesRes'; +import { IDossierAttributeConfig } from "../model/dossierAttributeConfig"; +import { DossierAttributeReq } from "../model/dossierAttributeReq"; +import { DossierAttributesConfig } from "../model/dossierAttributesConfig"; +import { DossierAttributesReq } from "../model/dossierAttributesReq"; +import { DossierAttributesRes } from "../model/dossierAttributesRes"; -import { BASE_PATH } from '../variables'; -import { Configuration } from '../configuration'; -import { CustomHttpUrlEncodingCodec } from '../encoder'; +import { BASE_PATH } from "../variables"; +import { Configuration } from "../configuration"; +import { CustomHttpUrlEncodingCodec } from "../encoder"; @Injectable() export class DossierAttributesControllerService { @@ -133,28 +133,28 @@ export class DossierAttributesControllerService { * @param reportProgress flag to report request and response progress. */ public addOrUpdateDossierAttributesConfig( - body: DossierAttributeConfig, + body: IDossierAttributeConfig, dossierTemplateId: string, observe?: 'body', reportProgress?: boolean - ): Observable; + ): Observable; public addOrUpdateDossierAttributesConfig( - body: DossierAttributeConfig, + body: IDossierAttributeConfig, dossierTemplateId: string, observe?: 'response', reportProgress?: boolean - ): Observable>; + ): Observable>; public addOrUpdateDossierAttributesConfig( - body: DossierAttributeConfig, + body: IDossierAttributeConfig, dossierTemplateId: string, observe?: 'events', reportProgress?: boolean - ): Observable>; + ): Observable>; public addOrUpdateDossierAttributesConfig( - body: DossierAttributeConfig, + body: IDossierAttributeConfig, dossierTemplateId: string, observe: any = 'body', reportProgress: boolean = false @@ -190,7 +190,7 @@ export class DossierAttributesControllerService { headers = headers.set('Content-Type', httpContentTypeSelected); } - return this.httpClient.request( + return this.httpClient.request( 'post', `${this.basePath}/dossier-attributes/config/${encodeURIComponent(String(dossierTemplateId))}`, { diff --git a/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts b/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts index 16f90a718..570df6c11 100644 --- a/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts +++ b/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts @@ -10,20 +10,18 @@ * Do not edit the class manually. */ -export interface DossierAttributeConfig { - id: string; - editable?: boolean; - label?: string; - placeholder?: string; - type?: DossierAttributeConfig.TypeEnum; +export interface IDossierAttributeConfig { + readonly id: string; + readonly editable?: boolean; + readonly label?: string; + readonly placeholder?: string; + readonly type?: DossierAttributeConfigType; } -export namespace DossierAttributeConfig { - export type TypeEnum = 'DATE' | 'IMAGE' | 'NUMBER' | 'TEXT'; - export const TypeEnum = { - DATE: 'DATE' as TypeEnum, - IMAGE: 'IMAGE' as TypeEnum, - NUMBER: 'NUMBER' as TypeEnum, - TEXT: 'TEXT' as TypeEnum - }; -} +export const DossierAttributeConfigTypes = { + DATE: 'DATE', + IMAGE: 'IMAGE', + NUMBER: 'NUMBER', + TEXT: 'TEXT' +} as const; +export type DossierAttributeConfigType = keyof typeof DossierAttributeConfigTypes; diff --git a/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts b/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts index bdaf8a0af..a3ef99543 100644 --- a/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts +++ b/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts @@ -9,8 +9,8 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ -import { DossierAttributeConfig } from './dossierAttributeConfig'; +import { IDossierAttributeConfig } from './dossierAttributeConfig'; export interface DossierAttributesConfig { - dossierAttributeConfigs?: Array; + dossierAttributeConfigs?: Array; }