Merge branch 'master' into VM/RED-8748
This commit is contained in:
commit
bc8ba16b6b
1
.gitignore
vendored
1
.gitignore
vendored
@ -47,3 +47,4 @@ paligo-styles/style.css*
|
|||||||
|
|
||||||
migrations.json
|
migrations.json
|
||||||
*.iml
|
*.iml
|
||||||
|
/.nx/
|
||||||
|
|||||||
23
angular.json
23
angular.json
@ -36,12 +36,13 @@
|
|||||||
"prefix": "redaction",
|
"prefix": "redaction",
|
||||||
"targets": {
|
"targets": {
|
||||||
"build": {
|
"build": {
|
||||||
"builder": "@angular-devkit/build-angular:browser",
|
"builder": "@angular/build:application",
|
||||||
"options": {
|
"options": {
|
||||||
"outputPath": "dist/apps/red-ui",
|
"outputPath": {
|
||||||
|
"base": "dist/apps/red-ui"
|
||||||
|
},
|
||||||
"index": "apps/red-ui/src/index.html",
|
"index": "apps/red-ui/src/index.html",
|
||||||
"main": "apps/red-ui/src/main.ts",
|
"polyfills": ["apps/red-ui/src/polyfills.ts"],
|
||||||
"polyfills": "apps/red-ui/src/polyfills.ts",
|
|
||||||
"tsConfig": "tsconfig.json",
|
"tsConfig": "tsconfig.json",
|
||||||
"baseHref": "/ui/",
|
"baseHref": "/ui/",
|
||||||
"assets": [
|
"assets": [
|
||||||
@ -72,13 +73,12 @@
|
|||||||
"stylePreprocessorOptions": {
|
"stylePreprocessorOptions": {
|
||||||
"includePaths": ["./apps/red-ui/src/assets/styles", "./libs/common-ui/src/assets/styles"]
|
"includePaths": ["./apps/red-ui/src/assets/styles", "./libs/common-ui/src/assets/styles"]
|
||||||
},
|
},
|
||||||
"scripts": ["node_modules/@pdftron/webviewer/webviewer.min.js", "node_modules/chart.js/dist/chart.js"],
|
"scripts": ["node_modules/@pdftron/webviewer/webviewer.min.js", "node_modules/chart.js/auto/auto.cjs"],
|
||||||
"vendorChunk": true,
|
|
||||||
"extractLicenses": false,
|
"extractLicenses": false,
|
||||||
"buildOptimizer": false,
|
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"optimization": false,
|
"optimization": false,
|
||||||
"namedChunks": true
|
"namedChunks": true,
|
||||||
|
"browser": "apps/red-ui/src/main.ts"
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"production": {
|
"production": {
|
||||||
@ -100,8 +100,6 @@
|
|||||||
"sourceMap": false,
|
"sourceMap": false,
|
||||||
"namedChunks": false,
|
"namedChunks": false,
|
||||||
"extractLicenses": true,
|
"extractLicenses": true,
|
||||||
"vendorChunk": false,
|
|
||||||
"buildOptimizer": true,
|
|
||||||
"budgets": [
|
"budgets": [
|
||||||
{
|
{
|
||||||
"type": "initial",
|
"type": "initial",
|
||||||
@ -114,13 +112,12 @@
|
|||||||
"maximumError": "20kb"
|
"maximumError": "20kb"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"serviceWorker": true,
|
"serviceWorker": "ngsw-config.json"
|
||||||
"ngswConfigPath": "ngsw-config.json"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"serve": {
|
"serve": {
|
||||||
"builder": "@angular-devkit/build-angular:dev-server",
|
"builder": "@angular/build:dev-server",
|
||||||
"options": {
|
"options": {
|
||||||
"buildTarget": "red-ui:build"
|
"buildTarget": "red-ui:build"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -20,8 +20,17 @@
|
|||||||
<redaction-admin-side-nav type="dossierTemplates"></redaction-admin-side-nav>
|
<redaction-admin-side-nav type="dossierTemplates"></redaction-admin-side-nav>
|
||||||
|
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
<iqser-table [headerTemplate]="headerTemplate" [itemSize]="80" [tableColumnConfigs]="tableColumnConfigs" emptyColumnWidth="2fr">
|
<iqser-table
|
||||||
</iqser-table>
|
(noDataAction)="openAddEditComponentMappingDialog()"
|
||||||
|
[headerTemplate]="headerTemplate"
|
||||||
|
[itemSize]="80"
|
||||||
|
[tableColumnConfigs]="tableColumnConfigs"
|
||||||
|
[noDataText]="'component-mappings-screen.no-data.title' | translate"
|
||||||
|
[showNoDataButton]="roles.componentMappings.write && currentUser.isAdmin"
|
||||||
|
[noDataButtonLabel]="'component-mappings-screen.no-data.action' | translate"
|
||||||
|
emptyColumnWidth="2fr"
|
||||||
|
noDataIcon="iqser:csv"
|
||||||
|
></iqser-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@ -54,6 +63,10 @@
|
|||||||
<span>{{ entity.version }}</span>
|
<span>{{ entity.version }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="cell">
|
||||||
|
<span>{{ entity.numberOfLines }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="cell">
|
<div class="cell">
|
||||||
<div *allow="roles.componentMappings.write; if: currentUser.isAdmin" class="action-buttons">
|
<div *allow="roles.componentMappings.write; if: currentUser.isAdmin" class="action-buttons">
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
|
|||||||
@ -29,6 +29,7 @@ export class ComponentMappingsScreenComponent extends ListingComponent<Component
|
|||||||
tableColumnConfigs: readonly TableColumnConfig<ComponentMapping>[] = [
|
tableColumnConfigs: readonly TableColumnConfig<ComponentMapping>[] = [
|
||||||
{ label: _('component-mappings-screen.table-col-names.name'), sortByKey: 'searchKey' },
|
{ label: _('component-mappings-screen.table-col-names.name'), sortByKey: 'searchKey' },
|
||||||
{ label: _('component-mappings-screen.table-col-names.version') },
|
{ label: _('component-mappings-screen.table-col-names.version') },
|
||||||
|
{ label: _('component-mappings-screen.table-col-names.number-of-lines') },
|
||||||
];
|
];
|
||||||
readonly tableHeaderLabel = _('component-mappings-screen.table-header.title');
|
readonly tableHeaderLabel = _('component-mappings-screen.table-header.title');
|
||||||
protected readonly context$;
|
protected readonly context$;
|
||||||
|
|||||||
@ -89,9 +89,9 @@
|
|||||||
<div class="action-buttons">
|
<div class="action-buttons">
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
(action)="field.primaryAttribute = false; toggleFieldActive.emit(field)"
|
(action)="field.primaryAttribute = false; toggleFieldActive.emit(field)"
|
||||||
[removeTooltip]="true"
|
|
||||||
[tooltip]="'file-attributes-csv-import.action.remove' | translate"
|
[tooltip]="'file-attributes-csv-import.action.remove' | translate"
|
||||||
icon="iqser:trash"
|
icon="iqser:trash"
|
||||||
|
removeTooltip
|
||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -10,13 +10,13 @@
|
|||||||
*allow="roles.getRss"
|
*allow="roles.getRss"
|
||||||
[attr.help-mode-key]="'component_download'"
|
[attr.help-mode-key]="'component_download'"
|
||||||
[disabled]="downloadComponentLogsDisabled$ | async"
|
[disabled]="downloadComponentLogsDisabled$ | async"
|
||||||
[dropdownButton]="true"
|
|
||||||
[icon]="'red:extract'"
|
[icon]="'red:extract'"
|
||||||
[matMenuTriggerFor]="(downloadComponentLogsDisabled$ | async) ? null : bulkComponentDownloadMenu"
|
[matMenuTriggerFor]="(downloadComponentLogsDisabled$ | async) ? null : bulkComponentDownloadMenu"
|
||||||
[tooltip]="
|
[tooltip]="
|
||||||
((downloadComponentLogsDisabled$ | async) ? 'component-download.disabled-tooltip' : 'component-download.tooltip')
|
((downloadComponentLogsDisabled$ | async) ? 'component-download.disabled-tooltip' : 'component-download.tooltip')
|
||||||
| translate
|
| translate
|
||||||
"
|
"
|
||||||
|
dropdownButton
|
||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
|
|
||||||
<redaction-file-download-btn
|
<redaction-file-download-btn
|
||||||
|
|||||||
@ -4,18 +4,18 @@
|
|||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
(action)="setListingMode(listingModes.table)"
|
(action)="setListingMode(listingModes.table)"
|
||||||
[attr.aria-expanded]="mode === listingModes.table"
|
[attr.aria-expanded]="mode === listingModes.table"
|
||||||
[tooltip]="'view-mode.list' | translate"
|
|
||||||
[greySelected]="true"
|
|
||||||
[attr.help-mode-key]="'document_list_view'"
|
[attr.help-mode-key]="'document_list_view'"
|
||||||
|
[tooltip]="'view-mode.list' | translate"
|
||||||
|
greySelected
|
||||||
icon="iqser:list"
|
icon="iqser:list"
|
||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
|
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
(action)="setListingMode(listingModes.workflow)"
|
(action)="setListingMode(listingModes.workflow)"
|
||||||
[attr.aria-expanded]="mode === listingModes.workflow"
|
[attr.aria-expanded]="mode === listingModes.workflow"
|
||||||
[tooltip]="'view-mode.workflow' | translate"
|
|
||||||
[greySelected]="true"
|
|
||||||
[attr.help-mode-key]="'workflow_view'"
|
[attr.help-mode-key]="'workflow_view'"
|
||||||
|
[tooltip]="'view-mode.workflow' | translate"
|
||||||
|
greySelected
|
||||||
icon="iqser:lanes"
|
icon="iqser:lanes"
|
||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<div class="component-value" [ngClass]="{ selected: selected, editing: editing }" (click)="select()">
|
<div (click)="select()" [ngClass]="{ selected: selected, editing: editing }" class="component-value">
|
||||||
<div class="component">{{ entryLabel }}</div>
|
<div class="component">{{ entryLabel }}</div>
|
||||||
<div class="value" *ngIf="!editing; else editValue">
|
<div *ngIf="!editing; else editValue" class="value">
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<span
|
<span
|
||||||
*ngFor="let componentValue of entry.componentValues"
|
*ngFor="let componentValue of entry.componentValues"
|
||||||
@ -15,16 +15,16 @@
|
|||||||
[tooltip]="'component-management.actions.edit' | translate"
|
[tooltip]="'component-management.actions.edit' | translate"
|
||||||
icon="iqser:edit"
|
icon="iqser:edit"
|
||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
<div class="changes-dot" *ngIf="hasUpdatedValues && canEdit"></div>
|
<div *ngIf="hasUpdatedValues && canEdit" class="changes-dot"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<mat-icon *ngIf="!editing" class="arrow-right" svgIcon="red:arrow-right"></mat-icon>
|
<mat-icon *ngIf="!editing" class="arrow-right" svgIcon="red:arrow-right"></mat-icon>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ng-template #editValue>
|
<ng-template #editValue>
|
||||||
<div cdkDropList (cdkDropListDropped)="drop($event)">
|
<div (cdkDropListDropped)="drop($event)" cdkDropList>
|
||||||
<div *ngFor="let value of entry.componentValues; let index = index" class="editing-value" cdkDrag>
|
<div *ngFor="let value of entry.componentValues; let index = index" cdkDrag class="editing-value">
|
||||||
<mat-icon class="draggable" svgIcon="red:draggable-dots" cdkDragHandle></mat-icon>
|
<mat-icon cdkDragHandle class="draggable" svgIcon="red:draggable-dots"></mat-icon>
|
||||||
<div class="iqser-input-group w-full">
|
<div class="iqser-input-group w-full">
|
||||||
<textarea [(ngModel)]="value.value" rows="1" type="text"></textarea>
|
<textarea [(ngModel)]="value.value" rows="1" type="text"></textarea>
|
||||||
</div>
|
</div>
|
||||||
@ -46,12 +46,12 @@
|
|||||||
<div (click)="deselect($event)" class="all-caps-label cancel" translate="component-management.actions.cancel"></div>
|
<div (click)="deselect($event)" class="all-caps-label cancel" translate="component-management.actions.cancel"></div>
|
||||||
<div class="flex right">
|
<div class="flex right">
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
*ngIf="hasUpdatedValues && canEdit"
|
|
||||||
(action)="undo()"
|
(action)="undo()"
|
||||||
[showDot]="true"
|
*ngIf="hasUpdatedValues && canEdit"
|
||||||
[tooltip]="'component-management.actions.undo' | translate"
|
[tooltip]="'component-management.actions.undo' | translate"
|
||||||
class="undo-value"
|
class="undo-value"
|
||||||
icon="red:undo"
|
icon="red:undo"
|
||||||
|
showDot
|
||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
<iqser-circle-button
|
<iqser-circle-button
|
||||||
(action)="add()"
|
(action)="add()"
|
||||||
|
|||||||
@ -1,19 +1,19 @@
|
|||||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
|
||||||
import { IComponentLogEntry } from '@red/domain';
|
|
||||||
import { FormsModule } from '@angular/forms';
|
|
||||||
import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialog } from '@iqser/common-ui';
|
|
||||||
import { FilterService } from '@common-ui/filtering';
|
|
||||||
import { RevertValueDialogComponent } from '../../dialogs/docu-mine/revert-value-dialog/revert-value-dialog.component';
|
|
||||||
import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
|
import { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
|
||||||
import { KeyValuePipe, NgClass, NgForOf, NgIf } from '@angular/common';
|
import { KeyValuePipe, NgClass, NgForOf, NgIf } from '@angular/common';
|
||||||
|
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||||
|
import { FormsModule } from '@angular/forms';
|
||||||
import { MatIcon } from '@angular/material/icon';
|
import { MatIcon } from '@angular/material/icon';
|
||||||
|
import { FilterService } from '@common-ui/filtering';
|
||||||
|
import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialog } from '@iqser/common-ui';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
import { IComponentLogEntry } from '@red/domain';
|
||||||
|
import { RevertValueDialogComponent } from '../../dialogs/docu-mine/revert-value-dialog/revert-value-dialog.component';
|
||||||
import { FileDataService } from '../../services/file-data.service';
|
import { FileDataService } from '../../services/file-data.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'redaction-editable-structured-component-value [entry] [canEdit]',
|
selector: 'redaction-editable-structured-component-value [entry] [canEdit]',
|
||||||
templateUrl: './editable-structured-component-value.component.html',
|
templateUrl: './editable-structured-component-value.component.html',
|
||||||
styleUrls: ['/editable-structured-component-value.component.scss'],
|
styleUrls: ['./editable-structured-component-value.component.scss'],
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [
|
||||||
CircleButtonComponent,
|
CircleButtonComponent,
|
||||||
@ -31,26 +31,48 @@ import { FileDataService } from '../../services/file-data.service';
|
|||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class EditableStructuredComponentValueComponent implements OnInit {
|
export class EditableStructuredComponentValueComponent implements OnInit {
|
||||||
|
protected entryLabel: string;
|
||||||
|
protected editing = false;
|
||||||
|
protected hasUpdatedValues = false;
|
||||||
|
protected initialEntry: IComponentLogEntry;
|
||||||
|
protected readonly iconButtonTypes = IconButtonTypes;
|
||||||
@Input() entry: IComponentLogEntry;
|
@Input() entry: IComponentLogEntry;
|
||||||
@Input() canEdit: boolean;
|
@Input() canEdit: boolean;
|
||||||
@Output() readonly deselectLast = new EventEmitter();
|
@Output() readonly deselectLast = new EventEmitter();
|
||||||
@Output() readonly overrideValue = new EventEmitter<IComponentLogEntry>();
|
@Output() readonly overrideValue = new EventEmitter<IComponentLogEntry>();
|
||||||
@Output() readonly revertOverride = new EventEmitter<string>();
|
@Output() readonly revertOverride = new EventEmitter<string>();
|
||||||
|
|
||||||
selected = false;
|
selected = false;
|
||||||
|
|
||||||
protected entryLabel: string;
|
|
||||||
protected editing = false;
|
|
||||||
protected hasUpdatedValues = false;
|
|
||||||
protected initialEntry: IComponentLogEntry;
|
|
||||||
|
|
||||||
protected readonly iconButtonTypes = IconButtonTypes;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _filtersService: FilterService,
|
private readonly _filtersService: FilterService,
|
||||||
private readonly _iqserDialog: IqserDialog,
|
private readonly _iqserDialog: IqserDialog,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
get disabled() {
|
||||||
|
for (let i = 0; i < this.entry.componentValues.length; i++) {
|
||||||
|
if (this.entry.componentValues[i].value !== this.initialEntry.componentValues[i]?.value) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.entry.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() {
|
||||||
|
return JSON.parse(JSON.stringify(this.entry));
|
||||||
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.reset();
|
this.reset();
|
||||||
}
|
}
|
||||||
@ -91,15 +113,6 @@ export class EditableStructuredComponentValueComponent implements OnInit {
|
|||||||
this.entry.componentValues.splice(index, 1);
|
this.entry.componentValues.splice(index, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
get disabled() {
|
|
||||||
for (let i = 0; i < this.entry.componentValues.length; i++) {
|
|
||||||
if (this.entry.componentValues[i].value !== this.initialEntry.componentValues[i]?.value) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return this.entry.componentValues.length === this.initialEntry.componentValues.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
save() {
|
save() {
|
||||||
this.entry.overridden = true;
|
this.entry.overridden = true;
|
||||||
this.overrideValue.emit(this.entry);
|
this.overrideValue.emit(this.entry);
|
||||||
@ -137,22 +150,6 @@ export class EditableStructuredComponentValueComponent implements OnInit {
|
|||||||
return value.replace(/\n/g, '<br>');
|
return value.replace(/\n/g, '<br>');
|
||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
|
||||||
return JSON.parse(JSON.stringify(this.entry));
|
|
||||||
}
|
|
||||||
|
|
||||||
#setWorkloadFilters() {
|
#setWorkloadFilters() {
|
||||||
this._filtersService.deactivateFilters({ primaryFiltersSlug: 'primaryFilters' });
|
this._filtersService.deactivateFilters({ primaryFiltersSlug: 'primaryFilters' });
|
||||||
|
|
||||||
|
|||||||
@ -11,49 +11,38 @@ import {
|
|||||||
OnInit,
|
OnInit,
|
||||||
ViewChild,
|
ViewChild,
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
import { Roles } from '@users/roles';
|
import { MatDialog } from '@angular/material/dialog';
|
||||||
import {
|
import { Router } from '@angular/router';
|
||||||
CircleButtonTypes,
|
import { CircleButtonTypes, getConfig, HelpModeService, IqserPermissionsService, isIqserDevMode, LoadingService } from '@iqser/common-ui';
|
||||||
getConfig,
|
|
||||||
HelpModeService,
|
|
||||||
IqserDialog,
|
|
||||||
IqserPermissionsService,
|
|
||||||
isIqserDevMode,
|
|
||||||
LoadingService,
|
|
||||||
} from '@iqser/common-ui';
|
|
||||||
import { Bind, Debounce, OnDetach } from '@iqser/common-ui/lib/utils';
|
import { Bind, Debounce, OnDetach } from '@iqser/common-ui/lib/utils';
|
||||||
import { File } from '@red/domain';
|
import { File } from '@red/domain';
|
||||||
|
import { FileManagementService } from '@services/files/file-management.service';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
import { PermissionsService } from '@services/permissions.service';
|
||||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
import { Roles } from '@users/roles';
|
||||||
import { UserPreferenceService } from '@users/user-preference.service';
|
import { download } from '@utils/file-download-utils';
|
||||||
import JSZip from 'jszip';
|
|
||||||
import { saveAs } from 'file-saver';
|
import { saveAs } from 'file-saver';
|
||||||
import { PdfViewer } from '../../../pdf-viewer/services/pdf-viewer.service';
|
import JSZip from 'jszip';
|
||||||
|
import { firstValueFrom } from 'rxjs';
|
||||||
import { AnnotationDrawService } from '../../../pdf-viewer/services/annotation-draw.service';
|
import { AnnotationDrawService } from '../../../pdf-viewer/services/annotation-draw.service';
|
||||||
import { TablesService } from '../../services/tables.service';
|
import { REDAnnotationManager } from '../../../pdf-viewer/services/annotation-manager.service';
|
||||||
import { ALL_HOTKEYS } from '../../utils/constants';
|
import { PdfViewer } from '../../../pdf-viewer/services/pdf-viewer.service';
|
||||||
import { Router } from '@angular/router';
|
|
||||||
import { AnnotationActionsService } from '../../services/annotation-actions.service';
|
import { AnnotationActionsService } from '../../services/annotation-actions.service';
|
||||||
import { FileDataService } from '../../services/file-data.service';
|
import { FileDataService } from '../../services/file-data.service';
|
||||||
import { REDAnnotationManager } from '../../../pdf-viewer/services/annotation-manager.service';
|
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||||
import { MatDialog } from '@angular/material/dialog';
|
|
||||||
import { download } from '@utils/file-download-utils';
|
|
||||||
import { firstValueFrom } from 'rxjs';
|
|
||||||
import { FileManagementService } from '@services/files/file-management.service';
|
|
||||||
import { MultiSelectService } from '../../services/multi-select.service';
|
import { MultiSelectService } from '../../services/multi-select.service';
|
||||||
|
import { TablesService } from '../../services/tables.service';
|
||||||
|
import { ALL_HOTKEYS } from '../../utils/constants';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'redaction-file-header',
|
selector: 'redaction-file-header',
|
||||||
templateUrl: './file-header.component.html',
|
templateUrl: './file-header.component.html',
|
||||||
styleUrls: ['/file-header.component.scss'],
|
styleUrls: ['./file-header.component.scss'],
|
||||||
})
|
})
|
||||||
export class FileHeaderComponent implements OnInit, AfterViewInit, OnDetach, OnDestroy {
|
export class FileHeaderComponent implements OnInit, AfterViewInit, OnDetach, OnDestroy {
|
||||||
@ViewChild('actionsWrapper', { static: false }) private readonly _actionsWrapper: ElementRef;
|
@ViewChild('actionsWrapper', { static: false }) private readonly _actionsWrapper: ElementRef;
|
||||||
@Input() file: File;
|
|
||||||
|
|
||||||
protected readonly roles = Roles;
|
protected readonly roles = Roles;
|
||||||
protected readonly circleButtonTypes = CircleButtonTypes;
|
protected readonly circleButtonTypes = CircleButtonTypes;
|
||||||
|
@Input() file: File;
|
||||||
readonly lastAssignee = computed(() => this.getLastAssignee());
|
readonly lastAssignee = computed(() => this.getLastAssignee());
|
||||||
readonly isIqserDevMode = isIqserDevMode();
|
readonly isIqserDevMode = isIqserDevMode();
|
||||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||||
|
|||||||
@ -72,12 +72,13 @@
|
|||||||
></iqser-circle-button>
|
></iqser-circle-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="annotations-wrapper">
|
<div class="annotations-wrapper" [class.documine-direction]="isDocumine">
|
||||||
<div
|
<div
|
||||||
#quickNavigation
|
#quickNavigation
|
||||||
(keydown)="preventKeyDefault($event)"
|
(keydown)="preventKeyDefault($event)"
|
||||||
(keyup)="preventKeyDefault($event)"
|
(keyup)="preventKeyDefault($event)"
|
||||||
[class.active-panel]="pagesPanelActive"
|
[class.active-panel]="pagesPanelActive"
|
||||||
|
[class.border-left]="isDocumine"
|
||||||
class="quick-navigation"
|
class="quick-navigation"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -27,6 +27,11 @@
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
|
&.documine-direction {
|
||||||
|
flex-direction: row-reverse;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -56,9 +61,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
flex-direction: row-reverse;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.quick-navigation,
|
.quick-navigation,
|
||||||
@ -72,12 +74,15 @@
|
|||||||
|
|
||||||
.quick-navigation {
|
.quick-navigation {
|
||||||
border-right: 1px solid var(--iqser-separator);
|
border-right: 1px solid var(--iqser-separator);
|
||||||
border-left: 1px solid var(--iqser-separator);
|
|
||||||
min-width: var(--qiuck-navigation-width);
|
min-width: var(--qiuck-navigation-width);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
|
&.border-left {
|
||||||
|
border-left: 1px solid var(--iqser-separator);
|
||||||
|
}
|
||||||
|
|
||||||
.jump {
|
.jump {
|
||||||
min-height: 32px;
|
min-height: 32px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@ -1,55 +1,48 @@
|
|||||||
import { Component, Input, OnInit, signal, ViewChildren } from '@angular/core';
|
import { Component, Input, OnInit, signal, ViewChildren } from '@angular/core';
|
||||||
import { ComponentLogEntry, Dictionary, File, IComponentLogEntry, WorkflowFileStatuses } from '@red/domain';
|
import { toObservable } from '@angular/core/rxjs-interop';
|
||||||
|
import { FilterService } from '@common-ui/filtering';
|
||||||
|
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 { ComponentLogService } from '@services/files/component-log.service';
|
import { ComponentLogService } from '@services/files/component-log.service';
|
||||||
import { FilesMapService } from '@services/files/files-map.service';
|
|
||||||
import { UserPreferenceService } from '@users/user-preference.service';
|
import { UserPreferenceService } from '@users/user-preference.service';
|
||||||
import { combineLatest, firstValueFrom, Observable } from 'rxjs';
|
import { combineLatest, firstValueFrom, Observable } from 'rxjs';
|
||||||
import { List } from '@common-ui/utils';
|
|
||||||
import { EditableStructuredComponentValueComponent } from '../editable-structured-component-value/editable-structured-component-value.component';
|
|
||||||
import { FilterService } from '@common-ui/filtering';
|
|
||||||
import { ComponentLogFilterService } from '../../services/component-log-filter.service';
|
|
||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
import { toObservable } from '@angular/core/rxjs-interop';
|
import { ComponentLogFilterService } from '../../services/component-log-filter.service';
|
||||||
|
import { EditableStructuredComponentValueComponent } from '../editable-structured-component-value/editable-structured-component-value.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'redaction-structured-component-management',
|
selector: 'redaction-structured-component-management',
|
||||||
templateUrl: './structured-component-management.component.html',
|
templateUrl: './structured-component-management.component.html',
|
||||||
styleUrls: ['/structured-component-management.component.scss'],
|
styleUrls: ['./structured-component-management.component.scss'],
|
||||||
})
|
})
|
||||||
export class StructuredComponentManagementComponent implements OnInit {
|
export class StructuredComponentManagementComponent implements OnInit {
|
||||||
@Input() file: File;
|
|
||||||
@Input() dictionaries: Dictionary[];
|
|
||||||
|
|
||||||
@ViewChildren('editableComponent') editableComponents: List<EditableStructuredComponentValueComponent>;
|
|
||||||
|
|
||||||
protected readonly componentLogData = signal<ComponentLogEntry[] | undefined>(undefined);
|
protected readonly componentLogData = signal<ComponentLogEntry[] | undefined>(undefined);
|
||||||
protected readonly componentLogData$ = toObservable(this.componentLogData);
|
protected readonly componentLogData$ = toObservable(this.componentLogData);
|
||||||
protected readonly openScmDialogByDefault = signal(this.userPreferences.getOpenScmDialogByDefault());
|
protected readonly openScmDialogByDefault = signal(this.userPreferences.getOpenScmDialogByDefault());
|
||||||
protected readonly iconButtonTypes = IconButtonTypes;
|
protected readonly iconButtonTypes = IconButtonTypes;
|
||||||
protected displayedComponents$: Observable<ComponentLogEntry[]>;
|
protected displayedComponents$: Observable<ComponentLogEntry[]>;
|
||||||
|
@Input() file: File;
|
||||||
|
@Input() dictionaries: Dictionary[];
|
||||||
|
@ViewChildren('editableComponent') editableComponents: List<EditableStructuredComponentValueComponent>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _componentLogService: ComponentLogService,
|
private readonly _componentLogService: ComponentLogService,
|
||||||
private readonly _filesMapService: FilesMapService,
|
|
||||||
private readonly _loadingService: LoadingService,
|
private readonly _loadingService: LoadingService,
|
||||||
private readonly _componentLogFilterService: ComponentLogFilterService,
|
private readonly _componentLogFilterService: ComponentLogFilterService,
|
||||||
private readonly _filterService: FilterService,
|
private readonly _filterService: FilterService,
|
||||||
readonly userPreferences: UserPreferenceService,
|
readonly userPreferences: UserPreferenceService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
get canEdit() {
|
||||||
|
return this.file.workflowStatus !== WorkflowFileStatuses.APPROVED;
|
||||||
|
}
|
||||||
|
|
||||||
async ngOnInit(): Promise<void> {
|
async ngOnInit(): Promise<void> {
|
||||||
await this.#loadData();
|
await this.#loadData();
|
||||||
this.displayedComponents$ = this.#displayedComponents$();
|
this.displayedComponents$ = this.#displayedComponents$();
|
||||||
}
|
}
|
||||||
|
|
||||||
#displayedComponents$() {
|
|
||||||
const componentLogFilters$ = this._filterService.getFilterModels$('componentLogFilters');
|
|
||||||
return combineLatest([this.componentLogData$, componentLogFilters$]).pipe(
|
|
||||||
map(([components, filters]) => this._componentLogFilterService.filterComponents(components, filters)),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
deselectLast() {
|
deselectLast() {
|
||||||
const lastSelected = this.editableComponents.find(c => c.selected);
|
const lastSelected = this.editableComponents.find(c => c.selected);
|
||||||
if (lastSelected) {
|
if (lastSelected) {
|
||||||
@ -57,10 +50,6 @@ export class StructuredComponentManagementComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get canEdit() {
|
|
||||||
return this.file.workflowStatus !== WorkflowFileStatuses.APPROVED;
|
|
||||||
}
|
|
||||||
|
|
||||||
async toggleOpenScmDialogByDefault() {
|
async toggleOpenScmDialogByDefault() {
|
||||||
await this.userPreferences.toggleOpenScmDialogByDefault();
|
await this.userPreferences.toggleOpenScmDialogByDefault();
|
||||||
await this.userPreferences.reload();
|
await this.userPreferences.reload();
|
||||||
@ -83,6 +72,13 @@ export class StructuredComponentManagementComponent implements OnInit {
|
|||||||
await this.#loadData();
|
await this.#loadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#displayedComponents$() {
|
||||||
|
const componentLogFilters$ = this._filterService.getFilterModels$('componentLogFilters');
|
||||||
|
return combineLatest([this.componentLogData$, componentLogFilters$]).pipe(
|
||||||
|
map(([components, filters]) => this._componentLogFilterService.filterComponents(components, filters)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
async #loadData(): Promise<void> {
|
async #loadData(): Promise<void> {
|
||||||
this._loadingService.start();
|
this._loadingService.start();
|
||||||
const componentLogData = await firstValueFrom(
|
const componentLogData = await firstValueFrom(
|
||||||
|
|||||||
@ -377,7 +377,7 @@ export class PdfProxyService {
|
|||||||
const allAreImage = annotationWrappers.reduce((acc, next) => acc && next.isImage, true);
|
const allAreImage = annotationWrappers.reduce((acc, next) => acc && next.isImage, true);
|
||||||
const hideSkipped = this._skippedService.hideSkipped() && annotationWrappers.some(a => a.isSkipped);
|
const hideSkipped = this._skippedService.hideSkipped() && annotationWrappers.some(a => a.isSkipped);
|
||||||
if (allAreImage && !this._annotationManager.resizingAnnotationId && !hideSkipped) {
|
if (allAreImage && !this._annotationManager.resizingAnnotationId && !hideSkipped) {
|
||||||
const allAreVisible = viewerAnnotations.reduce((acc, next) => next.isVisible() && acc, true);
|
const allAreVisible = viewerAnnotations.reduce((acc, next) => next.isVisible() && !!next['Opacity'] && acc, true);
|
||||||
|
|
||||||
const visibilityButton = {
|
const visibilityButton = {
|
||||||
type: 'actionButton',
|
type: 'actionButton',
|
||||||
|
|||||||
@ -302,15 +302,15 @@ export class ViewerHeaderService {
|
|||||||
groups.forEach(group => this.#pushGroup(enabledItems, group));
|
groups.forEach(group => this.#pushGroup(enabledItems, group));
|
||||||
|
|
||||||
const loadAllAnnotationsButton = this.#buttons.get(HeaderElements.LOAD_ALL_ANNOTATIONS);
|
const loadAllAnnotationsButton = this.#buttons.get(HeaderElements.LOAD_ALL_ANNOTATIONS);
|
||||||
let startButtons = 10 - deletedDividers;
|
let startButtons = 11 - deletedDividers;
|
||||||
let deleteCount = 14 - deletedDividers;
|
let deleteCount = 15 - deletedDividers;
|
||||||
|
|
||||||
if (this.#isEnabled(HeaderElements.LOAD_ALL_ANNOTATIONS)) {
|
if (this.#isEnabled(HeaderElements.LOAD_ALL_ANNOTATIONS)) {
|
||||||
if (!header.getItems().includes(loadAllAnnotationsButton)) {
|
if (!header.getItems().includes(loadAllAnnotationsButton)) {
|
||||||
header.get('leftPanelButton').insertAfter(loadAllAnnotationsButton);
|
header.get('leftPanelButton').insertAfter(loadAllAnnotationsButton);
|
||||||
}
|
}
|
||||||
startButtons = 11 - deletedDividers;
|
startButtons = 12 - deletedDividers;
|
||||||
deleteCount = 15 - deletedDividers;
|
deleteCount = 16 - deletedDividers;
|
||||||
} else {
|
} else {
|
||||||
header.delete(HeaderElements.LOAD_ALL_ANNOTATIONS);
|
header.delete(HeaderElements.LOAD_ALL_ANNOTATIONS);
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -538,9 +538,14 @@
|
|||||||
"edit": "Edit mapping"
|
"edit": "Edit mapping"
|
||||||
},
|
},
|
||||||
"add-new": "New Mapping",
|
"add-new": "New Mapping",
|
||||||
|
"no-data": {
|
||||||
|
"action": "New Mapping",
|
||||||
|
"title": "There are no component mappings."
|
||||||
|
},
|
||||||
"search": "Search by name...",
|
"search": "Search by name...",
|
||||||
"table-col-names": {
|
"table-col-names": {
|
||||||
"name": "name",
|
"name": "name",
|
||||||
|
"number-of-lines": "Number of lines",
|
||||||
"version": "version"
|
"version": "version"
|
||||||
},
|
},
|
||||||
"table-header": {
|
"table-header": {
|
||||||
@ -745,7 +750,7 @@
|
|||||||
},
|
},
|
||||||
"download": "Download current entries",
|
"download": "Download current entries",
|
||||||
"error": {
|
"error": {
|
||||||
"400": "<strong>Dictionary update failed.</strong><br><br>One or more of the newly added terms have been identified as frequently used general term. Please remove these terms to proceed with the upate. ",
|
"400": "<strong>Dictionary update failed.</strong><br><br>One or more of the newly added terms have been identified as frequently used general term. Please remove these terms to proceed with the update. ",
|
||||||
"generic": "Error: Dictionary update failed."
|
"generic": "Error: Dictionary update failed."
|
||||||
},
|
},
|
||||||
"revert-changes": "Revert",
|
"revert-changes": "Revert",
|
||||||
@ -859,7 +864,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dossier-details": {
|
"dossier-details": {
|
||||||
"assign-members": "Assign members",
|
"assign-members": "Add members",
|
||||||
"collapse": "Hide details",
|
"collapse": "Hide details",
|
||||||
"document-status": "Document processing states",
|
"document-status": "Document processing states",
|
||||||
"edit-owner": "Edit owner",
|
"edit-owner": "Edit owner",
|
||||||
@ -1376,7 +1381,7 @@
|
|||||||
"file-attribute": {
|
"file-attribute": {
|
||||||
"update": {
|
"update": {
|
||||||
"error": "Update of file attribute value failed. Please try again.",
|
"error": "Update of file attribute value failed. Please try again.",
|
||||||
"success": "File attribute value has been updated successfully!"
|
"success": "File attribute value has been updated successfully."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"file-attributes-configurations": {
|
"file-attributes-configurations": {
|
||||||
@ -1390,8 +1395,8 @@
|
|||||||
"save": "Save configurations",
|
"save": "Save configurations",
|
||||||
"title": "Configurations",
|
"title": "Configurations",
|
||||||
"update": {
|
"update": {
|
||||||
"error": "Failed to update the configuration!",
|
"error": "Failed to update the configuration.",
|
||||||
"success": "Configuration has been updated successfully!"
|
"success": "Configuration has been updated successfully."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"file-attributes-csv-import": {
|
"file-attributes-csv-import": {
|
||||||
@ -1421,7 +1426,7 @@
|
|||||||
"none": "None"
|
"none": "None"
|
||||||
},
|
},
|
||||||
"save": {
|
"save": {
|
||||||
"error": "Failed to create file attributes!",
|
"error": "Failed to create file attributes.",
|
||||||
"label": "Save attributes",
|
"label": "Save attributes",
|
||||||
"success": "{count} file {count, plural, one{attribute} other{attributes}} created successfully!"
|
"success": "{count} file {count, plural, one{attribute} other{attributes}} created successfully!"
|
||||||
},
|
},
|
||||||
@ -1677,7 +1682,7 @@
|
|||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
"error": "Test e-mail could not be sent. Please double-check the email address.",
|
"error": "Test e-mail could not be sent. Please double-check the email address.",
|
||||||
"success": "Test e-mail was sent successfully!",
|
"success": "Test e-mail was sent successfully.",
|
||||||
"warning": "Admin mail address not set. Test email sent to {recipientEmail} instead."
|
"warning": "Admin mail address not set. Test email sent to {recipientEmail} instead."
|
||||||
},
|
},
|
||||||
"title": "Configure SMTP account"
|
"title": "Configure SMTP account"
|
||||||
|
|||||||
@ -287,7 +287,7 @@
|
|||||||
},
|
},
|
||||||
"force-redaction": {
|
"force-redaction": {
|
||||||
"label": "Schwärzung erzwingen",
|
"label": "Schwärzung erzwingen",
|
||||||
"label-image-hint": ""
|
"label-image-hint": "Redact"
|
||||||
},
|
},
|
||||||
"hide": "Ausblenden",
|
"hide": "Ausblenden",
|
||||||
"message": {
|
"message": {
|
||||||
@ -538,9 +538,14 @@
|
|||||||
"edit": "Edit mapping"
|
"edit": "Edit mapping"
|
||||||
},
|
},
|
||||||
"add-new": "New Mapping",
|
"add-new": "New Mapping",
|
||||||
|
"no-data": {
|
||||||
|
"action": "",
|
||||||
|
"title": ""
|
||||||
|
},
|
||||||
"search": "Search by name...",
|
"search": "Search by name...",
|
||||||
"table-col-names": {
|
"table-col-names": {
|
||||||
"name": "name",
|
"name": "name",
|
||||||
|
"number-of-lines": "",
|
||||||
"version": "version"
|
"version": "version"
|
||||||
},
|
},
|
||||||
"table-header": {
|
"table-header": {
|
||||||
@ -1863,7 +1868,7 @@
|
|||||||
"false-positive": "Set false positive",
|
"false-positive": "Set false positive",
|
||||||
"force-hint": "Hinweis erzwingen",
|
"force-hint": "Hinweis erzwingen",
|
||||||
"force-redaction": "Schwärzung erzwingen",
|
"force-redaction": "Schwärzung erzwingen",
|
||||||
"force-redaction-image-hint": "",
|
"force-redaction-image-hint": "Redact image",
|
||||||
"hint": "Add hint",
|
"hint": "Add hint",
|
||||||
"redact": "Annotation",
|
"redact": "Annotation",
|
||||||
"redaction": "Redaction"
|
"redaction": "Redaction"
|
||||||
@ -2489,7 +2494,7 @@
|
|||||||
"workflow": "Arbeitsablauf"
|
"workflow": "Arbeitsablauf"
|
||||||
},
|
},
|
||||||
"viewer-header": {
|
"viewer-header": {
|
||||||
"all-annotations-loaded": "",
|
"all-annotations-loaded": "All annotations loaded",
|
||||||
"load-all-annotations": "Load all annotations"
|
"load-all-annotations": "Load all annotations"
|
||||||
},
|
},
|
||||||
"watermark-screen": {
|
"watermark-screen": {
|
||||||
|
|||||||
@ -538,9 +538,14 @@
|
|||||||
"edit": "Edit mapping"
|
"edit": "Edit mapping"
|
||||||
},
|
},
|
||||||
"add-new": "New Mapping",
|
"add-new": "New Mapping",
|
||||||
|
"no-data": {
|
||||||
|
"action": "New Mapping",
|
||||||
|
"title": "There are no component mappings."
|
||||||
|
},
|
||||||
"search": "Search by name...",
|
"search": "Search by name...",
|
||||||
"table-col-names": {
|
"table-col-names": {
|
||||||
"name": "name",
|
"name": "name",
|
||||||
|
"number-of-lines": "Number of lines",
|
||||||
"version": "version"
|
"version": "version"
|
||||||
},
|
},
|
||||||
"table-header": {
|
"table-header": {
|
||||||
|
|||||||
@ -39,11 +39,11 @@ $red-palette: (
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
$gn-next-primary: mat.define-palette($primary-palette, default, lighter, darker, text);
|
$gn-next-primary: mat.m2-define-palette($primary-palette, default, lighter, darker, text);
|
||||||
$gn-next-secondary: mat.define-palette($secondary-palette, default, lighter, darker, text);
|
$gn-next-secondary: mat.m2-define-palette($secondary-palette, default, lighter, darker, text);
|
||||||
$gn-next-warning: mat.define-palette($red-palette, default, lighter, darker, text);
|
$gn-next-warning: mat.m2-define-palette($red-palette, default, lighter, darker, text);
|
||||||
|
|
||||||
$light-theme: mat.define-light-theme(
|
$light-theme: mat.m2-define-light-theme(
|
||||||
(
|
(
|
||||||
color: (
|
color: (
|
||||||
primary: $gn-next-primary,
|
primary: $gn-next-primary,
|
||||||
@ -53,7 +53,7 @@ $light-theme: mat.define-light-theme(
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$dark-theme: mat.define-dark-theme(
|
$dark-theme: mat.m2-define-dark-theme(
|
||||||
(
|
(
|
||||||
color: (
|
color: (
|
||||||
primary: $gn-next-primary,
|
primary: $gn-next-primary,
|
||||||
@ -66,11 +66,11 @@ $dark-theme: mat.define-dark-theme(
|
|||||||
@include mat.core-theme($light-theme);
|
@include mat.core-theme($light-theme);
|
||||||
@include mat.all-component-themes($light-theme);
|
@include mat.all-component-themes($light-theme);
|
||||||
|
|
||||||
$custom-typography: mat.define-typography-config(
|
$custom-typography: mat.m2-define-typography-config(
|
||||||
$font-family: 'Inter, sans-serif',
|
$font-family: 'Inter, sans-serif',
|
||||||
$body-1: mat.define-typography-level(13px, 18px, 400),
|
$body-1: mat.m2-define-typography-level(13px, 18px, 400),
|
||||||
$body-2: mat.define-typography-level(13px, 18px, 400),
|
$body-2: mat.m2-define-typography-level(13px, 18px, 400),
|
||||||
$button: mat.define-typography-level(13px, 13px, 400),
|
$button: mat.m2-define-typography-level(13px, 13px, 400),
|
||||||
);
|
);
|
||||||
|
|
||||||
@include mat.all-component-typographies($custom-typography);
|
@include mat.all-component-typographies($custom-typography);
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit 748cce403285c97e14cd3115a828c94c9d5d4520
|
Subproject commit f60ea513ac88456f5003ea85c1158ff73fdd3d06
|
||||||
@ -1,5 +1,5 @@
|
|||||||
import * as dayjs from 'dayjs';
|
|
||||||
import { getLeftDateTime } from '@iqser/common-ui/lib/utils';
|
import { getLeftDateTime } from '@iqser/common-ui/lib/utils';
|
||||||
|
import dayjs from 'dayjs';
|
||||||
|
|
||||||
export abstract class TrashItem {
|
export abstract class TrashItem {
|
||||||
abstract readonly type: 'dossier' | 'file';
|
abstract readonly type: 'dossier' | 'file';
|
||||||
|
|||||||
78
package.json
78
package.json
@ -19,67 +19,67 @@
|
|||||||
"*.{ts,js,html}": "eslint --fix"
|
"*.{ts,js,html}": "eslint --fix"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/animations": "17.3.4",
|
"@angular/animations": "18.0.3",
|
||||||
"@angular/cdk": "17.3.4",
|
"@angular/cdk": "18.0.3",
|
||||||
"@angular/common": "17.3.4",
|
"@angular/common": "18.0.3",
|
||||||
"@angular/compiler": "17.3.4",
|
"@angular/compiler": "18.0.3",
|
||||||
"@angular/core": "17.3.4",
|
"@angular/core": "18.0.3",
|
||||||
"@angular/forms": "17.3.4",
|
"@angular/forms": "18.0.3",
|
||||||
"@angular/material": "17.3.4",
|
"@angular/material": "18.0.3",
|
||||||
"@angular/platform-browser": "17.3.4",
|
"@angular/platform-browser": "18.0.3",
|
||||||
"@angular/platform-browser-dynamic": "17.3.4",
|
"@angular/platform-browser-dynamic": "18.0.3",
|
||||||
"@angular/router": "17.3.4",
|
"@angular/router": "18.0.3",
|
||||||
"@angular/service-worker": "17.3.4",
|
"@angular/service-worker": "18.0.3",
|
||||||
"@materia-ui/ngx-monaco-editor": "^6.0.0",
|
"@materia-ui/ngx-monaco-editor": "^6.0.0",
|
||||||
"@messageformat/core": "^3.3.0",
|
"@messageformat/core": "^3.3.0",
|
||||||
"@ngx-translate/core": "15.0.0",
|
"@ngx-translate/core": "15.0.0",
|
||||||
"@ngx-translate/http-loader": "8.0.0",
|
"@ngx-translate/http-loader": "8.0.0",
|
||||||
"@pdftron/webviewer": "10.9.0",
|
"@pdftron/webviewer": "10.10.1",
|
||||||
"chart.js": "4.4.2",
|
"chart.js": "4.4.3",
|
||||||
"dayjs": "1.11.10",
|
"dayjs": "1.11.11",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"jszip": "^3.10.1",
|
"jszip": "^3.10.1",
|
||||||
"jwt-decode": "^4.0.0",
|
"jwt-decode": "^4.0.0",
|
||||||
"keycloak-angular": "15.1.0",
|
"keycloak-angular": "15.1.0",
|
||||||
"keycloak-js": "23.0.1",
|
"keycloak-js": "23.0.1",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"monaco-editor": "0.47.0",
|
"monaco-editor": "0.49.0",
|
||||||
"ng2-charts": "6.0.0",
|
"ng2-charts": "6.0.1",
|
||||||
"ngx-color-picker": "16.0.0",
|
"ngx-color-picker": "16.0.0",
|
||||||
"ngx-logger": "^5.0.11",
|
"ngx-logger": "^5.0.11",
|
||||||
"ngx-toastr": "18.0.0",
|
"ngx-toastr": "19.0.0",
|
||||||
"ngx-translate-messageformat-compiler": "7.0.0",
|
"ngx-translate-messageformat-compiler": "7.0.0",
|
||||||
"object-hash": "^3.0.0",
|
"object-hash": "^3.0.0",
|
||||||
"papaparse": "^5.4.0",
|
"papaparse": "^5.4.0",
|
||||||
"rxjs": "7.8.1",
|
"rxjs": "7.8.1",
|
||||||
"sass": "1.75.0",
|
"sass": "1.77.5",
|
||||||
"scroll-into-view-if-needed": "3.1.0",
|
"scroll-into-view-if-needed": "3.1.0",
|
||||||
"streamsaver": "^2.0.5",
|
"streamsaver": "^2.0.5",
|
||||||
"tslib": "2.6.2",
|
"tslib": "2.6.3",
|
||||||
"zone.js": "0.14.4"
|
"zone.js": "0.14.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-devkit/build-angular": "17.3.4",
|
"@angular-devkit/core": "18.0.4",
|
||||||
"@angular-devkit/core": "17.3.4",
|
"@angular-devkit/schematics": "18.0.4",
|
||||||
"@angular-devkit/schematics": "17.3.4",
|
"@angular-eslint/builder": "18.0.1",
|
||||||
"@angular-eslint/builder": "17.3.0",
|
"@angular-eslint/eslint-plugin": "18.0.1",
|
||||||
"@angular-eslint/eslint-plugin": "17.3.0",
|
"@angular-eslint/eslint-plugin-template": "18.0.1",
|
||||||
"@angular-eslint/eslint-plugin-template": "17.3.0",
|
"@angular-eslint/schematics": "18.0.1",
|
||||||
"@angular-eslint/schematics": "17.3.0",
|
"@angular-eslint/template-parser": "18.0.1",
|
||||||
"@angular-eslint/template-parser": "17.3.0",
|
"@angular/build": "^18.0.4",
|
||||||
"@angular/cli": "17.3.4",
|
"@angular/cli": "18.0.4",
|
||||||
"@angular/compiler-cli": "17.3.4",
|
"@angular/compiler-cli": "18.0.3",
|
||||||
"@angular/language-service": "17.3.4",
|
"@angular/language-service": "18.0.3",
|
||||||
"@bartholomej/ngx-translate-extract": "^8.0.2",
|
"@bartholomej/ngx-translate-extract": "^8.0.2",
|
||||||
"@localazy/ts-api": "^1.0.0",
|
"@localazy/ts-api": "^1.0.0",
|
||||||
"@schematics/angular": "17.3.4",
|
"@schematics/angular": "18.0.4",
|
||||||
"@types/file-saver": "^2.0.7",
|
"@types/file-saver": "^2.0.7",
|
||||||
"@types/jest": "29.5.12",
|
"@types/jest": "29.5.12",
|
||||||
"@types/lodash-es": "4.17.12",
|
"@types/lodash-es": "4.17.12",
|
||||||
"@types/node": "20.12.7",
|
"@types/node": "20.14.2",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.2.0",
|
"@typescript-eslint/eslint-plugin": "^7.2.0",
|
||||||
"@typescript-eslint/parser": "^7.2.0",
|
"@typescript-eslint/parser": "^7.2.0",
|
||||||
"axios": "1.6.8",
|
"axios": "1.7.2",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
"eslint-config-prettier": "9.1.0",
|
"eslint-config-prettier": "9.1.0",
|
||||||
"eslint-plugin-prettier": "5.1.3",
|
"eslint-plugin-prettier": "5.1.3",
|
||||||
@ -89,13 +89,13 @@
|
|||||||
"jest": "29.7.0",
|
"jest": "29.7.0",
|
||||||
"jest-environment-jsdom": "29.7.0",
|
"jest-environment-jsdom": "29.7.0",
|
||||||
"jest-extended": "4.0.2",
|
"jest-extended": "4.0.2",
|
||||||
"jest-preset-angular": "14.0.3",
|
"jest-preset-angular": "14.1.0",
|
||||||
"lint-staged": "15.2.2",
|
"lint-staged": "15.2.7",
|
||||||
"prettier": "3.2.5",
|
"prettier": "3.3.2",
|
||||||
"sonarqube-scanner": "3.4.0",
|
"sonarqube-scanner": "4.0.1",
|
||||||
"ts-node": "10.9.2",
|
"ts-node": "10.9.2",
|
||||||
"typescript": "5.4.5",
|
"typescript": "5.4.5",
|
||||||
"webpack": "5.91.0",
|
"webpack": "5.92.0",
|
||||||
"webpack-bundle-analyzer": "4.10.2",
|
"webpack-bundle-analyzer": "4.10.2",
|
||||||
"xliff": "^6.2.1"
|
"xliff": "^6.2.1"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,17 +5,17 @@
|
|||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"declaration": false,
|
"declaration": false,
|
||||||
|
"esModuleInterop": true,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"allowSyntheticDefaultImports": true,
|
|
||||||
"useDefineForClassFields": false,
|
"useDefineForClassFields": false,
|
||||||
"strictPropertyInitialization": false,
|
"strictPropertyInitialization": false,
|
||||||
"importHelpers": true,
|
"importHelpers": true,
|
||||||
"target": "ES2022",
|
"target": "ES2022",
|
||||||
"module": "es2020",
|
"module": "ES2022",
|
||||||
"typeRoots": ["node_modules/@types"],
|
"typeRoots": ["node_modules/@types"],
|
||||||
"lib": ["es2021", "dom"],
|
"lib": ["ES2022", "dom"],
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"skipDefaultLibCheck": true,
|
"skipDefaultLibCheck": true,
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user