From d3f293f622387c464d2094596e6e82678fadaf74 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Wed, 29 May 2024 20:16:23 +0300 Subject: [PATCH 01/14] RED-9201 - UI for Component Mapping Tables --- .../app/modules/admin/admin-routing.module.ts | 9 + .../src/app/modules/admin/admin.module.ts | 2 + .../component-mappings-screen.component.html | 91 ++++++++++ .../component-mappings-screen.component.ts | 47 +++++ .../admin-side-nav.component.ts | 5 + .../component-mappings.service.ts | 52 ++++++ apps/red-ui/src/app/users/roles.ts | 4 + apps/red-ui/src/assets/i18n/redact/de.json | 167 ++++++++++-------- apps/red-ui/src/assets/i18n/redact/en.json | 21 ++- apps/red-ui/src/assets/i18n/scm/de.json | 167 ++++++++++-------- apps/red-ui/src/assets/i18n/scm/en.json | 21 ++- libs/red-domain/src/index.ts | 1 + .../component-mapping.model.ts | 18 ++ .../component-mappings/component-mapping.ts | 5 + .../src/lib/component-mappings/index.ts | 2 + 15 files changed, 462 insertions(+), 150 deletions(-) create mode 100644 apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.html create mode 100644 apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts create mode 100644 apps/red-ui/src/app/services/entity-services/component-mappings.service.ts create mode 100644 libs/red-domain/src/lib/component-mappings/component-mapping.model.ts create mode 100644 libs/red-domain/src/lib/component-mappings/component-mapping.ts create mode 100644 libs/red-domain/src/lib/component-mappings/index.ts diff --git a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts index 252f8806d..3d4098c35 100644 --- a/apps/red-ui/src/app/modules/admin/admin-routing.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin-routing.module.ts @@ -19,6 +19,7 @@ import { BaseEntityScreenComponent } from './base-entity-screen/base-entity-scre import { PermissionsGuard } from '@guards/permissions-guard'; import { Roles } from '@users/roles'; import { IqserAuthGuard } from '@iqser/common-ui/lib/users'; +import { ComponentMappingsScreenComponent } from './screens/component-mappings/component-mappings-screen.component'; const dossierTemplateIdRoutes: IqserRoutes = [ { @@ -76,6 +77,14 @@ const dossierTemplateIdRoutes: IqserRoutes = [ }, loadChildren: () => import('./screens/rules/rules.module').then(m => m.RulesModule), }, + { + path: 'component-mappings', + component: ComponentMappingsScreenComponent, + canActivate: [CompositeRouteGuard], + data: { + routeGuards: [IqserAuthGuard, RedRoleGuard], + }, + }, { path: 'file-attributes', component: BaseDossierTemplateScreenComponent, diff --git a/apps/red-ui/src/app/modules/admin/admin.module.ts b/apps/red-ui/src/app/modules/admin/admin.module.ts index f34a45611..f41dbc11b 100644 --- a/apps/red-ui/src/app/modules/admin/admin.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin.module.ts @@ -57,6 +57,7 @@ import { IqserUsersModule } from '@iqser/common-ui/lib/users'; import { SelectComponent } from '@shared/components/select/select.component'; import { PaginationComponent } from '@common-ui/pagination/pagination.component'; import { AddCloneDossierTemplateDialogComponent } from './dialogs/add-clone-dossier-template-dialog/add-clone-dossier-template-dialog.component'; +import { ComponentMappingsScreenComponent } from './screens/component-mappings/component-mappings-screen.component'; const dialogs = [ AddCloneDossierTemplateDialogComponent, @@ -76,6 +77,7 @@ const screens = [ DigitalSignatureScreenComponent, UserListingScreenComponent, GeneralConfigScreenComponent, + ComponentMappingsScreenComponent, ]; const components = [ diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.html new file mode 100644 index 000000000..863ea0597 --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.html @@ -0,0 +1,91 @@ +
+ + +
+
+ + + +
+ + +
+
+
+ + +
+ +
+ +
+
+
+ + + + + + + + +
+
+ {{ entity.name }} +
+ +
+ {{ entity.value }} +
+ +
+
+ + + +
+
+
+
diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts new file mode 100644 index 000000000..510462288 --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts @@ -0,0 +1,47 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { ListingComponent, TableColumnConfig, listingProvidersFactory, LoadingService, IconButtonTypes } from '@iqser/common-ui'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { defaultColorsTranslations } from '@translations/default-colors-translations'; +import { Roles } from '@users/roles'; +import { getCurrentUser } from '@common-ui/users'; +import { User } from '@red/domain'; +import { ComponentMapping } from '@red/domain'; +import { combineLatest } from 'rxjs'; +import { ComponentMappingsService } from '@services/entity-services/component-mappings.service'; +import { tap } from 'rxjs/operators'; + +@Component({ + templateUrl: './component-mappings-screen.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + providers: listingProvidersFactory(ComponentMappingsScreenComponent), +}) +export class ComponentMappingsScreenComponent extends ListingComponent implements OnInit { + tableColumnConfigs: readonly TableColumnConfig[] = [ + { label: _('component-mappings-screen.table-col-names.name'), sortByKey: 'searchKey' }, + { label: _('component-mappings-screen.table-col-names.version'), width: '2fr' }, + ]; + readonly tableHeaderLabel = _('component-mappings-screen.table-header.title'); + readonly context$; + protected readonly currentUser = getCurrentUser(); + protected readonly translations = defaultColorsTranslations; + protected readonly roles = Roles; + protected readonly iconButtonTypes = IconButtonTypes; + + constructor( + private readonly _loadingService: LoadingService, + private readonly _componentMappingService: ComponentMappingsService, + ) { + super(); + this.context$ = combineLatest([this._componentMappingService.loadData()]).pipe( + tap(([mappings]) => this.entitiesService.setEntities(mappings)), + ); + } + + ngOnInit() { + this._loadingService.stop(); + } + + openAddEditComponentMappingDialog(entity?: ComponentMapping) {} + + openDeleteComponentMappingDialog(entity?: ComponentMapping) {} +} diff --git a/apps/red-ui/src/app/modules/admin/shared/components/admin-side-nav/admin-side-nav.component.ts b/apps/red-ui/src/app/modules/admin/shared/components/admin-side-nav/admin-side-nav.component.ts index 1d9d63c4a..83620ad86 100644 --- a/apps/red-ui/src/app/modules/admin/shared/components/admin-side-nav/admin-side-nav.component.ts +++ b/apps/red-ui/src/app/modules/admin/shared/components/admin-side-nav/admin-side-nav.component.ts @@ -106,6 +106,11 @@ export class AdminSideNavComponent implements OnInit { (this.isIqserDevMode || this.canAccessRulesInDocumine) && this._permissionsService.has(Roles.rules.read), }, + { + screen: 'component-mappings', + label: _('admin-side-nav.component-mappings'), + show: this.isDocumine, + }, { screen: 'default-colors', label: _('admin-side-nav.default-colors'), diff --git a/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts b/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts new file mode 100644 index 000000000..384af91bc --- /dev/null +++ b/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts @@ -0,0 +1,52 @@ +import { Injectable } from '@angular/core'; +import { EntitiesService } from '@iqser/common-ui'; +import { ComponentMapping, IComponentMapping } from '@red/domain'; +import { Observable, of } from 'rxjs'; + +const DATA = [ + { + id: '1', + name: 'OECD Number', + version: 2, + searchKey: 'OECD Number', + }, + { + id: '2', + name: 'Study Title', + version: 1, + searchKey: 'Study Title', + }, + { + id: '3', + name: 'Report Number', + version: 2, + searchKey: 'Report Number', + }, + { + id: '4', + name: 'GLP Study', + version: 5, + searchKey: 'GLP Study', + }, + { + id: '5', + name: 'Performing Laboratory', + version: 2, + searchKey: 'Performing Laboratory', + }, + { + id: '6', + name: 'Test', + version: 3, + searchKey: 'Test', + }, +]; + +@Injectable({ + providedIn: 'root', +}) +export class ComponentMappingsService extends EntitiesService { + loadData(): Observable { + return of(DATA); + } +} diff --git a/apps/red-ui/src/app/users/roles.ts b/apps/red-ui/src/app/users/roles.ts index 2ae41147f..dc7ee3b70 100644 --- a/apps/red-ui/src/app/users/roles.ts +++ b/apps/red-ui/src/app/users/roles.ts @@ -21,6 +21,10 @@ export const Roles = { read: 'red-read-rules', write: 'red-write-rules', }, + componentMappings: { + read: 'red-read-rules', + write: 'red-write-rules', + }, redactions: { write: 'red-add-redaction', readManual: 'red-read-manual-redactions', diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 67efc99c7..f0e9c8432 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -231,6 +231,7 @@ }, "admin-side-nav": { "audit": "Audit", + "component-mappings": "", "component-rule-editor": "", "configurations": "Configurations", "default-colors": "Default colors", @@ -254,9 +255,6 @@ "watermarks": "Watermarks" }, "analysis-disabled": "", - "annotation": { - "pending": "(Pending analysis)" - }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -311,14 +309,14 @@ "error": "Rekategorisierung des Bildes gescheitert: {error}", "success": "Bild wurde einer neuen Kategorie zugeordnet." }, - "remove": { - "error": "Fehler beim Entfernen der Schwärzung: {error}", - "success": "Schwärzung entfernt!" - }, "remove-hint": { "error": "Failed to remove hint: {error}", "success": "Hint removed" }, + "remove": { + "error": "Fehler beim Entfernen der Schwärzung: {error}", + "success": "Schwärzung entfernt!" + }, "undo": { "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "success": "erfolgreich Rückgängig gemacht" @@ -331,15 +329,15 @@ "remove-highlights": { "label": "Remove selected earmarks" }, - "resize": { - "label": "Größe ändern" - }, "resize-accept": { "label": "Größe speichern" }, "resize-cancel": { "label": "Größenänderung abbrechen" }, + "resize": { + "label": "Größe ändern" + }, "see-references": { "label": "See references" }, @@ -371,6 +369,9 @@ "skipped": "Übersprungen", "text-highlight": "Earmark" }, + "annotation": { + "pending": "(Pending analysis)" + }, "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -516,6 +517,24 @@ }, "title": "Component view" }, + "component-mappings-screen": { + "action": { + "delete": "", + "edit": "" + }, + "add-new": "", + "bulk-actions": { + "delete": "" + }, + "search": "", + "table-col-names": { + "name": "", + "version": "" + }, + "table-header": { + "title": "" + } + }, "component-rules-screen": { "error": { "generic": "" @@ -576,18 +595,14 @@ "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" }, "confirmation-dialog": { - "approve-file": { - "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", - "title": "Warnung!" - }, "approve-file-without-analysis": { "confirmationText": "Approve without analysis", "denyText": "Cancel", "question": "Analysis required to detect new redactions.", "title": "Warning!" }, - "approve-multiple-files": { - "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "approve-file": { + "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", "title": "Warnung!" }, "approve-multiple-files-without-analysis": { @@ -596,6 +611,10 @@ "question": "Analysis required to detect new redactions for at least one file.", "title": "Warning" }, + "approve-multiple-files": { + "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "title": "Warnung!" + }, "assign-file-to-me": { "question": { "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", @@ -959,13 +978,13 @@ "recent": "Neu ({hours} h)", "unassigned": "Niemandem zugewiesen" }, - "reanalyse": { - "action": "Datei analysieren" - }, "reanalyse-dossier": { "error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.", "success": "Dateien für Reanalyse vorgesehen." }, + "reanalyse": { + "action": "Datei analysieren" + }, "start-auto-analysis": "Enable auto-analysis", "stop-auto-analysis": "Stop auto-analysis", "table-col-names": { @@ -1035,14 +1054,6 @@ "total-documents": "Anzahl der Dokumente", "total-people": "{count} {count, plural, one{user} other {users}}" }, - "dossier-templates": { - "label": "Dossier-Vorlagen", - "status": { - "active": "Active", - "inactive": "Inactive", - "incomplete": "Incomplete" - } - }, "dossier-templates-listing": { "action": { "clone": "Clone template", @@ -1078,6 +1089,14 @@ "title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}" } }, + "dossier-templates": { + "label": "Dossier-Vorlagen", + "status": { + "active": "Active", + "inactive": "Inactive", + "incomplete": "Incomplete" + } + }, "dossier-watermark-selector": { "heading": "Watermarks on documents", "no-watermark": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", @@ -1273,15 +1292,6 @@ "title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}" } }, - "entity": { - "info": { - "actions": { - "revert": "Revert", - "save": "Save changes" - }, - "heading": "Edit entity" - } - }, "entity-rules-screen": { "error": { "generic": "An error ocurred... Entity rules update failed!" @@ -1296,19 +1306,28 @@ "warning-text": "Warning: experimental feature!", "warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules" }, + "entity": { + "info": { + "actions": { + "revert": "Revert", + "save": "Save changes" + }, + "heading": "Edit entity" + } + }, "error": { "deleted-entity": { "dossier": { "action": "Zurück zur Übersicht", "label": "Dieses Dossier wurde gelöscht!" }, - "file": { - "action": "Zurück zum Dossier", - "label": "Diese Datei wurde gelöscht!" - }, "file-dossier": { "action": "Zurück zur Übersicht", "label": "Das Dossier dieser Datei wurde gelöscht!" + }, + "file": { + "action": "Zurück zum Dossier", + "label": "Diese Datei wurde gelöscht!" } }, "file-preview": { @@ -1326,12 +1345,6 @@ }, "exact-date": "{day} {month} {year} um {hour}:{minute} Uhr", "file": "Datei", - "file-attribute": { - "update": { - "error": "Failed to update file attribute value!", - "success": "File attribute value has been updated successfully!" - } - }, "file-attribute-encoding-types": { "ascii": "ASCII", "iso": "ISO-8859-1", @@ -1342,6 +1355,12 @@ "number": "Nummer", "text": "Freier Text" }, + "file-attribute": { + "update": { + "error": "Failed to update file attribute value!", + "success": "File attribute value has been updated successfully!" + } + }, "file-attributes-configurations": { "cancel": "Cancel", "form": { @@ -1560,15 +1579,6 @@ "csv": "File attributes were imported successfully from uploaded CSV file." } }, - "filter": { - "analysis": "Analyse erforderlich", - "comment": "Kommentare", - "hint": "Nut Hinweise", - "image": "Bilder", - "none": "Keine Anmerkungen", - "redaction": "Geschwärzt", - "updated": "Aktualisiert" - }, "filter-menu": { "filter-options": "Filteroptionen", "filter-types": "Filter", @@ -1578,6 +1588,15 @@ "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", "with-comments": "Nur Anmerkungen mit Kommentaren" }, + "filter": { + "analysis": "Analyse erforderlich", + "comment": "Kommentare", + "hint": "Nut Hinweise", + "image": "Bilder", + "none": "Keine Anmerkungen", + "redaction": "Geschwärzt", + "updated": "Aktualisiert" + }, "filters": { "assigned-people": "Beauftragt", "documents-status": "Documents state", @@ -1850,13 +1869,6 @@ "user-promoted-to-approver": "{user} wurde im Dossier {dossierHref, select, null{{dossierName}} other{{dossierName}}} zum Genehmiger ernannt!", "user-removed-as-dossier-member": "{user} wurde als Mitglied von: {dossierHref, select, null{{dossierName}} other{{dossierName}}} entfernt!" }, - "notifications": { - "button-text": "Notifications", - "deleted-dossier": "Deleted dossier", - "label": "Benachrichtigungen", - "mark-all-as-read": "Alle als gelesen markieren", - "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" - }, "notifications-screen": { "category": { "email-notifications": "E-Mail Benachrichtigungen", @@ -1870,6 +1882,7 @@ "dossier": "Dossierbezogene Benachrichtigungen", "other": "Andere Benachrichtigungen" }, + "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "options": { "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin", @@ -1887,7 +1900,6 @@ "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" }, - "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "schedule": { "daily": "Tägliche Zusammenfassung", "instant": "Sofortig", @@ -1895,6 +1907,13 @@ }, "title": "Benachrichtigungseinstellungen" }, + "notifications": { + "button-text": "Notifications", + "deleted-dossier": "Deleted dossier", + "label": "Benachrichtigungen", + "mark-all-as-read": "Alle als gelesen markieren", + "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" + }, "ocr": { "confirmation-dialog": { "cancel": "Cancel", @@ -1986,16 +2005,16 @@ "warnings-label": "Prompts and dialogs", "warnings-subtitle": "Do not show again options" }, - "processing": { - "basic": "Processing", - "ocr": "OCR" - }, "processing-status": { "ocr": "OCR", "pending": "Pending", "processed": "processed", "processing": "Processing" }, + "processing": { + "basic": "Processing", + "ocr": "OCR" + }, "readonly": "Lesemodus", "readonly-archived": "Read only (archived)", "redact-text": { @@ -2219,12 +2238,6 @@ "red-user-admin": "Benutzer-Admin", "regular": "Regulär" }, - "search": { - "active-dossiers": "ganze Plattform", - "all-dossiers": "all documents", - "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", - "this-dossier": "in diesem Dossier" - }, "search-screen": { "cols": { "assignee": "Bevollmächtigter", @@ -2248,6 +2261,12 @@ "no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.", "table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}" }, + "search": { + "active-dossiers": "ganze Plattform", + "all-dossiers": "all documents", + "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", + "this-dossier": "in diesem Dossier" + }, "seconds": "seconds", "size": "Size", "smtp-auth-config": { @@ -2502,4 +2521,4 @@ } }, "yesterday": "Gestern" -} \ No newline at end of file +} diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 860fd294f..992f36c85 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -231,6 +231,7 @@ }, "admin-side-nav": { "audit": "Audit", + "component-mappings": "Component mappings", "component-rule-editor": "", "configurations": "Configurations", "default-colors": "Default colors", @@ -516,6 +517,24 @@ }, "title": "Component view" }, + "component-mappings-screen": { + "action": { + "delete": "Delete mapping", + "edit": "Edit mapping" + }, + "add-new": "New Mapping", + "bulk-actions": { + "delete": "Delete selected mappings" + }, + "search": "Search by name...", + "table-col-names": { + "name": "name", + "version": "version" + }, + "table-header": { + "title": "Component mapping" + } + }, "component-rules-screen": { "error": { "generic": "" @@ -2502,4 +2521,4 @@ } }, "yesterday": "Yesterday" -} \ No newline at end of file +} diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index f04ac163a..99d638f9c 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -231,6 +231,7 @@ }, "admin-side-nav": { "audit": "Audit", + "component-mappings": "", "component-rule-editor": "Component rule editor", "configurations": "Configurations", "default-colors": "Default colors", @@ -254,9 +255,6 @@ "watermarks": "Watermarks" }, "analysis-disabled": "Analysis disabled", - "annotation": { - "pending": "(Pending analysis)" - }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -311,14 +309,14 @@ "error": "Rekategorisierung des Bildes gescheitert: {error}", "success": "Bild wurde einer neuen Kategorie zugeordnet." }, - "remove": { - "error": "Fehler beim Entfernen der Schwärzung: {error}", - "success": "Schwärzung entfernt!" - }, "remove-hint": { "error": "Failed to remove hint: {error}", "success": "Hint removed!" }, + "remove": { + "error": "Fehler beim Entfernen der Schwärzung: {error}", + "success": "Schwärzung entfernt!" + }, "undo": { "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "success": "erfolgreich Rückgängig gemacht" @@ -331,15 +329,15 @@ "remove-highlights": { "label": "Remove selected earmarks" }, - "resize": { - "label": "Größe ändern" - }, "resize-accept": { "label": "Größe speichern" }, "resize-cancel": { "label": "Größenänderung abbrechen" }, + "resize": { + "label": "Größe ändern" + }, "see-references": { "label": "See references" }, @@ -371,6 +369,9 @@ "skipped": "Übersprungen", "text-highlight": "Earmark" }, + "annotation": { + "pending": "(Pending analysis)" + }, "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -516,6 +517,24 @@ }, "title": "Structured Component Management" }, + "component-mappings-screen": { + "action": { + "delete": "", + "edit": "" + }, + "add-new": "", + "bulk-actions": { + "delete": "" + }, + "search": "", + "table-col-names": { + "name": "", + "version": "" + }, + "table-header": { + "title": "" + } + }, "component-rules-screen": { "error": { "generic": "Something went wrong... Component rules update failed!" @@ -576,18 +595,14 @@ "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" }, "confirmation-dialog": { - "approve-file": { - "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", - "title": "Warnung!" - }, "approve-file-without-analysis": { "confirmationText": "Approve without analysis", "denyText": "Cancel", "question": "Analysis required to detect new components.", "title": "Warning!" }, - "approve-multiple-files": { - "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "approve-file": { + "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", "title": "Warnung!" }, "approve-multiple-files-without-analysis": { @@ -596,6 +611,10 @@ "question": "Analysis required to detect new components for at least one file.", "title": "Warning" }, + "approve-multiple-files": { + "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "title": "Warnung!" + }, "assign-file-to-me": { "question": { "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", @@ -959,13 +978,13 @@ "recent": "Neu ({hours} h)", "unassigned": "Niemandem zugewiesen" }, - "reanalyse": { - "action": "Datei analysieren" - }, "reanalyse-dossier": { "error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.", "success": "Dateien für Reanalyse vorgesehen." }, + "reanalyse": { + "action": "Datei analysieren" + }, "start-auto-analysis": "Enable auto-analysis", "stop-auto-analysis": "Stop auto-analysis", "table-col-names": { @@ -1035,14 +1054,6 @@ "total-documents": "Anzahl der Dokumente", "total-people": "{count} {count, plural, one{user} other {users}}" }, - "dossier-templates": { - "label": "Dossier-Vorlagen", - "status": { - "active": "Active", - "inactive": "Inactive", - "incomplete": "Incomplete" - } - }, "dossier-templates-listing": { "action": { "clone": "Clone template", @@ -1078,6 +1089,14 @@ "title": "{length} dossier {length, plural, one{template} other{templates}}" } }, + "dossier-templates": { + "label": "Dossier-Vorlagen", + "status": { + "active": "Active", + "inactive": "Inactive", + "incomplete": "Incomplete" + } + }, "dossier-watermark-selector": { "heading": "Watermarks on documents", "no-watermark": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", @@ -1273,15 +1292,6 @@ "title": "{length} {length, plural, one{entity} other{entities}}" } }, - "entity": { - "info": { - "actions": { - "revert": "Revert", - "save": "Save changes" - }, - "heading": "Edit entity" - } - }, "entity-rules-screen": { "error": { "generic": "Something went wrong... Entity rules update failed!" @@ -1296,19 +1306,28 @@ "warning-text": "Warning: experimental feature!", "warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules" }, + "entity": { + "info": { + "actions": { + "revert": "Revert", + "save": "Save changes" + }, + "heading": "Edit entity" + } + }, "error": { "deleted-entity": { "dossier": { "action": "Zurück zur Übersicht", "label": "Dieses Dossier wurde gelöscht!" }, - "file": { - "action": "Zurück zum Dossier", - "label": "Diese Datei wurde gelöscht!" - }, "file-dossier": { "action": "Zurück zur Übersicht", "label": "Das Dossier dieser Datei wurde gelöscht!" + }, + "file": { + "action": "Zurück zum Dossier", + "label": "Diese Datei wurde gelöscht!" } }, "file-preview": { @@ -1326,12 +1345,6 @@ }, "exact-date": "{day} {month} {year} um {hour}:{minute} Uhr", "file": "Datei", - "file-attribute": { - "update": { - "error": "Failed to update file attribute value!", - "success": "File attribute value has been updated successfully!" - } - }, "file-attribute-encoding-types": { "ascii": "ASCII", "iso": "ISO-8859-1", @@ -1342,6 +1355,12 @@ "number": "Nummer", "text": "Freier Text" }, + "file-attribute": { + "update": { + "error": "Failed to update file attribute value!", + "success": "File attribute value has been updated successfully!" + } + }, "file-attributes-configurations": { "cancel": "Cancel", "form": { @@ -1560,15 +1579,6 @@ "csv": "File attributes were imported successfully from uploaded CSV file." } }, - "filter": { - "analysis": "Analyse erforderlich", - "comment": "Kommentare", - "hint": "Nut Hinweise", - "image": "Bilder", - "none": "Keine Anmerkungen", - "redaction": "Geschwärzt", - "updated": "Aktualisiert" - }, "filter-menu": { "filter-options": "Filteroptionen", "filter-types": "Filter", @@ -1578,6 +1588,15 @@ "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", "with-comments": "Nur Anmerkungen mit Kommentaren" }, + "filter": { + "analysis": "Analyse erforderlich", + "comment": "Kommentare", + "hint": "Nut Hinweise", + "image": "Bilder", + "none": "Keine Anmerkungen", + "redaction": "Geschwärzt", + "updated": "Aktualisiert" + }, "filters": { "assigned-people": "Beauftragt", "documents-status": "Documents state", @@ -1850,13 +1869,6 @@ "user-promoted-to-approver": "{user} wurde im Dossier {dossierHref, select, null{{dossierName}} other{{dossierName}}} zum Genehmiger ernannt!", "user-removed-as-dossier-member": "{user} wurde als Mitglied von: {dossierHref, select, null{{dossierName}} other{{dossierName}}} entfernt!" }, - "notifications": { - "button-text": "Notifications", - "deleted-dossier": "Deleted dossier", - "label": "Benachrichtigungen", - "mark-all-as-read": "Alle als gelesen markieren", - "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" - }, "notifications-screen": { "category": { "email-notifications": "E-Mail Benachrichtigungen", @@ -1870,6 +1882,7 @@ "dossier": "Dossierbezogene Benachrichtigungen", "other": "Andere Benachrichtigungen" }, + "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "options": { "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin", @@ -1887,7 +1900,6 @@ "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" }, - "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "schedule": { "daily": "Tägliche Zusammenfassung", "instant": "Sofortig", @@ -1895,6 +1907,13 @@ }, "title": "Benachrichtigungseinstellungen" }, + "notifications": { + "button-text": "Notifications", + "deleted-dossier": "Deleted dossier", + "label": "Benachrichtigungen", + "mark-all-as-read": "Alle als gelesen markieren", + "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" + }, "ocr": { "confirmation-dialog": { "cancel": "Cancel", @@ -1986,16 +2005,16 @@ "warnings-label": "Prompts and dialogs", "warnings-subtitle": "Do not show again options" }, - "processing": { - "basic": "Processing", - "ocr": "OCR" - }, "processing-status": { "ocr": "OCR", "pending": "Pending", "processed": "Processed", "processing": "Processing" }, + "processing": { + "basic": "Processing", + "ocr": "OCR" + }, "readonly": "Lesemodus", "readonly-archived": "Read only (archived)", "redact-text": { @@ -2219,12 +2238,6 @@ "red-user-admin": "Benutzer-Admin", "regular": "Regulär" }, - "search": { - "active-dossiers": "ganze Plattform", - "all-dossiers": "all documents", - "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", - "this-dossier": "in diesem Dossier" - }, "search-screen": { "cols": { "assignee": "Bevollmächtigter", @@ -2248,6 +2261,12 @@ "no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.", "table-header": "{length} search {length, plural, one{result} other{results}}" }, + "search": { + "active-dossiers": "ganze Plattform", + "all-dossiers": "all documents", + "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", + "this-dossier": "in diesem Dossier" + }, "seconds": "seconds", "size": "Size", "smtp-auth-config": { @@ -2502,4 +2521,4 @@ } }, "yesterday": "Gestern" -} \ No newline at end of file +} diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index b005ac747..2b40f93a9 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -231,6 +231,7 @@ }, "admin-side-nav": { "audit": "Audit", + "component-mappings": "Component mappings", "component-rule-editor": "Component rule editor", "configurations": "Configurations", "default-colors": "Default colors", @@ -516,6 +517,24 @@ }, "title": "Component view" }, + "component-mappings-screen": { + "action": { + "delete": "Delete mapping", + "edit": "Edit mapping" + }, + "add-new": "New Mapping", + "bulk-actions": { + "delete": "Delete selected mappings" + }, + "search": "Search by name...", + "table-col-names": { + "name": "name", + "version": "version" + }, + "table-header": { + "title": "Component mapping" + } + }, "component-rules-screen": { "error": { "generic": "Something went wrong... Component rules update failed!" @@ -2502,4 +2521,4 @@ } }, "yesterday": "Yesterday" -} \ No newline at end of file +} diff --git a/libs/red-domain/src/index.ts b/libs/red-domain/src/index.ts index e324c83a5..4d040b981 100644 --- a/libs/red-domain/src/index.ts +++ b/libs/red-domain/src/index.ts @@ -29,3 +29,4 @@ export * from './lib/digital-signature'; export * from './lib/watermarks'; export * from './lib/colors'; export * from './lib/component-log'; +export * from './lib/component-mappings'; diff --git a/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts b/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts new file mode 100644 index 000000000..e0efbcccb --- /dev/null +++ b/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts @@ -0,0 +1,18 @@ +import { IComponentMapping } from './component-mapping'; +import { IListable } from '@iqser/common-ui'; + +export class ComponentMapping implements IComponentMapping, IListable { + readonly id: string; + readonly name: string; + readonly version: number; + + constructor(componentMapping: IComponentMapping) { + this.id = componentMapping.id; + this.name = componentMapping.name; + this.version = componentMapping.version; + } + + get searchKey(): string { + return this.name; + } +} diff --git a/libs/red-domain/src/lib/component-mappings/component-mapping.ts b/libs/red-domain/src/lib/component-mappings/component-mapping.ts new file mode 100644 index 000000000..eb1465f42 --- /dev/null +++ b/libs/red-domain/src/lib/component-mappings/component-mapping.ts @@ -0,0 +1,5 @@ +export interface IComponentMapping { + id: string; + name: string; + version: number; +} diff --git a/libs/red-domain/src/lib/component-mappings/index.ts b/libs/red-domain/src/lib/component-mappings/index.ts new file mode 100644 index 000000000..c0a040a07 --- /dev/null +++ b/libs/red-domain/src/lib/component-mappings/index.ts @@ -0,0 +1,2 @@ +export * from './component-mapping.model'; +export * from './component-mapping'; From 47342ee7396d8300b5c857e1816cbbf4d077b862 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Tue, 4 Jun 2024 22:10:13 +0300 Subject: [PATCH 02/14] RED-7593: added warning notification in case of missing admin email. --- .../smtp-form/smtp-form.component.ts | 8 +- .../admin/services/smtp-config.service.ts | 4 +- apps/red-ui/src/assets/i18n/redact/de.json | 154 +++++++++--------- apps/red-ui/src/assets/i18n/redact/en.json | 5 +- apps/red-ui/src/assets/i18n/scm/de.json | 154 +++++++++--------- apps/red-ui/src/assets/i18n/scm/en.json | 5 +- .../lib/configuration/smtp-configuration.ts | 7 + 7 files changed, 179 insertions(+), 158 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/screens/general-config/smtp-form/smtp-form.component.ts b/apps/red-ui/src/app/modules/admin/screens/general-config/smtp-form/smtp-form.component.ts index 2514390c9..8cd62c76d 100644 --- a/apps/red-ui/src/app/modules/admin/screens/general-config/smtp-form/smtp-form.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/general-config/smtp-form/smtp-form.component.ts @@ -62,8 +62,12 @@ export class SmtpFormComponent extends BaseFormComponent implements OnInit { async testConnection() { this._loadingService.start(); try { - await firstValueFrom(this._smtpConfigService.testSMTPConfiguration(this.form.getRawValue())); - this._toaster.success(_('general-config-screen.test.success')); + const response = await firstValueFrom(this._smtpConfigService.testSMTPConfiguration(this.form.getRawValue())); + if (!response.adminEmail) { + this._toaster.warning(_('general-config-screen.test.warning'), { params: { recipientEmail: response.recipientEmail } }); + } else { + this._toaster.success(_('general-config-screen.test.success')); + } } catch (e) { this._toaster.error(_('general-config-screen.test.error')); } finally { diff --git a/apps/red-ui/src/app/modules/admin/services/smtp-config.service.ts b/apps/red-ui/src/app/modules/admin/services/smtp-config.service.ts index 40b949acd..fcca71a0a 100644 --- a/apps/red-ui/src/app/modules/admin/services/smtp-config.service.ts +++ b/apps/red-ui/src/app/modules/admin/services/smtp-config.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { GenericService } from '@iqser/common-ui'; -import { ISmtpConfiguration } from '@red/domain'; +import { ISmtpConfiguration, ITextConnectionResponse } from '@red/domain'; @Injectable() export class SmtpConfigService extends GenericService { @@ -12,7 +12,7 @@ export class SmtpConfigService extends GenericService { } testSMTPConfiguration(body: ISmtpConfiguration) { - return this._post(body, `${this._defaultModelPath}/smtp/test`); + return this._post(body, `${this._defaultModelPath}/smtp/test`); } getCurrentSMTPConfiguration() { diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 671433770..51718242c 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -254,9 +254,6 @@ "watermarks": "Watermarks" }, "analysis-disabled": "", - "annotation": { - "pending": "(Pending analysis)" - }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -311,14 +308,14 @@ "error": "Rekategorisierung des Bildes gescheitert: {error}", "success": "Bild wurde einer neuen Kategorie zugeordnet." }, - "remove": { - "error": "Fehler beim Entfernen der Schwärzung: {error}", - "success": "Schwärzung entfernt!" - }, "remove-hint": { "error": "Failed to remove hint: {error}", "success": "Hint removed" }, + "remove": { + "error": "Fehler beim Entfernen der Schwärzung: {error}", + "success": "Schwärzung entfernt!" + }, "undo": { "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "success": "erfolgreich Rückgängig gemacht" @@ -331,15 +328,15 @@ "remove-highlights": { "label": "Remove selected earmarks" }, - "resize": { - "label": "Größe ändern" - }, "resize-accept": { "label": "Größe speichern" }, "resize-cancel": { "label": "Größenänderung abbrechen" }, + "resize": { + "label": "Größe ändern" + }, "see-references": { "label": "See references" }, @@ -357,6 +354,7 @@ }, "annotation-engines": { "dictionary": "{isHint, select, true{Hint} other{Redaction}} basierend auf Wörterbuch", + "dossier-dictionary": "", "imported": "Imported", "ner": "Redaktion basierend auf KI", "rule": "Schwärzung basierend auf Regel {rule}" @@ -371,6 +369,9 @@ "skipped": "Übersprungen", "text-highlight": "Earmark" }, + "annotation": { + "pending": "(Pending analysis)" + }, "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -576,18 +577,14 @@ "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" }, "confirmation-dialog": { - "approve-file": { - "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", - "title": "Warnung!" - }, "approve-file-without-analysis": { "confirmationText": "Approve without analysis", "denyText": "Cancel", "question": "Analysis required to detect new redactions.", "title": "Warning!" }, - "approve-multiple-files": { - "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "approve-file": { + "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", "title": "Warnung!" }, "approve-multiple-files-without-analysis": { @@ -596,6 +593,10 @@ "question": "Analysis required to detect new redactions for at least one file.", "title": "Warning" }, + "approve-multiple-files": { + "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "title": "Warnung!" + }, "assign-file-to-me": { "question": { "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", @@ -959,13 +960,13 @@ "recent": "Neu ({hours} h)", "unassigned": "Niemandem zugewiesen" }, - "reanalyse": { - "action": "Datei analysieren" - }, "reanalyse-dossier": { "error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.", "success": "Dateien für Reanalyse vorgesehen." }, + "reanalyse": { + "action": "Datei analysieren" + }, "start-auto-analysis": "Enable auto-analysis", "stop-auto-analysis": "Stop auto-analysis", "table-col-names": { @@ -1035,14 +1036,6 @@ "total-documents": "Anzahl der Dokumente", "total-people": "{count} {count, plural, one{user} other {users}}" }, - "dossier-templates": { - "label": "Dossier-Vorlagen", - "status": { - "active": "Active", - "inactive": "Inactive", - "incomplete": "Incomplete" - } - }, "dossier-templates-listing": { "action": { "clone": "Clone template", @@ -1078,6 +1071,14 @@ "title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}" } }, + "dossier-templates": { + "label": "Dossier-Vorlagen", + "status": { + "active": "Active", + "inactive": "Inactive", + "incomplete": "Incomplete" + } + }, "dossier-watermark-selector": { "heading": "Watermarks on documents", "no-watermark": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", @@ -1273,15 +1274,6 @@ "title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}" } }, - "entity": { - "info": { - "actions": { - "revert": "Revert", - "save": "Save changes" - }, - "heading": "Edit entity" - } - }, "entity-rules-screen": { "error": { "generic": "An error ocurred... Entity rules update failed!" @@ -1296,19 +1288,28 @@ "warning-text": "Warning: experimental feature!", "warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules" }, + "entity": { + "info": { + "actions": { + "revert": "Revert", + "save": "Save changes" + }, + "heading": "Edit entity" + } + }, "error": { "deleted-entity": { "dossier": { "action": "Zurück zur Übersicht", "label": "Dieses Dossier wurde gelöscht!" }, - "file": { - "action": "Zurück zum Dossier", - "label": "Diese Datei wurde gelöscht!" - }, "file-dossier": { "action": "Zurück zur Übersicht", "label": "Das Dossier dieser Datei wurde gelöscht!" + }, + "file": { + "action": "Zurück zum Dossier", + "label": "Diese Datei wurde gelöscht!" } }, "file-preview": { @@ -1326,12 +1327,6 @@ }, "exact-date": "{day} {month} {year} um {hour}:{minute} Uhr", "file": "Datei", - "file-attribute": { - "update": { - "error": "Failed to update file attribute value!", - "success": "File attribute value has been updated successfully!" - } - }, "file-attribute-encoding-types": { "ascii": "ASCII", "iso": "ISO-8859-1", @@ -1342,6 +1337,12 @@ "number": "Nummer", "text": "Freier Text" }, + "file-attribute": { + "update": { + "error": "Failed to update file attribute value!", + "success": "File attribute value has been updated successfully!" + } + }, "file-attributes-configurations": { "cancel": "Cancel", "form": { @@ -1560,15 +1561,6 @@ "csv": "File attributes were imported successfully from uploaded CSV file." } }, - "filter": { - "analysis": "Analyse erforderlich", - "comment": "Kommentare", - "hint": "Nut Hinweise", - "image": "Bilder", - "none": "Keine Anmerkungen", - "redaction": "Geschwärzt", - "updated": "Aktualisiert" - }, "filter-menu": { "filter-options": "Filteroptionen", "filter-types": "Filter", @@ -1578,6 +1570,15 @@ "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", "with-comments": "Nur Anmerkungen mit Kommentaren" }, + "filter": { + "analysis": "Analyse erforderlich", + "comment": "Kommentare", + "hint": "Nut Hinweise", + "image": "Bilder", + "none": "Keine Anmerkungen", + "redaction": "Geschwärzt", + "updated": "Aktualisiert" + }, "filters": { "assigned-people": "Beauftragt", "documents-status": "Documents state", @@ -1641,7 +1642,8 @@ }, "test": { "error": "Die Test-E-Mail konnte nicht gesendet werden! Bitte überprüfen Sie die E-Mail-Adresse.", - "success": "Die Test-E-Mail wurde erfolgreich versendet!" + "success": "Die Test-E-Mail wurde erfolgreich versendet!", + "warning": "" }, "title": "SMTP-Konto konfigurieren" }, @@ -1850,13 +1852,6 @@ "user-promoted-to-approver": "{user} wurde im Dossier {dossierHref, select, null{{dossierName}} other{{dossierName}}} zum Genehmiger ernannt!", "user-removed-as-dossier-member": "{user} wurde als Mitglied von: {dossierHref, select, null{{dossierName}} other{{dossierName}}} entfernt!" }, - "notifications": { - "button-text": "Notifications", - "deleted-dossier": "Deleted dossier", - "label": "Benachrichtigungen", - "mark-all-as-read": "Alle als gelesen markieren", - "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" - }, "notifications-screen": { "category": { "email-notifications": "E-Mail Benachrichtigungen", @@ -1870,6 +1865,7 @@ "dossier": "Dossierbezogene Benachrichtigungen", "other": "Andere Benachrichtigungen" }, + "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "options": { "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin", @@ -1887,7 +1883,6 @@ "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" }, - "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "schedule": { "daily": "Tägliche Zusammenfassung", "instant": "Sofortig", @@ -1895,6 +1890,13 @@ }, "title": "Benachrichtigungseinstellungen" }, + "notifications": { + "button-text": "Notifications", + "deleted-dossier": "Deleted dossier", + "label": "Benachrichtigungen", + "mark-all-as-read": "Alle als gelesen markieren", + "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" + }, "ocr": { "confirmation-dialog": { "cancel": "Cancel", @@ -1986,16 +1988,16 @@ "warnings-label": "Prompts and dialogs", "warnings-subtitle": "Do not show again options" }, - "processing": { - "basic": "Processing", - "ocr": "OCR" - }, "processing-status": { "ocr": "OCR", "pending": "Pending", "processed": "processed", "processing": "Processing" }, + "processing": { + "basic": "Processing", + "ocr": "OCR" + }, "readonly": "Lesemodus", "readonly-archived": "Read only (archived)", "redact-text": { @@ -2132,6 +2134,7 @@ "display-name": "This placeholder is replaced by the name of the entity the redaction is based on." }, "excerpt": "Dieser Platzhalter wird durch einen Textausschnitt ersetzt, der die Schwärzung enthält.", + "is-skipped": "", "justification": "Dieser Platzhalter wird durch die Begründung der Schwärzung ersetzt. Es ist eine Kombination aus dem Rechtsverweis (justificationParagraph) und dem Begründungstext (justificationReason).", "justification-legal-basis": "This placeholder is replaced by the legal basis for the redaction.", "justification-paragraph": "Dieser Platzhalter wird durch den Rechtshinweis der Begründung der Redaktion ersetzt.", @@ -2139,6 +2142,7 @@ "justification-text": "This placeholder is replaced by the justification text.", "page": "Dieser Platzhalter wird durch die Seitenzahl der Redaktion ersetzt.", "paragraph": "Dieser Platzhalter wird durch den Absatz ersetzt, der die Schwärzung enthält.", + "paragraph-idx": "", "value": "This placeholder is replaced by the value that was redacted." }, "time": { @@ -2219,12 +2223,6 @@ "red-user-admin": "Benutzer-Admin", "regular": "Regulär" }, - "search": { - "active-dossiers": "ganze Plattform", - "all-dossiers": "all documents", - "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", - "this-dossier": "in diesem Dossier" - }, "search-screen": { "cols": { "assignee": "Bevollmächtigter", @@ -2248,6 +2246,12 @@ "no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.", "table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}" }, + "search": { + "active-dossiers": "ganze Plattform", + "all-dossiers": "all documents", + "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", + "this-dossier": "in diesem Dossier" + }, "seconds": "seconds", "size": "Size", "smtp-auth-config": { @@ -2502,4 +2506,4 @@ } }, "yesterday": "Gestern" -} \ No newline at end of file +} diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index be3b8898c..57d80a2ed 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -1642,7 +1642,8 @@ }, "test": { "error": "Test e-mail could not be sent! Please revise the e-mail address.", - "success": "Test e-mail was sent successfully!" + "success": "Test e-mail was sent successfully!", + "warning": "Admin mail address not set. Test email sent to {recipientEmail} instead." }, "title": "Configure SMTP account" }, @@ -2505,4 +2506,4 @@ } }, "yesterday": "Yesterday" -} \ No newline at end of file +} diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index f04ac163a..ed2f3ac81 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -254,9 +254,6 @@ "watermarks": "Watermarks" }, "analysis-disabled": "Analysis disabled", - "annotation": { - "pending": "(Pending analysis)" - }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -311,14 +308,14 @@ "error": "Rekategorisierung des Bildes gescheitert: {error}", "success": "Bild wurde einer neuen Kategorie zugeordnet." }, - "remove": { - "error": "Fehler beim Entfernen der Schwärzung: {error}", - "success": "Schwärzung entfernt!" - }, "remove-hint": { "error": "Failed to remove hint: {error}", "success": "Hint removed!" }, + "remove": { + "error": "Fehler beim Entfernen der Schwärzung: {error}", + "success": "Schwärzung entfernt!" + }, "undo": { "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "success": "erfolgreich Rückgängig gemacht" @@ -331,15 +328,15 @@ "remove-highlights": { "label": "Remove selected earmarks" }, - "resize": { - "label": "Größe ändern" - }, "resize-accept": { "label": "Größe speichern" }, "resize-cancel": { "label": "Größenänderung abbrechen" }, + "resize": { + "label": "Größe ändern" + }, "see-references": { "label": "See references" }, @@ -357,6 +354,7 @@ }, "annotation-engines": { "dictionary": "{isHint, select, true{Hint} other{Redaction}} basierend auf Wörterbuch", + "dossier-dictionary": "", "imported": "Annotation is imported", "ner": "Redaktion basierend auf KI", "rule": "Schwärzung basierend auf Regel {rule}" @@ -371,6 +369,9 @@ "skipped": "Übersprungen", "text-highlight": "Earmark" }, + "annotation": { + "pending": "(Pending analysis)" + }, "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -576,18 +577,14 @@ "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" }, "confirmation-dialog": { - "approve-file": { - "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", - "title": "Warnung!" - }, "approve-file-without-analysis": { "confirmationText": "Approve without analysis", "denyText": "Cancel", "question": "Analysis required to detect new components.", "title": "Warning!" }, - "approve-multiple-files": { - "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "approve-file": { + "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", "title": "Warnung!" }, "approve-multiple-files-without-analysis": { @@ -596,6 +593,10 @@ "question": "Analysis required to detect new components for at least one file.", "title": "Warning" }, + "approve-multiple-files": { + "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", + "title": "Warnung!" + }, "assign-file-to-me": { "question": { "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", @@ -959,13 +960,13 @@ "recent": "Neu ({hours} h)", "unassigned": "Niemandem zugewiesen" }, - "reanalyse": { - "action": "Datei analysieren" - }, "reanalyse-dossier": { "error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.", "success": "Dateien für Reanalyse vorgesehen." }, + "reanalyse": { + "action": "Datei analysieren" + }, "start-auto-analysis": "Enable auto-analysis", "stop-auto-analysis": "Stop auto-analysis", "table-col-names": { @@ -1035,14 +1036,6 @@ "total-documents": "Anzahl der Dokumente", "total-people": "{count} {count, plural, one{user} other {users}}" }, - "dossier-templates": { - "label": "Dossier-Vorlagen", - "status": { - "active": "Active", - "inactive": "Inactive", - "incomplete": "Incomplete" - } - }, "dossier-templates-listing": { "action": { "clone": "Clone template", @@ -1078,6 +1071,14 @@ "title": "{length} dossier {length, plural, one{template} other{templates}}" } }, + "dossier-templates": { + "label": "Dossier-Vorlagen", + "status": { + "active": "Active", + "inactive": "Inactive", + "incomplete": "Incomplete" + } + }, "dossier-watermark-selector": { "heading": "Watermarks on documents", "no-watermark": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", @@ -1273,15 +1274,6 @@ "title": "{length} {length, plural, one{entity} other{entities}}" } }, - "entity": { - "info": { - "actions": { - "revert": "Revert", - "save": "Save changes" - }, - "heading": "Edit entity" - } - }, "entity-rules-screen": { "error": { "generic": "Something went wrong... Entity rules update failed!" @@ -1296,19 +1288,28 @@ "warning-text": "Warning: experimental feature!", "warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules" }, + "entity": { + "info": { + "actions": { + "revert": "Revert", + "save": "Save changes" + }, + "heading": "Edit entity" + } + }, "error": { "deleted-entity": { "dossier": { "action": "Zurück zur Übersicht", "label": "Dieses Dossier wurde gelöscht!" }, - "file": { - "action": "Zurück zum Dossier", - "label": "Diese Datei wurde gelöscht!" - }, "file-dossier": { "action": "Zurück zur Übersicht", "label": "Das Dossier dieser Datei wurde gelöscht!" + }, + "file": { + "action": "Zurück zum Dossier", + "label": "Diese Datei wurde gelöscht!" } }, "file-preview": { @@ -1326,12 +1327,6 @@ }, "exact-date": "{day} {month} {year} um {hour}:{minute} Uhr", "file": "Datei", - "file-attribute": { - "update": { - "error": "Failed to update file attribute value!", - "success": "File attribute value has been updated successfully!" - } - }, "file-attribute-encoding-types": { "ascii": "ASCII", "iso": "ISO-8859-1", @@ -1342,6 +1337,12 @@ "number": "Nummer", "text": "Freier Text" }, + "file-attribute": { + "update": { + "error": "Failed to update file attribute value!", + "success": "File attribute value has been updated successfully!" + } + }, "file-attributes-configurations": { "cancel": "Cancel", "form": { @@ -1560,15 +1561,6 @@ "csv": "File attributes were imported successfully from uploaded CSV file." } }, - "filter": { - "analysis": "Analyse erforderlich", - "comment": "Kommentare", - "hint": "Nut Hinweise", - "image": "Bilder", - "none": "Keine Anmerkungen", - "redaction": "Geschwärzt", - "updated": "Aktualisiert" - }, "filter-menu": { "filter-options": "Filteroptionen", "filter-types": "Filter", @@ -1578,6 +1570,15 @@ "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", "with-comments": "Nur Anmerkungen mit Kommentaren" }, + "filter": { + "analysis": "Analyse erforderlich", + "comment": "Kommentare", + "hint": "Nut Hinweise", + "image": "Bilder", + "none": "Keine Anmerkungen", + "redaction": "Geschwärzt", + "updated": "Aktualisiert" + }, "filters": { "assigned-people": "Beauftragt", "documents-status": "Documents state", @@ -1641,7 +1642,8 @@ }, "test": { "error": "Die Test-E-Mail konnte nicht gesendet werden! Bitte überprüfen Sie die E-Mail-Adresse.", - "success": "Die Test-E-Mail wurde erfolgreich versendet!" + "success": "Die Test-E-Mail wurde erfolgreich versendet!", + "warning": "" }, "title": "SMTP-Konto konfigurieren" }, @@ -1850,13 +1852,6 @@ "user-promoted-to-approver": "{user} wurde im Dossier {dossierHref, select, null{{dossierName}} other{{dossierName}}} zum Genehmiger ernannt!", "user-removed-as-dossier-member": "{user} wurde als Mitglied von: {dossierHref, select, null{{dossierName}} other{{dossierName}}} entfernt!" }, - "notifications": { - "button-text": "Notifications", - "deleted-dossier": "Deleted dossier", - "label": "Benachrichtigungen", - "mark-all-as-read": "Alle als gelesen markieren", - "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" - }, "notifications-screen": { "category": { "email-notifications": "E-Mail Benachrichtigungen", @@ -1870,6 +1865,7 @@ "dossier": "Dossierbezogene Benachrichtigungen", "other": "Andere Benachrichtigungen" }, + "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "options": { "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin", @@ -1887,7 +1883,6 @@ "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" }, - "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "schedule": { "daily": "Tägliche Zusammenfassung", "instant": "Sofortig", @@ -1895,6 +1890,13 @@ }, "title": "Benachrichtigungseinstellungen" }, + "notifications": { + "button-text": "Notifications", + "deleted-dossier": "Deleted dossier", + "label": "Benachrichtigungen", + "mark-all-as-read": "Alle als gelesen markieren", + "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" + }, "ocr": { "confirmation-dialog": { "cancel": "Cancel", @@ -1986,16 +1988,16 @@ "warnings-label": "Prompts and dialogs", "warnings-subtitle": "Do not show again options" }, - "processing": { - "basic": "Processing", - "ocr": "OCR" - }, "processing-status": { "ocr": "OCR", "pending": "Pending", "processed": "Processed", "processing": "Processing" }, + "processing": { + "basic": "Processing", + "ocr": "OCR" + }, "readonly": "Lesemodus", "readonly-archived": "Read only (archived)", "redact-text": { @@ -2132,6 +2134,7 @@ "display-name": "This placeholder is replaced by the name of the entity the component is based on." }, "excerpt": "Dieser Platzhalter wird durch einen Textausschnitt ersetzt, der die Schwärzung enthält.", + "is-skipped": "", "justification": "Dieser Platzhalter wird durch die Begründung der Schwärzung ersetzt. Es ist eine Kombination aus dem Rechtsverweis (justificationParagraph) und dem Begründungstext (justificationReason).", "justification-legal-basis": "This placeholder is replaced by the legal basis for the component.", "justification-paragraph": "Dieser Platzhalter wird durch den Rechtshinweis der Begründung der Redaktion ersetzt.", @@ -2139,6 +2142,7 @@ "justification-text": "This placeholder is replaced by the justification text.", "page": "Dieser Platzhalter wird durch die Seitenzahl der Redaktion ersetzt.", "paragraph": "Dieser Platzhalter wird durch den Absatz ersetzt, der die Schwärzung enthält.", + "paragraph-idx": "", "value": "This placeholder is replaced by the value that was extracted." }, "time": { @@ -2219,12 +2223,6 @@ "red-user-admin": "Benutzer-Admin", "regular": "Regulär" }, - "search": { - "active-dossiers": "ganze Plattform", - "all-dossiers": "all documents", - "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", - "this-dossier": "in diesem Dossier" - }, "search-screen": { "cols": { "assignee": "Bevollmächtigter", @@ -2248,6 +2246,12 @@ "no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.", "table-header": "{length} search {length, plural, one{result} other{results}}" }, + "search": { + "active-dossiers": "ganze Plattform", + "all-dossiers": "all documents", + "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", + "this-dossier": "in diesem Dossier" + }, "seconds": "seconds", "size": "Size", "smtp-auth-config": { @@ -2502,4 +2506,4 @@ } }, "yesterday": "Gestern" -} \ No newline at end of file +} diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index c025c4606..a63feea13 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -1642,7 +1642,8 @@ }, "test": { "error": "Test e-mail could not be sent! Please revise the e-mail address.", - "success": "Test e-mail was sent successfully!" + "success": "Test e-mail was sent successfully!", + "warning": "Admin mail address not set. Test email sent to {recipientEmail} instead." }, "title": "Configure SMTP Account" }, @@ -2505,4 +2506,4 @@ } }, "yesterday": "Yesterday" -} \ No newline at end of file +} diff --git a/libs/red-domain/src/lib/configuration/smtp-configuration.ts b/libs/red-domain/src/lib/configuration/smtp-configuration.ts index 4095e55f5..88226f110 100644 --- a/libs/red-domain/src/lib/configuration/smtp-configuration.ts +++ b/libs/red-domain/src/lib/configuration/smtp-configuration.ts @@ -13,3 +13,10 @@ export interface ISmtpConfiguration { starttls?: boolean; user?: string; } + +export interface ITextConnectionResponse { + adminEmail: boolean; + reasonPhrase: string; + recipientEmail: string; + statusCode: number; +} From a960b837df159c21f6a5ba39b9b1aeb096020cff Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Wed, 5 Jun 2024 00:09:32 +0300 Subject: [PATCH 03/14] RED-9201 - UI for Component Mapping Tables --- ...it-component-mapping-dialog.component.html | 66 +++++++++++++++ ...it-component-mapping-dialog.component.scss | 21 +++++ ...edit-component-mapping-dialog.component.ts | 81 +++++++++++++++++++ .../component-mappings-screen.component.ts | 34 +++++++- .../component-mappings.service.ts | 28 +++++++ apps/red-ui/src/assets/config/config.json | 10 +-- apps/red-ui/src/assets/i18n/redact/de.json | 17 ++++ apps/red-ui/src/assets/i18n/redact/en.json | 17 ++++ apps/red-ui/src/assets/i18n/scm/de.json | 17 ++++ apps/red-ui/src/assets/i18n/scm/en.json | 17 ++++ .../component-mapping.model.ts | 6 ++ .../component-mappings/component-mapping.ts | 3 + 12 files changed, 308 insertions(+), 9 deletions(-) create mode 100644 apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.html create mode 100644 apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.scss create mode 100644 apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.ts diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.html b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.html new file mode 100644 index 000000000..bb918f40a --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.html @@ -0,0 +1,66 @@ +
+
+
+
+
+
+ + +
+ +
+ + {{ data.mapping.version }} + +
+
+ +
+ + +
+ +
+
+ + +
+ +
+ + + + + {{ translations[type] | translate }} + + + +
+
+
+ +
+ +
+
+ + +
diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.scss b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.scss new file mode 100644 index 000000000..56ceac53a --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.scss @@ -0,0 +1,21 @@ +.row { + display: flex; + margin-top: 14px; + + > *:not(:last-child) { + margin-right: 16px; + } + + .iqser-input-group { + margin-top: 0; + } + + .version { + margin-left: 50px; + + span { + margin-top: 10px; + font-size: 15px; + } + } +} diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.ts b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.ts new file mode 100644 index 000000000..2a9a4a488 --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.ts @@ -0,0 +1,81 @@ +import { Component } from '@angular/core'; +import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialogComponent, IqserUploadFileModule } from '@iqser/common-ui'; +import { FileAttributeEncodingTypes, IComponentMapping } from '@red/domain'; +import { FormBuilder, ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms'; +import { TranslateModule } from '@ngx-translate/core'; +import { NgForOf, NgIf } from '@angular/common'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatDialogClose } from '@angular/material/dialog'; +import { MatOption } from '@angular/material/autocomplete'; +import { MatSelect } from '@angular/material/select'; +import { fileAttributeEncodingTypesTranslations } from '@translations/file-attribute-encoding-types-translations'; + +interface DialogData { + mapping: IComponentMapping; +} +interface DialogResult {} + +@Component({ + templateUrl: './add-edit-component-mapping-dialog.component.html', + styleUrls: ['./add-edit-component-mapping-dialog.component.scss'], + standalone: true, + imports: [ + TranslateModule, + ReactiveFormsModule, + NgIf, + MatFormFieldModule, + NgForOf, + CircleButtonComponent, + MatDialogClose, + IqserUploadFileModule, + MatOption, + MatSelect, + IconButtonComponent, + ], +}) +export class AddEditComponentMappingDialogComponent extends IqserDialogComponent< + AddEditComponentMappingDialogComponent, + DialogData, + DialogResult +> { + protected readonly encodingTypeOptions = Object.keys(FileAttributeEncodingTypes); + protected readonly translations = fileAttributeEncodingTypesTranslations; + protected readonly iconButtonTypes = IconButtonTypes; + form!: UntypedFormGroup; + + constructor(private readonly _formBuilder: FormBuilder) { + super(); + + this.form = this.#getForm(); + } + + get file() { + return this.form.get('file').value; + } + + fileChanged(file: Blob | null) { + if (file) { + const fileReader = new FileReader(); + fileReader.onload = () => { + const binaryContent = fileReader.result; + this.form.get('file').setValue(binaryContent); + }; + fileReader.readAsBinaryString(file as Blob); + } else { + this.form.controls['file'].setValue(''); + } + } + + save() { + this.dialogRef.close({ ...this.data.mapping, ...this.form.getRawValue() }); + } + + #getForm(): UntypedFormGroup { + return this._formBuilder.group({ + name: [this.data?.mapping?.name, Validators.required], + file: [this.data?.mapping?.file, Validators.required], + delimiter: [this.data?.mapping?.delimiter ?? ',', Validators.required], + encodingType: this.encodingTypeOptions.find(e => e === this.data?.mapping?.encodingType) ?? this.encodingTypeOptions[0], + }); + } +} diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts index 510462288..085dcefd9 100644 --- a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts @@ -1,14 +1,23 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; -import { ListingComponent, TableColumnConfig, listingProvidersFactory, LoadingService, IconButtonTypes } from '@iqser/common-ui'; +import { + ListingComponent, + TableColumnConfig, + listingProvidersFactory, + LoadingService, + IconButtonTypes, + IqserDialog, +} from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { defaultColorsTranslations } from '@translations/default-colors-translations'; import { Roles } from '@users/roles'; import { getCurrentUser } from '@common-ui/users'; import { User } from '@red/domain'; import { ComponentMapping } from '@red/domain'; -import { combineLatest } from 'rxjs'; +import { combineLatest, firstValueFrom } from 'rxjs'; import { ComponentMappingsService } from '@services/entity-services/component-mappings.service'; import { tap } from 'rxjs/operators'; +import { AddEditComponentMappingDialogComponent } from './add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component'; +import { AdminDialogService } from '../../services/admin-dialog.service'; @Component({ templateUrl: './component-mappings-screen.component.html', @@ -30,6 +39,8 @@ export class ComponentMappingsScreenComponent extends ListingComponent { + // this._loadingService.start(); + // this._loadingService.stop(); + }); + } } diff --git a/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts b/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts index 384af91bc..e3c9ac956 100644 --- a/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts +++ b/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts @@ -7,36 +7,54 @@ const DATA = [ { id: '1', name: 'OECD Number', + file: 'some file name', + delimiter: ',', + encodingType: 'UTF-8', version: 2, searchKey: 'OECD Number', }, { id: '2', name: 'Study Title', + file: 'some file name', + delimiter: ';', + encodingType: 'ASCII', version: 1, searchKey: 'Study Title', }, { id: '3', name: 'Report Number', + file: 'some file name', + delimiter: '.', + encodingType: 'ISO', version: 2, searchKey: 'Report Number', }, { id: '4', name: 'GLP Study', + file: 'some file name', + delimiter: '"', + encodingType: 'UTF-8', version: 5, searchKey: 'GLP Study', }, { id: '5', name: 'Performing Laboratory', + file: 'some file name', + delimiter: ']', + encodingType: 'UTF-8', version: 2, searchKey: 'Performing Laboratory', }, { id: '6', name: 'Test', + file: 'some file name', + delimiter: ';', + encodingType: 'UTF-8', version: 3, searchKey: 'Test', }, @@ -49,4 +67,14 @@ export class ComponentMappingsService extends EntitiesService { return of(DATA); } + + saveData(mapping: any): Observable { + if (!mapping.id) { + mapping.id = (Number(DATA[DATA.length - 1].id) + 1).toString(); + mapping.version = 1; + mapping.searchKey = mapping.name; + } + DATA.push(mapping); + return of(mapping); + } } diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index 42bf5941f..2ccc6f6d1 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -1,9 +1,9 @@ { "ADMIN_CONTACT_NAME": null, "ADMIN_CONTACT_URL": null, - "API_URL": "https://dan.iqser.cloud", + "API_URL": "https://frontend2.iqser.cloud", "APP_NAME": "RedactManager", - "IS_DOCUMINE": false, + "IS_DOCUMINE": true, "RULE_EDITOR_DEV_ONLY": false, "AUTO_READ_TIME": 3, "BACKEND_APP_VERSION": "4.4.40", @@ -13,13 +13,13 @@ "MAX_RETRIES_ON_SERVER_ERROR": 3, "OAUTH_CLIENT_ID": "redaction", "OAUTH_IDP_HINT": null, - "OAUTH_URL": "https://dan.iqser.cloud/auth", + "OAUTH_URL": "https://frontend2.iqser.cloud/auth", "RECENT_PERIOD_IN_HOURS": 24, "SELECTION_MODE": "structural", "MANUAL_BASE_URL": "https://docs.redactmanager.com/preview", "ANNOTATIONS_THRESHOLD": 1000, - "THEME": "redact", - "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/redact/", + "THEME": "scm", + "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/scm/", "AVAILABLE_NOTIFICATIONS_DAYS": 30, "AVAILABLE_OLD_NOTIFICATIONS_MINUTES": 60, "NOTIFICATIONS_THRESHOLD": 1000, diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index f0e9c8432..519e9fcd7 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -94,6 +94,23 @@ }, "save": "Dossier-Vorlage speichern" }, + "add-edit-component-mapping": { + "actions": { + "save": "" + }, + "dialog": { + "title": "" + }, + "form": { + "delimiter": "", + "delimiter-placeholder": "", + "encoding-type": "", + "file": "", + "name": "", + "name-placeholder": "", + "version": "" + } + }, "add-edit-dossier-attribute": { "error": { "generic": "Attribut konnte nicht gespeichert werden!" diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 992f36c85..dcd8dafe6 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -94,6 +94,23 @@ }, "save": "Save dossier template" }, + "add-edit-component-mapping": { + "actions": { + "save": "Save mapping" + }, + "dialog": { + "title": "{type, select, add{Add New} edit{Edit} other{}} Component Mapping" + }, + "form": { + "delimiter": "", + "delimiter-placeholder": "", + "encoding-type": "", + "file": "Mapping file", + "name": "Mapping name", + "name-placeholder": "Mapping name", + "version": "Version" + } + }, "add-edit-dossier-attribute": { "error": { "generic": "Failed to save attribute" diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 99d638f9c..527e888e4 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -94,6 +94,23 @@ }, "save": "Dossier-Vorlage speichern" }, + "add-edit-component-mapping": { + "actions": { + "save": "" + }, + "dialog": { + "title": "" + }, + "form": { + "delimiter": "", + "delimiter-placeholder": "", + "encoding-type": "", + "file": "", + "name": "", + "name-placeholder": "", + "version": "" + } + }, "add-edit-dossier-attribute": { "error": { "generic": "Attribut konnte nicht gespeichert werden!" diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 2b40f93a9..13e936c33 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -94,6 +94,23 @@ }, "save": "Save dossier template" }, + "add-edit-component-mapping": { + "actions": { + "save": "Save mapping" + }, + "dialog": { + "title": "{type, select, add{Add New} edit{Edit} other{}} Component Mapping" + }, + "form": { + "delimiter": "Delimiter", + "delimiter-placeholder": "Delimiter", + "encoding-type": "Encoding type", + "file": "Mapping file", + "name": "Mapping name", + "name-placeholder": "Mapping name", + "version": "Version" + } + }, "add-edit-dossier-attribute": { "error": { "generic": "Failed to save attribute!" diff --git a/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts b/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts index e0efbcccb..35fa1ef58 100644 --- a/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts +++ b/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts @@ -4,11 +4,17 @@ import { IListable } from '@iqser/common-ui'; export class ComponentMapping implements IComponentMapping, IListable { readonly id: string; readonly name: string; + readonly file: string; + readonly delimiter: string; + readonly encodingType: string; readonly version: number; constructor(componentMapping: IComponentMapping) { this.id = componentMapping.id; this.name = componentMapping.name; + this.file = componentMapping.file; + this.delimiter = componentMapping.delimiter; + this.encodingType = componentMapping.encodingType; this.version = componentMapping.version; } diff --git a/libs/red-domain/src/lib/component-mappings/component-mapping.ts b/libs/red-domain/src/lib/component-mappings/component-mapping.ts index eb1465f42..501c4c3d1 100644 --- a/libs/red-domain/src/lib/component-mappings/component-mapping.ts +++ b/libs/red-domain/src/lib/component-mappings/component-mapping.ts @@ -1,5 +1,8 @@ export interface IComponentMapping { id: string; name: string; + file: string; version: number; + delimiter: string; + encodingType: string; } From 8f3ed70a57344d5604f28ce6d923cd7db7c0c053 Mon Sep 17 00:00:00 2001 From: project_703_bot_497bb7eb186ca592c63b3e50cd5c69e1 Date: Wed, 5 Jun 2024 01:03:28 +0000 Subject: [PATCH 04/14] push back localazy update --- apps/red-ui/src/assets/i18n/redact/de.json | 215 +++++++++++---------- apps/red-ui/src/assets/i18n/redact/en.json | 142 +++++++------- apps/red-ui/src/assets/i18n/scm/de.json | 3 + 3 files changed, 183 insertions(+), 177 deletions(-) diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 671433770..277f0a88a 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -17,42 +17,42 @@ "save": "Speichern" }, "content": { - "comment": "Comment", - "comment-placeholder": "Add remarks or notes...", + "comment": "Kommentar", + "comment-placeholder": "Bemerkungen oder Notizen hinzufügen...", "selected-text": "Ausgewählter Text:", - "type": "Type", - "type-placeholder": "Select type..." + "type": "Typ", + "type-placeholder": "Typ auswählen..." }, - "title": "Add annotation" + "title": "Annotation hinzufügen" } }, "add-clone-dossier-template": { - "save": "{type, select, clone{Clone} other{Save}}", - "save-and-edit": "{type, select, clone{Clone} other{Save}} and edit", - "title": "{type, select, clone{Clone {dossierTemplateName}} other{Create dossier template}}" + "save": "{type, select, clone{Klonen} other{Speichern}}", + "save-and-edit": "{type, select, clone{Klonen} other{Speichern}} und bearbeiten", + "title": "{type, select, clone{{dossierTemplateName} klonen} other{Dossier-Vorlage erstellen}}" }, "add-dossier-dialog": { "actions": { "save": "Speichern", - "save-and-add-members": "Speichern und Team zusammenstellen" + "save-and-add-members": "Speichern und Team bearbeiten" }, "errors": { - "dossier-already-exists": "Dieser Dossier-Name ist bereits vergeben!", + "dossier-already-exists": "Dossier-Name bereits vorhanden.\n
  • Befindet sich das gleichnamige Dossier im Papierkorb, können Sie es endgültig löschen, um den Namen erneut zu verwenden.
  • \n
  • Ist das gleichnamige Dossier aktiv oder archiviert, verwenden Sie bitte einen anderen Namen.
", "generic": "Dossier konnte nicht gespeichert werden." }, "form": { "description": { "label": "Beschreibung", - "placeholder": "Bitte geben Sie eine Beschreibung ein." + "placeholder": "Beschreibung eingeben" }, "due-date": "Termin", "name": { "label": "Dossier-Name", - "placeholder": "Geben Sie einen Namen ein." + "placeholder": "Namen eingeben" }, "template": { "label": "Dossier-Vorlage", - "placeholder": "Choose dossier template" + "placeholder": "Dossier-Vorlage auswählen" } }, "header-new": "Dossier erstellen", @@ -60,34 +60,34 @@ }, "add-edit-clone-dossier-template": { "error": { - "conflict": "Dossiervorlage konnte nicht erstellt werden: Es existiert bereits eine Dossiervorlage mit demselben Namen." + "conflict": "Es gibt bereits eine Dossier-Vorlage mit dem angegebenen Namen.

Bitte wählen Sie einen anderen Namen." }, "form": { "apply-updates-default": { - "description": "Apply dictionary updates to all dossiers by default", - "heading": "Entity configuration" + "description": "Änderungen am Wörterbuch standardmäßig auf alle Dossiers anwenden", + "heading": "Konfiguration für Entitäten" }, "description": "Beschreibung", "description-placeholder": "Beschreibung eingeben", "hidden-text": { - "description": "Hidden text is invisible to human readers but can be detected and read by software and machines. For example, the OCR output of scanned documents is stored as hidden text.", - "heading": "Hidden elements in redacted documents", - "title": "Keep hidden text" + "description": "Versteckter Text ist für menschliche Leser nicht sichtbar, kann jedoch von Software und Maschinen erkannt und gelesen werden. Der OCR-Output von gescannten Dokumenten wird beispielsweise als versteckter Text gespeichert.", + "heading": "Versteckte Elemente in geschwärzten Dokumenten", + "title": "Versteckten Text beibehalten" }, "image-metadata": { "description": "Images in documents might contain additional information as metadata. This could include the creator, the date or the location of the image.", - "title": "Keep image metadata" + "title": "Bildmetadaten beibehalten" }, "name": "Name der Dossier-Vorlage", "name-placeholder": "Namen eingeben", "overlapping-elements": { "description": "Overlapping elements in the document can potentially contain hidden sensitive information. Removing overlapping elements may result in a bigger file size and an increased processing duration.", - "title": "Keep overlapping elements" + "title": "Überlappende Elemente beibehalten" }, "upload-settings": { - "heading": "Upload settings", - "ocr-by-default": "Automatically perform OCR on document upload", - "remove-watermark": "Remove watermarks before processing OCR" + "heading": "Upload-Einstellungen", + "ocr-by-default": "OCR beim Upload von Dokumenten automatisch durchführen", + "remove-watermark": "Wasserzeichen vor OCR-Verarbeitung entfernen" }, "valid-from": "Gültig ab", "valid-to": "Gültig bis" @@ -109,14 +109,14 @@ }, "add-edit-dossier-state": { "form": { - "color": "HEX color", + "color": "HEX-Farbcode", "color-placeholder": "#", - "name": "Status name", - "name-placeholder": "Enter name", - "rank": "Rank" + "name": "Name des Status", + "name-placeholder": "Namen eingeben", + "rank": "Rang" }, - "save": "Save state", - "success": "Dossier state {type, select, edit{has been updated} create{creation successful} other{}}.", + "save": "Status speichern", + "success": "Dossier-Status {type, select, edit{wurde aktualisiert} create{wurde erstellt} other{}}.", "title": "{type, select, edit{Edit {name}} create{Create} other{}} dossier state" }, "add-edit-entity": { @@ -124,32 +124,32 @@ "case-sensitive": "Case-sensitive", "color": "{type, select, redaction{Redaction} hint{Hint} recommendation{Recommendation} skipped{Skipped redaction} ignored{Ignored hint} other{}} color", "color-placeholder": "#", - "default-reason": "Default reason", + "default-reason": "Standard-Schwärzungsgrund", "default-reason-placeholder": "No default reason", - "description": "Description", - "description-placeholder": "Enter description", - "dossier-dictionary-only": "Dossier dictionary only", + "description": "Beschreibung", + "description-placeholder": "Beschreibung eingeben", + "dossier-dictionary-only": "Nur Dossier-Wörterbuch", "has-dictionary": "Has dictionary", - "hint": "Hint", + "hint": "Hinweis", "manage-entries-in-dictionary-editor-only": "Available in add/edit dialogs", - "name": "Display name", + "name": "Anzeigename", "name-placeholder": "Enter name", "rank": "Rank", "rank-placeholder": "1000", "redaction": "Redaction", "technical-name": "Technical name", - "technical-name-hint": "{type, select, edit{Auto-generated based on the initial display name.} create{Is auto-generates based on the display name and cannot be edited after saving.} other{}}", + "technical-name-hint": "{type, select, edit{Auto-generated based on the initial display name.} create{Is auto-generated based on the display name and cannot be edited after saving.} other{}}", "template-and-dossier-dictionaries": "Template & dossier dictionaries" }, "success": { "create": "Success: Entity created.", - "edit": "Entity updated.

Please note that other users need to refresh their browsers to see your changes." + "edit": "Success: Entity updated.

Please ask the users to refresh the browser to see the changes." } }, "add-edit-file-attribute": { "form": { - "column-header": "CSV-Spaltenüberschrift", - "column-header-placeholder": "Spaltenüberschrift für CSV eingeben", + "column-header": "", + "column-header-placeholder": "", "displayed-disabled": "Die maximale Anzahl angezeigter Attribute ({maxNumber}) wurde erreicht.", "displayedInFileList": "Wird in der Dokumentenliste angezeigt", "filterable": "Filterbar", @@ -161,7 +161,7 @@ "type": "Typ" }, "save": "Attribut speichern", - "title": "{type, select, edit{Edit {name}} create{Add New} other{}} Datei-Attribut" + "title": "" }, "add-edit-justification": { "actions": { @@ -172,11 +172,11 @@ "description": "Beschreibung", "description-placeholder": "Beschreibung eingeben", "name": "Name", - "name-placeholder": "Name eingeben", - "reason": "Rechtliche Grundlage", + "name-placeholder": "Namen eingeben", + "reason": "Rechtsgrundlage", "reason-placeholder": "Rechtsgrundlage eingeben" }, - "title": "{type, select, edit{Edit {name}} create{Add New} other{}} Begründung" + "title": "" }, "add-edit-user": { "actions": { @@ -186,8 +186,8 @@ "save-changes": "Änderungen speichern" }, "error": { - "email-already-used": "Diese E-Mail-Adresse wird bereits von einem anderen Benutzer verwendet!", - "generic": "Benutzer konnte nicht gespeichert werden!" + "email-already-used": "", + "generic": "" }, "form": { "email": "E-Mail", @@ -199,21 +199,21 @@ "title": "{type, select, edit{Benutzer bearbeiten} create{Neuen Benutzer hinzufügen} other{}}" }, "add-entity": { - "save": "Wörterbuch speichern", - "title": "Wörterbuch erstellen" + "save": "Entität speichern", + "title": "Entität erstellen" }, "add-hint": { "dialog": { "actions": { - "cancel": "Cancel", - "save": "Save" + "cancel": "Abbrechen", + "save": "Speichern" }, "content": { - "comment": "Comment", - "comment-placeholder": "Add remarks or notes...", + "comment": "Kommentar", + "comment-placeholder": "Bemerkungen oder Notizen hinzufügen...", "options": { "in-dossier": { - "description": "Add hint in every document in {dossierName}.", + "description": "Hinweis zu jedem Dokument in {dossierName} hinzufügen.", "extraOptionLabel": "Apply to all active and future dossiers", "label": "Add hint in dossier" }, @@ -222,8 +222,8 @@ "label": "Add hint only here" } }, - "selected-text": "Selected text:", - "type": "Type", + "selected-text": "Ausgewählter Text:", + "type": "Typ", "type-placeholder": "Select type..." }, "title": "Add hint" @@ -234,13 +234,13 @@ "component-rule-editor": "", "configurations": "Configurations", "default-colors": "Default colors", - "dictionary": "Dictionary", + "dictionary": "Wörterbuch", "digital-signature": "Digital signature", "dossier-attributes": "Dossier attributes", "dossier-states": "Dossier states", "dossier-template-info": "Info", "dossier-templates": "Dossier-Vorlage", - "entities": "Entities", + "entities": "Entitäten", "entity-info": "Info", "entity-rule-editor": "Entity rule editor", "false-positive": "False positive", @@ -357,6 +357,7 @@ }, "annotation-engines": { "dictionary": "{isHint, select, true{Hint} other{Redaction}} basierend auf Wörterbuch", + "dossier-dictionary": "Based on dossier dictionary", "imported": "Imported", "ner": "Redaktion basierend auf KI", "rule": "Schwärzung basierend auf Regel {rule}" @@ -498,7 +499,7 @@ }, "component-log-dialog": { "actions": { - "cancel-edit": "Cancel", + "cancel-edit": "Abbrechen", "close": "Close", "display-by-default": "Display by default when opening documents", "edit": "Edit", @@ -532,7 +533,7 @@ "configurations": "Einstellungen", "confirm-archive-dossier": { "archive": "Archive dossier", - "cancel": "Cancel", + "cancel": "Abbrechen", "checkbox": { "documents": "All documents will be archived and cannot be returned to active status." }, @@ -554,7 +555,7 @@ "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" }, "confirm-delete-dossier-state": { - "cancel": "Cancel", + "cancel": "Abbrechen", "delete": "Delete", "delete-replace": "Delete and replace", "form": { @@ -582,7 +583,7 @@ }, "approve-file-without-analysis": { "confirmationText": "Approve without analysis", - "denyText": "Cancel", + "denyText": "Abbrechen", "question": "Analysis required to detect new redactions.", "title": "Warning!" }, @@ -592,7 +593,7 @@ }, "approve-multiple-files-without-analysis": { "confirmationText": "Approve without analysis", - "denyText": "Cancel", + "denyText": "Abbrechen", "question": "Analysis required to detect new redactions for at least one file.", "title": "Warning" }, @@ -714,7 +715,7 @@ }, "download": "Download current entries", "error": { - "400": "Cannot update dictionary because at least one of the newly added words where recognized as a general term that appear too often in texts.", + "400": "Dictionary update failed.

One or more of the newly added terms have been identified as frequently used general term. Please remove these terms to proceed with the upate. ", "generic": "Es ist ein Fehler aufgetreten ... Das Wörterbuch konnte nicht aktualisiert werden!" }, "revert-changes": "Rückgängig machen", @@ -729,7 +730,7 @@ "digital-signature-dialog": { "actions": { "back": "Back", - "cancel": "Cancel", + "cancel": "Abbrechen", "certificate-not-valid-error": "Uploaded certificate is invalid.", "continue": "Continue", "save": "Save configurations", @@ -756,11 +757,11 @@ }, "options": { "kms": { - "description": "Provide a corresponding PEM file containing the certificate, along with Amazon KMS credentials needed for securing the private key.", + "description": "Please upload a PEM file with the certificate and provide Amazon KMS credentials to secure the private key.", "label": "I use an Amazon KMS private key" }, "pkcs": { - "description": "A PKCS#12 file is a file that bundles the private key and the X.509 certificate. The password protection is required to secure the private key. Unprotected PKCS#12 files are not supported.", + "description": "A PKCS#12 file combines your private key with an X.509 certificate. Password protection is essential to secure the private key, as unprotected PKCS#12 files are not supported.", "label": "I want to upload a PKCS#12 file" } }, @@ -999,13 +1000,13 @@ }, "error": { "conflict": "Dossier state with this name already exists", - "generic": "Failed to save dossier state!" + "generic": "Failed to save dossier state." }, "no-data": { "title": "There are no dossier states." }, "no-match": { - "title": "No dossier states match your current filters." + "title": "No dossier state matches the currently selected filters." }, "search": "Search...", "table-col-names": { @@ -1080,8 +1081,8 @@ }, "dossier-watermark-selector": { "heading": "Watermarks on documents", - "no-watermark": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", - "preview": "Watermark application on preview documents", + "no-watermark": "No watermark available in dossier template:
Please ask your admin to configure a watermark.", + "preview": "Watermark on redacted documents", "watermark": "Watermark application on redacted documents" }, "dossiers-type-switch": { @@ -1101,7 +1102,7 @@ }, "download-includes": "Wählen Sie die Dokumente für Ihr Download-Paket aus", "download-status": { - "error": "The download preparation failed, please recheck the selected files and download option settings.", + "error": "Download generation failed

Please check the selected files and download option settings.", "queued": "Ihr Download wurde zur Warteschlange hinzugefügt. Hier finden Sie alle angeforderten Downloads: My Downloads." }, "download-type": { @@ -1167,7 +1168,7 @@ "edit-button-tooltip": "Edit dossier dictionary settings", "edit-dialog": { "add-to-dictionary-action": "Available in add/edit dialogs in this dossier", - "cancel": "Cancel", + "cancel": "Abbrechen", "error": { "generic": "Failed to update flag." }, @@ -1200,7 +1201,7 @@ } }, "header": "{dossierName} bearbeiten", - "missing-owner": "You cannot edit the dossier because the owner is missing!", + "missing-owner": "Editing the dossier not possible: No owner assigned.", "nav-items": { "choose-download": "Wählen Sie die Dokumente für Ihr Download-Paket aus:", "dictionary": "Wörterbücher", @@ -1217,12 +1218,12 @@ "edit-redaction": { "dialog": { "actions": { - "cancel": "Cancel", + "cancel": "Abbrechen", "save": "Save changes" }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or notes...", + "comment-placeholder": "Bemerkungen oder Notizen hinzufügen...", "custom-rectangle": "Custom Rectangle", "imported": "Imported Redaction", "legal-basis": "Legal basis", @@ -1249,7 +1250,7 @@ "entities-listing": { "action": { "delete": "Wörterbuch löschen", - "edit": "Wörterbuch bearbeiten" + "edit": "Entität bearbeiten" }, "add-new": "Neues Wörterbuch", "bulk": { @@ -1279,18 +1280,18 @@ "revert": "Revert", "save": "Save changes" }, - "heading": "Edit entity" + "heading": "Entität bearbeiten" } }, "entity-rules-screen": { "error": { - "generic": "An error ocurred... Entity rules update failed!" + "generic": "Error: Entity rules update failed." }, "errors-found": "{errors, plural, one{An error} other{{errors} errors}} found in rules", "revert-changes": "Revert", "save-changes": "Save changes", "success": { - "generic": "Entity rules updated!" + "generic": "Entity rules updated." }, "title": "Entity rule editor", "warning-text": "Warning: experimental feature!", @@ -1313,12 +1314,12 @@ }, "file-preview": { "action": "Refresh", - "label": "An unknown error occurred. Please refresh the page" + "label": "Unknown error: Please refresh the page." }, "http": { "generic": "Aktion mit Code {status} fehlgeschlagen" }, - "missing-types": "The dossier template has missing types ({missingTypes}). Data might not be displayed correctly.", + "missing-types": "Dossier template incomplete: missing types ({missingTypes}) may cause data display issues.", "offline": "Du bist offline", "online": "Du bist online", "reload": "Neu laden", @@ -1328,7 +1329,7 @@ "file": "Datei", "file-attribute": { "update": { - "error": "Failed to update file attribute value!", + "error": "Update of file attribute value failed. Please try again.", "success": "File attribute value has been updated successfully!" } }, @@ -1343,7 +1344,7 @@ "text": "Freier Text" }, "file-attributes-configurations": { - "cancel": "Cancel", + "cancel": "Abbrechen", "form": { "delimiter": "Delimiter", "encoding-type": "Encoding type", @@ -1525,7 +1526,7 @@ } }, "text-highlights": "Earmarks", - "text-highlights-tooltip": "Shows all text earmarks and allows removing or importing them as redactions", + "text-highlights-tooltip": "Earmark allows removing text highlights or converting them into redactions.", "toggle-analysis": { "disable": "Schwärzen deaktivieren", "enable": "Schwärzen aktivieren", @@ -1656,18 +1657,18 @@ }, "highlight-action-dialog": { "actions": { - "cancel": "Cancel" + "cancel": "Abbrechen" }, "convert": { "confirmation": "The {count} selected {count, plural, one{earmark} other{earmarks}} will be converted", - "details": "All earmarks from the document will be converted to imported redactions, using the color defined by the application admin.", + "details": "All earmarks in the document will be converted into imported redactions. Imported redactions are highlighted in the color configured in the 'Default colors' section of the app.", "options": { "all-pages": { "description": "The earmarks in the selected HEX color will be converted on all pages of the document.", "label": "Convert on all pages" }, "this-page": { - "description": "The earmarks in the selected HEX color will be converted only on the current page in view.", + "description": "The earmarks in the selected HEX color will be converted only on the currently viewed page.", "label": "Convert only on this page" } }, @@ -1681,14 +1682,14 @@ }, "remove": { "confirmation": "The {count} selected {count, plural, one{earmark} other{earmarks}} will be removed from the document", - "details": "Removing earmarks from the document will delete all the rectangles and leave a white background behind the highlighted text.", + "details": "Removing earmarks from the document will delete all colored rectangles and leave a white background behind the previously highlighted text.", "options": { "all-pages": { "description": "The earmarks in the selected HEX color will be removed on all pages of the document.", "label": "Remove on all pages" }, "this-page": { - "description": "The earmarks in the selected HEX color will be removed only on the current page in view.", + "description": "The earmarks in the selected HEX color will be converted only on the currently viewed page.", "label": "Remove only on this page" } }, @@ -1706,13 +1707,13 @@ }, "import-redactions-dialog": { "actions": { - "cancel": "Cancel", + "cancel": "Abbrechen", "import": "Import" }, "details": "To apply redactions from another document, you first need to upload it.", "http": { "error": "Failed to import redactions! {error}", - "success": "Redactions have been imported!" + "success": "Redactions have been imported." }, "import-only-for-pages": "Import only for pages", "range": { @@ -1796,8 +1797,8 @@ } }, "license-information": "Lizenzinformationen", - "load-all-annotations-success": "All annotations were loaded and are now visible in the document thumbnails", - "load-all-annotations-threshold-exceeded": "Caution, document contains more than {threshold} annotations. Drawing all annotations will affect the performance of the app and could even block it. Do you want to proceed?", + "load-all-annotations-success": "All annotations were loaded and are now visible in the document thumbnails.", + "load-all-annotations-threshold-exceeded": "Alert: Document contains more than {threshold} annotations. Drawing all annotations may cause the app to slow down or freeze. Do you still want to continue?", "load-all-annotations-threshold-exceeded-checkbox": "Do not show this warning again", "loading": "Loading", "manual-annotation": { @@ -1898,12 +1899,12 @@ "ocr": { "confirmation-dialog": { "cancel": "Cancel", - "question": "Manual changes could get lost if OCR makes changes at those positions. Are you sure you want to proceed?", + "question": "Manual changes may be overwritten if the OCR makes changes at the respective positions. Do you still want to proceed?", "title": "Warning: The file contains manual changes!" } }, "overwrite-files-dialog": { - "archive-question": "Dossier is not empty, so files might overlap with the contents of the archive you are uploading. Choose how to proceed in case of duplicates:", + "archive-question": "Dossier already contains files. Files might overlap with the contents of the folder you are uploading. Select how to handle duplicates:", "archive-title": "Uploading a ZIP archive", "file-question": "{filename} ist bereits vorhanden. Wie möchten Sie fortfahren?", "file-title": "Das Dokument existiert bereits!", @@ -1912,16 +1913,16 @@ "cancel": "Alle Uploads abbrechen", "current-files": "Apply to current file", "full-overwrite": { - "description": "Manual changes done to the existing file will be removed and you are able to start over with redactions.", + "description": "Remove all manual changes made to the file, and start reviewing a freshly processed file.", "label": "Overwrite and start over" }, "partial-overwrite": { - "description": "Manual changes are kept only if the affected redactions are still at the same position in the file. Some redactions could be misplaced if the content of the file changed.", + "description": "Keep manual changes if the affected redactions remain in their original positions. Some redactions could be misplaced if the content has changed.", "label": "Overwrite and keep manual changes" }, "proceed": "Proceed", "skip": { - "description": "The upload will be skipped and the existing file will not be replaced.", + "description": "Skip the file upload and do not replace the existing file.", "label": "Keep the existing file and do not overwrite" } }, @@ -1976,7 +1977,7 @@ "form": { "auto-expand-filters-on-action": "Auto-expand filters on my actions", "help-mode-dialog": "Help mode activation dialog", - "load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview", + "load-all-annotations-warning": "Warning regarding simultaneous loading of all annotations in thumbnails", "open-structured-view-by-default": "Display structured component management modal by default", "table-extraction-type": "Table extraction type" }, @@ -2006,7 +2007,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or notes...", + "comment-placeholder": "Bemerkungen oder Notizen hinzufügen...", "edit-text": "Edit text", "legal-basis": "Legal basis", "options": { @@ -2040,7 +2041,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or notes...", + "comment-placeholder": "Bemerkungen oder Notizen hinzufügen...", "list-item": "", "list-item-false-positive": "", "options": { @@ -2074,7 +2075,7 @@ }, "content": { "comment": "Comment", - "comment-placeholder": "Add remarks or notes...", + "comment-placeholder": "Bemerkungen oder Notizen hinzufügen...", "options": { "do-not-recommend": { "description": "Do not recommend the selected term in any document of this dossier.", @@ -2129,9 +2130,10 @@ }, "redaction": { "entity": { - "display-name": "This placeholder is replaced by the name of the entity the redaction is based on." + "display-name": "This placeholder is replaced by the name of the entity on which the redaction is based." }, "excerpt": "Dieser Platzhalter wird durch einen Textausschnitt ersetzt, der die Schwärzung enthält.", + "is-skipped": "The skipped redaction placeholder indicates whether a redaction is skipped or not. It can be included in a separate column of a template that also contains the '{{redaction.value'}} placeholder. The placeholder is replaced by “true” if the respective redaction is skipped, and by “false” if it is redacted (i. e., not skipped).", "justification": "Dieser Platzhalter wird durch die Begründung der Schwärzung ersetzt. Es ist eine Kombination aus dem Rechtsverweis (justificationParagraph) und dem Begründungstext (justificationReason).", "justification-legal-basis": "This placeholder is replaced by the legal basis for the redaction.", "justification-paragraph": "Dieser Platzhalter wird durch den Rechtshinweis der Begründung der Redaktion ersetzt.", @@ -2139,6 +2141,7 @@ "justification-text": "This placeholder is replaced by the justification text.", "page": "Dieser Platzhalter wird durch die Seitenzahl der Redaktion ersetzt.", "paragraph": "Dieser Platzhalter wird durch den Absatz ersetzt, der die Schwärzung enthält.", + "paragraph-idx": "The placeholder is replaced by the number of the paragraph containing the redaction. Paragraphs are numbered on a per-page basis.", "value": "This placeholder is replaced by the value that was redacted." }, "time": { @@ -2422,7 +2425,7 @@ }, "title": "Profil bearbeiten", "update": { - "success": "Successfully updated profile!" + "success": "Successfully updated profile." } }, "user-stats": { @@ -2444,7 +2447,7 @@ "watermark-screen": { "action": { "change-success": "Das Wasserzeichen wurde aktualisiert!", - "created-success": "Watermark has been created!", + "created-success": "Watermark has been created.", "error": "Fehler beim Aktualisieren des Wasserzeichens", "revert": "Rückgängig machen", "save": "Änderungen speichern" @@ -2474,7 +2477,7 @@ "watermarks-listing": { "action": { "delete": "Delete", - "delete-success": "Watermark has been deleted!", + "delete-success": "Watermark has been deleted.", "edit": "Edit" }, "add-new": "New watermark", diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index be3b8898c..31326cfda 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -138,12 +138,12 @@ "rank-placeholder": "1000", "redaction": "Redaction", "technical-name": "Technical name", - "technical-name-hint": "{type, select, edit{Auto-generated based on the initial display name.} create{Is auto-generates based on the display name and cannot be edited after saving.} other{}}", + "technical-name-hint": "{type, select, edit{Auto-generated based on the initial display name.} create{Is auto-generated based on the display name and cannot be edited after saving.} other{}}", "template-and-dossier-dictionaries": "Template & dossier dictionaries" }, "success": { "create": "Success: Entity created.", - "edit": "Entity updated.

Please note that other users need to refresh their browsers to see your changes." + "edit": "Success: Entity updated.

Please ask the users to refresh the browser to see the changes." } }, "add-edit-file-attribute": { @@ -715,13 +715,13 @@ }, "download": "Download current entries", "error": { - "400": "Cannot update dictionary because at least one of the newly added words where recognized as a general term that appear too often in texts.", - "generic": "An error occurred... Dictionary update failed!" + "400": "Dictionary update failed.

One or more of the newly added terms have been identified as frequently used general term. Please remove these terms to proceed with the upate. ", + "generic": "Error: Dictionary update failed." }, "revert-changes": "Revert", "save-changes": "Save changes", "search": "Search entries...", - "select-dictionary": "Select a dictionary above to compare with the current one.", + "select-dictionary": "Select a dictionary for comparison above.", "success": { "generic": "Dictionary updated" } @@ -757,11 +757,11 @@ }, "options": { "kms": { - "description": "Provide a corresponding PEM file containing the certificate, along with Amazon KMS credentials needed for securing the private key.", + "description": "Please upload a PEM file with the certificate and provide Amazon KMS credentials to secure the private key.", "label": "I use an Amazon KMS private key" }, "pkcs": { - "description": "A PKCS#12 file is a file that bundles the private key and the X.509 certificate. The password protection is required to secure the private key. Unprotected PKCS#12 files are not supported.", + "description": "A PKCS#12 file combines your private key with an X.509 certificate. Password protection is essential to secure the private key, as unprotected PKCS#12 files are not supported.", "label": "I want to upload a PKCS#12 file" } }, @@ -783,7 +783,7 @@ }, "no-data": { "action": "Configure certificate", - "title": "No digital signature certificate.
For signing redacted documents please configure a certificate." + "title": "No digital signature certificate available.
Please configure a certificate to sign redacted documents." } }, "document-info": { @@ -886,7 +886,7 @@ }, "dossier-overview": { "approve": "Approve", - "approve-disabled": "File can only be approved once it has been analysed with the latest dictionaries.", + "approve-disabled": "File can only be approved once it has been analyzed with the latest set of business rules and terms stored in the system dictionaries.", "assign-approver": "Assign approver", "assign-me": "Assign to me", "assign-reviewer": "Assign user", @@ -921,7 +921,7 @@ } }, "download-file": "Download", - "download-file-disabled": "You need to be approver in the dossier and the {count, plural, one{file needs} other{files need}} to be initially processed in order to download.", + "download-file-disabled": "To download, ensure you are an approver in the dossier, and the {count, plural, one{file has undergone} other{files have undergone}} initial processing.", "file-listing": { "file-entry": { "file-error": "Re-processing required", @@ -1000,13 +1000,13 @@ }, "error": { "conflict": "Dossier state with this name already exists", - "generic": "Failed to save dossier state!" + "generic": "Failed to save dossier state." }, "no-data": { "title": "There are no dossier states." }, "no-match": { - "title": "No dossier states match your current filters." + "title": "No dossier state matches the currently selected filters." }, "search": "Search...", "table-col-names": { @@ -1048,8 +1048,8 @@ }, "entities": "{length} {length, plural, one{entity} other{entities}}", "error": { - "conflict": "Cannot delete this dossier template. At least one dossier uses this template.", - "generic": "Cannot delete this dossier template!" + "conflict": "Deletion denied: This dossier template is used by at least one dossier and cannot be deleted.", + "generic": "Cannot delete this dossier template." }, "no-data": { "title": "There are no dossier templates yet." @@ -1081,8 +1081,8 @@ }, "dossier-watermark-selector": { "heading": "Watermarks on documents", - "no-watermark": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", - "preview": "Watermark application on preview documents", + "no-watermark": "No watermark available in dossier template:
Please ask your admin to configure a watermark.", + "preview": "Watermark on redacted documents", "watermark": "Watermark application on redacted documents" }, "dossiers-type-switch": { @@ -1100,10 +1100,10 @@ "header": "Download options", "unapproved-files-warning": "This download contains unapproved file(s)." }, - "download-includes": "Choose what is included at download:", + "download-includes": "Select the documents for your download:", "download-status": { - "error": "The download preparation failed, please recheck the selected files and download option settings.", - "queued": "Your download has been queued, you can see all your requested downloads here:
My downloads." + "error": "Download generation failed

Please check the selected files and download option settings.", + "queued": "Your download has been added to the queue.

To see your requested downloads, visit:
My downloads." }, "download-type": { "annotated": "Annotated PDF", @@ -1143,7 +1143,7 @@ "color-placeholder": "Color" }, "save": "Save", - "success": "Success: Color saved.

Please note that other users need to refresh their browsers to see your changes." + "success": "Success: Color saved.

Please ask the users to refresh the browser to see the changes." }, "edit-dossier-dialog": { "actions": { @@ -1155,7 +1155,7 @@ "custom-attributes": "Custom dossier attributes", "delete-image": "Delete image", "error": { - "generic": "Only PNG, JPG and JPEG files are allowed as image dossier attributes." + "generic": "Supported image formats: PNG, JPG, and JPEG." }, "image-attributes": "Image attributes", "no-custom-attributes": "There are no text attributes", @@ -1201,9 +1201,9 @@ } }, "header": "Edit {dossierName}", - "missing-owner": "You cannot edit the dossier because the owner is missing!", + "missing-owner": "Editing the dossier not possible: No owner assigned.", "nav-items": { - "choose-download": "Choose what is included at download:", + "choose-download": "Select the documents for your download:", "dictionary": "Dictionaries", "dossier-attributes": "Dossier attributes", "dossier-dictionary": "Dictionaries", @@ -1261,7 +1261,7 @@ "title": "There are no entities yet." }, "no-match": { - "title": "No entities match your current filters." + "title": "No entity matches your currently selected filters." }, "search": "Search...", "table-col-names": { @@ -1276,13 +1276,13 @@ }, "entity-rules-screen": { "error": { - "generic": "An error ocurred... Entity rules update failed!" + "generic": "Error: Entity rules update failed." }, "errors-found": "{errors, plural, one{An error} other{{errors} errors}} found in rules", "revert-changes": "Revert", "save-changes": "Save changes", "success": { - "generic": "Entity rules updated!" + "generic": "Entity rules updated." }, "title": "Entity rule editor", "warning-text": "Warning: experimental feature!", @@ -1314,16 +1314,16 @@ }, "file-preview": { "action": "Refresh", - "label": "An unknown error occurred. Please refresh the page" + "label": "Unknown error: Please refresh the page." }, "http": { - "generic": "Action failed with code {status}" + "generic": "Action failed. Error code: {status}" }, - "missing-types": "The dossier template has missing types ({missingTypes}). Data might not be displayed correctly.", + "missing-types": "Dossier template incomplete: missing types ({missingTypes}) may cause data display issues.", "offline": "Disconnected", "online": "Reconnected", "reload": "Reload", - "title": "Oops! Something went wrong..." + "title": "An error ocurred." }, "exact-date": "{day} {month} {year} at {hour}:{minute}", "file": "File", @@ -1339,7 +1339,7 @@ }, "file-attribute": { "update": { - "error": "Failed to update file attribute value!", + "error": "Update of file attribute value failed. Please try again.", "success": "File attribute value has been updated successfully!" } }, @@ -1375,9 +1375,9 @@ "key-column": "Key column", "key-column-placeholder": "Select column...", "no-data": { - "title": "No file attributes defined. Select a column from the left panel to start defining file attributes." + "title": "No file attributes defined. Select a CSV column from the left to start defining file attributes." }, - "no-hovered-column": "Preview CSV column by hovering the entry.", + "no-hovered-column": "Preview CSV column by hovering over the entry.", "no-sample-data-for": "No sample data for {column}.", "parse-csv": "Parse CSV with new options", "quick-activation": { @@ -1396,7 +1396,7 @@ "table-col-names": { "name": "Name", "primary": "Primary", - "primary-info-tooltip": "The value of the attribute set as primary shows up under the file name in the documents list.", + "primary-info-tooltip": "The value of the attribute set as primary is diplayed below the file name in the document list.", "read-only": "Read-only", "type": "Type" }, @@ -1424,7 +1424,7 @@ }, "configurations": "Configurations", "error": { - "conflict": "File attribute with this name already exists!", + "conflict": "File attribute name already exists. Please try another name.", "generic": "Failed to add file attribute" }, "no-data": { @@ -1441,7 +1441,7 @@ "filterable": "Filterable", "name": "Name", "primary": "Primary", - "primary-info-tooltip": "The value of the attribute set as primary shows up under the file name in the documents list.", + "primary-info-tooltip": "The value of the attribute set as primary is diplayed below the file name in the document list.", "read-only": "Read-only", "type": "Input type" }, @@ -1455,7 +1455,7 @@ "assign-reviewer": "Assign user", "change-reviewer": "Change user", "delta": "Delta", - "delta-tooltip": "The delta view shows the unseen changes since your last visit to the page. This view is only available if there is at least 1 change.", + "delta-tooltip": "Delta shows the unseen changes since your last visit to the page. It is only available if there has been at least 1 change.", "document-info": "Document info", "download-original-file": "Download original file", "exclude-pages": "Exclude pages from redaction", @@ -1479,7 +1479,7 @@ "redacted": "Preview", "redacted-tooltip": "Redaction preview shows only redactions. Consider this a preview for the final redacted version. This view is only available if the file has no pending changes & doesn't require a reanalysis", "standard": "Standard", - "standard-tooltip": "Standard workload view shows all hints, redactions & recommendations. This view allows editing.", + "standard-tooltip": "Standard shows all annotation types and allows for editing.", "tabs": { "annotations": { "hide-skipped": "Hide skipped in document", @@ -1526,7 +1526,7 @@ } }, "text-highlights": "Earmarks", - "text-highlights-tooltip": "Shows all text earmarks and allows removing or importing them as redactions", + "text-highlights-tooltip": "Earmark allows removing text highlights or converting them into redactions.", "toggle-analysis": { "disable": "Disable redaction", "enable": "Enable for redaction", @@ -1641,19 +1641,19 @@ "title": "System preferences" }, "test": { - "error": "Test e-mail could not be sent! Please revise the e-mail address.", + "error": "Test e-mail could not be sent. Please double-check the email address.", "success": "Test e-mail was sent successfully!" }, "title": "Configure SMTP account" }, "help-mode": { "bottom-text": "Help mode", - "clicking-anywhere-on": " Clicking anywhere on the screen will show you which areas are interactive. Hovering an interactive area will change the mouse cursor to let you know if the element is interactive.", + "clicking-anywhere-on": "Click anywhere on the screen to display the interactive elements. When you hover over an interactive element, the mouse cursor changes to show the element is clickable.", "instructions": "Open help mode instructions", "options": { "do-not-show-again": "Do not show again" }, - "welcome-to-help-mode": " Welcome to help mode!
Clicking on interactive elements will open info about them in new tab.
" + "welcome-to-help-mode": "Welcome to Help Mode!
Click on interactive elements to learn more about their functionality in a new tab." }, "highlight-action-dialog": { "actions": { @@ -1661,14 +1661,14 @@ }, "convert": { "confirmation": "The {count} selected {count, plural, one{earmark} other{earmarks}} will be converted", - "details": "All earmarks from the document will be converted to imported redactions, using the color defined by the application admin.", + "details": "All earmarks in the document will be converted into imported redactions. Imported redactions are highlighted in the color configured in the 'Default colors' section of the app.", "options": { "all-pages": { "description": "The earmarks in the selected HEX color will be converted on all pages of the document.", "label": "Convert on all pages" }, "this-page": { - "description": "The earmarks in the selected HEX color will be converted only on the current page in view.", + "description": "The earmarks in the selected HEX color will be converted only on the currently viewed page.", "label": "Convert only on this page" } }, @@ -1682,14 +1682,14 @@ }, "remove": { "confirmation": "The {count} selected {count, plural, one{earmark} other{earmarks}} will be removed from the document", - "details": "Removing earmarks from the document will delete all the rectangles and leave a white background behind the highlighted text.", + "details": "Removing earmarks from the document will delete all colored rectangles and leave a white background behind the previously highlighted text.", "options": { "all-pages": { "description": "The earmarks in the selected HEX color will be removed on all pages of the document.", "label": "Remove on all pages" }, "this-page": { - "description": "The earmarks in the selected HEX color will be removed only on the current page in view.", + "description": "The earmarks in the selected HEX color will be converted only on the currently viewed page.", "label": "Remove only on this page" } }, @@ -1713,7 +1713,7 @@ "details": "To apply redactions from another document, you first need to upload it.", "http": { "error": "Failed to import redactions! {error}", - "success": "Redactions have been imported!" + "success": "Redactions have been imported." }, "import-only-for-pages": "Import only for pages", "range": { @@ -1797,8 +1797,8 @@ } }, "license-information": "License Information", - "load-all-annotations-success": "All annotations were loaded and are now visible in the document thumbnails", - "load-all-annotations-threshold-exceeded": "Caution, document contains more than {threshold} annotations. Drawing all annotations will affect the performance of the app and could even block it. Do you want to proceed?", + "load-all-annotations-success": "All annotations were loaded and are now visible in the document thumbnails.", + "load-all-annotations-threshold-exceeded": "Alert: Document contains more than {threshold} annotations. Drawing all annotations may cause the app to slow down or freeze. Do you still want to continue?", "load-all-annotations-threshold-exceeded-checkbox": "Do not show this warning again", "loading": "Loading", "manual-annotation": { @@ -1836,18 +1836,18 @@ "minutes": "minutes", "no-active-license": "Invalid or corrupt license – Please contact your administrator", "notification": { - "assign-approver": "You have been assigned as approver for {fileHref, select, null{{fileName}} other{
{fileName}}} in dossier: {dossierHref, select, null{{dossierName}} other{{dossierName}}}!", - "assign-reviewer": "You have been assigned as reviewer for {fileHref, select, null{{fileName}} other{{fileName}}} in dossier: {dossierHref, select, null{{dossierName}} other{{dossierName}}}!", + "assign-approver": "You have been assigned as approver for a document.
Document: {fileHref, select, null{{fileName}} other{{fileName}}}
Dossier: {dossierHref, select, null{{dossierName}} other{{dossierHref, select, null{{dossierName}} other{{dossierName}}}}}", + "assign-reviewer": "You have been assigned as reviewer for a document.
Document: {fileHref, select, null{{fileName}} other{{fileName}}}
Dossier: {dossierHref, select, null{{dossierName}} other{{dossierHref, select, null{{dossierName}} other{{dossierName}}}}}", "document-approved": " {fileHref, select, null{{fileName}} other{{fileName}}} has been approved!", "dossier-deleted": "Dossier: {dossierName} has been deleted!", "dossier-owner-deleted": "The owner of dossier: {dossierName} has been deleted!", "dossier-owner-removed": "You have been removed as dossier owner from {dossierHref, select, null{{dossierName}} other{{dossierName}}}!", "dossier-owner-set": "You are now the dossier owner of {dossierHref, select, null{{dossierName}} other{{dossierName}}}!", "download-ready": "Your download is ready!", - "no-data": "You currently have no notifications", - "unassigned-from-file": "You have been unassigned from {fileHref, select, null{{fileName}} other{{fileName}}} in dossier: {dossierHref, select, null{{dossierName}} other{{dossierHref, select, null{{dossierName}} other{{dossierName}}}}}!", - "user-becomes-dossier-member": "You have been added to dossier: {dossierHref, select, null{{dossierName}} other{{dossierName}}}!", - "user-demoted-to-reviewer": "You have been demoted to reviewer in dossier: {dossierHref, select, null{{dossierName}} other{{dossierName}}}!", + "no-data": "You currently have no notifications.", + "unassigned-from-file": "You have been unassigned from a document.
Document: {fileHref, select, null{{fileName}} other{{fileName}}}
Dossier: {dossierHref, select, null{{dossierName}} other{{dossierHref, select, null{{dossierName}} other{{dossierName}}}}}", + "user-becomes-dossier-member": "You have been added to a dossier: {dossierHref, select, null{{dossierName}} other{{dossierName}}}", + "user-demoted-to-reviewer": "You have been demoted to reviewer in dossier: {dossierHref, select, null{{dossierName}} other{{dossierName}}}", "user-promoted-to-approver": "You have been promoted to approver in dossier: {dossierHref, select, null{{dossierName}} other{{dossierName}}}!", "user-removed-as-dossier-member": "You have been removed as a member from dossier: {dossierHref, select, null{{dossierName}} other{{dossierName}}}!" }, @@ -1857,7 +1857,7 @@ "in-app-notifications": "In-app notifications" }, "error": { - "generic": "Something went wrong... Preferences update failed!" + "generic": "Error: Preferences update failed." }, "groups": { "document": "Document related notifications", @@ -1899,30 +1899,30 @@ "ocr": { "confirmation-dialog": { "cancel": "Cancel", - "question": "Manual changes could get lost if OCR makes changes at those positions. Are you sure you want to proceed?", + "question": "Manual changes may be overwritten if the OCR makes changes at the respective positions. Do you still want to proceed?", "title": "Warning: The file contains manual changes!" } }, "overwrite-files-dialog": { - "archive-question": "Dossier is not empty, so files might overlap with the contents of the archive you are uploading. Choose how to proceed in case of duplicates:", + "archive-question": "Dossier already contains files. Files might overlap with the contents of the folder you are uploading. Select how to handle duplicates:", "archive-title": "Uploading a ZIP archive", "file-question": "{filename} already exists. Choose how to proceed:", - "file-title": "File already exists!", + "file-title": "File already exists.", "options": { "all-files": "Apply to all files of current upload", "cancel": "Cancel upload", "current-files": "Apply to current file", "full-overwrite": { - "description": "Manual changes done to the existing file will be removed and you are able to start over with redactions.", + "description": "Remove all manual changes made to the file, and start reviewing a freshly processed file.", "label": "Overwrite and start over" }, "partial-overwrite": { - "description": "Manual changes are kept only if the affected redactions are still at the same position in the file. Some redactions could be misplaced if the content of the file changed.", + "description": "Keep manual changes if the affected redactions remain in their original positions. Some redactions could be misplaced if the content has changed.", "label": "Overwrite and keep manual changes" }, "proceed": "Proceed", "skip": { - "description": "The upload will be skipped and the existing file will not be replaced.", + "description": "Skip the file upload and do not replace the existing file.", "label": "Keep the existing file and do not overwrite" } }, @@ -1977,7 +1977,7 @@ "form": { "auto-expand-filters-on-action": "Auto-expand filters on my actions", "help-mode-dialog": "Help mode activation dialog", - "load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview", + "load-all-annotations-warning": "Warning regarding simultaneous loading of all annotations in thumbnails", "open-structured-view-by-default": "Display structured component management modal by default", "table-extraction-type": "Table extraction type" }, @@ -2114,7 +2114,7 @@ "reports-screen": { "description": "Below, you will find a list of placeholders for dossier- and document-specific information. You can include these placeholders in your report templates.", "descriptions": { - "dossier-attributes": "This placeholder gets replaced with the value of the dossier attribute {attribute}.", + "dossier-attributes": "This placeholder is replaced by the value of the dossier attribute {attribute}.", "file-attributes": "This placeholder is replaced with the value of the file attribute {attribute}.", "general": { "date": { @@ -2130,7 +2130,7 @@ }, "redaction": { "entity": { - "display-name": "This placeholder is replaced by the name of the entity the redaction is based on." + "display-name": "This placeholder is replaced by the name of the entity on which the redaction is based." }, "excerpt": "This placeholder is replaced by a text snippet that contains the redaction.", "is-skipped": "The skipped redaction placeholder indicates whether a redaction is skipped or not. It can be included in a separate column of a template that also contains the '{{redaction.value'}} placeholder. The placeholder is replaced by “true” if the respective redaction is skipped, and by “false” if it is redacted (i. e., not skipped).", @@ -2149,7 +2149,7 @@ } } }, - "invalid-upload": "Invalid format selected for upload! Supported formats are XLSX and DOCX", + "invalid-upload": "Invalid upload format. Supported formats: .xlsx and .docx", "multi-file-report": "(Multi-file)", "report-documents": "Report documents", "setup": "Click the upload button on the right to upload your redaction report templates.", @@ -2355,7 +2355,7 @@ "overwrite": "Overwrite" }, "question": "Choose how to proceed:", - "title": "The dictionary already has entries!" + "title": "The dictionary already has entries." }, "upload-file": { "upload-area-text": "Click or drag & drop anywhere on this area..." @@ -2425,7 +2425,7 @@ }, "title": "Edit profile", "update": { - "success": "Successfully updated profile!" + "success": "Successfully updated profile." } }, "user-stats": { @@ -2446,8 +2446,8 @@ }, "watermark-screen": { "action": { - "change-success": "Watermark has been updated!", - "created-success": "Watermark has been created!", + "change-success": "Watermark has been updated.", + "created-success": "Watermark has been created.", "error": "Failed to update watermark", "revert": "Revert", "save": "Save changes" @@ -2477,7 +2477,7 @@ "watermarks-listing": { "action": { "delete": "Delete", - "delete-success": "Watermark has been deleted!", + "delete-success": "Watermark has been deleted.", "edit": "Edit" }, "add-new": "New watermark", diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index f04ac163a..41881e6b1 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -357,6 +357,7 @@ }, "annotation-engines": { "dictionary": "{isHint, select, true{Hint} other{Redaction}} basierend auf Wörterbuch", + "dossier-dictionary": "Annotation based on dossier dictionary", "imported": "Annotation is imported", "ner": "Redaktion basierend auf KI", "rule": "Schwärzung basierend auf Regel {rule}" @@ -2132,6 +2133,7 @@ "display-name": "This placeholder is replaced by the name of the entity the component is based on." }, "excerpt": "Dieser Platzhalter wird durch einen Textausschnitt ersetzt, der die Schwärzung enthält.", + "is-skipped": "The skipped redaction placeholder indicates whether a redaction is skipped or not. It can be included in a separate column of a template that also contains the '{{redaction.value'}} placeholder. The placeholder is replaced by “true” if the respective redaction is skipped, and by “false” if it is redacted (i. e., not skipped).", "justification": "Dieser Platzhalter wird durch die Begründung der Schwärzung ersetzt. Es ist eine Kombination aus dem Rechtsverweis (justificationParagraph) und dem Begründungstext (justificationReason).", "justification-legal-basis": "This placeholder is replaced by the legal basis for the component.", "justification-paragraph": "Dieser Platzhalter wird durch den Rechtshinweis der Begründung der Redaktion ersetzt.", @@ -2139,6 +2141,7 @@ "justification-text": "This placeholder is replaced by the justification text.", "page": "Dieser Platzhalter wird durch die Seitenzahl der Redaktion ersetzt.", "paragraph": "Dieser Platzhalter wird durch den Absatz ersetzt, der die Schwärzung enthält.", + "paragraph-idx": "The placeholder is replaced by the number of the paragraph containing the redaction. Paragraphs are numbered on a per-page basis.", "value": "This placeholder is replaced by the value that was extracted." }, "time": { From eefbe0f7c18584df43ebcc34140cdafa453bebc5 Mon Sep 17 00:00:00 2001 From: project_703_bot_497bb7eb186ca592c63b3e50cd5c69e1 Date: Thu, 6 Jun 2024 01:03:55 +0000 Subject: [PATCH 05/14] push back localazy update --- apps/red-ui/src/assets/i18n/redact/de.json | 5 ++--- apps/red-ui/src/assets/i18n/redact/en.json | 2 +- apps/red-ui/src/assets/i18n/scm/de.json | 5 ++--- apps/red-ui/src/assets/i18n/scm/en.json | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index e8d7e372e..277f0a88a 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -1642,8 +1642,7 @@ }, "test": { "error": "Die Test-E-Mail konnte nicht gesendet werden! Bitte überprüfen Sie die E-Mail-Adresse.", - "success": "Die Test-E-Mail wurde erfolgreich versendet!", - "warning": "" + "success": "Die Test-E-Mail wurde erfolgreich versendet!" }, "title": "SMTP-Konto konfigurieren" }, @@ -2506,4 +2505,4 @@ } }, "yesterday": "Gestern" -} +} \ No newline at end of file diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index c99984b31..20e187968 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -2506,4 +2506,4 @@ } }, "yesterday": "Yesterday" -} +} \ No newline at end of file diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 5e85c036c..41881e6b1 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -1642,8 +1642,7 @@ }, "test": { "error": "Die Test-E-Mail konnte nicht gesendet werden! Bitte überprüfen Sie die E-Mail-Adresse.", - "success": "Die Test-E-Mail wurde erfolgreich versendet!", - "warning": "" + "success": "Die Test-E-Mail wurde erfolgreich versendet!" }, "title": "SMTP-Konto konfigurieren" }, @@ -2506,4 +2505,4 @@ } }, "yesterday": "Gestern" -} +} \ No newline at end of file diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index a63feea13..69bd8a163 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -2506,4 +2506,4 @@ } }, "yesterday": "Yesterday" -} +} \ No newline at end of file From 13c1a2a0b0e0f71d8a9577813a14be1dc5ec7371 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Thu, 6 Jun 2024 18:33:18 +0300 Subject: [PATCH 06/14] RED-9201 - added all mapping actions --- ...it-component-mapping-dialog.component.html | 7 +- ...edit-component-mapping-dialog.component.ts | 58 +++++---- .../component-mappings-screen.component.html | 22 +--- .../component-mappings-screen.component.ts | 39 ++++-- .../component-mappings.service.ts | 116 ++++++++---------- libs/common-ui | 2 +- .../component-mapping-list.model.ts | 16 +++ .../component-mapping.model.ts | 24 ---- .../component-mappings/component-mapping.ts | 36 +++++- .../src/lib/component-mappings/index.ts | 2 +- 10 files changed, 166 insertions(+), 156 deletions(-) create mode 100644 libs/red-domain/src/lib/component-mappings/component-mapping-list.model.ts delete mode 100644 libs/red-domain/src/lib/component-mappings/component-mapping.model.ts diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.html b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.html index bb918f40a..a43c42fcf 100644 --- a/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.html @@ -16,16 +16,15 @@ /> -
+
{{ data.mapping.version }} -
- +
@@ -42,7 +41,7 @@
- + {{ translations[type] | translate }} diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.ts b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.ts index 2a9a4a488..680565a72 100644 --- a/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialogComponent, IqserUploadFileModule } from '@iqser/common-ui'; import { FileAttributeEncodingTypes, IComponentMapping } from '@red/domain'; import { FormBuilder, ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms'; @@ -9,11 +9,20 @@ import { MatDialogClose } from '@angular/material/dialog'; import { MatOption } from '@angular/material/autocomplete'; import { MatSelect } from '@angular/material/select'; import { fileAttributeEncodingTypesTranslations } from '@translations/file-attribute-encoding-types-translations'; +import { firstValueFrom } from 'rxjs'; +import { ComponentMappingsService } from '@services/entity-services/component-mappings.service'; interface DialogData { + dossierTemplateId: string; mapping: IComponentMapping; } -interface DialogResult {} +interface DialogResult { + id: string; + name: string; + file: Blob; + encoding: string; + delimiter: string; +} @Component({ templateUrl: './add-edit-component-mapping-dialog.component.html', @@ -33,37 +42,38 @@ interface DialogResult {} IconButtonComponent, ], }) -export class AddEditComponentMappingDialogComponent extends IqserDialogComponent< - AddEditComponentMappingDialogComponent, - DialogData, - DialogResult -> { +export class AddEditComponentMappingDialogComponent + extends IqserDialogComponent + implements OnInit +{ protected readonly encodingTypeOptions = Object.keys(FileAttributeEncodingTypes); protected readonly translations = fileAttributeEncodingTypesTranslations; protected readonly iconButtonTypes = IconButtonTypes; + activeFile: File; form!: UntypedFormGroup; - constructor(private readonly _formBuilder: FormBuilder) { + constructor( + private readonly _formBuilder: FormBuilder, + private readonly _componentMappingService: ComponentMappingsService, + ) { super(); - this.form = this.#getForm(); } - get file() { - return this.form.get('file').value; + async ngOnInit() { + if (this.data.mapping?.fileName) { + this.activeFile = { name: this.data.mapping.fileName } as File; + const fileContent = await firstValueFrom( + this._componentMappingService.getComponentMappingFile(this.data.dossierTemplateId, this.data.mapping.id), + ); + const file = new Blob([fileContent], { type: 'text/csv' }); + this.form.get('file').setValue(file); + this.initialFormValue = this.form.getRawValue(); + } } - fileChanged(file: Blob | null) { - if (file) { - const fileReader = new FileReader(); - fileReader.onload = () => { - const binaryContent = fileReader.result; - this.form.get('file').setValue(binaryContent); - }; - fileReader.readAsBinaryString(file as Blob); - } else { - this.form.controls['file'].setValue(''); - } + fileChanged(file: Blob) { + this.form.get('file').setValue(file); } save() { @@ -73,9 +83,9 @@ export class AddEditComponentMappingDialogComponent extends IqserDialogComponent #getForm(): UntypedFormGroup { return this._formBuilder.group({ name: [this.data?.mapping?.name, Validators.required], - file: [this.data?.mapping?.file, Validators.required], + file: [null, Validators.required], + encoding: this.encodingTypeOptions.find(e => e === this.data?.mapping?.encoding) ?? this.encodingTypeOptions[0], delimiter: [this.data?.mapping?.delimiter ?? ',', Validators.required], - encodingType: this.encodingTypeOptions.find(e => e === this.data?.mapping?.encodingType) ?? this.encodingTypeOptions[0], }); } } diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.html index 863ea0597..ad4765486 100644 --- a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.html @@ -20,14 +20,7 @@
- +
@@ -51,17 +44,6 @@
- - - - - -
@@ -69,7 +51,7 @@
- {{ entity.value }} + {{ entity.version }}
diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts index 085dcefd9..3044059f0 100644 --- a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts @@ -11,13 +11,14 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { defaultColorsTranslations } from '@translations/default-colors-translations'; import { Roles } from '@users/roles'; import { getCurrentUser } from '@common-ui/users'; -import { User } from '@red/domain'; +import { DOSSIER_TEMPLATE_ID, User } from '@red/domain'; import { ComponentMapping } from '@red/domain'; import { combineLatest, firstValueFrom } from 'rxjs'; import { ComponentMappingsService } from '@services/entity-services/component-mappings.service'; -import { tap } from 'rxjs/operators'; +import { map, tap } from 'rxjs/operators'; import { AddEditComponentMappingDialogComponent } from './add-edit-component-mapping-dialog/add-edit-component-mapping-dialog.component'; import { AdminDialogService } from '../../services/admin-dialog.service'; +import { getParam } from '@common-ui/utils'; @Component({ templateUrl: './component-mappings-screen.component.html', @@ -27,14 +28,15 @@ import { AdminDialogService } from '../../services/admin-dialog.service'; export class ComponentMappingsScreenComponent extends ListingComponent implements OnInit { tableColumnConfigs: readonly TableColumnConfig[] = [ { label: _('component-mappings-screen.table-col-names.name'), sortByKey: 'searchKey' }, - { label: _('component-mappings-screen.table-col-names.version'), width: '2fr' }, + { label: _('component-mappings-screen.table-col-names.version') }, ]; readonly tableHeaderLabel = _('component-mappings-screen.table-header.title'); - readonly context$; + protected readonly context$; protected readonly currentUser = getCurrentUser(); protected readonly translations = defaultColorsTranslations; protected readonly roles = Roles; protected readonly iconButtonTypes = IconButtonTypes; + readonly #dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID); constructor( private readonly _loadingService: LoadingService, @@ -43,8 +45,13 @@ export class ComponentMappingsScreenComponent extends ListingComponent this.entitiesService.setEntities(mappings)), + this.context$ = this.loadData$(); + } + + loadData$() { + return combineLatest([this._componentMappingService.getComponentMappings(this.#dossierTemplateId)]).pipe( + map(([mappingList]) => mappingList.componentMappingList), + tap(mappings => this.entitiesService.setEntities(mappings)), ); } @@ -55,19 +62,29 @@ export class ComponentMappingsScreenComponent extends ListingComponent { - // this._loadingService.start(); - // this._loadingService.stop(); + openDeleteComponentMappingDialog(entity: ComponentMapping) { + this._dialogService.openDialog('confirm', null, async confirmation => { + if (confirmation) { + this._loadingService.start(); + await firstValueFrom(this._componentMappingService.deleteComponentMapping(this.#dossierTemplateId, entity.id)); + await firstValueFrom(this.loadData$()); + this._loadingService.stop(); + } }); } } diff --git a/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts b/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts index e3c9ac956..86d8c0d21 100644 --- a/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts +++ b/apps/red-ui/src/app/services/entity-services/component-mappings.service.ts @@ -1,80 +1,60 @@ import { Injectable } from '@angular/core'; -import { EntitiesService } from '@iqser/common-ui'; -import { ComponentMapping, IComponentMapping } from '@red/domain'; -import { Observable, of } from 'rxjs'; +import { EntitiesService, QueryParam } from '@iqser/common-ui'; +import { ComponentMapping, IComponentMapping, IComponentMappingList } from '@red/domain'; +import { Observable } from 'rxjs'; +import { HeadersConfiguration, List } from '@common-ui/utils'; -const DATA = [ - { - id: '1', - name: 'OECD Number', - file: 'some file name', - delimiter: ',', - encodingType: 'UTF-8', - version: 2, - searchKey: 'OECD Number', - }, - { - id: '2', - name: 'Study Title', - file: 'some file name', - delimiter: ';', - encodingType: 'ASCII', - version: 1, - searchKey: 'Study Title', - }, - { - id: '3', - name: 'Report Number', - file: 'some file name', - delimiter: '.', - encodingType: 'ISO', - version: 2, - searchKey: 'Report Number', - }, - { - id: '4', - name: 'GLP Study', - file: 'some file name', - delimiter: '"', - encodingType: 'UTF-8', - version: 5, - searchKey: 'GLP Study', - }, - { - id: '5', - name: 'Performing Laboratory', - file: 'some file name', - delimiter: ']', - encodingType: 'UTF-8', - version: 2, - searchKey: 'Performing Laboratory', - }, - { - id: '6', - name: 'Test', - file: 'some file name', - delimiter: ';', - encodingType: 'UTF-8', - version: 3, - searchKey: 'Test', - }, -]; +interface CreateMappingParams { + dossierTemplateId: string; + name: string; + encoding: string; + delimiter: string; +} @Injectable({ providedIn: 'root', }) export class ComponentMappingsService extends EntitiesService { - loadData(): Observable { - return of(DATA); + getComponentMappings(dossierTemplateId: string): Observable { + return this._http.get(`/api/dossier-templates/${dossierTemplateId}/component-mappings`); } - saveData(mapping: any): Observable { - if (!mapping.id) { - mapping.id = (Number(DATA[DATA.length - 1].id) + 1).toString(); - mapping.version = 1; - mapping.searchKey = mapping.name; + createComponentMapping( + dossierTemplateId: string, + componentMapping: Partial, + file: Blob, + ): Observable { + const formParams = new FormData(); + formParams.append('file', file); + + const queryParams: List = [ + { key: 'name', value: componentMapping.name }, + { key: 'encoding', value: componentMapping.encoding }, + { key: 'delimiter', value: componentMapping.delimiter }, + ]; + + if (componentMapping.id) { + return this._http.put( + `/api/dossier-templates/${dossierTemplateId}/component-mappings/${componentMapping.id}`, + formParams, + { + params: this._queryParams(queryParams), + }, + ); } - DATA.push(mapping); - return of(mapping); + + return this._http.post(`/api/dossier-templates/${dossierTemplateId}/component-mappings`, formParams, { + params: this._queryParams(queryParams), + }); + } + + deleteComponentMapping(dossierTemplateId: string, componentMappingId: string) { + return this._http.delete(`/api/dossier-templates/${dossierTemplateId}/component-mappings/${componentMappingId}`); + } + + getComponentMappingFile(dossierTemplateId: string, componentMappingId: string) { + return this._http.get(`/api/dossier-templates/${dossierTemplateId}/component-mappings/${componentMappingId}`, { + responseType: 'text', + }); } } diff --git a/libs/common-ui b/libs/common-ui index 3a9f36e71..5eef6d403 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 3a9f36e71b184e66eb791af19deeb258f8ec333d +Subproject commit 5eef6d403a57c224eec836d9d98787c6a128c50a diff --git a/libs/red-domain/src/lib/component-mappings/component-mapping-list.model.ts b/libs/red-domain/src/lib/component-mappings/component-mapping-list.model.ts new file mode 100644 index 000000000..24425c4a7 --- /dev/null +++ b/libs/red-domain/src/lib/component-mappings/component-mapping-list.model.ts @@ -0,0 +1,16 @@ +import { ComponentMapping, IComponentMapping } from './component-mapping'; + +export interface IComponentMappingList { + dossierTemplateId: string; + componentMappingList: IComponentMapping[]; +} + +export class ComponentMappingList implements IComponentMappingList { + readonly dossierTemplateId: string; + readonly componentMappingList: ComponentMapping[]; + + constructor(componentMappingList: IComponentMappingList) { + this.dossierTemplateId = componentMappingList.dossierTemplateId; + this.componentMappingList = componentMappingList.componentMappingList; + } +} diff --git a/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts b/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts deleted file mode 100644 index 35fa1ef58..000000000 --- a/libs/red-domain/src/lib/component-mappings/component-mapping.model.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { IComponentMapping } from './component-mapping'; -import { IListable } from '@iqser/common-ui'; - -export class ComponentMapping implements IComponentMapping, IListable { - readonly id: string; - readonly name: string; - readonly file: string; - readonly delimiter: string; - readonly encodingType: string; - readonly version: number; - - constructor(componentMapping: IComponentMapping) { - this.id = componentMapping.id; - this.name = componentMapping.name; - this.file = componentMapping.file; - this.delimiter = componentMapping.delimiter; - this.encodingType = componentMapping.encodingType; - this.version = componentMapping.version; - } - - get searchKey(): string { - return this.name; - } -} diff --git a/libs/red-domain/src/lib/component-mappings/component-mapping.ts b/libs/red-domain/src/lib/component-mappings/component-mapping.ts index 501c4c3d1..b8e1e7745 100644 --- a/libs/red-domain/src/lib/component-mappings/component-mapping.ts +++ b/libs/red-domain/src/lib/component-mappings/component-mapping.ts @@ -1,8 +1,38 @@ -export interface IComponentMapping { +import { IListable } from '@iqser/common-ui'; + +export interface IComponentMapping extends IListable { id: string; name: string; - file: string; + fileName: string; version: number; + columnLabels: string[]; + numberOfLines: number; + encoding: string; delimiter: string; - encodingType: string; +} + +export class ComponentMapping implements IComponentMapping, IListable { + readonly id: string; + readonly name: string; + readonly fileName: string; + readonly version: number; + readonly columnLabels: string[]; + readonly numberOfLines: number; + readonly encoding: string; + readonly delimiter: string; + + constructor(componentMapping: IComponentMapping) { + this.id = componentMapping.id; + this.name = componentMapping.name; + this.fileName = componentMapping.fileName; + this.version = componentMapping.version; + this.columnLabels = componentMapping.columnLabels; + this.numberOfLines = componentMapping.numberOfLines; + this.encoding = componentMapping.encoding; + this.delimiter = componentMapping.delimiter; + } + + get searchKey(): string { + return this.name; + } } diff --git a/libs/red-domain/src/lib/component-mappings/index.ts b/libs/red-domain/src/lib/component-mappings/index.ts index c0a040a07..88026faa7 100644 --- a/libs/red-domain/src/lib/component-mappings/index.ts +++ b/libs/red-domain/src/lib/component-mappings/index.ts @@ -1,2 +1,2 @@ -export * from './component-mapping.model'; +export * from './component-mapping-list.model'; export * from './component-mapping'; From 3dfe705da11dee6eb3670143464c40c426953494 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Thu, 6 Jun 2024 18:39:31 +0300 Subject: [PATCH 07/14] RED-9201 - update config --- .../component-mappings-screen.component.ts | 4 +++- .../services/entity-services/component-mappings.service.ts | 2 +- apps/red-ui/src/assets/config/config.json | 6 +++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts index 3044059f0..966ff36c7 100644 --- a/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/component-mappings/component-mappings-screen.component.ts @@ -71,7 +71,9 @@ export class ComponentMappingsScreenComponent extends ListingComponent(`/api/dossier-templates/${dossierTemplateId}/component-mappings`); } - createComponentMapping( + createUpdateComponentMapping( dossierTemplateId: string, componentMapping: Partial, file: Blob, diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index 441ade243..deb14e6da 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -3,7 +3,7 @@ "ADMIN_CONTACT_URL": null, "API_URL": "https://dan1.iqser.cloud", "APP_NAME": "RedactManager", - "IS_DOCUMINE": true, + "IS_DOCUMINE": false, "RULE_EDITOR_DEV_ONLY": false, "AUTO_READ_TIME": 3, "BACKEND_APP_VERSION": "4.4.40", @@ -18,8 +18,8 @@ "SELECTION_MODE": "structural", "MANUAL_BASE_URL": "https://docs.redactmanager.com/preview", "ANNOTATIONS_THRESHOLD": 1000, - "THEME": "scm", - "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/scm/", + "THEME": "redact", + "BASE_TRANSLATIONS_DIRECTORY": "/assets/i18n/redact/", "AVAILABLE_NOTIFICATIONS_DAYS": 30, "AVAILABLE_OLD_NOTIFICATIONS_MINUTES": 60, "NOTIFICATIONS_THRESHOLD": 1000, From 96223eee10924548953bc93cdc2eb7500be73065 Mon Sep 17 00:00:00 2001 From: project_703_bot_497bb7eb186ca592c63b3e50cd5c69e1 Date: Fri, 7 Jun 2024 01:03:57 +0000 Subject: [PATCH 08/14] push back localazy update --- apps/red-ui/src/assets/i18n/redact/de.json | 3 ++- apps/red-ui/src/assets/i18n/scm/de.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 277f0a88a..05e852247 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -1642,7 +1642,8 @@ }, "test": { "error": "Die Test-E-Mail konnte nicht gesendet werden! Bitte überprüfen Sie die E-Mail-Adresse.", - "success": "Die Test-E-Mail wurde erfolgreich versendet!" + "success": "Die Test-E-Mail wurde erfolgreich versendet!", + "warning": "Admin mail address not set. Test email sent to {recipientEmail} instead." }, "title": "SMTP-Konto konfigurieren" }, diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 41881e6b1..b09f3a85d 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -1642,7 +1642,8 @@ }, "test": { "error": "Die Test-E-Mail konnte nicht gesendet werden! Bitte überprüfen Sie die E-Mail-Adresse.", - "success": "Die Test-E-Mail wurde erfolgreich versendet!" + "success": "Die Test-E-Mail wurde erfolgreich versendet!", + "warning": "Admin mail address not set. Test email sent to {recipientEmail} instead." }, "title": "SMTP-Konto konfigurieren" }, From f84fb526095ea53b7f43ed77806c45cc9efe7003 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Fri, 7 Jun 2024 15:56:18 +0300 Subject: [PATCH 09/14] RED-8623: fix side effect. --- .../src/app/services/dossiers/dossier-changes.service.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/apps/red-ui/src/app/services/dossiers/dossier-changes.service.ts b/apps/red-ui/src/app/services/dossiers/dossier-changes.service.ts index 0484623a3..7149d9d95 100644 --- a/apps/red-ui/src/app/services/dossiers/dossier-changes.service.ts +++ b/apps/red-ui/src/app/services/dossiers/dossier-changes.service.ts @@ -10,7 +10,6 @@ import { inject, Injectable, OnDestroy } from '@angular/core'; import { DashboardStatsService } from '../dossier-templates/dashboard-stats.service'; import { CHANGED_CHECK_INTERVAL } from '@utils/constants'; import { List } from '@iqser/common-ui/lib/utils'; -import { DossiersCacheService } from '@services/dossiers/dossiers-cache.service'; import { Router } from '@angular/router'; import { filterEventsOnPages } from '@utils/operators'; @@ -21,7 +20,6 @@ export class DossiersChangesService extends GenericService implements O readonly #archivedDossiersService = inject(ArchivedDossiersService); readonly #dashboardStatsService = inject(DashboardStatsService); readonly #logger = inject(NGXLogger); - readonly #dossierCache = inject(DossiersCacheService); readonly #router = inject(Router); protected readonly _defaultModelPath = 'dossier'; @@ -78,7 +76,6 @@ export class DossiersChangesService extends GenericService implements O } #load(id: string): Observable { - if (!this.#dossierCache.get(id)) return of([]); const queryParams: List = [{ key: 'includeArchived', value: true }]; return super._getOne([id], this._defaultModelPath, queryParams).pipe( map(entity => new Dossier(entity)), From dbdce02e790f6de3e8eb4030596a8078c5912583 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Fri, 7 Jun 2024 16:08:17 +0300 Subject: [PATCH 10/14] RED-9125: upgrade webviewer. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b232ca09f..ccf647ba5 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@messageformat/core": "^3.3.0", "@ngx-translate/core": "15.0.0", "@ngx-translate/http-loader": "8.0.0", - "@pdftron/webviewer": "10.8.0", + "@pdftron/webviewer": "10.9.0", "chart.js": "4.4.2", "dayjs": "1.11.10", "file-saver": "^2.0.5", From ea6a0c4d5f5c4a1b8b64f52bde74f719383939f1 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Fri, 7 Jun 2024 16:35:18 +0300 Subject: [PATCH 11/14] RED-9125: forgot yarn lock. --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index e7849a41c..9d471b01e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3131,10 +3131,10 @@ resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-18.2.4.tgz#8e7eb0f9c7bee12977f37ebddc935463d9251793" integrity sha512-Y52Afz02Ub1kRZXd6NUTwPMjKQqBKZ35e5dUEpl14na2fWvdgdMz4bYOBPUcmQrovlxBGhmFXtFzxkdW3zyRbQ== -"@pdftron/webviewer@10.8.0": - version "10.8.0" - resolved "https://registry.yarnpkg.com/@pdftron/webviewer/-/webviewer-10.8.0.tgz#d19d698cb80d011acb4a9a844141bf37d186ac1f" - integrity sha512-/VPHEDTrqVEbjLTu5YIDExARXqrG6JUKtguOjvF+hlH21V465FIVw/BfZw+A0rpxSZFoTYf0Wtly5u8ZFXofng== +"@pdftron/webviewer@10.9.0": + version "10.9.0" + resolved "https://registry.yarnpkg.com/@pdftron/webviewer/-/webviewer-10.9.0.tgz#c39105189c70cfaa0601dae02e688bb510f74e3b" + integrity sha512-na6dQE1aFVc42zeRYjk0UDWKqdsI1PcQeQdAcwpNCKyND9W3s8iG8GLkZzfvP2CZjGhj47l28LkZ0NUBrq3weQ== "@phenomnomnominal/tsquery@^4.1.1": version "4.2.0" From 820a3cb4d08a627541eb840e3b5863c8563c8e15 Mon Sep 17 00:00:00 2001 From: project_703_bot_497bb7eb186ca592c63b3e50cd5c69e1 Date: Sat, 8 Jun 2024 01:03:57 +0000 Subject: [PATCH 12/14] push back localazy update --- apps/red-ui/src/assets/i18n/redact/de.json | 309 +++++++++------------ apps/red-ui/src/assets/i18n/redact/en.json | 8 +- apps/red-ui/src/assets/i18n/scm/de.json | 184 +++++------- apps/red-ui/src/assets/i18n/scm/en.json | 2 +- 4 files changed, 208 insertions(+), 295 deletions(-) diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index dd0ca58ae..668003cfe 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -94,23 +94,6 @@ }, "save": "Dossier-Vorlage speichern" }, - "add-edit-component-mapping": { - "actions": { - "save": "" - }, - "dialog": { - "title": "" - }, - "form": { - "delimiter": "", - "delimiter-placeholder": "", - "encoding-type": "", - "file": "", - "name": "", - "name-placeholder": "", - "version": "" - } - }, "add-edit-dossier-attribute": { "error": { "generic": "Attribut konnte nicht gespeichert werden!" @@ -138,7 +121,7 @@ }, "add-edit-entity": { "form": { - "case-sensitive": "Case-sensitive", + "case-sensitive": "Groß-/Kleinschreibung berücksichtigen", "color": "{type, select, redaction{Redaction} hint{Hint} recommendation{Recommendation} skipped{Skipped redaction} ignored{Ignored hint} other{}} color", "color-placeholder": "#", "default-reason": "Standard-Schwärzungsgrund", @@ -248,7 +231,6 @@ }, "admin-side-nav": { "audit": "Audit", - "component-mappings": "", "component-rule-editor": "", "configurations": "Configurations", "default-colors": "Default colors", @@ -272,6 +254,9 @@ "watermarks": "Watermarks" }, "analysis-disabled": "", + "annotation": { + "pending": "(Pending analysis)" + }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -326,14 +311,14 @@ "error": "Rekategorisierung des Bildes gescheitert: {error}", "success": "Bild wurde einer neuen Kategorie zugeordnet." }, - "remove-hint": { - "error": "Failed to remove hint: {error}", - "success": "Hint removed" - }, "remove": { "error": "Fehler beim Entfernen der Schwärzung: {error}", "success": "Schwärzung entfernt!" }, + "remove-hint": { + "error": "Failed to remove hint: {error}", + "success": "Hint removed" + }, "undo": { "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "success": "erfolgreich Rückgängig gemacht" @@ -346,15 +331,15 @@ "remove-highlights": { "label": "Remove selected earmarks" }, + "resize": { + "label": "Größe ändern" + }, "resize-accept": { "label": "Größe speichern" }, "resize-cancel": { "label": "Größenänderung abbrechen" }, - "resize": { - "label": "Größe ändern" - }, "see-references": { "label": "See references" }, @@ -387,9 +372,6 @@ "skipped": "Übersprungen", "text-highlight": "Earmark" }, - "annotation": { - "pending": "(Pending analysis)" - }, "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -535,24 +517,6 @@ }, "title": "Component view" }, - "component-mappings-screen": { - "action": { - "delete": "", - "edit": "" - }, - "add-new": "", - "bulk-actions": { - "delete": "" - }, - "search": "", - "table-col-names": { - "name": "", - "version": "" - }, - "table-header": { - "title": "" - } - }, "component-rules-screen": { "error": { "generic": "" @@ -582,7 +546,7 @@ "cancel": "{count, plural, one{Attribut} other{Attribute}} behalten", "delete": "{count, plural, one{Attribut} other{Attribute}} löschen", "dossier-impacted-documents": "This action will affect all dossiers that use this template.", - "dossier-lost-details": "All attribute values entered by users on document level will be lost.", + "dossier-lost-details": "The attribute values entered by users on document level will be lost.", "file-impacted-documents": "All documents that use {count, plural, one{his attribute} other{these attributes}} will be impacted.", "file-lost-details": "All information entered by users on document level will be lost.", "impacted-report": "{reportsCount}", @@ -613,14 +577,18 @@ "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" }, "confirmation-dialog": { + "approve-file": { + "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", + "title": "Warnung!" + }, "approve-file-without-analysis": { "confirmationText": "Approve without analysis", "denyText": "Abbrechen", "question": "Analysis required to detect new redactions.", "title": "Warning!" }, - "approve-file": { - "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", + "approve-multiple-files": { + "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", "title": "Warnung!" }, "approve-multiple-files-without-analysis": { @@ -629,10 +597,6 @@ "question": "Analysis required to detect new redactions for at least one file.", "title": "Warning" }, - "approve-multiple-files": { - "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", - "title": "Warnung!" - }, "assign-file-to-me": { "question": { "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", @@ -996,13 +960,13 @@ "recent": "Neu ({hours} h)", "unassigned": "Niemandem zugewiesen" }, + "reanalyse": { + "action": "Datei analysieren" + }, "reanalyse-dossier": { "error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.", "success": "Dateien für Reanalyse vorgesehen." }, - "reanalyse": { - "action": "Datei analysieren" - }, "start-auto-analysis": "Enable auto-analysis", "stop-auto-analysis": "Stop auto-analysis", "table-col-names": { @@ -1072,6 +1036,14 @@ "total-documents": "Anzahl der Dokumente", "total-people": "{count} {count, plural, one{user} other {users}}" }, + "dossier-templates": { + "label": "Dossier-Vorlagen", + "status": { + "active": "Active", + "inactive": "Inactive", + "incomplete": "Incomplete" + } + }, "dossier-templates-listing": { "action": { "clone": "Clone template", @@ -1107,14 +1079,6 @@ "title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}" } }, - "dossier-templates": { - "label": "Dossier-Vorlagen", - "status": { - "active": "Active", - "inactive": "Inactive", - "incomplete": "Incomplete" - } - }, "dossier-watermark-selector": { "heading": "Watermarks on documents", "no-watermark": "No watermark available in dossier template:
Please ask your admin to configure a watermark.", @@ -1333,28 +1297,19 @@ "warning-text": "Warning: experimental feature!", "warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules" }, - "entity": { - "info": { - "actions": { - "revert": "Revert", - "save": "Save changes" - }, - "heading": "Edit entity" - } - }, "error": { "deleted-entity": { "dossier": { "action": "Zurück zur Übersicht", "label": "Dieses Dossier wurde gelöscht!" }, - "file-dossier": { - "action": "Zurück zur Übersicht", - "label": "Das Dossier dieser Datei wurde gelöscht!" - }, "file": { "action": "Zurück zum Dossier", "label": "Diese Datei wurde gelöscht!" + }, + "file-dossier": { + "action": "Zurück zur Übersicht", + "label": "Das Dossier dieser Datei wurde gelöscht!" } }, "file-preview": { @@ -1388,12 +1343,6 @@ "number": "Nummer", "text": "Freier Text" }, - "file-attribute": { - "update": { - "error": "Failed to update file attribute value!", - "success": "File attribute value has been updated successfully!" - } - }, "file-attributes-configurations": { "cancel": "Abbrechen", "form": { @@ -1612,15 +1561,6 @@ "csv": "File attributes were imported successfully from uploaded CSV file." } }, - "filter-menu": { - "filter-options": "Filteroptionen", - "filter-types": "Filter", - "label": "Filter", - "pages-without-annotations": "Only pages without annotations", - "redaction-changes": "Nur Anmerkungen mit Schwärzungsänderungen", - "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", - "with-comments": "Nur Anmerkungen mit Kommentaren" - }, "filter": { "analysis": "Analyse erforderlich", "comment": "Kommentare", @@ -1630,6 +1570,15 @@ "redaction": "Geschwärzt", "updated": "Aktualisiert" }, + "filter-menu": { + "filter-options": "Filteroptionen", + "filter-types": "Filter", + "label": "Filter", + "pages-without-annotations": "Only pages without annotations", + "redaction-changes": "Nur Anmerkungen mit Schwärzungsänderungen", + "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", + "with-comments": "Nur Anmerkungen mit Kommentaren" + }, "filters": { "assigned-people": "Beauftragt", "documents-status": "Documents state", @@ -1903,6 +1852,13 @@ "user-promoted-to-approver": "{user} wurde im Dossier {dossierHref, select, null{{dossierName}} other{{dossierName}}} zum Genehmiger ernannt!", "user-removed-as-dossier-member": "{user} wurde als Mitglied von: {dossierHref, select, null{{dossierName}} other{{dossierName}}} entfernt!" }, + "notifications": { + "button-text": "Notifications", + "deleted-dossier": "Deleted dossier", + "label": "Benachrichtigungen", + "mark-all-as-read": "Alle als gelesen markieren", + "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" + }, "notifications-screen": { "category": { "email-notifications": "E-Mail Benachrichtigungen", @@ -1916,7 +1872,6 @@ "dossier": "Dossierbezogene Benachrichtigungen", "other": "Andere Benachrichtigungen" }, - "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "options": { "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin", @@ -1934,6 +1889,7 @@ "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" }, + "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "schedule": { "daily": "Tägliche Zusammenfassung", "instant": "Sofortig", @@ -1941,13 +1897,6 @@ }, "title": "Benachrichtigungseinstellungen" }, - "notifications": { - "button-text": "Notifications", - "deleted-dossier": "Deleted dossier", - "label": "Benachrichtigungen", - "mark-all-as-read": "Alle als gelesen markieren", - "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" - }, "ocr": { "confirmation-dialog": { "cancel": "Cancel", @@ -2039,16 +1988,16 @@ "warnings-label": "Prompts and dialogs", "warnings-subtitle": "Do not show again options" }, + "processing": { + "basic": "Processing", + "ocr": "OCR" + }, "processing-status": { "ocr": "OCR", "pending": "Pending", "processed": "processed", "processing": "Processing" }, - "processing": { - "basic": "Processing", - "ocr": "OCR" - }, "readonly": "Lesemodus", "readonly-archived": "Read only (archived)", "redact-text": { @@ -2226,11 +2175,11 @@ "resize-annotation": { "dialog": { "actions": { - "cancel": "Cancel", - "save": "Save changes" + "cancel": "Abbrechen", + "save": "Änderungen speichern" }, "content": { - "comment": "Comment", + "comment": "Kommentar", "original-text": "Original annotation:", "resized-text": "Resized annotation:" }, @@ -2240,11 +2189,11 @@ "resize-redaction": { "dialog": { "actions": { - "cancel": "Cancel", - "save": "Save changes" + "cancel": "Abbrechen", + "save": "Änderungen speichern" }, "content": { - "comment": "Comment", + "comment": "Kommentar", "options": { "in-dossier": { "description": "Resize in every document in {dossierName}.", @@ -2259,14 +2208,14 @@ }, "original-text": "Original text:", "resized-text": "Resized text:", - "type": "Type" + "type": "Typ" }, "header": "Resize {type}" } }, "roles": { "inactive": "Inaktiv", - "manager-admin": "Manager & admin", + "manager-admin": "Manager & Admin", "no-role": "Keine Rolle definiert", "red-admin": "Anwendungsadministrator", "red-manager": "Manager", @@ -2274,9 +2223,15 @@ "red-user-admin": "Benutzer-Admin", "regular": "Regulär" }, + "search": { + "active-dossiers": "Dokumente in aktiven Dossiers", + "all-dossiers": "Alle Dokumente", + "placeholder": "Dokumente durchsuchen...", + "this-dossier": "In diesem Dossier" + }, "search-screen": { "cols": { - "assignee": "Bevollmächtigter", + "assignee": "Assignee", "document": "Dokument", "dossier": "Dossier", "pages": "Seiten", @@ -2284,27 +2239,21 @@ }, "filters": { "assignee": "Assignee", - "by-dossier": "Nach Dossier filtern", - "by-template": "Dossier template", - "only-active": "Active dossiers only", - "search-by-template-placeholder": "Dossier template name...", + "by-dossier": "Dossier", + "by-template": "Dossier-Vorlage", + "only-active": "Nur aktive Dossiers", + "search-by-template-placeholder": "Name der Dossier-Vorlage...", "search-placeholder": "Dossiername...", "status": "Status" }, "missing": "Fehlt", - "must-contain": "Muss enthalten", - "no-data": "Geben Sie einen Suchbegriff in die Suchleiste, um nach Dokumenten oder Inhalten von Dokumenten zu suchen.", - "no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.", + "must-contain": "Must contain", + "no-data": "Geben Sie einen Suchbegriff in die Suchleiste ein,
um Dokumente oder Inhalte zu suchen.", + "no-match": "Suchbegriff wurde in keinem der Dokumente gefunden.", "table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}" }, - "search": { - "active-dossiers": "ganze Plattform", - "all-dossiers": "all documents", - "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", - "this-dossier": "in diesem Dossier" - }, - "seconds": "seconds", - "size": "Size", + "seconds": "Sekunden", + "size": "Größe", "smtp-auth-config": { "actions": { "cancel": "Abbrechen", @@ -2318,7 +2267,7 @@ "title": "Authentifizierung aktivieren" }, "table-header": { - "selected-count": "{count} selected" + "selected-count": "{count} ausgewählt" }, "tenant-resolve": { "contact-administrator": "Cannot remember the workspace? Please contact your administrator.", @@ -2329,7 +2278,7 @@ "sign-in-previous-domain": "Sign in to a previously used workspace", "youre-logged-out": "You have successfully been logged out." }, - "input-placeholder": "Your workspace" + "input-placeholder": "Ihr Workspace" }, "time": { "days": "{days} {days, plural, one{Tag} other{Tage}}", @@ -2337,29 +2286,29 @@ "less-than-an-hour": "< 1 Stunde", "no-time-left": "Frist für Wiederherstellung verstrichen" }, - "today": "Today", + "today": "Heute", "toggle-auto-analysis-message": { - "error": "Something went wrong.", + "error": "Es ist ein Fehler aufgetreten.", "success": "{toggleOperation} automatic processing." }, "top-bar": { "navigation-items": { "back": "Zurück", - "back-to-dashboard": "Back to home", - "dashboard": "Home", + "back-to-dashboard": "Zurück zu Start", + "dashboard": "Start", "my-account": { "children": { "account": "Konto", "admin": "Einstellungen", "downloads": "Meine Downloads", - "join-another-tenant": "Join another workspace", + "join-another-tenant": "Anderem Workspace beitreten", "language": { "de": "Deutsch", "en": "Englisch", "label": "Sprache" }, "logout": "Abmelden", - "select-tenant": "Select Tenant", + "select-tenant": "Workspace wechseln", "trash": "Papierkorb" } } @@ -2376,16 +2325,16 @@ }, "label": "Papierkorb", "no-data": { - "title": "Es wurde noch kein Dossier angelegt." + "title": "Es gibt noch keine gelöschten Elemente." }, "no-match": { - "title": "Die ausgewählten Filter treffen auf kein Dossier zu." + "title": "Die ausgewählten Filter treffen auf kein Element zu." }, "table-col-names": { "deleted-on": "Gelöscht am", "dossier": "Dossier", "name": "Name", - "owner": "Eigentümer", + "owner": "Owner/assignee", "time-to-restore": "Verbleibende Zeit für Wiederherstellung" }, "table-header": { @@ -2396,8 +2345,8 @@ "unknown": "Unbekannt", "update-profile": { "errors": { - "bad-request": "Error: {message}.", - "generic": "An error has occurred while updating the profile." + "bad-request": "Fehler: {message}.", + "generic": "Bei der Aktualisierung des Profils ist ein Fehler aufgetreten." } }, "upload-dictionary-dialog": { @@ -2406,11 +2355,11 @@ "merge": "Einträge zusammenführen", "overwrite": "Überschreiben" }, - "question": "Wählen Sie, wie Sie fortfahren möchten:", - "title": "Das Wörterbuch hat bereits Einträge!" + "question": "Wie möchten Sie fortfahren?", + "title": "Das Wörterbuch hat bereits Einträge." }, "upload-file": { - "upload-area-text": "Click or drag & drop anywhere on this area..." + "upload-area-text": "Klicken Sie auf den Button oder ziehen Sie die Dateien in diesen Bereich..." }, "upload-status": { "dialog": { @@ -2422,7 +2371,7 @@ }, "error": { "file-size": "Datei zu groß. Die maximal zulässige Größe beträgt {size} MB.", - "file-type": "This file type is not supported.", + "file-type": "Dateityp wird nicht unterstützt.", "generic": "Fehler beim Hochladen des Dokuments. {error}" } }, @@ -2437,7 +2386,7 @@ "delete-disabled": "Sie können Ihr eigenes Konto nicht löschen." }, "no-match": { - "title": "Die ausgewählten Filter treffen auf keinen Benutzer zu." + "title": "Ausgewählte Filter treffen auf keinen Benutzer zu." }, "search": "Suche ...", "table-col-names": { @@ -2447,12 +2396,12 @@ "roles": "Rollen" }, "table-header": { - "title": "{length} {length, plural, one{user} other{users}}" + "title": "{length} {length, plural, one{Benutzer} other{Benutzer}}" } }, "user-management": "Benutzerverwaltung", "user-menu": { - "button-text": "User menu" + "button-text": "Benuterzmenü" }, "user-profile": "Mein Profil", "user-profile-screen": { @@ -2463,21 +2412,21 @@ "confirm-password": { "form": { "password": { - "label": "Password" + "label": "Passwort" } }, - "header": "Confirm your password", - "save": "Submit" + "header": "Passwort bestätigen", + "save": "Absenden" }, "form": { - "dark-theme": "Dark theme", - "email": "E-mail", + "dark-theme": "Nachtmodus", + "email": "E-Mail", "first-name": "Vorname", "last-name": "Nachname" }, "title": "Profil bearbeiten", "update": { - "success": "Successfully updated profile." + "success": "Profil erfolgreich aktualisiert." } }, "user-stats": { @@ -2494,59 +2443,59 @@ "workflow": "Arbeitsablauf" }, "viewer-header": { - "load-all-annotations": "Load all annotations" + "load-all-annotations": "Alle Annotationen laden" }, "watermark-screen": { "action": { - "change-success": "Das Wasserzeichen wurde aktualisiert!", - "created-success": "Watermark has been created.", - "error": "Fehler beim Aktualisieren des Wasserzeichens", + "change-success": "Wasserzeichen wurde aktualisiert.", + "created-success": "Wasserzeichen wurde erstellt.", + "error": "Aktualisierung des Wasserzeichens fehlgeschlagen", "revert": "Rückgängig machen", "save": "Änderungen speichern" }, "alignment": { - "align-bottom": "Align bottom", - "align-horizontal-centers": "Align horizontal centers", - "align-left": "Align left", - "align-right": "Align right", - "align-top": "Align top", - "align-vertical-centers": "Align vertical centers" + "align-bottom": "Unten", + "align-horizontal-centers": "Horizontal mittig", + "align-left": "Linksbündig", + "align-right": "Rechtsbündig", + "align-top": "Oben", + "align-vertical-centers": "Vertikal mittig" }, "form": { - "alignment": "Alignment", + "alignment": "Ausrichtung", "color": "Farbe", "color-placeholder": "#", "font-size": "Schriftgröße", "font-type": "Schriftart", - "name-label": "Watermark name", - "name-placeholder": "Choose a name to identify the watermark", + "name-label": "Name des Wasserzeichens", + "name-placeholder": "Namen für das Wasserzeichen eingeben", "opacity": "Deckkraft", "orientation": "Ausrichtung", - "text-label": "Watermark text", + "text-label": "Text für Wasserzeichen", "text-placeholder": "Text eingeben" } }, "watermarks-listing": { "action": { - "delete": "Delete", - "delete-success": "Watermark has been deleted.", - "edit": "Edit" + "delete": "Löschen", + "delete-success": "Das Wasserzeichen wurde gelöscht.", + "edit": "Bearbeiten" }, - "add-new": "New watermark", + "add-new": "Neues Wasserzeichen", "no-data": { - "title": "There are no watermarks yet." + "title": "Es wurde noch kein Wasserzeichen erstellt." }, "table-col-names": { - "created-by": "Created by", - "created-on": "Created on", - "modified-on": "Modified on", + "created-by": "Ersteller", + "created-on": "Erstellt am", + "modified-on": "Geändert am", "name": "Name", "status": "Status" }, "table-header": { - "title": "Watermarks" + "title": "Wasserzeichen" }, - "watermark-is-used": "This watermark is already in use, are you sure you want to delete it?" + "watermark-is-used": "Dieses Wasserzeichen wird bereits verwendet. Möchten Sie es dennocht löschen?" }, "workflow": { "selection": { @@ -2557,4 +2506,4 @@ } }, "yesterday": "Gestern" -} +} \ No newline at end of file diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index b480e2a13..4228bcb78 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -582,10 +582,10 @@ "cancel": "Keep {count, plural, one{attribute} other{attributes}}", "delete": "Delete {count, plural, one{attribute} other{attributes}}", "dossier-impacted-documents": "This action will affect all dossiers that use this template.", - "dossier-lost-details": "All attribute values entered by users on document level will be lost.", + "dossier-lost-details": "The attribute values entered by users on document level will be lost.", "file-impacted-documents": "All documents that use {count, plural, one{his attribute} other{these attributes}} will be impacted.", "file-lost-details": "All information entered by users on document level will be lost.", - "impacted-report": "{reportsCount} reports currently use the placeholder for this attribute.

Please update them accordingly.", + "impacted-report": "{reportsCount} reports currently use the placeholder for this attribute. Please update them.", "title": "Delete {count, plural, one{{name}} other{file attributes}}", "toast-error": "Please confirm that you understand the consequences of this action.", "warning": "Warning: This action cannot be undone!" @@ -2531,7 +2531,7 @@ "table-header": { "title": "Watermarks" }, - "watermark-is-used": "This watermark is already in use, are you sure you want to delete it?" + "watermark-is-used": "This watermark is already in use. Do you still want to delete it?" }, "workflow": { "selection": { @@ -2542,4 +2542,4 @@ } }, "yesterday": "Yesterday" -} +} \ No newline at end of file diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index c1b6a94de..b09f3a85d 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -94,23 +94,6 @@ }, "save": "Dossier-Vorlage speichern" }, - "add-edit-component-mapping": { - "actions": { - "save": "" - }, - "dialog": { - "title": "" - }, - "form": { - "delimiter": "", - "delimiter-placeholder": "", - "encoding-type": "", - "file": "", - "name": "", - "name-placeholder": "", - "version": "" - } - }, "add-edit-dossier-attribute": { "error": { "generic": "Attribut konnte nicht gespeichert werden!" @@ -248,7 +231,6 @@ }, "admin-side-nav": { "audit": "Audit", - "component-mappings": "", "component-rule-editor": "Component rule editor", "configurations": "Configurations", "default-colors": "Default colors", @@ -272,6 +254,9 @@ "watermarks": "Watermarks" }, "analysis-disabled": "Analysis disabled", + "annotation": { + "pending": "(Pending analysis)" + }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -326,14 +311,14 @@ "error": "Rekategorisierung des Bildes gescheitert: {error}", "success": "Bild wurde einer neuen Kategorie zugeordnet." }, - "remove-hint": { - "error": "Failed to remove hint: {error}", - "success": "Hint removed!" - }, "remove": { "error": "Fehler beim Entfernen der Schwärzung: {error}", "success": "Schwärzung entfernt!" }, + "remove-hint": { + "error": "Failed to remove hint: {error}", + "success": "Hint removed!" + }, "undo": { "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "success": "erfolgreich Rückgängig gemacht" @@ -346,15 +331,15 @@ "remove-highlights": { "label": "Remove selected earmarks" }, + "resize": { + "label": "Größe ändern" + }, "resize-accept": { "label": "Größe speichern" }, "resize-cancel": { "label": "Größenänderung abbrechen" }, - "resize": { - "label": "Größe ändern" - }, "see-references": { "label": "See references" }, @@ -387,9 +372,6 @@ "skipped": "Übersprungen", "text-highlight": "Earmark" }, - "annotation": { - "pending": "(Pending analysis)" - }, "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -535,24 +517,6 @@ }, "title": "Structured Component Management" }, - "component-mappings-screen": { - "action": { - "delete": "", - "edit": "" - }, - "add-new": "", - "bulk-actions": { - "delete": "" - }, - "search": "", - "table-col-names": { - "name": "", - "version": "" - }, - "table-header": { - "title": "" - } - }, "component-rules-screen": { "error": { "generic": "Something went wrong... Component rules update failed!" @@ -613,14 +577,18 @@ "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" }, "confirmation-dialog": { + "approve-file": { + "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", + "title": "Warnung!" + }, "approve-file-without-analysis": { "confirmationText": "Approve without analysis", "denyText": "Cancel", "question": "Analysis required to detect new components.", "title": "Warning!" }, - "approve-file": { - "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?", + "approve-multiple-files": { + "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", "title": "Warnung!" }, "approve-multiple-files-without-analysis": { @@ -629,10 +597,6 @@ "question": "Analysis required to detect new components for at least one file.", "title": "Warning" }, - "approve-multiple-files": { - "question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", - "title": "Warnung!" - }, "assign-file-to-me": { "question": { "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", @@ -996,13 +960,13 @@ "recent": "Neu ({hours} h)", "unassigned": "Niemandem zugewiesen" }, + "reanalyse": { + "action": "Datei analysieren" + }, "reanalyse-dossier": { "error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.", "success": "Dateien für Reanalyse vorgesehen." }, - "reanalyse": { - "action": "Datei analysieren" - }, "start-auto-analysis": "Enable auto-analysis", "stop-auto-analysis": "Stop auto-analysis", "table-col-names": { @@ -1072,6 +1036,14 @@ "total-documents": "Anzahl der Dokumente", "total-people": "{count} {count, plural, one{user} other {users}}" }, + "dossier-templates": { + "label": "Dossier-Vorlagen", + "status": { + "active": "Active", + "inactive": "Inactive", + "incomplete": "Incomplete" + } + }, "dossier-templates-listing": { "action": { "clone": "Clone template", @@ -1107,14 +1079,6 @@ "title": "{length} dossier {length, plural, one{template} other{templates}}" } }, - "dossier-templates": { - "label": "Dossier-Vorlagen", - "status": { - "active": "Active", - "inactive": "Inactive", - "incomplete": "Incomplete" - } - }, "dossier-watermark-selector": { "heading": "Watermarks on documents", "no-watermark": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", @@ -1310,6 +1274,15 @@ "title": "{length} {length, plural, one{entity} other{entities}}" } }, + "entity": { + "info": { + "actions": { + "revert": "Revert", + "save": "Save changes" + }, + "heading": "Edit entity" + } + }, "entity-rules-screen": { "error": { "generic": "Something went wrong... Entity rules update failed!" @@ -1324,28 +1297,19 @@ "warning-text": "Warning: experimental feature!", "warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules" }, - "entity": { - "info": { - "actions": { - "revert": "Revert", - "save": "Save changes" - }, - "heading": "Edit entity" - } - }, "error": { "deleted-entity": { "dossier": { "action": "Zurück zur Übersicht", "label": "Dieses Dossier wurde gelöscht!" }, - "file-dossier": { - "action": "Zurück zur Übersicht", - "label": "Das Dossier dieser Datei wurde gelöscht!" - }, "file": { "action": "Zurück zum Dossier", "label": "Diese Datei wurde gelöscht!" + }, + "file-dossier": { + "action": "Zurück zur Übersicht", + "label": "Das Dossier dieser Datei wurde gelöscht!" } }, "file-preview": { @@ -1363,6 +1327,12 @@ }, "exact-date": "{day} {month} {year} um {hour}:{minute} Uhr", "file": "Datei", + "file-attribute": { + "update": { + "error": "Failed to update file attribute value!", + "success": "File attribute value has been updated successfully!" + } + }, "file-attribute-encoding-types": { "ascii": "ASCII", "iso": "ISO-8859-1", @@ -1373,12 +1343,6 @@ "number": "Nummer", "text": "Freier Text" }, - "file-attribute": { - "update": { - "error": "Failed to update file attribute value!", - "success": "File attribute value has been updated successfully!" - } - }, "file-attributes-configurations": { "cancel": "Cancel", "form": { @@ -1597,15 +1561,6 @@ "csv": "File attributes were imported successfully from uploaded CSV file." } }, - "filter-menu": { - "filter-options": "Filteroptionen", - "filter-types": "Filter", - "label": "Filter", - "pages-without-annotations": "Only pages without annotations", - "redaction-changes": "Nur Anmerkungen mit Schwärzungsänderungen", - "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", - "with-comments": "Nur Anmerkungen mit Kommentaren" - }, "filter": { "analysis": "Analyse erforderlich", "comment": "Kommentare", @@ -1615,6 +1570,15 @@ "redaction": "Geschwärzt", "updated": "Aktualisiert" }, + "filter-menu": { + "filter-options": "Filteroptionen", + "filter-types": "Filter", + "label": "Filter", + "pages-without-annotations": "Only pages without annotations", + "redaction-changes": "Nur Anmerkungen mit Schwärzungsänderungen", + "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", + "with-comments": "Nur Anmerkungen mit Kommentaren" + }, "filters": { "assigned-people": "Beauftragt", "documents-status": "Documents state", @@ -1888,6 +1852,13 @@ "user-promoted-to-approver": "{user} wurde im Dossier {dossierHref, select, null{{dossierName}} other{{dossierName}}} zum Genehmiger ernannt!", "user-removed-as-dossier-member": "{user} wurde als Mitglied von: {dossierHref, select, null{{dossierName}} other{{dossierName}}} entfernt!" }, + "notifications": { + "button-text": "Notifications", + "deleted-dossier": "Deleted dossier", + "label": "Benachrichtigungen", + "mark-all-as-read": "Alle als gelesen markieren", + "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" + }, "notifications-screen": { "category": { "email-notifications": "E-Mail Benachrichtigungen", @@ -1901,7 +1872,6 @@ "dossier": "Dossierbezogene Benachrichtigungen", "other": "Andere Benachrichtigungen" }, - "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "options": { "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin", @@ -1919,6 +1889,7 @@ "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" }, + "options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten", "schedule": { "daily": "Tägliche Zusammenfassung", "instant": "Sofortig", @@ -1926,13 +1897,6 @@ }, "title": "Benachrichtigungseinstellungen" }, - "notifications": { - "button-text": "Notifications", - "deleted-dossier": "Deleted dossier", - "label": "Benachrichtigungen", - "mark-all-as-read": "Alle als gelesen markieren", - "mark-as": "Mark as {type, select, read{read} unread{unread} other{}}" - }, "ocr": { "confirmation-dialog": { "cancel": "Cancel", @@ -2024,16 +1988,16 @@ "warnings-label": "Prompts and dialogs", "warnings-subtitle": "Do not show again options" }, + "processing": { + "basic": "Processing", + "ocr": "OCR" + }, "processing-status": { "ocr": "OCR", "pending": "Pending", "processed": "Processed", "processing": "Processing" }, - "processing": { - "basic": "Processing", - "ocr": "OCR" - }, "readonly": "Lesemodus", "readonly-archived": "Read only (archived)", "redact-text": { @@ -2259,6 +2223,12 @@ "red-user-admin": "Benutzer-Admin", "regular": "Regulär" }, + "search": { + "active-dossiers": "ganze Plattform", + "all-dossiers": "all documents", + "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", + "this-dossier": "in diesem Dossier" + }, "search-screen": { "cols": { "assignee": "Bevollmächtigter", @@ -2282,12 +2252,6 @@ "no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.", "table-header": "{length} search {length, plural, one{result} other{results}}" }, - "search": { - "active-dossiers": "ganze Plattform", - "all-dossiers": "all documents", - "placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen", - "this-dossier": "in diesem Dossier" - }, "seconds": "seconds", "size": "Size", "smtp-auth-config": { @@ -2542,4 +2506,4 @@ } }, "yesterday": "Gestern" -} +} \ No newline at end of file diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index ab8576d70..495860a61 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -2542,4 +2542,4 @@ } }, "yesterday": "Yesterday" -} +} \ No newline at end of file From b9c9e8af989211f1af711708c10d4d59e02cc77d Mon Sep 17 00:00:00 2001 From: project_703_bot_497bb7eb186ca592c63b3e50cd5c69e1 Date: Sun, 9 Jun 2024 01:03:39 +0000 Subject: [PATCH 13/14] push back localazy update --- apps/red-ui/src/assets/i18n/redact/de.json | 36 ++++++++++++++++++++++ apps/red-ui/src/assets/i18n/scm/de.json | 36 ++++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 668003cfe..94fc032c6 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -94,6 +94,23 @@ }, "save": "Dossier-Vorlage speichern" }, + "add-edit-component-mapping": { + "actions": { + "save": "Save mapping" + }, + "dialog": { + "title": "{type, select, add{Add New} edit{Edit} other{}} Component Mapping" + }, + "form": { + "delimiter": "", + "delimiter-placeholder": "", + "encoding-type": "", + "file": "Mapping file", + "name": "Mapping name", + "name-placeholder": "Mapping name", + "version": "Version" + } + }, "add-edit-dossier-attribute": { "error": { "generic": "Attribut konnte nicht gespeichert werden!" @@ -231,6 +248,7 @@ }, "admin-side-nav": { "audit": "Audit", + "component-mappings": "Component mappings", "component-rule-editor": "", "configurations": "Configurations", "default-colors": "Default colors", @@ -517,6 +535,24 @@ }, "title": "Component view" }, + "component-mappings-screen": { + "action": { + "delete": "Delete mapping", + "edit": "Edit mapping" + }, + "add-new": "New Mapping", + "bulk-actions": { + "delete": "Delete selected mappings" + }, + "search": "Search by name...", + "table-col-names": { + "name": "name", + "version": "version" + }, + "table-header": { + "title": "Component mapping" + } + }, "component-rules-screen": { "error": { "generic": "" diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index b09f3a85d..3545578c6 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -94,6 +94,23 @@ }, "save": "Dossier-Vorlage speichern" }, + "add-edit-component-mapping": { + "actions": { + "save": "Save mapping" + }, + "dialog": { + "title": "{type, select, add{Add New} edit{Edit} other{}} Component Mapping" + }, + "form": { + "delimiter": "Delimiter", + "delimiter-placeholder": "Delimiter", + "encoding-type": "Encoding type", + "file": "Mapping file", + "name": "Mapping name", + "name-placeholder": "Mapping name", + "version": "Version" + } + }, "add-edit-dossier-attribute": { "error": { "generic": "Attribut konnte nicht gespeichert werden!" @@ -231,6 +248,7 @@ }, "admin-side-nav": { "audit": "Audit", + "component-mappings": "Component mappings", "component-rule-editor": "Component rule editor", "configurations": "Configurations", "default-colors": "Default colors", @@ -517,6 +535,24 @@ }, "title": "Structured Component Management" }, + "component-mappings-screen": { + "action": { + "delete": "Delete mapping", + "edit": "Edit mapping" + }, + "add-new": "New Mapping", + "bulk-actions": { + "delete": "Delete selected mappings" + }, + "search": "Search by name...", + "table-col-names": { + "name": "name", + "version": "version" + }, + "table-header": { + "title": "Component mapping" + } + }, "component-rules-screen": { "error": { "generic": "Something went wrong... Component rules update failed!" From bbe8ac974211aed6dad73eff888ba3f808e50535 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Mon, 10 Jun 2024 14:07:48 +0300 Subject: [PATCH 14/14] RED-9196: fixed due date checkbox not being reverted. --- .../edit-dossier-general-info.component.html | 2 +- .../edit-dossier-general-info.component.ts | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html index 35e78ad5d..bbd9d8aa2 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.html @@ -57,7 +57,7 @@