Compare commits

...

27 Commits

Author SHA1 Message Date
Nicoleta Panaghiu
67e50478e7 RED-9985: prevent filter categories from collapsing upon selection. 2024-09-26 11:55:52 +03:00
Nicoleta Panaghiu
edd709df6f RED-9993: fixed license labels. 2024-09-23 15:58:01 +03:00
Nicoleta Panaghiu
05b6f88d64 RED-9900: removed help mode helper elements from hidden buttons. 2024-09-19 17:36:31 +03:00
Nicoleta Panaghiu
7027de6f6e RED-10050: fixed navigating to doc with filtered annotations issue. 2024-09-18 13:54:39 +03:00
Nicoleta Panaghiu
7beddc6138 RED-9993: fixed license information. 2024-09-13 11:03:20 +03:00
Valentin Mihai
71980486a2 RED-10016 - DM: Permanent loading triggerd when trying to edit the component 2024-09-10 16:08:40 +03:00
Nicoleta Panaghiu
1081f8ad1c RED-9372: update common ui. 2024-09-10 11:43:26 +03:00
Nicoleta Panaghiu
435b9f16a9 RED-9372: fixed scrolling on dossier details. 2024-09-10 11:39:52 +03:00
Nicoleta Panaghiu
52f124adff RED-9372: update common ui. 2024-09-05 17:20:47 +03:00
Nicoleta Panaghiu
1171c0d78f RED-9372: fixed annotation details moving on hover. 2024-09-05 17:19:53 +03:00
Nicoleta Panaghiu
6cedf8afb0 RED-9950: increased component management section width by 5%. 2024-09-05 14:59:45 +03:00
Valentin Mihai
1b2f14ec89 RED-9962 - RM-163: Components values are not updated in the UI until page is refreshed 2024-09-04 16:22:30 +03:00
Nicoleta Panaghiu
dc66b8a708 RED-9950: decreased component management width. 2024-09-04 14:41:00 +03:00
Nicoleta Panaghiu
e2cd71dd24 RED-9950: removed more margins. 2024-09-03 12:24:04 +03:00
Nicoleta Panaghiu
3777c12134 RED-9950: increased document viewer space. 2024-08-29 17:29:14 +03:00
Nicoleta Panaghiu
3bfa4796b0 RED-9951: made document info scrollable & fixed paginator position. 2024-08-29 13:04:51 +03:00
Nicoleta Panaghiu
c0c6232f0a RED-9887: fixed save button being disabled. 2024-08-28 13:23:01 +03:00
Nicoleta Panaghiu
d52b8b0d87 RED-9946: added tooltip with valueDescription. 2024-08-27 15:10:36 +03:00
Nicoleta Panaghiu
61b869675e RED-9887: fixed component fields cancel and revert actions. 2024-08-27 14:58:43 +03:00
Nicoleta Panaghiu
be743fa9d7 RED-9824: fixed toaster notification message for edit annotation action. 2024-08-21 11:36:19 +03:00
Marius Schummer
e5a3366ec7 Correction of translation wording 2024-08-20 15:37:54 +02:00
Nicoleta Panaghiu
4a49e68c4a RED-9889: escape html in component values. 2024-08-20 15:13:14 +03:00
Marius Schummer
15a675515d Adjustments of default messages for empty annotation column (relating to RED-9788) 2024-08-15 16:10:27 +02:00
Valentin Mihai
3f8a53b86c RED-9260 - Component Management UI 2024-08-15 16:51:21 +03:00
Valentin Mihai
ae0510add8 RED-9201 - UI for Component Mapping Tables 2024-08-14 19:34:00 +03:00
Nicoleta Panaghiu
ca51e31de8 RED-9777: added help button on edit and remove annotation dialogs. 2024-08-14 11:48:46 +03:00
Nicoleta Panaghiu
02addbbc16 RED-9874: added user preference for overwrite file option. 2024-08-13 15:20:10 +03:00
38 changed files with 410 additions and 339 deletions

View File

@ -31,6 +31,11 @@
{{ 'preferences-screen.form.help-mode-dialog' | translate }} {{ 'preferences-screen.form.help-mode-dialog' | translate }}
</mat-checkbox> </mat-checkbox>
</div> </div>
<div class="iqser-input-group">
<mat-checkbox color="primary" formControlName="overwriteFileOption">
{{ 'preferences-screen.form.overwrite-file-option' | translate }}
</mat-checkbox>
</div>
</ng-container> </ng-container>
</div> </div>
</div> </div>

View File

@ -1,4 +1,4 @@
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';
import { ActivatedRoute } from '@angular/router'; import { ActivatedRoute } from '@angular/router';
import { import {
@ -27,6 +27,7 @@ interface PreferencesForm {
// warnings preferences // warnings preferences
loadAllAnnotationsWarning: boolean; loadAllAnnotationsWarning: boolean;
helpModeDialog: boolean; helpModeDialog: boolean;
overwriteFileOption: boolean;
[k: string]: any; [k: string]: any;
} }
@ -57,6 +58,12 @@ const Screens = {
], ],
}) })
export class PreferencesComponent extends BaseFormComponent implements OnInit { export class PreferencesComponent extends BaseFormComponent implements OnInit {
readonly #formBuilder = inject(FormBuilder);
readonly #permissionsService = inject(IqserPermissionsService);
readonly #changeRef = inject(ChangeDetectorRef);
readonly #loadingService = inject(LoadingService);
readonly #userPreferenceService = inject(UserPreferenceService);
readonly form: FormGroup<AsControl<PreferencesForm>>; readonly form: FormGroup<AsControl<PreferencesForm>>;
readonly currentScreen: Screen; readonly currentScreen: Screen;
readonly screens = Screens; readonly screens = Screens;
@ -65,76 +72,87 @@ export class PreferencesComponent extends BaseFormComponent implements OnInit {
readonly config = getConfig(); readonly config = getConfig();
readonly isIqserDevMode = isIqserDevMode(); readonly isIqserDevMode = isIqserDevMode();
constructor( get #isOverwriteFileOptionActive() {
route: ActivatedRoute, return !(this.#userPreferenceService.getOverwriteFileOption() === 'undefined');
readonly userPreferenceService: UserPreferenceService, }
private readonly _formBuilder: FormBuilder,
private readonly _permissionsService: IqserPermissionsService, constructor(route: ActivatedRoute) {
private readonly _changeRef: ChangeDetectorRef,
private readonly _loadingService: LoadingService,
) {
super(); super();
this.form = this._formBuilder.group({ this.form = this.#formBuilder.group({
// preferences // preferences
autoExpandFiltersOnActions: [this.userPreferenceService.getAutoExpandFiltersOnActions()], autoExpandFiltersOnActions: [this.#userPreferenceService.getAutoExpandFiltersOnActions()],
tableExtractionType: [this.userPreferenceService.getTableExtractionType()], tableExtractionType: [this.#userPreferenceService.getTableExtractionType()],
// warnings preferences // warnings preferences
loadAllAnnotationsWarning: [this.userPreferenceService.getBool(PreferencesKeys.loadAllAnnotationsWarning)], loadAllAnnotationsWarning: [this.#userPreferenceService.getBool(PreferencesKeys.loadAllAnnotationsWarning)],
helpModeDialog: [this.userPreferenceService.getBool(KEYS.helpModeDialog)], helpModeDialog: [this.#userPreferenceService.getBool(KEYS.helpModeDialog)],
overwriteFileOption: [this.#isOverwriteFileOptionActive],
}); });
if (!this._permissionsService.has(Roles.managePreferences)) { if (!this.#permissionsService.has(Roles.managePreferences)) {
this.form.disable(); this.form.disable();
} }
if (!this._permissionsService.has(Roles.getTables)) { if (!this.#permissionsService.has(Roles.getTables)) {
this.form.controls.tableExtractionType.disable(); this.form.controls.tableExtractionType.disable();
} }
if (!this.#isOverwriteFileOptionActive) {
this.form.controls.overwriteFileOption.disable();
}
this.initialFormValue = this.form.getRawValue(); this.initialFormValue = this.form.getRawValue();
this.currentScreen = route.snapshot.data.screen; this.currentScreen = route.snapshot.data.screen;
} }
ngOnInit() { ngOnInit() {
this._loadingService.stop(); this.#loadingService.stop();
} }
async save(): Promise<any> { async save(): Promise<any> {
if (this.form.controls.autoExpandFiltersOnActions.value !== this.userPreferenceService.getAutoExpandFiltersOnActions()) { if (this.form.controls.autoExpandFiltersOnActions.value !== this.#userPreferenceService.getAutoExpandFiltersOnActions()) {
await this.userPreferenceService.toggleAutoExpandFiltersOnActions(); await this.#userPreferenceService.toggleAutoExpandFiltersOnActions();
} }
if (this.form.controls.tableExtractionType.value !== this.userPreferenceService.getTableExtractionType()) { if (this.form.controls.tableExtractionType.value !== this.#userPreferenceService.getTableExtractionType()) {
await this.userPreferenceService.save(PreferencesKeys.tableExtractionType, this.form.controls.tableExtractionType.value); await this.#userPreferenceService.save(PreferencesKeys.tableExtractionType, this.form.controls.tableExtractionType.value);
} }
if ( if (
this.form.controls.loadAllAnnotationsWarning.value !== this.form.controls.loadAllAnnotationsWarning.value !==
this.userPreferenceService.getBool(PreferencesKeys.loadAllAnnotationsWarning) this.#userPreferenceService.getBool(PreferencesKeys.loadAllAnnotationsWarning)
) { ) {
await this.userPreferenceService.save( await this.#userPreferenceService.save(
PreferencesKeys.loadAllAnnotationsWarning, PreferencesKeys.loadAllAnnotationsWarning,
String(this.form.controls.loadAllAnnotationsWarning.value), String(this.form.controls.loadAllAnnotationsWarning.value),
); );
} }
if (this.form.controls.helpModeDialog.value !== this.userPreferenceService.getBool(KEYS.helpModeDialog)) { if (this.form.controls.helpModeDialog.value !== this.#userPreferenceService.getBool(KEYS.helpModeDialog)) {
await this.userPreferenceService.save(KEYS.helpModeDialog, String(this.form.controls.helpModeDialog.value)); await this.#userPreferenceService.save(KEYS.helpModeDialog, String(this.form.controls.helpModeDialog.value));
} }
await this.userPreferenceService.reload(); if (this.form.controls.overwriteFileOption.enabled && !this.form.controls.overwriteFileOption.value) {
await this.#userPreferenceService.saveOverwriteFileOption('undefined');
}
await this.#userPreferenceService.reload();
this.#patchValues(); this.#patchValues();
this.initialFormValue = this.form.getRawValue(); this.initialFormValue = this.form.getRawValue();
this._changeRef.markForCheck(); this.#changeRef.markForCheck();
} }
#patchValues() { #patchValues() {
this.form.patchValue({ this.form.patchValue({
autoExpandFiltersOnActions: this.userPreferenceService.getAutoExpandFiltersOnActions(), autoExpandFiltersOnActions: this.#userPreferenceService.getAutoExpandFiltersOnActions(),
tableExtractionType: this.userPreferenceService.getTableExtractionType(), tableExtractionType: this.#userPreferenceService.getTableExtractionType(),
loadAllAnnotationsWarning: this.userPreferenceService.getBool(PreferencesKeys.loadAllAnnotationsWarning), loadAllAnnotationsWarning: this.#userPreferenceService.getBool(PreferencesKeys.loadAllAnnotationsWarning),
helpModeDialog: this.userPreferenceService.getBool(KEYS.helpModeDialog), helpModeDialog: this.#userPreferenceService.getBool(KEYS.helpModeDialog),
overwriteFileOption: this.#isOverwriteFileOptionActive,
}); });
if (!this.#isOverwriteFileOptionActive) {
this.form.controls.overwriteFileOption.disable();
}
} }
} }

View File

@ -50,9 +50,11 @@
icon="iqser:trash" icon="iqser:trash"
></iqser-circle-button> ></iqser-circle-button>
} }
@if (selectedComponent?.id === component.id) { <mat-icon
<mat-icon class="arrow-right" svgIcon="red:arrow-right"></mat-icon> [class.not-visible]="selectedComponent?.id !== component.id"
} class="arrow-right"
svgIcon="red:arrow-right"
></mat-icon>
</div> </div>
</div> </div>
</div> </div>

View File

@ -38,6 +38,10 @@
.arrow-right { .arrow-right {
transform: scale(0.7); transform: scale(0.7);
&.not-visible {
visibility: hidden;
}
} }
} }
} }
@ -45,6 +49,8 @@
.content-container { .content-container {
background-color: var(--iqser-grey-6); background-color: var(--iqser-grey-6);
height: 100vh; height: 100vh;
display: flex;
flex-direction: column;
.content-header { .content-header {
display: flex; display: flex;
@ -61,6 +67,7 @@
} }
.content { .content {
flex: 1;
display: flex; display: flex;
gap: 20px; gap: 20px;
overflow: hidden; overflow: hidden;
@ -68,7 +75,8 @@
.components-list { .components-list {
flex: 1; flex: 1;
background-color: var(--iqser-white); background-color: var(--iqser-white);
width: 100%; display: flex;
flex-direction: column;
.header { .header {
height: 30px; height: 30px;

View File

@ -30,7 +30,7 @@
<div <div
class="row" class="row"
[matTooltip]="'add-edit-component-mapping.disabled-file-options' | translate" [matTooltip]="'add-edit-component-mapping.disabled-file-options' | translate"
[matTooltipDisabled]="!disabledFileOptions" [matTooltipDisabled]="!form.get('encoding')?.disabled"
[matTooltipPosition]="'above'" [matTooltipPosition]="'above'"
> >
<div class="iqser-input-group required w-150"> <div class="iqser-input-group required w-150">
@ -40,13 +40,12 @@
formControlName="delimiter" formControlName="delimiter"
name="delimiter" name="delimiter"
type="text" type="text"
[class.disabled-file-options]="disabledFileOptions"
/> />
</div> </div>
<div class="iqser-input-group required w-150"> <div class="iqser-input-group required w-150">
<label translate="add-edit-component-mapping.form.encoding-type"></label> <label translate="add-edit-component-mapping.form.encoding-type"></label>
<mat-form-field [class.disabled-file-options]="disabledFileOptions"> <mat-form-field>
<mat-select formControlName="encoding"> <mat-select formControlName="encoding">
<mat-option *ngFor="let type of encodingTypeOptions" [value]="type"> <mat-option *ngFor="let type of encodingTypeOptions" [value]="type">
{{ translations[type] | translate }} {{ translations[type] | translate }}

View File

@ -18,11 +18,6 @@
font-size: 15px; font-size: 15px;
} }
} }
.disabled-file-options {
opacity: 0.5;
pointer-events: none;
}
} }
.row:last-child { .row:last-child {

View File

@ -52,7 +52,6 @@ export class AddEditComponentMappingDialogComponent
{ {
protected readonly encodingTypeOptions = Object.keys(FileAttributeEncodingTypes); protected readonly encodingTypeOptions = Object.keys(FileAttributeEncodingTypes);
protected readonly translations = fileAttributeEncodingTypesTranslations; protected readonly translations = fileAttributeEncodingTypesTranslations;
#fileChanged = false;
activeFile: File; activeFile: File;
form!: UntypedFormGroup; form!: UntypedFormGroup;
@ -73,13 +72,14 @@ export class AddEditComponentMappingDialogComponent
const file = new Blob([fileContent.body as Blob], { type: 'text/csv' }); const file = new Blob([fileContent.body as Blob], { type: 'text/csv' });
this.form.get('file').setValue(file); this.form.get('file').setValue(file);
this.initialFormValue = this.form.getRawValue(); this.initialFormValue = this.form.getRawValue();
this.#disableEncodingAndDelimiter();
} }
} }
changeFile(file: File) { changeFile(file: File) {
this.#fileChanged = true;
this.form.get('file').setValue(file); this.form.get('file').setValue(file);
this.form.get('fileName').setValue(file?.name); this.form.get('fileName').setValue(file?.name);
this.#enableEncodingAndDelimiter();
} }
save() { save() {
@ -96,7 +96,13 @@ export class AddEditComponentMappingDialogComponent
}); });
} }
get disabledFileOptions() { #disableEncodingAndDelimiter() {
return this.initialFormValue?.file && !this.#fileChanged; this.form.get('encoding').disable();
this.form.get('delimiter').disable();
}
#enableEncodingAndDelimiter() {
this.form.get('encoding').enable();
this.form.get('delimiter').enable();
} }
} }

View File

@ -3,7 +3,7 @@ import { LicenseService } from '@services/license.service';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { ChartDataset } from 'chart.js'; import { ChartDataset } from 'chart.js';
import { ChartBlue, ChartGreen, ChartRed } from '../../utils/constants'; import { ChartBlue, ChartGreen, ChartRed } from '../../utils/constants';
import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig, isCurrentMonthAndYear } from '../../utils/functions'; import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig, isCurrentMonth } from '../../utils/functions';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { size } from '@iqser/common-ui/lib/utils'; import { size } from '@iqser/common-ui/lib/utils';
@ -43,7 +43,7 @@ export class LicenseAnalysisCapacityUsageComponent {
#getCapacityDatasets(): ChartDataset[] { #getCapacityDatasets(): ChartDataset[] {
const monthlyData = [...this.licenseService.selectedLicenseReport.monthlyData]; const monthlyData = [...this.licenseService.selectedLicenseReport.monthlyData];
const dataUntilCurrentMonth = getDataUntilCurrentMonth(monthlyData); const dataUntilCurrentMonth = getDataUntilCurrentMonth(monthlyData);
if (monthlyData.length === 1 || isCurrentMonthAndYear(monthlyData[0].startDate)) { if (monthlyData.length === 1 || isCurrentMonth(monthlyData[0].startDate)) {
const empty = { analysedFilesBytes: null } as ILicenseData; const empty = { analysedFilesBytes: null } as ILicenseData;
dataUntilCurrentMonth.splice(0, 0, empty); dataUntilCurrentMonth.splice(0, 0, empty);
monthlyData.splice(0, 0, empty); monthlyData.splice(0, 0, empty);
@ -60,11 +60,8 @@ export class LicenseAnalysisCapacityUsageComponent {
}, },
{ {
data: dataUntilCurrentMonth.map((month, monthIndex) => data: dataUntilCurrentMonth.map((_, monthIndex) =>
month.analysedFilesBytes monthlyData.slice(0, monthIndex + 1).reduce((acc, curr) => acc + (curr.analysedFilesBytes ?? 0), 0),
? month.analysedFilesBytes +
monthlyData.slice(0, monthIndex).reduce((acc, curr) => acc + (curr.analysedFilesBytes ?? 0), 0)
: 0,
), ),
label: this._translateService.instant('license-info-screen.analysis-capacity-usage.analyzed-cumulative'), label: this._translateService.instant('license-info-screen.analysis-capacity-usage.analyzed-cumulative'),
yAxisID: 'y1', yAxisID: 'y1',

View File

@ -3,7 +3,7 @@ import { LicenseService } from '@services/license.service';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { ChartDataset } from 'chart.js'; import { ChartDataset } from 'chart.js';
import { ChartBlue, ChartGreen, ChartRed } from '../../utils/constants'; import { ChartBlue, ChartGreen, ChartRed } from '../../utils/constants';
import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig, isCurrentMonthAndYear } from '../../utils/functions'; import { getDataUntilCurrentMonth, getLabelsFromLicense, getLineConfig, isCurrentMonth } from '../../utils/functions';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { ILicenseData } from '@red/domain'; import { ILicenseData } from '@red/domain';
@ -40,7 +40,7 @@ export class LicensePageUsageComponent {
#getPagesDatasets(): ChartDataset[] { #getPagesDatasets(): ChartDataset[] {
const monthlyData = [...this.licenseService.selectedLicenseReport.monthlyData]; const monthlyData = [...this.licenseService.selectedLicenseReport.monthlyData];
const dataUntilCurrentMonth = getDataUntilCurrentMonth(monthlyData); const dataUntilCurrentMonth = getDataUntilCurrentMonth(monthlyData);
if (monthlyData.length === 1 || isCurrentMonthAndYear(monthlyData[0].startDate)) { if (monthlyData.length === 1 || isCurrentMonth(monthlyData[0].startDate)) {
const empty = { numberOfAnalyzedPages: null } as ILicenseData; const empty = { numberOfAnalyzedPages: null } as ILicenseData;
dataUntilCurrentMonth.splice(0, 0, empty); dataUntilCurrentMonth.splice(0, 0, empty);
monthlyData.splice(0, 0, empty); monthlyData.splice(0, 0, empty);
@ -63,11 +63,8 @@ export class LicensePageUsageComponent {
order: 1, order: 1,
}, },
{ {
data: dataUntilCurrentMonth.map((month, monthIndex) => data: dataUntilCurrentMonth.map((_, monthIndex) =>
month.numberOfAnalyzedPages monthlyData.slice(0, monthIndex + 1).reduce((acc, curr) => acc + (curr.numberOfAnalyzedPages ?? 0), 0),
? month.numberOfAnalyzedPages +
monthlyData.slice(0, monthIndex).reduce((acc, curr) => acc + (curr.numberOfAnalyzedPages ?? 0), 0)
: 0,
), ),
label: this._translateService.instant('license-info-screen.page-usage.cumulative-pages'), label: this._translateService.instant('license-info-screen.page-usage.cumulative-pages'),
yAxisID: 'y1', yAxisID: 'y1',

View File

@ -6,7 +6,6 @@ import { ComplexFillTarget } from 'chart.js/dist/types';
const monthNames = dayjs.monthsShort(); const monthNames = dayjs.monthsShort();
const currentMonth = dayjs(Date.now()).month(); const currentMonth = dayjs(Date.now()).month();
const currentYear = dayjs(Date.now()).year();
export const verboseDate = (date: Dayjs) => `${monthNames[date.month()]} ${date.year()}`; export const verboseDate = (date: Dayjs) => `${monthNames[date.month()]} ${date.year()}`;
@ -45,7 +44,7 @@ export const getLabelsFromLicense = (license: ILicenseReport) => {
monthIterator = monthIterator.add(1, 'month'); monthIterator = monthIterator.add(1, 'month');
} }
if (startMonth.month() === endMonth.month() || startMonth.month() === currentMonth) { if (startMonth.isSame(endMonth, 'month') || isCurrentMonth(startMonth.toDate())) {
result.splice(0, 0, ''); result.splice(0, 0, '');
} }
@ -53,9 +52,9 @@ export const getLabelsFromLicense = (license: ILicenseReport) => {
}; };
export const getDataUntilCurrentMonth = (monthlyData: ILicenseData[]) => { export const getDataUntilCurrentMonth = (monthlyData: ILicenseData[]) => {
return monthlyData.filter(data => dayjs(data.startDate).month() <= currentMonth && dayjs(data.startDate).year() <= currentYear); return monthlyData.filter(data => dayjs(data.startDate).isSameOrBefore(dayjs(Date.now()), 'month'));
}; };
export const isCurrentMonthAndYear = (date: Date | string) => { export const isCurrentMonth = (date: Date | string) => {
return dayjs(date).month() === currentMonth && dayjs(date).year() === currentYear; return dayjs(date).isSame(dayjs(Date.now()), 'month');
}; };

View File

@ -56,7 +56,7 @@
</iqser-workflow> </iqser-workflow>
</div> </div>
<div *ngIf="dossierAttributes$ | async" [class.collapsed]="collapsedDetails" class="right-container" iqserHasScrollbar> <div *ngIf="dossierAttributes$ | async" [class.collapsed]="collapsedDetails" class="right-container">
<redaction-dossier-details <redaction-dossier-details
(toggleCollapse)="collapsedDetails = !collapsedDetails" (toggleCollapse)="collapsedDetails = !collapsedDetails"
[dossierAttributes]="dossierAttributes" [dossierAttributes]="dossierAttributes"

View File

@ -25,10 +25,7 @@
width: 375px; width: 375px;
min-width: 375px; min-width: 375px;
padding: 16px 24px 16px 24px; padding: 16px 24px 16px 24px;
overflow-y: auto;
&.has-scrollbar:hover {
padding-right: 13px;
}
redaction-dossier-details { redaction-dossier-details {
width: 100%; width: 100%;

View File

@ -2,7 +2,7 @@
display: flex; display: flex;
position: absolute; position: absolute;
top: 6px; top: 6px;
right: 19px; right: 8px;
} }
.popover { .popover {

View File

@ -3,21 +3,13 @@
:host { :host {
width: 100%; width: 100%;
position: relative; position: relative;
overflow: hidden;
&:hover {
overflow-y: auto; overflow-y: auto;
@include common-mixins.scroll-bar; @include common-mixins.scroll-bar;
}
&.has-scrollbar:hover redaction-annotation-wrapper::ng-deep, &.has-scrollbar:hover redaction-annotation-wrapper::ng-deep,
&::ng-deep.documine-wrapper { &::ng-deep.documine-wrapper {
.annotation { .annotation {
padding-right: 5px; padding-right: 5px;
} }
redaction-annotation-details {
right: 8px;
}
} }
} }

View File

@ -18,13 +18,10 @@
.right-content { .right-content {
flex-direction: column; flex-direction: column;
height: calc(100% - 71px);
@include common-mixins.scroll-bar; @include common-mixins.scroll-bar;
overflow: hidden; overflow-y: auto;
&:hover {
overflow: auto;
}
&.has-scrollbar .section { &.has-scrollbar .section {
padding-right: 13px; padding-right: 13px;

View File

@ -3,12 +3,16 @@
@if (!editing) { @if (!editing) {
<div class="value"> <div class="value">
<div class="text"> <div class="text">
@for (componentValue of entry.componentValues; track componentValue) { @for (componentValue of currentEntry().componentValues; track componentValue) {
<span [innerHTML]="transformNewLines(componentValue.value ?? componentValue.originalValue)"></span> <span
[innerHTML]="transformNewLines(componentValue.value ?? componentValue.originalValue) | replaceNbsp"
[matTooltip]="componentValue.valueDescription"
[matTooltipPositionAtOrigin]="true"
></span>
} }
</div> </div>
<div class="actions"> <div class="actions">
@if (canEdit) { @if (canEdit()) {
<iqser-circle-button <iqser-circle-button
(action)="edit()" (action)="edit()"
[tooltip]="'component-management.actions.edit' | translate" [tooltip]="'component-management.actions.edit' | translate"
@ -16,7 +20,7 @@
[class.help-mode]="helpModeService.isHelpModeActive()" [class.help-mode]="helpModeService.isHelpModeActive()"
icon="iqser:edit" icon="iqser:edit"
></iqser-circle-button> ></iqser-circle-button>
@if (hasUpdatedValues) { @if (hasUpdatedValues()) {
<div class="changes-dot"></div> <div class="changes-dot"></div>
} }
} }
@ -24,11 +28,11 @@
</div> </div>
} @else { } @else {
<div (cdkDropListDropped)="drop($event)" cdkDropList> <div (cdkDropListDropped)="drop($event)" cdkDropList>
@for (value of entry.componentValues; track value) { @for (value of currentEntry().componentValues; track value) {
<div cdkDrag class="editing-value"> <div cdkDrag class="editing-value">
<mat-icon <mat-icon
[class.hidden-button]="entry.componentValues.length === 1" [class.hidden-button]="currentEntry().componentValues.length === 1"
[attr.help-mode-key]="'change_component_order'" [attr.help-mode-key]="currentEntry().componentValues.length > 1 ? 'change_component_order' : null"
cdkDragHandle cdkDragHandle
class="draggable" class="draggable"
svgIcon="red:draggable-dots" svgIcon="red:draggable-dots"
@ -39,8 +43,8 @@
<iqser-circle-button <iqser-circle-button
(action)="removeValue($index)" (action)="removeValue($index)"
[tooltip]="'component-management.actions.delete' | translate" [tooltip]="'component-management.actions.delete' | translate"
[class.hidden-button]="entry.componentValues.length === 1" [class.hidden-button]="currentEntry().componentValues.length === 1"
[attr.help-mode-key]="'remove_component_value'" [attr.help-mode-key]="currentEntry().componentValues.length > 1 ? 'remove_component_value' : null"
class="remove-value" class="remove-value"
icon="iqser:trash" icon="iqser:trash"
></iqser-circle-button> ></iqser-circle-button>
@ -54,9 +58,9 @@
[label]="'component-management.actions.save' | translate" [label]="'component-management.actions.save' | translate"
[type]="iconButtonTypes.primary" [type]="iconButtonTypes.primary"
></iqser-icon-button> ></iqser-icon-button>
<div (click)="deselect($event)" class="all-caps-label cancel" translate="component-management.actions.cancel"></div> <div (click)="cancel($event)" class="all-caps-label cancel" translate="component-management.actions.cancel"></div>
<div class="flex right"> <div class="flex right">
@if (hasUpdatedValues && canEdit) { @if (hasUpdatedValues() && canEdit()) {
<iqser-circle-button <iqser-circle-button
(action)="undo()" (action)="undo()"
[tooltip]="'component-management.actions.undo' | translate" [tooltip]="'component-management.actions.undo' | translate"

View File

@ -2,12 +2,13 @@
display: flex; display: flex;
flex-direction: row; flex-direction: row;
padding: 10px 0 10px 0; padding: 10px 0 10px 0;
margin-left: 26px; margin-left: 14px;
margin-right: 26px; margin-right: 20px;
position: relative; position: relative;
.component { .component {
width: 40%; width: 40%;
margin-right: 8px;
} }
.value { .value {
@ -72,13 +73,13 @@
} }
.value { .value {
margin-right: 26px; margin-right: 20px;
} }
} }
&:hover { &:hover {
.component { .component {
margin-left: 26px; margin-left: 14px;
} }
.value { .value {
@ -94,7 +95,7 @@
border-left: 4px solid var(--iqser-primary); border-left: 4px solid var(--iqser-primary);
.component { .component {
margin-left: 22px; margin-left: 10px;
} }
.arrow-right { .arrow-right {

View File

@ -1,6 +1,6 @@
import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop'; import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
import { AsyncPipe, 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 { Component, computed, input, OnInit, output, signal, WritableSignal } from '@angular/core';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { MatIcon } from '@angular/material/icon'; import { MatIcon } from '@angular/material/icon';
import { CircleButtonComponent, HelpModeService, IconButtonComponent, IconButtonTypes, IqserDialog } from '@iqser/common-ui'; import { CircleButtonComponent, HelpModeService, IconButtonComponent, IconButtonTypes, IqserDialog } from '@iqser/common-ui';
@ -8,6 +8,9 @@ import { TranslateModule } from '@ngx-translate/core';
import { IComponentLogEntry, IComponentValue } from '@red/domain'; import { IComponentLogEntry, IComponentValue } from '@red/domain';
import { RevertValueDialogComponent } from '../../dialogs/docu-mine/revert-value-dialog/revert-value-dialog.component'; import { RevertValueDialogComponent } from '../../dialogs/docu-mine/revert-value-dialog/revert-value-dialog.component';
import { FilePreviewStateService } from '../../services/file-preview-state.service'; import { FilePreviewStateService } from '../../services/file-preview-state.service';
import { escapeHtml } from '@common-ui/utils';
import { ReplaceNbspPipe } from '@common-ui/pipes/replace-nbsp.pipe';
import { MatTooltip } from '@angular/material/tooltip';
@Component({ @Component({
selector: 'redaction-editable-structured-component-value [entry] [canEdit]', selector: 'redaction-editable-structured-component-value [entry] [canEdit]',
@ -28,20 +31,24 @@ import { FilePreviewStateService } from '../../services/file-preview-state.servi
CdkDragHandle, CdkDragHandle,
FormsModule, FormsModule,
AsyncPipe, AsyncPipe,
ReplaceNbspPipe,
MatTooltip,
], ],
}) })
export class EditableStructuredComponentValueComponent implements OnInit { export class EditableStructuredComponentValueComponent implements OnInit {
readonly entry = input<IComponentLogEntry>();
currentEntry: WritableSignal<IComponentLogEntry>;
readonly canEdit = input<boolean>();
readonly deselectLast = output();
readonly overrideValue = output<IComponentLogEntry>();
readonly revertOverride = output<string>();
hasUpdatedValues = computed(() => this.currentEntry().overridden);
selected = false;
valueBeforeCurrentEdit: IComponentValue[];
protected entryLabel: string; protected entryLabel: string;
protected editing = false; protected editing = false;
protected hasUpdatedValues = false;
protected initialEntry: IComponentLogEntry; protected initialEntry: IComponentLogEntry;
protected readonly iconButtonTypes = IconButtonTypes; protected readonly iconButtonTypes = IconButtonTypes;
@Input() entry: IComponentLogEntry;
@Input() canEdit: boolean;
@Output() readonly deselectLast = new EventEmitter();
@Output() readonly overrideValue = new EventEmitter<IComponentLogEntry>();
@Output() readonly revertOverride = new EventEmitter<string>();
selected = false;
constructor( constructor(
readonly helpModeService: HelpModeService, readonly helpModeService: HelpModeService,
@ -50,38 +57,26 @@ export class EditableStructuredComponentValueComponent implements OnInit {
) {} ) {}
get disabled() { get disabled() {
for (let i = 0; i < this.entry.componentValues.length; i++) { for (let i = 0; i < this.currentEntry().componentValues.length; i++) {
if (this.entry.componentValues[i].value !== this.initialEntry.componentValues[i]?.value) { if (this.currentEntry().componentValues[i].value !== this.initialEntry.componentValues[i]?.value) {
return false; return false;
} }
} }
return this.entry.componentValues.length === this.initialEntry.componentValues.length; return this.currentEntry().componentValues.length === this.initialEntry.componentValues.length;
}
get #hasUpdatedValues() {
for (const value of this.entry.componentValues) {
if (value.originalValue === null && value.value === '') {
continue;
}
if (value.originalValue !== value.value) {
return true;
}
}
return false;
} }
get #initialEntry() { get #initialEntry() {
return JSON.parse(JSON.stringify(this.entry)); return JSON.parse(JSON.stringify(this.entry()));
} }
ngOnInit() { ngOnInit() {
this.currentEntry = signal(this.entry());
this.reset(); this.reset();
} }
reset() { reset() {
this.initialEntry = this.#initialEntry; this.initialEntry = this.#initialEntry;
this.hasUpdatedValues = this.#hasUpdatedValues; this.entryLabel = this.parseName(this.currentEntry().name);
this.entryLabel = this.parseName(this.entry.name);
this.deselect(); this.deselect();
} }
@ -93,11 +88,12 @@ export class EditableStructuredComponentValueComponent implements OnInit {
} }
this.deselectLast.emit(); this.deselectLast.emit();
this.selected = true; this.selected = true;
this._state.componentReferenceIds = this.#getUniqueReferencesIds(this.entry.componentValues); this._state.componentReferenceIds = this.#getUniqueReferencesIds(this.currentEntry().componentValues);
} }
} }
edit() { edit() {
this.valueBeforeCurrentEdit = JSON.parse(JSON.stringify([...this.currentEntry().componentValues]));
this.deselectLast.emit(); this.deselectLast.emit();
this.selected = true; this.selected = true;
this.editing = true; this.editing = true;
@ -111,37 +107,48 @@ export class EditableStructuredComponentValueComponent implements OnInit {
this._state.componentReferenceIds = null; this._state.componentReferenceIds = null;
} }
cancel($event?: MouseEvent) {
this.currentEntry.update(value => ({ ...value, componentValues: this.valueBeforeCurrentEdit }));
this.deselect($event);
}
removeValue(index: number) { removeValue(index: number) {
this.entry.componentValues.splice(index, 1); this.currentEntry.update(value => ({ ...value, componentValues: value.componentValues.filter((_, i) => i !== index) }));
} }
save() { save() {
this.entry.overridden = true; this.currentEntry.update(value => ({ ...value, overridden: true }));
this.overrideValue.emit(this.entry); this.overrideValue.emit(this.currentEntry());
this.reset(); this.reset();
} }
async undo() { async undo() {
const dialog = this._iqserDialog.openDefault(RevertValueDialogComponent, { data: { entry: this.entry }, width: '800px' }); const dialog = this._iqserDialog.openDefault(RevertValueDialogComponent, { data: { entry: this.currentEntry() }, width: '800px' });
const result = await dialog.result(); const result = await dialog.result();
if (result) { if (result) {
this.revertOverride.emit(this.entry.name); this.revertOverride.emit(this.currentEntry().name);
this.reset(); this.reset();
} }
} }
add() { add() {
this.entry.componentValues.push({ this.currentEntry.update(value => ({
...value,
componentValues: [
...value.componentValues,
{
componentRuleId: null, componentRuleId: null,
entityReferences: [], entityReferences: [],
originalValue: null, originalValue: null,
value: '', value: '',
valueDescription: '', valueDescription: '',
}); },
],
}));
} }
drop(event: CdkDragDrop<string>) { drop(event: CdkDragDrop<string>) {
moveItemInArray(this.entry.componentValues, event.previousIndex, event.currentIndex); moveItemInArray(this.currentEntry().componentValues, event.previousIndex, event.currentIndex);
} }
parseName(name: string) { parseName(name: string) {
@ -149,7 +156,7 @@ export class EditableStructuredComponentValueComponent implements OnInit {
} }
transformNewLines(value: string) { transformNewLines(value: string) {
return value.replace(/\n/g, '<br>'); return escapeHtml(value).replace(/\n/g, '<br>');
} }
#getUniqueReferencesIds(values: IComponentValue[]) { #getUniqueReferencesIds(values: IComponentValue[]) {
@ -164,7 +171,7 @@ export class EditableStructuredComponentValueComponent implements OnInit {
#updateTextAreaHeight() { #updateTextAreaHeight() {
setTimeout(() => { setTimeout(() => {
for (let i = 0; i < this.entry.componentValues.length; i++) { for (let i = 0; i < this.currentEntry().componentValues.length; i++) {
const textArea = document.getElementById(`value-input-${i}`); const textArea = document.getElementById(`value-input-${i}`);
textArea.style.height = 'auto'; textArea.style.height = 'auto';
textArea.style.height = `${textArea.scrollHeight}px`; textArea.style.height = `${textArea.scrollHeight}px`;

View File

@ -43,7 +43,7 @@
flex-direction: column; flex-direction: column;
&.documine-width { &.documine-width {
width: calc(var(--documine-workload-content-width)); width: calc(var(--documine-workload-content-width) - 55px);
border-right: 1px solid var(--iqser-separator); border-right: 1px solid var(--iqser-separator);
z-index: 1; z-index: 1;
@ -79,7 +79,7 @@
.quick-navigation { .quick-navigation {
height: 100%; height: 100%;
border-right: 1px solid var(--iqser-separator); border-right: 1px solid var(--iqser-separator);
min-width: var(--qiuck-navigation-width); min-width: var(--quick-navigation-width);
overflow: hidden; overflow: hidden;
display: flex; display: flex;
flex-direction: column; flex-direction: column;

View File

@ -36,7 +36,7 @@ import { workloadTranslations } from '@translations/workload-translations';
import { UserPreferenceService } from '@users/user-preference.service'; import { UserPreferenceService } from '@users/user-preference.service';
import { getLocalStorageDataByFileId } from '@utils/local-storage'; import { getLocalStorageDataByFileId } from '@utils/local-storage';
import { combineLatest, delay, Observable } from 'rxjs'; import { combineLatest, delay, Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators'; import { filter, map, tap } from 'rxjs/operators';
import scrollIntoView from 'scroll-into-view-if-needed'; import scrollIntoView from 'scroll-into-view-if-needed';
import { REDAnnotationManager } from '../../../pdf-viewer/services/annotation-manager.service'; import { REDAnnotationManager } from '../../../pdf-viewer/services/annotation-manager.service';
import { REDDocumentViewer } from '../../../pdf-viewer/services/document-viewer.service'; import { REDDocumentViewer } from '../../../pdf-viewer/services/document-viewer.service';
@ -187,6 +187,7 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
const secondary$ = this.filterService.getFilterModels$('secondaryFilters'); const secondary$ = this.filterService.getFilterModels$('secondaryFilters');
return combineLatest([ return combineLatest([
this._documentViewer.loaded$,
this.fileDataService.all$, this.fileDataService.all$,
primary$, primary$,
secondary$, secondary$,
@ -195,7 +196,8 @@ export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, On
this._pageRotationService.rotations$, this._pageRotationService.rotations$,
]).pipe( ]).pipe(
delay(0), delay(0),
map(([annotations, primary, secondary, componentReferenceIds]) => filter(([loaded]) => loaded),
map(([, annotations, primary, secondary, componentReferenceIds]) =>
this.#filterAnnotations(annotations, primary, secondary, componentReferenceIds), this.#filterAnnotations(annotations, primary, secondary, componentReferenceIds),
), ),
map(annotations => this.#mapListItemsFromAnnotationWrapperArray(annotations)), map(annotations => this.#mapListItemsFromAnnotationWrapperArray(annotations)),

View File

@ -1,3 +1,5 @@
@use 'common-mixins';
.components-header { .components-header {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@ -24,18 +26,19 @@ mat-icon {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
font-size: 12px; font-size: 12px;
overflow: scroll; overflow-x: hidden;
overflow-y: scroll;
height: calc(100% - 40px); height: calc(100% - 40px);
@include common-mixins.scroll-bar;
.component-row { .component-row {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin-left: 13px; margin-left: 13px;
margin-right: 13px;
.header { .header {
display: flex; display: flex;
padding: 10px 26px; padding: 10px 14px;
font-weight: 600; font-weight: 600;
:first-child { :first-child {
@ -47,9 +50,9 @@ mat-icon {
&:not(:last-child) { &:not(:last-child) {
border-bottom: 1px solid var(--iqser-separator); border-bottom: 1px solid var(--iqser-separator);
} }
border-bottom: 1px solid var(--iqser-separator); border-bottom: 1px solid var(--iqser-separator);
margin-left: 26px; margin-right: 13px;
margin-right: 26px;
} }
} }
} }

View File

@ -1,4 +1,4 @@
import { Component, Input, OnInit, signal, ViewChildren } from '@angular/core'; import { Component, effect, Input, OnInit, signal, ViewChildren } from '@angular/core';
import { List } from '@common-ui/utils'; import { List } from '@common-ui/utils';
import { IconButtonTypes, LoadingService } from '@iqser/common-ui'; import { IconButtonTypes, LoadingService } from '@iqser/common-ui';
import { ComponentLogEntry, Dictionary, File, IComponentLogEntry, WorkflowFileStatuses } from '@red/domain'; import { ComponentLogEntry, Dictionary, File, IComponentLogEntry, WorkflowFileStatuses } from '@red/domain';
@ -11,6 +11,7 @@ import { map } from 'rxjs/operators';
import { toObservable } from '@angular/core/rxjs-interop'; import { toObservable } from '@angular/core/rxjs-interop';
import { AsyncPipe, NgForOf, NgIf } from '@angular/common'; import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { FilePreviewStateService } from '../../services/file-preview-state.service';
@Component({ @Component({
selector: 'redaction-structured-component-management', selector: 'redaction-structured-component-management',
@ -33,7 +34,13 @@ export class StructuredComponentManagementComponent implements OnInit {
private readonly _loadingService: LoadingService, private readonly _loadingService: LoadingService,
private readonly _componentLogFilterService: ComponentLogFilterService, private readonly _componentLogFilterService: ComponentLogFilterService,
private readonly _filterService: FilterService, private readonly _filterService: FilterService,
) {} private readonly _state: FilePreviewStateService,
) {
effect(async () => {
this._state.file();
await this.#loadData();
});
}
get canEdit() { get canEdit() {
return this.file.workflowStatus !== WorkflowFileStatuses.APPROVED; return this.file.workflowStatus !== WorkflowFileStatuses.APPROVED;
@ -75,7 +82,6 @@ export class StructuredComponentManagementComponent implements OnInit {
} }
async #loadData(): Promise<void> { async #loadData(): Promise<void> {
this._loadingService.start();
const componentLogData = await firstValueFrom( const componentLogData = await firstValueFrom(
this._componentLogService.getComponentLogData( this._componentLogService.getComponentLogData(
this.file.dossierTemplateId, this.file.dossierTemplateId,

View File

@ -52,6 +52,7 @@
</iqser-icon-button> </iqser-icon-button>
<div [translate]="'edit-redaction.dialog.actions.cancel'" class="all-caps-label cancel" mat-dialog-close></div> <div [translate]="'edit-redaction.dialog.actions.cancel'" class="all-caps-label cancel" mat-dialog-close></div>
<iqser-help-button></iqser-help-button>
</div> </div>
</form> </form>

View File

@ -1,6 +1,13 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms'; import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';
import { CircleButtonComponent, HasScrollbarDirective, IconButtonComponent, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui'; import {
CircleButtonComponent,
HasScrollbarDirective,
HelpButtonComponent,
IconButtonComponent,
IconButtonTypes,
IqserDialogComponent,
} from '@iqser/common-ui';
import { Dictionary, Dossier, SuperTypes } from '@red/domain'; import { Dictionary, Dossier, SuperTypes } from '@red/domain';
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
import { DictionaryService } from '@services/entity-services/dictionary.service'; import { DictionaryService } from '@services/entity-services/dictionary.service';
@ -33,6 +40,7 @@ import { MatDialogClose } from '@angular/material/dialog';
IconButtonComponent, IconButtonComponent,
CircleButtonComponent, CircleButtonComponent,
MatDialogClose, MatDialogClose,
HelpButtonComponent,
], ],
}) })
export class EditAnnotationDialogComponent export class EditAnnotationDialogComponent

View File

@ -60,6 +60,7 @@
</iqser-icon-button> </iqser-icon-button>
<div [translate]="'remove-annotation.dialog.actions.cancel'" class="all-caps-label cancel" mat-dialog-close></div> <div [translate]="'remove-annotation.dialog.actions.cancel'" class="all-caps-label cancel" mat-dialog-close></div>
<iqser-help-button></iqser-help-button>
</div> </div>
</form> </form>

View File

@ -6,7 +6,14 @@ import { MatDialogClose } from '@angular/material/dialog';
import { DetailsRadioOption } from '@common-ui/inputs/details-radio/details-radio-option'; import { DetailsRadioOption } from '@common-ui/inputs/details-radio/details-radio-option';
import { DetailsRadioComponent } from '@common-ui/inputs/details-radio/details-radio.component'; import { DetailsRadioComponent } from '@common-ui/inputs/details-radio/details-radio.component';
import { ReplaceNbspPipe } from '@common-ui/pipes/replace-nbsp.pipe'; import { ReplaceNbspPipe } from '@common-ui/pipes/replace-nbsp.pipe';
import { CircleButtonComponent, HasScrollbarDirective, IconButtonComponent, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui'; import {
CircleButtonComponent,
HasScrollbarDirective,
HelpButtonComponent,
IconButtonComponent,
IconButtonTypes,
IqserDialogComponent,
} from '@iqser/common-ui';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { getRemoveRedactionOptions } from '../../../utils/dialog-options'; import { getRemoveRedactionOptions } from '../../../utils/dialog-options';
import { RemoveAnnotationData, RemoveAnnotationOption, RemoveAnnotationOptions, RemoveAnnotationResult } from '../../../utils/dialog-types'; import { RemoveAnnotationData, RemoveAnnotationOption, RemoveAnnotationOptions, RemoveAnnotationResult } from '../../../utils/dialog-types';
@ -28,6 +35,7 @@ import { RemoveAnnotationData, RemoveAnnotationOption, RemoveAnnotationOptions,
CircleButtonComponent, CircleButtonComponent,
MatDialogClose, MatDialogClose,
NgIf, NgIf,
HelpButtonComponent,
], ],
}) })
export class RemoveAnnotationDialogComponent extends IqserDialogComponent< export class RemoveAnnotationDialogComponent extends IqserDialogComponent<

View File

@ -39,7 +39,7 @@
} }
&.documine-container { &.documine-container {
width: 60%; width: calc(100% - var(--structured-component-management-width));
} }
} }

View File

@ -32,6 +32,10 @@ export class DocumentInfoService {
}, },
{ allowSignalWrites: true }, { allowSignalWrites: true },
); );
effect(() => {
document.body.style.setProperty('--quick-navigation-width', this.shown() ? '350px' : '61px');
});
} }
fileAttributes$(fileId: string, dossierId: string, dossierTemplateId: string) { fileAttributes$(fileId: string, dossierId: string, dossierTemplateId: string) {

View File

@ -14,7 +14,7 @@
align-items: center; align-items: center;
&.documine-pagination { &.documine-pagination {
left: calc(100% - (var(--documine-viewer-width) / 2) - var(--qiuck-navigation-width)); left: calc(100% - (var(--documine-viewer-width) / 2) - var(--quick-navigation-width));
} }
> div { > div {

View File

@ -10,6 +10,7 @@ import utc from 'dayjs/plugin/utc';
import localeData from 'dayjs/plugin/localeData'; import localeData from 'dayjs/plugin/localeData';
import localizedFormat from 'dayjs/plugin/localizedFormat'; import localizedFormat from 'dayjs/plugin/localizedFormat';
import customParseFormat from 'dayjs/plugin/customParseFormat'; import customParseFormat from 'dayjs/plugin/customParseFormat';
import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
export interface DayJsDateAdapterOptions { export interface DayJsDateAdapterOptions {
/** /**
@ -232,6 +233,7 @@ export class CustomDateAdapter extends DateAdapter<Dayjs> {
dayjs.extend(localizedFormat); dayjs.extend(localizedFormat);
dayjs.extend(customParseFormat); dayjs.extend(customParseFormat);
dayjs.extend(localeData); dayjs.extend(localeData);
dayjs.extend(isSameOrBefore);
this.setLocale(dateLocale); this.setLocale(dateLocale);
} }

View File

@ -15,6 +15,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { HeadersConfiguration } from '@iqser/common-ui/lib/utils'; import { HeadersConfiguration } from '@iqser/common-ui/lib/utils';
import { LicenseService } from '@services/license.service'; import { LicenseService } from '@services/license.service';
import { LicenseFeatures } from '../../admin/screens/license/utils/constants'; import { LicenseFeatures } from '../../admin/screens/license/utils/constants';
import { UserPreferenceService } from '@users/user-preference.service';
export interface ActiveUpload { export interface ActiveUpload {
subscription: Subscription; subscription: Subscription;
@ -43,6 +44,7 @@ export class FileUploadService extends GenericService<IFileUploadResult> impleme
private readonly _errorMessageService: ErrorMessageService, private readonly _errorMessageService: ErrorMessageService,
private readonly _licenseService: LicenseService, private readonly _licenseService: LicenseService,
private readonly _toaster: Toaster, private readonly _toaster: Toaster,
private readonly _userPreferenceService: UserPreferenceService,
) { ) {
super(); super();
const fileFetch$ = this.#fetchFiles$.pipe( const fileFetch$ = this.#fetchFiles$.pipe(
@ -76,7 +78,7 @@ export class FileUploadService extends GenericService<IFileUploadResult> impleme
const maxSizeBytes = maxSizeMB * 1024 * 1024; const maxSizeBytes = maxSizeMB * 1024 * 1024;
const dossierFiles = this._filesMapService.get(dossierId); const dossierFiles = this._filesMapService.get(dossierId);
const supportMsOfficeFormats = this._licenseService.getFeature(LicenseFeatures.SUPPORT_MS_OFFICE_FORMATS)?.value as boolean; const supportMsOfficeFormats = this._licenseService.getFeature(LicenseFeatures.SUPPORT_MS_OFFICE_FORMATS)?.value as boolean;
let option: OverwriteFileOption = localStorage.getItem('overwriteFileOption') as OverwriteFileOption; let option: OverwriteFileOption | 'undefined' = this._userPreferenceService.getOverwriteFileOption();
for (let idx = 0; idx < files.length; ++idx) { for (let idx = 0; idx < files.length; ++idx) {
const file = files[idx]; const file = files[idx];
let currentOption = option; let currentOption = option;
@ -95,14 +97,14 @@ export class FileUploadService extends GenericService<IFileUploadResult> impleme
} }
} }
} else if (dossierFiles.find(pf => pf.filename === file.file.name)) { } else if (dossierFiles.find(pf => pf.filename === file.file.name)) {
if (!option) { if (option === 'undefined') {
const res = await this._dialogService.openOverwriteFileDialog(file.file.name); const res = await this._dialogService.openOverwriteFileDialog(file.file.name);
if (res.cancel) { if (res.cancel) {
return; return;
} }
if (res.rememberChoice) { if (res.rememberChoice) {
localStorage.setItem('overwriteFileOption', res.option); await this._userPreferenceService.saveOverwriteFileOption(res.option);
} }
currentOption = res.option; currentOption = res.option;

View File

@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
import { IqserUserPreferenceService, ListingMode } from '@iqser/common-ui'; import { IqserUserPreferenceService, ListingMode } from '@iqser/common-ui';
import { SystemDefaultOption, SystemDefaultType } from '../modules/account/utils/dialog-defaults'; import { SystemDefaultOption, SystemDefaultType } from '../modules/account/utils/dialog-defaults';
import { RedactOrHintOption, RemoveRedactionOption } from '../modules/file-preview/utils/dialog-types'; import { RedactOrHintOption, RemoveRedactionOption } from '../modules/file-preview/utils/dialog-types';
import { OverwriteFileOption } from '@red/domain';
export const PreferencesKeys = { export const PreferencesKeys = {
dossierRecent: 'Dossier-Recent', dossierRecent: 'Dossier-Recent',
@ -21,6 +22,7 @@ export const PreferencesKeys = {
removeRedactionDefaultExtraOption: 'Remove-Redaction-Default-Extra', removeRedactionDefaultExtraOption: 'Remove-Redaction-Default-Extra',
removeRecommendationDefaultExtraOption: 'Remove-Recommendation-Default-Extra', removeRecommendationDefaultExtraOption: 'Remove-Recommendation-Default-Extra',
removeHintDefaultExtraOption: 'Remove-Hint-Default-Extra', removeHintDefaultExtraOption: 'Remove-Hint-Default-Extra',
rememberOverwriteFileOption: 'Remember-Overwrite-File',
} as const; } as const;
@Injectable({ @Injectable({
@ -169,4 +171,12 @@ export class UserPreferenceService extends IqserUserPreferenceService {
async saveRemoveRecommendationDefaultExtraOption(defaultOption: boolean | string): Promise<void> { async saveRemoveRecommendationDefaultExtraOption(defaultOption: boolean | string): Promise<void> {
await this.save(PreferencesKeys.removeRecommendationDefaultExtraOption, defaultOption.toString()); await this.save(PreferencesKeys.removeRecommendationDefaultExtraOption, defaultOption.toString());
} }
getOverwriteFileOption(): OverwriteFileOption | 'undefined' {
return this._getAttribute(PreferencesKeys.rememberOverwriteFileOption, 'undefined') as OverwriteFileOption | 'undefined';
}
async saveOverwriteFileOption(preference: OverwriteFileOption | 'undefined') {
await this.save(PreferencesKeys.rememberOverwriteFileOption, preference);
}
} }

View File

@ -273,9 +273,6 @@
"watermarks": "Wasserzeichen" "watermarks": "Wasserzeichen"
}, },
"analysis-disabled": "", "analysis-disabled": "",
"annotation": {
"pending": "(Analyse steht aus)"
},
"annotation-actions": { "annotation-actions": {
"accept-recommendation": { "accept-recommendation": {
"label": "Empfehlung annehmen" "label": "Empfehlung annehmen"
@ -331,14 +328,14 @@
"error": "Rekategorisierung des Bilds fehlgeschlagen: {error}", "error": "Rekategorisierung des Bilds fehlgeschlagen: {error}",
"success": "Bild wurde einer neuen Kategorie zugeordnet." "success": "Bild wurde einer neuen Kategorie zugeordnet."
}, },
"remove": {
"error": "Entfernen der Schwärzung fehlgeschlagen: {error}",
"success": "Schwärzung wurde entfernt"
},
"remove-hint": { "remove-hint": {
"error": "Entfernen des Hinweises fehlgeschlagen: {error}", "error": "Entfernen des Hinweises fehlgeschlagen: {error}",
"success": "Hinweis wurde entfernt" "success": "Hinweis wurde entfernt"
}, },
"remove": {
"error": "Entfernen der Schwärzung fehlgeschlagen: {error}",
"success": "Schwärzung wurde entfernt"
},
"undo": { "undo": {
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
"success": "Rücksetzung erfolgreich" "success": "Rücksetzung erfolgreich"
@ -351,15 +348,15 @@
"remove-highlights": { "remove-highlights": {
"label": "Ausgewählte Markierungen entfernen" "label": "Ausgewählte Markierungen entfernen"
}, },
"resize": {
"label": "Größe ändern"
},
"resize-accept": { "resize-accept": {
"label": "Neue Größe speichern" "label": "Neue Größe speichern"
}, },
"resize-cancel": { "resize-cancel": {
"label": "Größenänderung abbrechen" "label": "Größenänderung abbrechen"
}, },
"resize": {
"label": "Größe ändern"
},
"see-references": { "see-references": {
"label": "Referenzen anzeigen" "label": "Referenzen anzeigen"
}, },
@ -393,6 +390,9 @@
"skipped": "Ignorierte Schwärzung", "skipped": "Ignorierte Schwärzung",
"text-highlight": "Markierung" "text-highlight": "Markierung"
}, },
"annotation": {
"pending": "(Analyse steht aus)"
},
"annotations": "Annotationen", "annotations": "Annotationen",
"archived-dossiers-listing": { "archived-dossiers-listing": {
"no-data": { "no-data": {
@ -587,8 +587,7 @@
"success": { "success": {
"generic": "" "generic": ""
}, },
"title": "", "title": ""
"warning-text": ""
}, },
"configurations": "Konfiguration", "configurations": "Konfiguration",
"confirm-archive-dossier": { "confirm-archive-dossier": {
@ -637,18 +636,14 @@
"warning": "Warnung: Wiederherstellung des Benutzers nicht möglich." "warning": "Warnung: Wiederherstellung des Benutzers nicht möglich."
}, },
"confirmation-dialog": { "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": { "approve-file-without-analysis": {
"confirmationText": "Ohne Analyse freigeben", "confirmationText": "Ohne Analyse freigeben",
"denyText": "Abbrechen", "denyText": "Abbrechen",
"question": "Analyse zur Erkennung neuer Schwärzungen erforderlich.", "question": "Analyse zur Erkennung neuer Schwärzungen erforderlich.",
"title": "Warnung!" "title": "Warnung!"
}, },
"approve-multiple-files": { "approve-file": {
"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?", "question": "Dieses Dokument enthält ungesehene Änderungen, die sich durch die Reanalyse ergeben haben.<br><br>Möchten Sie es trotzdem freigeben?",
"title": "Warnung!" "title": "Warnung!"
}, },
"approve-multiple-files-without-analysis": { "approve-multiple-files-without-analysis": {
@ -657,6 +652,10 @@
"question": "Für mindestens eine Datei ist ein Analyselauf zur Erkennung neuer Schwärzungen erforderlich.", "question": "Für mindestens eine Datei ist ein Analyselauf zur Erkennung neuer Schwärzungen erforderlich.",
"title": "Warnung" "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": { "assign-file-to-me": {
"question": { "question": {
"multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft.<br><br>Möchten Sie sich die Datei dennoch zuweisen?", "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft.<br><br>Möchten Sie sich die Datei dennoch zuweisen?",
@ -1026,13 +1025,13 @@
"recent": "Neu ({hours} h)", "recent": "Neu ({hours} h)",
"unassigned": "Keinem Bearbeiter zugewiesen" "unassigned": "Keinem Bearbeiter zugewiesen"
}, },
"reanalyse": {
"action": "Datei analysieren"
},
"reanalyse-dossier": { "reanalyse-dossier": {
"error": "Einplanung der Dateien für die Reanalyse fehlgeschlagen. Bitte versuchen Sie es noch einmal.", "error": "Einplanung der Dateien für die Reanalyse fehlgeschlagen. Bitte versuchen Sie es noch einmal.",
"success": "Dateien für Reanalyse vorgesehen." "success": "Dateien für Reanalyse vorgesehen."
}, },
"reanalyse": {
"action": "Datei analysieren"
},
"report-download": "", "report-download": "",
"start-auto-analysis": "Auto-Analyse aktivieren", "start-auto-analysis": "Auto-Analyse aktivieren",
"stop-auto-analysis": "Auto-Analyse anhalten", "stop-auto-analysis": "Auto-Analyse anhalten",
@ -1066,8 +1065,7 @@
"dossier-states": "{count, plural, one{Dossier-Status} other{Dossier-Status}}" "dossier-states": "{count, plural, one{Dossier-Status} other{Dossier-Status}}"
}, },
"error": { "error": {
"conflict": "Es gibt bereits einen Dossier-Status mit diesem Namen.", "conflict": "Es gibt bereits einen Dossier-Status mit diesem Namen."
"generic": "Speichern des Dossier-Status fehlgeschlagen."
}, },
"no-data": { "no-data": {
"title": "Es wurde noch kein Dossier-Status angelegt." "title": "Es wurde noch kein Dossier-Status angelegt."
@ -1103,14 +1101,6 @@
"total-documents": "Dokumente", "total-documents": "Dokumente",
"total-people": "<strong>{count}</strong> {count, plural, one{Benutzer} other {Benutzer}}" "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": { "dossier-templates-listing": {
"action": { "action": {
"clone": "Vorlage klonen", "clone": "Vorlage klonen",
@ -1145,6 +1135,14 @@
"title": "{length} {length, plural, one{Dossier-Vorlage} other{Dossier-Vorlagen}}" "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": { "dossier-watermark-selector": {
"heading": "Wasserzeichen auf Dokumenten", "heading": "Wasserzeichen auf Dokumenten",
"no-watermark": "Kein Wasserzeichen in der Dossier-Vorlage verfügbar:<br>Bitten Sie Ihren Admin, eines zu konfigurieren.", "no-watermark": "Kein Wasserzeichen in der Dossier-Vorlage verfügbar:<br>Bitten Sie Ihren Admin, eines zu konfigurieren.",
@ -1340,15 +1338,6 @@
"title": "{length} {length, plural, one{Wörterbuch} other{Wörterbücher}}" "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": { "entity-rules-screen": {
"error": { "error": {
"generic": "Fehler: Aktualisierung der Entitätsregeln fehlgeschlagen." "generic": "Fehler: Aktualisierung der Entitätsregeln fehlgeschlagen."
@ -1360,22 +1349,30 @@
"generic": "Die Entitätsregeln wurden aktualisiert." "generic": "Die Entitätsregeln wurden aktualisiert."
}, },
"title": "Entitätsregeln-Editor", "title": "Entitätsregeln-Editor",
"warning-text": "Warnung: experimentelle Funktion!",
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} in Regeln gefunden" "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": { "error": {
"deleted-entity": { "deleted-entity": {
"dossier": { "dossier": {
"action": "Zurück zur Übersicht", "action": "Zurück zur Übersicht",
"label": "Dieses Dossier wurde gelöscht!" "label": "Dieses Dossier wurde gelöscht!"
}, },
"file": {
"action": "Zurück zum Dossier",
"label": "Diese Datei wurde gelöscht!"
},
"file-dossier": { "file-dossier": {
"action": "Zurück zur Übersicht", "action": "Zurück zur Übersicht",
"label": "Das Dossier dieser Datei wurde gelöscht!" "label": "Das Dossier dieser Datei wurde gelöscht!"
},
"file": {
"action": "Zurück zum Dossier",
"label": "Diese Datei wurde gelöscht!"
} }
}, },
"file-preview": { "file-preview": {
@ -1393,12 +1390,6 @@
}, },
"exact-date": "{day}. {month} {year} um {hour}:{minute} Uhr", "exact-date": "{day}. {month} {year} um {hour}:{minute} Uhr",
"file": "Datei", "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": { "file-attribute-encoding-types": {
"ascii": "ASCII", "ascii": "ASCII",
"iso": "ISO-8859-1", "iso": "ISO-8859-1",
@ -1409,6 +1400,12 @@
"number": "Nummer", "number": "Nummer",
"text": "Freier Text" "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": { "file-attributes-configurations": {
"cancel": "Abbrechen", "cancel": "Abbrechen",
"form": { "form": {
@ -1626,15 +1623,6 @@
"csv": "Die Datei-Attribute wurden erfolgreich aus der hochgeladenen CSV-Datei importiert." "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-menu": {
"filter-options": "Filteroptionen", "filter-options": "Filteroptionen",
"filter-types": "Filter", "filter-types": "Filter",
@ -1644,6 +1632,15 @@
"unseen-pages": "Nur Annotationen auf ungesehenen Seiten", "unseen-pages": "Nur Annotationen auf ungesehenen Seiten",
"with-comments": "Nur Annotationen mit Kommentaren" "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": { "filters": {
"assigned-people": "Bearbeiter", "assigned-people": "Bearbeiter",
"documents-status": "Dokumentenstatus", "documents-status": "Dokumentenstatus",
@ -1922,13 +1919,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-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!" "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": { "notifications-screen": {
"category": { "category": {
"email-notifications": "E-Mail-Benachrichtigungen", "email-notifications": "E-Mail-Benachrichtigungen",
@ -1942,6 +1932,7 @@
"dossier": "Benachrichtigungen zu Dossiers", "dossier": "Benachrichtigungen zu Dossiers",
"other": "Andere Benachrichtigungen" "other": "Andere Benachrichtigungen"
}, },
"options-title": "Wählen Sie aus, bei welchen Aktivitäten Sie benachrichtigt werden möchten",
"options": { "options": {
"ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen werde", "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen werde",
"ASSIGN_REVIEWER": "Wenn ich einem Dokument als Prüfer zugewiesen werde", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Prüfer zugewiesen werde",
@ -1959,7 +1950,6 @@
"USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde",
"USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" "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": { "schedule": {
"daily": "Tägliche Zusammenfassung", "daily": "Tägliche Zusammenfassung",
"instant": "Sofort", "instant": "Sofort",
@ -1967,6 +1957,13 @@
}, },
"title": "Benachrichtigungseinstellungen" "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": { "ocr": {
"confirmation-dialog": { "confirmation-dialog": {
"cancel": "Abbrechen", "cancel": "Abbrechen",
@ -2049,7 +2046,7 @@
"auto-expand-filters-on-action": "Filter ausgehend von meinen Aktionen automatisch anpassen", "auto-expand-filters-on-action": "Filter ausgehend von meinen Aktionen automatisch anpassen",
"help-mode-dialog": "Dialog zur Aktivierung des Hilfemodus", "help-mode-dialog": "Dialog zur Aktivierung des Hilfemodus",
"load-all-annotations-warning": "Warnung bei gleichzeitigem Laden aller Annotationen in der Miniaturansicht", "load-all-annotations-warning": "Warnung bei gleichzeitigem Laden aller Annotationen in der Miniaturansicht",
"open-structured-view-by-default": "Strukturierte Komponentenansicht standardmäßig anzeigen", "overwrite-file-option": "",
"table-extraction-type": "Art der Tabellenextraktion" "table-extraction-type": "Art der Tabellenextraktion"
}, },
"label": "Präferenzen", "label": "Präferenzen",
@ -2058,16 +2055,16 @@
"warnings-label": "Dialoge und Meldungen", "warnings-label": "Dialoge und Meldungen",
"warnings-subtitle": "„Nicht mehr anzeigen“-Optionen" "warnings-subtitle": "„Nicht mehr anzeigen“-Optionen"
}, },
"processing": {
"basic": "Verarbeitung läuft",
"ocr": "OCR"
},
"processing-status": { "processing-status": {
"ocr": "OCR", "ocr": "OCR",
"pending": "Ausstehend", "pending": "Ausstehend",
"processed": "Verarbeitet", "processed": "Verarbeitet",
"processing": "Verarbeitung läuft" "processing": "Verarbeitung läuft"
}, },
"processing": {
"basic": "Verarbeitung läuft",
"ocr": "OCR"
},
"readonly": "Lesemodus", "readonly": "Lesemodus",
"readonly-archived": "Lesemodus (archiviert)", "readonly-archived": "Lesemodus (archiviert)",
"redact-text": { "redact-text": {
@ -2303,12 +2300,6 @@
"red-user-admin": "Benutzeradmin", "red-user-admin": "Benutzeradmin",
"regular": "regulärer Benutzer" "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": { "search-screen": {
"cols": { "cols": {
"assignee": "Bearbeiter", "assignee": "Bearbeiter",
@ -2332,6 +2323,12 @@
"no-match": "Der Suchbegriff wurde in keinem der Dokumente gefunden.", "no-match": "Der Suchbegriff wurde in keinem der Dokumente gefunden.",
"table-header": "{length} {length, plural, one{Suchergebnis} other{Suchergebnisse}}" "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", "seconds": "Sekunden",
"size": "Größe", "size": "Größe",
"smtp-auth-config": { "smtp-auth-config": {

View File

@ -2046,6 +2046,7 @@
"auto-expand-filters-on-action": "Auto-expand filters on my actions", "auto-expand-filters-on-action": "Auto-expand filters on my actions",
"help-mode-dialog": "Help mode activation dialog", "help-mode-dialog": "Help mode activation dialog",
"load-all-annotations-warning": "Warning regarding simultaneous loading of all annotations in thumbnails", "load-all-annotations-warning": "Warning regarding simultaneous loading of all annotations in thumbnails",
"overwrite-file-option": "Preferred action when re-uploading an already existing file",
"table-extraction-type": "Table extraction type" "table-extraction-type": "Table extraction type"
}, },
"label": "Preferences", "label": "Preferences",

View File

@ -273,9 +273,6 @@
"watermarks": "Watermarks" "watermarks": "Watermarks"
}, },
"analysis-disabled": "Analysis disabled", "analysis-disabled": "Analysis disabled",
"annotation": {
"pending": "(Pending analysis)"
},
"annotation-actions": { "annotation-actions": {
"accept-recommendation": { "accept-recommendation": {
"label": "Empfehlung annehmen" "label": "Empfehlung annehmen"
@ -324,21 +321,21 @@
"success": "Schwärzung eingefügt!" "success": "Schwärzung eingefügt!"
}, },
"recategorize-annotation": { "recategorize-annotation": {
"error": "", "error": "Bearbeiten des Typs fehlgeschlagen: {error}",
"success": "" "success": "Annotation wurde bearbeitet: {changes} geändert."
}, },
"recategorize-image": { "recategorize-image": {
"error": "Rekategorisierung des Bildes gescheitert: {error}", "error": "Rekategorisierung des Bildes gescheitert: {error}",
"success": "Bild wurde einer neuen Kategorie zugeordnet." "success": "Bild wurde einer neuen Kategorie zugeordnet."
}, },
"remove": {
"error": "Fehler beim Entfernen der Schwärzung: {error}",
"success": "Schwärzung entfernt!"
},
"remove-hint": { "remove-hint": {
"error": "Failed to remove hint: {error}", "error": "Failed to remove hint: {error}",
"success": "Hint removed!" "success": "Hint removed!"
}, },
"remove": {
"error": "Fehler beim Entfernen der Schwärzung: {error}",
"success": "Schwärzung entfernt!"
},
"undo": { "undo": {
"error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}", "error": "Die Aktion konnte nicht rückgängig gemacht werden. Fehler: {error}",
"success": "erfolgreich Rückgängig gemacht" "success": "erfolgreich Rückgängig gemacht"
@ -351,15 +348,15 @@
"remove-highlights": { "remove-highlights": {
"label": "Remove selected earmarks" "label": "Remove selected earmarks"
}, },
"resize": {
"label": "Größe ändern"
},
"resize-accept": { "resize-accept": {
"label": "Größe speichern" "label": "Größe speichern"
}, },
"resize-cancel": { "resize-cancel": {
"label": "Größenänderung abbrechen" "label": "Größenänderung abbrechen"
}, },
"resize": {
"label": "Größe ändern"
},
"see-references": { "see-references": {
"label": "See references" "label": "See references"
}, },
@ -393,6 +390,9 @@
"skipped": "Übersprungen", "skipped": "Übersprungen",
"text-highlight": "Earmark" "text-highlight": "Earmark"
}, },
"annotation": {
"pending": "(Pending analysis)"
},
"annotations": "Annotations", "annotations": "Annotations",
"archived-dossiers-listing": { "archived-dossiers-listing": {
"no-data": { "no-data": {
@ -587,8 +587,7 @@
"success": { "success": {
"generic": "Component rules updated!" "generic": "Component rules updated!"
}, },
"title": "Component rule editor", "title": "Component rule editor"
"warning-text": "Warning: experimental feature!"
}, },
"configurations": "Einstellungen", "configurations": "Einstellungen",
"confirm-archive-dossier": { "confirm-archive-dossier": {
@ -637,18 +636,14 @@
"warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!" "warning": "Achtung: Diese Aktion kann nicht rückgängig gemacht werden!"
}, },
"confirmation-dialog": { "confirmation-dialog": {
"approve-file": {
"question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?",
"title": "Warnung!"
},
"approve-file-without-analysis": { "approve-file-without-analysis": {
"confirmationText": "Approve without analysis", "confirmationText": "Approve without analysis",
"denyText": "Cancel", "denyText": "Cancel",
"question": "Analysis required to detect new components.", "question": "Analysis required to detect new components.",
"title": "Warning!" "title": "Warning!"
}, },
"approve-multiple-files": { "approve-file": {
"question": "Mindestens eine der ausgewählten Dateien enthält ungesehene Änderungen. Möchten Sie sie trotzdem genehmigen?", "question": "Dieses Dokument enthält ungesehene Änderungen. Möchten Sie es trotzdem genehmigen?",
"title": "Warnung!" "title": "Warnung!"
}, },
"approve-multiple-files-without-analysis": { "approve-multiple-files-without-analysis": {
@ -657,6 +652,10 @@
"question": "Analysis required to detect new components for at least one file.", "question": "Analysis required to detect new components for at least one file.",
"title": "Warning" "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": { "assign-file-to-me": {
"question": { "question": {
"multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", "multiple": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?",
@ -1026,13 +1025,13 @@
"recent": "Neu ({hours} h)", "recent": "Neu ({hours} h)",
"unassigned": "Niemandem zugewiesen" "unassigned": "Niemandem zugewiesen"
}, },
"reanalyse": {
"action": "Datei analysieren"
},
"reanalyse-dossier": { "reanalyse-dossier": {
"error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.", "error": "Die Dateien konnten nicht für eine Reanalyse eingeplant werden. Bitte versuchen Sie es erneut.",
"success": "Dateien für Reanalyse vorgesehen." "success": "Dateien für Reanalyse vorgesehen."
}, },
"reanalyse": {
"action": "Datei analysieren"
},
"report-download": "Report download", "report-download": "Report download",
"start-auto-analysis": "Enable auto-analysis", "start-auto-analysis": "Enable auto-analysis",
"stop-auto-analysis": "Stop auto-analysis", "stop-auto-analysis": "Stop auto-analysis",
@ -1066,8 +1065,7 @@
"dossier-states": "{count, plural, one{Dossier state} other{Dossier states}}" "dossier-states": "{count, plural, one{Dossier state} other{Dossier states}}"
}, },
"error": { "error": {
"conflict": "Dossier state with this name already exists!", "conflict": "Dossier state with this name already exists!"
"generic": "Failed to save dossier state!"
}, },
"no-data": { "no-data": {
"title": "There are no dossier states." "title": "There are no dossier states."
@ -1103,14 +1101,6 @@
"total-documents": "Anzahl der Dokumente", "total-documents": "Anzahl der Dokumente",
"total-people": "<strong>{count}</strong> {count, plural, one{user} other {users}}" "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": { "dossier-templates-listing": {
"action": { "action": {
"clone": "Clone template", "clone": "Clone template",
@ -1145,6 +1135,14 @@
"title": "{length} dossier {length, plural, one{template} other{templates}}" "title": "{length} dossier {length, plural, one{template} other{templates}}"
} }
}, },
"dossier-templates": {
"label": "Dossier-Vorlagen",
"status": {
"active": "Active",
"inactive": "Inactive",
"incomplete": "Incomplete"
}
},
"dossier-watermark-selector": { "dossier-watermark-selector": {
"heading": "Watermarks on documents", "heading": "Watermarks on documents",
"no-watermark": "There is no watermark defined for the dossier template.<br>Contact your app admin to define one.", "no-watermark": "There is no watermark defined for the dossier template.<br>Contact your app admin to define one.",
@ -1340,15 +1338,6 @@
"title": "{length} {length, plural, one{entity} other{entities}}" "title": "{length} {length, plural, one{entity} other{entities}}"
} }
}, },
"entity": {
"info": {
"actions": {
"revert": "Revert",
"save": "Save changes"
},
"heading": "Edit entity"
}
},
"entity-rules-screen": { "entity-rules-screen": {
"error": { "error": {
"generic": "Something went wrong... Entity rules update failed!" "generic": "Something went wrong... Entity rules update failed!"
@ -1360,22 +1349,30 @@
"generic": "Entity rules updated!" "generic": "Entity rules updated!"
}, },
"title": "Entity rule editor", "title": "Entity rule editor",
"warning-text": "Warning: experimental feature!",
"warnings-found": "{warnings, plural, one{A warning} other{{warnings} warnings}} found in rules" "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": { "error": {
"deleted-entity": { "deleted-entity": {
"dossier": { "dossier": {
"action": "Zurück zur Übersicht", "action": "Zurück zur Übersicht",
"label": "Dieses Dossier wurde gelöscht!" "label": "Dieses Dossier wurde gelöscht!"
}, },
"file": {
"action": "Zurück zum Dossier",
"label": "Diese Datei wurde gelöscht!"
},
"file-dossier": { "file-dossier": {
"action": "Zurück zur Übersicht", "action": "Zurück zur Übersicht",
"label": "Das Dossier dieser Datei wurde gelöscht!" "label": "Das Dossier dieser Datei wurde gelöscht!"
},
"file": {
"action": "Zurück zum Dossier",
"label": "Diese Datei wurde gelöscht!"
} }
}, },
"file-preview": { "file-preview": {
@ -1393,12 +1390,6 @@
}, },
"exact-date": "{day} {month} {year} um {hour}:{minute} Uhr", "exact-date": "{day} {month} {year} um {hour}:{minute} Uhr",
"file": "Datei", "file": "Datei",
"file-attribute": {
"update": {
"error": "Failed to update file attribute value!",
"success": "File attribute value has been updated successfully!"
}
},
"file-attribute-encoding-types": { "file-attribute-encoding-types": {
"ascii": "ASCII", "ascii": "ASCII",
"iso": "ISO-8859-1", "iso": "ISO-8859-1",
@ -1409,6 +1400,12 @@
"number": "Nummer", "number": "Nummer",
"text": "Freier Text" "text": "Freier Text"
}, },
"file-attribute": {
"update": {
"error": "Failed to update file attribute value!",
"success": "File attribute value has been updated successfully!"
}
},
"file-attributes-configurations": { "file-attributes-configurations": {
"cancel": "Cancel", "cancel": "Cancel",
"form": { "form": {
@ -1626,15 +1623,6 @@
"csv": "File attributes were imported successfully from uploaded CSV file." "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-menu": {
"filter-options": "Filteroptionen", "filter-options": "Filteroptionen",
"filter-types": "Filter", "filter-types": "Filter",
@ -1644,6 +1632,15 @@
"unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten", "unseen-pages": "Nur Anmerkungen auf unsichtbaren Seiten",
"with-comments": "Nur Anmerkungen mit Kommentaren" "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": { "filters": {
"assigned-people": "Beauftragt", "assigned-people": "Beauftragt",
"documents-status": "Documents state", "documents-status": "Documents state",
@ -1922,13 +1919,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-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!" "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": { "notifications-screen": {
"category": { "category": {
"email-notifications": "E-Mail Benachrichtigungen", "email-notifications": "E-Mail Benachrichtigungen",
@ -1942,6 +1932,7 @@
"dossier": "Dossierbezogene Benachrichtigungen", "dossier": "Dossierbezogene Benachrichtigungen",
"other": "Andere Benachrichtigungen" "other": "Andere Benachrichtigungen"
}, },
"options-title": "Wählen Sie aus, in welcher Kategorie Sie benachrichtigt werden möchten",
"options": { "options": {
"ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin", "ASSIGN_APPROVER": "Wenn ich einem Dokument als Genehmiger zugewiesen bin",
"ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin", "ASSIGN_REVIEWER": "Wenn ich einem Dokument als Überprüfer zugewiesen bin",
@ -1959,7 +1950,6 @@
"USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde", "USER_PROMOTED_TO_APPROVER": "Wenn ich Genehmiger in einem Dossier werde",
"USER_REMOVED_AS_DOSSIER_MEMBER": "Wenn ich die Dossier-Mitgliedschaft verliere" "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": { "schedule": {
"daily": "Tägliche Zusammenfassung", "daily": "Tägliche Zusammenfassung",
"instant": "Sofortig", "instant": "Sofortig",
@ -1967,6 +1957,13 @@
}, },
"title": "Benachrichtigungseinstellungen" "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": { "ocr": {
"confirmation-dialog": { "confirmation-dialog": {
"cancel": "Cancel", "cancel": "Cancel",
@ -2049,7 +2046,7 @@
"auto-expand-filters-on-action": "Auto expand filters on my actions", "auto-expand-filters-on-action": "Auto expand filters on my actions",
"help-mode-dialog": "Help Mode Dialog", "help-mode-dialog": "Help Mode Dialog",
"load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview", "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", "overwrite-file-option": "",
"table-extraction-type": "Table extraction type" "table-extraction-type": "Table extraction type"
}, },
"label": "Preferences", "label": "Preferences",
@ -2058,16 +2055,16 @@
"warnings-label": "Prompts and dialogs", "warnings-label": "Prompts and dialogs",
"warnings-subtitle": "Do not show again options" "warnings-subtitle": "Do not show again options"
}, },
"processing": {
"basic": "Processing",
"ocr": "OCR"
},
"processing-status": { "processing-status": {
"ocr": "OCR", "ocr": "OCR",
"pending": "Pending", "pending": "Pending",
"processed": "Processed", "processed": "Processed",
"processing": "Processing" "processing": "Processing"
}, },
"processing": {
"basic": "Processing",
"ocr": "OCR"
},
"readonly": "Lesemodus", "readonly": "Lesemodus",
"readonly-archived": "Read only (archived)", "readonly-archived": "Read only (archived)",
"redact-text": { "redact-text": {
@ -2303,12 +2300,6 @@
"red-user-admin": "Benutzer-Admin", "red-user-admin": "Benutzer-Admin",
"regular": "Regulär" "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": { "search-screen": {
"cols": { "cols": {
"assignee": "Bevollmächtigter", "assignee": "Bevollmächtigter",
@ -2332,6 +2323,12 @@
"no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.", "no-match": "Keine Dokumente entsprechen Ihren aktuellen Filtern.",
"table-header": "{length} search {length, plural, one{result} other{results}}" "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", "seconds": "seconds",
"size": "Size", "size": "Size",
"smtp-auth-config": { "smtp-auth-config": {

View File

@ -321,8 +321,8 @@
"success": "Annotation added!" "success": "Annotation added!"
}, },
"recategorize-annotation": { "recategorize-annotation": {
"error": "", "error": "Failed to edit type: {error}",
"success": "" "success": "Annotation was edited: Changed {changes}."
}, },
"recategorize-image": { "recategorize-image": {
"error": "Failed to recategorize image: {error}", "error": "Failed to recategorize image: {error}",
@ -1531,7 +1531,7 @@
}, },
"last-assignee": "Last assignee", "last-assignee": "Last assignee",
"no-data": { "no-data": {
"title": "There are no annotations on this page." "title": "This page does not contain annotations for the selected component or filter."
}, },
"quick-nav": { "quick-nav": {
"jump-first": "Jump to first page", "jump-first": "Jump to first page",
@ -1548,7 +1548,7 @@
"jump-to-next": "Jump to next", "jump-to-next": "Jump to next",
"jump-to-previous": "Jump to previous", "jump-to-previous": "Jump to previous",
"label": "Workload", "label": "Workload",
"no-annotations": "There are no annotations on the selected page or for the selected component.", "no-annotations": "There are no annotations for the selected component.",
"page-is": "This page is", "page-is": "This page is",
"reset": "reset", "reset": "reset",
"select": "Select", "select": "Select",
@ -1556,7 +1556,7 @@
"select-none": "None", "select-none": "None",
"show-skipped": "Show skipped in document", "show-skipped": "Show skipped in document",
"the-filters": "the filters", "the-filters": "the filters",
"wrong-filters": "The selected filter combination is not possible. Please adjust or" "wrong-filters": "No annotations for the selected filter combination. Please adjust or"
}, },
"document-info": { "document-info": {
"close": "Close document info", "close": "Close document info",
@ -2046,6 +2046,7 @@
"auto-expand-filters-on-action": "Auto expand filters on my actions", "auto-expand-filters-on-action": "Auto expand filters on my actions",
"help-mode-dialog": "Help Mode Dialog", "help-mode-dialog": "Help Mode Dialog",
"load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview", "load-all-annotations-warning": "Warning regarding loading all annotations at once in file preview",
"overwrite-file-option": "Preferred action when re-uploading of an already existing file",
"table-extraction-type": "Table extraction type" "table-extraction-type": "Table extraction type"
}, },
"label": "Preferences", "label": "Preferences",

View File

@ -164,13 +164,15 @@ $dark-accent-10: darken(vars.$accent, 10%);
body { body {
--workload-width: 350px; --workload-width: 350px;
--documine-workload-content-width: 287px; --documine-workload-content-width: 287px;
--structured-component-management-width: 40%; --structured-component-management-width: 35%;
--qiuck-navigation-width: 61px; --quick-navigation-width: 61px;
--iqser-app-name-font-family: OpenSans Extrabold, sans-serif; --iqser-app-name-font-family: OpenSans Extrabold, sans-serif;
--iqser-app-name-font-size: 13px; --iqser-app-name-font-size: 13px;
--iqser-logo-size: 28px; --iqser-logo-size: 28px;
--documine-viewer-width: calc( --documine-viewer-width: calc(
100% - var(--structured-component-management-width) - var(--documine-workload-content-width) - var(--qiuck-navigation-width) - 3px 100% - var(--structured-component-management-width) - calc(var(--documine-workload-content-width) - 55px) - var(
--quick-navigation-width
) - 3px
); );
--viewer-height: calc(100% - calc(var(--iqser-top-bar-height) + 50px)); --viewer-height: calc(100% - calc(var(--iqser-top-bar-height) + 50px));
} }
@ -189,12 +191,14 @@ body {
width: var(--documine-viewer-width); width: var(--documine-viewer-width);
height: var(--viewer-height); height: var(--viewer-height);
bottom: 0; bottom: 0;
right: calc(var(--qiuck-navigation-width) + 3px); right: calc(var(--quick-navigation-width) + 3px);
position: absolute; position: absolute;
&.document-info { &.document-info {
width: calc( width: calc(
100% - var(--structured-component-management-width) - var(--documine-workload-content-width) - var(--workload-width) - 3px 100% - var(--structured-component-management-width) - calc(var(--documine-workload-content-width) - 55px) - var(
--workload-width
) - 3px
); );
right: calc(var(--workload-width) + 1px); right: calc(var(--workload-width) + 1px);
} }

@ -1 +1 @@
Subproject commit 6547eb2ad53d9df97a08210d7edb6d849e59d998 Subproject commit 97b614a89931ff9cf058a2e9e4d1e270fc1ced3a