update dossier attributes service

This commit is contained in:
Dan Percic 2021-10-06 19:54:29 +03:00
parent f598bad151
commit 0ca1c3b536
8 changed files with 57 additions and 43 deletions

View File

@ -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);
},

View File

@ -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<Do
this._dialogService.openDialog('confirm', $event, null, async () => {
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<Do
openAddEditAttributeDialog($event: MouseEvent, dossierAttribute?: IDossierAttributeConfig) {
const dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId;
this._dialogService.openDialog(
'addEditDossierAttribute',
$event,
{ dossierAttribute, dossierTemplateId },
async () => 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();
}
}

View File

@ -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));
}

View File

@ -165,7 +165,7 @@ export class DossierOverviewScreenComponent extends ListingComponent<File> 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 {

View File

@ -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<DossierAttributeConfig, IDossierAttributeConfig> {
constructor(private readonly _dossierTemplatesService: DossierTemplatesService, protected readonly _injector: Injector) {
super(_injector, DossierAttributeConfig, 'dossier-attributes');
}
async getValues(dossier: Dossier): Promise<DossierAttributeWithValue[]> {
const attributes = await this._dossierAttributesControllerService.getDossierAttributes(dossier.id).toPromise();
const attributesConfig = await this._dossierAttributesControllerService
.getDossierAttributesConfig(dossier.dossierTemplateId)
.toPromise();
async getWithValues(dossier: Dossier): Promise<DossierAttributeWithValue[]> {
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<DossierAttributes> {
return this._dossierAttributesControllerService.setDossierAttributes({ dossierAttributeList }, dossier.id).toPromise();
@Validate()
setAttributes(
@RequiredParam() dossier: Dossier,
@RequiredParam() dossierAttributeList: List<DossierAttribute>,
): Observable<DossierAttributes> {
return this._post({ dossierAttributeList }, `${this._defaultModelPath}/set/${dossier.id}`);
}
deleteConfigs(ids: string[], dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId): Promise<void> {
return this._dossierAttributesControllerService.deleteDossierAttributesConfig(ids, dossierTemplateId).toPromise();
@Validate()
delete(@RequiredParam() ids: List, dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId): Observable<unknown> {
return this._post(ids, `${this._defaultModelPath}/config/delete/${dossierTemplateId}`);
}
async getConfig(dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId): Promise<DossierAttributeConfig[]> {
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<DossierAttributeConfig[]> {
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<IDossierAttributeConfig> {
return this._dossierAttributesControllerService.addOrUpdateDossierAttributesConfig(attribute, dossierTemplateId);
return this._post(attributeConfig, `${this._defaultModelPath}/config/${dossierTemplateId}`);
}
@Validate()
getConfig(@RequiredParam() dossierTemplateId: string): Observable<List<IDossierAttributeConfig>> {
return this._getOne<DossierAttributesConfig>(['config', dossierTemplateId]).pipe(map(res => res.dossierAttributeConfigs));
}
@Validate()
getAttributes(@RequiredParam() dossierId: string): Observable<List<DossierAttribute>> {
return this._getOne<DossierAttributes>([dossierId]).pipe(map(res => res.dossierAttributeList));
}
}

@ -1 +1 @@
Subproject commit 5f13775ec92d519bc2d27d16bb1c156987c96c87
Subproject commit 7ab565de6c1bf458c2399e945180e175dbeb5d6e

View File

@ -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,

View File

@ -10,7 +10,8 @@
* Do not edit the class manually.
*/
import { IDossierAttributeConfig } from './dossierAttributeConfig';
import { List } from '../red-types';
export interface DossierAttributesConfig {
dossierAttributeConfigs?: Array<IDossierAttributeConfig>;
dossierAttributeConfigs: List<IDossierAttributeConfig>;
}