From 0ca1c3b536f52dc1943ef828ab2bea2c68071726 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Wed, 6 Oct 2021 19:54:29 +0300 Subject: [PATCH] update dossier attributes service --- ...edit-dossier-attribute-dialog.component.ts | 2 +- ...ier-attributes-listing-screen.component.ts | 18 +++-- .../edit-dossier-attributes.component.ts | 4 +- .../dossier-overview-screen.component.ts | 2 +- .../dossier-attributes.service.ts | 67 ++++++++++++------- libs/common-ui | 2 +- libs/red-ui-http/src/lib/api.module.ts | 2 - .../src/lib/model/dossierAttributesConfig.ts | 3 +- 8 files changed, 57 insertions(+), 43 deletions(-) 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 8b1094dfd..31da50fd9 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 @@ -65,7 +65,7 @@ export class AddEditDossierAttributeDialogComponent extends AutoUnsubscribe impl ...this.dossierAttributeForm.getRawValue(), }; - this._dossierAttributesService.addOrUpdateConfig(attribute).subscribe( + this._dossierAttributesService.createOrUpdate(attribute).subscribe( () => { this.dialogRef.close(true); }, 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 4726578ba..6f760eff9 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 @@ -1,7 +1,8 @@ import { Component, forwardRef, Injector, OnInit } from '@angular/core'; import { CircleButtonTypes, - DefaultListingServices, + DefaultListingServicesTmp, + EntitiesService, IconButtonTypes, ListingComponent, LoadingService, @@ -22,7 +23,8 @@ import { DossierTemplatesService } from '../../../dossier/services/dossier-templ templateUrl: './dossier-attributes-listing-screen.component.html', styleUrls: ['./dossier-attributes-listing-screen.component.scss'], providers: [ - ...DefaultListingServices, + ...DefaultListingServicesTmp, + { provide: EntitiesService, useExisting: DossierAttributesService }, { provide: ListingComponent, useExisting: forwardRef(() => DossierAttributesListingScreenComponent) }, ], }) @@ -59,7 +61,7 @@ export class DossierAttributesListingScreenComponent extends ListingComponent { this._loadingService.start(); const ids = dossierAttribute ? [dossierAttribute.id] : this.listingService.selected.map(item => item.id); - await this._dossierAttributesService.deleteConfigs(ids); + await this._dossierAttributesService.delete(ids).toPromise(); this.listingService.setSelected([]); await this._loadData(); }); @@ -68,18 +70,14 @@ export class DossierAttributesListingScreenComponent extends ListingComponent this._loadData(), + this._dialogService.openDialog('addEditDossierAttribute', $event, { dossierAttribute, dossierTemplateId }, async () => + this._loadData(), ); } private async _loadData() { this._loadingService.start(); - const attributes = await this._dossierAttributesService.getConfig(); - this.entitiesService.setEntities(attributes); + await this._dossierAttributesService.loadAll().toPromise(); this._loadingService.stop(); } } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts index a437871bc..34a5bc68d 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts @@ -68,7 +68,7 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa dossierAttributeId: attr.id, value: this.currentAttrValue(attr), })); - await this._dossierAttributesService.setValues(this.dossier, dossierAttributeList); + await this._dossierAttributesService.setAttributes(this.dossier, dossierAttributeList).toPromise(); await this._loadAttributes(); this.updateDossier.emit(); this._loadingService.stop(); @@ -134,7 +134,7 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa } private async _loadAttributes() { - this.attributes = await this._dossierAttributesService.getValues(this.dossier); + this.attributes = await this._dossierAttributesService.getWithValues(this.dossier); this.customAttributes = this.attributes.filter(attr => !this.isImage(attr)); this.imageAttributes = this.attributes.filter(attr => this.isImage(attr)); } diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts index 5d631c526..d359af029 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/screen/dossier-overview-screen.component.ts @@ -165,7 +165,7 @@ export class DossierOverviewScreenComponent extends ListingComponent imple .pipe(tap(index => (this._lastScrolledIndex = index))) .subscribe(); - this.dossierAttributes = await this._dossierAttributesService.getValues(this.currentDossier); + this.dossierAttributes = await this._dossierAttributesService.getWithValues(this.currentDossier); } catch (e) { console.log('Error from dossier overview screen: ', e); } finally { diff --git a/apps/red-ui/src/app/modules/shared/services/controller-wrappers/dossier-attributes.service.ts b/apps/red-ui/src/app/modules/shared/services/controller-wrappers/dossier-attributes.service.ts index b03e035d2..2ea94ca2a 100644 --- a/apps/red-ui/src/app/modules/shared/services/controller-wrappers/dossier-attributes.service.ts +++ b/apps/red-ui/src/app/modules/shared/services/controller-wrappers/dossier-attributes.service.ts @@ -1,50 +1,67 @@ -import { Injectable } from '@angular/core'; -import { DossierAttribute, DossierAttributes, DossierAttributesControllerService, IDossierAttributeConfig } from '@redaction/red-ui-http'; +import { Injectable, Injector } from '@angular/core'; +import { DossierAttribute, DossierAttributes, DossierAttributesConfig, IDossierAttributeConfig } from '@redaction/red-ui-http'; import { Dossier } from '@state/model/dossier'; import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; import { Observable } from 'rxjs'; import { DossierAttributeConfig } from '@state/model/dossier-attribute-config'; import { DossierTemplatesService } from '../../../dossier/services/dossier-templates.service'; +import { EntitiesService, List, mapEach, RequiredParam, Validate } from '@iqser/common-ui'; +import { map, tap } from 'rxjs/operators'; @Injectable({ providedIn: 'root', }) -export class DossierAttributesService { - constructor( - private readonly _dossierAttributesControllerService: DossierAttributesControllerService, - private readonly _dossierTemplatesService: DossierTemplatesService, - ) {} +export class DossierAttributesService extends EntitiesService { + constructor(private readonly _dossierTemplatesService: DossierTemplatesService, protected readonly _injector: Injector) { + super(_injector, DossierAttributeConfig, 'dossier-attributes'); + } - async getValues(dossier: Dossier): Promise { - const attributes = await this._dossierAttributesControllerService.getDossierAttributes(dossier.id).toPromise(); - const attributesConfig = await this._dossierAttributesControllerService - .getDossierAttributesConfig(dossier.dossierTemplateId) - .toPromise(); + async getWithValues(dossier: Dossier): Promise { + const attributes = await this.getAttributes(dossier.id).toPromise(); + const attributesConfig = await this.getConfig(dossier.dossierTemplateId).toPromise(); - return attributesConfig.dossierAttributeConfigs.map(config => ({ + return attributesConfig.map(config => ({ ...config, - value: attributes.dossierAttributeList.find(attr => attr.dossierAttributeConfigId === config.id)?.value, + value: attributes.find(attr => attr.dossierAttributeConfigId === config.id)?.value, })); } - setValues(dossier: Dossier, dossierAttributeList: DossierAttribute[]): Promise { - return this._dossierAttributesControllerService.setDossierAttributes({ dossierAttributeList }, dossier.id).toPromise(); + @Validate() + setAttributes( + @RequiredParam() dossier: Dossier, + @RequiredParam() dossierAttributeList: List, + ): Observable { + return this._post({ dossierAttributeList }, `${this._defaultModelPath}/set/${dossier.id}`); } - deleteConfigs(ids: string[], dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId): Promise { - return this._dossierAttributesControllerService.deleteDossierAttributesConfig(ids, dossierTemplateId).toPromise(); + @Validate() + delete(@RequiredParam() ids: List, dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId): Observable { + return this._post(ids, `${this._defaultModelPath}/config/delete/${dossierTemplateId}`); } - async getConfig(dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId): Promise { - const config$ = this._dossierAttributesControllerService.getDossierAttributesConfig(dossierTemplateId); - const result = (await config$.toPromise())?.dossierAttributeConfigs || []; - return result.map(item => new DossierAttributeConfig(item)); + loadAll(dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId): Observable { + return this.getConfig(dossierTemplateId).pipe( + map(entities => entities ?? []), + mapEach(entity => new DossierAttributeConfig(entity)), + tap(entities => this.setEntities(entities)), + ); } - addOrUpdateConfig( - attribute: IDossierAttributeConfig, + @Validate() + createOrUpdate( + @RequiredParam() attributeConfig: IDossierAttributeConfig, dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId, ): Observable { - return this._dossierAttributesControllerService.addOrUpdateDossierAttributesConfig(attribute, dossierTemplateId); + return this._post(attributeConfig, `${this._defaultModelPath}/config/${dossierTemplateId}`); + } + + @Validate() + getConfig(@RequiredParam() dossierTemplateId: string): Observable> { + return this._getOne(['config', dossierTemplateId]).pipe(map(res => res.dossierAttributeConfigs)); + } + + @Validate() + getAttributes(@RequiredParam() dossierId: string): Observable> { + return this._getOne([dossierId]).pipe(map(res => res.dossierAttributeList)); } } diff --git a/libs/common-ui b/libs/common-ui index 5f13775ec..7ab565de6 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 5f13775ec92d519bc2d27d16bb1c156987c96c87 +Subproject commit 7ab565de6c1bf458c2399e945180e175dbeb5d6e diff --git a/libs/red-ui-http/src/lib/api.module.ts b/libs/red-ui-http/src/lib/api.module.ts index 39d87e01a..fe2fb53ce 100644 --- a/libs/red-ui-http/src/lib/api.module.ts +++ b/libs/red-ui-http/src/lib/api.module.ts @@ -1,7 +1,6 @@ import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core'; import { Configuration } from './configuration'; import { HttpClient } from '@angular/common/http'; -import { DossierAttributesControllerService } from './api/dossierAttributesController.service'; import { DownloadControllerService } from './api/downloadController.service'; import { FileManagementControllerService } from './api/fileManagementController.service'; import { GeneralSettingsControllerService } from './api/generalSettingsController.service'; @@ -27,7 +26,6 @@ import { StatusReportControllerService } from './api/statusReportController.serv declarations: [], exports: [], providers: [ - DossierAttributesControllerService, DownloadControllerService, FileManagementControllerService, GeneralSettingsControllerService, diff --git a/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts b/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts index a3ef99543..b9cbe72b5 100644 --- a/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts +++ b/libs/red-ui-http/src/lib/model/dossierAttributesConfig.ts @@ -10,7 +10,8 @@ * Do not edit the class manually. */ import { IDossierAttributeConfig } from './dossierAttributeConfig'; +import { List } from '../red-types'; export interface DossierAttributesConfig { - dossierAttributeConfigs?: Array; + dossierAttributeConfigs: List; }