RED-9321: removed file-preview and dossier-overview modules, use standalone.
This commit is contained in:
parent
3d7dca1f43
commit
9409261f3b
@ -8,7 +8,7 @@ import { DossierFilesGuard } from '@guards/dossier-files-guard';
|
||||
import { templateExistsWhenEnteringDossierList } from '@guards/dossier-template-exists.guard';
|
||||
import { DossierTemplatesGuard } from '@guards/dossier-templates.guard';
|
||||
import { loadActiveDossiersGuard, loadAllDossiersGuard, loadArchivedDossiersGuard } from '@guards/dossiers.guard';
|
||||
import { editAttributeGuard } from '@guards/edit-attribute.guard';
|
||||
import { isNotEditingFileAttributeGuard } from '@guards/file-attribute.guard';
|
||||
import { FeaturesGuard } from '@guards/features-guard.service';
|
||||
import { ifLoggedIn } from '@guards/if-logged-in.guard';
|
||||
import { TrashGuard } from '@guards/trash.guard';
|
||||
@ -38,7 +38,7 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
{
|
||||
path: `:${DOSSIER_ID}`,
|
||||
canActivate: [CompositeRouteGuard, IqserPermissionsGuard],
|
||||
canDeactivate: [editAttributeGuard],
|
||||
canDeactivate: [isNotEditingFileAttributeGuard],
|
||||
data: {
|
||||
routeGuards: [DossierFilesGuard],
|
||||
breadcrumbs: [BreadcrumbTypes.dossierTemplate, BreadcrumbTypes.dossier],
|
||||
@ -49,7 +49,7 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
},
|
||||
skeleton: 'dossier',
|
||||
},
|
||||
loadChildren: () => import('./modules/dossier-overview/dossier-overview.module').then(m => m.DossierOverviewModule),
|
||||
loadChildren: () => import('./modules/dossier-overview/dossier-overview.routes'),
|
||||
},
|
||||
{
|
||||
path: `:${DOSSIER_ID}/file/:${FILE_ID}`,
|
||||
@ -63,7 +63,7 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
redirectTo: '/auth-error',
|
||||
},
|
||||
},
|
||||
loadChildren: () => import('./modules/file-preview/file-preview.module').then(m => m.FilePreviewModule),
|
||||
loadChildren: () => import('./modules/file-preview/file-preview.routes'),
|
||||
},
|
||||
{
|
||||
path: '',
|
||||
|
||||
@ -44,7 +44,7 @@ import {
|
||||
import { CommonUiModule } from '@iqser/common-ui/lib/common-ui.module';
|
||||
import { LogoComponent, SkeletonComponent, ToastComponent } from '@iqser/common-ui/lib/shared';
|
||||
import { TenantsModule } from '@iqser/common-ui/lib/tenants';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor';
|
||||
import { MissingTranslationHandler } from '@ngx-translate/core';
|
||||
import { AppConfig, ILoggerConfig } from '@red/domain';
|
||||
@ -186,6 +186,7 @@ export const appModuleFactory = (config: AppConfig) => {
|
||||
IconButtonComponent,
|
||||
MatDividerModule,
|
||||
ChevronButtonComponent,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
providers: [
|
||||
{
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
import { inject } from '@angular/core';
|
||||
import { CanDeactivateFn } from '@angular/router';
|
||||
import { FileAttributesService } from '@services/entity-services/file-attributes.service';
|
||||
import { DossierOverviewScreenComponent } from '../modules/dossier-overview/screen/dossier-overview-screen.component';
|
||||
|
||||
// TODO: rename to something like "isNotEditingFileAttributeGuard"
|
||||
export const editAttributeGuard: CanDeactivateFn<DossierOverviewScreenComponent> = () =>
|
||||
!inject(FileAttributesService).isEditingFileAttribute();
|
||||
7
apps/red-ui/src/app/guards/file-attribute.guard.ts
Normal file
7
apps/red-ui/src/app/guards/file-attribute.guard.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { inject } from '@angular/core';
|
||||
import { CanDeactivateFn } from '@angular/router';
|
||||
import { FileAttributesService } from '@services/entity-services/file-attributes.service';
|
||||
import DossierOverviewScreenComponent from '../modules/dossier-overview/screen/dossier-overview-screen.component';
|
||||
|
||||
export const isNotEditingFileAttributeGuard: CanDeactivateFn<DossierOverviewScreenComponent> = () =>
|
||||
!inject(FileAttributesService).isEditingFileAttribute();
|
||||
@ -44,6 +44,7 @@ const entityRoutes: IqserRoutes = [
|
||||
];
|
||||
|
||||
const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
{ path: '', redirectTo: 'info', pathMatch: 'full' },
|
||||
{
|
||||
path: 'entities',
|
||||
children: entityRoutes,
|
||||
@ -152,7 +153,6 @@ const dossierTemplateIdRoutes: IqserRoutes = [
|
||||
},
|
||||
},
|
||||
},
|
||||
{ path: '', redirectTo: 'info', pathMatch: 'full' },
|
||||
],
|
||||
},
|
||||
];
|
||||
@ -180,6 +180,7 @@ const dossierTemplatesRoutes: IqserRoutes = [
|
||||
];
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{ path: '', redirectTo: 'dossier-templates', pathMatch: 'full' },
|
||||
{
|
||||
path: 'dossier-templates',
|
||||
children: dossierTemplatesRoutes,
|
||||
@ -271,7 +272,6 @@ const routes: IqserRoutes = [
|
||||
},
|
||||
},
|
||||
},
|
||||
{ path: '', redirectTo: 'dossier-templates', pathMatch: 'full' },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
@ -47,17 +47,19 @@ import {
|
||||
IqserDenyDirective,
|
||||
IqserHelpModeModule,
|
||||
IqserListingModule,
|
||||
IqserUploadFileModule,
|
||||
RoundCheckboxComponent,
|
||||
UploadFileComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AuditInfoDialogComponent } from './dialogs/audit-info-dialog/audit-info-dialog.component';
|
||||
import { DossierTemplateActionsComponent } from './shared/components/dossier-template-actions/dossier-template-actions.component';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { SelectComponent } from '@shared/components/select/select.component';
|
||||
import { PaginationComponent } from '@common-ui/pagination/pagination.component';
|
||||
import { AddCloneDossierTemplateDialogComponent } from './dialogs/add-clone-dossier-template-dialog/add-clone-dossier-template-dialog.component';
|
||||
import { ComponentMappingsScreenComponent } from './screens/component-mappings/component-mappings-screen.component';
|
||||
import { AnnotationIconComponent } from '@shared/components/annotation-icon/annotation-icon.component';
|
||||
import { NamePipe } from '@common-ui/users/name.pipe';
|
||||
|
||||
const dialogs = [
|
||||
AddCloneDossierTemplateDialogComponent,
|
||||
@ -109,7 +111,6 @@ const components = [
|
||||
TranslateModule,
|
||||
HumanizePipe,
|
||||
IqserListingModule,
|
||||
IqserUploadFileModule,
|
||||
IqserHelpModeModule,
|
||||
AdminSideNavComponent,
|
||||
DossierTemplateActionsComponent,
|
||||
@ -127,6 +128,10 @@ const components = [
|
||||
IqserDenyDirective,
|
||||
SelectComponent,
|
||||
PaginationComponent,
|
||||
AnnotationIconComponent,
|
||||
InitialsAvatarComponent,
|
||||
UploadFileComponent,
|
||||
NamePipe,
|
||||
],
|
||||
})
|
||||
export class AdminModule {}
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
<!--TODO: Use this for all dossier template screens -->
|
||||
|
||||
<section>
|
||||
<div class="page-header">
|
||||
<redaction-dossier-template-breadcrumbs class="flex-1"></redaction-dossier-template-breadcrumbs>
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialogComponent, IqserUploadFileModule } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, IconButtonComponent, IconButtonTypes, IqserDialogComponent, UploadFileComponent } from '@iqser/common-ui';
|
||||
import { FileAttributeEncodingTypes, IComponentMapping } from '@red/domain';
|
||||
import { FormBuilder, ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
import { MatDialogModule } from '@angular/material/dialog';
|
||||
import { MatOption } from '@angular/material/autocomplete';
|
||||
import { MatSelect } from '@angular/material/select';
|
||||
import { MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { fileAttributeEncodingTypesTranslations } from '@translations/file-attribute-encoding-types-translations';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { ComponentMappingsService } from '@services/entity-services/component-mappings.service';
|
||||
@ -35,11 +35,12 @@ interface DialogResult {
|
||||
MatFormFieldModule,
|
||||
NgForOf,
|
||||
CircleButtonComponent,
|
||||
MatDialogClose,
|
||||
IqserUploadFileModule,
|
||||
MatDialogModule,
|
||||
MatOption,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
IconButtonComponent,
|
||||
UploadFileComponent,
|
||||
],
|
||||
})
|
||||
export class AddEditComponentMappingDialogComponent
|
||||
|
||||
@ -11,7 +11,7 @@ import { ArchivedDossiersService } from '@services/dossiers/archived-dossiers.se
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect } from '@angular/material/select';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
|
||||
export interface ConfirmDeleteDossierStateDialogData {
|
||||
@ -29,6 +29,7 @@ export interface ConfirmDeleteDossierStateDialogData {
|
||||
ReactiveFormsModule,
|
||||
MatCheckbox,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
|
||||
@ -8,8 +8,8 @@ import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { AsyncPipe, DatePipe, NgIf } from '@angular/common';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IqserUsersModule } from '@common-ui/users';
|
||||
import { DossierTemplateActionsComponent } from '../../../shared/components/dossier-template-actions/dossier-template-actions.component';
|
||||
import { InitialsAvatarComponent } from '@common-ui/users';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-table-item [dossierTemplate]',
|
||||
@ -17,7 +17,7 @@ import { DossierTemplateActionsComponent } from '../../../shared/components/doss
|
||||
styleUrls: ['./table-item.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [MatTooltip, NgIf, AsyncPipe, MatIcon, TranslateModule, IqserUsersModule, DatePipe, DossierTemplateActionsComponent],
|
||||
imports: [MatTooltip, NgIf, AsyncPipe, MatIcon, TranslateModule, DatePipe, DossierTemplateActionsComponent, InitialsAvatarComponent],
|
||||
})
|
||||
export class TableItemComponent implements OnChanges {
|
||||
@Input() dossierTemplate!: DossierTemplate;
|
||||
|
||||
@ -16,7 +16,7 @@ import { MatMenu, MatMenuTrigger } from '@angular/material/menu';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect } from '@angular/material/select';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
|
||||
@ -36,6 +36,7 @@ import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
MatMenu,
|
||||
EditableInputComponent,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
FormsModule,
|
||||
|
||||
@ -23,7 +23,7 @@ import { trackByFactory } from '@iqser/common-ui/lib/utils';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatAutocomplete, MatAutocompleteTrigger, MatOption } from '@angular/material/autocomplete';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { MatSelect } from '@angular/material/select';
|
||||
import { MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { ActiveFieldsListingComponent } from './active-fields-listing/active-fields-listing.component';
|
||||
|
||||
export interface IFileAttributesCSVImportData {
|
||||
@ -46,6 +46,7 @@ export interface IFileAttributesCSVImportData {
|
||||
MatAutocomplete,
|
||||
AsyncPipe,
|
||||
MatOption,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
CircleButtonComponent,
|
||||
NgIf,
|
||||
@ -81,7 +82,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
@Inject(MAT_DIALOG_DATA) readonly data: IFileAttributesCSVImportData,
|
||||
) {
|
||||
super();
|
||||
this.form = this._getForm();
|
||||
this.form = this.#getForm();
|
||||
this.readFile();
|
||||
}
|
||||
|
||||
@ -117,7 +118,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
this.parseResult.meta.fields = Object.keys(this.parseResult.data[0]);
|
||||
}
|
||||
|
||||
this.entitiesService.setEntities(this.parseResult.meta.fields.map(field => this._buildAttribute(field)));
|
||||
this.entitiesService.setEntities(this.parseResult.meta.fields.map(field => this.#buildAttribute(field)));
|
||||
this.activeFields = [];
|
||||
|
||||
for (const entity of this.allEntities) {
|
||||
@ -155,7 +156,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
encoding: this.form.get('encoding').value,
|
||||
};
|
||||
});
|
||||
reader.readAsText(this.data.csv, this._mapEncoding(this.form.get('encoding').value));
|
||||
reader.readAsText(this.data.csv, this.#mapEncoding(this.form.get('encoding').value));
|
||||
}
|
||||
|
||||
getSample(csvColumn: string) {
|
||||
@ -245,15 +246,15 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
}, 0);
|
||||
}
|
||||
|
||||
private _getForm(): UntypedFormGroup {
|
||||
#getForm(): UntypedFormGroup {
|
||||
return this._formBuilder.group({
|
||||
filenameMappingColumnHeaderName: ['', [Validators.required, this._autocompleteStringValidator()]],
|
||||
filenameMappingColumnHeaderName: ['', [Validators.required, this.#autocompleteStringValidator()]],
|
||||
delimiter: [undefined, Validators.required],
|
||||
encoding: [this.data.existingConfiguration?.encoding, Validators.required],
|
||||
});
|
||||
}
|
||||
|
||||
private _autocompleteStringValidator(): ValidatorFn {
|
||||
#autocompleteStringValidator(): ValidatorFn {
|
||||
return (control: AbstractControl): { [key: string]: any } | null => {
|
||||
if ((this.parseResult?.meta?.fields || []).indexOf(control.value) !== -1) {
|
||||
return null; /* valid option selected */
|
||||
@ -262,7 +263,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
};
|
||||
}
|
||||
|
||||
private _buildAttribute(csvColumn: string): IField {
|
||||
#buildAttribute(csvColumn: string): IField {
|
||||
const sample = this.getSample(csvColumn);
|
||||
const isNumber = sample && !isNaN(sample);
|
||||
return {
|
||||
@ -276,7 +277,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<IFi
|
||||
};
|
||||
}
|
||||
|
||||
private _mapEncoding(encoding: string) {
|
||||
#mapEncoding(encoding: string) {
|
||||
if (!encoding) {
|
||||
return 'UTF-8';
|
||||
}
|
||||
|
||||
@ -5,9 +5,9 @@ import { DossierTemplatesService } from '@services/dossier-templates/dossier-tem
|
||||
import { DossierTemplateStatsService } from '@services/entity-services/dossier-template-stats.service';
|
||||
import { dossierTemplateStatusTranslations } from '@translations/dossier-template-status-translations';
|
||||
import { AsyncPipe, DatePipe, NgIf } from '@angular/common';
|
||||
import { IqserUsersModule } from '@common-ui/users';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { InitialsAvatarComponent } from '@common-ui/users';
|
||||
|
||||
interface Context {
|
||||
readonly dossierTemplate: DossierTemplate;
|
||||
@ -19,7 +19,7 @@ interface Context {
|
||||
templateUrl: './dossier-template-details.component.html',
|
||||
styleUrls: ['./dossier-template-details.component.scss'],
|
||||
standalone: true,
|
||||
imports: [NgIf, AsyncPipe, IqserUsersModule, MatIcon, TranslateModule, DatePipe],
|
||||
imports: [NgIf, AsyncPipe, MatIcon, TranslateModule, DatePipe, InitialsAvatarComponent],
|
||||
})
|
||||
export class DossierTemplateDetailsComponent extends ContextComponent<Context> implements OnInit {
|
||||
readonly translations = dossierTemplateStatusTranslations;
|
||||
|
||||
@ -24,7 +24,7 @@ import { MatSliderModule } from '@angular/material/slider';
|
||||
import { ColorPickerModule } from 'ngx-color-picker';
|
||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
||||
import { IqserAuthGuard, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { InitialsAvatarComponent, IqserAuthGuard, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{
|
||||
@ -72,6 +72,7 @@ const routes: IqserRoutes = [
|
||||
HasScrollbarDirective,
|
||||
IqserAllowDirective,
|
||||
MatTooltipModule,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
})
|
||||
export class WatermarkModule {}
|
||||
|
||||
@ -28,7 +28,7 @@ const routes: Routes = [
|
||||
dossiersService: ARCHIVED_DOSSIERS_SERVICE,
|
||||
skeleton: 'dossier',
|
||||
},
|
||||
loadChildren: () => import('../dossier-overview/dossier-overview.module').then(m => m.DossierOverviewModule),
|
||||
loadChildren: () => import('../dossier-overview/dossier-overview.routes'),
|
||||
},
|
||||
{
|
||||
path: `:${DOSSIER_ID}/file/:${FILE_ID}`,
|
||||
@ -38,7 +38,7 @@ const routes: Routes = [
|
||||
breadcrumbs: [BreadcrumbTypes.dossierTemplate, BreadcrumbTypes.dossier, BreadcrumbTypes.file],
|
||||
dossiersService: ARCHIVED_DOSSIERS_SERVICE,
|
||||
},
|
||||
loadChildren: () => import('../file-preview/file-preview.module').then(m => m.FilePreviewModule),
|
||||
loadChildren: () => import('../file-preview/file-preview.routes'),
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ import { IqserHelpModeModule, IqserListingModule } from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { SharedDossiersModule } from '../shared-dossiers/shared-dossiers.module';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
|
||||
@NgModule({
|
||||
declarations: [TableItemComponent, ArchivedDossiersScreenComponent],
|
||||
@ -21,6 +21,7 @@ import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
IqserListingModule,
|
||||
SharedModule,
|
||||
SharedDossiersModule,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
providers: [ConfigService],
|
||||
})
|
||||
|
||||
@ -1,4 +1,9 @@
|
||||
<ng-container (longPress)="forceReanalysisAction($event)" *ngIf="selectedFiles.length" redactionLongPress>
|
||||
<redaction-expandable-file-actions [actions]="buttons" [buttonType]="buttonType" [maxWidth]="maxWidth" [tooltipPosition]="'above'">
|
||||
<redaction-expandable-file-actions
|
||||
[actions]="buttons"
|
||||
[buttonType]="buttonType"
|
||||
[maxWidth]="maxWidth"
|
||||
[tooltipPosition]="IqserTooltipPositions.above"
|
||||
>
|
||||
</redaction-expandable-file-actions>
|
||||
</ng-container>
|
||||
|
||||
@ -3,14 +3,19 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { CircleButtonType, CircleButtonTypes } from '@iqser/common-ui';
|
||||
import { Action, ActionTypes, Dossier, File, ProcessingFileStatuses } from '@red/domain';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { LongPressEvent } from '@shared/directives/long-press.directive';
|
||||
import { LongPressDirective, LongPressEvent } from '@shared/directives/long-press.directive';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { BulkActionsService } from '../../services/bulk-actions.service';
|
||||
import { ExpandableFileActionsComponent } from '@shared/components/expandable-file-actions/expandable-file-actions.component';
|
||||
import { IqserTooltipPositions } from '@common-ui/utils';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-dossier-overview-bulk-actions [dossier] [selectedFiles]',
|
||||
templateUrl: './dossier-overview-bulk-actions.component.html',
|
||||
styleUrls: ['./dossier-overview-bulk-actions.component.scss'],
|
||||
standalone: true,
|
||||
imports: [LongPressDirective, ExpandableFileActionsComponent, NgIf],
|
||||
})
|
||||
export class DossierOverviewBulkActionsComponent implements OnChanges {
|
||||
#analysisForced: boolean;
|
||||
@ -37,6 +42,7 @@ export class DossierOverviewBulkActionsComponent implements OnChanges {
|
||||
@Input() buttonType: CircleButtonType = CircleButtonTypes.default;
|
||||
@Input() maxWidth: number;
|
||||
buttons: Action[];
|
||||
readonly IqserTooltipPositions = IqserTooltipPositions;
|
||||
|
||||
constructor(
|
||||
private readonly _permissionsService: PermissionsService,
|
||||
|
||||
@ -6,11 +6,16 @@ import { firstValueFrom, Observable } from 'rxjs';
|
||||
import { DossierStatsService } from '@services/dossiers/dossier-stats.service';
|
||||
import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service';
|
||||
import { getConfig } from '@iqser/common-ui';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { AsyncPipe, DatePipe, DecimalPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-dossier-details-stats',
|
||||
templateUrl: './dossier-details-stats.component.html',
|
||||
styleUrls: ['./dossier-details-stats.component.scss'],
|
||||
standalone: true,
|
||||
imports: [MatIcon, NgIf, AsyncPipe, TranslateModule, DatePipe, DecimalPipe, NgForOf],
|
||||
})
|
||||
export class DossierDetailsStatsComponent implements OnInit {
|
||||
@Input() dossierAttributes: DossierAttributeWithValue[];
|
||||
|
||||
@ -106,7 +106,7 @@
|
||||
<iqser-circle-button
|
||||
(action)="toggleCollapse.emit()"
|
||||
[icon]="'iqser:' + action"
|
||||
[tooltipPosition]="'before'"
|
||||
[tooltipPosition]="IqserTooltipPositions.before"
|
||||
[tooltip]="tooltip"
|
||||
></iqser-circle-button>
|
||||
</ng-template>
|
||||
|
||||
@ -13,7 +13,14 @@ import {
|
||||
} from '@red/domain';
|
||||
import { TranslateChartService } from '@services/translate-chart.service';
|
||||
import { UserService } from '@users/user.service';
|
||||
import { getConfig, ProgressBarConfigModel, Toaster } from '@iqser/common-ui';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
getConfig,
|
||||
IqserAllowDirective,
|
||||
IqserLoadingModule,
|
||||
ProgressBarConfigModel,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { workflowFileStatusTranslations } from '@translations/file-status-translations';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { combineLatestWith, firstValueFrom } from 'rxjs';
|
||||
@ -22,9 +29,16 @@ import { map, tap } from 'rxjs/operators';
|
||||
import { DossiersService } from '@services/dossiers/dossiers.service';
|
||||
import { FilesMapService } from '@services/files/files-map.service';
|
||||
import { Roles } from '@users/roles';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { getCurrentUser, InitialsAvatarComponent } from '@iqser/common-ui/lib/users';
|
||||
import { FilterService, INestedFilter } from '@iqser/common-ui/lib/filtering';
|
||||
import { ContextComponent, getParam, shareLast } from '@iqser/common-ui/lib/utils';
|
||||
import { ContextComponent, getParam, IqserTooltipPositions, shareLast } from '@iqser/common-ui/lib/utils';
|
||||
import { AsyncPipe, NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { TeamMembersComponent } from '@shared/components/team-members/team-members.component';
|
||||
import { DonutChartComponent } from '@shared/components/donut-chart/donut-chart.component';
|
||||
import { TypeFilterComponent } from '@shared/components/type-filter/type-filter.component';
|
||||
import { DossierDetailsStatsComponent } from '../dossier-details-stats/dossier-details-stats.component';
|
||||
import { AssignUserDropdownComponent } from '@shared/components/assign-user-dropdown/assign-user-dropdown.component';
|
||||
|
||||
interface DossierDetailsContext {
|
||||
needsWorkFilters: INestedFilter[] | undefined;
|
||||
@ -37,6 +51,23 @@ interface DossierDetailsContext {
|
||||
selector: 'redaction-dossier-details',
|
||||
templateUrl: './dossier-details.component.html',
|
||||
styleUrls: ['./dossier-details.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
NgTemplateOutlet,
|
||||
NgIf,
|
||||
AsyncPipe,
|
||||
CircleButtonComponent,
|
||||
IqserAllowDirective,
|
||||
TranslateModule,
|
||||
TeamMembersComponent,
|
||||
DonutChartComponent,
|
||||
IqserLoadingModule,
|
||||
NgForOf,
|
||||
TypeFilterComponent,
|
||||
DossierDetailsStatsComponent,
|
||||
AssignUserDropdownComponent,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
})
|
||||
export class DossierDetailsComponent extends ContextComponent<DossierDetailsContext> {
|
||||
#currentChartSubtitleIndex = 0;
|
||||
@ -50,6 +81,7 @@ export class DossierDetailsComponent extends ContextComponent<DossierDetailsCont
|
||||
readonly expandTooltip = _('dossier-details.expand');
|
||||
chartConfig: DonutChartConfig[] = [];
|
||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||
readonly IqserTooltipPositions = IqserTooltipPositions;
|
||||
|
||||
constructor(
|
||||
private readonly _toaster: Toaster,
|
||||
|
||||
@ -1,5 +1,17 @@
|
||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||
import { ActionConfig, CircleButtonTypes, EntitiesService, getConfig, ListingService, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import {
|
||||
ActionConfig,
|
||||
CircleButtonComponent,
|
||||
CircleButtonTypes,
|
||||
DisableStopPropagationDirective,
|
||||
EntitiesService,
|
||||
getConfig,
|
||||
IqserAllowDirective,
|
||||
IqserListingModule,
|
||||
ListingService,
|
||||
LoadingService,
|
||||
Toaster,
|
||||
} from '@iqser/common-ui';
|
||||
import { Dossier, File, IFile } from '@red/domain';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
@ -14,10 +26,30 @@ import { Roles } from '@users/roles';
|
||||
import { SortingService } from '@iqser/common-ui/lib/sorting';
|
||||
import { List, some } from '@iqser/common-ui/lib/utils';
|
||||
import { ComponentLogService } from '@services/files/component-log.service';
|
||||
import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { FileDownloadBtnComponent } from '@shared/components/buttons/file-download-btn/file-download-btn.component';
|
||||
import { ViewModeSelectionComponent } from '../view-mode-selection/view-mode-selection.component';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-dossier-overview-screen-header [dossier] [upload]',
|
||||
templateUrl: './dossier-overview-screen-header.component.html',
|
||||
standalone: true,
|
||||
imports: [
|
||||
IqserListingModule,
|
||||
CircleButtonComponent,
|
||||
MatMenuTrigger,
|
||||
IqserAllowDirective,
|
||||
AsyncPipe,
|
||||
TranslateModule,
|
||||
FileDownloadBtnComponent,
|
||||
NgIf,
|
||||
ViewModeSelectionComponent,
|
||||
DisableStopPropagationDirective,
|
||||
MatMenu,
|
||||
MatMenuItem,
|
||||
],
|
||||
})
|
||||
export class DossierOverviewScreenHeaderComponent implements OnInit {
|
||||
@Input() dossier: Dossier;
|
||||
|
||||
@ -6,12 +6,18 @@ import { DictionariesMapService } from '@services/entity-services/dictionaries-m
|
||||
import { UserService } from '@users/user.service';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { AnnotationIconComponent } from '@shared/components/annotation-icon/annotation-icon.component';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-file-workload',
|
||||
templateUrl: './file-workload.component.html',
|
||||
styleUrls: ['./file-workload.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [AnnotationIconComponent, AsyncPipe, TranslateModule, MatIcon, NgIf],
|
||||
})
|
||||
export class FileWorkloadComponent implements OnInit {
|
||||
#dossierTemplateId: string;
|
||||
|
||||
@ -2,11 +2,42 @@ import { Component, Input } from '@angular/core';
|
||||
import { getConfig } from '@iqser/common-ui';
|
||||
import { Dossier, File, IFileAttributeConfig } from '@red/domain';
|
||||
import { FileAttributesService } from '@services/entity-services/file-attributes.service';
|
||||
import { FileNameColumnComponent } from '@shared/components/file-name-column/file-name-column.component';
|
||||
import { DateColumnComponent } from '../../../shared-dossiers/components/date-column/date-column.component';
|
||||
import { FileAttributeComponent } from '../file-attribute/file-attribute.component';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { AnnotationIconComponent } from '@shared/components/annotation-icon/annotation-icon.component';
|
||||
import { FileWorkloadComponent } from './file-workload/file-workload.component';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@common-ui/users';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { OcrProgressBarComponent } from '@shared/components/ocr-progress-bar/ocr-progress-bar.component';
|
||||
import { ProcessingIndicatorComponent } from '@shared/components/processing-indicator/processing-indicator.component';
|
||||
import { StatusBarComponent } from '@common-ui/shared';
|
||||
import { FileActionsComponent } from '../../../shared-dossiers/components/file-actions/file-actions.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-table-item',
|
||||
templateUrl: './table-item.component.html',
|
||||
styleUrls: ['./table-item.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
FileNameColumnComponent,
|
||||
DateColumnComponent,
|
||||
FileAttributeComponent,
|
||||
NgIf,
|
||||
AnnotationIconComponent,
|
||||
FileWorkloadComponent,
|
||||
IqserUsersModule,
|
||||
MatIcon,
|
||||
OcrProgressBarComponent,
|
||||
ProcessingIndicatorComponent,
|
||||
StatusBarComponent,
|
||||
FileActionsComponent,
|
||||
TranslateModule,
|
||||
NgForOf,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
})
|
||||
export class TableItemComponent {
|
||||
@Input({ required: true }) file: File;
|
||||
|
||||
@ -1,18 +1,25 @@
|
||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||
import { ListingMode, ListingModes, ListingService } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, ListingMode, ListingModes, ListingService } from '@iqser/common-ui';
|
||||
import { File } from '@red/domain';
|
||||
import { ConfigService } from '../../config.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-view-mode-selection',
|
||||
templateUrl: './view-mode-selection.component.html',
|
||||
styleUrls: ['./view-mode-selection.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [CircleButtonComponent, TranslateModule, AsyncPipe, NgIf],
|
||||
})
|
||||
export class ViewModeSelectionComponent {
|
||||
readonly listingModes = ListingModes;
|
||||
|
||||
constructor(readonly configService: ConfigService, private readonly _listingService: ListingService<File>) {}
|
||||
constructor(
|
||||
readonly configService: ConfigService,
|
||||
private readonly _listingService: ListingService<File>,
|
||||
) {}
|
||||
|
||||
setListingMode(listingMode: ListingMode): void {
|
||||
if (listingMode === this.configService.listingMode) {
|
||||
|
||||
@ -1,13 +1,38 @@
|
||||
import { ChangeDetectorRef, Component, ElementRef, Input, OnInit, Optional, ViewChild } from '@angular/core';
|
||||
import { HelpModeService } from '@iqser/common-ui';
|
||||
import { DisableStopPropagationDirective, HelpModeService } from '@iqser/common-ui';
|
||||
import { Debounce, trackByFactory } from '@iqser/common-ui/lib/utils';
|
||||
import { Dossier, File, IFileAttributeConfig } from '@red/domain';
|
||||
import { FileAttributesService } from '@services/entity-services/file-attributes.service';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { RouterLink } from '@angular/router';
|
||||
import { FileStatsComponent } from '@shared/components/file-stats/file-stats.component';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@common-ui/users';
|
||||
import { FileAttributeComponent } from '../file-attribute/file-attribute.component';
|
||||
import { FileWorkloadComponent } from '../table-item/file-workload/file-workload.component';
|
||||
import { ProcessingIndicatorComponent } from '@shared/components/processing-indicator/processing-indicator.component';
|
||||
import { FileActionsComponent } from '../../../shared-dossiers/components/file-actions/file-actions.component';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-workflow-item',
|
||||
templateUrl: './workflow-item.component.html',
|
||||
styleUrls: ['./workflow-item.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
MatTooltip,
|
||||
RouterLink,
|
||||
FileStatsComponent,
|
||||
IqserUsersModule,
|
||||
FileAttributeComponent,
|
||||
FileWorkloadComponent,
|
||||
ProcessingIndicatorComponent,
|
||||
FileActionsComponent,
|
||||
NgIf,
|
||||
DisableStopPropagationDirective,
|
||||
AsyncPipe,
|
||||
NgForOf,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
})
|
||||
export class WorkflowItemComponent implements OnInit {
|
||||
@ViewChild('actionsWrapper', { static: true }) private _actionsWrapper: ElementRef;
|
||||
|
||||
@ -1,75 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
DisableStopPropagationDirective,
|
||||
DynamicInputComponent,
|
||||
HasScrollbarDirective,
|
||||
IqserAllowDirective,
|
||||
IqserHelpModeModule,
|
||||
IqserListingModule,
|
||||
IqserLoadingModule,
|
||||
IqserRoutes,
|
||||
StopPropagationDirective,
|
||||
} from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DossierOverviewScreenComponent } from './screen/dossier-overview-screen.component';
|
||||
import { DossierOverviewBulkActionsComponent } from './components/bulk-actions/dossier-overview-bulk-actions.component';
|
||||
import { DossierDetailsComponent } from './components/dossier-details/dossier-details.component';
|
||||
import { DossierDetailsStatsComponent } from './components/dossier-details-stats/dossier-details-stats.component';
|
||||
import { TableItemComponent } from './components/table-item/table-item.component';
|
||||
import { SharedDossiersModule } from '../shared-dossiers/shared-dossiers.module';
|
||||
import { FileWorkloadComponent } from './components/table-item/file-workload/file-workload.component';
|
||||
import { WorkflowItemComponent } from './components/workflow-item/workflow-item.component';
|
||||
import { DossierOverviewScreenHeaderComponent } from './components/screen-header/dossier-overview-screen-header.component';
|
||||
import { ViewModeSelectionComponent } from './components/view-mode-selection/view-mode-selection.component';
|
||||
import { FileAttributeComponent } from './components/file-attribute/file-attribute.component';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { StatusBarComponent } from '@iqser/common-ui/lib/shared';
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{
|
||||
path: '',
|
||||
component: DossierOverviewScreenComponent,
|
||||
pathMatch: 'full',
|
||||
data: {
|
||||
reuse: true,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
DossierOverviewScreenComponent,
|
||||
DossierOverviewBulkActionsComponent,
|
||||
DossierDetailsComponent,
|
||||
DossierDetailsStatsComponent,
|
||||
FileWorkloadComponent,
|
||||
TableItemComponent,
|
||||
WorkflowItemComponent,
|
||||
DossierOverviewScreenHeaderComponent,
|
||||
ViewModeSelectionComponent,
|
||||
],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
SharedDossiersModule,
|
||||
TranslateModule,
|
||||
IqserHelpModeModule,
|
||||
IqserUsersModule,
|
||||
IqserListingModule,
|
||||
IqserLoadingModule,
|
||||
SharedModule,
|
||||
CircleButtonComponent,
|
||||
StatusBarComponent,
|
||||
StopPropagationDirective,
|
||||
HasScrollbarDirective,
|
||||
DynamicInputComponent,
|
||||
IqserAllowDirective,
|
||||
DisableStopPropagationDirective,
|
||||
FileAttributeComponent,
|
||||
],
|
||||
})
|
||||
export class DossierOverviewModule {}
|
||||
@ -0,0 +1,15 @@
|
||||
import { IqserRoutes } from '@iqser/common-ui';
|
||||
import DossierOverviewScreenComponent from './screen/dossier-overview-screen.component';
|
||||
import { FileAssignService } from '../shared-dossiers/services/file-assign.service';
|
||||
|
||||
export default [
|
||||
{
|
||||
path: '',
|
||||
component: DossierOverviewScreenComponent,
|
||||
pathMatch: 'full',
|
||||
data: {
|
||||
reuse: true,
|
||||
},
|
||||
providers: [FileAssignService],
|
||||
},
|
||||
] satisfies IqserRoutes;
|
||||
@ -4,6 +4,7 @@ import {
|
||||
CircleButtonTypes,
|
||||
CustomError,
|
||||
ErrorService,
|
||||
IqserListingModule,
|
||||
IqserPermissionsService,
|
||||
ListingComponent,
|
||||
ListingModes,
|
||||
@ -44,13 +45,34 @@ import { filter, skip, switchMap, tap } from 'rxjs/operators';
|
||||
import { ConfigService } from '../config.service';
|
||||
import { BulkActionsService } from '../services/bulk-actions.service';
|
||||
import { DossiersCacheService } from '@services/dossiers/dossiers-cache.service';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { DossierOverviewScreenHeaderComponent } from '../components/screen-header/dossier-overview-screen-header.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { WorkflowItemComponent } from '../components/workflow-item/workflow-item.component';
|
||||
import { DossierDetailsComponent } from '../components/dossier-details/dossier-details.component';
|
||||
import { DossierOverviewBulkActionsComponent } from '../components/bulk-actions/dossier-overview-bulk-actions.component';
|
||||
import { TableItemComponent } from '../components/table-item/table-item.component';
|
||||
import { TypeFilterComponent } from '@shared/components/type-filter/type-filter.component';
|
||||
|
||||
@Component({
|
||||
templateUrl: './dossier-overview-screen.component.html',
|
||||
styleUrls: ['./dossier-overview-screen.component.scss'],
|
||||
providers: [...listingProvidersFactory(DossierOverviewScreenComponent), ConfigService, BulkActionsService, dossiersServiceProvider],
|
||||
standalone: true,
|
||||
imports: [
|
||||
DossierOverviewScreenHeaderComponent,
|
||||
AsyncPipe,
|
||||
IqserListingModule,
|
||||
TranslateModule,
|
||||
NgIf,
|
||||
WorkflowItemComponent,
|
||||
DossierDetailsComponent,
|
||||
DossierOverviewBulkActionsComponent,
|
||||
TableItemComponent,
|
||||
TypeFilterComponent,
|
||||
],
|
||||
})
|
||||
export class DossierOverviewScreenComponent extends ListingComponent<File> implements OnInit, OnAttach, OnDetach, OnDestroy {
|
||||
export default class DossierOverviewScreenComponent extends ListingComponent<File> implements OnInit, OnAttach, OnDetach, OnDestroy {
|
||||
#dossier: Dossier;
|
||||
@ViewChild('needsWorkFilterTemplate', { read: TemplateRef, static: true })
|
||||
private readonly _needsWorkFilterTemplate: TemplateRef<unknown>;
|
||||
|
||||
@ -13,8 +13,11 @@ import { DossierWorkloadColumnComponent } from './components/dossier-workload-co
|
||||
import { DossierDocumentsStatusComponent } from './components/dossier-documents-status/dossier-documents-status.component';
|
||||
import { DossierFilesGuard } from '@guards/dossier-files-guard';
|
||||
import { ACTIVE_DOSSIERS_SERVICE } from '../../tokens';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { StatusBarComponent } from '@iqser/common-ui/lib/shared';
|
||||
import { TypeFilterComponent } from '@shared/components/type-filter/type-filter.component';
|
||||
import { DateColumnComponent } from '../shared-dossiers/components/date-column/date-column.component';
|
||||
import { AnnotationIconComponent } from '@shared/components/annotation-icon/annotation-icon.component';
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{
|
||||
@ -46,6 +49,10 @@ const routes: IqserRoutes = [
|
||||
IqserListingModule,
|
||||
StatusBarComponent,
|
||||
HasScrollbarDirective,
|
||||
TypeFilterComponent,
|
||||
DateColumnComponent,
|
||||
AnnotationIconComponent,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
})
|
||||
export class DossiersListingModule {}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Component, computed, Input, OnChanges } from '@angular/core';
|
||||
import { getConfig, HelpModeService, IqserPermissionsService } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, getConfig, HelpModeService, IqserAllowDirective, IqserPermissionsService } from '@iqser/common-ui';
|
||||
import { AnnotationPermissions } from '@models/file/annotation.permissions';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
@ -11,6 +11,8 @@ import { FilePreviewStateService } from '../../services/file-preview-state.servi
|
||||
import { MultiSelectService } from '../../services/multi-select.service';
|
||||
import { ViewModeService } from '../../services/view-mode.service';
|
||||
import { SkippedService } from '../../services/skipped.service';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
export const AnnotationButtonTypes = {
|
||||
default: 'default',
|
||||
@ -23,6 +25,8 @@ export type AnnotationButtonType = keyof typeof AnnotationButtonTypes;
|
||||
selector: 'redaction-annotation-actions',
|
||||
templateUrl: './annotation-actions.component.html',
|
||||
styleUrls: ['./annotation-actions.component.scss'],
|
||||
standalone: true,
|
||||
imports: [CircleButtonComponent, NgIf, TranslateModule, AsyncPipe, IqserAllowDirective],
|
||||
})
|
||||
export class AnnotationActionsComponent implements OnChanges {
|
||||
#annotations: AnnotationWrapper[] = [];
|
||||
|
||||
@ -4,11 +4,17 @@ import { MultiSelectService } from '../../services/multi-select.service';
|
||||
import { annotationTypesTranslations } from '@translations/annotation-types-translations';
|
||||
import { Roles } from '@users/roles';
|
||||
import { getConfig } from '@iqser/common-ui';
|
||||
import { AnnotationIconComponent } from '@shared/components/annotation-icon/annotation-icon.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IqserDenyDirective, RoundCheckboxComponent } from '@iqser/common-ui';
|
||||
import { NgIf, UpperCasePipe } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-annotation-card',
|
||||
templateUrl: './annotation-card.component.html',
|
||||
styleUrls: ['./annotation-card.component.scss'],
|
||||
standalone: true,
|
||||
imports: [AnnotationIconComponent, TranslateModule, IqserDenyDirective, NgIf, RoundCheckboxComponent, UpperCasePipe],
|
||||
})
|
||||
export class AnnotationCardComponent {
|
||||
protected readonly roles = Roles;
|
||||
|
||||
@ -3,10 +3,14 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { KeysOf } from '@iqser/common-ui/lib/utils';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { ListItem } from '@models/file/list-item';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
||||
import { annotationChangesTranslations } from '@translations/annotation-changes-translations';
|
||||
import { MultiSelectService } from '../../services/multi-select.service';
|
||||
import { LogEntryEngine, LogEntryEngines } from '@red/domain';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
|
||||
|
||||
interface Engine {
|
||||
readonly icon: string;
|
||||
@ -32,6 +36,8 @@ const changesProperties: KeysOf<AnnotationWrapper>[] = [
|
||||
selector: 'redaction-annotation-details [annotation]',
|
||||
templateUrl: './annotation-details.component.html',
|
||||
styleUrls: ['./annotation-details.component.scss'],
|
||||
standalone: true,
|
||||
imports: [NgIf, MatTooltip, MatIcon, CdkOverlayOrigin, NgForOf, CdkConnectedOverlay, TranslateModule],
|
||||
})
|
||||
export class AnnotationDetailsComponent implements OnChanges {
|
||||
@Input() annotation: ListItem<AnnotationWrapper>;
|
||||
|
||||
@ -3,10 +3,14 @@ import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { BehaviorSubject, filter, Subscription } from 'rxjs';
|
||||
import { switchMap, tap } from 'rxjs/operators';
|
||||
import { AnnotationsListingService } from '../../services/annotations-listing.service';
|
||||
import { AnnotationCardComponent } from '../annotation-card/annotation-card.component';
|
||||
import { AnnotationReferencesPageIndicatorComponent } from '../annotation-references-page-indicator/annotation-references-page-indicator.component';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-annotation-reference [annotation]',
|
||||
templateUrl: './annotation-reference.component.html',
|
||||
standalone: true,
|
||||
imports: [AnnotationCardComponent, AnnotationReferencesPageIndicatorComponent],
|
||||
})
|
||||
export class AnnotationReferenceComponent implements OnChanges, OnDestroy {
|
||||
@Input() annotation: AnnotationWrapper;
|
||||
@ -14,7 +18,10 @@ export class AnnotationReferenceComponent implements OnChanges, OnDestroy {
|
||||
readonly #annotationChanged$ = new BehaviorSubject<AnnotationWrapper>(undefined);
|
||||
readonly #subscription: Subscription;
|
||||
|
||||
constructor(private readonly _listingService: AnnotationsListingService, private readonly _changeRef: ChangeDetectorRef) {
|
||||
constructor(
|
||||
private readonly _listingService: AnnotationsListingService,
|
||||
private readonly _changeRef: ChangeDetectorRef,
|
||||
) {
|
||||
const annotationsChanged$ = this.#annotationChanged$.pipe(
|
||||
filter(annotation => !!annotation),
|
||||
switchMap(annotation => this._listingService.isSelected$(annotation)),
|
||||
|
||||
@ -5,11 +5,28 @@ import { Observable, switchMap } from 'rxjs';
|
||||
import { AnnotationsListingService } from '../../services/annotations-listing.service';
|
||||
import { filter } from 'rxjs/operators';
|
||||
import { toObservable } from '@angular/core/rxjs-interop';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { CircleButtonComponent } from '@iqser/common-ui';
|
||||
import { AnnotationCardComponent } from '../annotation-card/annotation-card.component';
|
||||
import { AnnotationReferencesPageIndicatorComponent } from '../annotation-references-page-indicator/annotation-references-page-indicator.component';
|
||||
import { AnnotationReferenceComponent } from '../annotation-reference/annotation-reference.component';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-annotation-references-list',
|
||||
templateUrl: './annotation-references-list.component.html',
|
||||
styleUrls: ['./annotation-references-list.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
NgIf,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
AsyncPipe,
|
||||
AnnotationCardComponent,
|
||||
AnnotationReferencesPageIndicatorComponent,
|
||||
AnnotationReferenceComponent,
|
||||
NgForOf,
|
||||
],
|
||||
})
|
||||
export class AnnotationReferencesListComponent {
|
||||
@Output() readonly referenceClicked = new EventEmitter<AnnotationWrapper>();
|
||||
|
||||
@ -1,9 +1,12 @@
|
||||
import { Component, Input } from '@angular/core';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-annotation-references-page-indicator',
|
||||
templateUrl: './annotation-references-page-indicator.component.html',
|
||||
styleUrls: ['./annotation-references-page-indicator.component.scss'],
|
||||
standalone: true,
|
||||
imports: [MatIcon],
|
||||
})
|
||||
export class AnnotationReferencesPageIndicatorComponent {
|
||||
@Input() number: number;
|
||||
|
||||
@ -1,15 +1,35 @@
|
||||
import { Component, HostBinding, inject, Input, OnChanges } from '@angular/core';
|
||||
import { getConfig } from '@iqser/common-ui';
|
||||
import { getConfig, StopPropagationDirective } from '@iqser/common-ui';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { ListItem } from '@models/file/list-item';
|
||||
import { MultiSelectService } from '../../services/multi-select.service';
|
||||
import { PdfProxyService } from '../../services/pdf-proxy.service';
|
||||
import { ActionsHelpModeKeys } from '../../utils/constants';
|
||||
import { AnnotationCardComponent } from '../annotation-card/annotation-card.component';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { AnnotationActionsComponent } from '../annotation-actions/annotation-actions.component';
|
||||
import { CommentsComponent } from '../comments/comments.component';
|
||||
import { AnnotationDetailsComponent } from '../annotation-details/annotation-details.component';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-annotation-wrapper',
|
||||
templateUrl: './annotation-wrapper.component.html',
|
||||
styleUrls: ['./annotation-wrapper.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
AnnotationCardComponent,
|
||||
NgIf,
|
||||
MatTooltip,
|
||||
TranslateModule,
|
||||
StopPropagationDirective,
|
||||
MatIcon,
|
||||
AnnotationActionsComponent,
|
||||
CommentsComponent,
|
||||
AnnotationDetailsComponent,
|
||||
],
|
||||
})
|
||||
export class AnnotationWrapperComponent implements OnChanges {
|
||||
readonly #isDocumine = getConfig().IS_DOCUMINE;
|
||||
|
||||
@ -11,11 +11,17 @@ import { AnnotationReferencesService } from '../../services/annotation-reference
|
||||
import { AnnotationsListingService } from '../../services/annotations-listing.service';
|
||||
import { MultiSelectService } from '../../services/multi-select.service';
|
||||
import { ViewModeService } from '../../services/view-mode.service';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { HighlightsSeparatorComponent } from '../highlights-separator/highlights-separator.component';
|
||||
import { AnnotationWrapperComponent } from '../annotation-wrapper/annotation-wrapper.component';
|
||||
import { AnnotationReferencesListComponent } from '../annotation-references-list/annotation-references-list.component';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-annotations-list',
|
||||
templateUrl: './annotations-list.component.html',
|
||||
styleUrls: ['./annotations-list.component.scss'],
|
||||
standalone: true,
|
||||
imports: [NgForOf, NgIf, HighlightsSeparatorComponent, AnnotationWrapperComponent, AnnotationReferencesListComponent],
|
||||
})
|
||||
export class AnnotationsListComponent extends HasScrollbarDirective {
|
||||
@Input({ required: true }) annotations: ListItem<AnnotationWrapper>[];
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Component, inject, Input, OnChanges, signal, SimpleChanges, ViewChild } from '@angular/core';
|
||||
import { InputWithActionComponent, LoadingService } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, InputWithActionComponent, LoadingService } from '@iqser/common-ui';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { trackByFactory } from '@iqser/common-ui/lib/utils';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
@ -8,11 +8,17 @@ import { CommentsApiService } from '@services/comments-api.service';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { NGXLogger } from 'ngx-logger';
|
||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||
import { DatePipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { NamePipe } from '@common-ui/users/name.pipe';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-comments',
|
||||
templateUrl: './comments.component.html',
|
||||
styleUrls: ['./comments.component.scss'],
|
||||
standalone: true,
|
||||
imports: [NgForOf, MatTooltip, NamePipe, DatePipe, CircleButtonComponent, NgIf, InputWithActionComponent, TranslateModule],
|
||||
})
|
||||
export class CommentsComponent implements OnChanges {
|
||||
readonly #commentsApiService = inject(CommentsApiService);
|
||||
|
||||
@ -9,6 +9,10 @@ import { FileAttributesService } from '@services/entity-services/file-attributes
|
||||
import { ContextComponent } from '@iqser/common-ui/lib/utils';
|
||||
import { toSignal } from '@angular/core/rxjs-interop';
|
||||
import { setLocalStorageDataByFileId } from '@utils/local-storage';
|
||||
import { CircleButtonComponent, HasScrollbarDirective } from '@iqser/common-ui';
|
||||
import { DatePipe, NgForOf, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
|
||||
interface FileAttribute {
|
||||
label: string;
|
||||
@ -24,6 +28,8 @@ interface Context {
|
||||
selector: 'redaction-document-info',
|
||||
templateUrl: './document-info.component.html',
|
||||
styleUrls: ['./document-info.component.scss'],
|
||||
standalone: true,
|
||||
imports: [CircleButtonComponent, NgIf, TranslateModule, HasScrollbarDirective, NgForOf, DatePipe, MatIcon],
|
||||
})
|
||||
export class DocumentInfoComponent extends ContextComponent<Context> {
|
||||
protected readonly _state = inject(FilePreviewStateService);
|
||||
|
||||
@ -1,8 +1,18 @@
|
||||
import { ChangeDetectorRef, Component, computed, effect, ElementRef, HostListener, OnDestroy, OnInit, ViewChild } from '@angular/core';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { CircleButtonTypes, getConfig, IconButtonTypes } from '@iqser/common-ui';
|
||||
import { FilterService, INestedFilter } from '@iqser/common-ui/lib/filtering';
|
||||
import {
|
||||
CapitalizePipe,
|
||||
CircleButtonComponent,
|
||||
CircleButtonTypes,
|
||||
EmptyStateComponent,
|
||||
getConfig,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
PreventDefaultDirective,
|
||||
RoundCheckboxComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { FilterService, INestedFilter, PopupFilterComponent } from '@iqser/common-ui/lib/filtering';
|
||||
import { AutoUnsubscribe, Debounce, IqserEventTarget } from '@iqser/common-ui/lib/utils';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { ListItem } from '@models/file/list-item';
|
||||
@ -26,6 +36,15 @@ import { SkippedService } from '../../services/skipped.service';
|
||||
import { ViewModeService } from '../../services/view-mode.service';
|
||||
import { workloadTranslations } from '@translations/workload-translations';
|
||||
import { WorkflowFileStatuses } from '@red/domain';
|
||||
import { AnnotationsListComponent } from '../annotations-list/annotations-list.component';
|
||||
import { PageExclusionComponent } from '../page-exclusion/page-exclusion.component';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { ReadonlyBannerComponent } from '../readonly-banner/readonly-banner.component';
|
||||
import { AnnotationActionsComponent } from '../annotation-actions/annotation-actions.component';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { PagesComponent } from '../pages/pages.component';
|
||||
|
||||
const COMMAND_KEY_ARRAY = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Escape'];
|
||||
const ALL_HOTKEY_ARRAY = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'];
|
||||
@ -34,6 +53,26 @@ const ALL_HOTKEY_ARRAY = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'];
|
||||
selector: 'redaction-file-workload',
|
||||
templateUrl: './file-workload.component.html',
|
||||
styleUrls: ['./file-workload.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
IconButtonComponent,
|
||||
AnnotationsListComponent,
|
||||
PageExclusionComponent,
|
||||
NgIf,
|
||||
CircleButtonComponent,
|
||||
TranslateModule,
|
||||
PreventDefaultDirective,
|
||||
AsyncPipe,
|
||||
PopupFilterComponent,
|
||||
ReadonlyBannerComponent,
|
||||
RoundCheckboxComponent,
|
||||
AnnotationActionsComponent,
|
||||
MatTooltip,
|
||||
MatIcon,
|
||||
PagesComponent,
|
||||
EmptyStateComponent,
|
||||
CapitalizePipe,
|
||||
],
|
||||
})
|
||||
export class FileWorkloadComponent extends AutoUnsubscribe implements OnInit, OnDestroy {
|
||||
@ViewChild('annotationsElement') private readonly _annotationsElement: ElementRef;
|
||||
|
||||
@ -9,8 +9,8 @@
|
||||
*allow="roles.highlights.convert"
|
||||
[icon]="'red:convert'"
|
||||
[size]="28"
|
||||
[tooltipPosition]="'above'"
|
||||
[tooltip]="'file-preview.highlights.convert' | translate"
|
||||
tooltipPosition="above"
|
||||
class="mr-2"
|
||||
></iqser-circle-button>
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
*allow="roles.highlights.delete"
|
||||
[icon]="'iqser:trash'"
|
||||
[size]="28"
|
||||
[tooltipPosition]="'above'"
|
||||
[tooltip]="'file-preview.highlights.remove' | translate"
|
||||
tooltipPosition="above"
|
||||
></iqser-circle-button>
|
||||
</div>
|
||||
|
||||
@ -6,11 +6,17 @@ import { FileDataService } from '../../services/file-data.service';
|
||||
import { FilePreviewDialogService } from '../../services/file-preview-dialog.service';
|
||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||
import { MultiSelectService } from '../../services/multi-select.service';
|
||||
import { AnnotationIconComponent } from '@shared/components/annotation-icon/annotation-icon.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { CircleButtonComponent, IqserAllowDirective } from '@iqser/common-ui';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-highlights-separator',
|
||||
templateUrl: './highlights-separator.component.html',
|
||||
styleUrls: ['./highlights-separator.component.scss'],
|
||||
standalone: true,
|
||||
imports: [AnnotationIconComponent, TranslateModule, CircleButtonComponent, NgIf, IqserAllowDirective],
|
||||
})
|
||||
export class HighlightsSeparatorComponent {
|
||||
@Input({ required: true }) highlightGroup: EarmarkGroup;
|
||||
|
||||
@ -1,16 +1,20 @@
|
||||
import { Component, computed, ViewChild } from '@angular/core';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { InputWithActionComponent, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, HasScrollbarDirective, InputWithActionComponent, LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { IPageRange } from '@red/domain';
|
||||
import { ReanalysisService } from '@services/reanalysis.service';
|
||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||
import { extractPageRanges } from '@utils/page-ranges-mapper';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-page-exclusion',
|
||||
templateUrl: './page-exclusion.component.html',
|
||||
styleUrls: ['./page-exclusion.component.scss'],
|
||||
standalone: true,
|
||||
imports: [InputWithActionComponent, TranslateModule, NgIf, HasScrollbarDirective, NgForOf, CircleButtonComponent],
|
||||
})
|
||||
export class PageExclusionComponent {
|
||||
readonly excludedRanges = computed(() => {
|
||||
|
||||
@ -10,11 +10,15 @@ import { ViewedPagesMapService } from '@services/files/viewed-pages-map.service'
|
||||
import { Observable, pairwise } from 'rxjs';
|
||||
import { PdfViewer } from '../../../pdf-viewer/services/pdf-viewer.service';
|
||||
import { NGXLogger } from 'ngx-logger';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-page-indicator',
|
||||
templateUrl: './page-indicator.component.html',
|
||||
styleUrls: ['./page-indicator.component.scss'],
|
||||
standalone: true,
|
||||
imports: [NgIf, AsyncPipe, MatIcon],
|
||||
})
|
||||
export class PageIndicatorComponent implements OnChanges {
|
||||
readonly #config = getConfig<AppConfig>();
|
||||
|
||||
@ -8,11 +8,15 @@ import { FilePreviewStateService } from '../../services/file-preview-state.servi
|
||||
import { ViewedPagesMapService } from '@services/files/viewed-pages-map.service';
|
||||
import { ViewedPage } from '@red/domain';
|
||||
import scrollIntoView from 'scroll-into-view-if-needed';
|
||||
import { PageIndicatorComponent } from '../page-indicator/page-indicator.component';
|
||||
import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-pages',
|
||||
templateUrl: './pages.component.html',
|
||||
styleUrls: ['./pages.component.scss'],
|
||||
standalone: true,
|
||||
imports: [PageIndicatorComponent, AsyncPipe, NgForOf, NgIf],
|
||||
})
|
||||
export class PagesComponent implements AfterViewInit {
|
||||
readonly #state = inject(FilePreviewStateService);
|
||||
|
||||
@ -1,10 +1,17 @@
|
||||
import { Component, inject, Input } from '@angular/core';
|
||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||
import { OcrProgressBarComponent } from '@shared/components/ocr-progress-bar/ocr-progress-bar.component';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { MatProgressBar } from '@angular/material/progress-bar';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-readonly-banner',
|
||||
templateUrl: './readonly-banner.component.html',
|
||||
styleUrls: ['./readonly-banner.component.scss'],
|
||||
standalone: true,
|
||||
imports: [OcrProgressBarComponent, NgIf, MatProgressBar, MatIcon, TranslateModule],
|
||||
})
|
||||
export class ReadonlyBannerComponent {
|
||||
protected readonly _state = inject(FilePreviewStateService);
|
||||
|
||||
@ -1,19 +1,24 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { DocumentInfoService } from '../../services/document-info.service';
|
||||
import { ExcludedPagesService } from '../../services/excluded-pages.service';
|
||||
import { PdfViewer } from '../../../pdf-viewer/services/pdf-viewer.service';
|
||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||
import { EmptyStateComponent } from '@iqser/common-ui';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DocumentInfoComponent } from '../document-info/document-info.component';
|
||||
import { FileWorkloadComponent } from '../file-workload/file-workload.component';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-file-preview-right-container',
|
||||
templateUrl: './file-preview-right-container.component.html',
|
||||
styleUrls: ['./file-preview-right-container.component.scss'],
|
||||
standalone: true,
|
||||
imports: [EmptyStateComponent, NgIf, TranslateModule, DocumentInfoComponent, FileWorkloadComponent],
|
||||
})
|
||||
export class FilePreviewRightContainerComponent {
|
||||
constructor(
|
||||
readonly pdf: PdfViewer,
|
||||
readonly state: FilePreviewStateService,
|
||||
readonly documentInfoService: DocumentInfoService,
|
||||
readonly excludedPagesService: ExcludedPagesService,
|
||||
) {}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { Component, computed, HostListener, NgZone, OnDestroy, OnInit } from '@angular/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { LoadingService, Toaster } from '@iqser/common-ui';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { CircleButtonComponent, LoadingService, StopPropagationDirective, Toaster } from '@iqser/common-ui';
|
||||
import { getCurrentUser, InitialsAvatarComponent } from '@iqser/common-ui/lib/users';
|
||||
import { File, User } from '@red/domain';
|
||||
import { FilesService } from '@services/files/files.service';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
@ -12,11 +12,25 @@ import { FileAssignService } from '../../../shared-dossiers/services/file-assign
|
||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||
import { PdfViewer } from '../../../pdf-viewer/services/pdf-viewer.service';
|
||||
import { Bind } from '@common-ui/utils';
|
||||
import { AssignUserDropdownComponent } from '@shared/components/assign-user-dropdown/assign-user-dropdown.component';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { StatusBarComponent } from '@common-ui/shared';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-user-management',
|
||||
templateUrl: './user-management.component.html',
|
||||
styleUrls: ['./user-management.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
AssignUserDropdownComponent,
|
||||
NgIf,
|
||||
StopPropagationDirective,
|
||||
InitialsAvatarComponent,
|
||||
StatusBarComponent,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
],
|
||||
})
|
||||
export class UserManagementComponent implements OnInit, OnDestroy {
|
||||
protected readonly _canAssignToSelf = computed(() => this.permissionsService.canAssignToSelf(this.state.file(), this.state.dossier()));
|
||||
|
||||
@ -4,12 +4,16 @@ import { Roles } from '@users/roles';
|
||||
import { FileDataService } from '../../services/file-data.service';
|
||||
import { FilePreviewStateService } from '../../services/file-preview-state.service';
|
||||
import { ViewModeService } from '../../services/view-mode.service';
|
||||
import { getConfig } from '@iqser/common-ui';
|
||||
import { getConfig, IqserDenyDirective } from '@iqser/common-ui';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-view-switch',
|
||||
templateUrl: './view-switch.component.html',
|
||||
styleUrls: ['./view-switch.component.scss'],
|
||||
standalone: true,
|
||||
imports: [MatTooltip, TranslateModule, IqserDenyDirective],
|
||||
})
|
||||
export class ViewSwitchComponent {
|
||||
protected readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||
|
||||
@ -1,7 +1,17 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { FormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent, IqserPermissionsService } from '@iqser/common-ui';
|
||||
import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
DetailsRadioOption,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserDenyDirective,
|
||||
IqserDialogComponent,
|
||||
IqserPermissionsService,
|
||||
} from '@iqser/common-ui';
|
||||
import { Dictionary, Dossier, IAddRedactionRequest } from '@red/domain';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { DictionaryService } from '@services/entity-services/dictionary.service';
|
||||
@ -12,10 +22,33 @@ import { AddHintData, AddHintResult } from '../../utils/dialog-types';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults';
|
||||
import { stringToBoolean } from '@utils/functions';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
|
||||
@Component({
|
||||
templateUrl: './add-hint-dialog.component.html',
|
||||
styleUrls: ['./add-hint-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
DetailsRadioComponent,
|
||||
IqserDenyDirective,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
MatTooltip,
|
||||
NgIf,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
MatDialogClose,
|
||||
],
|
||||
})
|
||||
export class AddHintDialogComponent extends IqserDialogComponent<AddHintDialogComponent, AddHintData, AddHintResult> implements OnInit {
|
||||
#applyToAllDossiers: boolean;
|
||||
|
||||
@ -1,11 +1,16 @@
|
||||
import { Component, Inject, OnInit } from '@angular/core';
|
||||
import { UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { BaseDialogComponent } from '@iqser/common-ui';
|
||||
import { ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogClose, MatDialogRef } from '@angular/material/dialog';
|
||||
import { BaseDialogComponent, CircleButtonComponent, HasScrollbarDirective, IconButtonComponent } from '@iqser/common-ui';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { Dossier } from '@red/domain';
|
||||
import { JustificationsService } from '@services/entity-services/justifications.service';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
export interface LegalBasisOption {
|
||||
label?: string;
|
||||
@ -15,6 +20,22 @@ export interface LegalBasisOption {
|
||||
|
||||
@Component({
|
||||
templateUrl: './change-legal-basis-dialog.component.html',
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
MatTooltip,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
MatDialogClose,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
NgIf,
|
||||
],
|
||||
})
|
||||
export class ChangeLegalBasisDialogComponent extends BaseDialogComponent implements OnInit {
|
||||
legalOptions: LegalBasisOption[] = [];
|
||||
|
||||
@ -1,13 +1,34 @@
|
||||
import { Component, inject, OnInit } from '@angular/core';
|
||||
import { FormBuilder } from '@angular/forms';
|
||||
import { IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
|
||||
import { CircleButtonComponent, HasScrollbarDirective, IconButtonComponent, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { Dictionary, IAddRedactionRequest } from '@red/domain';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { DictionaryService } from '@services/entity-services/dictionary.service';
|
||||
import { AddAnnotationData, AddAnnotationResult } from '../../../utils/dialog-types';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { NgForOf } from '@angular/common';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
|
||||
@Component({
|
||||
templateUrl: './add-annotation-dialog.component.html',
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
MatTooltip,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
MatDialogClose,
|
||||
],
|
||||
})
|
||||
export class AddAnnotationDialogComponent
|
||||
extends IqserDialogComponent<AddAnnotationDialogComponent, AddAnnotationData, AddAnnotationResult>
|
||||
|
||||
@ -1,16 +1,39 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { FormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { IconButtonTypes, IqserDialogComponent, IqserPermissionsService } from '@iqser/common-ui';
|
||||
import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';
|
||||
import { CircleButtonComponent, HasScrollbarDirective, IconButtonComponent, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { Dictionary, Dossier, SuperTypes } from '@red/domain';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { DictionaryService } from '@services/entity-services/dictionary.service';
|
||||
import { JustificationsService } from '@services/entity-services/justifications.service';
|
||||
import { Roles } from '@users/roles';
|
||||
import { EditRedactionData, EditRedactResult } from '../../../utils/dialog-types';
|
||||
import { SelectedAnnotationsListComponent } from '../../../components/selected-annotations-list/selected-annotations-list.component';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
|
||||
@Component({
|
||||
templateUrl: 'edit-annotation-dialog.component.html',
|
||||
styleUrls: ['edit-annotation-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
SelectedAnnotationsListComponent,
|
||||
NgIf,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
MatTooltip,
|
||||
HasScrollbarDirective,
|
||||
TranslateModule,
|
||||
IconButtonComponent,
|
||||
CircleButtonComponent,
|
||||
MatDialogClose,
|
||||
],
|
||||
})
|
||||
export class EditAnnotationDialogComponent
|
||||
extends IqserDialogComponent<EditAnnotationDialogComponent, EditRedactionData, EditRedactResult>
|
||||
@ -24,10 +47,8 @@ export class EditAnnotationDialogComponent
|
||||
form: UntypedFormGroup;
|
||||
|
||||
constructor(
|
||||
private readonly _justificationsService: JustificationsService,
|
||||
private readonly _activeDossiersService: ActiveDossiersService,
|
||||
private readonly _dictionaryService: DictionaryService,
|
||||
private readonly _iqserPermissionsService: IqserPermissionsService,
|
||||
private readonly _formBuilder: FormBuilder,
|
||||
) {
|
||||
super();
|
||||
|
||||
@ -1,12 +1,40 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { FormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
DetailsRadioOption,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserDialogComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';
|
||||
import { RemoveAnnotationData, RemoveAnnotationResult } from '../../../utils/dialog-types';
|
||||
import { getRemoveRedactionOptions, RemoveAnnotationOption, RemoveAnnotationOptions } from '../../../utils/dialog-options';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';
|
||||
import { NgIf, NgStyle } from '@angular/common';
|
||||
import { ReplaceNbspPipe } from '@common-ui/pipes/replace-nbsp.pipe';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
|
||||
@Component({
|
||||
templateUrl: 'remove-annotation-dialog.component.html',
|
||||
styleUrls: ['remove-annotation-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
TranslateModule,
|
||||
CdkFixedSizeVirtualScroll,
|
||||
NgStyle,
|
||||
CdkVirtualForOf,
|
||||
ReplaceNbspPipe,
|
||||
DetailsRadioComponent,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
CircleButtonComponent,
|
||||
MatDialogClose,
|
||||
NgIf,
|
||||
],
|
||||
})
|
||||
export class RemoveAnnotationDialogComponent extends IqserDialogComponent<
|
||||
RemoveAnnotationDialogComponent,
|
||||
|
||||
@ -1,16 +1,20 @@
|
||||
import { Component, Inject, OnInit } from '@angular/core';
|
||||
import { UntypedFormGroup } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';
|
||||
import { Dossier, File, IFileAttributeConfig } from '@red/domain';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { FileAttributesService } from '@services/entity-services/file-attributes.service';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { FilesService } from '@services/files/files.service';
|
||||
import { BaseDialogComponent } from '@iqser/common-ui';
|
||||
import { BaseDialogComponent, CircleButtonComponent, DynamicInputComponent, IconButtonComponent } from '@iqser/common-ui';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import dayjs from 'dayjs';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
templateUrl: './document-info-dialog.component.html',
|
||||
standalone: true,
|
||||
imports: [ReactiveFormsModule, NgIf, NgForOf, DynamicInputComponent, IconButtonComponent, TranslateModule, CircleButtonComponent],
|
||||
})
|
||||
export class DocumentInfoDialogComponent extends BaseDialogComponent implements OnInit {
|
||||
form: UntypedFormGroup;
|
||||
|
||||
@ -1,6 +1,14 @@
|
||||
import { Component, inject, OnInit } from '@angular/core';
|
||||
import { FormControl, FormGroup } from '@angular/forms';
|
||||
import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
DetailsRadioOption,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserDenyDirective,
|
||||
IqserDialogComponent,
|
||||
IqserHelpModeModule,
|
||||
} from '@iqser/common-ui';
|
||||
import { Dictionary, SuperTypes } from '@red/domain';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { DictionaryService } from '@services/entity-services/dictionary.service';
|
||||
@ -11,7 +19,15 @@ import { EditRedactionData, EditRedactResult } from '../../utils/dialog-types';
|
||||
import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component';
|
||||
import { Roles } from '@users/roles';
|
||||
import { DialogHelpModeKeys } from '../../utils/constants';
|
||||
import { ValueColumn } from '../../components/selected-annotations-table/selected-annotations-table.component';
|
||||
import {
|
||||
SelectedAnnotationsTableComponent,
|
||||
ValueColumn,
|
||||
} from '../../components/selected-annotations-table/selected-annotations-table.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
|
||||
interface TypeSelectOptions {
|
||||
type: string;
|
||||
@ -22,6 +38,23 @@ interface TypeSelectOptions {
|
||||
@Component({
|
||||
templateUrl: './edit-redaction-dialog.component.html',
|
||||
styleUrls: ['./edit-redaction-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
TranslateModule,
|
||||
SelectedAnnotationsTableComponent,
|
||||
MatFormField,
|
||||
NgIf,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
MatTooltip,
|
||||
IconButtonComponent,
|
||||
IqserHelpModeModule,
|
||||
IqserDenyDirective,
|
||||
CircleButtonComponent,
|
||||
],
|
||||
})
|
||||
export class EditRedactionDialogComponent
|
||||
extends IqserDialogComponent<EditRedactionDialogComponent, EditRedactionData, EditRedactResult>
|
||||
|
||||
@ -1,14 +1,30 @@
|
||||
import { Component, Inject, OnInit } from '@angular/core';
|
||||
import { UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { BaseDialogComponent, getConfig } from '@iqser/common-ui';
|
||||
import {
|
||||
BaseDialogComponent,
|
||||
CircleButtonComponent,
|
||||
getConfig,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IqserDenyDirective,
|
||||
IqserHelpModeModule,
|
||||
} from '@iqser/common-ui';
|
||||
import { JustificationsService } from '@services/entity-services/justifications.service';
|
||||
import { Dossier, ILegalBasisChangeRequest } from '@red/domain';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { Roles } from '@users/roles';
|
||||
import { ValueColumn } from '../../components/selected-annotations-table/selected-annotations-table.component';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import {
|
||||
SelectedAnnotationsTableComponent,
|
||||
ValueColumn,
|
||||
} from '../../components/selected-annotations-table/selected-annotations-table.component';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
export interface LegalBasisOption {
|
||||
label?: string;
|
||||
@ -22,6 +38,24 @@ const DOCUMINE_LEGAL_BASIS = 'n-a.';
|
||||
selector: 'redaction-force-annotation-dialog',
|
||||
templateUrl: './force-annotation-dialog.component.html',
|
||||
styleUrls: ['./force-annotation-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
NgIf,
|
||||
SelectedAnnotationsTableComponent,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
MatTooltip,
|
||||
HasScrollbarDirective,
|
||||
TranslateModule,
|
||||
IconButtonComponent,
|
||||
IqserHelpModeModule,
|
||||
IqserDenyDirective,
|
||||
CircleButtonComponent,
|
||||
NgForOf,
|
||||
],
|
||||
})
|
||||
export class ForceAnnotationDialogComponent extends BaseDialogComponent implements OnInit {
|
||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||
|
||||
@ -1,13 +1,25 @@
|
||||
import { Component, Inject } from '@angular/core';
|
||||
import { UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { ReactiveFormsModule, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogClose, MatDialogRef } from '@angular/material/dialog';
|
||||
import { EarmarkOperation, EarmarkOperationPages } from '@red/domain';
|
||||
import { BaseDialogComponent, DetailsRadioOption } from '@iqser/common-ui';
|
||||
import {
|
||||
BaseDialogComponent,
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
DetailsRadioOption,
|
||||
IconButtonComponent,
|
||||
IqserDenyDirective,
|
||||
IqserHelpModeModule,
|
||||
} from '@iqser/common-ui';
|
||||
import { EarmarksService } from '@services/files/earmarks.service';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { highlightsTranslations } from '@translations/highlights-translations';
|
||||
import { Roles } from '@users/roles';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { ColorPickerModule } from 'ngx-color-picker';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
export interface HighlightActionData {
|
||||
readonly operation: EarmarkOperation;
|
||||
@ -21,6 +33,20 @@ export interface HighlightActionData {
|
||||
|
||||
@Component({
|
||||
templateUrl: './highlight-action-dialog.component.html',
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
NgIf,
|
||||
ColorPickerModule,
|
||||
DetailsRadioComponent,
|
||||
MatCheckbox,
|
||||
TranslateModule,
|
||||
IconButtonComponent,
|
||||
IqserHelpModeModule,
|
||||
IqserDenyDirective,
|
||||
CircleButtonComponent,
|
||||
MatDialogClose,
|
||||
],
|
||||
})
|
||||
export class HighlightActionDialogComponent extends BaseDialogComponent {
|
||||
readonly translations = highlightsTranslations;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Component, ElementRef, Inject, ViewChild } from '@angular/core';
|
||||
import { BaseDialogComponent } from '@iqser/common-ui';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { BaseDialogComponent, CircleButtonComponent, IconButtonComponent, UploadFileComponent } from '@iqser/common-ui';
|
||||
import { MAT_DIALOG_DATA, MatDialogClose, MatDialogRef } from '@angular/material/dialog';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { RedactionImportService } from '@services/files/redaction-import.service';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
@ -8,6 +8,9 @@ import { HttpStatusCode } from '@angular/common/http';
|
||||
import { extractPageRanges } from '@utils/page-ranges-mapper';
|
||||
import { File } from '@red/domain';
|
||||
import { FileDropOverlayService } from '@upload-download/services/file-drop-overlay.service';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
|
||||
interface ImportData {
|
||||
dossierId: string;
|
||||
@ -17,6 +20,8 @@ interface ImportData {
|
||||
@Component({
|
||||
templateUrl: './import-redactions-dialog.html',
|
||||
styleUrls: ['./import-redactions-dialog.scss'],
|
||||
standalone: true,
|
||||
imports: [UploadFileComponent, MatCheckbox, TranslateModule, FormsModule, IconButtonComponent, CircleButtonComponent, MatDialogClose],
|
||||
})
|
||||
export class ImportRedactionsDialogComponent extends BaseDialogComponent {
|
||||
@ViewChild('attachFileInput', { static: true }) attachFileInput: ElementRef;
|
||||
@ -101,7 +106,7 @@ export class ImportRedactionsDialogComponent extends BaseDialogComponent {
|
||||
};
|
||||
}
|
||||
|
||||
close () {
|
||||
close() {
|
||||
this._fileDropOverlayService.toggleImportingRedactions();
|
||||
return super.close();
|
||||
}
|
||||
|
||||
@ -1,8 +1,15 @@
|
||||
import { Component, Inject, OnInit } from '@angular/core';
|
||||
import { Validators } from '@angular/forms';
|
||||
import { ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { BaseDialogComponent, IqserPermissionsService } from '@iqser/common-ui';
|
||||
import {
|
||||
BaseDialogComponent,
|
||||
CircleButtonComponent,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IqserDenyDirective,
|
||||
IqserPermissionsService,
|
||||
} from '@iqser/common-ui';
|
||||
import { ManualRedactionEntryWrapper } from '@models/file/manual-redaction-entry.wrapper';
|
||||
import { Dictionary, Dossier, File, IAddRedactionRequest, SuperTypes } from '@red/domain';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
@ -12,6 +19,12 @@ import { Roles } from '@users/roles';
|
||||
import { firstValueFrom } from 'rxjs';
|
||||
import { ManualRedactionService } from '../../services/manual-redaction.service';
|
||||
import { REDAnnotationManager } from '../../../pdf-viewer/services/annotation-manager.service';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { MatCheckbox } from '@angular/material/checkbox';
|
||||
|
||||
export interface LegalBasisOption {
|
||||
label?: string;
|
||||
@ -22,6 +35,23 @@ export interface LegalBasisOption {
|
||||
@Component({
|
||||
templateUrl: './manual-annotation-dialog.component.html',
|
||||
styleUrls: ['./manual-annotation-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
NgIf,
|
||||
CircleButtonComponent,
|
||||
TranslateModule,
|
||||
HasScrollbarDirective,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
MatTooltip,
|
||||
IqserDenyDirective,
|
||||
MatCheckbox,
|
||||
IconButtonComponent,
|
||||
],
|
||||
})
|
||||
export class ManualAnnotationDialogComponent extends BaseDialogComponent implements OnInit {
|
||||
readonly #dossier: Dossier;
|
||||
|
||||
@ -1,7 +1,15 @@
|
||||
import { Component, inject, OnInit } from '@angular/core';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { FormBuilder } from '@angular/forms';
|
||||
import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
DetailsRadioOption,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserDialogComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { AnnotationWrapper } from '@models/file/annotation.wrapper';
|
||||
import { Dictionary, IAddRedactionRequest, SuperTypes } from '@red/domain';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
@ -12,11 +20,38 @@ import { tap } from 'rxjs/operators';
|
||||
import { getRedactOrHintOptions, RedactOrHintOption, RedactOrHintOptions } from '../../utils/dialog-options';
|
||||
import { RedactRecommendationData, RedactRecommendationResult } from '../../utils/dialog-types';
|
||||
import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component';
|
||||
import { ValueColumn } from '../../components/selected-annotations-table/selected-annotations-table.component';
|
||||
import {
|
||||
SelectedAnnotationsTableComponent,
|
||||
ValueColumn,
|
||||
} from '../../components/selected-annotations-table/selected-annotations-table.component';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
|
||||
@Component({
|
||||
templateUrl: './redact-recommendation-dialog.component.html',
|
||||
styleUrl: './redact-recommendation-dialog.component.scss',
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
SelectedAnnotationsTableComponent,
|
||||
DetailsRadioComponent,
|
||||
MatFormField,
|
||||
NgIf,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
MatTooltip,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
TranslateModule,
|
||||
CircleButtonComponent,
|
||||
MatDialogClose,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
],
|
||||
})
|
||||
export class RedactRecommendationDialogComponent
|
||||
extends IqserDialogComponent<RedactRecommendationDialogComponent, RedactRecommendationData, RedactRecommendationResult>
|
||||
|
||||
@ -1,7 +1,15 @@
|
||||
import { Component, inject, OnInit } from '@angular/core';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
DetailsRadioOption,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserDialogComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { Dictionary, IAddRedactionRequest, SuperTypes } from '@red/domain';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { DictionaryService } from '@services/entity-services/dictionary.service';
|
||||
@ -15,12 +23,38 @@ import { RedactTextData, RedactTextResult } from '../../utils/dialog-types';
|
||||
import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults';
|
||||
import { AsyncPipe, NgClass, NgForOf, NgIf, NgStyle } from '@angular/common';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
|
||||
const MAXIMUM_TEXT_AREA_WIDTH = 421;
|
||||
|
||||
@Component({
|
||||
templateUrl: './redact-text-dialog.component.html',
|
||||
styleUrls: ['./redact-text-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
NgClass,
|
||||
NgIf,
|
||||
NgStyle,
|
||||
HasScrollbarDirective,
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
NgForOf,
|
||||
MatTooltip,
|
||||
TranslateModule,
|
||||
AsyncPipe,
|
||||
IconButtonComponent,
|
||||
MatDialogClose,
|
||||
],
|
||||
})
|
||||
export class RedactTextDialogComponent
|
||||
extends IqserDialogComponent<RedactTextDialogComponent, RedactTextData, RedactTextResult>
|
||||
|
||||
@ -1,20 +1,50 @@
|
||||
import { Component, computed } from '@angular/core';
|
||||
import { FormBuilder, UntypedFormGroup } from '@angular/forms';
|
||||
import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
DetailsRadioOption,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserDenyDirective,
|
||||
IqserDialogComponent,
|
||||
IqserHelpModeModule,
|
||||
} from '@iqser/common-ui';
|
||||
import { getRemoveRedactionOptions, RemoveRedactionOption, RemoveRedactionOptions } from '../../utils/dialog-options';
|
||||
import { RemoveRedactionData, RemoveRedactionResult } from '../../utils/dialog-types';
|
||||
import { Roles } from '@users/roles';
|
||||
import { DialogHelpModeKeys } from '../../utils/constants';
|
||||
import { toSignal } from '@angular/core/rxjs-interop';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { ValueColumn } from '../../components/selected-annotations-table/selected-annotations-table.component';
|
||||
import {
|
||||
SelectedAnnotationsTableComponent,
|
||||
ValueColumn,
|
||||
} from '../../components/selected-annotations-table/selected-annotations-table.component';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults';
|
||||
import { stringToBoolean } from '@utils/functions';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NgStyle } from '@angular/common';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
|
||||
@Component({
|
||||
templateUrl: './remove-redaction-dialog.component.html',
|
||||
styleUrls: ['./remove-redaction-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
TranslateModule,
|
||||
NgStyle,
|
||||
SelectedAnnotationsTableComponent,
|
||||
DetailsRadioComponent,
|
||||
IconButtonComponent,
|
||||
IqserHelpModeModule,
|
||||
CircleButtonComponent,
|
||||
HasScrollbarDirective,
|
||||
MatDialogClose,
|
||||
IqserDenyDirective,
|
||||
],
|
||||
})
|
||||
export class RemoveRedactionDialogComponent extends IqserDialogComponent<
|
||||
RemoveRedactionDialogComponent,
|
||||
|
||||
@ -1,14 +1,42 @@
|
||||
import { Component, inject } from '@angular/core';
|
||||
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
|
||||
import { DetailsRadioOption, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||
import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
DetailsRadioOption,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
IconButtonTypes,
|
||||
IqserDialogComponent,
|
||||
} from '@iqser/common-ui';
|
||||
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
|
||||
import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
|
||||
import { getResizeRedactionOptions, ResizeOptions, ResizeRedactionOption } from '../../utils/dialog-options';
|
||||
import { ResizeRedactionData, ResizeRedactionResult } from '../../utils/dialog-types';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { MatDialogClose } from '@angular/material/dialog';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
templateUrl: './resize-redaction-dialog.component.html',
|
||||
styleUrls: ['./resize-redaction-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
ReactiveFormsModule,
|
||||
TranslateModule,
|
||||
DetailsRadioComponent,
|
||||
MatFormField,
|
||||
MatSelectTrigger,
|
||||
MatSelect,
|
||||
MatOption,
|
||||
IconButtonComponent,
|
||||
CircleButtonComponent,
|
||||
HasScrollbarDirective,
|
||||
MatDialogClose,
|
||||
NgIf,
|
||||
],
|
||||
})
|
||||
export class ResizeRedactionDialogComponent extends IqserDialogComponent<
|
||||
ResizeRedactionDialogComponent,
|
||||
|
||||
@ -1,15 +1,18 @@
|
||||
import { ActivatedRouteSnapshot, NavigationExtras, Router, RouterLink } from '@angular/router';
|
||||
import { ChangeDetectorRef, Component, effect, NgZone, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
||||
import { ActivatedRouteSnapshot, NavigationExtras, Router } from '@angular/router';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { ComponentCanDeactivate } from '@guards/can-deactivate.guard';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
CircleButtonTypes,
|
||||
ConfirmOption,
|
||||
ConfirmOptions,
|
||||
CustomError,
|
||||
DisableStopPropagationDirective,
|
||||
ErrorService,
|
||||
getConfig,
|
||||
IConfirmationDialogData,
|
||||
IqserAllowDirective,
|
||||
IqserDialog,
|
||||
LoadingService,
|
||||
Toaster,
|
||||
@ -57,11 +60,36 @@ import { StampService } from './services/stamp.service';
|
||||
import { ViewModeService } from './services/view-mode.service';
|
||||
import { RedactTextData } from './utils/dialog-types';
|
||||
import { MultiSelectService } from './services/multi-select.service';
|
||||
import { NgIf } from '@angular/common';
|
||||
import { ViewSwitchComponent } from './components/view-switch/view-switch.component';
|
||||
import { ProcessingIndicatorComponent } from '@shared/components/processing-indicator/processing-indicator.component';
|
||||
import { UserManagementComponent } from './components/user-management/user-management.component';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { InitialsAvatarComponent } from '@common-ui/users';
|
||||
import { FileActionsComponent } from '../shared-dossiers/components/file-actions/file-actions.component';
|
||||
import { FilePreviewRightContainerComponent } from './components/right-container/file-preview-right-container.component';
|
||||
import { TypeFilterComponent } from '@shared/components/type-filter/type-filter.component';
|
||||
|
||||
@Component({
|
||||
templateUrl: './file-preview-screen.component.html',
|
||||
styleUrls: ['./file-preview-screen.component.scss'],
|
||||
providers: filePreviewScreenProviders,
|
||||
standalone: true,
|
||||
imports: [
|
||||
NgIf,
|
||||
ViewSwitchComponent,
|
||||
ProcessingIndicatorComponent,
|
||||
UserManagementComponent,
|
||||
TranslateModule,
|
||||
InitialsAvatarComponent,
|
||||
CircleButtonComponent,
|
||||
IqserAllowDirective,
|
||||
FileActionsComponent,
|
||||
DisableStopPropagationDirective,
|
||||
RouterLink,
|
||||
FilePreviewRightContainerComponent,
|
||||
TypeFilterComponent,
|
||||
],
|
||||
})
|
||||
export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnInit, OnDestroy, OnAttach, OnDetach, ComponentCanDeactivate {
|
||||
readonly circleButtonTypes = CircleButtonTypes;
|
||||
|
||||
@ -1,170 +0,0 @@
|
||||
import { OverlayModule } from '@angular/cdk/overlay';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { ReplaceNbspPipe } from '@common-ui/pipes/replace-nbsp.pipe';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import {
|
||||
CapitalizePipe,
|
||||
CircleButtonComponent,
|
||||
DetailsRadioComponent,
|
||||
DisableStopPropagationDirective,
|
||||
DynamicInputComponent,
|
||||
EditableInputComponent,
|
||||
EmptyStateComponent,
|
||||
HasScrollbarDirective,
|
||||
IconButtonComponent,
|
||||
InputWithActionComponent,
|
||||
IqserAllowDirective,
|
||||
IqserDenyDirective,
|
||||
IqserHelpModeModule,
|
||||
IqserRoutes,
|
||||
IqserUploadFileModule,
|
||||
LogPipe,
|
||||
PreventDefaultDirective,
|
||||
RoundCheckboxComponent,
|
||||
StopPropagationDirective,
|
||||
} from '@iqser/common-ui';
|
||||
import { IqserFiltersModule } from '@iqser/common-ui/lib/filtering';
|
||||
import { StatusBarComponent } from '@iqser/common-ui/lib/shared';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { SharedDossiersModule } from '../shared-dossiers/shared-dossiers.module';
|
||||
import { AnnotationActionsComponent } from './components/annotation-actions/annotation-actions.component';
|
||||
import { AnnotationCardComponent } from './components/annotation-card/annotation-card.component';
|
||||
import { AnnotationDetailsComponent } from './components/annotation-details/annotation-details.component';
|
||||
import { AnnotationReferenceComponent } from './components/annotation-reference/annotation-reference.component';
|
||||
import { AnnotationReferencesListComponent } from './components/annotation-references-list/annotation-references-list.component';
|
||||
import { AnnotationReferencesPageIndicatorComponent } from './components/annotation-references-page-indicator/annotation-references-page-indicator.component';
|
||||
import { AnnotationWrapperComponent } from './components/annotation-wrapper/annotation-wrapper.component';
|
||||
import { AnnotationsListComponent } from './components/annotations-list/annotations-list.component';
|
||||
import { CommentsComponent } from './components/comments/comments.component';
|
||||
import { DocumentInfoComponent } from './components/document-info/document-info.component';
|
||||
import { FileWorkloadComponent } from './components/file-workload/file-workload.component';
|
||||
import { HighlightsSeparatorComponent } from './components/highlights-separator/highlights-separator.component';
|
||||
import { PageExclusionComponent } from './components/page-exclusion/page-exclusion.component';
|
||||
import { PageIndicatorComponent } from './components/page-indicator/page-indicator.component';
|
||||
import { PagesComponent } from './components/pages/pages.component';
|
||||
import { ReadonlyBannerComponent } from './components/readonly-banner/readonly-banner.component';
|
||||
import { FilePreviewRightContainerComponent } from './components/right-container/file-preview-right-container.component';
|
||||
import { UserManagementComponent } from './components/user-management/user-management.component';
|
||||
import { ViewSwitchComponent } from './components/view-switch/view-switch.component';
|
||||
import { AddHintDialogComponent } from './dialogs/add-hint-dialog/add-hint-dialog.component';
|
||||
import { ChangeLegalBasisDialogComponent } from './dialogs/change-legal-basis-dialog/change-legal-basis-dialog.component';
|
||||
import { AddAnnotationDialogComponent } from './dialogs/docu-mine/add-annotation-dialog/add-annotation-dialog.component';
|
||||
import { EditAnnotationDialogComponent } from './dialogs/docu-mine/edit-annotation-dialog/edit-annotation-dialog.component';
|
||||
import { RemoveAnnotationDialogComponent } from './dialogs/docu-mine/remove-annotation-dialog/remove-annotation-dialog.component';
|
||||
import { DocumentInfoDialogComponent } from './dialogs/document-info-dialog/document-info-dialog.component';
|
||||
import { EditRedactionDialogComponent } from './dialogs/edit-redaction-dialog/edit-redaction-dialog.component';
|
||||
import { ForceAnnotationDialogComponent } from './dialogs/force-redaction-dialog/force-annotation-dialog.component';
|
||||
import { HighlightActionDialogComponent } from './dialogs/highlight-action-dialog/highlight-action-dialog.component';
|
||||
import { ImportRedactionsDialogComponent } from './dialogs/import-redactions-dialog/import-redactions-dialog';
|
||||
import { ManualAnnotationDialogComponent } from './dialogs/manual-redaction-dialog/manual-annotation-dialog.component';
|
||||
import { RedactRecommendationDialogComponent } from './dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component';
|
||||
import { RedactTextDialogComponent } from './dialogs/redact-text-dialog/redact-text-dialog.component';
|
||||
import { RemoveRedactionDialogComponent } from './dialogs/remove-redaction-dialog/remove-redaction-dialog.component';
|
||||
import { ResizeRedactionDialogComponent } from './dialogs/resize-redaction-dialog/resize-redaction-dialog.component';
|
||||
import { FilePreviewScreenComponent } from './file-preview-screen.component';
|
||||
import { DocumentUnloadedGuard } from './services/document-unloaded.guard';
|
||||
import { FilePreviewDialogService } from './services/file-preview-dialog.service';
|
||||
import { ManualRedactionService } from './services/manual-redaction.service';
|
||||
import { TablesService } from './services/tables.service';
|
||||
import { SelectedAnnotationsTableComponent } from './components/selected-annotations-table/selected-annotations-table.component';
|
||||
import { SelectedAnnotationsListComponent } from './components/selected-annotations-list/selected-annotations-list.component';
|
||||
import { FileHeaderComponent } from './components/file-header/file-header.component';
|
||||
import { DocumineExportComponent } from './components/documine-export/documine-export.component';
|
||||
import { StructuredComponentManagementComponent } from './components/structured-component-management/structured-component-management.component';
|
||||
import { EditableStructuredComponentValueComponent } from './components/editable-structured-component-value/editable-structured-component-value.component';
|
||||
|
||||
const routes: IqserRoutes = [
|
||||
{
|
||||
path: '',
|
||||
component: FilePreviewScreenComponent,
|
||||
pathMatch: 'full',
|
||||
canDeactivate: [PendingChangesGuard, DocumentUnloadedGuard],
|
||||
},
|
||||
];
|
||||
|
||||
const dialogs = [
|
||||
ManualAnnotationDialogComponent,
|
||||
ForceAnnotationDialogComponent,
|
||||
ResizeRedactionDialogComponent,
|
||||
ChangeLegalBasisDialogComponent,
|
||||
HighlightActionDialogComponent,
|
||||
DocumentInfoDialogComponent,
|
||||
ImportRedactionsDialogComponent,
|
||||
RedactTextDialogComponent,
|
||||
EditRedactionDialogComponent,
|
||||
EditAnnotationDialogComponent,
|
||||
AddHintDialogComponent,
|
||||
RemoveRedactionDialogComponent,
|
||||
AddAnnotationDialogComponent,
|
||||
RemoveAnnotationDialogComponent,
|
||||
RedactRecommendationDialogComponent,
|
||||
];
|
||||
|
||||
const components = [
|
||||
FileWorkloadComponent,
|
||||
AnnotationDetailsComponent,
|
||||
AnnotationWrapperComponent,
|
||||
AnnotationsListComponent,
|
||||
PageIndicatorComponent,
|
||||
PagesComponent,
|
||||
PageExclusionComponent,
|
||||
AnnotationActionsComponent,
|
||||
CommentsComponent,
|
||||
DocumentInfoComponent,
|
||||
ViewSwitchComponent,
|
||||
UserManagementComponent,
|
||||
AnnotationReferencesListComponent,
|
||||
AnnotationCardComponent,
|
||||
AnnotationReferencesPageIndicatorComponent,
|
||||
HighlightsSeparatorComponent,
|
||||
AnnotationReferenceComponent,
|
||||
FilePreviewScreenComponent,
|
||||
FilePreviewRightContainerComponent,
|
||||
ReadonlyBannerComponent,
|
||||
FileHeaderComponent,
|
||||
DocumineExportComponent,
|
||||
StructuredComponentManagementComponent,
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
declarations: [...components, ...dialogs],
|
||||
imports: [
|
||||
RouterModule.forChild(routes),
|
||||
CommonModule,
|
||||
TranslateModule,
|
||||
OverlayModule,
|
||||
IqserHelpModeModule,
|
||||
IqserUsersModule,
|
||||
CapitalizePipe,
|
||||
IqserUploadFileModule,
|
||||
IqserFiltersModule,
|
||||
SharedModule,
|
||||
CircleButtonComponent,
|
||||
SharedDossiersModule,
|
||||
IconButtonComponent,
|
||||
EmptyStateComponent,
|
||||
StatusBarComponent,
|
||||
StopPropagationDirective,
|
||||
PreventDefaultDirective,
|
||||
HasScrollbarDirective,
|
||||
EditableInputComponent,
|
||||
DetailsRadioComponent,
|
||||
DynamicInputComponent,
|
||||
InputWithActionComponent,
|
||||
RoundCheckboxComponent,
|
||||
IqserAllowDirective,
|
||||
IqserDenyDirective,
|
||||
LogPipe,
|
||||
ReplaceNbspPipe,
|
||||
DisableStopPropagationDirective,
|
||||
SelectedAnnotationsTableComponent,
|
||||
SelectedAnnotationsListComponent,
|
||||
EditableStructuredComponentValueComponent,
|
||||
],
|
||||
providers: [FilePreviewDialogService, ManualRedactionService, DocumentUnloadedGuard, TablesService],
|
||||
})
|
||||
export class FilePreviewModule {}
|
||||
@ -0,0 +1,18 @@
|
||||
import { IqserRoutes } from '@iqser/common-ui';
|
||||
import { FilePreviewScreenComponent } from './file-preview-screen.component';
|
||||
import { PendingChangesGuard } from '@guards/can-deactivate.guard';
|
||||
import { DocumentUnloadedGuard } from './services/document-unloaded.guard';
|
||||
import { FilePreviewDialogService } from './services/file-preview-dialog.service';
|
||||
import { ManualRedactionService } from './services/manual-redaction.service';
|
||||
import { TablesService } from './services/tables.service';
|
||||
import { FileAssignService } from '../shared-dossiers/services/file-assign.service';
|
||||
|
||||
export default [
|
||||
{
|
||||
path: '',
|
||||
component: FilePreviewScreenComponent,
|
||||
pathMatch: 'full',
|
||||
canDeactivate: [PendingChangesGuard, DocumentUnloadedGuard],
|
||||
providers: [FilePreviewDialogService, ManualRedactionService, DocumentUnloadedGuard, TablesService, FileAssignService],
|
||||
},
|
||||
] satisfies IqserRoutes;
|
||||
@ -6,7 +6,7 @@ import { IqserListingModule, StopPropagationDirective } from '@iqser/common-ui';
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { SearchItemTemplateComponent } from './search-item-template/search-item-template.component';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { StatusBarComponent } from '@iqser/common-ui/lib/shared';
|
||||
|
||||
const routes = [{ path: '', component: SearchScreenComponent }];
|
||||
@ -22,6 +22,7 @@ const routes = [{ path: '', component: SearchScreenComponent }];
|
||||
IqserListingModule,
|
||||
StatusBarComponent,
|
||||
StopPropagationDirective,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
})
|
||||
export class SearchModule {}
|
||||
|
||||
@ -1,9 +1,12 @@
|
||||
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
||||
import { DatePipe } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-date-column [date]',
|
||||
templateUrl: './date-column.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [DatePipe],
|
||||
})
|
||||
export class DateColumnComponent {
|
||||
@Input() isError = false;
|
||||
|
||||
@ -21,7 +21,7 @@ import { FilesService } from '@services/files/files.service';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { ReanalysisService, ReanalyzeQueryParams } from '@services/reanalysis.service';
|
||||
import { ExpandableFileActionsComponent } from '@shared/components/expandable-file-actions/expandable-file-actions.component';
|
||||
import { LongPressEvent } from '@shared/directives/long-press.directive';
|
||||
import { LongPressDirective, LongPressEvent } from '@shared/directives/long-press.directive';
|
||||
import { Roles } from '@users/roles';
|
||||
import { UserPreferenceService } from '@users/user-preference.service';
|
||||
import { setLocalStorageDataByFileId } from '@utils/local-storage';
|
||||
@ -34,11 +34,16 @@ import { ROTATION_ACTION_BUTTONS } from '../../../pdf-viewer/utils/constants';
|
||||
import { AssignReviewerApproverDialogComponent } from '../../dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component';
|
||||
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
|
||||
import { FileAssignService } from '../../services/file-assign.service';
|
||||
import { ProcessingIndicatorComponent } from '@shared/components/processing-indicator/processing-indicator.component';
|
||||
import { StatusBarComponent } from '@common-ui/shared';
|
||||
import { NgIf, NgTemplateOutlet } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-file-actions',
|
||||
templateUrl: './file-actions.component.html',
|
||||
styleUrls: ['./file-actions.component.scss'],
|
||||
standalone: true,
|
||||
imports: [ProcessingIndicatorComponent, StatusBarComponent, LongPressDirective, ExpandableFileActionsComponent, NgTemplateOutlet, NgIf],
|
||||
})
|
||||
export class FileActionsComponent implements OnChanges {
|
||||
@Input({ required: true }) file: File;
|
||||
|
||||
@ -26,21 +26,23 @@ import {
|
||||
} from '@iqser/common-ui';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { DossiersListingActionsComponent } from './components/dossiers-listing-actions/dossiers-listing-actions.component';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { SideNavComponent, SmallChipComponent, StatusBarComponent } from '@iqser/common-ui/lib/shared';
|
||||
import { SelectComponent } from '@shared/components/select/select.component';
|
||||
import { SnakeCasePipe } from '@common-ui/pipes/snake-case.pipe';
|
||||
import { EditDictionaryDialogComponent } from './dialogs/edit-dictionary-dialog/edit-dictionary-dialog.component';
|
||||
import { TeamMembersComponent } from '@shared/components/team-members/team-members.component';
|
||||
import { LongPressDirective } from '@shared/directives/long-press.directive';
|
||||
import { FileDownloadBtnComponent } from '@shared/components/buttons/file-download-btn/file-download-btn.component';
|
||||
import { AnnotationIconComponent } from '@shared/components/annotation-icon/annotation-icon.component';
|
||||
import { NamePipe } from '@common-ui/users/name.pipe';
|
||||
|
||||
const components = [
|
||||
FileActionsComponent,
|
||||
EditDossierGeneralInfoComponent,
|
||||
EditDossierDownloadPackageComponent,
|
||||
EditDossierDictionaryComponent,
|
||||
EditDossierAttributesComponent,
|
||||
EditDossierTeamComponent,
|
||||
FileActionsComponent,
|
||||
DateColumnComponent,
|
||||
DossiersListingActionsComponent,
|
||||
];
|
||||
const dialogs = [EditDossierDialogComponent, AssignReviewerApproverDialogComponent];
|
||||
@ -71,6 +73,12 @@ const dialogs = [EditDossierDialogComponent, AssignReviewerApproverDialogCompone
|
||||
SelectComponent,
|
||||
SnakeCasePipe,
|
||||
EditDictionaryDialogComponent,
|
||||
TeamMembersComponent,
|
||||
LongPressDirective,
|
||||
FileDownloadBtnComponent,
|
||||
AnnotationIconComponent,
|
||||
InitialsAvatarComponent,
|
||||
NamePipe,
|
||||
],
|
||||
})
|
||||
export class SharedDossiersModule {}
|
||||
|
||||
@ -5,6 +5,7 @@ import { AnnotationIconType } from '@red/domain';
|
||||
selector: 'redaction-annotation-icon [color] [type] [label]',
|
||||
templateUrl: './annotation-icon.component.html',
|
||||
styleUrls: ['./annotation-icon.component.scss'],
|
||||
standalone: true,
|
||||
})
|
||||
export class AnnotationIconComponent implements OnChanges {
|
||||
@Input() color: string;
|
||||
|
||||
@ -1,13 +1,33 @@
|
||||
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
||||
import { UserService } from '@users/user.service';
|
||||
import { User } from '@red/domain';
|
||||
import { List } from '@iqser/common-ui/lib/utils';
|
||||
import { MatFormField } from '@angular/material/form-field';
|
||||
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { NgForOf, NgTemplateOutlet } from '@angular/common';
|
||||
import { CircleButtonComponent, StopPropagationDirective } from '@iqser/common-ui';
|
||||
import { InitialsAvatarComponent } from '@common-ui/users';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-assign-user-dropdown',
|
||||
templateUrl: './assign-user-dropdown.component.html',
|
||||
styleUrls: ['./assign-user-dropdown.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [
|
||||
MatFormField,
|
||||
MatSelect,
|
||||
MatSelectTrigger,
|
||||
MatOption,
|
||||
FormsModule,
|
||||
TranslateModule,
|
||||
NgTemplateOutlet,
|
||||
StopPropagationDirective,
|
||||
CircleButtonComponent,
|
||||
NgForOf,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
})
|
||||
export class AssignUserDropdownComponent {
|
||||
private _currentUser: User | string;
|
||||
@ -16,7 +36,7 @@ export class AssignUserDropdownComponent {
|
||||
@Output() readonly save = new EventEmitter<User | string>();
|
||||
@Output() readonly cancel = new EventEmitter();
|
||||
|
||||
constructor(private readonly _userService: UserService) {}
|
||||
constructor() {}
|
||||
|
||||
get value(): User | string {
|
||||
return this._currentUser;
|
||||
|
||||
@ -1,15 +1,18 @@
|
||||
import { Component, inject, Input, OnChanges } from '@angular/core';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { CircleButtonType, CircleButtonTypes, IqserDialog, Toaster } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, CircleButtonType, CircleButtonTypes, IqserDialog, Toaster } from '@iqser/common-ui';
|
||||
import { Dossier, File, ProcessingFileStatuses } from '@red/domain';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { DownloadDialogComponent } from '@shared/dialogs/download-dialog/download-dialog.component';
|
||||
import { FileDownloadService } from '@upload-download/services/file-download.service';
|
||||
import { APP_BASE_HREF } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-file-download-btn',
|
||||
templateUrl: './file-download-btn.component.html',
|
||||
standalone: true,
|
||||
imports: [CircleButtonComponent, TranslateModule],
|
||||
})
|
||||
export class FileDownloadBtnComponent implements OnChanges {
|
||||
@Input({ required: true }) files: File[];
|
||||
|
||||
@ -1,18 +1,40 @@
|
||||
import { Component, inject, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core';
|
||||
import { Action, ActionTypes, Dossier, File } from '@red/domain';
|
||||
import { CircleButtonType, IqserDialog, Toaster } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, CircleButtonType, IqserDialog, StopPropagationDirective, Toaster } from '@iqser/common-ui';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { FileDownloadService } from '@upload-download/services/file-download.service';
|
||||
import { PermissionsService } from '@services/permissions.service';
|
||||
import { MatMenuTrigger } from '@angular/material/menu';
|
||||
import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';
|
||||
import { DownloadDialogComponent } from '@shared/dialogs/download-dialog/download-dialog.component';
|
||||
import { IqserTooltipPosition, trackByFactory } from '@iqser/common-ui/lib/utils';
|
||||
import { APP_BASE_HREF } from '@angular/common';
|
||||
import { APP_BASE_HREF, AsyncPipe, NgClass, NgForOf, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { FileDownloadBtnComponent } from '@shared/components/buttons/file-download-btn/file-download-btn.component';
|
||||
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-expandable-file-actions',
|
||||
templateUrl: './expandable-file-actions.component.html',
|
||||
styleUrls: ['./expandable-file-actions.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
CircleButtonComponent,
|
||||
TranslateModule,
|
||||
AsyncPipe,
|
||||
FileDownloadBtnComponent,
|
||||
NgIf,
|
||||
MatSlideToggle,
|
||||
MatTooltip,
|
||||
NgClass,
|
||||
MatMenuTrigger,
|
||||
MatMenu,
|
||||
MatIcon,
|
||||
MatMenuItem,
|
||||
NgForOf,
|
||||
StopPropagationDirective,
|
||||
],
|
||||
})
|
||||
export class ExpandableFileActionsComponent implements OnChanges {
|
||||
@Input({ required: true }) actions: Action[];
|
||||
|
||||
@ -15,6 +15,10 @@ import { FileAttributesService } from '@services/entity-services/file-attributes
|
||||
import { combineLatest, map, ReplaySubject } from 'rxjs';
|
||||
import { ContextComponent } from '@iqser/common-ui/lib/utils';
|
||||
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { FileAttributeComponent } from '../../../dossier-overview/components/file-attribute/file-attribute.component';
|
||||
import { FileStatsComponent } from '@shared/components/file-stats/file-stats.component';
|
||||
|
||||
interface FileNameColumnContext {
|
||||
primaryAttribute: IFileAttributeConfig;
|
||||
@ -25,6 +29,8 @@ interface FileNameColumnContext {
|
||||
templateUrl: './file-name-column.component.html',
|
||||
styleUrls: ['./file-name-column.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [MatTooltip, NgIf, AsyncPipe, FileAttributeComponent, FileStatsComponent],
|
||||
})
|
||||
export class FileNameColumnComponent extends ContextComponent<FileNameColumnContext> implements OnInit, OnChanges {
|
||||
readonly #reloadAttribute = new ReplaySubject<void>(1);
|
||||
|
||||
@ -1,9 +1,15 @@
|
||||
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { DatePipe, NgIf } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-file-stats',
|
||||
templateUrl: './file-stats.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [MatIcon, MatTooltip, NgIf, TranslateModule, DatePipe],
|
||||
})
|
||||
export class FileStatsComponent {
|
||||
@Input() file: { numberOfPages: number; excludedPages: number[]; lastOCRTime?: string };
|
||||
|
||||
@ -1,10 +1,15 @@
|
||||
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
||||
import { MatProgressBar } from '@angular/material/progress-bar';
|
||||
import { NgIf, PercentPipe } from '@angular/common';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-ocr-progress-bar',
|
||||
templateUrl: './ocr-progress-bar.component.html',
|
||||
styleUrls: ['./ocr-progress-bar.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [MatProgressBar, NgIf, MatTooltip, PercentPipe],
|
||||
})
|
||||
export class OcrProgressBarComponent {
|
||||
@Input() numberOfPagesToOCR: number;
|
||||
|
||||
@ -1,12 +1,18 @@
|
||||
import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core';
|
||||
import { File } from '@red/domain';
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||
import { MatTooltip } from '@angular/material/tooltip';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { NgIf } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-processing-indicator [file]',
|
||||
templateUrl: './processing-indicator.component.html',
|
||||
styleUrls: ['./processing-indicator.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [MatTooltip, TranslateModule, MatIcon, NgIf],
|
||||
})
|
||||
export class ProcessingIndicatorComponent implements OnChanges {
|
||||
tooltip: string;
|
||||
|
||||
@ -1,16 +1,21 @@
|
||||
import { Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, ViewChild } from '@angular/core';
|
||||
import { CircleButtonTypes } from '@iqser/common-ui';
|
||||
import { CircleButtonComponent, CircleButtonTypes, IqserAllowDirective } from '@iqser/common-ui';
|
||||
import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service';
|
||||
import { Roles } from '@users/roles';
|
||||
import { User } from '@red/domain';
|
||||
import { UserService } from '@users/user.service';
|
||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||
import { getCurrentUser, InitialsAvatarComponent } from '@iqser/common-ui/lib/users';
|
||||
import { List } from '@iqser/common-ui/lib/utils';
|
||||
import { NgForOf, NgIf } from '@angular/common';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-team-members',
|
||||
templateUrl: './team-members.component.html',
|
||||
styleUrls: ['./team-members.component.scss'],
|
||||
standalone: true,
|
||||
imports: [NgForOf, MatIcon, NgIf, CircleButtonComponent, IqserAllowDirective, TranslateModule, InitialsAvatarComponent],
|
||||
})
|
||||
export class TeamMembersComponent implements OnChanges {
|
||||
readonly circleButtonTypes = CircleButtonTypes;
|
||||
|
||||
@ -1,11 +1,16 @@
|
||||
import { Component, Input, OnChanges } from '@angular/core';
|
||||
import { INestedFilter } from '@iqser/common-ui/lib/filtering';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
||||
import { AsyncPipe, NgIf } from '@angular/common';
|
||||
import { MatIcon } from '@angular/material/icon';
|
||||
import { AnnotationIconComponent } from '@shared/components/annotation-icon/annotation-icon.component';
|
||||
|
||||
@Component({
|
||||
selector: 'redaction-type-filter',
|
||||
templateUrl: './type-filter.component.html',
|
||||
styleUrls: ['./type-filter.component.scss'],
|
||||
standalone: true,
|
||||
imports: [NgIf, MatIcon, AnnotationIconComponent, AsyncPipe, TranslateModule],
|
||||
})
|
||||
export class TypeFilterComponent implements OnChanges {
|
||||
private _needsAnalysisKeys: string[] = ['remove-only-here', 'analysis'];
|
||||
|
||||
@ -8,6 +8,7 @@ export interface LongPressEvent {
|
||||
|
||||
@Directive({
|
||||
selector: '[redactionLongPress]',
|
||||
standalone: true,
|
||||
})
|
||||
export class LongPressDirective {
|
||||
@Output() longPress = new EventEmitter();
|
||||
|
||||
@ -1,11 +1,9 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ScrollingModule } from '@angular/cdk/scrolling';
|
||||
import { FileDownloadBtnComponent } from './components/buttons/file-download-btn/file-download-btn.component';
|
||||
import { MatConfigModule } from '../mat-config/mat-config.module';
|
||||
import { IconsModule } from '../icons/icons.module';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { AnnotationIconComponent } from './components/annotation-icon/annotation-icon.component';
|
||||
import { DonutChartComponent } from './components/donut-chart/donut-chart.component';
|
||||
import {
|
||||
CircleButtonComponent,
|
||||
@ -21,17 +19,9 @@ import {
|
||||
import { NavigateLastDossiersScreenDirective } from './directives/navigate-last-dossiers-screen.directive';
|
||||
import { DictionaryManagerComponent } from './components/dictionary-manager/dictionary-manager.component';
|
||||
import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor';
|
||||
import { AssignUserDropdownComponent } from './components/assign-user-dropdown/assign-user-dropdown.component';
|
||||
import { DatePipe } from './pipes/date.pipe';
|
||||
import { LongPressDirective } from './directives/long-press.directive';
|
||||
import { TypeFilterComponent } from './components/type-filter/type-filter.component';
|
||||
import { TeamMembersComponent } from './components/team-members/team-members.component';
|
||||
import { EditorComponent } from './components/editor/editor.component';
|
||||
import { ExpandableFileActionsComponent } from './components/expandable-file-actions/expandable-file-actions.component';
|
||||
import { ProcessingIndicatorComponent } from './components/processing-indicator/processing-indicator.component';
|
||||
import { DossierStateComponent } from './components/dossier-state/dossier-state.component';
|
||||
import { FileStatsComponent } from './components/file-stats/file-stats.component';
|
||||
import { FileNameColumnComponent } from './components/file-name-column/file-name-column.component';
|
||||
import { DossierNameColumnComponent } from './components/dossier-name-column/dossier-name-column.component';
|
||||
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
||||
import { DossiersTypeSwitchComponent } from './components/dossiers-type-switch/dossiers-type-switch.component';
|
||||
@ -42,7 +32,6 @@ import { SharedDialogService } from './services/dialog.service';
|
||||
import { AddEditEntityComponent } from './components/add-edit-entity/add-edit-entity.component';
|
||||
import { ColorPickerModule } from 'ngx-color-picker';
|
||||
import { WatermarkSelectorComponent } from './components/dossier-watermark-selector/watermark-selector.component';
|
||||
import { OcrProgressBarComponent } from './components/ocr-progress-bar/ocr-progress-bar.component';
|
||||
import { CustomDateAdapter } from '@shared/CustomDateAdapter';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { SmallChipComponent } from '@iqser/common-ui/lib/shared';
|
||||
@ -50,30 +39,17 @@ import { SelectComponent } from '@shared/components/select/select.component';
|
||||
import { FileAttributeComponent } from '../dossier-overview/components/file-attribute/file-attribute.component';
|
||||
import { MatDividerModule } from '@angular/material/divider';
|
||||
|
||||
const buttons = [FileDownloadBtnComponent];
|
||||
|
||||
const components = [
|
||||
AnnotationIconComponent,
|
||||
DictionaryManagerComponent,
|
||||
AssignUserDropdownComponent,
|
||||
TypeFilterComponent,
|
||||
TeamMembersComponent,
|
||||
ExpandableFileActionsComponent,
|
||||
ProcessingIndicatorComponent,
|
||||
DossierStateComponent,
|
||||
DossierNameColumnComponent,
|
||||
FileStatsComponent,
|
||||
FileNameColumnComponent,
|
||||
DossiersTypeSwitchComponent,
|
||||
AddDossierDialogComponent,
|
||||
WatermarkSelectorComponent,
|
||||
AddEditEntityComponent,
|
||||
OcrProgressBarComponent,
|
||||
|
||||
...buttons,
|
||||
];
|
||||
|
||||
const utils = [DatePipe, NavigateLastDossiersScreenDirective, LongPressDirective];
|
||||
const utils = [DatePipe, NavigateLastDossiersScreenDirective];
|
||||
|
||||
const services = [SharedDialogService];
|
||||
|
||||
|
||||
@ -7,7 +7,8 @@ import { TrashTableItemComponent } from './trash-screen/trash-table-item/trash-t
|
||||
import { SharedModule } from '@shared/shared.module';
|
||||
import { TrashDialogService } from './services/trash-dialog.service';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users';
|
||||
import { FileNameColumnComponent } from '@shared/components/file-name-column/file-name-column.component';
|
||||
|
||||
const routes = [{ path: '', component: TrashScreenComponent }];
|
||||
|
||||
@ -21,6 +22,8 @@ const routes = [{ path: '', component: TrashScreenComponent }];
|
||||
TranslateModule,
|
||||
IqserListingModule,
|
||||
CircleButtonComponent,
|
||||
FileNameColumnComponent,
|
||||
InitialsAvatarComponent,
|
||||
],
|
||||
providers: [TrashDialogService],
|
||||
})
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 0b64044f576f38e4bb79033563a20400a62c15b6
|
||||
Subproject commit 04ae68891c9298b92327868006d1e7c79529c7e6
|
||||
Loading…
x
Reference in New Issue
Block a user