Merge branch 'master' into VM/RED-9260
This commit is contained in:
commit
ddbef9bd11
@ -16,7 +16,7 @@ import { CompositeRouteGuard, DEFAULT_REDIRECT_KEY, IqserPermissionsGuard, Iqser
|
||||
import { TenantSelectComponent } from '@iqser/common-ui/lib/tenants';
|
||||
import { doesNotHaveAnyRole, hasAnyRole, IqserAuthGuard } from '@iqser/common-ui/lib/users';
|
||||
import { CustomRouteReuseStrategy } from '@iqser/common-ui/lib/utils';
|
||||
import { ARCHIVE_ROUTE, BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE, FILE_ID } from '@red/domain';
|
||||
import { ARCHIVE_ROUTE, BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ROUTE, FILE_ID } from '@red/domain';
|
||||
import { RedRoleGuard } from '@users/red-role.guard';
|
||||
import { Roles } from '@users/roles';
|
||||
import { mainGuard } from '@utils/main.guard';
|
||||
@ -81,7 +81,6 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
canActivate: [CompositeRouteGuard, loadArchivedDossiersGuard()],
|
||||
data: {
|
||||
routeGuards: [FeaturesGuard],
|
||||
features: [DOSSIERS_ARCHIVE],
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
<redaction-breadcrumbs></redaction-breadcrumbs>
|
||||
</div>
|
||||
|
||||
<a [matTooltip]="'top-bar.navigation-items.back-to-dashboard' | translate" [routerLink]="['/']" class="logo">
|
||||
<a [matTooltip]="'top-bar.navigation-items.back-to-dashboard' | translate" [routerLink]="['/main']" class="logo">
|
||||
<div [attr.help-mode-key]="'home'" class="actions">
|
||||
<iqser-logo (iqserHiddenAction)="userPreferenceService.toggleDevFeatures()" icon="iqser:logo"></iqser-logo>
|
||||
<div class="app-name">{{ titleService.getTitle() }}</div>
|
||||
|
||||
@ -8,8 +8,7 @@ import { SpotlightSearchAction } from '@components/spotlight-search/spotlight-se
|
||||
import { filter, map, startWith } from 'rxjs/operators';
|
||||
import { getConfig, IqserPermissionsService } from '@iqser/common-ui';
|
||||
import { BreadcrumbsService } from '@services/breadcrumbs.service';
|
||||
import { FeaturesService } from '@services/features.service';
|
||||
import { ARCHIVE_ROUTE, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE } from '@red/domain';
|
||||
import { ARCHIVE_ROUTE, DOSSIERS_ROUTE } from '@red/domain';
|
||||
import { Roles } from '@users/roles';
|
||||
import { REDDocumentViewer } from '../../modules/pdf-viewer/services/document-viewer.service';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
@ -36,7 +35,6 @@ export class BaseScreenComponent {
|
||||
{
|
||||
text: this._translateService.instant('search.active-dossiers'),
|
||||
icon: 'red:enter',
|
||||
hide: () => !this._featuresService.isEnabled(DOSSIERS_ARCHIVE),
|
||||
action: (query): void => this.#search(query, [], true),
|
||||
},
|
||||
{
|
||||
@ -58,7 +56,6 @@ export class BaseScreenComponent {
|
||||
private readonly _router: Router,
|
||||
activatedRoute: ActivatedRoute,
|
||||
private readonly _translateService: TranslateService,
|
||||
private readonly _featuresService: FeaturesService,
|
||||
readonly permissionsService: IqserPermissionsService,
|
||||
readonly userService: UserService,
|
||||
readonly userPreferenceService: UserPreferenceService,
|
||||
|
||||
@ -11,12 +11,6 @@
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
|
||||
<div *ngIf="config.IS_DOCUMINE" class="iqser-input-group">
|
||||
<mat-slide-toggle color="primary" formControlName="openScmDialogByDefault">
|
||||
{{ 'preferences-screen.form.open-structured-view-by-default' | translate }}
|
||||
</mat-slide-toggle>
|
||||
</div>
|
||||
|
||||
<div *allow="roles.getTables" class="iqser-input-group">
|
||||
<label [translate]="'preferences-screen.form.table-extraction-type'"></label>
|
||||
<input formControlName="tableExtractionType" />
|
||||
|
||||
@ -23,7 +23,6 @@ import { MatCheckbox } from '@angular/material/checkbox';
|
||||
interface PreferencesForm {
|
||||
// preferences
|
||||
autoExpandFiltersOnActions: boolean;
|
||||
openScmDialogByDefault: boolean;
|
||||
tableExtractionType: string;
|
||||
// warnings preferences
|
||||
loadAllAnnotationsWarning: boolean;
|
||||
@ -78,7 +77,6 @@ export class PreferencesComponent extends BaseFormComponent implements OnInit {
|
||||
this.form = this._formBuilder.group({
|
||||
// preferences
|
||||
autoExpandFiltersOnActions: [this.userPreferenceService.getAutoExpandFiltersOnActions()],
|
||||
openScmDialogByDefault: [this.userPreferenceService.getOpenScmDialogByDefault()],
|
||||
tableExtractionType: [this.userPreferenceService.getTableExtractionType()],
|
||||
// warnings preferences
|
||||
loadAllAnnotationsWarning: [this.userPreferenceService.getBool(PreferencesKeys.loadAllAnnotationsWarning)],
|
||||
@ -105,9 +103,6 @@ export class PreferencesComponent extends BaseFormComponent implements OnInit {
|
||||
if (this.form.controls.autoExpandFiltersOnActions.value !== this.userPreferenceService.getAutoExpandFiltersOnActions()) {
|
||||
await this.userPreferenceService.toggleAutoExpandFiltersOnActions();
|
||||
}
|
||||
if (this.form.controls.openScmDialogByDefault.value !== this.userPreferenceService.getOpenScmDialogByDefault()) {
|
||||
await this.userPreferenceService.toggleOpenScmDialogByDefault();
|
||||
}
|
||||
|
||||
if (this.form.controls.tableExtractionType.value !== this.userPreferenceService.getTableExtractionType()) {
|
||||
await this.userPreferenceService.save(PreferencesKeys.tableExtractionType, this.form.controls.tableExtractionType.value);
|
||||
@ -137,7 +132,6 @@ export class PreferencesComponent extends BaseFormComponent implements OnInit {
|
||||
#patchValues() {
|
||||
this.form.patchValue({
|
||||
autoExpandFiltersOnActions: this.userPreferenceService.getAutoExpandFiltersOnActions(),
|
||||
openScmDialogByDefault: this.userPreferenceService.getOpenScmDialogByDefault(),
|
||||
tableExtractionType: this.userPreferenceService.getTableExtractionType(),
|
||||
loadAllAnnotationsWarning: this.userPreferenceService.getBool(PreferencesKeys.loadAllAnnotationsWarning),
|
||||
helpModeDialog: this.userPreferenceService.getBool(KEYS.helpModeDialog),
|
||||
|
||||
@ -24,10 +24,16 @@
|
||||
|
||||
<div class="iqser-input-group required">
|
||||
<label translate="add-edit-component-mapping.form.file"></label>
|
||||
<iqser-upload-file (fileChanged)="fileChanged($event)" [file]="activeFile" [accept]="'.csv'" />
|
||||
<iqser-upload-file (fileChanged)="changeFile($event)" [file]="activeFile" [accept]="'.csv'" />
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div
|
||||
class="row"
|
||||
[class.disabled-file-options]="disabledFileOptions"
|
||||
[matTooltip]="'add-edit-component-mapping.disabled-file-options' | translate"
|
||||
[matTooltipDisabled]="!disabledFileOptions"
|
||||
[matTooltipPosition]="'above'"
|
||||
>
|
||||
<div class="iqser-input-group required w-150">
|
||||
<label translate="add-edit-component-mapping.form.delimiter"></label>
|
||||
<input
|
||||
|
||||
@ -18,4 +18,14 @@
|
||||
font-size: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
&.disabled-file-options {
|
||||
opacity: 0.5;
|
||||
pointer-events: auto;
|
||||
max-width: 300px;
|
||||
|
||||
.iqser-input-group {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ import { MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { fileAttributeEncodingTypesTranslations } from '@translations/file-attribute-encoding-types-translations';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { ComponentMappingsService } from '@services/entity-services/component-mappings.service';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
|
||||
interface DialogData {
|
||||
dossierTemplateId: string;
|
||||
@ -42,6 +43,7 @@ interface DialogResult {
|
||||
MatSelect,
|
||||
IconButtonComponent,
|
||||
UploadFileComponent,
|
||||
MatTooltip,
|
||||
],
|
||||
})
|
||||
export class AddEditComponentMappingDialogComponent
|
||||
@ -50,6 +52,7 @@ export class AddEditComponentMappingDialogComponent
|
||||
{
|
||||
protected readonly encodingTypeOptions = Object.keys(FileAttributeEncodingTypes);
|
||||
protected readonly translations = fileAttributeEncodingTypesTranslations;
|
||||
#fileChanged = false;
|
||||
activeFile: File;
|
||||
form!: UntypedFormGroup;
|
||||
|
||||
@ -73,7 +76,8 @@ export class AddEditComponentMappingDialogComponent
|
||||
}
|
||||
}
|
||||
|
||||
fileChanged(file: File) {
|
||||
changeFile(file: File) {
|
||||
this.#fileChanged = true;
|
||||
this.form.get('file').setValue(file);
|
||||
this.form.get('fileName').setValue(file?.name);
|
||||
}
|
||||
@ -91,4 +95,8 @@ export class AddEditComponentMappingDialogComponent
|
||||
delimiter: [this.data?.mapping?.delimiter ?? ',', Validators.required],
|
||||
});
|
||||
}
|
||||
|
||||
get disabledFileOptions() {
|
||||
return this.initialFormValue?.file && !this.#fileChanged;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
<div class="header-container">
|
||||
<div [translate]="translations[this.type]['title']" class="heading-l"></div>
|
||||
<div [translate]="translations[this.type]['warning-text']" class="error"></div>
|
||||
</div>
|
||||
|
||||
<ngx-monaco-editor (init)="onCodeEditorInit($event)" [(ngModel)]="codeEditorText" [options]="editorOptions"></ngx-monaco-editor>
|
||||
|
||||
@ -96,11 +96,13 @@ export class AdminSideNavComponent implements OnInit {
|
||||
{
|
||||
screen: 'entity-rules',
|
||||
label: _('admin-side-nav.entity-rule-editor'),
|
||||
helpModeKey: 'rule_editors',
|
||||
show: (this.isIqserDevMode || this.canAccessRulesInDocumine) && this._permissionsService.has(Roles.rules.read),
|
||||
},
|
||||
{
|
||||
screen: 'component-rules',
|
||||
label: _('admin-side-nav.component-rule-editor'),
|
||||
helpModeKey: 'rule_editors',
|
||||
show:
|
||||
this.isDocumine &&
|
||||
(this.isIqserDevMode || this.canAccessRulesInDocumine) &&
|
||||
@ -109,11 +111,13 @@ export class AdminSideNavComponent implements OnInit {
|
||||
{
|
||||
screen: 'component-mappings',
|
||||
label: _('admin-side-nav.component-mappings'),
|
||||
helpModeKey: 'component_mappings',
|
||||
show: this.isDocumine,
|
||||
},
|
||||
{
|
||||
screen: 'components',
|
||||
label: _('admin-side-nav.components'),
|
||||
helpModeKey: 'components_management',
|
||||
show: this.isDocumine,
|
||||
},
|
||||
{
|
||||
|
||||
@ -3,7 +3,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
export const digitalSignatureDialogTranslations = {
|
||||
title: {
|
||||
beforeConfiguration: _('digital-signature-dialog.title.before-configuration'),
|
||||
pkcs: _('digital-signature-dialog.title.pkcs'),
|
||||
kms: _('digital-signature-dialog.title.kms'),
|
||||
PKCS: _('digital-signature-dialog.title.pkcs'),
|
||||
KMS: _('digital-signature-dialog.title.kms'),
|
||||
},
|
||||
} as const;
|
||||
|
||||
@ -5,7 +5,6 @@ export const rulesScreenTranslations: Record<'ENTITY' | 'COMPONENT', Record<stri
|
||||
'success.generic': _('entity-rules-screen.success.generic'),
|
||||
'error.generic': _('entity-rules-screen.error.generic'),
|
||||
title: _('entity-rules-screen.title'),
|
||||
'warning-text': _('entity-rules-screen.warning-text'),
|
||||
'errors-found': _('entity-rules-screen.errors-found'),
|
||||
'warnings-found': _('entity-rules-screen.warnings-found'),
|
||||
'save-changes': _('entity-rules-screen.save-changes'),
|
||||
@ -15,7 +14,6 @@ export const rulesScreenTranslations: Record<'ENTITY' | 'COMPONENT', Record<stri
|
||||
'success.generic': _('component-rules-screen.success.generic'),
|
||||
'error.generic': _('component-rules-screen.error.generic'),
|
||||
title: _('component-rules-screen.title'),
|
||||
'warning-text': _('component-rules-screen.warning-text'),
|
||||
'errors-found': _('component-rules-screen.errors-found'),
|
||||
'warnings-found': _('entity-rules-screen.warnings-found'),
|
||||
'save-changes': _('component-rules-screen.save-changes'),
|
||||
|
||||
@ -6,25 +6,13 @@
|
||||
[viewModeSelection]="viewModeSelection"
|
||||
>
|
||||
<ng-container slot="right">
|
||||
<iqser-circle-button
|
||||
*allow="roles.getRss"
|
||||
[attr.help-mode-key]="'component_download'"
|
||||
[disabled]="downloadComponentLogsDisabled$ | async"
|
||||
[icon]="'red:extract'"
|
||||
[matMenuTriggerFor]="(downloadComponentLogsDisabled$ | async) ? null : bulkComponentDownloadMenu"
|
||||
[tooltip]="
|
||||
((downloadComponentLogsDisabled$ | async) ? 'component-download.disabled-tooltip' : 'component-download.tooltip')
|
||||
| translate
|
||||
"
|
||||
dropdownButton
|
||||
></iqser-circle-button>
|
||||
|
||||
<redaction-file-download-btn
|
||||
[attr.help-mode-key]="'download_dossier_in_dossier'"
|
||||
[attr.help-mode-key]="isDocumine ? 'dossier_download_dossier' : 'download_dossier_in_dossier'"
|
||||
[buttonId]="'download-files-btn'"
|
||||
[disabled]="downloadFilesDisabled$ | async"
|
||||
[dossier]="dossier"
|
||||
[files]="entitiesService.all$ | async"
|
||||
dossierDownload
|
||||
></redaction-file-download-btn>
|
||||
|
||||
<iqser-circle-button
|
||||
@ -62,8 +50,3 @@
|
||||
<ng-template #viewModeSelection>
|
||||
<redaction-view-mode-selection iqserDisableStopPropagation></redaction-view-mode-selection>
|
||||
</ng-template>
|
||||
|
||||
<mat-menu #bulkComponentDownloadMenu="matMenu">
|
||||
<button (click)="downloadComponentAsJSON()" [innerHTML]="'component-download.json' | translate" mat-menu-item></button>
|
||||
<button (click)="downloadComponentAsXML()" [innerHTML]="'component-download.xml' | translate" mat-menu-item></button>
|
||||
</mat-menu>
|
||||
|
||||
@ -73,7 +73,6 @@ export class DossierOverviewScreenHeaderComponent implements OnInit {
|
||||
private readonly _reanalysisService: ReanalysisService,
|
||||
private readonly _loadingService: LoadingService,
|
||||
private readonly _primaryFileAttributeService: PrimaryFileAttributeService,
|
||||
private readonly _componentLogService: ComponentLogService,
|
||||
) {
|
||||
const someNotProcessed$ = this.entitiesService.all$.pipe(some(file => !file.lastProcessed));
|
||||
this.downloadFilesDisabled$ = combineLatest([this.listingService.areSomeSelected$, someNotProcessed$]).pipe(
|
||||
@ -128,12 +127,4 @@ export class DossierOverviewScreenHeaderComponent implements OnInit {
|
||||
];
|
||||
saveAsCSV(fileName, entities, fileFields, mapper);
|
||||
}
|
||||
|
||||
downloadComponentAsJSON() {
|
||||
return firstValueFrom(this._componentLogService.exportJSON(this.dossier.dossierTemplateId, this.dossier.dossierId));
|
||||
}
|
||||
|
||||
async downloadComponentAsXML() {
|
||||
return firstValueFrom(this._componentLogService.exportXML(this.dossier.dossierTemplateId, this.dossier.dossierId));
|
||||
}
|
||||
}
|
||||
|
||||
@ -61,8 +61,8 @@
|
||||
[configs]="[
|
||||
{
|
||||
color: file.workflowStatus,
|
||||
length: 1
|
||||
}
|
||||
length: 1,
|
||||
},
|
||||
]"
|
||||
></iqser-status-bar>
|
||||
</ng-template>
|
||||
@ -71,6 +71,7 @@
|
||||
*ngIf="!file.isProcessing"
|
||||
[dossier]="dossier"
|
||||
[file]="file"
|
||||
[singleEntityAction]="true"
|
||||
class="mr-4"
|
||||
type="dossier-overview-list"
|
||||
></redaction-file-actions>
|
||||
|
||||
@ -38,6 +38,7 @@
|
||||
[dossier]="dossier"
|
||||
[file]="file"
|
||||
[maxWidth]="width"
|
||||
[singleEntityAction]="true"
|
||||
iqserDisableStopPropagation
|
||||
type="dossier-overview-workflow"
|
||||
></redaction-file-actions>
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:has(iqser-circle-button[aria-expanded='true']),
|
||||
&.help-mode-active {
|
||||
redaction-file-actions {
|
||||
display: initial;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { ChangeDetectorRef, Component, ElementRef, Input, OnInit, Optional, ViewChild } from '@angular/core';
|
||||
import { ChangeDetectorRef, Component, computed, ElementRef, Input, OnInit, Optional, ViewChild } from '@angular/core';
|
||||
import { DisableStopPropagationDirective, HelpModeService } from '@iqser/common-ui';
|
||||
import { Debounce, trackByFactory } from '@iqser/common-ui/lib/utils';
|
||||
import { Dossier, File, IFileAttributeConfig } from '@red/domain';
|
||||
|
||||
@ -116,7 +116,7 @@ export class ConfigService {
|
||||
return [
|
||||
{
|
||||
id: 'editDossier',
|
||||
label: this._translateService.instant('dossier-overview.header-actions.edit'),
|
||||
label: _('dossier-overview.header-actions.edit'),
|
||||
action: () => this.#openEditDossierDialog(dossierId),
|
||||
icon: 'iqser:edit',
|
||||
hide: !this.#currentUser.isManager && !this._iqserPermissionsService.has(Roles.dossiers.edit),
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<section>
|
||||
<iqser-page-header [buttonConfigs]="buttonConfigs" [helpModeKey]="'dossier'">
|
||||
<ng-container *ngIf="isArchiveEnabled" slot="beforeFilters">
|
||||
<ng-container slot="beforeFilters">
|
||||
<redaction-dossiers-type-switch></redaction-dossiers-type-switch>
|
||||
</ng-container>
|
||||
</iqser-page-header>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { ChangeDetectionStrategy, Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
||||
import { Dossier, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, DossierTemplate } from '@red/domain';
|
||||
import { Dossier, DOSSIER_TEMPLATE_ID, DossierTemplate } from '@red/domain';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import {
|
||||
ButtonConfig,
|
||||
@ -19,7 +19,6 @@ import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { SharedDialogService } from '@shared/services/dialog.service';
|
||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||
import { OnAttach } from '@iqser/common-ui/lib/utils';
|
||||
import { FeaturesService } from '@services/features.service';
|
||||
import { DossiersTypeSwitchComponent } from '@shared/components/dossiers-type-switch/dossiers-type-switch.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DossiersListingDetailsComponent } from '../components/dossiers-listing-details/dossiers-listing-details.component';
|
||||
@ -51,7 +50,6 @@ export class DossiersListingScreenComponent extends ListingComponent<Dossier> im
|
||||
readonly buttonConfigs: ButtonConfig[];
|
||||
readonly dossierTemplate: DossierTemplate;
|
||||
readonly computeFilters$ = this._activeDossiersService.all$.pipe(tap(() => this._computeAllFilters()));
|
||||
readonly isArchiveEnabled = this._featuresService.isEnabled(DOSSIERS_ARCHIVE);
|
||||
@ViewChild('needsWorkFilterTemplate', {
|
||||
read: TemplateRef,
|
||||
static: true,
|
||||
@ -68,7 +66,6 @@ export class DossiersListingScreenComponent extends ListingComponent<Dossier> im
|
||||
private readonly _userPreferenceService: UserPreferenceService,
|
||||
private readonly _loadingService: LoadingService,
|
||||
readonly dossierTemplatesService: DossierTemplatesService,
|
||||
private readonly _featuresService: FeaturesService,
|
||||
) {
|
||||
super();
|
||||
const dossierTemplateId = router.routerState.snapshot.root.firstChild.firstChild.paramMap.get(DOSSIER_TEMPLATE_ID);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
class="mt-6 mr-10"
|
||||
></redaction-annotation-icon>
|
||||
|
||||
<div [class.flex-1]="!isDocumine">
|
||||
<div class="flex-1">
|
||||
<div>
|
||||
<strong>{{ annotation.superTypeLabel | translate }}</strong>
|
||||
|
||||
|
||||
@ -58,14 +58,17 @@
|
||||
}
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&.help-mode {
|
||||
&:hover {
|
||||
background-color: var(--iqser-annotation-hover);
|
||||
|
||||
::ng-deep .annotation-actions {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: var(--iqser-annotation-hover);
|
||||
}
|
||||
}
|
||||
|
||||
.hide-comments {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { ChangeDetectorRef, Component, computed, ElementRef, EventEmitter, Input, Output } from '@angular/core';
|
||||
import { Component, computed, ElementRef, EventEmitter, Input, Output } from '@angular/core';
|
||||
import { getConfig, HasScrollbarDirective } from '@iqser/common-ui';
|
||||
import { FilterService } from '@iqser/common-ui/lib/filtering';
|
||||
import { IqserEventTarget } from '@iqser/common-ui/lib/utils';
|
||||
@ -36,7 +36,6 @@ export class AnnotationsListComponent extends HasScrollbarDirective {
|
||||
|
||||
constructor(
|
||||
protected readonly _elementRef: ElementRef,
|
||||
protected readonly _changeDetector: ChangeDetectorRef,
|
||||
private readonly _multiSelectService: MultiSelectService,
|
||||
private readonly _filterService: FilterService,
|
||||
private readonly _userPreferenceService: UserPreferenceService,
|
||||
@ -45,7 +44,7 @@ export class AnnotationsListComponent extends HasScrollbarDirective {
|
||||
private readonly _listingService: AnnotationsListingService,
|
||||
readonly annotationReferencesService: AnnotationReferencesService,
|
||||
) {
|
||||
super(_elementRef, _changeDetector);
|
||||
super(_elementRef);
|
||||
}
|
||||
|
||||
annotationClicked(annotation: AnnotationWrapper, $event: MouseEvent): void {
|
||||
|
||||
@ -12,6 +12,8 @@
|
||||
<iqser-circle-button
|
||||
(action)="edit()"
|
||||
[tooltip]="'component-management.actions.edit' | translate"
|
||||
[attr.help-mode-key]="'editor_edit_component'"
|
||||
[class.help-mode]="helpModeService.isHelpModeActive()"
|
||||
icon="iqser:edit"
|
||||
></iqser-circle-button>
|
||||
@if (hasUpdatedValues) {
|
||||
@ -26,17 +28,19 @@
|
||||
<div cdkDrag class="editing-value">
|
||||
<mat-icon
|
||||
[class.hidden-button]="entry.componentValues.length === 1"
|
||||
[attr.help-mode-key]="'change_component_order'"
|
||||
cdkDragHandle
|
||||
class="draggable"
|
||||
svgIcon="red:draggable-dots"
|
||||
></mat-icon>
|
||||
<div class="iqser-input-group w-full">
|
||||
<div [attr.help-mode-key]="'edit_component'" class="iqser-input-group w-full">
|
||||
<textarea [id]="'value-input-' + $index" [(ngModel)]="value.value" rows="1" type="text"></textarea>
|
||||
</div>
|
||||
<iqser-circle-button
|
||||
(action)="removeValue($index)"
|
||||
[tooltip]="'component-management.actions.delete' | translate"
|
||||
[class.hidden-button]="entry.componentValues.length === 1"
|
||||
[attr.help-mode-key]="'remove_component_value'"
|
||||
class="remove-value"
|
||||
icon="iqser:trash"
|
||||
></iqser-circle-button>
|
||||
@ -56,6 +60,7 @@
|
||||
<iqser-circle-button
|
||||
(action)="undo()"
|
||||
[tooltip]="'component-management.actions.undo' | translate"
|
||||
[attr.help-mode-key]="'undo_component_change'"
|
||||
class="undo-value"
|
||||
icon="red:undo"
|
||||
showDot
|
||||
@ -64,6 +69,7 @@
|
||||
<iqser-circle-button
|
||||
(action)="add()"
|
||||
[tooltip]="'component-management.actions.add' | translate"
|
||||
[attr.help-mode-key]="'add_component_value'"
|
||||
class="add-value"
|
||||
icon="iqser:plus"
|
||||
></iqser-circle-button>
|
||||
|
||||
@ -29,6 +29,11 @@
|
||||
|
||||
iqser-circle-button {
|
||||
visibility: hidden;
|
||||
|
||||
&.help-mode {
|
||||
visibility: visible;
|
||||
z-index: 600;
|
||||
}
|
||||
}
|
||||
|
||||
.changes-dot {
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
|
||||
import { KeyValuePipe, NgClass, NgForOf, NgIf } from '@angular/common';
|
||||
import { AsyncPipe, KeyValuePipe, NgClass, NgForOf, NgIf } from '@angular/common';
|
||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { FilterService } from '@common-ui/filtering';
|
||||
import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialog } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, HelpModeService, IconButtonComponent, IconButtonTypes, IqserDialog } from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IComponentLogEntry, IComponentValue } from '@red/domain';
|
||||
import { RevertValueDialogComponent } from '../../dialogs/docu-mine/revert-value-dialog/revert-value-dialog.component';
|
||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-editable-structured-component-value [entry] [canEdit]',
|
||||
@ -27,6 +27,7 @@ import { RevertValueDialogComponent } from '../../dialogs/docu-mine/revert-value
|
||||
NgForOf,
|
||||
CdkDragHandle,
|
||||
FormsModule,
|
||||
AsyncPipe,
|
||||
],
|
||||
})
|
||||
export class EditableStructuredComponentValueComponent implements OnInit {
|
||||
@ -43,8 +44,9 @@ export class EditableStructuredComponentValueComponent implements OnInit {
|
||||
selected = false;
|
||||
|
||||
constructor(
|
||||
private readonly _filtersService: FilterService,
|
||||
readonly helpModeService: HelpModeService,
|
||||
private readonly _iqserDialog: IqserDialog,
|
||||
private readonly _state: FilePreviewStateService,
|
||||
) {}
|
||||
|
||||
get disabled() {
|
||||
@ -91,7 +93,7 @@ export class EditableStructuredComponentValueComponent implements OnInit {
|
||||
}
|
||||
this.deselectLast.emit();
|
||||
this.selected = true;
|
||||
this.#setWorkloadFilters();
|
||||
this._state.componentReferenceIds = this.#getUniqueReferencesIds(this.entry.componentValues);
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,7 +108,7 @@ export class EditableStructuredComponentValueComponent implements OnInit {
|
||||
$event?.stopImmediatePropagation();
|
||||
this.selected = false;
|
||||
this.editing = false;
|
||||
this._filtersService.deactivateFilters({ primaryFiltersSlug: 'primaryFilters' });
|
||||
this._state.componentReferenceIds = null;
|
||||
}
|
||||
|
||||
removeValue(index: number) {
|
||||
@ -150,41 +152,14 @@ export class EditableStructuredComponentValueComponent implements OnInit {
|
||||
return value.replace(/\n/g, '<br>');
|
||||
}
|
||||
|
||||
#setWorkloadFilters() {
|
||||
this._filtersService.deactivateFilters({ primaryFiltersSlug: 'primaryFilters' });
|
||||
const uniqueLabels = this.#getUniqueReferencesLabels(this.entry.componentValues);
|
||||
let setFilterCount = 0;
|
||||
for (const label of uniqueLabels) {
|
||||
const setFilter = this.#setFilter(label);
|
||||
if (setFilter) {
|
||||
setFilterCount++;
|
||||
}
|
||||
}
|
||||
if (!setFilterCount) {
|
||||
this.#setFilter('no-annotations-filter');
|
||||
}
|
||||
}
|
||||
|
||||
#setFilter(label: string) {
|
||||
const filterGroup = this._filtersService.getGroup('primaryFilters');
|
||||
for (const filter of filterGroup.filters) {
|
||||
const nestedFilter = filter.children.find(f => f.label.toLowerCase() === label);
|
||||
if (nestedFilter) {
|
||||
this._filtersService.filterCheckboxClicked({ nestedFilter, filterGroup, primaryFiltersSlug: 'primaryFilters' });
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#getUniqueReferencesLabels(values: IComponentValue[]) {
|
||||
const labels: Set<string> = new Set();
|
||||
#getUniqueReferencesIds(values: IComponentValue[]) {
|
||||
const ids: Set<string> = new Set();
|
||||
for (const value of values) {
|
||||
for (const reference of value.entityReferences) {
|
||||
const label = reference.type?.replace(/_/g, ' ')?.toLowerCase();
|
||||
labels.add(label);
|
||||
ids.add(reference.id);
|
||||
}
|
||||
}
|
||||
return labels;
|
||||
return Array.from(ids);
|
||||
}
|
||||
|
||||
#updateTextAreaHeight() {
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
[file]="file"
|
||||
[helpModeKeyPrefix]="'editor'"
|
||||
[minWidth]="width"
|
||||
[singleEntityAction]="true"
|
||||
iqserDisableStopPropagation
|
||||
type="file-preview"
|
||||
></redaction-file-actions>
|
||||
|
||||
@ -44,34 +44,9 @@
|
||||
</ng-template>
|
||||
</ng-container>
|
||||
|
||||
<div *ngIf="multiSelectService.active()" class="multi-select">
|
||||
<div class="selected-wrapper">
|
||||
<iqser-round-checkbox
|
||||
(click)="annotationManager.deselect()"
|
||||
[indeterminate]="listingService.areSomeSelected$ | async"
|
||||
type="with-bg"
|
||||
></iqser-round-checkbox>
|
||||
|
||||
<span class="all-caps-label">{{ listingService.selectedLength$ | async }} selected </span>
|
||||
|
||||
<redaction-annotation-actions
|
||||
*ngIf="listingService.areSomeSelected$ | async"
|
||||
[alwaysVisible]="true"
|
||||
[annotations]="listingService.selectedEntities$ | async"
|
||||
[canPerformAnnotationActions]="state.isWritable()"
|
||||
buttonType="primary"
|
||||
tooltipPosition="above"
|
||||
></redaction-annotation-actions>
|
||||
</div>
|
||||
|
||||
<iqser-circle-button
|
||||
(action)="multiSelectService.deactivate()"
|
||||
[tooltip]="'file-preview.tabs.multi-select.close' | translate"
|
||||
[type]="circleButtonTypes.primary"
|
||||
icon="iqser:close"
|
||||
tooltipPosition="before"
|
||||
></iqser-circle-button>
|
||||
</div>
|
||||
@if (!isDocumine) {
|
||||
<ng-container [ngTemplateOutlet]="multiSelectTemplate()"></ng-container>
|
||||
}
|
||||
|
||||
<div class="annotations-wrapper" [class.documine-direction]="isDocumine">
|
||||
<div [class.border-left]="isDocumine">
|
||||
@ -158,11 +133,14 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (isDocumine) {
|
||||
<ng-container [ngTemplateOutlet]="multiSelectTemplate()"></ng-container>
|
||||
}
|
||||
|
||||
<div
|
||||
#annotationsElement
|
||||
(keydown)="preventKeyDefault($event)"
|
||||
(keyup)="preventKeyDefault($event)"
|
||||
[class.active-panel]="!pagesPanelActive"
|
||||
[hidden]="excludedPagesService.shown()"
|
||||
class="annotations"
|
||||
id="annotations-list"
|
||||
@ -185,26 +163,19 @@
|
||||
>.
|
||||
</ng-container>
|
||||
|
||||
<ng-container
|
||||
*ngIf="(fileDataService.allLength$ | async) === 0 || filterService.noAnnotationsFilterChecked"
|
||||
>
|
||||
{{ 'file-preview.tabs.annotations.no-annotations' | translate }}
|
||||
</ng-container>
|
||||
|
||||
<ng-container
|
||||
*ngIf="
|
||||
(fileDataService.allLength$ | async) > 0 &&
|
||||
displayedPages.length === 0 &&
|
||||
!filterService.noAnnotationsFilterChecked
|
||||
"
|
||||
>{{ 'file-preview.tabs.annotations.wrong-filters' | translate }}
|
||||
<a
|
||||
(click)="filterService.reset()"
|
||||
class="with-underline"
|
||||
translate="file-preview.tabs.annotations.reset"
|
||||
></a>
|
||||
{{ 'file-preview.tabs.annotations.the-filters' | translate }}
|
||||
</ng-container>
|
||||
@if ((fileDataService.allLength$ | async) > 0 && displayedPages.length === 0) {
|
||||
@if (this.enabledFilters?.length) {
|
||||
{{ 'file-preview.tabs.annotations.wrong-filters' | translate }}
|
||||
<a
|
||||
(click)="filterService.reset()"
|
||||
class="with-underline"
|
||||
translate="file-preview.tabs.annotations.reset"
|
||||
></a>
|
||||
{{ 'file-preview.tabs.annotations.the-filters' | translate }}
|
||||
} @else if (state.componentReferenceIds?.length === 0) {
|
||||
{{ 'file-preview.tabs.annotations.no-annotations' | translate }}
|
||||
}
|
||||
}
|
||||
</iqser-empty-state>
|
||||
|
||||
<div *ngIf="displayedPages.length" class="no-annotations-buttons-container mt-32">
|
||||
@ -253,7 +224,7 @@
|
||||
</ng-template>
|
||||
|
||||
<ng-template #documineHeader>
|
||||
<span [translate]="'annotations'"></span>
|
||||
<span [translate]="'annotations'" [attr.help-mode-key]="'annotations_list'"></span>
|
||||
<ng-container *ngTemplateOutlet="annotationsFilter"></ng-container>
|
||||
</ng-template>
|
||||
|
||||
@ -261,7 +232,7 @@
|
||||
<iqser-popup-filter
|
||||
*ngIf="documentInfoService.hidden() || isDocumine"
|
||||
[actionsTemplate]="annotationFilterActionTemplate"
|
||||
[attr.help-mode-key]="'workload_filter'"
|
||||
[attr.help-mode-key]="isDocumine ? 'filter_annotations' : 'workload_filter'"
|
||||
[fileId]="state.file()?.id"
|
||||
[primaryFiltersSlug]="'primaryFilters'"
|
||||
[secondaryFiltersSlug]="'secondaryFilters'"
|
||||
@ -271,3 +242,34 @@
|
||||
<ng-template #documentInfo>
|
||||
<redaction-document-info id="document-info"></redaction-document-info>
|
||||
</ng-template>
|
||||
|
||||
<ng-template #multiSelect>
|
||||
<div *ngIf="multiSelectService.active()" [class.documine-width]="isDocumine" class="multi-select">
|
||||
<div class="selected-wrapper">
|
||||
<iqser-round-checkbox
|
||||
(click)="annotationManager.deselect()"
|
||||
[indeterminate]="listingService.areSomeSelected$ | async"
|
||||
type="with-bg"
|
||||
></iqser-round-checkbox>
|
||||
|
||||
<span class="all-caps-label">{{ listingService.selectedLength$ | async }} selected </span>
|
||||
|
||||
<redaction-annotation-actions
|
||||
*ngIf="listingService.areSomeSelected$ | async"
|
||||
[alwaysVisible]="true"
|
||||
[annotations]="listingService.selectedEntities$ | async"
|
||||
[canPerformAnnotationActions]="state.isWritable()"
|
||||
buttonType="primary"
|
||||
tooltipPosition="above"
|
||||
></redaction-annotation-actions>
|
||||
</div>
|
||||
|
||||
<iqser-circle-button
|
||||
(action)="multiSelectService.deactivate()"
|
||||
[tooltip]="'file-preview.tabs.multi-select.close' | translate"
|
||||
[type]="circleButtonTypes.primary"
|
||||
icon="iqser:close"
|
||||
tooltipPosition="before"
|
||||
></iqser-circle-button>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@ -1,5 +1,16 @@
|
||||
import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';
|
||||
import { ChangeDetectorRef, Component, computed, effect, ElementRef, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';
|
||||
import {
|
||||
ChangeDetectorRef,
|
||||
Component,
|
||||
computed,
|
||||
effect,
|
||||
ElementRef,
|
||||
HostListener,
|
||||
OnDestroy,
|
||||
OnInit,
|
||||
TemplateRef,
|
||||
viewChild,
|
||||
} from '@angular/core';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
@ -78,8 +89,9 @@ const ALL_HOTKEY_ARRAY = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'];
|
||||
],
|
||||
})
|
||||
export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, OnDestroy {
|
||||
@ViewChild('annotationsElement') private readonly _annotationsElement: ElementRef;
|
||||
@ViewChild('quickNavigation') private readonly _quickNavigationElement: ElementRef;
|
||||
private readonly _annotationsElement = viewChild<ElementRef>('annotationsElement');
|
||||
private readonly _quickNavigationElement = viewChild<ElementRef>('quickNavigation');
|
||||
readonly multiSelectTemplate = viewChild<TemplateRef<any>>('multiSelect');
|
||||
readonly #isIqserDevMode = this._userPreferenceService.isIqserDevMode;
|
||||
protected readonly iconButtonTypes = IconButtonTypes;
|
||||
protected readonly circleButtonTypes = CircleButtonTypes;
|
||||
@ -90,9 +102,11 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
|
||||
protected readonly currentPageIsExcluded = computed(() => this.state.file().excludedPages.includes(this.pdf.currentPage()));
|
||||
protected readonly translations = workloadTranslations;
|
||||
protected readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||
displayedAnnotations = new Map<number, AnnotationWrapper[]>();
|
||||
displayedPages: number[] = [];
|
||||
pagesPanelActive = true;
|
||||
protected displayedAnnotations = new Map<number, AnnotationWrapper[]>();
|
||||
protected displayedPages: number[] = [];
|
||||
protected pagesPanelActive = true;
|
||||
protected enabledFilters = [];
|
||||
#displayedPagesChanged = false;
|
||||
|
||||
constructor(
|
||||
readonly filterService: FilterService,
|
||||
@ -176,11 +190,14 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
|
||||
this.fileDataService.all$,
|
||||
primary$,
|
||||
secondary$,
|
||||
this.state.componentReferenceIds$,
|
||||
this.listingService.selected$,
|
||||
this._pageRotationService.rotations$,
|
||||
]).pipe(
|
||||
delay(0),
|
||||
map(([annotations, primary, secondary]) => this.#filterAnnotations(annotations, primary, secondary)),
|
||||
map(([annotations, primary, secondary, componentReferenceIds]) =>
|
||||
this.#filterAnnotations(annotations, primary, secondary, componentReferenceIds),
|
||||
),
|
||||
map(annotations => this.#mapListItemsFromAnnotationWrapperArray(annotations)),
|
||||
tap(annotations => this.#scrollToFirstAnnotationPage(annotations)),
|
||||
);
|
||||
@ -275,18 +292,20 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
|
||||
}
|
||||
|
||||
scrollAnnotationsToPage(page: number, mode: 'always' | 'if-needed' = 'if-needed'): void {
|
||||
if (this._annotationsElement) {
|
||||
const elements: HTMLElement[] = this._annotationsElement.nativeElement.querySelectorAll(`div[anotation-page-header="${page}"]`);
|
||||
if (this._annotationsElement()) {
|
||||
const elements: HTMLElement[] = this._annotationsElement().nativeElement.querySelectorAll(
|
||||
`div[anotation-page-header="${page}"]`,
|
||||
);
|
||||
FileWorkloadComponent._scrollToFirstElement(elements, mode);
|
||||
}
|
||||
}
|
||||
|
||||
@Debounce()
|
||||
scrollToSelectedAnnotation(): void {
|
||||
if (this.listingService.selected.length === 0 || !this._annotationsElement) {
|
||||
if (this.listingService.selected.length === 0 || !this._annotationsElement()) {
|
||||
return;
|
||||
}
|
||||
const elements: HTMLElement[] = this._annotationsElement.nativeElement.querySelectorAll(
|
||||
const elements: HTMLElement[] = this._annotationsElement().nativeElement.querySelectorAll(
|
||||
`[annotation-id="${this._firstSelectedAnnotation?.id}"]`,
|
||||
);
|
||||
FileWorkloadComponent._scrollToFirstElement(elements);
|
||||
@ -399,10 +418,12 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
|
||||
annotations: AnnotationWrapper[],
|
||||
primary: INestedFilter[],
|
||||
secondary: INestedFilter[] = [],
|
||||
componentReferenceIds: string[],
|
||||
): Map<number, AnnotationWrapper[]> {
|
||||
const onlyPageWithAnnotations = this.viewModeService.onlyPagesWithAnnotations();
|
||||
if (!primary || primary.length === 0) {
|
||||
this.displayedPages = onlyPageWithAnnotations ? [] : this.#allPages;
|
||||
const pages = onlyPageWithAnnotations ? [] : this.#allPages;
|
||||
this.#setDisplayedPages(pages);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -410,24 +431,30 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
|
||||
annotations = annotations.filter(a => !a.isRemoved);
|
||||
}
|
||||
|
||||
if (this.isDocumine && !this.#isIqserDevMode) {
|
||||
annotations = annotations.filter(a => !a.isOCR);
|
||||
if (this.isDocumine) {
|
||||
if (!this.#isIqserDevMode) {
|
||||
annotations = annotations.filter(a => !a.isOCR);
|
||||
}
|
||||
if (componentReferenceIds) {
|
||||
annotations = annotations.filter(a => componentReferenceIds.includes(a.id));
|
||||
}
|
||||
}
|
||||
|
||||
this.displayedAnnotations = this._annotationProcessingService.filterAndGroupAnnotations(annotations, primary, secondary);
|
||||
const pagesThatDisplayAnnotations = [...this.displayedAnnotations.keys()];
|
||||
const enabledFilters = this.filterService.enabledFlatFilters;
|
||||
if (enabledFilters.some(f => f.id === 'pages-without-annotations')) {
|
||||
if (enabledFilters.length === 1 && !onlyPageWithAnnotations) {
|
||||
this.displayedPages = this.#allPages.filter(page => !pagesThatDisplayAnnotations.includes(page));
|
||||
this.enabledFilters = this.filterService.enabledFlatFilters;
|
||||
if (this.enabledFilters.some(f => f.id === 'pages-without-annotations')) {
|
||||
if (this.enabledFilters.length === 1 && !onlyPageWithAnnotations) {
|
||||
const pages = this.#allPages.filter(page => !pagesThatDisplayAnnotations.includes(page));
|
||||
this.#setDisplayedPages(pages);
|
||||
} else {
|
||||
this.displayedPages = [];
|
||||
this.#setDisplayedPages([]);
|
||||
}
|
||||
this.displayedAnnotations.clear();
|
||||
} else if (enabledFilters.length || onlyPageWithAnnotations) {
|
||||
this.displayedPages = pagesThatDisplayAnnotations;
|
||||
} else if (this.enabledFilters.length || onlyPageWithAnnotations || componentReferenceIds) {
|
||||
this.#setDisplayedPages(pagesThatDisplayAnnotations);
|
||||
} else {
|
||||
this.displayedPages = this.#allPages;
|
||||
this.#setDisplayedPages(this.#allPages);
|
||||
}
|
||||
this.displayedPages.sort((a, b) => a - b);
|
||||
|
||||
@ -501,8 +528,8 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
|
||||
}
|
||||
|
||||
#scrollQuickNavigationToPage(page: number) {
|
||||
if (this._quickNavigationElement) {
|
||||
const elements: HTMLElement[] = this._quickNavigationElement.nativeElement.querySelectorAll(`#quick-nav-page-${page}`);
|
||||
if (this._quickNavigationElement()) {
|
||||
const elements: HTMLElement[] = this._quickNavigationElement().nativeElement.querySelectorAll(`#quick-nav-page-${page}`);
|
||||
FileWorkloadComponent._scrollToFirstElement(elements);
|
||||
}
|
||||
}
|
||||
@ -523,9 +550,25 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
|
||||
}
|
||||
|
||||
#scrollToFirstAnnotationPage(annotations: Map<number, ListItem<AnnotationWrapper>[]>) {
|
||||
if (this.isDocumine && annotations.size && !this.displayedPages.includes(this.pdf.currentPage())) {
|
||||
if (this.isDocumine && annotations.size && this.#displayedPagesChanged && !this.displayedPages.includes(this.pdf.currentPage())) {
|
||||
const page = annotations.keys().next().value;
|
||||
this.pdf.navigateTo(page);
|
||||
}
|
||||
}
|
||||
|
||||
#setDisplayedPages(newDisplayedPages: number[]) {
|
||||
if (!this.#samePages(newDisplayedPages)) {
|
||||
this.displayedPages = newDisplayedPages;
|
||||
this.#displayedPagesChanged = true;
|
||||
return;
|
||||
}
|
||||
this.#displayedPagesChanged = false;
|
||||
}
|
||||
|
||||
#samePages(newDisplayedPages: number[]) {
|
||||
return (
|
||||
this.displayedPages.length === newDisplayedPages.length &&
|
||||
this.displayedPages.every((value, index) => value === newDisplayedPages[index])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
<div class="components-header">
|
||||
<span [translate]="'component-management.components'"></span>
|
||||
<iqser-popup-filter [primaryFiltersSlug]="'componentLogFilters'"></iqser-popup-filter>
|
||||
<span [translate]="'component-management.components'" [attr.help-mode-key]="'components_table'"></span>
|
||||
<iqser-popup-filter [primaryFiltersSlug]="'componentLogFilters'" [attr.help-mode-key]="'filter_components'"></iqser-popup-filter>
|
||||
</div>
|
||||
|
||||
<div *ngIf="displayedComponents$ | async as displayedComponents" class="components-container">
|
||||
<div *ngIf="displayedComponents$ | async as displayedComponents" class="components-container" id="components-view">
|
||||
<div class="component-row">
|
||||
<div class="header">
|
||||
<div class="component">{{ 'component-management.table-header.component' | translate }}</div>
|
||||
|
||||
@ -3,7 +3,6 @@ import { List } from '@common-ui/utils';
|
||||
import { IconButtonTypes, LoadingService } from '@iqser/common-ui';
|
||||
import { ComponentLogEntry, Dictionary, File, IComponentLogEntry, WorkflowFileStatuses } from '@red/domain';
|
||||
import { ComponentLogService } from '@services/files/component-log.service';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { combineLatest, firstValueFrom, Observable } from 'rxjs';
|
||||
import { EditableStructuredComponentValueComponent } from '../editable-structured-component-value/editable-structured-component-value.component';
|
||||
import { FilterService, PopupFilterComponent } from '@common-ui/filtering';
|
||||
@ -23,7 +22,6 @@ import { TranslateModule } from '@ngx-translate/core';
|
||||
export class StructuredComponentManagementComponent implements OnInit {
|
||||
protected readonly componentLogData = signal<ComponentLogEntry[] | undefined>(undefined);
|
||||
protected readonly componentLogData$ = toObservable(this.componentLogData);
|
||||
protected readonly openScmDialogByDefault = signal(this.userPreferences.getOpenScmDialogByDefault());
|
||||
protected readonly iconButtonTypes = IconButtonTypes;
|
||||
protected displayedComponents$: Observable<ComponentLogEntry[]>;
|
||||
@Input() file: File;
|
||||
@ -35,7 +33,6 @@ export class StructuredComponentManagementComponent implements OnInit {
|
||||
private readonly _loadingService: LoadingService,
|
||||
private readonly _componentLogFilterService: ComponentLogFilterService,
|
||||
private readonly _filterService: FilterService,
|
||||
readonly userPreferences: UserPreferenceService,
|
||||
) {}
|
||||
|
||||
get canEdit() {
|
||||
@ -54,12 +51,6 @@ export class StructuredComponentManagementComponent implements OnInit {
|
||||
}
|
||||
}
|
||||
|
||||
async toggleOpenScmDialogByDefault() {
|
||||
await this.userPreferences.toggleOpenScmDialogByDefault();
|
||||
await this.userPreferences.reload();
|
||||
this.openScmDialogByDefault.set(this.userPreferences.getOpenScmDialogByDefault());
|
||||
}
|
||||
|
||||
async revertOverride(originalKey: string) {
|
||||
this._loadingService.start();
|
||||
await firstValueFrom(
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<section class="dialog">
|
||||
<section [attr.help-mode-key]="'edit_annotation_DIALOG'" class="dialog">
|
||||
<form (submit)="save()" [formGroup]="form">
|
||||
<div [translate]="'edit-redaction.dialog.title'" class="dialog-header heading-l"></div>
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<section class="dialog">
|
||||
<section [attr.help-mode-key]="'remove_annotation_DIALOG'" class="dialog">
|
||||
<form (submit)="save()" [formGroup]="form">
|
||||
<div
|
||||
[innerHTML]="'remove-annotation.dialog.title' | translate: { count: data.redactions.length }"
|
||||
@ -27,7 +27,7 @@
|
||||
| translate
|
||||
: {
|
||||
text: text,
|
||||
context: data.falsePositiveContext[idx]
|
||||
context: data.falsePositiveContext[idx],
|
||||
}
|
||||
| replaceNbsp
|
||||
}}
|
||||
|
||||
@ -141,10 +141,6 @@ export class AnnotationProcessingService {
|
||||
}
|
||||
}
|
||||
|
||||
if (this.#isDocumine) {
|
||||
this.#createNoAnnotationsFilter(filterMap, filters);
|
||||
}
|
||||
|
||||
return filters.sort((a, b) => SuperTypeSorter[a.id] - SuperTypeSorter[b.id]);
|
||||
}
|
||||
|
||||
@ -272,19 +268,4 @@ export class AnnotationProcessingService {
|
||||
return first.pageNumber < second.pageNumber ? -1 : 1;
|
||||
});
|
||||
}
|
||||
|
||||
#createNoAnnotationsFilter(filterMap: Map<string, INestedFilter>, filters: INestedFilter[]) {
|
||||
const childFilter: IFilter = {
|
||||
id: 'no-annotations-filter',
|
||||
label: 'no-annotations-filter',
|
||||
checked: false,
|
||||
matches: 1,
|
||||
skipTranslation: true,
|
||||
hidden: true,
|
||||
};
|
||||
|
||||
const newChildFilter = new Filter(childFilter);
|
||||
filterMap.set('no-annotations-filter', newChildFilter);
|
||||
filters[0]?.children.push(newChildFilter);
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ import { FilesMapService } from '@services/files/files-map.service';
|
||||
import { FilesService } from '@services/files/files.service';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { NGXLogger } from 'ngx-logger';
|
||||
import { firstValueFrom, from, merge, Observable, of, pairwise, Subject, switchMap } from 'rxjs';
|
||||
import { BehaviorSubject, firstValueFrom, from, merge, Observable, of, pairwise, Subject, switchMap } from 'rxjs';
|
||||
import { filter, map, startWith, tap, withLatestFrom } from 'rxjs/operators';
|
||||
import { ViewModeService } from './view-mode.service';
|
||||
|
||||
@ -41,6 +41,8 @@ export class FilePreviewStateService {
|
||||
readonly isWritable: Signal<boolean>;
|
||||
readonly dossierDictionary: Signal<Dictionary>;
|
||||
readonly blob$: Observable<Blob>;
|
||||
readonly componentReferenceIds$: Observable<string[] | null>;
|
||||
readonly #componentReferenceIds$ = new BehaviorSubject<string[] | null>(null);
|
||||
readonly dossierId = getParam(DOSSIER_ID);
|
||||
readonly dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
|
||||
readonly fileId = getParam(FILE_ID);
|
||||
@ -62,6 +64,7 @@ export class FilePreviewStateService {
|
||||
this.dossier = toSignal(dossiersServiceResolver().getEntityChanged$(this.dossierId));
|
||||
this.file$ = inject(FilesMapService).watch$(this.dossierId, this.fileId);
|
||||
this.file = toSignal(this.file$);
|
||||
this.componentReferenceIds$ = this.#componentReferenceIds$.asObservable();
|
||||
this.excludedPages = signal(this.file().excludedPages);
|
||||
this.isWritable = computed(() => {
|
||||
const isWritable = this._permissionsService.canPerformAnnotationActions(this.file(), this.dossier());
|
||||
@ -91,6 +94,10 @@ export class FilePreviewStateService {
|
||||
);
|
||||
}
|
||||
|
||||
set componentReferenceIds(ids: string[]) {
|
||||
this.#componentReferenceIds$.next(ids);
|
||||
}
|
||||
|
||||
get dictionaries(): Dictionary[] {
|
||||
const dictionaries = this._dictionariesMapService.get(this.dossierTemplateId);
|
||||
if (this.dossierDictionary()) {
|
||||
@ -126,6 +133,10 @@ export class FilePreviewStateService {
|
||||
);
|
||||
}
|
||||
|
||||
get componentReferenceIds() {
|
||||
return this.#componentReferenceIds$.getValue();
|
||||
}
|
||||
|
||||
reloadBlob(): void {
|
||||
this.#reloadBlob$.next(true);
|
||||
}
|
||||
|
||||
@ -1,4 +1,8 @@
|
||||
<div [style.visibility]="documentViewer.loaded() ? 'visible' : 'hidden'" class="pagination noselect">
|
||||
<div
|
||||
[style.visibility]="documentViewer.loaded() ? 'visible' : 'hidden'"
|
||||
class="pagination noselect"
|
||||
[class.documine-pagination]="isDocumine"
|
||||
>
|
||||
<div (click)="pdf.navigatePreviousPage()">
|
||||
<mat-icon class="chevron-icon" svgIcon="iqser:nav-prev"></mat-icon>
|
||||
</div>
|
||||
|
||||
@ -13,6 +13,10 @@
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
&.documine-pagination {
|
||||
left: calc(100% - (var(--documine-viewer-width) / 2) - var(--qiuck-navigation-width));
|
||||
}
|
||||
|
||||
> div {
|
||||
height: 16px;
|
||||
cursor: default;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { PdfViewer } from '../../services/pdf-viewer.service';
|
||||
import { REDDocumentViewer } from '../../services/document-viewer.service';
|
||||
import { getConfig } from '@iqser/common-ui';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-paginator',
|
||||
@ -8,5 +9,9 @@ import { REDDocumentViewer } from '../../services/document-viewer.service';
|
||||
styleUrls: ['./paginator.component.scss'],
|
||||
})
|
||||
export class PaginatorComponent {
|
||||
constructor(readonly pdf: PdfViewer, readonly documentViewer: REDDocumentViewer) {}
|
||||
protected readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||
constructor(
|
||||
readonly pdf: PdfViewer,
|
||||
readonly documentViewer: REDDocumentViewer,
|
||||
) {}
|
||||
}
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
<redaction-compare-file-input></redaction-compare-file-input>
|
||||
|
||||
<redaction-paginator *ngIf="!isDocumine"></redaction-paginator>
|
||||
<redaction-paginator></redaction-paginator>
|
||||
|
||||
@ -7,7 +7,7 @@ import {
|
||||
SearchPositions,
|
||||
TableColumnConfig,
|
||||
} from '@iqser/common-ui';
|
||||
import { combineLatest, Observable, of } from 'rxjs';
|
||||
import { combineLatest, Observable } from 'rxjs';
|
||||
import { debounceTime, map, startWith, switchMap, tap } from 'rxjs/operators';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
@ -16,7 +16,6 @@ import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
||||
import { RouterHistoryService } from '@services/router-history.service';
|
||||
import {
|
||||
Dossier,
|
||||
DOSSIERS_ARCHIVE,
|
||||
DossierTemplate,
|
||||
IMatchedDocument,
|
||||
ISearchListItem,
|
||||
@ -26,7 +25,6 @@ import {
|
||||
} from '@red/domain';
|
||||
import { FilesMapService } from '@services/files/files-map.service';
|
||||
import { PlatformSearchService } from '@services/entity-services/platform-search.service';
|
||||
import { FeaturesService } from '@services/features.service';
|
||||
import { DossiersCacheService } from '@services/dossiers/dossiers-cache.service';
|
||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||
import { UserService } from '@users/user.service';
|
||||
@ -68,7 +66,6 @@ export default class SearchScreenComponent extends ListingComponent<ISearchListI
|
||||
private readonly _translateService: TranslateService,
|
||||
private readonly _filesMapService: FilesMapService,
|
||||
private readonly _platformSearchService: PlatformSearchService,
|
||||
private readonly _featuresService: FeaturesService,
|
||||
private readonly _dossierTemplateService: DossierTemplatesService,
|
||||
private readonly _userService: UserService,
|
||||
) {
|
||||
@ -134,14 +131,8 @@ export default class SearchScreenComponent extends ListingComponent<ISearchListI
|
||||
);
|
||||
}
|
||||
|
||||
get #enabledArchive(): boolean {
|
||||
return this._featuresService.isEnabled(DOSSIERS_ARCHIVE);
|
||||
}
|
||||
|
||||
get #filtersChanged$(): Observable<[string[], WorkflowFileStatus, string, string[], boolean]> {
|
||||
const onlyActiveDossiers$ = this.#enabledArchive
|
||||
? this.filterService.getSingleFilter('onlyActiveDossiers').pipe(map(f => !!f.checked))
|
||||
: of(true);
|
||||
const onlyActiveDossiers$ = this.filterService.getSingleFilter('onlyActiveDossiers').pipe(map(f => !!f.checked));
|
||||
const filterGroups$ = this.filterService.filterGroups$;
|
||||
return combineLatest([filterGroups$, onlyActiveDossiers$]).pipe(
|
||||
map(([groups, onlyActive]) => {
|
||||
@ -225,9 +216,7 @@ export default class SearchScreenComponent extends ListingComponent<ISearchListI
|
||||
|
||||
this.filterService.addFilterGroups([dossierNameFilter, workflowStatusFilter, assigneeFilter]);
|
||||
const onlyActiveLabel = this._translateService.instant('search-screen.filters.only-active');
|
||||
if (this.#enabledArchive) {
|
||||
this.filterService.addSingleFilter({ id: 'onlyActiveDossiers', label: onlyActiveLabel, checked: this.#routeOnlyActive });
|
||||
}
|
||||
this.filterService.addSingleFilter({ id: 'onlyActiveDossiers', label: onlyActiveLabel, checked: this.#routeOnlyActive });
|
||||
}
|
||||
|
||||
#addTemplateFilter(templates: DossierTemplate[]) {
|
||||
|
||||
@ -24,10 +24,11 @@
|
||||
></iqser-circle-button>
|
||||
|
||||
<redaction-file-download-btn
|
||||
[attr.help-mode-key]="'download_dossier'"
|
||||
[attr.help-mode-key]="isDocumine ? 'template_download_dossier' : 'download_dossier'"
|
||||
[buttonId]="'download-dossier-files-' + dossier.id"
|
||||
[disabled]="downloadBtnDisabled"
|
||||
[dossier]="dossier"
|
||||
[files]="files"
|
||||
dossierDownload
|
||||
></redaction-file-download-btn>
|
||||
</div>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { Component, Input, OnChanges } from '@angular/core';
|
||||
import { CircleButtonComponent, IqserAllowDirective, IqserPermissionsService, largeDialogConfig } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, getConfig, IqserAllowDirective, IqserPermissionsService, largeDialogConfig } from '@iqser/common-ui';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import type { Dossier, File, User } from '@red/domain';
|
||||
@ -23,6 +23,7 @@ import { DossiersDialogService } from '../../services/dossiers-dialog.service';
|
||||
export class DossiersListingActionsComponent implements OnChanges {
|
||||
readonly roles = Roles;
|
||||
readonly currentUser = getCurrentUser<User>();
|
||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||
|
||||
analysisForced: boolean;
|
||||
files: File[];
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
[tooltipPosition]="tooltipPosition"
|
||||
[helpModeKeyPrefix]="helpModeKeyPrefix"
|
||||
[isDossierOverviewWorkflow]="isDossierOverviewWorkflow"
|
||||
[file]="file"
|
||||
[singleEntityAction]="singleEntityAction"
|
||||
></redaction-expandable-file-actions>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@ -51,6 +51,7 @@ export class FileActionsComponent implements OnChanges {
|
||||
@Input() maxWidth: number;
|
||||
@Input() minWidth: number;
|
||||
@Input() helpModeKeyPrefix: 'dossier' | 'editor' = 'dossier';
|
||||
@Input() singleEntityAction = false;
|
||||
readonly currentUser = getCurrentUser<User>();
|
||||
toggleTooltip?: string;
|
||||
assignTooltip?: string;
|
||||
@ -119,6 +120,16 @@ export class FileActionsComponent implements OnChanges {
|
||||
|
||||
private get _buttons(): Action[] {
|
||||
const actions: Action[] = [
|
||||
{
|
||||
id: 'btn-download_file',
|
||||
type: ActionTypes.downloadBtn,
|
||||
files: [this.file],
|
||||
dossier: this.dossier,
|
||||
tooltipClass: 'small',
|
||||
show: this.showDownload,
|
||||
disabled: this.file.processingStatus === ProcessingFileStatuses.ERROR,
|
||||
helpModeKey: this.#isDocumine ? 'download_document' : 'download',
|
||||
},
|
||||
{
|
||||
id: 'btn-delete_file',
|
||||
type: ActionTypes.circleBtn,
|
||||
@ -155,16 +166,6 @@ export class FileActionsComponent implements OnChanges {
|
||||
show: this.showImportRedactions && !this._iqserPermissionsService.has(Roles.getRss),
|
||||
helpModeKey: 'import_redactions',
|
||||
},
|
||||
{
|
||||
id: 'btn-download_file',
|
||||
type: ActionTypes.downloadBtn,
|
||||
files: [this.file],
|
||||
dossier: this.dossier,
|
||||
tooltipClass: 'small',
|
||||
show: this.showDownload,
|
||||
disabled: this.file.processingStatus === ProcessingFileStatuses.ERROR,
|
||||
helpModeKey: 'download',
|
||||
},
|
||||
{
|
||||
id: 'btn-toggle_document_info',
|
||||
type: ActionTypes.circleBtn,
|
||||
|
||||
@ -1,10 +1,31 @@
|
||||
<iqser-circle-button
|
||||
(action)="downloadFiles()"
|
||||
[buttonId]="buttonId"
|
||||
[disabled]="disabled || !canDownloadFiles || invalidDownload"
|
||||
[tooltipClass]="tooltipClass"
|
||||
[tooltipPosition]="tooltipPosition"
|
||||
[tooltip]="tooltip | translate : { count: files.length }"
|
||||
[type]="type"
|
||||
icon="iqser:download"
|
||||
></iqser-circle-button>
|
||||
@if (dropdownButton()) {
|
||||
<iqser-circle-button
|
||||
(click)="$event.stopImmediatePropagation()"
|
||||
[matMenuTriggerFor]="downloadMenu"
|
||||
[tooltipClass]="tooltipClass()"
|
||||
[tooltipPosition]="tooltipPosition()"
|
||||
[tooltip]="tooltip | translate: { count: files().length }"
|
||||
[type]="type()"
|
||||
[disabled]="disabled() || !canDownloadFiles || invalidDownload"
|
||||
[buttonId]="buttonId()"
|
||||
icon="iqser:download"
|
||||
dropdownButton
|
||||
></iqser-circle-button>
|
||||
} @else {
|
||||
<iqser-circle-button
|
||||
(action)="downloadFiles()"
|
||||
[buttonId]="buttonId()"
|
||||
[disabled]="disabled() || !canDownloadFiles || invalidDownload"
|
||||
[tooltipClass]="tooltipClass()"
|
||||
[tooltipPosition]="tooltipPosition()"
|
||||
[tooltip]="tooltip | translate: { count: files().length }"
|
||||
[type]="type()"
|
||||
icon="iqser:download"
|
||||
></iqser-circle-button>
|
||||
}
|
||||
|
||||
<mat-menu #downloadMenu="matMenu">
|
||||
<button (click)="downloadComponentAsJSON($event)" [innerHTML]="'component-download.json' | translate" mat-menu-item></button>
|
||||
<button (click)="downloadComponentAsXML($event)" [innerHTML]="'component-download.xml' | translate" mat-menu-item></button>
|
||||
<button (click)="downloadFiles($event)" [innerHTML]="'component-download.report' | translate" mat-menu-item></button>
|
||||
</mat-menu>
|
||||
|
||||
@ -1,48 +1,67 @@
|
||||
import { Component, inject, Input, OnChanges } from '@angular/core';
|
||||
import { booleanAttribute, Component, computed, inject, input, Input, OnChanges, ViewChild } from '@angular/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { CircleButtonComponent, CircleButtonType, CircleButtonTypes, IqserDialog, Toaster } from '@iqser/common-ui';
|
||||
import { Dossier, File, ProcessingFileStatuses } from '@red/domain';
|
||||
import { CircleButtonComponent, CircleButtonType, CircleButtonTypes, getConfig, IqserDialog, Toaster } from '@iqser/common-ui';
|
||||
import { Dossier, File, IFile, ProcessingFileStatuses } from '@red/domain';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { DownloadDialogComponent } from '@shared/dialogs/download-dialog/download-dialog.component';
|
||||
import { FileDownloadService } from '@upload-download/services/file-download.service';
|
||||
import { APP_BASE_HREF } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { ComponentLogService } from '@services/files/component-log.service';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-file-download-btn',
|
||||
templateUrl: './file-download-btn.component.html',
|
||||
standalone: true,
|
||||
imports: [CircleButtonComponent, TranslateModule],
|
||||
imports: [CircleButtonComponent, TranslateModule, MatMenu, MatMenuItem, MatMenuTrigger],
|
||||
})
|
||||
export class FileDownloadBtnComponent implements OnChanges {
|
||||
@Input({ required: true }) files: File[];
|
||||
@Input({ required: true }) dossier: Dossier;
|
||||
@Input({ required: true }) buttonId: string;
|
||||
@Input() tooltipPosition: 'above' | 'below' | 'before' | 'after' = 'above';
|
||||
@Input() type: CircleButtonType = CircleButtonTypes.default;
|
||||
@Input() tooltipClass: string;
|
||||
@Input() disabled = false;
|
||||
readonly files = input.required<File[]>();
|
||||
readonly dossier = input.required<Dossier>();
|
||||
readonly buttonId = input.required<string>();
|
||||
readonly tooltipPosition = input<'above' | 'below' | 'before' | 'after'>('above');
|
||||
readonly type = input<CircleButtonType>(CircleButtonTypes.default);
|
||||
readonly tooltipClass = input<string>();
|
||||
readonly disabled = input<boolean>(false);
|
||||
readonly singleFileDownload = input<boolean>(false);
|
||||
readonly dossierDownload = input(false, { transform: booleanAttribute });
|
||||
readonly dropdownButton = computed(() => this.isDocumine && (this.dossierDownload() || this.singleFileDownload()));
|
||||
tooltip: string;
|
||||
canDownloadFiles: boolean;
|
||||
invalidDownload = false;
|
||||
readonly #appBaseHref = inject(APP_BASE_HREF);
|
||||
protected readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||
@ViewChild(MatMenuTrigger) menuTrigger: MatMenuTrigger;
|
||||
|
||||
constructor(
|
||||
private readonly _permissionsService: PermissionsService,
|
||||
private readonly _fileDownloadService: FileDownloadService,
|
||||
private readonly _componentLogService: ComponentLogService,
|
||||
private readonly _dialog: IqserDialog,
|
||||
private readonly _toaster: Toaster,
|
||||
) {}
|
||||
|
||||
ngOnChanges(): void {
|
||||
this.invalidDownload = this.files.some(file => file.processingStatus === ProcessingFileStatuses.ERROR);
|
||||
this.canDownloadFiles = this._permissionsService.canDownloadFiles(this.files, this.dossier);
|
||||
this.tooltip = this.canDownloadFiles ? _('dossier-overview.download-file') : _('dossier-overview.download-file-disabled');
|
||||
this.invalidDownload = this.files().some(file => file.processingStatus === ProcessingFileStatuses.ERROR);
|
||||
this.canDownloadFiles = this._permissionsService.canDownloadFiles(this.files(), this.dossier());
|
||||
if (this.canDownloadFiles) {
|
||||
if (this.isDocumine && !this.dropdownButton()) {
|
||||
this.tooltip = _('dossier-overview.report-download');
|
||||
} else {
|
||||
this.tooltip = _('dossier-overview.download-file');
|
||||
}
|
||||
} else {
|
||||
this.tooltip = _('dossier-overview.download-file-disabled');
|
||||
}
|
||||
}
|
||||
|
||||
async downloadFiles() {
|
||||
async downloadFiles($event?: MouseEvent) {
|
||||
$event?.stopImmediatePropagation();
|
||||
this.menuTrigger?.closeMenu();
|
||||
const ref = this._dialog.openDefault(DownloadDialogComponent, {
|
||||
data: { dossier: this.dossier, files: this.files },
|
||||
data: { dossier: this.dossier(), files: this.files() },
|
||||
});
|
||||
const result = await ref.result();
|
||||
if (!result) {
|
||||
@ -50,8 +69,8 @@ export class FileDownloadBtnComponent implements OnChanges {
|
||||
}
|
||||
|
||||
const downloadRequest = this._fileDownloadService.downloadFiles({
|
||||
dossierId: this.dossier.id,
|
||||
fileIds: this.files.map(f => f.id),
|
||||
dossierId: this.dossier().id,
|
||||
fileIds: this.files().map(f => f.id),
|
||||
...result,
|
||||
});
|
||||
|
||||
@ -63,4 +82,18 @@ export class FileDownloadBtnComponent implements OnChanges {
|
||||
)
|
||||
.catch(() => this._toaster.error(_('download-status.error')));
|
||||
}
|
||||
|
||||
downloadComponentAsJSON($event: MouseEvent) {
|
||||
$event.stopImmediatePropagation();
|
||||
this.menuTrigger?.closeMenu();
|
||||
const fileToDownload = !this.dossierDownload() ? this.files()[0] : null;
|
||||
return firstValueFrom(this._componentLogService.exportJSON(this.dossier().dossierTemplateId, this.dossier().id, fileToDownload));
|
||||
}
|
||||
|
||||
async downloadComponentAsXML($event: MouseEvent) {
|
||||
$event.stopImmediatePropagation();
|
||||
this.menuTrigger?.closeMenu();
|
||||
const fileToDownload = !this.dossierDownload() ? this.files()[0] : null;
|
||||
return firstValueFrom(this._componentLogService.exportXML(this.dossier().dossierTemplateId, this.dossier().id, fileToDownload));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,14 +1,3 @@
|
||||
@if (isDocumine) {
|
||||
<iqser-circle-button
|
||||
[attr.help-mode-key]="'component_download'"
|
||||
[icon]="'red:extract'"
|
||||
[matMenuTriggerFor]="bulkComponentDownloadMenu"
|
||||
[tooltip]="'documine-export.export-tooltip' | translate"
|
||||
[tooltipPosition]="tooltipPosition"
|
||||
dropdownButton
|
||||
></iqser-circle-button>
|
||||
}
|
||||
|
||||
<ng-container *ngFor="let btn of displayedButtons; trackBy: trackBy">
|
||||
<iqser-circle-button
|
||||
(action)="btn.action($event)"
|
||||
@ -36,6 +25,7 @@
|
||||
[tooltipPosition]="tooltipPosition"
|
||||
[type]="buttonType"
|
||||
[attr.help-mode-key]="helpModeKey(btn)"
|
||||
[singleFileDownload]="singleEntityAction"
|
||||
></redaction-file-download-btn>
|
||||
|
||||
<!-- exclude from redaction -->
|
||||
@ -84,8 +74,3 @@
|
||||
</ng-container>
|
||||
</button>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #bulkComponentDownloadMenu="matMenu">
|
||||
<button (click)="downloadComponentAsJSON()" [innerHTML]="'component-download.json' | translate" mat-menu-item></button>
|
||||
<button (click)="downloadComponentAsXML()" [innerHTML]="'component-download.xml' | translate" mat-menu-item></button>
|
||||
</mat-menu>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Component, inject, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';
|
||||
import { booleanAttribute, Component, inject, input, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';
|
||||
import { Action, ActionTypes, Dossier, File } from '@red/domain';
|
||||
import { CircleButtonComponent, CircleButtonType, getConfig, IqserDialog, StopPropagationDirective, Toaster } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, CircleButtonType, IqserDialog, StopPropagationDirective, Toaster } from '@iqser/common-ui';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { FileDownloadService } from '@upload-download/services/file-download.service';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
@ -13,8 +13,6 @@ import { FileDownloadBtnComponent } from '@shared/components/buttons/file-downlo
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { ComponentLogService } from '@services/files/component-log.service';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-expandable-file-actions',
|
||||
@ -46,13 +44,12 @@ export class ExpandableFileActionsComponent implements OnChanges {
|
||||
@Input() tooltipPosition: IqserTooltipPosition;
|
||||
@Input() helpModeKeyPrefix: 'dossier' | 'editor';
|
||||
@Input() isDossierOverviewWorkflow = false;
|
||||
@Input() file: File;
|
||||
@Input() singleEntityAction = false;
|
||||
displayedButtons: Action[];
|
||||
hiddenButtons: Action[];
|
||||
expanded = false;
|
||||
@ViewChild(MatMenuTrigger) readonly matMenu: MatMenuTrigger;
|
||||
readonly trackBy = trackByFactory();
|
||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||
readonly #appBaseHref = inject(APP_BASE_HREF);
|
||||
|
||||
constructor(
|
||||
@ -60,7 +57,6 @@ export class ExpandableFileActionsComponent implements OnChanges {
|
||||
private readonly _toaster: Toaster,
|
||||
private readonly _permissionsService: PermissionsService,
|
||||
private readonly _dialog: IqserDialog,
|
||||
private readonly _componentLogService: ComponentLogService,
|
||||
) {}
|
||||
|
||||
ngOnChanges(changes: SimpleChanges) {
|
||||
@ -129,12 +125,4 @@ export class ExpandableFileActionsComponent implements OnChanges {
|
||||
params: { downloadHref: `${this.#appBaseHref}/main/downloads` },
|
||||
});
|
||||
}
|
||||
|
||||
downloadComponentAsJSON() {
|
||||
return firstValueFrom(this._componentLogService.exportJSON(this.file.dossierTemplateId, this.file.dossierId, this.file));
|
||||
}
|
||||
|
||||
async downloadComponentAsXML() {
|
||||
return firstValueFrom(this._componentLogService.exportXML(this.file.dossierTemplateId, this.file.dossierId, this.file));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,12 +1,11 @@
|
||||
import { inject, Injectable } from '@angular/core';
|
||||
import { ARCHIVE_ROUTE, Dossier, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE } from '@red/domain';
|
||||
import { ARCHIVE_ROUTE, Dossier, DOSSIERS_ROUTE } from '@red/domain';
|
||||
import { catchError, switchMap, tap } from 'rxjs/operators';
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { ActiveDossiersService } from './active-dossiers.service';
|
||||
import { DossiersService } from './dossiers.service';
|
||||
import { FilesMapService } from '../files/files-map.service';
|
||||
import { FeaturesService } from '../features.service';
|
||||
import { Router } from '@angular/router';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
@ -15,7 +14,6 @@ export class ArchivedDossiersService extends DossiersService {
|
||||
protected readonly _defaultModelPath = 'archived-dossiers';
|
||||
readonly #activeDossiersService = inject(ActiveDossiersService);
|
||||
readonly #filesMapService = inject(FilesMapService);
|
||||
readonly #featuresService = inject(FeaturesService);
|
||||
readonly #router = inject(Router);
|
||||
|
||||
archive(dossiers: Dossier[]): Observable<unknown> {
|
||||
@ -46,7 +44,7 @@ export class ArchivedDossiersService extends DossiersService {
|
||||
}
|
||||
|
||||
loadAll(): Observable<Dossier[]> {
|
||||
return this.#featuresService.isEnabled(DOSSIERS_ARCHIVE) ? super.loadAll() : of([]);
|
||||
return super.loadAll();
|
||||
}
|
||||
|
||||
#removeFromActiveDossiers(archivedDossiersIds: string[]): void {
|
||||
|
||||
@ -4,7 +4,6 @@ import {
|
||||
DashboardStats,
|
||||
Dictionary,
|
||||
Dossier,
|
||||
DOSSIERS_ARCHIVE,
|
||||
DossierTemplate,
|
||||
File,
|
||||
IComment,
|
||||
@ -13,7 +12,6 @@ import {
|
||||
WorkflowFileStatus,
|
||||
WorkflowFileStatuses,
|
||||
} from '@red/domain';
|
||||
import { FeaturesService } from '@services/features.service';
|
||||
import { FilesMapService } from '@services/files/files-map.service';
|
||||
import { Roles } from '@users/roles';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
@ -27,7 +25,6 @@ export class PermissionsService {
|
||||
constructor(
|
||||
private readonly _userService: UserService,
|
||||
private readonly _filesMapService: FilesMapService,
|
||||
private readonly _featuresService: FeaturesService,
|
||||
private readonly _userPreferenceService: UserPreferenceService,
|
||||
private readonly _iqserPermissionsService: IqserPermissionsService,
|
||||
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||
@ -290,12 +287,7 @@ export class PermissionsService {
|
||||
}
|
||||
|
||||
canArchiveDossier(dossier: Dossier): boolean {
|
||||
return (
|
||||
this._iqserPermissionsService.has(Roles.dossiers.archived) &&
|
||||
this._featuresService.isEnabled(DOSSIERS_ARCHIVE) &&
|
||||
dossier.isActive &&
|
||||
this.isOwner(dossier)
|
||||
);
|
||||
return this._iqserPermissionsService.has(Roles.dossiers.archived) && dossier.isActive && this.isOwner(dossier);
|
||||
}
|
||||
|
||||
canEditDossier(dossier: Dossier): boolean {
|
||||
|
||||
@ -10,7 +10,6 @@ export const PreferencesKeys = {
|
||||
filesListingMode: 'Files-Listing-Mode',
|
||||
autoExpandFiltersOnActions: 'Auto-Expand-Filters-On-Actions',
|
||||
loadAllAnnotationsWarning: 'Load-All-Annotations-Warning',
|
||||
openScmDialogByDefault: 'Open-Structured-Component-Management-By-Default',
|
||||
tableExtractionType: 'Table-Extraction-Type',
|
||||
addRedactionDefaultOption: 'Add-Redaction-Default',
|
||||
addHintDefaultOption: 'Add-Hint-Default',
|
||||
@ -65,15 +64,6 @@ export class UserPreferenceService extends IqserUserPreferenceService {
|
||||
await this.save(PreferencesKeys.autoExpandFiltersOnActions, nextValue);
|
||||
}
|
||||
|
||||
getOpenScmDialogByDefault(): boolean {
|
||||
return this._getAttribute(PreferencesKeys.openScmDialogByDefault, 'false') === 'true';
|
||||
}
|
||||
|
||||
async toggleOpenScmDialogByDefault(): Promise<void> {
|
||||
const nextValue = (!this.getOpenScmDialogByDefault()).toString();
|
||||
await this.save(PreferencesKeys.openScmDialogByDefault, nextValue);
|
||||
}
|
||||
|
||||
getBool(key: string, defaultValue = 'false') {
|
||||
return this._getAttribute(key, defaultValue) === 'true';
|
||||
}
|
||||
|
||||
@ -1,8 +1,3 @@
|
||||
{
|
||||
"features": [
|
||||
{
|
||||
"name": "DOSSIERS_ARCHIVE",
|
||||
"minVersion": "3.3.0"
|
||||
}
|
||||
]
|
||||
"features": []
|
||||
}
|
||||
|
||||
@ -651,6 +651,11 @@
|
||||
"documentKey": "workload_filter",
|
||||
"overlappingElements": ["USER_MENU", "DOCUMENT_INFO"]
|
||||
},
|
||||
{
|
||||
"elementKey": "filter_annotations",
|
||||
"documentKey": "filter_annotations",
|
||||
"overlappingElements": ["USER_MENU", "DOCUMENT_INFO"]
|
||||
},
|
||||
{
|
||||
"elementKey": "workload_bulk_selection",
|
||||
"documentKey": "workload_bulk_selection",
|
||||
@ -692,5 +697,86 @@
|
||||
{
|
||||
"elementKey": "document_list_view",
|
||||
"documentKey": "document_list"
|
||||
},
|
||||
{
|
||||
"elementKey": "editor_edit_component",
|
||||
"documentKey": "editor_edit_component",
|
||||
"scrollableParentView": "COMPONENTS_VIEW"
|
||||
},
|
||||
{
|
||||
"elementKey": "edit_component",
|
||||
"documentKey": "edit_component"
|
||||
},
|
||||
{
|
||||
"elementKey": "add_component_value",
|
||||
"documentKey": "add_component_value"
|
||||
},
|
||||
{
|
||||
"elementKey": "undo_component_change",
|
||||
"documentKey": "undo_component_change"
|
||||
},
|
||||
{
|
||||
"elementKey": "change_component_order",
|
||||
"documentKey": "change_component_order"
|
||||
},
|
||||
{
|
||||
"elementKey": "remove_component_value",
|
||||
"documentKey": "remove_component_value"
|
||||
},
|
||||
{
|
||||
"elementKey": "filter_components",
|
||||
"documentKey": "filter_components"
|
||||
},
|
||||
{
|
||||
"elementKey": "annotations_list",
|
||||
"documentKey": "annotations_list"
|
||||
},
|
||||
{
|
||||
"elementKey": "components_table",
|
||||
"documentKey": "components_table"
|
||||
},
|
||||
{
|
||||
"elementKey": "components_table",
|
||||
"documentKey": "components_table"
|
||||
},
|
||||
{
|
||||
"elementKey": "remove_annotation_DIALOG",
|
||||
"documentKey": "remove_annotation"
|
||||
},
|
||||
{
|
||||
"elementKey": "edit_annotation_DIALOG",
|
||||
"documentKey": "edit_annotation"
|
||||
},
|
||||
{
|
||||
"elementKey": "dossier_download_dossier",
|
||||
"documentKey": "dossier_download_dossier",
|
||||
"overlappingElements": ["USER_MENU"]
|
||||
},
|
||||
{
|
||||
"elementKey": "dossier_download_document",
|
||||
"documentKey": "dossier_download_document",
|
||||
"scrollableParentView": "VIRTUAL_SCROLL"
|
||||
},
|
||||
{
|
||||
"elementKey": "template_download_dossier",
|
||||
"documentKey": "template_download_dossier",
|
||||
"scrollableParentView": "VIRTUAL_SCROLL"
|
||||
},
|
||||
{
|
||||
"elementKey": "editor_download_document",
|
||||
"documentKey": "editor_download_document",
|
||||
"overlappingElements": ["USER_MENU"]
|
||||
},
|
||||
{
|
||||
"elementKey": "rule_editors",
|
||||
"documentKey": "rule_editors"
|
||||
},
|
||||
{
|
||||
"elementKey": "component_mappings",
|
||||
"documentKey": "component_mappings"
|
||||
},
|
||||
{
|
||||
"elementKey": "components_management",
|
||||
"documentKey": "components_management"
|
||||
}
|
||||
]
|
||||
|
||||
@ -100,6 +100,7 @@
|
||||
"dialog": {
|
||||
"title": "{type, select, add{Neues Komponenten-Mapping erstellen} edit{Komponenten-Mapping bearbeiten} other{}}"
|
||||
},
|
||||
"disabled-file-options": "",
|
||||
"form": {
|
||||
"delimiter": "",
|
||||
"delimiter-placeholder": "",
|
||||
@ -272,9 +273,6 @@
|
||||
"watermarks": "Wasserzeichen"
|
||||
},
|
||||
"analysis-disabled": "",
|
||||
"annotation": {
|
||||
"pending": "(Analyse steht aus)"
|
||||
},
|
||||
"annotation-actions": {
|
||||
"accept-recommendation": {
|
||||
"label": "Empfehlung annehmen"
|
||||
@ -330,14 +328,14 @@
|
||||
"error": "Rekategorisierung des Bilds fehlgeschlagen: {error}",
|
||||
"success": "Bild wurde einer neuen Kategorie zugeordnet."
|
||||
},
|
||||
"remove": {
|
||||
"error": "Entfernen der Schwärzung fehlgeschlagen: {error}",
|
||||
"success": "Schwärzung wurde entfernt"
|
||||
},
|
||||
"remove-hint": {
|
||||
"error": "Entfernen des Hinweises fehlgeschlagen: {error}",
|
||||
"success": "Hinweis wurde entfernt"
|
||||
},
|
||||
"remove": {
|
||||
"error": "Entfernen der Schwärzung fehlgeschlagen: {error}",
|
||||
"success": "Schwärzung wurde entfernt"
|
||||
},
|
||||
"undo": {
|
||||
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
|
||||
"success": "Rücksetzung erfolgreich"
|
||||
@ -350,15 +348,15 @@
|
||||
"remove-highlights": {
|
||||
"label": "Ausgewählte Markierungen entfernen"
|
||||
},
|
||||
"resize": {
|
||||
"label": "Größe ändern"
|
||||
},
|
||||
"resize-accept": {
|
||||
"label": "Neue Größe speichern"
|
||||
},
|
||||
"resize-cancel": {
|
||||
"label": "Größenänderung abbrechen"
|
||||
},
|
||||
"resize": {
|
||||
"label": "Größe ändern"
|
||||
},
|
||||
"see-references": {
|
||||
"label": "Referenzen anzeigen"
|
||||
},
|
||||
@ -392,6 +390,9 @@
|
||||
"skipped": "Ignorierte Schwärzung",
|
||||
"text-highlight": "Markierung"
|
||||
},
|
||||
"annotation": {
|
||||
"pending": "(Analyse steht aus)"
|
||||
},
|
||||
"annotations": "Annotationen",
|
||||
"archived-dossiers-listing": {
|
||||
"no-data": {
|
||||
@ -535,9 +536,8 @@
|
||||
"title": "{length} {length, plural, one{Komponente} other{Komponenten}}"
|
||||
},
|
||||
"component-download": {
|
||||
"disabled-tooltip": "",
|
||||
"json": "",
|
||||
"tooltip": "",
|
||||
"report": "",
|
||||
"xml": ""
|
||||
},
|
||||
"component-management": {
|
||||
@ -587,8 +587,7 @@
|
||||
"success": {
|
||||
"generic": ""
|
||||
},
|
||||
"title": "",
|
||||
"warning-text": ""
|
||||
"title": ""
|
||||
},
|
||||
"configurations": "Konfiguration",
|
||||
"confirm-archive-dossier": {
|
||||
@ -637,18 +636,14 @@
|
||||
"warning": "Warnung: Wiederherstellung des Benutzers nicht möglich."
|
||||
},
|
||||
"confirmation-dialog": {
|
||||
"approve-file": {
|
||||
"question": "Dieses Dokument enthält ungesehene Änderungen, die sich durch die Reanalyse ergeben haben.<br><br>Möchten Sie es trotzdem freigeben?",
|
||||
"title": "Warnung!"
|
||||
},
|
||||
"approve-file-without-analysis": {
|
||||
"confirmationText": "Ohne Analyse freigeben",
|
||||
"denyText": "Abbrechen",
|
||||
"question": "Analyse zur Erkennung neuer Schwärzungen erforderlich.",
|
||||
"title": "Warnung!"
|
||||
},
|
||||
"approve-multiple-files": {
|
||||
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen, die im Zuge einer Reanalyse hinzugefügt wurden.<br><br>Möchen Sie die Dateien wirklich freigeben?",
|
||||
"approve-file": {
|
||||
"question": "Dieses Dokument enthält ungesehene Änderungen, die sich durch die Reanalyse ergeben haben.<br><br>Möchten Sie es trotzdem freigeben?",
|
||||
"title": "Warnung!"
|
||||
},
|
||||
"approve-multiple-files-without-analysis": {
|
||||
@ -657,6 +652,10 @@
|
||||
"question": "Für mindestens eine Datei ist ein Analyselauf zur Erkennung neuer Schwärzungen erforderlich.",
|
||||
"title": "Warnung"
|
||||
},
|
||||
"approve-multiple-files": {
|
||||
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen, die im Zuge einer Reanalyse hinzugefügt wurden.<br><br>Möchen Sie die Dateien wirklich freigeben?",
|
||||
"title": "Warnung!"
|
||||
},
|
||||
"assign-file-to-me": {
|
||||
"question": {
|
||||
"multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft.<br><br>Möchten Sie sich die Datei dennoch zuweisen?",
|
||||
@ -1026,13 +1025,14 @@
|
||||
"recent": "Neu ({hours} h)",
|
||||
"unassigned": "Keinem Bearbeiter zugewiesen"
|
||||
},
|
||||
"reanalyse": {
|
||||
"action": "Datei analysieren"
|
||||
},
|
||||
"reanalyse-dossier": {
|
||||
"error": "Einplanung der Dateien für die Reanalyse fehlgeschlagen. Bitte versuchen Sie es noch einmal.",
|
||||
"success": "Dateien für Reanalyse vorgesehen."
|
||||
},
|
||||
"reanalyse": {
|
||||
"action": "Datei analysieren"
|
||||
},
|
||||
"report-download": "",
|
||||
"start-auto-analysis": "Auto-Analyse aktivieren",
|
||||
"stop-auto-analysis": "Auto-Analyse anhalten",
|
||||
"table-col-names": {
|
||||
@ -1102,14 +1102,6 @@
|
||||
"total-documents": "Dokumente",
|
||||
"total-people": "<strong>{count}</strong> {count, plural, one{Benutzer} other {Benutzer}}"
|
||||
},
|
||||
"dossier-templates": {
|
||||
"label": "Dossier-Vorlagen",
|
||||
"status": {
|
||||
"active": "Aktiv",
|
||||
"inactive": "Inaktiv",
|
||||
"incomplete": "Unvollständig"
|
||||
}
|
||||
},
|
||||
"dossier-templates-listing": {
|
||||
"action": {
|
||||
"clone": "Vorlage klonen",
|
||||
@ -1144,6 +1136,14 @@
|
||||
"title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}"
|
||||
}
|
||||
},
|
||||
"dossier-templates": {
|
||||
"label": "Dossier-Vorlagen",
|
||||
"status": {
|
||||
"active": "Aktiv",
|
||||
"inactive": "Inaktiv",
|
||||
"incomplete": "Unvollständig"
|
||||
}
|
||||
},
|
||||
"dossier-watermark-selector": {
|
||||
"heading": "Wasserzeichen auf Dokumenten",
|
||||
"no-watermark": "Kein Wasserzeichen in der Dossier-Vorlage verfügbar:<br>Bitten Sie Ihren Admin, eines zu konfigurieren.",
|
||||
@ -1339,15 +1339,6 @@
|
||||
"title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}"
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"info": {
|
||||
"actions": {
|
||||
"revert": "Zurücksetzen",
|
||||
"save": "Änderungen speichern"
|
||||
},
|
||||
"heading": "Entität bearbeiten"
|
||||
}
|
||||
},
|
||||
"entity-rules-screen": {
|
||||
"error": {
|
||||
"generic": "Fehler: Aktualisierung der Entitätsregeln fehlgeschlagen."
|
||||
@ -1359,22 +1350,30 @@
|
||||
"generic": "Die Entitätsregeln wurden aktualisiert."
|
||||
},
|
||||
"title": "Entitätsregeln-Editor",
|
||||
"warning-text": "Warnung: experimentelle Funktion!",
|
||||
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} in Regeln gefunden"
|
||||
},
|
||||
"entity": {
|
||||
"info": {
|
||||
"actions": {
|
||||
"revert": "Zurücksetzen",
|
||||
"save": "Änderungen speichern"
|
||||
},
|
||||
"heading": "Entität bearbeiten"
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"deleted-entity": {
|
||||
"dossier": {
|
||||
"action": "Zurück zur Übersicht",
|
||||
"label": "Dieses Dossier wurde gelöscht!"
|
||||
},
|
||||
"file": {
|
||||
"action": "Zurück zum Dossier",
|
||||
"label": "Diese Datei wurde gelöscht!"
|
||||
},
|
||||
"file-dossier": {
|
||||
"action": "Zurück zur Übersicht",
|
||||
"label": "Das Dossier dieser Datei wurde gelöscht!"
|
||||
},
|
||||
"file": {
|
||||
"action": "Zurück zum Dossier",
|
||||
"label": "Diese Datei wurde gelöscht!"
|
||||
}
|
||||
},
|
||||
"file-preview": {
|
||||
@ -1392,12 +1391,6 @@
|
||||
},
|
||||
"exact-date": "{day}. {month} {year} um {hour}:{minute} Uhr",
|
||||
"file": "Datei",
|
||||
"file-attribute": {
|
||||
"update": {
|
||||
"error": "Aktualisierung des Werts für das Datei-Attribut fehlgeschlagen. Bitte versuchen Sie es noch einmal.",
|
||||
"success": "Der Wert für das Dateiattribut wurde erfolgreich aktualisiert."
|
||||
}
|
||||
},
|
||||
"file-attribute-encoding-types": {
|
||||
"ascii": "ASCII",
|
||||
"iso": "ISO-8859-1",
|
||||
@ -1408,6 +1401,12 @@
|
||||
"number": "Nummer",
|
||||
"text": "Freier Text"
|
||||
},
|
||||
"file-attribute": {
|
||||
"update": {
|
||||
"error": "Aktualisierung des Werts für das Datei-Attribut fehlgeschlagen. Bitte versuchen Sie es noch einmal.",
|
||||
"success": "Der Wert für das Dateiattribut wurde erfolgreich aktualisiert."
|
||||
}
|
||||
},
|
||||
"file-attributes-configurations": {
|
||||
"cancel": "Abbrechen",
|
||||
"form": {
|
||||
@ -1625,15 +1624,6 @@
|
||||
"csv": "Die Datei-Attribute wurden erfolgreich aus der hochgeladenen CSV-Datei importiert."
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"analysis": "Analyse erforderlich",
|
||||
"comment": "Kommentare",
|
||||
"hint": "Nur Hinweise",
|
||||
"image": "Bilder",
|
||||
"none": "Keine Annotationen",
|
||||
"redaction": "Schwärzungen",
|
||||
"updated": "Aktualisiert"
|
||||
},
|
||||
"filter-menu": {
|
||||
"filter-options": "Filteroptionen",
|
||||
"filter-types": "Filter",
|
||||
@ -1643,6 +1633,15 @@
|
||||
"unseen-pages": "Nur Annotationen auf ungesehenen Seiten",
|
||||
"with-comments": "Nur Annotationen mit Kommentaren"
|
||||
},
|
||||
"filter": {
|
||||
"analysis": "Analyse erforderlich",
|
||||
"comment": "Kommentare",
|
||||
"hint": "Nur Hinweise",
|
||||
"image": "Bilder",
|
||||
"none": "Keine Annotationen",
|
||||
"redaction": "Schwärzungen",
|
||||
"updated": "Aktualisiert"
|
||||
},
|
||||
"filters": {
|
||||
"assigned-people": "Bearbeiter",
|
||||
"documents-status": "Dokumentenstatus",
|
||||
@ -1921,13 +1920,6 @@
|
||||
"user-promoted-to-approver": "<b>{user}</b> wurde im Dossier <b>{dossierHref, select, null{{dossierName}} other{<a href=\"{dossierHref}\" target=\"_blank\">{dossierName}</a>}}</b> zum Genehmiger ernannt!",
|
||||
"user-removed-as-dossier-member": "<b>{user}</b> wurde als Mitglied von: <b>{dossierHref, select, null{{dossierName}} other{<a href=\"{dossierHref}\" target=\"_blank\">{dossierName}</a>}}</b> entfernt!"
|
||||
},
|
||||
"notifications": {
|
||||
"button-text": "Benachrichtigungen",
|
||||
"deleted-dossier": "Gelöschtes Dossier",
|
||||
"label": "Benachrichtigungen",
|
||||
"mark-all-as-read": "Alle als gelesen markieren",
|
||||
"mark-as": "Als {type, select, read{gelesen} unread{ungelesen} other{}} markieren"
|
||||
},
|
||||
"notifications-screen": {
|
||||
"category": {
|
||||
"email-notifications": "E-Mail-Benachrichtigungen",
|
||||
@ -1941,6 +1933,7 @@
|
||||
"dossier": "Benachrichtigungen zu Dossiers",
|
||||
"other": "Andere Benachrichtigungen"
|
||||
},
|
||||
"options-title": "Wählen Sie aus, bei welchen Aktivitäten Sie benachrichtigt werden möchten",
|
||||
"options": {
|
||||
"ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen werde",
|
||||
"ASSIGN_REVIEWER": "Wenn ich einem Dokument als Prüfer zugewiesen werde",
|
||||
@ -1958,7 +1951,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, bei welchen Aktivitäten Sie benachrichtigt werden möchten",
|
||||
"schedule": {
|
||||
"daily": "Tägliche Zusammenfassung",
|
||||
"instant": "Sofort",
|
||||
@ -1966,6 +1958,13 @@
|
||||
},
|
||||
"title": "Benachrichtigungseinstellungen"
|
||||
},
|
||||
"notifications": {
|
||||
"button-text": "Benachrichtigungen",
|
||||
"deleted-dossier": "Gelöschtes Dossier",
|
||||
"label": "Benachrichtigungen",
|
||||
"mark-all-as-read": "Alle als gelesen markieren",
|
||||
"mark-as": "Als {type, select, read{gelesen} unread{ungelesen} other{}} markieren"
|
||||
},
|
||||
"ocr": {
|
||||
"confirmation-dialog": {
|
||||
"cancel": "Abbrechen",
|
||||
@ -2048,7 +2047,6 @@
|
||||
"auto-expand-filters-on-action": "Filter ausgehend von meinen Aktionen automatisch anpassen",
|
||||
"help-mode-dialog": "Dialog zur Aktivierung des Hilfemodus",
|
||||
"load-all-annotations-warning": "Warnung bei gleichzeitigem Laden aller Annotationen in der Miniaturansicht",
|
||||
"open-structured-view-by-default": "Strukturierte Komponentenansicht standardmäßig anzeigen",
|
||||
"table-extraction-type": "Art der Tabellenextraktion"
|
||||
},
|
||||
"label": "Präferenzen",
|
||||
@ -2057,16 +2055,16 @@
|
||||
"warnings-label": "Dialoge und Meldungen",
|
||||
"warnings-subtitle": "„Nicht mehr anzeigen“-Optionen"
|
||||
},
|
||||
"processing": {
|
||||
"basic": "Verarbeitung läuft",
|
||||
"ocr": "OCR"
|
||||
},
|
||||
"processing-status": {
|
||||
"ocr": "OCR",
|
||||
"pending": "Ausstehend",
|
||||
"processed": "Verarbeitet",
|
||||
"processing": "Verarbeitung läuft"
|
||||
},
|
||||
"processing": {
|
||||
"basic": "Verarbeitung läuft",
|
||||
"ocr": "OCR"
|
||||
},
|
||||
"readonly": "Lesemodus",
|
||||
"readonly-archived": "Lesemodus (archiviert)",
|
||||
"redact-text": {
|
||||
@ -2302,12 +2300,6 @@
|
||||
"red-user-admin": "Benutzeradmin",
|
||||
"regular": "regulärer Benutzer"
|
||||
},
|
||||
"search": {
|
||||
"active-dossiers": "Dokumente in aktiven Dossiers",
|
||||
"all-dossiers": "Alle Dokumente",
|
||||
"placeholder": "Dokumente durchsuchen...",
|
||||
"this-dossier": "In diesem Dossier"
|
||||
},
|
||||
"search-screen": {
|
||||
"cols": {
|
||||
"assignee": "Bearbeiter",
|
||||
@ -2331,6 +2323,12 @@
|
||||
"no-match": "Der Suchbegriff wurde in keinem der Dokumente gefunden.",
|
||||
"table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}"
|
||||
},
|
||||
"search": {
|
||||
"active-dossiers": "Dokumente in aktiven Dossiers",
|
||||
"all-dossiers": "Alle Dokumente",
|
||||
"placeholder": "Dokumente durchsuchen...",
|
||||
"this-dossier": "In diesem Dossier"
|
||||
},
|
||||
"seconds": "Sekunden",
|
||||
"size": "Größe",
|
||||
"smtp-auth-config": {
|
||||
@ -2586,4 +2584,4 @@
|
||||
}
|
||||
},
|
||||
"yesterday": "Gestern"
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,6 +100,7 @@
|
||||
"dialog": {
|
||||
"title": "{type, select, add{Add New} edit{Edit} other{}} Component Mapping"
|
||||
},
|
||||
"disabled-file-options": "",
|
||||
"form": {
|
||||
"delimiter": "",
|
||||
"delimiter-placeholder": "",
|
||||
@ -535,9 +536,8 @@
|
||||
"title": "{length} {length, plural, one{component} other{components}}"
|
||||
},
|
||||
"component-download": {
|
||||
"disabled-tooltip": "",
|
||||
"json": "",
|
||||
"tooltip": "",
|
||||
"report": "",
|
||||
"xml": ""
|
||||
},
|
||||
"component-management": {
|
||||
@ -587,8 +587,7 @@
|
||||
"success": {
|
||||
"generic": ""
|
||||
},
|
||||
"title": "",
|
||||
"warning-text": ""
|
||||
"title": ""
|
||||
},
|
||||
"configurations": "Configurations",
|
||||
"confirm-archive-dossier": {
|
||||
@ -1033,6 +1032,7 @@
|
||||
"reanalyse": {
|
||||
"action": "Analyze file"
|
||||
},
|
||||
"report-download": "",
|
||||
"start-auto-analysis": "Enable auto-analysis",
|
||||
"stop-auto-analysis": "Stop auto-analysis",
|
||||
"table-col-names": {
|
||||
@ -1350,7 +1350,6 @@
|
||||
"generic": "Entity rules updated."
|
||||
},
|
||||
"title": "Entity rule editor",
|
||||
"warning-text": "Warning: experimental feature!",
|
||||
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules"
|
||||
},
|
||||
"entity": {
|
||||
@ -2048,7 +2047,6 @@
|
||||
"auto-expand-filters-on-action": "Auto-expand filters on my actions",
|
||||
"help-mode-dialog": "Help mode activation dialog",
|
||||
"load-all-annotations-warning": "Warning regarding simultaneous loading of all annotations in thumbnails",
|
||||
"open-structured-view-by-default": "Display structured component management modal by default",
|
||||
"table-extraction-type": "Table extraction type"
|
||||
},
|
||||
"label": "Preferences",
|
||||
@ -2586,4 +2584,4 @@
|
||||
}
|
||||
},
|
||||
"yesterday": "Yesterday"
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,6 +100,7 @@
|
||||
"dialog": {
|
||||
"title": "{type, select, add{Add new} edit{Edit} other{}} component mapping"
|
||||
},
|
||||
"disabled-file-options": "Re-upload mapping file to change",
|
||||
"form": {
|
||||
"delimiter": "CSV delimiter",
|
||||
"delimiter-placeholder": "CSV delimiter",
|
||||
@ -272,9 +273,6 @@
|
||||
"watermarks": "Watermarks"
|
||||
},
|
||||
"analysis-disabled": "Analysis disabled",
|
||||
"annotation": {
|
||||
"pending": "(Pending analysis)"
|
||||
},
|
||||
"annotation-actions": {
|
||||
"accept-recommendation": {
|
||||
"label": "Empfehlung annehmen"
|
||||
@ -330,14 +328,14 @@
|
||||
"error": "Rekategorisierung des Bildes gescheitert: {error}",
|
||||
"success": "Bild wurde einer neuen Kategorie zugeordnet."
|
||||
},
|
||||
"remove": {
|
||||
"error": "Fehler beim Entfernen der Schwärzung: {error}",
|
||||
"success": "Schwärzung entfernt!"
|
||||
},
|
||||
"remove-hint": {
|
||||
"error": "Failed to remove hint: {error}",
|
||||
"success": "Hint removed!"
|
||||
},
|
||||
"remove": {
|
||||
"error": "Fehler beim Entfernen der Schwärzung: {error}",
|
||||
"success": "Schwärzung entfernt!"
|
||||
},
|
||||
"undo": {
|
||||
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
|
||||
"success": "erfolgreich Rückgängig gemacht"
|
||||
@ -350,15 +348,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"
|
||||
},
|
||||
@ -392,6 +390,9 @@
|
||||
"skipped": "Übersprungen",
|
||||
"text-highlight": "Earmark"
|
||||
},
|
||||
"annotation": {
|
||||
"pending": "(Pending analysis)"
|
||||
},
|
||||
"annotations": "Annotations",
|
||||
"archived-dossiers-listing": {
|
||||
"no-data": {
|
||||
@ -535,10 +536,9 @@
|
||||
"title": "{length} {length, plural, one{component} other{components}}"
|
||||
},
|
||||
"component-download": {
|
||||
"disabled-tooltip": "All files must be processed to be able to export the components as JSON or XML",
|
||||
"json": "Download as JSON",
|
||||
"tooltip": "Component download",
|
||||
"xml": "Download as XML"
|
||||
"json": "Components as JSON",
|
||||
"report": "Report",
|
||||
"xml": "Components as XML"
|
||||
},
|
||||
"component-management": {
|
||||
"actions": {
|
||||
@ -587,8 +587,7 @@
|
||||
"success": {
|
||||
"generic": "Component rules updated!"
|
||||
},
|
||||
"title": "Component rule editor",
|
||||
"warning-text": "Warning: experimental feature!"
|
||||
"title": "Component rule editor"
|
||||
},
|
||||
"configurations": "Einstellungen",
|
||||
"confirm-archive-dossier": {
|
||||
@ -637,18 +636,14 @@
|
||||
"warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!"
|
||||
},
|
||||
"confirmation-dialog": {
|
||||
"approve-file": {
|
||||
"question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?",
|
||||
"title": "Warnung!"
|
||||
},
|
||||
"approve-file-without-analysis": {
|
||||
"confirmationText": "Approve without analysis",
|
||||
"denyText": "Cancel",
|
||||
"question": "Analysis required to detect new components.",
|
||||
"title": "Warning!"
|
||||
},
|
||||
"approve-multiple-files": {
|
||||
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?",
|
||||
"approve-file": {
|
||||
"question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?",
|
||||
"title": "Warnung!"
|
||||
},
|
||||
"approve-multiple-files-without-analysis": {
|
||||
@ -657,6 +652,10 @@
|
||||
"question": "Analysis required to detect new components for at least one file.",
|
||||
"title": "Warning"
|
||||
},
|
||||
"approve-multiple-files": {
|
||||
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?",
|
||||
"title": "Warnung!"
|
||||
},
|
||||
"assign-file-to-me": {
|
||||
"question": {
|
||||
"multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?",
|
||||
@ -853,8 +852,8 @@
|
||||
"documine-export": {
|
||||
"document": "Document",
|
||||
"document-tooltip": "Document",
|
||||
"export": "Export",
|
||||
"export-tooltip": "Export"
|
||||
"export": "Component download",
|
||||
"export-tooltip": "Component download"
|
||||
},
|
||||
"dossier-attribute-types": {
|
||||
"date": "Datum",
|
||||
@ -1026,13 +1025,14 @@
|
||||
"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"
|
||||
},
|
||||
"report-download": "Report download",
|
||||
"start-auto-analysis": "Enable auto-analysis",
|
||||
"stop-auto-analysis": "Stop auto-analysis",
|
||||
"table-col-names": {
|
||||
@ -1102,14 +1102,6 @@
|
||||
"total-documents": "Anzahl der Dokumente",
|
||||
"total-people": "<strong>{count}</strong> {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",
|
||||
@ -1144,6 +1136,14 @@
|
||||
"title": "{length} dossier {length, plural, one{template} other{templates}}"
|
||||
}
|
||||
},
|
||||
"dossier-templates": {
|
||||
"label": "Dossier-Vorlagen",
|
||||
"status": {
|
||||
"active": "Active",
|
||||
"inactive": "Inactive",
|
||||
"incomplete": "Incomplete"
|
||||
}
|
||||
},
|
||||
"dossier-watermark-selector": {
|
||||
"heading": "Watermarks on documents",
|
||||
"no-watermark": "There is no watermark defined for the dossier template.<br>Contact your app admin to define one.",
|
||||
@ -1339,15 +1339,6 @@
|
||||
"title": "{length} {length, plural, one{entity} other{entities}}"
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"info": {
|
||||
"actions": {
|
||||
"revert": "Revert",
|
||||
"save": "Save changes"
|
||||
},
|
||||
"heading": "Edit entity"
|
||||
}
|
||||
},
|
||||
"entity-rules-screen": {
|
||||
"error": {
|
||||
"generic": "Something went wrong... Entity rules update failed!"
|
||||
@ -1359,22 +1350,30 @@
|
||||
"generic": "Entity rules updated!"
|
||||
},
|
||||
"title": "Entity rule editor",
|
||||
"warning-text": "Warning: experimental feature!",
|
||||
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules"
|
||||
},
|
||||
"entity": {
|
||||
"info": {
|
||||
"actions": {
|
||||
"revert": "Revert",
|
||||
"save": "Save changes"
|
||||
},
|
||||
"heading": "Edit entity"
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"deleted-entity": {
|
||||
"dossier": {
|
||||
"action": "Zurück zur Übersicht",
|
||||
"label": "Dieses Dossier wurde gelöscht!"
|
||||
},
|
||||
"file": {
|
||||
"action": "Zurück zum Dossier",
|
||||
"label": "Diese Datei wurde gelöscht!"
|
||||
},
|
||||
"file-dossier": {
|
||||
"action": "Zurück zur Übersicht",
|
||||
"label": "Das Dossier dieser Datei wurde gelöscht!"
|
||||
},
|
||||
"file": {
|
||||
"action": "Zurück zum Dossier",
|
||||
"label": "Diese Datei wurde gelöscht!"
|
||||
}
|
||||
},
|
||||
"file-preview": {
|
||||
@ -1392,12 +1391,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",
|
||||
@ -1408,6 +1401,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": {
|
||||
@ -1550,13 +1549,13 @@
|
||||
"jump-to-next": "Springe zu Nächster",
|
||||
"jump-to-previous": "Springe zu Vorheriger",
|
||||
"label": "Arbeitsvorrat",
|
||||
"no-annotations": "There are no available annotations.",
|
||||
"no-annotations": "There are no annotations on the selected page or for the selected component.",
|
||||
"page-is": "Diese Seite ist",
|
||||
"reset": "reset",
|
||||
"select": "Auswählen",
|
||||
"select-all": "Alle",
|
||||
"select-none": "Keine",
|
||||
"show-skipped": "",
|
||||
"show-skipped": "Show skipped in document",
|
||||
"the-filters": "the filters",
|
||||
"wrong-filters": "The selected filter combination is not possible. Please adjust or"
|
||||
},
|
||||
@ -1625,15 +1624,6 @@
|
||||
"csv": "File attributes were imported successfully from uploaded CSV file."
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"analysis": "Analyse erforderlich",
|
||||
"comment": "Kommentare",
|
||||
"hint": "Nut Hinweise",
|
||||
"image": "Bilder",
|
||||
"none": "Keine Anmerkungen",
|
||||
"redaction": "Geschwärzt",
|
||||
"updated": "Aktualisiert"
|
||||
},
|
||||
"filter-menu": {
|
||||
"filter-options": "Filteroptionen",
|
||||
"filter-types": "Filter",
|
||||
@ -1643,6 +1633,15 @@
|
||||
"unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten",
|
||||
"with-comments": "Nur Anmerkungen mit Kommentaren"
|
||||
},
|
||||
"filter": {
|
||||
"analysis": "Analyse erforderlich",
|
||||
"comment": "Kommentare",
|
||||
"hint": "Nut Hinweise",
|
||||
"image": "Bilder",
|
||||
"none": "Keine Anmerkungen",
|
||||
"redaction": "Geschwärzt",
|
||||
"updated": "Aktualisiert"
|
||||
},
|
||||
"filters": {
|
||||
"assigned-people": "Beauftragt",
|
||||
"documents-status": "Documents state",
|
||||
@ -1921,13 +1920,6 @@
|
||||
"user-promoted-to-approver": "<b>{user}</b> wurde im Dossier <b>{dossierHref, select, null{{dossierName}} other{<a href=\"{dossierHref}\" target=\"_blank\">{dossierName}</a>}}</b> zum Genehmiger ernannt!",
|
||||
"user-removed-as-dossier-member": "<b>{user}</b> wurde als Mitglied von: <b>{dossierHref, select, null{{dossierName}} other{<a href=\"{dossierHref}\" target=\"_blank\">{dossierName}</a>}}</b> 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",
|
||||
@ -1941,6 +1933,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",
|
||||
@ -1958,7 +1951,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",
|
||||
@ -1966,6 +1958,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",
|
||||
@ -2048,7 +2047,6 @@
|
||||
"auto-expand-filters-on-action": "Auto expand filters on my actions",
|
||||
"help-mode-dialog": "Help Mode Dialog",
|
||||
"load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview",
|
||||
"open-structured-view-by-default": "Display Component View by default when opening a document",
|
||||
"table-extraction-type": "Table extraction type"
|
||||
},
|
||||
"label": "Preferences",
|
||||
@ -2057,16 +2055,16 @@
|
||||
"warnings-label": "Prompts and dialogs",
|
||||
"warnings-subtitle": "Do not show again options"
|
||||
},
|
||||
"processing": {
|
||||
"basic": "Processing",
|
||||
"ocr": "OCR"
|
||||
},
|
||||
"processing-status": {
|
||||
"ocr": "OCR",
|
||||
"pending": "Pending",
|
||||
"processed": "Processed",
|
||||
"processing": "Processing"
|
||||
},
|
||||
"processing": {
|
||||
"basic": "Processing",
|
||||
"ocr": "OCR"
|
||||
},
|
||||
"readonly": "Lesemodus",
|
||||
"readonly-archived": "Read only (archived)",
|
||||
"redact-text": {
|
||||
@ -2302,12 +2300,6 @@
|
||||
"red-user-admin": "Benutzer-Admin",
|
||||
"regular": "Regulär"
|
||||
},
|
||||
"search": {
|
||||
"active-dossiers": "ganze Plattform",
|
||||
"all-dossiers": "all documents",
|
||||
"placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen",
|
||||
"this-dossier": "in diesem Dossier"
|
||||
},
|
||||
"search-screen": {
|
||||
"cols": {
|
||||
"assignee": "Bevollmächtigter",
|
||||
@ -2331,6 +2323,12 @@
|
||||
"no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.",
|
||||
"table-header": "{length} search {length, plural, one{result} other{results}}"
|
||||
},
|
||||
"search": {
|
||||
"active-dossiers": "ganze Plattform",
|
||||
"all-dossiers": "all documents",
|
||||
"placeholder": "Nach Dokumenten oder Dokumenteninhalt suchen",
|
||||
"this-dossier": "in diesem Dossier"
|
||||
},
|
||||
"seconds": "seconds",
|
||||
"size": "Size",
|
||||
"smtp-auth-config": {
|
||||
@ -2586,4 +2584,4 @@
|
||||
}
|
||||
},
|
||||
"yesterday": "Gestern"
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,6 +100,7 @@
|
||||
"dialog": {
|
||||
"title": "{type, select, add{Add new} edit{Edit} other{}} component mapping"
|
||||
},
|
||||
"disabled-file-options": "Re-upload mapping file to change",
|
||||
"form": {
|
||||
"delimiter": "CSV delimiter",
|
||||
"delimiter-placeholder": "CSV delimiter",
|
||||
@ -535,10 +536,9 @@
|
||||
"title": "{length} {length, plural, one{component} other{components}}"
|
||||
},
|
||||
"component-download": {
|
||||
"disabled-tooltip": "All files must be processed to be able to export the components as JSON or XML",
|
||||
"json": "Download as JSON",
|
||||
"tooltip": "Component download",
|
||||
"xml": "Download as XML"
|
||||
"json": "Components as JSON",
|
||||
"report": "Report",
|
||||
"xml": "Components as XML"
|
||||
},
|
||||
"component-management": {
|
||||
"actions": {
|
||||
@ -587,8 +587,7 @@
|
||||
"success": {
|
||||
"generic": "Component rules updated!"
|
||||
},
|
||||
"title": "Component rule editor",
|
||||
"warning-text": "Warning: experimental feature!"
|
||||
"title": "Component rule editor"
|
||||
},
|
||||
"configurations": "Configurations",
|
||||
"confirm-archive-dossier": {
|
||||
@ -853,8 +852,8 @@
|
||||
"documine-export": {
|
||||
"document": "Document",
|
||||
"document-tooltip": "Document",
|
||||
"export": "Export",
|
||||
"export-tooltip": "Export"
|
||||
"export": "Component download",
|
||||
"export-tooltip": "Component download"
|
||||
},
|
||||
"dossier-attribute-types": {
|
||||
"date": "Date",
|
||||
@ -986,7 +985,7 @@
|
||||
"processing-documents": "{count} processing {count, plural, one{document} other{documents}}"
|
||||
}
|
||||
},
|
||||
"download-file": "Report download",
|
||||
"download-file": "Download",
|
||||
"download-file-disabled": "You need to be approver in the dossier and the {count, plural, one{file needs} other{files need}} to be initially processed in order to download.",
|
||||
"file-listing": {
|
||||
"file-entry": {
|
||||
@ -1033,6 +1032,7 @@
|
||||
"reanalyse": {
|
||||
"action": "Analyze file"
|
||||
},
|
||||
"report-download": "Report download",
|
||||
"start-auto-analysis": "Enable auto-analysis",
|
||||
"stop-auto-analysis": "Stop auto-analysis",
|
||||
"table-col-names": {
|
||||
@ -1168,7 +1168,7 @@
|
||||
"download-includes": "Choose what is included at download:",
|
||||
"download-status": {
|
||||
"error": "The download preparation failed, please recheck the selected files and download option settings.",
|
||||
"queued": "Your download has been queued, you can see all your requested downloads here: <a href=\"{downloadHref}\">My downloads<a/>."
|
||||
"queued": "Your download has been queued, you can find all your requested downloads here: <a href=\"{downloadHref}\">My downloads<a/>."
|
||||
},
|
||||
"download-type": {
|
||||
"annotated": "Annotated PDF",
|
||||
@ -1350,7 +1350,6 @@
|
||||
"generic": "Entity rules updated!"
|
||||
},
|
||||
"title": "Entity rule editor",
|
||||
"warning-text": "Warning: experimental feature!",
|
||||
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules"
|
||||
},
|
||||
"entity": {
|
||||
@ -1533,7 +1532,7 @@
|
||||
},
|
||||
"last-assignee": "Last assignee",
|
||||
"no-data": {
|
||||
"title": "There have been no changes to this page."
|
||||
"title": "There are no annotations on this page."
|
||||
},
|
||||
"quick-nav": {
|
||||
"jump-first": "Jump to first page",
|
||||
@ -1550,13 +1549,13 @@
|
||||
"jump-to-next": "Jump to next",
|
||||
"jump-to-previous": "Jump to previous",
|
||||
"label": "Workload",
|
||||
"no-annotations": "There are no available annotations.",
|
||||
"no-annotations": "There are no annotations on the selected page or for the selected component.",
|
||||
"page-is": "This page is",
|
||||
"reset": "reset",
|
||||
"select": "Select",
|
||||
"select-all": "All",
|
||||
"select-none": "None",
|
||||
"show-skipped": "",
|
||||
"show-skipped": "Show skipped in document",
|
||||
"the-filters": "the filters",
|
||||
"wrong-filters": "The selected filter combination is not possible. Please adjust or"
|
||||
},
|
||||
@ -2048,7 +2047,6 @@
|
||||
"auto-expand-filters-on-action": "Auto expand filters on my actions",
|
||||
"help-mode-dialog": "Help Mode Dialog",
|
||||
"load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview",
|
||||
"open-structured-view-by-default": "Display Component View by default when opening a document",
|
||||
"table-extraction-type": "Table extraction type"
|
||||
},
|
||||
"label": "Preferences",
|
||||
@ -2586,4 +2584,4 @@
|
||||
}
|
||||
},
|
||||
"yesterday": "Yesterday"
|
||||
}
|
||||
}
|
||||
|
||||
@ -169,12 +169,16 @@ body {
|
||||
--iqser-app-name-font-family: OpenSans Extrabold, sans-serif;
|
||||
--iqser-app-name-font-size: 13px;
|
||||
--iqser-logo-size: 28px;
|
||||
--documine-viewer-width: calc(
|
||||
100% - var(--structured-component-management-width) - var(--documine-workload-content-width) - var(--qiuck-navigation-width) - 3px
|
||||
);
|
||||
--viewer-height: calc(100% - calc(var(--iqser-top-bar-height) + 50px));
|
||||
}
|
||||
|
||||
.redaction-viewer {
|
||||
visibility: hidden;
|
||||
width: calc(100% - var(--workload-width));
|
||||
height: calc(100% - calc(var(--iqser-top-bar-height) + 50px));
|
||||
height: var(--viewer-height);
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
@ -182,10 +186,8 @@ body {
|
||||
|
||||
.documine-viewer {
|
||||
visibility: hidden;
|
||||
width: calc(
|
||||
100% - var(--structured-component-management-width) - var(--documine-workload-content-width) - var(--qiuck-navigation-width) - 3px
|
||||
);
|
||||
height: calc(100% - calc(var(--iqser-top-bar-height) + 50px));
|
||||
width: var(--documine-viewer-width);
|
||||
height: var(--viewer-height);
|
||||
bottom: 0;
|
||||
right: calc(var(--qiuck-navigation-width) + 3px);
|
||||
position: absolute;
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 80fceb45dd4c860024e675d7d9ae77afd3482db9
|
||||
Subproject commit 6547eb2ad53d9df97a08210d7edb6d849e59d998
|
||||
@ -1,5 +1,4 @@
|
||||
export const DOSSIER_ID = 'dossierId';
|
||||
export const DOSSIERS_ARCHIVE = 'DOSSIERS_ARCHIVE';
|
||||
|
||||
export const ARCHIVE_ROUTE = 'archive';
|
||||
export const DOSSIERS_ROUTE = 'dossiers';
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user