diff --git a/apps/red-ui/src/app/models/file/file-data.model.ts b/apps/red-ui/src/app/models/file/file-data.model.ts index 581289732..dea3703f0 100644 --- a/apps/red-ui/src/app/models/file/file-data.model.ts +++ b/apps/red-ui/src/app/models/file/file-data.model.ts @@ -13,12 +13,12 @@ import { AnnotationWrapper } from './annotation.wrapper'; import * as moment from 'moment'; import { BehaviorSubject } from 'rxjs'; import { RedactionLogEntry } from './redaction-log.entry'; -import { MISSING_TYPES_ERROR } from '@utils/constants'; export class FileDataModel { static readonly DELTA_VIEW_TIME = 10 * 60 * 1000; // 10 minutes; allAnnotations: AnnotationWrapper[] = []; readonly hasChangeLog$ = new BehaviorSubject(false); + missingTypes = new Set(); constructor( private readonly _file: File, @@ -77,7 +77,6 @@ export class FileDataModel { private _convertData(): RedactionLogEntry[] { let result: RedactionLogEntry[] = []; - const missingTypes = new Set(); const reasonAnnotationIds: { [key: string]: RedactionLogEntry[] } = {}; this.redactionLog.redactionLogEntry?.forEach(redactionLogEntry => { @@ -85,7 +84,7 @@ export class FileDataModel { const changeLogValues = this.#getChangeLogValues(redactionLogEntry); if (!this._dictionaryData[redactionLogEntry.type]) { - missingTypes.add(redactionLogEntry.type); + this.missingTypes.add(redactionLogEntry.type); return; } @@ -95,7 +94,7 @@ export class FileDataModel { changeLogValues.isChangeLogEntry, changeLogValues.hidden, this.redactionLog.legalBasis, - this._dictionaryData[redactionLogEntry.type].hint, + !!this._dictionaryData[redactionLogEntry.type]?.hint, ); if ( @@ -130,10 +129,6 @@ export class FileDataModel { result = result.filter(r => !r.hidden); - if (missingTypes.size > 0) { - throw new Error(MISSING_TYPES_ERROR); - } - return result; } diff --git a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.html index 2d69a12d1..35c955de3 100644 --- a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.html @@ -34,7 +34,7 @@ impl readonly circleButtonTypes = CircleButtonTypes; readonly tableHeaderLabel = _('trash.table-header.title'); readonly canRestoreSelected$ = this._canRestoreSelected$; + readonly canHardDeleteSelected$ = this._canHardDeleteSelected$; readonly tableColumnConfigs: TableColumnConfig[] = [ { label: _('trash.table-col-names.name'), sortByKey: 'searchKey' }, { label: _('trash.table-col-names.owner'), class: 'user-column' }, @@ -46,6 +49,7 @@ export class TrashScreenComponent extends ListingComponent impl constructor( protected readonly _injector: Injector, private readonly _loadingService: LoadingService, + private readonly _permissionsService: PermissionsService, private readonly _dossiersService: DossiersService, readonly routerHistoryService: RouterHistoryService, private readonly _configService: ConfigService, @@ -61,6 +65,13 @@ export class TrashScreenComponent extends ListingComponent impl ); } + private get _canHardDeleteSelected$(): Observable { + return this.listingService.selectedEntities$.pipe( + map(entities => entities.length && !entities.find(dossier => !dossier.canHardDelete)), + distinctUntilChanged(), + ); + } + disabledFn = (dossier: DossierListItem) => !dossier.canRestore; async ngOnInit(): Promise { @@ -118,6 +129,7 @@ export class TrashScreenComponent extends ListingComponent impl searchKey: dossier.dossierName, restoreDate, canRestore: this._canRestoreDossier(restoreDate), + canHardDelete: this._permissionsService.canDeleteDossier(dossier), // Because of migrations, for some this is not set softDeletedTime: dossier.softDeletedTime || '-', }; diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/table-item/file-workload/file-workload.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/table-item/file-workload/file-workload.component.ts index ab3b664e1..cd7ceaddc 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/table-item/file-workload/file-workload.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview/components/table-item/file-workload/file-workload.component.ts @@ -40,7 +40,7 @@ export class FileWorkloadComponent { } get redactionColor() { - return this._getDictionaryColor('dossier_redaction'); + return this._getDictionaryColor('redaction'); } private _getDictionaryColor(type: string) { diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.ts index a78074fe6..4989a0a84 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossier-workload-column/dossier-workload-column.component.ts @@ -23,6 +23,6 @@ export class DossierWorkloadColumnComponent { } get redactionColor() { - return this._appStateService.getDictionaryColor('dossier_redaction', this.dossier.dossierTemplateId); + return this._appStateService.getDictionaryColor('redaction', this.dossier.dossierTemplateId); } } diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.html index c37bd2a84..2b521e11f 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/dossiers-listing/components/dossiers-listing-actions/dossiers-listing-actions.component.html @@ -1,12 +1,6 @@ -
+
diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotation-actions/annotation-actions.component.html b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotation-actions/annotation-actions.component.html index 265b7d4cf..27bdb3ffd 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotation-actions/annotation-actions.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotation-actions/annotation-actions.component.html @@ -1,4 +1,8 @@ -
+
diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotations-list/annotations-list.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotations-list/annotations-list.component.ts index aab5aa212..3cda27f73 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotations-list/annotations-list.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/annotations-list/annotations-list.component.ts @@ -1,11 +1,10 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, TemplateRef } from '@angular/core'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; -import { FilterService, HelpModeService, IqserEventTarget } from '@iqser/common-ui'; +import { FilterService, IqserEventTarget } from '@iqser/common-ui'; import { MultiSelectService } from '../../services/multi-select.service'; import { AnnotationReferencesService } from '../../services/annotation-references.service'; import { ViewModeService } from '../../services/view-mode.service'; import { FilePreviewStateService } from '../../services/file-preview-state.service'; -import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-annotations-list', @@ -26,7 +25,6 @@ export class AnnotationsListComponent implements OnChanges { constructor( readonly multiSelectService: MultiSelectService, readonly viewModeService: ViewModeService, - readonly helpModeService: HelpModeService, readonly annotationReferencesService: AnnotationReferencesService, private readonly _filterService: FilterService, private readonly _state: FilePreviewStateService, @@ -38,8 +36,7 @@ export class AnnotationsListComponent implements OnChanges { } } - async annotationClicked(annotation: AnnotationWrapper, $event: MouseEvent): Promise { - console.log(annotation); + annotationClicked(annotation: AnnotationWrapper, $event: MouseEvent): void { if (($event?.target as IqserEventTarget)?.localName === 'input') { return; } @@ -53,7 +50,7 @@ export class AnnotationsListComponent implements OnChanges { if (this.isSelected(annotation.annotationId)) { this.deselectAnnotations.emit([annotation]); } else { - const canMultiSelect = await firstValueFrom(this._state.isWritable$); + const canMultiSelect = this.multiSelectService.isEnabled; if (canMultiSelect && ($event?.ctrlKey || $event?.metaKey) && this.selectedAnnotations.length > 0) { this.multiSelectService.activate(); } @@ -61,8 +58,8 @@ export class AnnotationsListComponent implements OnChanges { } } - async referenceClicked(annotation: AnnotationWrapper): Promise { - await this.annotationClicked(annotation, null); + referenceClicked(annotation: AnnotationWrapper): void { + this.annotationClicked(annotation, null); if (this._filterService.filtersEnabled('primaryFilters')) { this._filterService.toggleFilter('primaryFilters', annotation.superType, true); } diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/file-workload/file-workload.component.html b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/file-workload/file-workload.component.html index 86877bcc9..176f71a18 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/file-workload/file-workload.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/file-workload/file-workload.component.html @@ -14,7 +14,7 @@
diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/pdf-viewer/pdf-viewer.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/pdf-viewer/pdf-viewer.component.ts index ef8e78f10..0c92b92ab 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/pdf-viewer/pdf-viewer.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/pdf-viewer/pdf-viewer.component.ts @@ -242,10 +242,14 @@ export class PdfViewerComponent extends AutoUnsubscribe implements OnInit, OnCha await this._configureTextPopup(); this.annotationManager.addEventListener('annotationSelected', (annotations: Annotation[], action) => { - this.annotationSelected.emit(this.annotationManager.getSelectedAnnotations().map(ann => ann.Id)); + const nextAnnotations = this.multiSelectService.isEnabled ? this.annotationManager.getSelectedAnnotations() : annotations; + this.annotationSelected.emit(nextAnnotations.map(ann => ann.Id)); if (action === 'deselected') { this._toggleRectangleAnnotationAction(true); } else { + if (!this.multiSelectService.isEnabled) { + this.utils.deselectAnnotations(this.annotations.filter(wrapper => !nextAnnotations.find(ann => ann.Id === wrapper.id))); + } this._configureAnnotationSpecificActions(annotations); this._toggleRectangleAnnotationAction(annotations.length === 1 && annotations[0].ReadOnly); } @@ -289,11 +293,18 @@ export class PdfViewerComponent extends AutoUnsubscribe implements OnInit, OnCha } }); - this.documentViewer.addEventListener('textSelected', async (quads, selectedText) => { + this.documentViewer.addEventListener('textSelected', async (quads, selectedText, pageNumber: number) => { this._selectedText = selectedText; const textActions = [dataElements.ADD_DICTIONARY, dataElements.ADD_FALSE_POSITIVE]; const file = await this.stateService.file; + + if (this.viewModeService.isCompare && pageNumber % 2 === 0) { + this.instance.UI.disableElements(['textPopup']); + } else { + this.instance.UI.enableElements(['textPopup']); + } + if (selectedText.length > 2 && this.canPerformActions && !this.utils.isCurrentPageExcluded(file)) { this.instance.UI.enableElements(textActions); } else { @@ -450,7 +461,7 @@ export class PdfViewerComponent extends AutoUnsubscribe implements OnInit, OnCha this.instance.UI.annotationPopup.update([]); if (annotationWrappers.length === 0) { - this._configureRectangleAnnotationPopup(); + this._configureRectangleAnnotationPopup(viewerAnnotations[0]); return; } @@ -490,16 +501,18 @@ export class PdfViewerComponent extends AutoUnsubscribe implements OnInit, OnCha this.instance.UI.annotationPopup.add(actions); } - private _configureRectangleAnnotationPopup() { - this.instance.UI.annotationPopup.add([ - { - type: 'actionButton', - dataElement: dataElements.ADD_RECTANGLE, - img: this._convertPath('/assets/icons/general/pdftron-action-add-redaction.svg'), - title: this._translateService.instant(this._manualAnnotationService.getTitle('REDACTION', this.dossier)), - onClick: () => this._addRectangleManualRedaction(), - }, - ]); + private _configureRectangleAnnotationPopup(annotation: Annotation) { + if (!this.viewModeService.isCompare || annotation.getPageNumber() % 2 === 1) { + this.instance.UI.annotationPopup.add([ + { + type: 'actionButton', + dataElement: dataElements.ADD_RECTANGLE, + img: this._convertPath('/assets/icons/general/pdftron-action-add-redaction.svg'), + title: this._translateService.instant(this._manualAnnotationService.getTitle('REDACTION', this.dossier)), + onClick: () => this._addRectangleManualRedaction(), + }, + ]); + } } private _addRectangleManualRedaction() { diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts index 3cee01987..237d7568f 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts @@ -206,6 +206,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni this._loadingService.start(); await this.userPreferenceService.saveLastOpenedFileForDossier(this.dossierId, this.fileId); this._subscribeToFileUpdates(); + this.viewModeService.viewMode$.pipe(tap(() => this.#deactivateMultiSelect())).subscribe(); const file = await this.stateService.file; if (file?.analysisRequired && !file.excludedFromAutomaticAnalysis) { @@ -427,6 +428,12 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni download(data, file.filename); } + #deactivateMultiSelect(): void { + this.multiSelectService.deactivate(); + this.viewerComponent?.utils?.deselectAllAnnotations(); + this.handleAnnotationSelected([]); + } + private _setActiveViewerPage() { const currentPage = this._instance?.Core.documentViewer?.getCurrentPage(); if (!currentPage) { diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/multi-select.service.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/multi-select.service.ts index 71455608d..59db5bc89 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/multi-select.service.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/services/multi-select.service.ts @@ -1,15 +1,28 @@ import { Injectable } from '@angular/core'; -import { BehaviorSubject, Observable } from 'rxjs'; +import { BehaviorSubject, combineLatest, Observable } from 'rxjs'; import { boolFactory } from '@iqser/common-ui'; +import { ViewModeService } from './view-mode.service'; +import { map, tap } from 'rxjs/operators'; +import { FilePreviewStateService } from './file-preview-state.service'; @Injectable() export class MultiSelectService { + readonly enabled$: Observable; readonly active$: Observable; readonly inactive$: Observable; readonly #active$ = new BehaviorSubject(false); + readonly #enabled$ = new BehaviorSubject(true); - constructor() { + constructor(private readonly _viewModeService: ViewModeService, private readonly _state: FilePreviewStateService) { [this.active$, this.inactive$] = boolFactory(this.#active$.asObservable()); + this.enabled$ = combineLatest([this._viewModeService.isStandard$, _state.isWritable$]).pipe( + map((result: boolean[]) => !result.some(res => !res)), + tap(enabled => this.#enabled$.next(enabled)), + ); + } + + get isEnabled() { + return this.#enabled$.value; } get isActive() { @@ -17,14 +30,12 @@ export class MultiSelectService { } activate() { - this.#active$.next(true); + if (this.isEnabled) { + this.#active$.next(true); + } } deactivate() { this.#active$.next(false); } - - toggle() { - this.#active$.next(!this.#active$.value); - } } diff --git a/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts b/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts index 70a8b48f2..ec3ec2a65 100644 --- a/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts @@ -10,7 +10,6 @@ import { AppStateService } from '@state/app-state.service'; import { UserPreferenceService } from '@services/user-preference.service'; import { FilePreviewStateService } from '../screens/file-preview-screen/services/file-preview-state.service'; import { Toaster } from '@iqser/common-ui'; -import { MISSING_TYPES_ERROR } from '@utils/constants'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @Injectable() @@ -38,20 +37,19 @@ export class PdfViewerDataService { return forkJoin([redactionLog$, viewedPages$]).pipe( map((data: [redactionLog: IRedactionLog, viewedPages: IViewedPage[]]) => { - try { - return new FileDataModel( - newFile, - ...data, - this._appStateService.dictionaryData[this._stateService.dossierTemplateId], - this._userPreferenceService.areDevFeaturesEnabled, - ); - } catch (error) { - if (error.message === MISSING_TYPES_ERROR) { - this._toaster.error(_('error.missing-types'), { disableTimeOut: true }); - } else { - throw error; - } + const fileDataModel = new FileDataModel( + newFile, + ...data, + this._appStateService.dictionaryData[this._stateService.dossierTemplateId], + this._userPreferenceService.areDevFeaturesEnabled, + ); + if (fileDataModel.missingTypes.size > 0) { + this._toaster.error(_('error.missing-types'), { + disableTimeOut: true, + params: { missingTypes: Array.from(fileDataModel.missingTypes).join(', ') }, + }); } + return fileDataModel; }), ); } diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index b476bd189..c1242d5c4 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { UserService } from './user.service'; -import { Dossier, File, IComment } from '@red/domain'; +import { Dossier, File, IComment, IDossier } from '@red/domain'; import { DossiersService } from './entity-services/dossiers.service'; @Injectable({ @@ -127,7 +127,7 @@ export class PermissionsService { return this.isApprover(dossier) && files.reduce((prev, file) => prev && file.isApproved, true); } - canDeleteDossier(dossier: Dossier): boolean { + canDeleteDossier(dossier: IDossier): boolean { return dossier.ownerId === this._userService.currentUser.id; } diff --git a/apps/red-ui/src/app/state/app-state.service.ts b/apps/red-ui/src/app/state/app-state.service.ts index 8a313372b..98c5a8dc8 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -350,7 +350,7 @@ export class AppStateService { dictionaryData['redaction'] = new Dictionary( { - hexColor: colors.previewColor || FALLBACK_COLOR, + hexColor: colors.manualRedactionColor || FALLBACK_COLOR, type: 'redaction', }, true, diff --git a/apps/red-ui/src/app/utils/constants.ts b/apps/red-ui/src/app/utils/constants.ts index 5b70b1f9f..63ba0e493 100644 --- a/apps/red-ui/src/app/utils/constants.ts +++ b/apps/red-ui/src/app/utils/constants.ts @@ -1,2 +1 @@ export const CHANGED_CHECK_INTERVAL = 5000; -export const MISSING_TYPES_ERROR = 'MISSING_TYPES_ERROR'; diff --git a/apps/red-ui/src/assets/help-mode/links.json b/apps/red-ui/src/assets/help-mode/links.json index 01003c465..6389ff674 100644 --- a/apps/red-ui/src/assets/help-mode/links.json +++ b/apps/red-ui/src/assets/help-mode/links.json @@ -1,18 +1,24 @@ { - "open-usermenu": { - "en": "/en/23200-user-menu-and-account.html", + "assign-reviewer": { + "en": "", "de": "", "it": "", "fr": "" }, - "filter-dossier-list": { - "en": "/en/26024-features-and-actions-in-the-dossier-overview.html", + "bulk-select-annotations": { + "en": "", "de": "", "it": "", "fr": "" }, - "filter-document-list": { - "en": "/en/create-and-manage-dossier/dossier-overview/dossier-list.html", + "delta-view": { + "en": "/en/editing-documents-in-the-editor/views-in-the-editor/delta-view.html", + "de": "", + "it": "", + "fr": "" + }, + "document-features": { + "en": "", "de": "", "it": "", "fr": "" @@ -23,32 +29,20 @@ "it": "", "fr": "" }, - "search-in-entire-application": { - "en": "/en/15632-searching-the-application.html", - "de": "", - "it": "", - "fr": "" - }, - "open-notifications": { - "en": "/en/15471-notifications.html", - "de": "", - "it": "", - "fr": "" - }, - "dossier-list": { - "en": "/en/20941-dossier-liste.html", - "de": "", - "it": "", - "fr": "" - }, - "document-list": { + "edit-dossier-attributes": { "en": "", "de": "", "it": "", "fr": "" }, - "new-dossier-button": { - "en": "/en/creating-and-managing-dossiers/dossier-overview/creating-a-new-dossier.html", + "edit-dossier-from-list": { + "en": "", + "de": "", + "it": "", + "fr": "" + }, + "edit-dossier-member": { + "en": "", "de": "", "it": "", "fr": "" @@ -59,12 +53,24 @@ "it": "", "fr": "" }, - "edit-dossier-member": { + "edit-reason": { "en": "", "de": "", "it": "", "fr": "" }, + "filter-document-list": { + "en": "/en/create-and-manage-dossier/dossier-overview/dossier-list.html", + "de": "", + "it": "", + "fr": "" + }, + "filter-dossier-list": { + "en": "/en/26024-features-and-actions-in-the-dossier-overview.html", + "de": "", + "it": "", + "fr": "" + }, "filter-for-editing-notes": { "en": "", "de": "", @@ -77,26 +83,26 @@ "it": "", "fr": "" }, - "edit-dossier": { + "navigate-in-breadcrumbs": { "en": "", "de": "", "it": "", "fr": "" }, - "edit-dossier-from-list": { - "en": "", + "new-dossier-button": { + "en": "/en/creating-and-managing-dossiers/dossier-overview/creating-a-new-dossier.html", "de": "", "it": "", "fr": "" }, - "standard-view": { - "en": "/en/editing-documents-in-the-editor/views-in-the-editor/standard-view.html", + "open-notifications": { + "en": "/en/15471-notifications.html", "de": "", "it": "", "fr": "" }, - "delta-view": { - "en": "/en/editing-documents-in-the-editor/views-in-the-editor/delta-view.html", + "open-usermenu": { + "en": "/en/23200-user-menu-and-account.html", "de": "", "it": "", "fr": "" @@ -107,55 +113,7 @@ "it": "", "fr": "" }, - "bulk-select-annotations": { - "en": "", - "de": "", - "it": "", - "fr": "" - }, - "workload-filter": { - "en": "", - "de": "", - "it": "", - "fr": "" - }, - "workload-annotations-list": { - "en": "", - "de": "", - "it": "", - "fr": "" - }, - "assign-reviewer": { - "en": "", - "de": "", - "it": "", - "fr": "" - }, - "navigate-in-breadcrumbs": { - "en": "", - "de": "", - "it": "", - "fr": "" - }, - "reset-filters": { - "en": "", - "de": "", - "it": "", - "fr": "" - }, - "edit-reason": { - "en": "", - "de": "", - "it": "", - "fr": "" - }, - "redaction-remove-only-here": { - "en": "", - "de": "", - "it": "", - "fr": "" - }, - "redaction-remove-from-dictionary": { + "recommendation-accept-or-reject": { "en": "", "de": "", "it": "", @@ -167,13 +125,37 @@ "it": "", "fr": "" }, - "recommendation-accept-or-reject": { + "redaction-remove-from-dictionary": { "en": "", "de": "", "it": "", "fr": "" }, - "document-features": { + "redaction-remove-only-here": { + "en": "", + "de": "", + "it": "", + "fr": "" + }, + "reset-filters": { + "en": "", + "de": "", + "it": "", + "fr": "" + }, + "search-in-entire-application": { + "en": "/en/15632-searching-the-application.html", + "de": "", + "it": "", + "fr": "" + }, + "standard-view": { + "en": "/en/editing-documents-in-the-editor/views-in-the-editor/standard-view.html", + "de": "", + "it": "", + "fr": "" + }, + "workload-filter": { "en": "", "de": "", "it": "", diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index a3ec96b1e..9a64201c7 100644 --- a/apps/red-ui/src/assets/i18n/en.json +++ b/apps/red-ui/src/assets/i18n/en.json @@ -1001,7 +1001,7 @@ "http": { "generic": "Action failed with code {status}" }, - "missing-types": "The dossier template has missing types. Data might not be displayed correctly.", + "missing-types": "The dossier template has missing types ({missingTypes}). Data might not be displayed correctly.", "offline": "Disconnected", "online": "Reconnected", "reload": "Reload", diff --git a/libs/common-ui b/libs/common-ui index 6b4fe281c..0bab45847 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 6b4fe281cb6e23fb541ce75ead740a5678c968b8 +Subproject commit 0bab4584767b868f9d72a4de7ae23d0dd19daad3 diff --git a/package.json b/package.json index 07be69ed3..884ddc66f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.218.0", + "version": "3.226.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index 65870650a..60249afd1 100644 Binary files a/paligo-theme.tar.gz and b/paligo-theme.tar.gz differ