From be8cf1d2da578d783deb1cdd9c5de701d89d066b Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Wed, 13 Sep 2023 16:31:30 +0300 Subject: [PATCH 1/7] DM-413: Added more padding and fixed comment adding functionality. --- .../edit-annotation-dialog.component.scss | 6 +++++- .../services/annotation-actions.service.ts | 17 ++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/docu-mine/edit-annotation-dialog/edit-annotation-dialog.component.scss b/apps/red-ui/src/app/modules/file-preview/dialogs/docu-mine/edit-annotation-dialog/edit-annotation-dialog.component.scss index 65598a1f3..bba70f9c4 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/docu-mine/edit-annotation-dialog/edit-annotation-dialog.component.scss +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/docu-mine/edit-annotation-dialog/edit-annotation-dialog.component.scss @@ -9,10 +9,14 @@ cdk-virtual-scroll-viewport { max-width: 100% !important; } +ul { + padding-left: 16px; +} + li { white-space: nowrap; text-overflow: ellipsis; list-style-position: inside; overflow: hidden; - padding-right: 4px; + padding-right: 10px; } diff --git a/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts b/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts index b7cb9210f..d1c2eaec0 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts @@ -15,7 +15,7 @@ import { } from '@red/domain'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; import { PermissionsService } from '@services/permissions.service'; -import { firstValueFrom, from, Observable, zip } from 'rxjs'; +import { firstValueFrom, Observable, zip } from 'rxjs'; import { getFirstRelevantTextPart } from '../../../utils'; import { AnnotationDrawService } from '../../pdf-viewer/services/annotation-draw.service'; import { REDAnnotationManager } from '../../pdf-viewer/services/annotation-manager.service'; @@ -113,7 +113,7 @@ export class AnnotationActionsService { })); requests.push(this._manualRedactionService.changeLegalBasis(changeLegalBasisBody, dossierId, fileId)); } - if (this.#isDocumine) { + if (result.type && !annotations.every(annotation => annotation.type === result.type)) { const recategorizeBody: List = annotations.map(annotation => ({ annotationId: annotation.id, type: result.type ?? annotation.type, @@ -121,16 +121,15 @@ export class AnnotationActionsService { requests.push(this._manualRedactionService.recategorizeRedactions(recategorizeBody, dossierId, fileId)); } + if (result.comment) { + for (const a of annotations) { + await this._manualRedactionService.addComment(result.comment, a.id, dossierId, fileId); + } + } + if (!requests.length) { return; } - - if (result.comment) { - requests.push( - from(Promise.all(annotations.map(a => this._manualRedactionService.addComment(result.comment, a.id, dossierId, fileId)))), - ); - } - await this.#processObsAndEmit(zip(requests).pipe(log())); } From c6589b9f2262a02f580b31d218398341a6d243f6 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Wed, 13 Sep 2023 22:28:25 +0300 Subject: [PATCH 2/7] RED-7549 - Bulk delete action dialog --- .../annotation-actions.component.ts | 14 +- .../remove-redaction-dialog.component.html | 42 ++++- .../remove-redaction-dialog.component.scss | 15 ++ .../remove-redaction-dialog.component.ts | 12 +- .../remove-redaction-translations.ts | 5 + apps/red-ui/src/assets/i18n/redact/de.json | 156 +++++++++--------- apps/red-ui/src/assets/i18n/redact/en.json | 22 ++- apps/red-ui/src/assets/i18n/scm/de.json | 14 +- apps/red-ui/src/assets/i18n/scm/en.json | 14 +- 9 files changed, 201 insertions(+), 93 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.ts b/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.ts index b9a28495d..ba84aa774 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/annotation-actions/annotation-actions.component.ts @@ -60,7 +60,14 @@ export class AnnotationActionsComponent implements OnChanges { } get canRemoveRedaction(): boolean { - return (this.#isDocumine || this.annotations.length === 1) && this.annotationPermissions.canRemoveRedaction; + if (this.annotationPermissions.canRemoveRedaction) { + if (this.annotations.length > 1) { + const foundIgnoredHint = this.annotations.find(a => a.isIgnoredHint); + return !foundIgnoredHint && this.#sameType; + } + return true; + } + return false; } get viewerAnnotations() { @@ -131,4 +138,9 @@ export class AnnotationActionsComponent implements OnChanges { helpModeKey(action: string) { return this.#isDocumine ? `${action}_annotation` : ''; } + + get #sameType() { + const type = this.annotations[0].superType; + return this.annotations.every(a => a.superType === type); + } } diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.html b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.html index 2afd68543..c5356c9c0 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.html +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.html @@ -1,13 +1,51 @@
+
-
+
+
+ + + +
    +
  • + {{ + (isFalsePositive + ? 'remove-redaction.dialog.content.list-item-false-positive' + : 'remove-redaction.dialog.content.list-item' + ) + | translate + : { + text: text, + context: data.falsePositiveContext[idx] + } + | replaceNbsp + }} +
  • +
+
+
+
diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.scss b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.scss index 6c59d31b8..f211d23f7 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.scss +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.scss @@ -1,3 +1,18 @@ .dialog-content { height: 408px; } + +cdk-virtual-scroll-viewport { + margin-top: 8px; +} + +:host ::ng-deep .cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper { + max-width: 100% !important; +} + +li { + white-space: nowrap; + text-overflow: ellipsis; + list-style-position: inside; + overflow: hidden; +} diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts index 0e24974e4..c2eb54f67 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts @@ -3,7 +3,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormBuilder, UntypedFormGroup } from '@angular/forms'; import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui'; import { tap } from 'rxjs/operators'; -import { getRemoveRedactionOptions, RemoveRedactionOption } from '../../utils/dialog-options'; +import { getRemoveRedactionOptions, RemoveAnnotationOptions, RemoveRedactionOption } from '../../utils/dialog-options'; import { RemoveRedactionData, RemoveRedactionResult } from '../../utils/dialog-types'; @Component({ @@ -19,14 +19,16 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent< readonly options: DetailsRadioOption[]; readonly recommendation; readonly hint: boolean; + readonly redactedTexts: string[]; form!: UntypedFormGroup; #applyToAllDossiers: boolean; constructor(private readonly _formBuilder: FormBuilder) { super(); - this.recommendation = this.data.redactions.every(r => r.isRecommendation); - this.hint = this.data.redactions.every(r => r.hint); + this.recommendation = this.data.redactions[0].isRecommendation; + this.hint = this.data.redactions[0].hint; this.options = getRemoveRedactionOptions(this.data); + this.redactedTexts = this.data.redactions.map(annotation => annotation.value); this.form = this.#getForm(); this.#applyToAllDossiers = this.data.applyToAllDossiers ?? true; @@ -45,6 +47,10 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent< .subscribe(); } + get isFalsePositive(): boolean { + return this.form.get('option').value.value === RemoveAnnotationOptions.FALSE_POSITIVE; + } + save(): void { this.close(this.form.getRawValue()); } diff --git a/apps/red-ui/src/app/translations/remove-redaction-translations.ts b/apps/red-ui/src/app/translations/remove-redaction-translations.ts index 2a7d7b790..a6abfa7eb 100644 --- a/apps/red-ui/src/app/translations/remove-redaction-translations.ts +++ b/apps/red-ui/src/app/translations/remove-redaction-translations.ts @@ -6,20 +6,25 @@ export const removeRedactionTranslations: { [key in RemoveRedactionOption]: Dial ONLY_HERE: { label: _('remove-redaction.dialog.content.options.only-here.label'), description: _('remove-redaction.dialog.content.options.only-here.description'), + descriptionBulk: _('remove-redaction.dialog.content.options.only-here.description-bulk'), }, IN_DOSSIER: { label: _('remove-redaction.dialog.content.options.in-dossier.label'), + labelBulk: _('remove-redaction.dialog.content.options.in-dossier.label-bulk'), description: _('remove-redaction.dialog.content.options.in-dossier.description'), + descriptionBulk: _('remove-redaction.dialog.content.options.in-dossier.description-bulk'), extraOptionLabel: _('remove-redaction.dialog.content.options.in-dossier.extraOptionLabel'), }, FALSE_POSITIVE: { label: _('remove-redaction.dialog.content.options.false-positive.label'), description: _('remove-redaction.dialog.content.options.false-positive.description'), + descriptionBulk: _('remove-redaction.dialog.content.options.false-positive.description-bulk'), extraOptionLabel: _('remove-redaction.dialog.content.options.false-positive.extraOptionLabel'), }, DO_NOT_RECOMMEND: { label: _('remove-redaction.dialog.content.options.do-not-recommend.label'), description: _('remove-redaction.dialog.content.options.do-not-recommend.description'), + descriptionBulk: _('remove-redaction.dialog.content.options.do-not-recommend.description-bulk'), extraOptionLabel: _('remove-redaction.dialog.content.options.do-not-recommend.extraOptionLabel'), }, }; diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index e2b3a85cd..dc71a9e02 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -256,9 +256,6 @@ "user-management": "User Management", "watermarks": "Watermarks" }, - "annotation": { - "pending": "(Pending Analysis)" - }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -341,14 +338,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!" + }, "request-change-legal-basis": { "error": "Fehler beim Vorschlagen der Änderung der Begründung:", "success": "Die Änderung der in der Anmerkung genannten Begründung wurde beantragt." @@ -365,14 +362,14 @@ "error": "Fehler beim Vorschlagen der Neukategorisierung des Bilds: {error}", "success": "Bild-Neuklassifizierung angefordert." }, - "request-remove": { - "error": "Fehler beim Erstellen des Vorschlags für das Entfernen der Schwärzung: {error}", - "success": "Entfernen der Schwärzung wurde vorgeschlagen!" - }, "request-remove-hint": { "error": "Failed to request removal of hint: {error}", "success": "Requested to remove hint!" }, + "request-remove": { + "error": "Fehler beim Erstellen des Vorschlags für das Entfernen der Schwärzung: {error}", + "success": "Entfernen der Schwärzung wurde vorgeschlagen!" + }, "suggest": { "error": "Vorschlag einer Schwärzung wurde nicht gespeichert: {error}", "success": "Vorschlag einer Schwärzung gespeichert" @@ -389,15 +386,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" }, @@ -439,6 +436,9 @@ "suggestion-resize": "Vorgeschlagene Größenänderung", "text-highlight": "Earmark" }, + "annotation": { + "pending": "(Pending Analysis)" + }, "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -618,18 +618,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": { @@ -638,6 +634,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?", @@ -983,13 +983,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": { @@ -1058,14 +1058,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", @@ -1101,6 +1093,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.", @@ -1299,13 +1299,13 @@ "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": { @@ -1323,12 +1323,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", @@ -1339,6 +1333,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": { @@ -1552,6 +1552,15 @@ "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", @@ -1562,15 +1571,6 @@ "suggestion": "Vorgeschlagene Schwärzung", "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", @@ -1737,6 +1737,7 @@ }, "license-info-screen": { "backend-version": "Backend-Version der Anwendung", + "capacity-details": "Capacity Details", "capacity": { "active-documents": "Active Documents", "all-documents": "Retention Capacity Used", @@ -1746,12 +1747,12 @@ "trash-documents": "Documents in Trash", "unused": "Unused Storage" }, - "capacity-details": "Capacity Details", "copyright-claim-text": "Copyright © 2020 - {currentYear} knecon", "copyright-claim-title": "Copyright", "current-analyzed-pages": "In aktuellem Lizenzzeitraum analysierte Seiten", "current-volume-analyzed": "Data Volume Analyzed in Licensing Period", "custom-app-title": "Name der Anwendung", + "email-report": "E-Mail-Bericht", "email": { "body": { "analyzed": "Im aktuellen Lizenzzeitraum insgesamt analysierte Seiten: {pages}.", @@ -1759,7 +1760,6 @@ }, "title": "Lizenzbericht {licenseCustomer}" }, - "email-report": "E-Mail-Bericht", "end-user-license-text": "Die Nutzung dieses Produkts unterliegt den Bedingungen der Endbenutzer-Lizenzvereinbarung für den RedactManager, sofern darin nichts anderweitig festgelegt.", "end-user-license-title": "Endbenutzer-Lizenzvereinbarung", "license-title": "License Title", @@ -1844,13 +1844,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", @@ -1864,6 +1857,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", @@ -1881,7 +1875,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", @@ -1889,6 +1882,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", @@ -1980,16 +1980,16 @@ "warnings-subtitle": "Do not show again options", "warnings-title": "Prompts and Dialogs Settings" }, - "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": { @@ -2070,6 +2070,8 @@ "content": { "comment": "Comment", "comment-placeholder": "Add remarks or mentions ...", + "list-item": "", + "list-item-false-positive": "", "options": { "do-not-recommend": { "description": "Do not recommend \"{value}\" as {type} in any document of the current dossier.", @@ -2079,21 +2081,27 @@ }, "false-positive": { "description": "\"{value}\" is not a {type} in this context: \"{context}\".", + "description-bulk": "", "extraOptionLabel": "Apply to all dossiers", "label": "False positive" }, "in-dossier": { "description": "Do not {type} \"{value}\" in any document of the current dossier.", + "description-bulk": "", "extraOptionLabel": "Apply to all dossiers", - "label": "Remove from dossier" + "label": "Remove from dossier", + "label-bulk": "" }, "only-here": { "description": "Do not {type, select, undefined{redact} other{type}} \"{value}\" at this position in the current document.", + "description-bulk": "", "label": "Remove here" } - } + }, + "redacted-text": "" }, - "title": "Remove {type}" + "title": "Remove {type}", + "title-bulk": "" } }, "report-type": { @@ -2244,12 +2252,6 @@ "title": "Rule Editor", "warning-text": "Warning: experimental feature!" }, - "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", @@ -2273,6 +2275,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": { @@ -2533,4 +2541,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 9b896747b..5f4a59e47 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -2052,11 +2052,11 @@ }, "only-here": { "description": "Do not annotate \"{value}\" at this position in the current document.", - "description-bulk": "", + "description-bulk": "Do not annotate the selected terms at this position in the current document.", "label": "Remove here" } }, - "redacted-text": "" + "redacted-text": "Selected redactions" }, "title": "Remove {count, plural, one{annotation} other {annotations}}" } @@ -2070,30 +2070,38 @@ "content": { "comment": "Comment", "comment-placeholder": "Add remarks or mentions ...", + "list-item": "{text}", + "list-item-false-positive": "\"{text}\" in the context: \"{context}\"", "options": { "do-not-recommend": { "description": "Do not recommend \"{value}\" as {type} in any document of the current dossier.", - "description-bulk": "", + "description-bulk": "Do not recommend the selected terms in any document of the current dossier.", "extraOptionLabel": "Apply to all dossiers", "label": "Remove from dossier" }, "false-positive": { "description": "\"{value}\" is not a {type} in this context: \"{context}\".", + "description-bulk": "Do not redact the selected terms in their respective context.", "extraOptionLabel": "Apply to all dossiers", "label": "False positive" }, "in-dossier": { "description": "Do not {type} \"{value}\" in any document of the current dossier.", + "description-bulk": "Do not redact the selected terms as their respective types in any dossier.", "extraOptionLabel": "Apply to all dossiers", - "label": "Remove from dossier" + "label": "Remove from dossier", + "label-bulk": "No longer redact in any dossier" }, "only-here": { "description": "Do not {type, select, undefined{redact} other{type}} \"{value}\" at this position in the current document.", + "description-bulk": "Do not redact the selected terms at this position in the current document.", "label": "Remove here" } - } + }, + "redacted-text": "Selected {type}" }, - "title": "Remove {type}" + "title": "Remove {type, select, redaction{redaction} recommendation{recommendation} other{hint}}", + "title-bulk": "Remove {type, select, redaction{redactions} recommendation{recommendations} other{hints}}" } }, "report-type": { @@ -2533,4 +2541,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 f8e015e25..6bef9e9c2 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -2070,6 +2070,8 @@ "content": { "comment": "", "comment-placeholder": "", + "list-item": "", + "list-item-false-positive": "", "options": { "do-not-recommend": { "description": "", @@ -2079,21 +2081,27 @@ }, "false-positive": { "description": "", + "description-bulk": "", "extraOptionLabel": "", "label": "" }, "in-dossier": { "description": "", + "description-bulk": "", "extraOptionLabel": "", - "label": "" + "label": "", + "label-bulk": "" }, "only-here": { "description": "", + "description-bulk": "", "label": "" } - } + }, + "redacted-text": "" }, - "title": "" + "title": "", + "title-bulk": "" } }, "report-type": { diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 43dc78a82..1846116f6 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -2070,6 +2070,8 @@ "content": { "comment": "Comment", "comment-placeholder": "Add remarks or mentions ...", + "list-item": "", + "list-item-false-positive": "", "options": { "do-not-recommend": { "description": "Do not recommend \"{value}\" as {type} in any document of the current dossier.", @@ -2079,21 +2081,27 @@ }, "false-positive": { "description": "\"{value}\" is not a {type} in this context: \"{context}\".", + "description-bulk": "", "extraOptionLabel": "Apply to all dossiers", "label": "False positive" }, "in-dossier": { "description": "Do not {type} \"{value}\" in any document of the current dossier.", + "description-bulk": "", "extraOptionLabel": "Apply to all dossiers", - "label": "Remove from dossier" + "label": "Remove from dossier", + "label-bulk": "" }, "only-here": { "description": "Do not {type} \"{value}\" at this position in the current document.", + "description-bulk": "", "label": "Remove here" } - } + }, + "redacted-text": "" }, - "title": "Remove {type}" + "title": "Remove {type}", + "title-bulk": "" } }, "report-type": { From 75e570082ffe27c351749d65c041b4ca5155dd77 Mon Sep 17 00:00:00 2001 From: project_703_bot_497bb7eb186ca592c63b3e50cd5c69e1 Date: Wed, 13 Sep 2023 19:30:09 +0000 Subject: [PATCH 3/7] push back localazy update --- apps/red-ui/src/assets/i18n/redact/de.json | 156 ++++++++++----------- apps/red-ui/src/assets/i18n/redact/en.json | 2 +- 2 files changed, 75 insertions(+), 83 deletions(-) diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index dc71a9e02..e2b3a85cd 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -256,6 +256,9 @@ "user-management": "User Management", "watermarks": "Watermarks" }, + "annotation": { + "pending": "(Pending Analysis)" + }, "annotation-actions": { "accept-recommendation": { "label": "Empfehlung annehmen" @@ -338,14 +341,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!" + }, "request-change-legal-basis": { "error": "Fehler beim Vorschlagen der Änderung der Begründung:", "success": "Die Änderung der in der Anmerkung genannten Begründung wurde beantragt." @@ -362,14 +365,14 @@ "error": "Fehler beim Vorschlagen der Neukategorisierung des Bilds: {error}", "success": "Bild-Neuklassifizierung angefordert." }, - "request-remove-hint": { - "error": "Failed to request removal of hint: {error}", - "success": "Requested to remove hint!" - }, "request-remove": { "error": "Fehler beim Erstellen des Vorschlags für das Entfernen der Schwärzung: {error}", "success": "Entfernen der Schwärzung wurde vorgeschlagen!" }, + "request-remove-hint": { + "error": "Failed to request removal of hint: {error}", + "success": "Requested to remove hint!" + }, "suggest": { "error": "Vorschlag einer Schwärzung wurde nicht gespeichert: {error}", "success": "Vorschlag einer Schwärzung gespeichert" @@ -386,15 +389,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" }, @@ -436,9 +439,6 @@ "suggestion-resize": "Vorgeschlagene Größenänderung", "text-highlight": "Earmark" }, - "annotation": { - "pending": "(Pending Analysis)" - }, "archived-dossiers-listing": { "no-data": { "title": "No archived dossiers." @@ -618,14 +618,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 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": { @@ -634,10 +638,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?", @@ -983,13 +983,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": { @@ -1058,6 +1058,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", @@ -1093,14 +1101,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": "There is no watermark defined for the dossier template.
Contact your app admin to define one.", @@ -1299,13 +1299,13 @@ "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": { @@ -1323,6 +1323,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", @@ -1333,12 +1339,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": { @@ -1552,15 +1552,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", @@ -1571,6 +1562,15 @@ "suggestion": "Vorgeschlagene Schwärzung", "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", @@ -1737,7 +1737,6 @@ }, "license-info-screen": { "backend-version": "Backend-Version der Anwendung", - "capacity-details": "Capacity Details", "capacity": { "active-documents": "Active Documents", "all-documents": "Retention Capacity Used", @@ -1747,12 +1746,12 @@ "trash-documents": "Documents in Trash", "unused": "Unused Storage" }, + "capacity-details": "Capacity Details", "copyright-claim-text": "Copyright © 2020 - {currentYear} knecon", "copyright-claim-title": "Copyright", "current-analyzed-pages": "In aktuellem Lizenzzeitraum analysierte Seiten", "current-volume-analyzed": "Data Volume Analyzed in Licensing Period", "custom-app-title": "Name der Anwendung", - "email-report": "E-Mail-Bericht", "email": { "body": { "analyzed": "Im aktuellen Lizenzzeitraum insgesamt analysierte Seiten: {pages}.", @@ -1760,6 +1759,7 @@ }, "title": "Lizenzbericht {licenseCustomer}" }, + "email-report": "E-Mail-Bericht", "end-user-license-text": "Die Nutzung dieses Produkts unterliegt den Bedingungen der Endbenutzer-Lizenzvereinbarung für den RedactManager, sofern darin nichts anderweitig festgelegt.", "end-user-license-title": "Endbenutzer-Lizenzvereinbarung", "license-title": "License Title", @@ -1844,6 +1844,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", @@ -1857,7 +1864,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", @@ -1875,6 +1881,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", @@ -1882,13 +1889,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", @@ -1980,16 +1980,16 @@ "warnings-subtitle": "Do not show again options", "warnings-title": "Prompts and Dialogs Settings" }, + "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": { @@ -2070,8 +2070,6 @@ "content": { "comment": "Comment", "comment-placeholder": "Add remarks or mentions ...", - "list-item": "", - "list-item-false-positive": "", "options": { "do-not-recommend": { "description": "Do not recommend \"{value}\" as {type} in any document of the current dossier.", @@ -2081,27 +2079,21 @@ }, "false-positive": { "description": "\"{value}\" is not a {type} in this context: \"{context}\".", - "description-bulk": "", "extraOptionLabel": "Apply to all dossiers", "label": "False positive" }, "in-dossier": { "description": "Do not {type} \"{value}\" in any document of the current dossier.", - "description-bulk": "", "extraOptionLabel": "Apply to all dossiers", - "label": "Remove from dossier", - "label-bulk": "" + "label": "Remove from dossier" }, "only-here": { "description": "Do not {type, select, undefined{redact} other{type}} \"{value}\" at this position in the current document.", - "description-bulk": "", "label": "Remove here" } - }, - "redacted-text": "" + } }, - "title": "Remove {type}", - "title-bulk": "" + "title": "Remove {type}" } }, "report-type": { @@ -2252,6 +2244,12 @@ "title": "Rule Editor", "warning-text": "Warning: experimental feature!" }, + "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", @@ -2275,12 +2273,6 @@ "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": { @@ -2541,4 +2533,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 5f4a59e47..1a5d3bf82 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -2541,4 +2541,4 @@ } }, "yesterday": "Yesterday" -} +} \ No newline at end of file From d787943363e13d78468849653e014ac78d1cd4ac Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Thu, 14 Sep 2023 00:52:50 +0300 Subject: [PATCH 4/7] RED-7588 - Improve the behavior of the add-to-dict text edit in new dialog --- .../redact-text-dialog.component.html | 8 ++++--- .../redact-text-dialog.component.scss | 15 ++++++++++++ .../redact-text-dialog.component.ts | 24 ++++++++++++++----- apps/red-ui/src/app/utils/functions.ts | 18 ++++++++++++++ 4 files changed, 56 insertions(+), 9 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.html b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.html index 9b727bea3..e900cddfb 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.html +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.html @@ -12,22 +12,24 @@ " class="selected-text" > -
+
{{ form.get('selectedText').value }} div { gap: 0.5rem; + + span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } } .edit-button { top: 0; right: calc((0.5rem + 34px) * -1); + position: sticky; } .undo-button { @@ -28,3 +35,11 @@ .relative { position: relative; } + +.fixed-height { + min-height: 40px; +} + +textarea { + margin-top: 0; +} diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts index 66e8f8c43..3a11a87a2 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts @@ -1,6 +1,6 @@ import { Component, inject, OnInit } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { FormBuilder } from '@angular/forms'; +import { FormBuilder, UntypedFormGroup } from '@angular/forms'; import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui'; import { Dictionary, IAddRedactionRequest, SuperTypes } from '@red/domain'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; @@ -12,6 +12,9 @@ import { tap } from 'rxjs/operators'; import { getRedactOrHintOptions, RedactOrHintOption, RedactOrHintOptions } from '../../utils/dialog-options'; import { RedactTextData, RedactTextResult } from '../../utils/dialog-types'; import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; +import { calcTextWidthInPixels } from '@utils/functions'; + +const MAXIMUM_SELECTED_TEXT_WIDTH = 421; @Component({ templateUrl: './redact-text-dialog.component.html', @@ -21,19 +24,20 @@ export class RedactTextDialogComponent extends IqserDialogComponent implements OnInit { + readonly #manualRedactionTypeExists: boolean; + readonly #dossier = inject(ActiveDossiersService).find(this.data.dossierId); + #applyToAllDossiers = this.data.applyToAllDossiers ?? true; readonly roles = Roles; readonly iconButtonTypes = IconButtonTypes; readonly options: DetailsRadioOption[]; + readonly form: UntypedFormGroup; + readonly initialText: string; dictionaryRequest = false; legalOptions: LegalBasisOption[] = []; dictionaries: Dictionary[] = []; - readonly form; isEditingSelectedText = false; - readonly initialText: string; modifiedText: string; - readonly #manualRedactionTypeExists: boolean; - #applyToAllDossiers = this.data.applyToAllDossiers ?? true; - readonly #dossier = inject(ActiveDossiersService).find(this.data.dossierId); + selectedTextRows = 1; constructor( private readonly _justificationsService: JustificationsService, @@ -130,6 +134,14 @@ export class RedactTextDialogComponent }); } + toggleEditingSelectedText() { + this.isEditingSelectedText = !this.isEditingSelectedText; + if (this.isEditingSelectedText) { + const width = calcTextWidthInPixels(this.form.get('selectedText').value); + this.selectedTextRows = Math.ceil(width / MAXIMUM_SELECTED_TEXT_WIDTH); + } + } + #setDictionaries() { this.dictionaries = this._dictionaryService.getRedactTextDictionaries(this.#dossier.dossierTemplateId, !this.#applyToAllDossiers); } diff --git a/apps/red-ui/src/app/utils/functions.ts b/apps/red-ui/src/app/utils/functions.ts index b63b3aa2a..83190316a 100644 --- a/apps/red-ui/src/app/utils/functions.ts +++ b/apps/red-ui/src/app/utils/functions.ts @@ -115,3 +115,21 @@ export function moveElementInArray(array: T[], element: T, index: number) { result.splice(index, 0, element); return result; } + +export function calcTextWidthInPixels(text: string): number { + const temporaryElement = document.createElement('span'); + document.body.appendChild(temporaryElement); + + temporaryElement.style.font = 'times new roman'; + temporaryElement.style.fontSize = 13 + 'px'; + temporaryElement.style.height = 'auto'; + temporaryElement.style.width = 'auto'; + temporaryElement.style.position = 'absolute'; + temporaryElement.style.whiteSpace = 'no-wrap'; + temporaryElement.innerHTML = text; + + const width = Math.ceil(temporaryElement.clientWidth); + document.body.removeChild(temporaryElement); + + return width; +} From 471463f897d051d66b2963d26e063cf87b523bf6 Mon Sep 17 00:00:00 2001 From: project_703_bot_497bb7eb186ca592c63b3e50cd5c69e1 Date: Wed, 13 Sep 2023 21:53:38 +0000 Subject: [PATCH 5/7] push back localazy update --- apps/red-ui/src/assets/i18n/redact/de.json | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index e2b3a85cd..12448eefa 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -2052,11 +2052,11 @@ }, "only-here": { "description": "Do not annotate \"{value}\" at this position in the current document.", - "description-bulk": "", + "description-bulk": "Do not annotate the selected terms at this position in the current document.", "label": "Remove here" } }, - "redacted-text": "" + "redacted-text": "Selected redactions" }, "title": "Remove {count, plural, one{annotation} other {annotations}}" } @@ -2070,30 +2070,38 @@ "content": { "comment": "Comment", "comment-placeholder": "Add remarks or mentions ...", + "list-item": "{text}", + "list-item-false-positive": "\"{text}\" in the context: \"{context}\"", "options": { "do-not-recommend": { "description": "Do not recommend \"{value}\" as {type} in any document of the current dossier.", - "description-bulk": "", + "description-bulk": "Do not recommend the selected terms in any document of the current dossier.", "extraOptionLabel": "Apply to all dossiers", "label": "Remove from dossier" }, "false-positive": { "description": "\"{value}\" is not a {type} in this context: \"{context}\".", + "description-bulk": "Do not redact the selected terms in their respective context.", "extraOptionLabel": "Apply to all dossiers", "label": "False positive" }, "in-dossier": { "description": "Do not {type} \"{value}\" in any document of the current dossier.", + "description-bulk": "Do not redact the selected terms as their respective types in any dossier.", "extraOptionLabel": "Apply to all dossiers", - "label": "Remove from dossier" + "label": "Remove from dossier", + "label-bulk": "No longer redact in any dossier" }, "only-here": { "description": "Do not {type, select, undefined{redact} other{type}} \"{value}\" at this position in the current document.", + "description-bulk": "Do not redact the selected terms at this position in the current document.", "label": "Remove here" } - } + }, + "redacted-text": "Selected {type}" }, - "title": "Remove {type}" + "title": "Remove {type, select, redaction{redaction} recommendation{recommendation} other{hint}}", + "title-bulk": "Remove {type, select, redaction{redactions} recommendation{recommendations} other{hints}}" } }, "report-type": { From 7cb9c3604a6a7c3972153fa8d3d66f7f934f9b8e Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Thu, 14 Sep 2023 14:39:15 +0300 Subject: [PATCH 6/7] DM-414 fix save button not enabled --- .../add-entity-dialog.component.html | 7 +----- .../add-entity-dialog.component.ts | 9 +++++--- .../add-edit-entity.component.ts | 23 +++++++++---------- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.html index 0b9200a81..5acca05b3 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.html @@ -4,12 +4,7 @@
- +
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.ts index 88f4b2b99..d4c47a4c6 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.ts @@ -1,7 +1,7 @@ -import { ChangeDetectionStrategy, Component, inject, ViewChild } from '@angular/core'; +import { Component, inject, ViewChild } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { AddEditEntityComponent } from '@shared/components/add-edit-entity/add-edit-entity.component'; import { BaseDialogComponent, getConfig, IconButtonTypes } from '@iqser/common-ui'; +import { AddEditEntityComponent } from '@shared/components/add-edit-entity/add-edit-entity.component'; interface DialogData { readonly dossierTemplateId: string; @@ -10,7 +10,6 @@ interface DialogData { @Component({ templateUrl: './add-entity-dialog.component.html', styleUrls: ['./add-entity-dialog.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, }) export class AddEntityDialogComponent extends BaseDialogComponent { @ViewChild(AddEditEntityComponent, { static: true }) private readonly _addEditEntityComponent: AddEditEntityComponent; @@ -30,6 +29,10 @@ export class AddEntityDialogComponent extends BaseDialogComponent { return this._addEditEntityComponent.changed; } + get disabled(): boolean { + return this._addEditEntityComponent.disabled; + } + async save(): Promise { try { await this._addEditEntityComponent.save(); diff --git a/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.ts b/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.ts index 78d4501b8..7e423e2e7 100644 --- a/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.ts @@ -1,13 +1,13 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; -import { Dictionary, IDictionary } from '@red/domain'; +import { booleanAttribute, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; import { FormGroup, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; -import { map, startWith } from 'rxjs/operators'; -import { firstValueFrom, Observable } from 'rxjs'; -import { toSnakeCase } from '@utils/functions'; -import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { DictionaryService } from '@services/entity-services/dictionary.service'; import { BaseFormComponent, getConfig, LoadingService, Toaster } from '@iqser/common-ui'; +import { Dictionary, IDictionary } from '@red/domain'; +import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; +import { DictionaryService } from '@services/entity-services/dictionary.service'; +import { toSnakeCase } from '@utils/functions'; +import { firstValueFrom, Observable } from 'rxjs'; +import { map, startWith } from 'rxjs/operators'; const REDACTION_FIELDS = ['defaultReason']; @@ -20,15 +20,14 @@ interface Color { } @Component({ - selector: 'redaction-add-edit-entity [entity] [dossierTemplateId] [readOnly]', + selector: 'redaction-add-edit-entity [entity] [dossierTemplateId]', templateUrl: './add-edit-entity.component.html', styleUrls: ['./add-edit-entity.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, }) export class AddEditEntityComponent extends BaseFormComponent implements OnInit { - @Input() dossierTemplateId: string; - @Input() entity: Dictionary; - @Input() readOnly: boolean; + @Input({ required: true }) dossierTemplateId: string; + @Input({ required: true }) entity: Dictionary; + @Input({ transform: booleanAttribute }) readOnly = false; @Input() dossierId?: string; technicalName$: Observable; From 5ba6eb38ab6543ec28c55ece06649273144c9432 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Thu, 14 Sep 2023 15:47:02 +0300 Subject: [PATCH 7/7] DM-358 - Implement Help Mode-IDs for DocuMine --- .../screens/audit/audit-screen.component.html | 5 +++-- ...file-attributes-listing-screen.component.html | 2 +- .../reports-screen/reports-screen.component.html | 4 ++-- .../src/assets/help-mode/help-mode-keys.json | 16 ++++++++++++++++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.html index 499c694b2..4b864e455 100644 --- a/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.html @@ -24,7 +24,7 @@
·
- +
@@ -103,7 +103,7 @@
- {{ log.recordDate | date : 'd MMM yyyy, hh:mm a' }} + {{ log.recordDate | date: 'd MMM yyyy, hh:mm a' }}
@@ -116,6 +116,7 @@
{{ placeholder.placeholder }}
@@ -25,7 +25,7 @@ (action)="fileInput.click()" *allow="roles.reportTemplates.upload; if: currentUser.isAdmin" [tooltip]="'reports-screen.upload-document' | translate" - [attr.help-mode-key]="'reports'" + [attr.help-mode-key]="'upload_report'" icon="iqser:upload" >
diff --git a/apps/red-ui/src/assets/help-mode/help-mode-keys.json b/apps/red-ui/src/assets/help-mode/help-mode-keys.json index 061fba14e..e26cd61b6 100644 --- a/apps/red-ui/src/assets/help-mode/help-mode-keys.json +++ b/apps/red-ui/src/assets/help-mode/help-mode-keys.json @@ -596,5 +596,21 @@ "elementKey": "workload_bulk_selection", "documentKey": "workload_bulk_selection", "overlappingElements": ["USER_MENU", "DOCUMENT_INFO"] + }, + { + "elementKey": "audit_detailed_audit_info", + "documentKey": "audit_detailed_audit_info" + }, + { + "elementKey": "audit_filter_audit_entries", + "documentKey": "audit_filter_audit_entries" + }, + { + "elementKey": "configure_csv_mapping", + "documentKey": "configure_csv_mapping" + }, + { + "elementKey": "upload_report", + "documentKey": "upload_report" } ]