From 43154346e3d55ccc5d30ac0065d6e83bdddb58a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 23 Sep 2024 11:54:00 +0300 Subject: [PATCH 01/12] RED-9830: Don't send additional comment request for annotation edit --- .../services/annotation-actions.service.ts | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) 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 7673762e6..bf0907324 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 @@ -1,6 +1,6 @@ -import { inject, Injectable } from '@angular/core'; +import { Injectable } from '@angular/core'; import { IqserDialog } from '@common-ui/dialog/iqser-dialog.service'; -import { getConfig, Toaster } from '@iqser/common-ui'; +import { getConfig } from '@iqser/common-ui'; import { List, log } from '@iqser/common-ui/lib/utils'; import { AnnotationPermissions } from '@models/file/annotation.permissions'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; @@ -13,7 +13,6 @@ import { IRectangle, IResizeRequest, } from '@red/domain'; -import { CommentsApiService } from '@services/comments-api.service'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; import { PermissionsService } from '@services/permissions.service'; import { firstValueFrom, Observable } from 'rxjs'; @@ -48,7 +47,6 @@ import { SkippedService } from './skipped.service'; @Injectable() export class AnnotationActionsService { readonly #isDocumine = getConfig().IS_DOCUMINE; - readonly #commentsApiService = inject(CommentsApiService); constructor( private readonly _manualRedactionService: ManualRedactionService, @@ -63,7 +61,6 @@ export class AnnotationActionsService { private readonly _skippedService: SkippedService, private readonly _dossierTemplatesService: DossierTemplatesService, private readonly _permissionsService: PermissionsService, - private readonly _toaster: Toaster, ) {} removeHighlights(highlights: AnnotationWrapper[]): void { @@ -107,7 +104,11 @@ export class AnnotationActionsService { } const recategorizeBody: List = annotations.map(annotation => { - const body = { annotationId: annotation.id, type: result.type ?? annotation.type }; + const body: IRecategorizationRequest = { + annotationId: annotation.id, + type: result.type ?? annotation.type, + comment: result.comment, + }; if (!this.#isDocumine) { return { ...body, @@ -130,16 +131,6 @@ export class AnnotationActionsService { ) .pipe(log()), ); - - if (result.comment) { - try { - for (const a of annotations) { - await this.#commentsApiService.add(result.comment, a.id, dossierId, fileId); - } - } catch (error) { - this._toaster.rawError(error.error.message); - } - } } async removeRedaction(redactions: AnnotationWrapper[], permissions: AnnotationPermissions) { From 179abe4f37e0c236bd67a6a6222c242208fc2350 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Mon, 23 Sep 2024 11:58:39 +0300 Subject: [PATCH 02/12] RED-10028: added OPTIMIZED_PREVIEW file type in download selection. --- .../dossier-template-info-screen.component.ts | 2 +- .../edit-dossier-download-package.component.ts | 16 ++++++++++------ .../add-dossier-dialog.component.ts | 16 ++++++++++------ .../download-dialog/download-dialog.component.ts | 2 +- .../translations/download-types-translations.ts | 2 ++ apps/red-ui/src/assets/i18n/redact/de.json | 1 + apps/red-ui/src/assets/i18n/redact/en.json | 1 + apps/red-ui/src/assets/i18n/scm/de.json | 1 + apps/red-ui/src/assets/i18n/scm/en.json | 1 + libs/red-domain/src/lib/shared/types.ts | 1 + 10 files changed, 29 insertions(+), 14 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-info-screen/dossier-template-info-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-info-screen/dossier-template-info-screen.component.ts index a9b2ffd59..314d5ee3d 100644 --- a/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-info-screen/dossier-template-info-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/info/dossier-template-info-screen/dossier-template-info-screen.component.ts @@ -28,7 +28,7 @@ import { MatIcon } from '@angular/material/icon'; import { SelectComponent } from '@shared/components/select/select.component'; import { MatSuffix } from '@angular/material/form-field'; -const downloadTypes = ['ORIGINAL', 'PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map(type => ({ +const downloadTypes = ['ORIGINAL', 'PREVIEW', 'OPTIMIZED_PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map(type => ({ key: type, label: downloadTypesTranslations[type], })); diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts index ce7c1d58c..c41932fba 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts @@ -42,12 +42,16 @@ export class EditDossierDownloadPackageComponent { #existsWatermarks$: Observable; form: FormGroup; - downloadTypes: { key: DownloadFileType; label: string }[] = ['ORIGINAL', 'PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map( - (type: DownloadFileType) => ({ - key: type, - label: downloadTypesTranslations[type], - }), - ); + downloadTypes: { key: DownloadFileType; label: string }[] = [ + 'ORIGINAL', + 'PREVIEW', + 'OPTIMIZED_PREVIEW', + 'DELTA_PREVIEW', + 'REDACTED', + ].map((type: DownloadFileType) => ({ + key: type, + label: downloadTypesTranslations[type], + })); availableReportTypes: IReportTemplate[] = []; readonly roles = Roles; @Input() dossier: Dossier; diff --git a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts index b79ea0e3d..23cfa0374 100644 --- a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts @@ -71,12 +71,16 @@ export class AddDossierDialogComponent extends BaseDialogComponent implements On readonly roles = Roles; readonly iconButtonTypes = IconButtonTypes; hasDueDate = false; - readonly downloadTypes: { key: DownloadFileType; label: string }[] = ['ORIGINAL', 'PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map( - (type: DownloadFileType) => ({ - key: type, - label: downloadTypesTranslations[type], - }), - ); + readonly downloadTypes: { key: DownloadFileType; label: string }[] = [ + 'ORIGINAL', + 'PREVIEW', + 'OPTIMIZED_PREVIEW', + 'DELTA_PREVIEW', + 'REDACTED', + ].map((type: DownloadFileType) => ({ + key: type, + label: downloadTypesTranslations[type], + })); dossierTemplates: IDossierTemplate[]; availableReportTypes: IReportTemplate[] = []; dossierTemplateId: string; diff --git a/apps/red-ui/src/app/modules/shared/dialogs/download-dialog/download-dialog.component.ts b/apps/red-ui/src/app/modules/shared/dialogs/download-dialog/download-dialog.component.ts index 169c55d91..27b90a794 100644 --- a/apps/red-ui/src/app/modules/shared/dialogs/download-dialog/download-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared/dialogs/download-dialog/download-dialog.component.ts @@ -90,7 +90,7 @@ export class DownloadDialogComponent extends IqserDialogComponent ({ key: type, label: downloadTypesForDownloadTranslations[type], diff --git a/apps/red-ui/src/app/translations/download-types-translations.ts b/apps/red-ui/src/app/translations/download-types-translations.ts index e11ea04a9..57ed1c79f 100644 --- a/apps/red-ui/src/app/translations/download-types-translations.ts +++ b/apps/red-ui/src/app/translations/download-types-translations.ts @@ -4,6 +4,7 @@ import { DownloadFileType } from '@red/domain'; export const downloadTypesTranslations: { [key in DownloadFileType]: string } = { ORIGINAL: _('download-type.original'), PREVIEW: _('download-type.preview'), + OPTIMIZED_PREVIEW: _('download-type.optimized-preview'), REDACTED: _('download-type.redacted'), ANNOTATED: _('download-type.annotated'), FLATTEN: _('download-type.flatten'), @@ -13,6 +14,7 @@ export const downloadTypesTranslations: { [key in DownloadFileType]: string } = export const downloadTypesForDownloadTranslations: { [key in DownloadFileType]: string } = { ORIGINAL: _('download-type.original'), PREVIEW: _('download-type.preview'), + OPTIMIZED_PREVIEW: _('download-type.optimized-preview'), REDACTED: _('download-type.redacted-only'), ANNOTATED: _('download-type.annotated'), FLATTEN: _('download-type.flatten'), diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index bbb54f960..d97127b00 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -1167,6 +1167,7 @@ "delta-preview": "Delta-PDF", "flatten": "Verflachte PDF", "label": "{length} Dokumenten{length, plural, one{typ} other{typen}}", + "optimized-preview": "Optimized Preview PDF", "original": "Optimierte PDF", "preview": "Vorschau-PDF", "redacted": "Geschwärzte PDF", diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index d642af27b..b8c85c8c0 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -1167,6 +1167,7 @@ "delta-preview": "Delta PDF", "flatten": "Flatten PDF", "label": "{length} document {length, plural, one{version} other{versions}}", + "optimized-preview": "Optimized Preview PDF", "original": "Optimized PDF", "preview": "Preview PDF", "redacted": "Redacted PDF", diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 324bb1632..dd2b402dc 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -1167,6 +1167,7 @@ "delta-preview": "Delta PDF", "flatten": "PDF verflachen", "label": "{length} document {length, plural, one{version} other{versions}}", + "optimized-preview": "Optimized Preview PDF", "original": "Optimiertes PDF", "preview": "PDF-Vorschau", "redacted": "geschwärztes PDF", diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 426738e9c..320543548 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -1167,6 +1167,7 @@ "delta-preview": "Delta PDF", "flatten": "Flatten PDF", "label": "{length} document {length, plural, one{version} other{versions}}", + "optimized-preview": "Optimized Preview PDF", "original": "Optimized PDF", "preview": "Preview PDF", "redacted": "Redacted PDF", diff --git a/libs/red-domain/src/lib/shared/types.ts b/libs/red-domain/src/lib/shared/types.ts index 84fdf4d00..5603dbf09 100644 --- a/libs/red-domain/src/lib/shared/types.ts +++ b/libs/red-domain/src/lib/shared/types.ts @@ -3,6 +3,7 @@ export const DownloadFileTypes = { FLATTEN: 'FLATTEN', ORIGINAL: 'ORIGINAL', PREVIEW: 'PREVIEW', + OPTIMIZED_PREVIEW: 'OPTIMIZED_PREVIEW', REDACTED: 'REDACTED', DELTA_PREVIEW: 'DELTA_PREVIEW', } as const; From aa2012bbda06853bfda84c84214beece27af472a Mon Sep 17 00:00:00 2001 From: Christoph Schabert Date: Mon, 23 Sep 2024 11:19:06 +0200 Subject: [PATCH 03/12] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7ebac71ca..c8c245848 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,9 +21,9 @@ localazy update: paths: - .yarn-cache/ script: - - git config user.email "${CI_EMAIL}" - - git config user.name "${CI_USERNAME}" - - git remote add gitlab_origin https://${CI_USERNAME}:${CI_ACCESS_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git + # - git config user.email "${CI_EMAIL}" + # - git config user.name "${CI_USERNAME}" + # - git remote add gitlab_origin https://${CI_USERNAME}:${CI_ACCESS_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git - cd tools/localazy - yarn install --cache-folder .yarn-cache - yarn start @@ -35,7 +35,8 @@ localazy update: then git status git commit -m "push back localazy update" - git push gitlab_origin HEAD:${CI_COMMIT_REF_NAME} + # git push gitlab_origin HEAD:${CI_COMMIT_REF_NAME} + git push https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git fi rules: - if: $CI_PIPELINE_SOURCE == "schedule" From 12768b52199a00f1044b9bd7eae4d93ac4140fe8 Mon Sep 17 00:00:00 2001 From: Christoph Schabert Date: Mon, 23 Sep 2024 11:22:16 +0200 Subject: [PATCH 04/12] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c8c245848..7f7e48c82 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,6 +24,7 @@ localazy update: # - git config user.email "${CI_EMAIL}" # - git config user.name "${CI_USERNAME}" # - git remote add gitlab_origin https://${CI_USERNAME}:${CI_ACCESS_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git + - git pull - cd tools/localazy - yarn install --cache-folder .yarn-cache - yarn start @@ -36,7 +37,8 @@ localazy update: git status git commit -m "push back localazy update" # git push gitlab_origin HEAD:${CI_COMMIT_REF_NAME} - git push https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git + # git push https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git + git push fi rules: - if: $CI_PIPELINE_SOURCE == "schedule" From 7f08355311c85e4675d69b3af3e241b7be956eb1 Mon Sep 17 00:00:00 2001 From: Christoph Schabert Date: Mon, 23 Sep 2024 11:25:36 +0200 Subject: [PATCH 05/12] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7f7e48c82..2a66308db 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,7 +24,6 @@ localazy update: # - git config user.email "${CI_EMAIL}" # - git config user.name "${CI_USERNAME}" # - git remote add gitlab_origin https://${CI_USERNAME}:${CI_ACCESS_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git - - git pull - cd tools/localazy - yarn install --cache-folder .yarn-cache - yarn start From 63e53cb2ed5cf337facd42fe022db936c4107abc Mon Sep 17 00:00:00 2001 From: Christoph Schabert Date: Mon, 23 Sep 2024 11:31:08 +0200 Subject: [PATCH 06/12] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2a66308db..8ace6ab80 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,6 +24,7 @@ localazy update: # - git config user.email "${CI_EMAIL}" # - git config user.name "${CI_USERNAME}" # - git remote add gitlab_origin https://${CI_USERNAME}:${CI_ACCESS_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git + - git push https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git - cd tools/localazy - yarn install --cache-folder .yarn-cache - yarn start @@ -35,9 +36,9 @@ localazy update: then git status git commit -m "push back localazy update" - # git push gitlab_origin HEAD:${CI_COMMIT_REF_NAME} + git push gitlab_origin HEAD:${CI_COMMIT_REF_NAME} # git push https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.knecon.com/redactmanager/red-ui.git - git push + # git push fi rules: - if: $CI_PIPELINE_SOURCE == "schedule" From b5f1afb81effcc46a85d157e4fc312f7ed406307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Mon, 23 Sep 2024 11:53:26 +0200 Subject: [PATCH 07/12] RED-10084: All members of a dossier are able to reanalyse files in error state, no only the owner or assignee --- apps/red-ui/src/app/services/permissions.service.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index f1c283543..382711250 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -401,11 +401,7 @@ export class PermissionsService { } #canReanalyseFile(file: File, dossier: Dossier): boolean { - return ( - dossier.isActive && - ((this.isAssigneeOrApprover(file, dossier) && file.analysisRequired) || - (file.isError && (this.isOwner(dossier) || this.isFileAssignee(file)))) - ); + return dossier.isActive && ((this.isAssigneeOrApprover(file, dossier) && file.analysisRequired) || file.isError); } #canEnableAutoAnalysis(file: File, dossier: Dossier): boolean { From 5de6b359ee514c24f1be1026807d9b45ca645afe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 23 Sep 2024 13:18:05 +0300 Subject: [PATCH 08/12] Revision of the dossier dictionary presentation --- .../edit-dossier-dictionary.component.html | 64 ++++++++------- .../dictionary-manager.component.html | 31 ++------ .../dictionary-manager.component.ts | 77 +++---------------- .../components/editor/editor.component.ts | 25 +++--- apps/red-ui/src/assets/i18n/redact/de.json | 7 +- apps/red-ui/src/assets/i18n/redact/en.json | 9 ++- apps/red-ui/src/assets/i18n/scm/de.json | 7 +- apps/red-ui/src/assets/i18n/scm/en.json | 7 +- 8 files changed, 87 insertions(+), 140 deletions(-) diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html index 727bec369..7d5b0684e 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html @@ -18,12 +18,15 @@
- {{ - dictionary.entries.length + - dictionary.falsePositiveEntries.length + - dictionary.falseRecommendationEntries.length - }} - entries +
@@ -36,12 +39,12 @@
{{ selectedDictionary?.label }}
@@ -68,23 +71,6 @@
-
- - - -
+ > + +
+ + + +
+
+ diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html index 546c0c2f2..4557166e6 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html @@ -1,29 +1,7 @@
-
- - -
-
- -
- -
- {{ currentMatch + '/' + findMatches.length }} - - - -
-
-
+ + +
diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts index a842204f7..5145a99bc 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts @@ -8,9 +8,7 @@ import { DossierTemplatesService } from '@services/dossier-templates/dossier-tem import { EditorComponent } from '@shared/components/editor/editor.component'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; import { saveAs } from 'file-saver'; -import { Debounce, List } from '@iqser/common-ui/lib/utils'; -import IModelDeltaDecoration = monaco.editor.IModelDeltaDecoration; -import FindMatch = monaco.editor.FindMatch; +import { List } from '@iqser/common-ui/lib/utils'; import { firstValueFrom } from 'rxjs'; import { MatIcon } from '@angular/material/icon'; import { NgForOf, NgIf } from '@angular/common'; @@ -23,7 +21,6 @@ import { MatOption, MatSelect } from '@angular/material/select'; import { MatDivider } from '@angular/material/divider'; const COMPARE_ENTRIES_ERROR = 'compare-entries-error'; -const SMOOTH_SCROLL = 0; const HELP_MODE_KEYS = { dictionary: 'dictionary_entity', 'false-positive': 'false_recommendations_entity', @@ -53,8 +50,6 @@ const HELP_MODE_KEYS = { ], }) export class DictionaryManagerComponent implements OnChanges, OnInit { - private _searchDecorations: string[] = []; - readonly #currentTab = window.location.href.split('/').pop(); @Input() type: DictionaryType = 'dictionary'; @Input() entityType?: string; @Input() currentDossierId: string; @@ -73,11 +68,8 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { readonly iconButtonTypes = IconButtonTypes; dossiers: Dossier[]; dossierTemplates: DossierTemplate[] = this.dossierTemplatesService.all; - currentMatch = 0; - findMatches: FindMatch[] = []; diffEditorText = ''; showDiffEditor = false; - searchText = ''; selectDossier = { dossierName: _('dictionary-overview.compare.select-dossier') } as Dossier; selectDictionary = { label: _('dictionary-overview.compare.select-dictionary'), @@ -85,10 +77,11 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { selectDossierTemplate = { name: _('dictionary-overview.compare.select-dossier-template') } as DossierTemplate; compare = false; dictionaries: List = this.#dictionaries; + protected initialDossierTemplateId: string; + readonly #currentTab = window.location.href.split('/').pop(); #dossierTemplate = this.dossierTemplatesService.all[0]; #dossier = this.selectDossier; #dictionary = this.selectDictionary; - protected initialDossierTemplateId: string; constructor( private readonly _dictionaryService: DictionaryService, @@ -99,11 +92,6 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { readonly dossierTemplatesService: DossierTemplatesService, ) {} - ngOnInit() { - this.initialDossierTemplateId = this.currentDossierTemplateId; - this.#updateDropdownsOptions(); - } - get selectedDossierTemplate() { return this.#dossierTemplate; } @@ -150,6 +138,7 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { if (dictionary.type) { this.selectedDictionaryType = dictionary.type; this.#dictionary = dictionary; + console.log(dictionary); this.#onDossierChanged(this.#dossier.dossierTemplateId).then(entries => this.#updateDiffEditorText(entries)); } } @@ -185,6 +174,11 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { ); } + ngOnInit() { + this.initialDossierTemplateId = this.currentDossierTemplateId; + this.#updateDropdownsOptions(); + } + download(): void { const content = this.editor.currentEntries.join('\n'); const blob = new Blob([content], { @@ -195,35 +189,6 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { revert() { this.editor?.revert(); - this.searchText = ''; - this.searchChanged(''); - } - - @Debounce() - searchChanged(text: string) { - this.findMatches = this.#getMatches(text.toLowerCase()); - this.#applySearchDecorations(); - - this.currentMatch = 0; - this.nextSearchMatch(); - } - - nextSearchMatch(): void { - if (this.findMatches.length <= 0) { - return; - } - - this.currentMatch = this.currentMatch < this.findMatches.length ? this.currentMatch + 1 : 1; - this.#scrollToCurrentMatch(); - } - - previousSearchMatch(): void { - if (this.findMatches.length <= 0) { - return; - } - - this.currentMatch = this.currentMatch > 1 ? this.currentMatch - 1 : this.findMatches.length; - this.#scrollToCurrentMatch(); } toggleCompareMode() { @@ -246,30 +211,6 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { } } - #applySearchDecorations() { - this._searchDecorations = this.editor.codeEditor?.deltaDecorations(this._searchDecorations, []) || []; - - const decorations = this.findMatches.map(match => this.#getSearchDecoration(match)); - - this._searchDecorations = this.editor.codeEditor?.deltaDecorations(this._searchDecorations, decorations) || []; - } - - #getMatches(text: string): FindMatch[] { - const model = this.editor.codeEditor?.getModel(); - return model?.findMatches(text, false, false, false, null, false) || []; - } - - #getSearchDecoration(match: FindMatch): IModelDeltaDecoration { - return { range: match.range, options: { inlineClassName: 'search-marker' } }; - } - - #scrollToCurrentMatch(): void { - const range = this.findMatches[this.currentMatch - 1].range; - - this.editor.codeEditor.setSelection(range); - this.editor.codeEditor.revealLineInCenter(range.startLineNumber, SMOOTH_SCROLL); - } - async #onDossierChanged(dossierTemplateId: string, dossierId?: string) { let dictionary: IDictionary; if (dossierId === 'template') { diff --git a/apps/red-ui/src/app/modules/shared/components/editor/editor.component.ts b/apps/red-ui/src/app/modules/shared/components/editor/editor.component.ts index e5fa526f5..45a452d89 100644 --- a/apps/red-ui/src/app/modules/shared/components/editor/editor.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/editor/editor.component.ts @@ -5,15 +5,15 @@ import { Subject } from 'rxjs'; import { debounceTime, filter, tap } from 'rxjs/operators'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { List, OnChange } from '@iqser/common-ui/lib/utils'; -import IStandaloneEditorConstructionOptions = monaco.editor.IStandaloneEditorConstructionOptions; -import ICodeEditor = monaco.editor.ICodeEditor; -import IDiffEditor = monaco.editor.IDiffEditor; -import IModelDeltaDecoration = monaco.editor.IModelDeltaDecoration; -import ILineChange = monaco.editor.ILineChange; -import IEditorMouseEvent = monaco.editor.IEditorMouseEvent; import { MonacoEditorModule, MonacoStandaloneCodeEditor, MonacoStandaloneDiffEditor } from '@materia-ui/ngx-monaco-editor'; import { FormsModule } from '@angular/forms'; import { NgIf } from '@angular/common'; +import IStandaloneEditorConstructionOptions = monaco.editor.IStandaloneEditorConstructionOptions; +import IDiffEditor = monaco.editor.IDiffEditor; +import ICodeEditor = monaco.editor.ICodeEditor; +import IModelDeltaDecoration = monaco.editor.IModelDeltaDecoration; +import ILineChange = monaco.editor.ILineChange; +import IEditorMouseEvent = monaco.editor.IEditorMouseEvent; const MIN_WORD_LENGTH = 2; const lineChangeToDecoration = ({ originalEndLineNumber, originalStartLineNumber }: ILineChange) => @@ -35,10 +35,6 @@ const notZero = (lineChange: ILineChange) => lineChange.originalEndLineNumber != imports: [MonacoEditorModule, FormsModule, NgIf], }) export class EditorComponent implements OnInit, OnChanges { - #initialEntriesSet = new Set(); - private _diffEditor: IDiffEditor; - private _decorations: string[] = []; - protected readonly _editorTextChanged$ = new Subject(); @Input() showDiffEditor = false; @Input() diffEditorText: string; @Input() @OnChange('revert') initialEntries: List; @@ -51,6 +47,10 @@ export class EditorComponent implements OnInit, OnChanges { editorOptions: IStandaloneEditorConstructionOptions = {}; codeEditor: ICodeEditor; value: string; + protected readonly _editorTextChanged$ = new Subject(); + #initialEntriesSet = new Set(); + private _diffEditor: IDiffEditor; + private _decorations: string[] = []; constructor( private readonly _loadingService: LoadingService, @@ -84,6 +84,11 @@ export class EditorComponent implements OnInit, OnChanges { return this.currentEntries.length; } + async openFindPanel(): Promise { + const editor = this.showDiffEditor ? this._diffEditor.getOriginalEditor() : this.codeEditor; + await editor.getAction('actions.find').run(); + } + onPaste(event: ClipboardEvent) { if ((event.target as HTMLTextAreaElement).ariaRoleDescription === 'editor') { this._loadingService.start(); diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index d97127b00..aa1b41c55 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -1234,11 +1234,12 @@ "title": "{label} bearbeiten" }, "entries": "{length} {length, plural, one{Eintrag} other{Einträge}}", + "entries-count": "", "false-positive-entries": "{length} {length, plural, one{Falsch-Positiver} other{Falsch-Positive}}", - "false-positives": "Falsch-Positive", + "false-positives": "Falsch-Positive ({count})", "false-recommendation-entries": "{length} {length, plural, one{falsche Empfehlung} other{falsche Empfehlungen}}", - "false-recommendations": "Falsche Empfehlungen", - "to-redact": "Schwärzungen" + "false-recommendations": "Falsche Empfehlungen ({count})", + "to-redact": "Schwärzungen ({count})" }, "general-info": { "form": { diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index b8c85c8c0..2520c4e6a 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -1234,11 +1234,12 @@ "title": "Edit {label}" }, "entries": "{length} {length, plural, one{entry} other{entries}} to redact", + "entries-count": "{count} {count, plural, one{entry} other{entries}}", "false-positive-entries": "{length} false positive {length, plural, one{entry} other{entries}}", - "false-positives": "False positives", + "false-positives": "False positives ({count})", "false-recommendation-entries": "{length} false recommendation {length, plural, one{entry} other{entries}}", - "false-recommendations": "False recommendations", - "to-redact": "To redact" + "false-recommendations": "False recommendations ({count})", + "to-redact": "Entries ({count})" }, "general-info": { "form": { @@ -1264,7 +1265,7 @@ "choose-download": "Select the documents for your download:", "dictionary": "Dictionaries", "dossier-attributes": "Dossier attributes", - "dossier-dictionary": "Dictionaries", + "dossier-dictionary": "Dossier entries", "dossier-info": "Dossier info", "download-package": "Download package", "general-info": "General information", diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index dd2b402dc..cf1f3bb46 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -1234,11 +1234,12 @@ "title": "" }, "entries": "{length} {length, plural, one{entry} other{entries}} to {hint, select, true{annotate} other{redact}}", + "entries-count": "", "false-positive-entries": "{length} false positive {length, plural, one{entry} other{entries}}", - "false-positives": "False positives", + "false-positives": "False positives ({count})", "false-recommendation-entries": "{length} false recommendation {length, plural, one{entry} other{entries}}", - "false-recommendations": "False recommendations", - "to-redact": "To redact" + "false-recommendations": "False recommendations ({count})", + "to-redact": "To redact ({count})" }, "general-info": { "form": { diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 320543548..66f48bef9 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -1234,11 +1234,12 @@ "title": "" }, "entries": "{length} {length, plural, one{entry} other{entries}} to {hint, select, true{annotate} other{redact}}", + "entries-count": "{count} {count, plural, one{entry} other{entries}}", "false-positive-entries": "{length} false positive {length, plural, one{entry} other{entries}}", - "false-positives": "False positives", + "false-positives": "False positives ({count})", "false-recommendation-entries": "{length} false recommendation {length, plural, one{entry} other{entries}}", - "false-recommendations": "False recommendations", - "to-redact": "To redact" + "false-recommendations": "False recommendations ({count})", + "to-redact": "To redact ({count})" }, "general-info": { "form": { From bda96f952ea20dbd02a50cc8fc72df538003c81f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 23 Sep 2024 14:12:29 +0300 Subject: [PATCH 09/12] Use new transactional endpoint for updating dictionaries --- .../entity-services/dictionary.service.ts | 43 ++++++------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/apps/red-ui/src/app/services/entity-services/dictionary.service.ts b/apps/red-ui/src/app/services/entity-services/dictionary.service.ts index dee8cf209..aa91e81f0 100644 --- a/apps/red-ui/src/app/services/entity-services/dictionary.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dictionary.service.ts @@ -1,7 +1,7 @@ import { HttpErrorResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { EntitiesService, getConfig, isIqserDevMode, QueryParam, Toaster } from '@iqser/common-ui'; +import { EntitiesService, isIqserDevMode, Toaster } from '@iqser/common-ui'; import { List } from '@iqser/common-ui/lib/utils'; import { Dictionary, DictionaryEntryType, DictionaryEntryTypes, IDictionary, IUpdateDictionary, SuperTypes } from '@red/domain'; import { firstValueFrom, forkJoin, Observable } from 'rxjs'; @@ -112,23 +112,18 @@ export class DictionaryService extends EntitiesService } entriesToAdd.push(entry); } - const deletedEntries: Array = []; + const entriesToDelete: Array = []; const entriesSet = new Set(entries); for (let i = 0; i < initialEntries.length; i++) { const entry = initialEntries.at(i); if (entriesSet.has(entry)) { continue; } - deletedEntries.push(entry); + entriesToDelete.push(entry); } try { - if (deletedEntries.length) { - await this.#deleteEntries(deletedEntries, dossierTemplateId, type, dictionaryEntryType, dossierId); - } - if (entriesToAdd.length) { - await this.#addEntries(entriesToAdd, dossierTemplateId, type, dictionaryEntryType, dossierId); - } + await this.#updateEntries(entriesToAdd, entriesToDelete, dossierTemplateId, type, dictionaryEntryType, dossierId); if (showToast) { this._toaster.success(_('dictionary-overview.success.generic')); @@ -249,30 +244,20 @@ export class DictionaryService extends EntitiesService return forkJoin(requests); } - /** - * Add dictionary entries with entry type. - */ - - #addEntries(entries: List, dossierTemplateId: string, type: string, dictionaryEntryType: DictionaryEntryType, dossierId: string) { - const queryParams: List = [ - { key: 'dossierId', value: dossierId }, - { key: 'dictionaryEntryType', value: dictionaryEntryType }, - ]; - const url = `${this._defaultModelPath}/${type}/${dossierTemplateId}`; - return firstValueFrom(this._post(entries, url, queryParams)); - } - - /** - * Delete dictionary entries with entry type. - */ - - #deleteEntries(entries: List, dossierTemplateId: string, type: string, dictionaryEntryType: DictionaryEntryType, dossierId: string) { + #updateEntries( + entriesToAdd: List, + entriesToDelete: List, + dossierTemplateId: string, + type: string, + dictionaryEntryType: DictionaryEntryType, + dossierId: string, + ) { const queryParams = [ { key: 'dossierId', value: dossierId }, { key: 'dictionaryEntryType', value: dictionaryEntryType }, ]; - const url = `${this._defaultModelPath}/delete/${type}/${dossierTemplateId}`; - return firstValueFrom(this._post(entries, url, queryParams)); + const url = `${this._defaultModelPath}/update/${type}/${dossierTemplateId}`; + return firstValueFrom(this._post({ entriesToAdd, entriesToDelete }, url, queryParams)); } #extractDossierLevelTypes(dossierId: string) { From b92d9c9e04e97e0d28b9be13fce906c862d958b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 23 Sep 2024 15:52:20 +0300 Subject: [PATCH 10/12] RED-9840: Allow to open global search results in a new browser tab --- .../search-item-template.component.html | 112 +++++++++--------- .../search-item-template.component.scss | 5 + 2 files changed, 62 insertions(+), 55 deletions(-) diff --git a/apps/red-ui/src/app/modules/search/search-item-template/search-item-template.component.html b/apps/red-ui/src/app/modules/search/search-item-template/search-item-template.component.html index a3683d8b2..ce87e4531 100644 --- a/apps/red-ui/src/app/modules/search/search-item-template/search-item-template.component.html +++ b/apps/red-ui/src/app/modules/search/search-item-template/search-item-template.component.html @@ -1,62 +1,64 @@ -
-
- - {{ item.filename }} -
- - -
- + +
+
+ + {{ item.filename }}
-
- + + +
+ +
+
+ +
+
+ +
+ + {{ 'search-screen.missing' | translate }}: {{ term }}. {{ 'search-screen.must-contain' | translate }}: +  {{ term }} +
- - -
- - {{ 'search-screen.missing' | translate }}: {{ term }}. {{ 'search-screen.must-contain' | translate }}: -  {{ term }} -
-
-
- -
- -
- -
- -
- -
-
- - {{ item.numberOfPages }} +
+
-
+ + + +
+
+ + {{ item.numberOfPages }} +
+
+ diff --git a/apps/red-ui/src/app/modules/search/search-item-template/search-item-template.component.scss b/apps/red-ui/src/app/modules/search/search-item-template/search-item-template.component.scss index 7bf631ad2..d9b2dd141 100644 --- a/apps/red-ui/src/app/modules/search/search-item-template/search-item-template.component.scss +++ b/apps/red-ui/src/app/modules/search/search-item-template/search-item-template.component.scss @@ -7,3 +7,8 @@ background-color: var(--iqser-highlight-color); } } + +a.item-link { + display: contents; + @include common-mixins.clear-a; +} From c6595c64817a8aa372e2889c70a8548f082a9eab Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Mon, 23 Sep 2024 15:56:31 +0300 Subject: [PATCH 11/12] RED-9993: fixed license labels. --- .../license-analysis-capacity-usage.component.ts | 4 ++-- .../license-page-usage/license-page-usage.component.ts | 4 ++-- .../app/modules/admin/screens/license/utils/functions.ts | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/screens/license/components/license-analysis-capacity-usage/license-analysis-capacity-usage.component.ts b/apps/red-ui/src/app/modules/admin/screens/license/components/license-analysis-capacity-usage/license-analysis-capacity-usage.component.ts index 7995cd9bb..e99ef2cbf 100644 --- a/apps/red-ui/src/app/modules/admin/screens/license/components/license-analysis-capacity-usage/license-analysis-capacity-usage.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/license/components/license-analysis-capacity-usage/license-analysis-capacity-usage.component.ts @@ -3,7 +3,7 @@ import { LicenseService } from '@services/license.service'; import { map } from 'rxjs/operators'; import { ChartDataset } from 'chart.js'; import { ChartBlue, ChartGreen, ChartRed } from '../../utils/constants'; -import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig, isCurrentMonthAndYear } from '../../utils/functions'; +import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig, isCurrentMonth } from '../../utils/functions'; import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { size } from '@iqser/common-ui/lib/utils'; @@ -43,7 +43,7 @@ export class LicenseAnalysisCapacityUsageComponent { #getCapacityDatasets(): ChartDataset[] { const monthlyData = [...this.licenseService.selectedLicenseReport.monthlyData]; const dataUntilCurrentMonth = getDataUntilCurrentMonth(monthlyData); - if (monthlyData.length === 1 || isCurrentMonthAndYear(monthlyData[0].startDate)) { + if (monthlyData.length === 1 || isCurrentMonth(monthlyData[0].startDate)) { const empty = { analysedFilesBytes: null } as ILicenseData; dataUntilCurrentMonth.splice(0, 0, empty); monthlyData.splice(0, 0, empty); diff --git a/apps/red-ui/src/app/modules/admin/screens/license/components/license-page-usage/license-page-usage.component.ts b/apps/red-ui/src/app/modules/admin/screens/license/components/license-page-usage/license-page-usage.component.ts index 7a3c1d3ab..88ebfde38 100644 --- a/apps/red-ui/src/app/modules/admin/screens/license/components/license-page-usage/license-page-usage.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/license/components/license-page-usage/license-page-usage.component.ts @@ -3,7 +3,7 @@ import { LicenseService } from '@services/license.service'; import { map } from 'rxjs/operators'; import { ChartDataset } from 'chart.js'; import { ChartBlue, ChartGreen, ChartRed } from '../../utils/constants'; -import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig, isCurrentMonthAndYear } from '../../utils/functions'; +import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig, isCurrentMonth } from '../../utils/functions'; import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { ILicenseData } from '@red/domain'; @@ -40,7 +40,7 @@ export class LicensePageUsageComponent { #getPagesDatasets(): ChartDataset[] { const monthlyData = [...this.licenseService.selectedLicenseReport.monthlyData]; const dataUntilCurrentMonth = getDataUntilCurrentMonth(monthlyData); - if (monthlyData.length === 1 || isCurrentMonthAndYear(monthlyData[0].startDate)) { + if (monthlyData.length === 1 || isCurrentMonth(monthlyData[0].startDate)) { const empty = { numberOfAnalyzedPages: null } as ILicenseData; dataUntilCurrentMonth.splice(0, 0, empty); monthlyData.splice(0, 0, empty); diff --git a/apps/red-ui/src/app/modules/admin/screens/license/utils/functions.ts b/apps/red-ui/src/app/modules/admin/screens/license/utils/functions.ts index 2c3a9ce3e..a06f15c17 100644 --- a/apps/red-ui/src/app/modules/admin/screens/license/utils/functions.ts +++ b/apps/red-ui/src/app/modules/admin/screens/license/utils/functions.ts @@ -44,7 +44,7 @@ export const getLabelsFromLicense = (license: ILicenseReport) => { monthIterator = monthIterator.add(1, 'month'); } - if (startMonth.month() === endMonth.month() || startMonth.month() === currentMonth) { + if (startMonth.isSame(endMonth, 'month') || isCurrentMonth(startMonth.toDate())) { result.splice(0, 0, ''); } @@ -55,6 +55,6 @@ export const getDataUntilCurrentMonth = (monthlyData: ILicenseData[]) => { return monthlyData.filter(data => dayjs(data.startDate).isSameOrBefore(dayjs(Date.now()), 'month')); }; -export const isCurrentMonthAndYear = (date: Date | string) => { - return dayjs(date).isSame(dayjs(Date.now()), 'month') && dayjs(date).isSame(dayjs(Date.now()), 'year'); +export const isCurrentMonth = (date: Date | string) => { + return dayjs(date).isSame(dayjs(Date.now()), 'month'); }; From 664410821cde64b972c1daa41b9cb5b9115bd24a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 23 Sep 2024 16:04:53 +0300 Subject: [PATCH 12/12] RED-9822: DocuMine translations --- apps/red-ui/src/assets/i18n/scm/de.json | 2 +- apps/red-ui/src/assets/i18n/scm/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index cf1f3bb46..9c5487add 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -1653,7 +1653,7 @@ }, "app-name": { "label": "Name der Applikation", - "placeholder": "RedactManager" + "placeholder": "DocuMine" }, "form": { "auth": "Authentifizierung aktivieren", diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 66f48bef9..b5c317bd4 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -1653,7 +1653,7 @@ }, "app-name": { "label": "Display name", - "placeholder": "RedactManager" + "placeholder": "DocuMine" }, "form": { "auth": "Enable authentication",