From 8c4d78f3e23d131b0b425edcbb8bc6f2bd2846f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Tue, 13 Dec 2022 13:28:39 +0200 Subject: [PATCH] RED-3800: RSS editing --- .../rss-dialog/rss-dialog.component.html | 45 ++++++------ .../rss-dialog/rss-dialog.component.ts | 69 +++++++++++-------- .../src/app/services/files/rss.service.ts | 14 ++++ apps/red-ui/src/assets/i18n/redact/de.json | 6 +- apps/red-ui/src/assets/i18n/redact/en.json | 6 +- apps/red-ui/src/assets/i18n/scm/de.json | 6 +- apps/red-ui/src/assets/i18n/scm/en.json | 6 +- libs/common-ui | 2 +- 8 files changed, 99 insertions(+), 55 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.html b/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.html index cd30afbae..60ee41f38 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.html +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.html @@ -1,9 +1,9 @@
-
+

-
+
Component
Value
Transformation
@@ -12,27 +12,26 @@
{{ entry.key }}
-
- - -
+ + -
-
+ +
{{ entry.value.transformation }}
{{ entry.value.scmAnnotations | json }}
@@ -41,17 +40,17 @@
- - -
- +
diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.ts index 603c1ddd5..62a8119ab 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.ts @@ -1,9 +1,9 @@ -import { Component, Inject } from '@angular/core'; +import { Component, Inject, OnInit } from '@angular/core'; import { BaseDialogComponent, IconButtonTypes } from '@iqser/common-ui'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { RssService } from '@services/files/rss.service'; import { IFile, IRssEntry } from '@red/domain'; -import { firstValueFrom, Observable } from 'rxjs'; +import { BehaviorSubject, firstValueFrom } from 'rxjs'; import { map } from 'rxjs/operators'; import { FilesMapService } from '@services/files/files-map.service'; import { UserPreferenceService } from '@users/user-preference.service'; @@ -17,12 +17,10 @@ interface RssData { templateUrl: './rss-dialog.component.html', styleUrls: ['./rss-dialog.component.scss'], }) -export class RssDialogComponent extends BaseDialogComponent { +export class RssDialogComponent extends BaseDialogComponent implements OnInit { readonly iconButtonTypes = IconButtonTypes; - rssData$: Observable; - - originalOrder = (a: KeyValue, b: KeyValue): number => 0; + rssData$ = new BehaviorSubject(null); constructor( protected readonly _dialogRef: MatDialogRef, @@ -32,22 +30,14 @@ export class RssDialogComponent extends BaseDialogComponent { @Inject(MAT_DIALOG_DATA) readonly data: RssData, ) { super(_dialogRef); - this.rssData$ = this._rssService.getRSSData(this.data.file.dossierId, this.data.file.fileId).pipe( - map(entry => { - const mapped = {}; - for (const key of Object.keys(entry.result)) { - const newKey = key.replace(new RegExp('_', 'g'), ' '); - (entry.result[key]).originalKey = key; - mapped[newKey] = entry.result[key]; - } - return { - filaName: entry.filaName, - result: mapped, - }; - }), - ); } + async ngOnInit(): Promise { + await this.#loadData(); + } + + originalOrder = (a: KeyValue, b: KeyValue): number => 0; + exportJSON() { this._rssService.exportJSON(this.data.file.dossierId, this.data.file.fileId, this.data.file.filename).subscribe(); } @@ -68,14 +58,39 @@ export class RssDialogComponent extends BaseDialogComponent { this.exportJSON(); } - undo() { - console.log('Undo'); + async undo(entry: KeyValue) { + this._loadingService.start(); + await firstValueFrom(this._rssService.revertOverride(this.data.file.dossierId, this.data.file.fileId, [entry.value.originalKey])); + await this.#loadData(); } - saveEdit(event: string, originalKey: string) { - console.log(event, originalKey); - /** - * https://qa2.iqser.cloud/redaction-gateway-v1/swagger-ui/index.html#/rss-controller/revertOverrides - */ + async saveEdit(event: string, entry: KeyValue) { + this._loadingService.start(); + await firstValueFrom( + this._rssService.override(this.data.file.dossierId, this.data.file.fileId, { [entry.value.originalKey]: event }), + ); + await this.#loadData(); + } + + async #loadData(): Promise { + this._loadingService.start(); + const rssData = await firstValueFrom( + this._rssService.getRSSData(this.data.file.dossierId, this.data.file.fileId).pipe( + map(entry => { + const mapped = {}; + for (const key of Object.keys(entry.result)) { + const newKey = key.replace(new RegExp('_', 'g'), ' '); + (entry.result[key]).originalKey = key; + mapped[newKey] = entry.result[key]; + } + return { + filaName: entry.filaName, + result: mapped, + }; + }), + ), + ); + this.rssData$.next(rssData); + this._loadingService.stop(); } } diff --git a/apps/red-ui/src/app/services/files/rss.service.ts b/apps/red-ui/src/app/services/files/rss.service.ts index 1d4b14d5e..25f60ea1d 100644 --- a/apps/red-ui/src/app/services/files/rss.service.ts +++ b/apps/red-ui/src/app/services/files/rss.service.ts @@ -40,6 +40,20 @@ export class RssService extends GenericService { }); } + @Validate() + override( + @RequiredParam() dossierId: string, + @RequiredParam() fileId: string, + @RequiredParam() componentOverrides: Record, + ) { + return this._post({ componentOverrides }, `rss/override/${dossierId}/${fileId}`); + } + + @Validate() + revertOverride(@RequiredParam() dossierId: string, @RequiredParam() fileId: string, @RequiredParam() components: string[]) { + return this._post({ components }, `rss/override/revert/${dossierId}/${fileId}`); + } + exportJSON(dossierId: string, fileId: string, name: string) { return this.getRSSData(dossierId, fileId).pipe( tap(data => { diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 6fbb77a45..1045a6ad2 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -1953,9 +1953,13 @@ }, "rss-dialog": { "actions": { + "cancel-edit": "", "close": "", + "edit": "", "export-json": "", - "export-xml": "" + "export-xml": "", + "save": "", + "undo": "" }, "title": "" }, diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index c08cefd6c..4ba768210 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -1953,9 +1953,13 @@ }, "rss-dialog": { "actions": { + "cancel-edit": "Cancel", "close": "Close", + "edit": "Edit", "export-json": "Export JSON", - "export-xml": "Export XML" + "export-xml": "Export XML", + "save": "Save", + "undo": "Undo" }, "title": "Structured Component Management" }, diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 7cf98b4e0..2e29848a1 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -1953,9 +1953,13 @@ }, "rss-dialog": { "actions": { + "cancel-edit": "", "close": "", + "edit": "", "export-json": "", - "export-xml": "" + "export-xml": "", + "save": "", + "undo": "" }, "title": "" }, diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 097c86b11..e4c0f2681 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -1953,9 +1953,13 @@ }, "rss-dialog": { "actions": { + "cancel-edit": "Cancel", "close": "Close", + "edit": "Edit", "export-json": "Export JSON", - "export-xml": "Export XML" + "export-xml": "Export XML", + "save": "Save", + "undo": "Undo" }, "title": "Structured Component Management" }, diff --git a/libs/common-ui b/libs/common-ui index 5f9c754ab..b58f1ca2f 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 5f9c754abf0fb4fcc0606d811a66c5bbb88d164a +Subproject commit b58f1ca2fed8e8ddf2834c0fd15e48d00b6a1329