From df25dd75228428d57133edf57e10e117cbd38dec Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Thu, 16 Feb 2023 20:22:46 +0200 Subject: [PATCH] RED-5546: fix escaped html --- ...it-dossier-attribute-dialog.component.html | 9 +- ...edit-dossier-attribute-dialog.component.ts | 39 +++++---- ...d-edit-dossier-state-dialog.component.html | 9 +- ...add-edit-dossier-state-dialog.component.ts | 26 +++--- ...-edit-file-attribute-dialog.component.html | 9 +- ...dd-edit-file-attribute-dialog.component.ts | 29 ++++--- ...ossier-template-info-screen.component.html | 82 +++++++++---------- .../dossier-template-info-screen.component.ts | 24 +++--- .../license-screen.component.html | 10 +-- .../document-info.component.html | 32 ++++---- .../document-info/document-info.component.ts | 44 ++++++---- .../services/document-info.service.ts | 6 +- .../dossier-attributes.service.ts | 8 +- .../entity-services/dossier-states.service.ts | 9 +- 14 files changed, 168 insertions(+), 168 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.html index e46371ff1..c1faa54f3 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-attribute-dialog/add-edit-dossier-attribute-dialog.component.html @@ -1,12 +1,5 @@
-
+
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 2d9f34b3a..a2f77d6a8 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 @@ -8,19 +8,27 @@ import { DossierAttributesService } from '@services/entity-services/dossier-attr import { dossierAttributeTypesTranslations } from '@translations/dossier-attribute-types-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +export interface AddEditDossierAttributeDialogData { + readonly dossierAttribute: IDossierAttributeConfig; + dossierTemplateId: string; +} + @Component({ templateUrl: './add-edit-dossier-attribute-dialog.component.html', }) export class AddEditDossierAttributeDialogComponent extends BaseDialogComponent implements OnDestroy { - dossierAttribute: IDossierAttributeConfig = this.data.dossierAttribute; + readonly dossierAttribute = this.data.dossierAttribute; readonly translations = dossierAttributeTypesTranslations; readonly typeOptions = Object.keys(DossierAttributeConfigTypes); + readonly titleTranslateParams = { + name: this.data.dossierAttribute?.label, + type: this.data.dossierAttribute ? 'edit' : 'create', + }; constructor( private readonly _dossierAttributesService: DossierAttributesService, protected readonly _dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) - readonly data: { readonly dossierAttribute: IDossierAttributeConfig; dossierTemplateId: string }, + @Inject(MAT_DIALOG_DATA) readonly data: AddEditDossierAttributeDialogData, ) { super(_dialogRef, !!data.dossierAttribute); this.form = this._getForm(this.dossierAttribute); @@ -41,7 +49,7 @@ export class AddEditDossierAttributeDialogComponent extends BaseDialogComponent return false; } - save() { + async save() { this._loadingService.start(); const attribute: IDossierAttributeConfig = { @@ -50,22 +58,23 @@ export class AddEditDossierAttributeDialogComponent extends BaseDialogComponent ...this.form.getRawValue(), }; - this._dossierAttributesService.createOrUpdate(attribute, this.data.dossierTemplateId).subscribe( - () => { - this._dialogRef.close(true); - }, - (error: HttpErrorResponse) => { - this._loadingService.stop(); - this._toaster.error(_('add-edit-dossier-attribute.error.generic'), { error }); - }, - ); + const createOrUpdate = this._dossierAttributesService.createOrUpdate(attribute, this.data.dossierTemplateId); + const result = await createOrUpdate.catch((error: HttpErrorResponse) => { + this._loadingService.stop(); + this._toaster.error(_('add-edit-dossier-attribute.error.generic'), { error }); + return undefined; + }); + + if (result) { + this._dialogRef.close(true); + } } @HostListener('window:keydown.Enter', ['$event']) - onEnter(event: KeyboardEvent): void { + async onEnter(event: KeyboardEvent) { const node = (event.target as IqserEventTarget).localName; if (this.form.valid && this.changed && node !== 'textarea') { - this.save(); + await this.save(); } } diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.html index 8782def0a..e82b1ed37 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.html @@ -1,12 +1,5 @@
-
+
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.ts index 28cd3956d..280674e8f 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-state-dialog/add-edit-dossier-state-dialog.component.ts @@ -1,8 +1,7 @@ -import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; +import { Component, Inject } from '@angular/core'; import { BaseDialogComponent } from '@iqser/common-ui'; -import { UntypedFormGroup, Validators } from '@angular/forms'; +import { Validators } from '@angular/forms'; import { IDossierState } from '@red/domain'; -import { firstValueFrom } from 'rxjs'; import { DossierStatesService } from '@services/entity-services/dossier-states.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; @@ -13,12 +12,16 @@ interface DialogData { } @Component({ - selector: 'redaction-add-edit-dossier-state-dialog', templateUrl: './add-edit-dossier-state-dialog.component.html', styleUrls: ['./add-edit-dossier-state-dialog.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, }) export class AddEditDossierStateDialogComponent extends BaseDialogComponent { + readonly type = this.data.dossierState ? 'edit' : 'create'; + readonly titleTranslateParams = { + type: this.type, + name: this.data.dossierState?.name, + }; + constructor( private readonly _dossierStatesService: DossierStatesService, protected readonly _dialogRef: MatDialogRef, @@ -29,26 +32,25 @@ export class AddEditDossierStateDialogComponent extends BaseDialogComponent { this.initialFormValue = this.form.getRawValue(); } - get type(): 'edit' | 'create' { - return this.data.dossierState ? 'edit' : 'create'; - } - - async save(): Promise { + async save() { const dossierState: IDossierState = { dossierStatusId: this.data.dossierState?.dossierStatusId, dossierTemplateId: this.data.dossierTemplateId, ...this.form.getRawValue(), }; + this._loadingService.start(); + try { - await firstValueFrom(this._dossierStatesService.createOrUpdate(dossierState)); + await this._dossierStatesService.createOrUpdate(dossierState); this._toaster.success(_('add-edit-dossier-state.success'), { params: { type: this.type } }); this._dialogRef.close(); } catch (e) {} + this._loadingService.stop(); } - #getForm(): UntypedFormGroup { + #getForm() { return this._formBuilder.group({ name: [this.data.dossierState?.name, Validators.required], color: [this.data.dossierState?.color, Validators.required], diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html index 40ae3c162..32dff42fb 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html @@ -1,12 +1,5 @@
-
+
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts index 0400e67c0..4c83ffc7c 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts @@ -1,34 +1,37 @@ -import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; -import { UntypedFormGroup, Validators } from '@angular/forms'; +import { Component, Inject } from '@angular/core'; +import { Validators } from '@angular/forms'; import { FileAttributeConfigTypes, IFileAttributeConfig } from '@red/domain'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { fileAttributeTypesTranslations } from '@translations/file-attribute-types-translations'; import { BaseDialogComponent } from '@iqser/common-ui'; +export interface AddEditFileAttributeDialogData { + readonly fileAttribute: IFileAttributeConfig; + readonly dossierTemplateId: string; + readonly numberOfDisplayedAttrs: number; + readonly numberOfFilterableAttrs: number; +} + @Component({ - selector: 'redaction-add-edit-file-attribute-dialog', templateUrl: './add-edit-file-attribute-dialog.component.html', styleUrls: ['./add-edit-file-attribute-dialog.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, }) export class AddEditFileAttributeDialogComponent extends BaseDialogComponent { readonly DISPLAYED_FILTERABLE_LIMIT = 3; readonly translations = fileAttributeTypesTranslations; - fileAttribute: IFileAttributeConfig = this.data.fileAttribute; + readonly fileAttribute = this.data.fileAttribute; readonly dossierTemplateId: string = this.data.dossierTemplateId; readonly typeOptions = Object.keys(FileAttributeConfigTypes); readonly canSetDisplayed!: boolean; readonly canSetFilterable!: boolean; + readonly titleTranslateParams = { + type: this.data.fileAttribute ? 'edit' : 'create', + name: this.data.fileAttribute?.label, + }; constructor( protected readonly _dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) - readonly data: { - fileAttribute: IFileAttributeConfig; - dossierTemplateId: string; - numberOfDisplayedAttrs: number; - numberOfFilterableAttrs: number; - }, + @Inject(MAT_DIALOG_DATA) readonly data: AddEditFileAttributeDialogData, ) { super(_dialogRef, !!data.fileAttribute); this.canSetDisplayed = data.numberOfDisplayedAttrs < this.DISPLAYED_FILTERABLE_LIMIT || data.fileAttribute?.displayedInFileList; @@ -46,7 +49,7 @@ export class AddEditFileAttributeDialogComponent extends BaseDialogComponent { this._dialogRef.close(fileAttribute); } - private _getForm(fileAttribute: IFileAttributeConfig): UntypedFormGroup { + private _getForm(fileAttribute: IFileAttributeConfig) { return this._formBuilder.group({ label: [fileAttribute?.label, Validators.required], csvColumnHeader: [fileAttribute?.csvColumnHeader], diff --git a/apps/red-ui/src/app/modules/admin/screens/info/info-screen/dossier-template-info-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/info/info-screen/dossier-template-info-screen.component.html index 64645122f..0b6e312b6 100644 --- a/apps/red-ui/src/app/modules/admin/screens/info/info-screen/dossier-template-info-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/info/info-screen/dossier-template-info-screen.component.html @@ -1,48 +1,46 @@ -
- -
{{ dossierTemplate.name }}
+
+
{{ ctx.dossierTemplate.name }}
-
+
- + -
-
- - {{ translations[dossierTemplate.dossierTemplateStatus] | translate }} -
- -
- - {{ 'dossier-template-info-screen.entities' | translate : { count: stats.numberOfDictionaries } }} -
- -
- - {{ 'dossier-template-info-screen.valid-from' | translate : { date: dossierTemplate.validFrom | date : 'd MMM yyyy' } }} -
- -
- - {{ 'dossier-template-info-screen.created-on' | translate : { date: dossierTemplate.dateAdded | date : 'd MMM yyyy' } }} -
- -
- - {{ 'dossier-template-info-screen.entries' | translate : { count: stats.numberOfEntries } }} -
- -
- - {{ 'dossier-template-info-screen.valid-to' | translate : { date: dossierTemplate.validTo | date : 'd MMM yyyy' } }} -
- -
- - {{ 'dossier-template-info-screen.modified-on' | translate : { date: dossierTemplate.dateModified | date : 'd MMM yyyy' } }} -
+
+
+ + {{ translations[ctx.dossierTemplate.dossierTemplateStatus] | translate }}
-
{{ dossierTemplate.description }}
- +
+ + {{ 'dossier-template-info-screen.entities' | translate : { count: ctx.stats.numberOfDictionaries } }} +
+ +
+ + +
+ +
+ + +
+ +
+ + {{ 'dossier-template-info-screen.entries' | translate : { count: ctx.stats.numberOfEntries } }} +
+ +
+ + +
+ +
+ + +
+
+ +
{{ ctx.dossierTemplate.description }}
diff --git a/apps/red-ui/src/app/modules/admin/screens/info/info-screen/dossier-template-info-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/info/info-screen/dossier-template-info-screen.component.ts index 96c20a237..e6d940119 100644 --- a/apps/red-ui/src/app/modules/admin/screens/info/info-screen/dossier-template-info-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/info/info-screen/dossier-template-info-screen.component.ts @@ -1,24 +1,28 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { Component } from '@angular/core'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; -import { Observable } from 'rxjs'; -import { DOSSIER_TEMPLATE_ID, DossierTemplate, DossierTemplateStats } from '@red/domain'; +import { DOSSIER_TEMPLATE_ID, type DossierTemplate, type DossierTemplateStats } from '@red/domain'; import { DossierTemplateStatsService } from '@services/entity-services/dossier-template-stats.service'; import { dossierTemplateStatusTranslations } from '@translations/dossier-template-status-translations'; -import { getParam } from '@iqser/common-ui'; +import { ContextComponent, getParam } from '@iqser/common-ui'; + +interface Context { + readonly dossierTemplate: DossierTemplate; + readonly stats: DossierTemplateStats; +} @Component({ templateUrl: './dossier-template-info-screen.component.html', styleUrls: ['./dossier-template-info-screen.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, }) -export class DossierTemplateInfoScreenComponent { - readonly dossierTemplate$: Observable; - readonly dossierTemplateStats$: Observable; +export class DossierTemplateInfoScreenComponent extends ContextComponent { readonly translations = dossierTemplateStatusTranslations; constructor(dossierTemplatesService: DossierTemplatesService, dossierTemplateStatsService: DossierTemplateStatsService) { + super(); const dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID); - this.dossierTemplate$ = dossierTemplatesService.getEntityChanged$(dossierTemplateId); - this.dossierTemplateStats$ = dossierTemplateStatsService.watch$(dossierTemplateId); + super._initContext({ + dossierTemplate: dossierTemplatesService.getEntityChanged$(dossierTemplateId), + stats: dossierTemplateStatsService.watch$(dossierTemplateId), + }); } } diff --git a/apps/red-ui/src/app/modules/admin/screens/license/license-screen/license-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/license/license-screen/license-screen.component.html index 0b826c1ff..9c242f49f 100644 --- a/apps/red-ui/src/app/modules/admin/screens/license/license-screen/license-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/license/license-screen/license-screen.component.html @@ -74,12 +74,10 @@
-
- {{ - 'license-info-screen.total-analyzed' - | translate : { date: licenseService.totalInfo.startDate | date : 'longDate' } - }} -
+
{{ licenseService.totalInfo.numberOfAnalyzedPages }}
diff --git a/apps/red-ui/src/app/modules/file-preview/components/document-info/document-info.component.html b/apps/red-ui/src/app/modules/file-preview/components/document-info/document-info.component.html index 1ee025f26..f2b0ba398 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/document-info/document-info.component.html +++ b/apps/red-ui/src/app/modules/file-preview/components/document-info/document-info.component.html @@ -1,9 +1,9 @@ - +
-
+
-
+
{{ attr.label }}:
{{ attr.value ? (isDate(attr) ? (attr.value | date : 'd MMM yyyy') : attr.value) : '-' }}
-
+
- {{ 'file-preview.tabs.document-info.details.dossier' | translate : { dossierName: dossier.dossierName } }} +
- {{ 'file-preview.tabs.document-info.details.pages' | translate : { pages: file.numberOfPages } }} + {{ 'file-preview.tabs.document-info.details.pages' | translate : { pages: ctx.file.numberOfPages } }}
-
+
- {{ - 'file-preview.tabs.document-info.details.created-on' | translate : { date: file.added | date : 'mediumDate' } - }} +
-
+
- {{ - 'file-preview.tabs.document-info.details.due' | translate : { date: dossier.dueDate | date : 'mediumDate' } - }} +
- {{ dossierTemplateName$ | async }} + {{ ctx.dossierTemplateName }}
diff --git a/apps/red-ui/src/app/modules/file-preview/components/document-info/document-info.component.ts b/apps/red-ui/src/app/modules/file-preview/components/document-info/document-info.component.ts index 3d3039c81..9ff04473f 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/document-info/document-info.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/document-info/document-info.component.ts @@ -1,13 +1,14 @@ import { Component } from '@angular/core'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; import { DocumentInfoService } from '../../services/document-info.service'; -import { combineLatest, Observable, switchMap } from 'rxjs'; +import { combineLatest, switchMap } from 'rxjs'; import { PermissionsService } from '@services/permissions.service'; import { FilePreviewStateService } from '../../services/file-preview-state.service'; import { map } from 'rxjs/operators'; -import { File, FileAttributeConfigType, FileAttributeConfigTypes } from '@red/domain'; +import { type Dossier, type File, type FileAttributeConfigType, FileAttributeConfigTypes } from '@red/domain'; import { FilePreviewDialogService } from '../../services/file-preview-dialog.service'; import { FileAttributesService } from '@services/entity-services/file-attributes.service'; +import { ContextComponent } from '@iqser/common-ui'; interface FileAttribute { label: string; @@ -15,34 +16,43 @@ interface FileAttribute { type: FileAttributeConfigType; } +interface Context { + readonly file: File; + readonly dossier: Dossier; + readonly dossierTemplateName: string; + readonly fileAttributes: FileAttribute[]; +} + @Component({ selector: 'redaction-document-info', templateUrl: './document-info.component.html', styleUrls: ['./document-info.component.scss'], }) -export class DocumentInfoComponent { - readonly fileAttributes$: Observable; - readonly dossierTemplateName$: Observable; - +export class DocumentInfoComponent extends ContextComponent { constructor( - private readonly _dossierTemplatesService: DossierTemplatesService, - private readonly _dialogService: FilePreviewDialogService, - private readonly _fileAttributesService: FileAttributesService, - readonly stateService: FilePreviewStateService, + state: FilePreviewStateService, + fileAttributesService: FileAttributesService, readonly permissionsService: PermissionsService, readonly documentInfoService: DocumentInfoService, + private readonly _dialogService: FilePreviewDialogService, + private readonly _dossierTemplatesService: DossierTemplatesService, ) { - this.fileAttributes$ = combineLatest([ - this.stateService.file$, - this.stateService.dossier$, - this._fileAttributesService.fileAttributesConfig$, - ]).pipe( - switchMap(([file, dossier]) => this.documentInfoService.fileAttributes$(file.fileId, dossier.id, dossier.dossierTemplateId)), + super(); + const fileAttributes$ = combineLatest([state.file$, state.dossier$, fileAttributesService.fileAttributesConfig$]).pipe( + switchMap(([file, dossier]) => this.documentInfoService.fileAttributes$(file.id, dossier.id, dossier.dossierTemplateId)), ); - this.dossierTemplateName$ = this.stateService.dossier$.pipe( + + const dossierTemplateName$ = state.dossier$.pipe( switchMap(dossier => this._dossierTemplatesService.getEntityChanged$(dossier.dossierTemplateId)), map(dossierTemplate => dossierTemplate.name), ); + + super._initContext({ + file: state.file$, + dossier: state.dossier$, + dossierTemplateName: dossierTemplateName$, + fileAttributes: fileAttributes$, + }); } edit(file: File) { diff --git a/apps/red-ui/src/app/modules/file-preview/services/document-info.service.ts b/apps/red-ui/src/app/modules/file-preview/services/document-info.service.ts index f8ba9fa2e..25da199ff 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/document-info.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/document-info.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject, merge, Observable } from 'rxjs'; import { shareLast } from '@iqser/common-ui'; -import { filter, map, startWith, tap, withLatestFrom } from 'rxjs/operators'; +import { map, startWith, tap, withLatestFrom } from 'rxjs/operators'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; import { FileAttributesService } from '@services/entity-services/file-attributes.service'; import { FilesMapService } from '@services/files/files-map.service'; @@ -39,9 +39,7 @@ export class DocumentInfoService { fileAttributes$(fileId: string, dossierId: string, dossierTemplateId: string) { const getAttributes = () => this._fileAttributesService.getFileAttributeConfig(dossierTemplateId).fileAttributeConfigs; - const dossierTemplateChange$ = this._dossierTemplatesService - .getEntityChanged$(dossierTemplateId) - .pipe(filter(template => template.dossierTemplateId === dossierTemplateId)); + const dossierTemplateChange$ = this._dossierTemplatesService.getEntityChanged$(dossierTemplateId); const fileChange$ = this._filesMapService.watch$(dossierId, fileId); return merge(dossierTemplateChange$, fileChange$).pipe( map(getAttributes), diff --git a/apps/red-ui/src/app/services/entity-services/dossier-attributes.service.ts b/apps/red-ui/src/app/services/entity-services/dossier-attributes.service.ts index ade9d9771..14504ea28 100644 --- a/apps/red-ui/src/app/services/entity-services/dossier-attributes.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dossier-attributes.service.ts @@ -44,11 +44,9 @@ export class DossierAttributesService extends EntitiesService { - return this._post(attributeConfig, `${this._defaultModelPath}/config/${dossierTemplateId}`); + createOrUpdate(@RequiredParam() attributeConfig: IDossierAttributeConfig, dossierTemplateId: string) { + const url = `${this._defaultModelPath}/config/${dossierTemplateId}`; + return firstValueFrom(this._post(attributeConfig, url)); } @Validate() diff --git a/apps/red-ui/src/app/services/entity-services/dossier-states.service.ts b/apps/red-ui/src/app/services/entity-services/dossier-states.service.ts index 55c6636ba..ac986008d 100644 --- a/apps/red-ui/src/app/services/entity-services/dossier-states.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dossier-states.service.ts @@ -1,7 +1,7 @@ import { inject, Injectable } from '@angular/core'; import { EntitiesService, mapEach, RequiredParam, Toaster, Validate } from '@iqser/common-ui'; import { DossierState, IDossierState } from '@red/domain'; -import { EMPTY, forkJoin, Observable, switchMap } from 'rxjs'; +import { EMPTY, firstValueFrom, forkJoin, Observable, switchMap } from 'rxjs'; import { DossierTemplatesService } from '../dossier-templates/dossier-templates.service'; import { catchError, defaultIfEmpty, tap } from 'rxjs/operators'; import { DossierStatesMapService } from '../entity-services/dossier-states-map.service'; @@ -23,15 +23,18 @@ export class DossierStatesService extends EntitiesService { + async createOrUpdate(@RequiredParam() state: IDossierState) { const showToast = (error: HttpErrorResponse) => { this.#toaster.error(error.status === HttpStatusCode.Conflict ? CONFLICT_MSG : GENERIC_MSG); return EMPTY; }; - return this._post(state, this._defaultModelPath).pipe( + + const request = this._post(state, this._defaultModelPath).pipe( catchError(showToast), switchMap(() => this.loadAllForTemplate(state.dossierTemplateId)), ); + + return firstValueFrom(request); } @Validate()